1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-12-25 16:38:06 +11:00

zasm: consolidate

* Build emulated zasm statically
* Improve comments in zasm.asm
* Fix build
* Use unsetZ from core
This commit is contained in:
Virgil Dupras 2019-04-30 13:45:31 -04:00
parent 055e0d7a31
commit 175e1328e7
4 changed files with 21 additions and 24 deletions

View File

@ -1,11 +1,12 @@
zasm: zasm.c libz80/libz80.so kernel.h zasm.h
cc $< -l z80 -L./libz80 -Wl,-rpath ./libz80 -o $@
zasm: zasm.c libz80/libz80.o kernel.h zasm.h
cc $< libz80/libz80.o -o $@
libz80/libz80.so: libz80/Makefile
make -C libz80
libz80/libz80.o: libz80/z80.c
make -C libz80/codegen opcodes
gcc -Wall -ansi -g -c -o libz80/libz80.o libz80/z80.c
kernel.h: glue.asm
scas -o - -I ../../../parts $< | ./bin2c.sh KERNEL | tee $@ > /dev/null
scas -o - -I ../../../parts/z80 $< | ./bin2c.sh KERNEL | tee $@ > /dev/null
zasm.h: ../zasm.asm ../tok.asm
scas -o - -I.. $< | ./bin2c.sh ZASM | tee $@ > /dev/null

View File

@ -8,6 +8,7 @@ jr init ; 2 bytes
jp strncmp
jp addDE
jp upcase
jp unsetZ
init:
di

View File

@ -6,3 +6,4 @@ USER_CODE .equ RAMSTART
JUMP_STRNCMP .equ 0x02
JUMP_ADDDE .equ 0x05
JUMP_UPCASE .equ 0x08
JUMP_UNSETZ .equ 0x0b

View File

@ -20,15 +20,6 @@ ret
#include "tok.asm"
; TODO: call from core
unsetZ:
push bc
ld b, a
inc b
cp b
pop bc
ret
; run RLA the number of times specified in B
rlaX:
; first, see if B == 0 to see if we need to bail out
@ -93,7 +84,7 @@ enterParens:
ret ; we're good!
.doNotEnter:
pop hl
call unsetZ
call JUMP_UNSETZ
ret
; Checks whether A is 'N' or 'M'
@ -167,7 +158,7 @@ parseNumber:
jr .loop
.error:
call unsetZ
call JUMP_UNSETZ
.end:
pop bc
pop de
@ -312,7 +303,7 @@ isGroupId:
cp a
ret
.notgroup:
call unsetZ
call JUMP_UNSETZ
ret
; Find argspec A in group id H.
@ -382,7 +373,7 @@ findInGroup:
jr .end
.notfound:
pop bc ; from the push bc in .find
call unsetZ
call JUMP_UNSETZ
.end:
pop hl
pop bc
@ -403,7 +394,7 @@ matchArg:
cp 0
jr nz, .checkIfNumber ; not a zero, we can continue
; zero, stop here
call unsetZ
call JUMP_UNSETZ
ret
.checkIfNumber:
; not an exact match, let's check for numerical constants.
@ -502,7 +493,7 @@ handleBIT:
ret
.error:
xor c
call unsetZ
call JUMP_UNSETZ
ret
handleBITHL:
@ -792,7 +783,7 @@ processArg:
cp a ; ensure Z is set
ret
.error:
call unsetZ
call JUMP_UNSETZ
ret
; Parse line at (HL) and write resulting opcode(s) in curUpcode. Returns the
@ -910,8 +901,8 @@ argGrpCC:
argGrpABCDEHL:
.db "BCDEHL_A" ; 0xb
; This is a list of primary instructions (single upcode) that lead to a
; constant (no group code to insert). Format:
; This is a list of all supported instructions. Each row represent a combination
; of instr/argspecs (which means more than one row per instr). Format:
;
; 4 bytes for the name (fill with zero)
; 1 byte for arg constant
@ -919,9 +910,12 @@ argGrpABCDEHL:
; 1 byte displacement for group arguments + flags
; 2 bytes for upcode (2nd byte is zero if instr is one byte)
;
; An "arg constant" is a char corresponding to either a row in argspecTbl or
; a group index in argGrpTbl (values < 0x10 are considered group indexes).
;
; The displacement bit is split in 2 nibbles: lower nibble is the displacement
; value, upper nibble is for flags:
;
; Bit 7: indicates that the numerical argument is of the 'e' type and has to be
; decreased by 2 (djnz, jr).
; Bit 6: it indicates that the group argument's value is to be placed on the