mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-23 19:28:06 +11:00
zasm: add a bunch of instructions
This commit is contained in:
parent
115dc18971
commit
89972ca210
@ -20,7 +20,9 @@ argspecTbl = {
|
|||||||
'c': "(BC)",
|
'c': "(BC)",
|
||||||
'a': "AF",
|
'a': "AF",
|
||||||
'f': "AF'",
|
'f': "AF'",
|
||||||
|
'X': "IX",
|
||||||
'x': "(IX)",
|
'x': "(IX)",
|
||||||
|
'Y': "IY",
|
||||||
'y': "(IY)",
|
'y': "(IY)",
|
||||||
's': "SP",
|
's': "SP",
|
||||||
'p': "(SP)",
|
'p': "(SP)",
|
||||||
@ -37,6 +39,8 @@ argGrpTbl = {
|
|||||||
chr(0x01): "bdha",
|
chr(0x01): "bdha",
|
||||||
chr(0x02): "ZzC=",
|
chr(0x02): "ZzC=",
|
||||||
chr(0x03): "bdhs",
|
chr(0x03): "bdhs",
|
||||||
|
chr(0x04): "bdXs",
|
||||||
|
chr(0x05): "bdYs",
|
||||||
chr(0x0a): "ZzC=+-12",
|
chr(0x0a): "ZzC=+-12",
|
||||||
chr(0x0b): "BCDEHLA",
|
chr(0x0b): "BCDEHLA",
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
; *** Consts ***
|
; *** Consts ***
|
||||||
; Number of rows in the argspec table
|
; Number of rows in the argspec table
|
||||||
ARGSPEC_TBL_CNT .equ 27
|
ARGSPEC_TBL_CNT .equ 28
|
||||||
; Number of rows in the primary instructions table
|
; Number of rows in the primary instructions table
|
||||||
INSTR_TBL_CNT .equ 75
|
INSTR_TBL_CNT .equ 77
|
||||||
; size in bytes of each row in the primary instructions table
|
; size in bytes of each row in the primary instructions table
|
||||||
INSTR_TBL_ROWSIZE .equ 9
|
INSTR_TBL_ROWSIZE .equ 9
|
||||||
|
|
||||||
@ -447,10 +447,19 @@ findInGroup:
|
|||||||
; For constant args, it's easy: if A == (HL), it's a success.
|
; For constant args, it's easy: if A == (HL), it's a success.
|
||||||
; If it's not this, then we check if it's a numerical arg.
|
; If it's not this, then we check if it's a numerical arg.
|
||||||
; If A is a group ID, we do something else: we check that (HL) exists in the
|
; If A is a group ID, we do something else: we check that (HL) exists in the
|
||||||
; groupspec (argGrpTbl)
|
; groupspec (argGrpTbl).
|
||||||
|
; Set Z according to whether we match or not.
|
||||||
matchArg:
|
matchArg:
|
||||||
cp a, (hl)
|
cp a, (hl)
|
||||||
ret z
|
ret z
|
||||||
|
; not an exact match. Before we continue: is A zero? Because if it is,
|
||||||
|
; we have to stop right here: no match possible.
|
||||||
|
cp 0
|
||||||
|
jr nz, .checkIfNumber ; not a zero, we can continue
|
||||||
|
; zero, stop here
|
||||||
|
call unsetZ
|
||||||
|
ret
|
||||||
|
.checkIfNumber:
|
||||||
; not an exact match, let's check for numerical constants.
|
; not an exact match, let's check for numerical constants.
|
||||||
call JUMP_UPCASE
|
call JUMP_UPCASE
|
||||||
call checkNOrM
|
call checkNOrM
|
||||||
@ -713,6 +722,8 @@ argspecTbl:
|
|||||||
.db 'c', "(BC)"
|
.db 'c', "(BC)"
|
||||||
.db 'a', "AF", 0, 0
|
.db 'a', "AF", 0, 0
|
||||||
.db 'f', "AF'", 0
|
.db 'f', "AF'", 0
|
||||||
|
.db 'X', "IX", 0, 0
|
||||||
|
.db 'Y', "IY", 0, 0
|
||||||
.db 'x', "(IX)" ; always come with displacement
|
.db 'x', "(IX)" ; always come with displacement
|
||||||
.db 'y', "(IY)" ; with JP
|
.db 'y', "(IY)" ; with JP
|
||||||
.db 's', "SP", 0, 0
|
.db 's', "SP", 0, 0
|
||||||
@ -745,6 +756,8 @@ argGrpTbl:
|
|||||||
.db "bdha" ; 0x01
|
.db "bdha" ; 0x01
|
||||||
.db "ZzC=" ; 0x02
|
.db "ZzC=" ; 0x02
|
||||||
.db "bdhs" ; 0x03
|
.db "bdhs" ; 0x03
|
||||||
|
.db "bdXs" ; 0x04
|
||||||
|
.db "bdYs" ; 0x05
|
||||||
|
|
||||||
argGrpCC:
|
argGrpCC:
|
||||||
.db "zZ=C12+-" ; 0xa
|
.db "zZ=C12+-" ; 0xa
|
||||||
@ -775,6 +788,8 @@ instrTBl:
|
|||||||
.db "ADD", 0, 'A', 0xb, 0, 0b10000000 , 0 ; ADD A, r
|
.db "ADD", 0, 'A', 0xb, 0, 0b10000000 , 0 ; ADD A, r
|
||||||
.db "ADD", 0, 'A', 'n', 0, 0xc6 , 0 ; ADD A, n
|
.db "ADD", 0, 'A', 'n', 0, 0xc6 , 0 ; ADD A, n
|
||||||
.db "ADD", 0, 'h', 0x3, 4, 0b00001001 , 0 ; ADD HL, ss
|
.db "ADD", 0, 'h', 0x3, 4, 0b00001001 , 0 ; ADD HL, ss
|
||||||
|
.db "ADD", 0,'X',0x4,0x44, 0xdd, 0b00001001 ; ADD IX, pp
|
||||||
|
.db "ADD", 0,'Y',0x5,0x44, 0xfd, 0b00001001 ; ADD IY, rr
|
||||||
.db "AND", 0, 'l', 0, 0, 0xa6 , 0 ; AND (HL)
|
.db "AND", 0, 'l', 0, 0, 0xa6 , 0 ; AND (HL)
|
||||||
.db "AND", 0, 0xb, 0, 0, 0b10100000 , 0 ; AND r
|
.db "AND", 0, 0xb, 0, 0, 0b10100000 , 0 ; AND r
|
||||||
.db "AND", 0, 'n', 0, 0, 0xe6 , 0 ; AND n
|
.db "AND", 0, 'n', 0, 0, 0xe6 , 0 ; AND n
|
||||||
|
Loading…
Reference in New Issue
Block a user