Berch's assembler
-
- Posts: 12
- Joined: Fri Oct 10, 2008 7:21 am
- Location: Wellington, New Zealand
Re: Berch's assembler
Great templates sirmorris, thanks.
Quick question,is there any way to append lines of basic code to the .P file.
Or alternatively, what is the most suitable to load some machine code, followed by loading some basic. Do I need to set the RAMTOP and shift my machine code up there?
Quick question,is there any way to append lines of basic code to the .P file.
Or alternatively, what is the most suitable to load some machine code, followed by loading some basic. Do I need to set the RAMTOP and shift my machine code up there?
Re: Berch's assembler
What usually happens is that any required machine code is dumped above RAMTOP. It's possible to do this in one operation, without the need for a double load, but I don't know what you'd gain.
What's the application? A toolkit that is expected to live across a number of program loads?
Tell me exactly what you have in mind - there's a few other options to consider too..!
What's the application? A toolkit that is expected to live across a number of program loads?
Tell me exactly what you have in mind - there's a few other options to consider too..!
-
- Posts: 12
- Joined: Fri Oct 10, 2008 7:21 am
- Location: Wellington, New Zealand
Re: Berch's assembler
I'm trying to write a simple game which will end up being standalone in machine code, no basic required.
My request is because I'm simply being lazy during testing/debugging, and don't want to retype every time I re-assemble and re-load the P file. About 6 lines of basic that take user input to POKE an adress,and then a for next loop to PEEK a sequence of addresses.
Also handy to know for future reference of course.
My request is because I'm simply being lazy during testing/debugging, and don't want to retype every time I re-assemble and re-load the P file. About 6 lines of basic that take user input to POKE an adress,and then a for next loop to PEEK a sequence of addresses.
Also handy to know for future reference of course.
Re: Berch's assembler
Hmm.
It'd be hacky but what I'd do is the following:
Write the basic, without the REM, in EO. (must be v1.0a)
Type PRINT PEEK 16396 + 256 * PEEK 16397 - 16509
This gives the length of the basic program.
Save a memory block from 16509 with the length calculated above.
View the saved memory in a hex editor or other tool to see the raw bytes for example:Process the raw hex and replace the code in line1.asm like so:
This would work well for longer BASIC programs, but for one or two lines I'd spend some time with no$'s zx81 docs and just work out what the line should be in raw token form, much like in the template.
I've just checked the output in EO and it appeared as if the template I posted wasn't working - the line 1 REM was fouling up. Have I gone insane? No - I think it was because there was not much data in the rem line... Adding some padding made it work as expected. Can anyone confirm this? Xav?
It'd be hacky but what I'd do is the following:
Write the basic, without the REM, in EO. (must be v1.0a)
Type PRINT PEEK 16396 + 256 * PEEK 16397 - 16509
This gives the length of the basic program.
Save a memory block from 16509 with the length calculated above.
View the saved memory in a hex editor or other tool to see the raw bytes for example:
Code: Select all
00 0A 05 00 F5 0B 35 0B 76 00 14 03 00 EE 34 76 00 1E 0F 00 F4 1D 22 21 1D 20 7E 8F 01 04 00 00 1A 34 76
Code: Select all
;= Second BASIC line, calls ASM ==================================
line1:
.byte $00,$0A,$05,$00,$F5,$0B,$35,$0B
.byte $76,$00,$14,$03,$00,$EE,$34,$76
.byte $00,$1E,$0F,$00,$F4,$1D,$22,$21
.byte $1D,$20,$7E,$8F,$01,$04,$00,$00
.byte $1A,$34,$76
;- Collapsed display file --------------------------------------------
I've just checked the output in EO and it appeared as if the template I posted wasn't working - the line 1 REM was fouling up. Have I gone insane? No - I think it was because there was not much data in the rem line... Adding some padding made it work as expected. Can anyone confirm this? Xav?
-
- Posts: 12
- Joined: Fri Oct 10, 2008 7:21 am
- Location: Wellington, New Zealand
Re: Berch's assembler
Thanks to sirmorris' templates, a stunning emulator and a scanned PDF of 'Mastering Machine Code on your ZX81' I've managed to cobble together my first assembly language program so I thought I'd share it. A simple game, based on the Casio mg-888 game-calculator of the same era as the zeddy, of chance where you have to try and wipe out all the numbers by selecting them. The total of the selection should equal the total of the dice, then newline wipes the numbers and rolls the dice again. Depending on the option selected at the start, you can pass if the total can't be made with the numbers left on the board (or you can pass any time you like). 0 to clear your selection if you've made an error.
And here's the code if anyone is really bored. I expect it's horribly sloppy and inefficient (e.g. using whole bytes to check true/false states instead of single bits) but I don't have the energy or motivation (on to the next 'project') to do any optimisation. In saying that, if anyone spots any glaring errors or opportunities for improvement or enhancements I'm keen to hear it.
Re: Berch's assembler
Hi floydbloke
nice game cant wait for your next project. i noticed in an earlier post that you might use
zxas as your assembler if so use this link and download zxas(ge) for the ts1000, it doesn't have the bugs of the original zxas (ie error reports and non compilation of perfectly legal instructions).
http://www.zx81stuff.org.uk/zx81/indexframes.html
Also mastering machine code on your zx81 is iffy in places (addresses for the calculator routines are a bit out) depending on which revision of the book you have.
hope this is of use
all the best ,moggy
nice game cant wait for your next project. i noticed in an earlier post that you might use
zxas as your assembler if so use this link and download zxas(ge) for the ts1000, it doesn't have the bugs of the original zxas (ie error reports and non compilation of perfectly legal instructions).
http://www.zx81stuff.org.uk/zx81/indexframes.html
Also mastering machine code on your zx81 is iffy in places (addresses for the calculator routines are a bit out) depending on which revision of the book you have.
hope this is of use
all the best ,moggy
Re: Berch's assembler
hi users!
the original file
viewtopic.php?f=6&t=133&p=1009&hilit=TEMPER.ZIP#p1009
is gone in the crash...
does anybody have the .zip-file? can you post it here again?
that would be nice!
greetings
jens
the original file
viewtopic.php?f=6&t=133&p=1009&hilit=TEMPER.ZIP#p1009
is gone in the crash...
does anybody have the .zip-file? can you post it here again?
that would be nice!
greetings
jens
eyerything will be okay in the end.
if it´s not okay, it´s not the end.
and: uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
if it´s not okay, it´s not the end.
and: uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
Re: Berch's assembler
In fact all the files from this thread are missing - including the assembler itself and the dice game files.
Oddly I have no recollection of ever having read this thread before!
Where is floydbloke when you need him ?
Oddly I have no recollection of ever having read this thread before!
Where is floydbloke when you need him ?
Rich Mellor
RWAP Software
RWAP Adventures
SellMyRetro
Retro-Printer Module
Also Involved in:
Icephorm
RWAP Software
RWAP Adventures
SellMyRetro
Retro-Printer Module
Also Involved in:
Icephorm
Re: Berch's assembler
Here's the template:
It _should_ work as I've edited it from a working project, but you never know.
C
Code: Select all
; TASM cross-assembler definitions
;
#define db .byte
#define dw .word
#define ds .block
#define org .org
#define end .end
; A useful reference
;
; ____0___1___2___3___4___5___6___7___8___9___A___B___C___D___E___F____
; 00 SPC GRA GRA GRA GRA GRA GRA GRA GRA GRA GRA " GBP $ : ? 0F
; 10 ( ) > < = + - * / ; , . 0 1 2 3 1F
; 20 4 5 6 7 8 9 A B C D E F G H I J 2F
; 30 K L M N O P Q R S T U V W X Y Z 3F
; -------------=-=-=-=-=-=-=-=-=-=-=-------------
; ASSEMBLER TEMPLATE
; -------------=-=-=-=-=-=-=-=-=-=-=-------------
org $4009
ERR_NR .equ $4000
FLAGS .equ $4001
ERR_SP .equ $4002
RAMTOP .equ $4004
MODE .equ $4006
PPC .equ $4007
; System variables as saved to tape
VERSN: db 0
E_PPC: dw 0
D_FILE: dw dfile
DF_CC: dw dfile+1
VARS: dw var
DEST: dw 0
E_LINE: dw var+1
CH_ADD: dw last-1
X_PTR: dw 0
STKBOT: dw last
STKEND: dw last
BERG: db 0
MEM: dw MEMBOT
db 0
DF_SZ: db 2
S_TOP: dw 1
LAST_K: db $FF,$FF,$FF
MARGIN: db 55
NXTLIN: dw line1
OLDPPC: dw 0
FLAGX: db 0
STRLEN: dw 0
T_ADDR: dw $0C8D
SEED: dw 0
FRAMES: dw $FFFF
COORDS: db 0,0
PR_CC: db $BC
S_POSN: db 33,24
CDFLAG: db 01000000B
PRTBUF: ds 33 ; print buffer - iow scratch ram for us :)
MEMBOT: ds 30 ; calculator's scratch
ds 2
line0:
db $00,$00 ; line number
dw line1-$-2 ; line length
db $ea ; REM
db $7e ; m/c for ld a,(hl), BASIC token for 'next 5 bytes are fp number'
jp go ; 3 bytes
db 0,0 ; +2 bytes ... this effectively hides the m/c in the REM
; -------------=-=-=-=-=-=-=-=-=-=-=-------------
go:
;;;; PUT CODE HERE :)
ret
db $76 ; N/L - end of line 0
line1:
db 0,1 ; line number
dw dfile-$-2 ; line length
db $f9,$d4,$c5 ; RAND USR VAL
db $b,$1d,$22,$21,$1d,$20,$b ; "16514"
db $76 ; N/L - end of line 1
;- Display file --------------------------------------------
dfile:
db $76
db $76,$76,$76,$76,$76,$76,$76,$76
db $76,$76,$76,$76,$76,$76,$76,$76
db $76,$76,$76,$76,$76,$76,$76,$76
;- BASIC-Variables ----------------------------------------
var:
db $80
;- End of program area ----------------------------
last:
end
C
Re: Berch's assembler
I have re-uploaded the Assembler / Disassembler written by Bob Berch as referred to by floydbloke.
Indeed, there are a total of four versions files available (not sure of the differences). The first two are for 16K, the other two are for 32K machines:
Indeed, there are a total of four versions files available (not sure of the differences). The first two are for 16K, the other two are for 32K machines:
Rich Mellor
RWAP Software
RWAP Adventures
SellMyRetro
Retro-Printer Module
Also Involved in:
Icephorm
RWAP Software
RWAP Adventures
SellMyRetro
Retro-Printer Module
Also Involved in:
Icephorm