1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-27 14:18:06 +11:00

zasm: add IX/IY support to SRL, RR and RL

This commit is contained in:
Virgil Dupras 2019-11-10 22:03:18 -05:00
parent 506c3d0a96
commit 5f6b303e75
4 changed files with 382 additions and 310 deletions

View File

@ -2,7 +2,7 @@
; Number of rows in the argspec table ; Number of rows in the argspec table
.equ ARGSPEC_TBL_CNT 33 .equ ARGSPEC_TBL_CNT 33
; Number of rows in the primary instructions table ; Number of rows in the primary instructions table
.equ INSTR_TBL_CNT 144 .equ INSTR_TBL_CNT 147
; size in bytes of each row in the primary instructions table ; size in bytes of each row in the primary instructions table
.equ INSTR_TBL_ROWSIZE 6 .equ INSTR_TBL_ROWSIZE 6
; Instruction IDs They correspond to the index of the table in instrNames ; Instruction IDs They correspond to the index of the table in instrNames
@ -1081,7 +1081,7 @@ instrTBl:
.db I_AND, 0xb, 0, 0, 0b10100000 , 0 ; AND r .db I_AND, 0xb, 0, 0, 0b10100000 , 0 ; AND r
.db I_AND, 'n', 0, 0, 0xe6 , 0 ; AND n .db I_AND, 'n', 0, 0, 0xe6 , 0 ; AND n
.db I_BIT, 0xc, 'l', 0x53, 0xcb, 0b01000110 ; BIT b, (HL) + (IX/Y) .db I_BIT, 0xc, 'l', 0x53, 0xcb, 0b01000110 ; BIT b, (HL) + (IX/Y)
.db I_BIT, 'n', 0xb, 0x20 \ .dw handleBITR ; BIT b, r .db I_BIT, 0xc, 0xb, 0x20 \ .dw handleBITR ; BIT b, r
.db I_CALL,0xa, 'N', 3, 0b11000100 , 0 ; CALL cc, NN .db I_CALL,0xa, 'N', 3, 0b11000100 , 0 ; CALL cc, NN
.db I_CALL,'N', 0, 0, 0xcd , 0 ; CALL NN .db I_CALL,'N', 0, 0, 0xcd , 0 ; CALL NN
.db I_CCF, 0, 0, 0, 0x3f , 0 ; CCF .db I_CCF, 0, 0, 0, 0x3f , 0 ; CCF
@ -1184,16 +1184,18 @@ instrTBl:
.db I_PUSH,'Y', 0, 0, 0xfd, 0xe5 ; PUSH IY .db I_PUSH,'Y', 0, 0, 0xfd, 0xe5 ; PUSH IY
.db I_PUSH,0x1, 0, 4, 0b11000101 , 0 ; PUSH qq .db I_PUSH,0x1, 0, 4, 0b11000101 , 0 ; PUSH qq
.db I_RES, 0xc, 'l', 0x53, 0xcb, 0b10000110 ; RES b, (HL) + (IX/Y) .db I_RES, 0xc, 'l', 0x53, 0xcb, 0b10000110 ; RES b, (HL) + (IX/Y)
.db I_RES, 'n', 0xb, 0x20 \ .dw handleRESR ; RES b, r .db I_RES, 0xc, 0xb, 0x20 \ .dw handleRESR ; RES b, r
.db I_RET, 0, 0, 0, 0xc9 , 0 ; RET .db I_RET, 0, 0, 0, 0xc9 , 0 ; RET
.db I_RET, 0xa, 0, 3, 0b11000000 , 0 ; RET cc .db I_RET, 0xa, 0, 3, 0b11000000 , 0 ; RET cc
.db I_RETI,0, 0, 0, 0xed, 0x4d ; RETI .db I_RETI,0, 0, 0, 0xed, 0x4d ; RETI
.db I_RETN,0, 0, 0, 0xed, 0x45 ; RETN .db I_RETN,0, 0, 0, 0xed, 0x45 ; RETN
.db I_RL, 0xb, 0,0x40, 0xcb, 0b00010000 ; RL r .db I_RL, 0xb, 0,0x40, 0xcb, 0b00010000 ; RL r
.db I_RL, 'l', 0,0x10, 0xcb, 0b00010110 ; RL (HL) + (IX/Y)
.db I_RLA, 0, 0, 0, 0x17 , 0 ; RLA .db I_RLA, 0, 0, 0, 0x17 , 0 ; RLA
.db I_RLC, 0xb, 0,0x40, 0xcb, 0b00000000 ; RLC r .db I_RLC, 0xb, 0,0x40, 0xcb, 0b00000000 ; RLC r
.db I_RLCA,0, 0, 0, 0x07 , 0 ; RLCA .db I_RLCA,0, 0, 0, 0x07 , 0 ; RLCA
.db I_RR, 0xb, 0,0x40, 0xcb, 0b00011000 ; RR r .db I_RR, 0xb, 0,0x40, 0xcb, 0b00011000 ; RR r
.db I_RR, 'l', 0,0x10, 0xcb, 0b00011110 ; RR (HL) + (IX/Y)
.db I_RRA, 0, 0, 0, 0x1f , 0 ; RRA .db I_RRA, 0, 0, 0, 0x1f , 0 ; RRA
.db I_RRC, 0xb, 0,0x40, 0xcb, 0b00001000 ; RRC r .db I_RRC, 0xb, 0,0x40, 0xcb, 0b00001000 ; RRC r
.db I_RRCA,0, 0, 0, 0x0f , 0 ; RRCA .db I_RRCA,0, 0, 0, 0x0f , 0 ; RRCA
@ -1202,9 +1204,10 @@ instrTBl:
.db I_SBC,'h',0x3,0x44, 0xed, 0b01000010 ; SBC HL, ss .db I_SBC,'h',0x3,0x44, 0xed, 0b01000010 ; SBC HL, ss
.db I_SCF, 0, 0, 0, 0x37 , 0 ; SCF .db I_SCF, 0, 0, 0, 0x37 , 0 ; SCF
.db I_SET, 0xc, 'l', 0x53, 0xcb, 0b11000110 ; SET b, (HL) + (IX/Y) .db I_SET, 0xc, 'l', 0x53, 0xcb, 0b11000110 ; SET b, (HL) + (IX/Y)
.db I_SET, 'n', 0xb, 0x20 \ .dw handleSETR ; SET b, r .db I_SET, 0xc, 0xb, 0x20 \ .dw handleSETR ; SET b, r
.db I_SLA, 0xb, 0,0x40, 0xcb, 0b00100000 ; SLA r .db I_SLA, 0xb, 0,0x40, 0xcb, 0b00100000 ; SLA r
.db I_SRL, 0xb, 0,0x40, 0xcb, 0b00111000 ; SRL r .db I_SRL, 0xb, 0,0x40, 0xcb, 0b00111000 ; SRL r
.db I_SRL, 'l', 0,0x10, 0xcb, 0b00111110 ; SRL (HL) + (IX/Y)
.db I_SUB, 'l', 0, 0, 0x96 , 0 ; SUB (HL) .db I_SUB, 'l', 0, 0, 0x96 , 0 ; SUB (HL)
.db I_SUB, 0xb, 0, 0, 0b10010000 , 0 ; SUB r .db I_SUB, 0xb, 0, 0, 0b10010000 , 0 ; SUB r
.db I_SUB, 'n', 0, 0, 0xd6 , 0 ; SUB n .db I_SUB, 'n', 0, 0, 0xd6 , 0 ; SUB n

View File

@ -19,6 +19,24 @@ ADC HL, DE
ADC HL, HL ADC HL, HL
ADC HL, SP ADC HL, SP
ADD A, (HL) ADD A, (HL)
ADD A, (IX)
ADD A, (IX+1)
ADD A, (IX-1)
ADD A, (IX+10)
ADD A, (IX-10)
ADD A, (IX+100)
ADD A, (IX-100)
ADD A, (IX+127)
ADD A, (IX-127)
ADD A, (IY)
ADD A, (IY+1)
ADD A, (IY-1)
ADD A, (IY+10)
ADD A, (IY-10)
ADD A, (IY+100)
ADD A, (IY-100)
ADD A, (IY+127)
ADD A, (IY-127)
ADD A, B ADD A, B
ADD A, C ADD A, C
ADD A, D ADD A, D
@ -46,40 +64,7 @@ ADD IY, BC
ADD IY, DE ADD IY, DE
ADD IY, IY ADD IY, IY
ADD IY, SP ADD IY, SP
ADD A, (IX)
ADD A, (IX+1)
ADD A, (IX-1)
ADD A, (IX+10)
ADD A, (IX-10)
ADD A, (IX+100)
ADD A, (IX-100)
ADD A, (IX+127)
ADD A, (IX-127)
ADD A, (IY)
ADD A, (IY+1)
ADD A, (IY-1)
ADD A, (IY+10)
ADD A, (IY-10)
ADD A, (IY+100)
ADD A, (IY-100)
ADD A, (IY+127)
ADD A, (IY-127)
AND (HL) AND (HL)
AND B
AND C
AND D
AND E
AND H
AND L
AND A
AND 1
AND 2
AND 4
AND 8
AND 16
AND 32
AND 64
AND 128
AND (IX+1) AND (IX+1)
AND (IX-1) AND (IX-1)
AND (IX+10) AND (IX+10)
@ -96,84 +81,99 @@ AND (IY+100)
AND (IY-100) AND (IY-100)
AND (IY+127) AND (IY+127)
AND (IY-127) AND (IY-127)
BIT 1, (HL) AND B
BIT 2, (HL) AND C
BIT 4, (HL) AND D
BIT 1, (IX) AND E
BIT 1, (IX+1) AND H
BIT 1, (IX-1) AND L
BIT 1, (IX+10) AND A
BIT 1, (IX-10) AND 1
BIT 1, (IX+100) AND 2
BIT 1, (IX-100) AND 4
BIT 1, (IX+127) AND 8
BIT 1, (IX-127) AND 16
BIT 2, (IX) AND 32
BIT 2, (IX+1) AND 64
BIT 2, (IX-1) AND 128
BIT 2, (IX+10) BIT 0, (HL)
BIT 2, (IX-10) BIT 0, (IX)
BIT 2, (IX+100) BIT 0, (IX+1)
BIT 2, (IX-100) BIT 0, (IX-1)
BIT 2, (IX+127) BIT 0, (IX+10)
BIT 2, (IX-127) BIT 0, (IX-10)
BIT 4, (IX) BIT 0, (IX+100)
BIT 4, (IX+1) BIT 0, (IX-100)
BIT 4, (IX-1) BIT 0, (IX+127)
BIT 4, (IX+10) BIT 0, (IX-127)
BIT 4, (IX-10) BIT 0, (IY)
BIT 4, (IX+100) BIT 0, (IY+1)
BIT 4, (IX-100) BIT 0, (IY-1)
BIT 4, (IX+127) BIT 0, (IY+10)
BIT 4, (IX-127) BIT 0, (IY-10)
BIT 1, (IY) BIT 0, (IY+100)
BIT 1, (IY+1) BIT 0, (IY-100)
BIT 1, (IY-1) BIT 0, (IY+127)
BIT 1, (IY+10) BIT 0, (IY-127)
BIT 1, (IY-10) BIT 3, (HL)
BIT 1, (IY+100) BIT 3, (IX)
BIT 1, (IY-100) BIT 3, (IX+1)
BIT 1, (IY+127) BIT 3, (IX-1)
BIT 1, (IY-127) BIT 3, (IX+10)
BIT 2, (IY) BIT 3, (IX-10)
BIT 2, (IY+1) BIT 3, (IX+100)
BIT 2, (IY-1) BIT 3, (IX-100)
BIT 2, (IY+10) BIT 3, (IX+127)
BIT 2, (IY-10) BIT 3, (IX-127)
BIT 2, (IY+100) BIT 3, (IY)
BIT 2, (IY-100) BIT 3, (IY+1)
BIT 2, (IY+127) BIT 3, (IY-1)
BIT 2, (IY-127) BIT 3, (IY+10)
BIT 4, (IY) BIT 3, (IY-10)
BIT 4, (IY+1) BIT 3, (IY+100)
BIT 4, (IY-1) BIT 3, (IY-100)
BIT 4, (IY+10) BIT 3, (IY+127)
BIT 4, (IY-10) BIT 3, (IY-127)
BIT 4, (IY+100) BIT 7, (HL)
BIT 4, (IY-100) BIT 7, (IX)
BIT 4, (IY+127) BIT 7, (IX+1)
BIT 4, (IY-127) BIT 7, (IX-1)
BIT 1, B BIT 7, (IX+10)
BIT 1, C BIT 7, (IX-10)
BIT 1, D BIT 7, (IX+100)
BIT 1, E BIT 7, (IX-100)
BIT 1, H BIT 7, (IX+127)
BIT 1, L BIT 7, (IX-127)
BIT 1, A BIT 7, (IY)
BIT 2, B BIT 7, (IY+1)
BIT 2, C BIT 7, (IY-1)
BIT 2, D BIT 7, (IY+10)
BIT 2, E BIT 7, (IY-10)
BIT 2, H BIT 7, (IY+100)
BIT 2, L BIT 7, (IY-100)
BIT 2, A BIT 7, (IY+127)
BIT 4, B BIT 7, (IY-127)
BIT 4, C BIT 0, B
BIT 4, D BIT 0, C
BIT 4, E BIT 0, D
BIT 4, H BIT 0, E
BIT 4, L BIT 0, H
BIT 4, A BIT 0, L
BIT 0, A
BIT 3, B
BIT 3, C
BIT 3, D
BIT 3, E
BIT 3, H
BIT 3, L
BIT 3, A
BIT 7, B
BIT 7, C
BIT 7, D
BIT 7, E
BIT 7, H
BIT 7, L
BIT 7, A
CALL Z, 1 CALL Z, 1
CALL Z, 2 CALL Z, 2
CALL Z, 4 CALL Z, 4
@ -320,21 +320,6 @@ CALL 16384
CALL 32768 CALL 32768
CCF CCF
CP (HL) CP (HL)
CP B
CP C
CP D
CP E
CP H
CP L
CP A
CP 1
CP 2
CP 4
CP 8
CP 16
CP 32
CP 64
CP 128
CP (IX) CP (IX)
CP (IX+1) CP (IX+1)
CP (IX-1) CP (IX-1)
@ -353,6 +338,21 @@ CP (IY+100)
CP (IY-100) CP (IY-100)
CP (IY+127) CP (IY+127)
CP (IY-127) CP (IY-127)
CP B
CP C
CP D
CP E
CP H
CP L
CP A
CP 1
CP 2
CP 4
CP 8
CP 16
CP 32
CP 64
CP 128
CPD CPD
CPDR CPDR
CPI CPI
@ -360,7 +360,6 @@ CPIR
CPL CPL
DAA DAA
DEC (HL) DEC (HL)
DEC IX
DEC (IX) DEC (IX)
DEC (IX+1) DEC (IX+1)
DEC (IX-1) DEC (IX-1)
@ -370,7 +369,6 @@ DEC (IX+100)
DEC (IX-100) DEC (IX-100)
DEC (IX+127) DEC (IX+127)
DEC (IX-127) DEC (IX-127)
DEC IY
DEC (IY) DEC (IY)
DEC (IY+1) DEC (IY+1)
DEC (IY-1) DEC (IY-1)
@ -380,6 +378,8 @@ DEC (IY+100)
DEC (IY-100) DEC (IY-100)
DEC (IY+127) DEC (IY+127)
DEC (IY-127) DEC (IY-127)
DEC IX
DEC IY
DEC B DEC B
DEC C DEC C
DEC D DEC D
@ -433,7 +433,6 @@ IN H, (C)
IN L, (C) IN L, (C)
IN A, (C) IN A, (C)
INC (HL) INC (HL)
INC IX
INC (IX) INC (IX)
INC (IX+1) INC (IX+1)
INC (IX-1) INC (IX-1)
@ -443,7 +442,6 @@ INC (IX+100)
INC (IX-100) INC (IX-100)
INC (IX+127) INC (IX+127)
INC (IX-127) INC (IX-127)
INC IY
INC (IY) INC (IY)
INC (IY+1) INC (IY+1)
INC (IY-1) INC (IY-1)
@ -453,6 +451,8 @@ INC (IY+100)
INC (IY-100) INC (IY-100)
INC (IY+127) INC (IY+127)
INC (IY-127) INC (IY-127)
INC IX
INC IY
INC B INC B
INC C INC C
INC D INC D
@ -468,6 +468,8 @@ IND
INDR INDR
INI INI
INIR INIR
JP (IX)
JP (IY)
JP (HL) JP (HL)
JP Z, 1 JP Z, 1
JP Z, 2 JP Z, 2
@ -613,8 +615,6 @@ JP 4096
JP 8192 JP 8192
JP 16384 JP 16384
JP 32768 JP 32768
JP (IX)
JP (IY)
JR $+1 JR $+1
JR $+2 JR $+2
JR $+4 JR $+4
@ -1576,21 +1576,6 @@ LDIR
NEG NEG
NOP NOP
OR (HL) OR (HL)
OR B
OR C
OR D
OR E
OR H
OR L
OR A
OR 1
OR 2
OR 4
OR 8
OR 16
OR 32
OR 64
OR 128
OR (IX) OR (IX)
OR (IX+1) OR (IX+1)
OR (IX-1) OR (IX-1)
@ -1609,6 +1594,21 @@ OR (IY+100)
OR (IY-100) OR (IY-100)
OR (IY+127) OR (IY+127)
OR (IY-127) OR (IY-127)
OR B
OR C
OR D
OR E
OR H
OR L
OR A
OR 1
OR 2
OR 4
OR 8
OR 16
OR 32
OR 64
OR 128
OTDR OTDR
OTIR OTIR
OUT (1), A OUT (1), A
@ -1638,84 +1638,84 @@ PUSH BC
PUSH DE PUSH DE
PUSH HL PUSH HL
PUSH AF PUSH AF
RES 1, (HL) RES 0, (HL)
RES 2, (HL) RES 0, (IX)
RES 4, (HL) RES 0, (IX+1)
RES 1, (IX) RES 0, (IX-1)
RES 1, (IX+1) RES 0, (IX+10)
RES 1, (IX-1) RES 0, (IX-10)
RES 1, (IX+10) RES 0, (IX+100)
RES 1, (IX-10) RES 0, (IX-100)
RES 1, (IX+100) RES 0, (IX+127)
RES 1, (IX-100) RES 0, (IX-127)
RES 1, (IX+127) RES 0, (IY)
RES 1, (IX-127) RES 0, (IY+1)
RES 2, (IX) RES 0, (IY-1)
RES 2, (IX+1) RES 0, (IY+10)
RES 2, (IX-1) RES 0, (IY-10)
RES 2, (IX+10) RES 0, (IY+100)
RES 2, (IX-10) RES 0, (IY-100)
RES 2, (IX+100) RES 0, (IY+127)
RES 2, (IX-100) RES 0, (IY-127)
RES 2, (IX+127) RES 3, (HL)
RES 2, (IX-127) RES 3, (IX)
RES 4, (IX) RES 3, (IX+1)
RES 4, (IX+1) RES 3, (IX-1)
RES 4, (IX-1) RES 3, (IX+10)
RES 4, (IX+10) RES 3, (IX-10)
RES 4, (IX-10) RES 3, (IX+100)
RES 4, (IX+100) RES 3, (IX-100)
RES 4, (IX-100) RES 3, (IX+127)
RES 4, (IX+127) RES 3, (IX-127)
RES 4, (IX-127) RES 3, (IY)
RES 1, (IY) RES 3, (IY+1)
RES 1, (IY+1) RES 3, (IY-1)
RES 1, (IY-1) RES 3, (IY+10)
RES 1, (IY+10) RES 3, (IY-10)
RES 1, (IY-10) RES 3, (IY+100)
RES 1, (IY+100) RES 3, (IY-100)
RES 1, (IY-100) RES 3, (IY+127)
RES 1, (IY+127) RES 3, (IY-127)
RES 1, (IY-127) RES 7, (HL)
RES 2, (IY) RES 7, (IX)
RES 2, (IY+1) RES 7, (IX+1)
RES 2, (IY-1) RES 7, (IX-1)
RES 2, (IY+10) RES 7, (IX+10)
RES 2, (IY-10) RES 7, (IX-10)
RES 2, (IY+100) RES 7, (IX+100)
RES 2, (IY-100) RES 7, (IX-100)
RES 2, (IY+127) RES 7, (IX+127)
RES 2, (IY-127) RES 7, (IX-127)
RES 4, (IY) RES 7, (IY)
RES 4, (IY+1) RES 7, (IY+1)
RES 4, (IY-1) RES 7, (IY-1)
RES 4, (IY+10) RES 7, (IY+10)
RES 4, (IY-10) RES 7, (IY-10)
RES 4, (IY+100) RES 7, (IY+100)
RES 4, (IY-100) RES 7, (IY-100)
RES 4, (IY+127) RES 7, (IY+127)
RES 4, (IY-127) RES 7, (IY-127)
RES 1, B RES 0, B
RES 1, C RES 0, C
RES 1, D RES 0, D
RES 1, E RES 0, E
RES 1, H RES 0, H
RES 1, L RES 0, L
RES 1, A RES 0, A
RES 2, B RES 3, B
RES 2, C RES 3, C
RES 2, D RES 3, D
RES 2, E RES 3, E
RES 2, H RES 3, H
RES 2, L RES 3, L
RES 2, A RES 3, A
RES 4, B RES 7, B
RES 4, C RES 7, C
RES 4, D RES 7, D
RES 4, E RES 7, E
RES 4, H RES 7, H
RES 4, L RES 7, L
RES 4, A RES 7, A
RET RET
RET Z RET Z
RET NZ RET NZ
@ -1734,6 +1734,25 @@ RL E
RL H RL H
RL L RL L
RL A RL A
RL (HL)
RL (IX)
RL (IX+1)
RL (IX-1)
RL (IX+10)
RL (IX-10)
RL (IX+100)
RL (IX-100)
RL (IX+127)
RL (IX-127)
RL (IY)
RL (IY+1)
RL (IY-1)
RL (IY+10)
RL (IY-10)
RL (IY+100)
RL (IY-100)
RL (IY+127)
RL (IY-127)
RLA RLA
RLC B RLC B
RLC C RLC C
@ -1750,6 +1769,25 @@ RR E
RR H RR H
RR L RR L
RR A RR A
RR (HL)
RR (IX)
RR (IX+1)
RR (IX-1)
RR (IX+10)
RR (IX-10)
RR (IX+100)
RR (IX-100)
RR (IX+127)
RR (IX-127)
RR (IY)
RR (IY+1)
RR (IY-1)
RR (IY+10)
RR (IY-10)
RR (IY+100)
RR (IY-100)
RR (IY+127)
RR (IY-127)
RRA RRA
RRC B RRC B
RRC C RRC C
@ -1772,84 +1810,84 @@ SBC HL, DE
SBC HL, HL SBC HL, HL
SBC HL, SP SBC HL, SP
SCF SCF
SET 1, (HL) SET 0, (HL)
SET 2, (HL) SET 0, (IX)
SET 4, (HL) SET 0, (IX+1)
SET 1, (IX) SET 0, (IX-1)
SET 1, (IX+1) SET 0, (IX+10)
SET 1, (IX-1) SET 0, (IX-10)
SET 1, (IX+10) SET 0, (IX+100)
SET 1, (IX-10) SET 0, (IX-100)
SET 1, (IX+100) SET 0, (IX+127)
SET 1, (IX-100) SET 0, (IX-127)
SET 1, (IX+127) SET 0, (IY)
SET 1, (IX-127) SET 0, (IY+1)
SET 2, (IX) SET 0, (IY-1)
SET 2, (IX+1) SET 0, (IY+10)
SET 2, (IX-1) SET 0, (IY-10)
SET 2, (IX+10) SET 0, (IY+100)
SET 2, (IX-10) SET 0, (IY-100)
SET 2, (IX+100) SET 0, (IY+127)
SET 2, (IX-100) SET 0, (IY-127)
SET 2, (IX+127) SET 3, (HL)
SET 2, (IX-127) SET 3, (IX)
SET 4, (IX) SET 3, (IX+1)
SET 4, (IX+1) SET 3, (IX-1)
SET 4, (IX-1) SET 3, (IX+10)
SET 4, (IX+10) SET 3, (IX-10)
SET 4, (IX-10) SET 3, (IX+100)
SET 4, (IX+100) SET 3, (IX-100)
SET 4, (IX-100) SET 3, (IX+127)
SET 4, (IX+127) SET 3, (IX-127)
SET 4, (IX-127) SET 3, (IY)
SET 1, (IY) SET 3, (IY+1)
SET 1, (IY+1) SET 3, (IY-1)
SET 1, (IY-1) SET 3, (IY+10)
SET 1, (IY+10) SET 3, (IY-10)
SET 1, (IY-10) SET 3, (IY+100)
SET 1, (IY+100) SET 3, (IY-100)
SET 1, (IY-100) SET 3, (IY+127)
SET 1, (IY+127) SET 3, (IY-127)
SET 1, (IY-127) SET 7, (HL)
SET 2, (IY) SET 7, (IX)
SET 2, (IY+1) SET 7, (IX+1)
SET 2, (IY-1) SET 7, (IX-1)
SET 2, (IY+10) SET 7, (IX+10)
SET 2, (IY-10) SET 7, (IX-10)
SET 2, (IY+100) SET 7, (IX+100)
SET 2, (IY-100) SET 7, (IX-100)
SET 2, (IY+127) SET 7, (IX+127)
SET 2, (IY-127) SET 7, (IX-127)
SET 4, (IY) SET 7, (IY)
SET 4, (IY+1) SET 7, (IY+1)
SET 4, (IY-1) SET 7, (IY-1)
SET 4, (IY+10) SET 7, (IY+10)
SET 4, (IY-10) SET 7, (IY-10)
SET 4, (IY+100) SET 7, (IY+100)
SET 4, (IY-100) SET 7, (IY-100)
SET 4, (IY+127) SET 7, (IY+127)
SET 4, (IY-127) SET 7, (IY-127)
SET 1, B SET 0, B
SET 1, C SET 0, C
SET 1, D SET 0, D
SET 1, E SET 0, E
SET 1, H SET 0, H
SET 1, L SET 0, L
SET 1, A SET 0, A
SET 2, B SET 3, B
SET 2, C SET 3, C
SET 2, D SET 3, D
SET 2, E SET 3, E
SET 2, H SET 3, H
SET 2, L SET 3, L
SET 2, A SET 3, A
SET 4, B SET 7, B
SET 4, C SET 7, C
SET 4, D SET 7, D
SET 4, E SET 7, E
SET 4, H SET 7, H
SET 4, L SET 7, L
SET 4, A SET 7, A
SLA B SLA B
SLA C SLA C
SLA D SLA D
@ -1864,6 +1902,25 @@ SRL E
SRL H SRL H
SRL L SRL L
SRL A SRL A
SRL (HL)
SRL (IX)
SRL (IX+1)
SRL (IX-1)
SRL (IX+10)
SRL (IX-10)
SRL (IX+100)
SRL (IX-100)
SRL (IX+127)
SRL (IX-127)
SRL (IY)
SRL (IY+1)
SRL (IY-1)
SRL (IY+10)
SRL (IY-10)
SRL (IY+100)
SRL (IY-100)
SRL (IY+127)
SRL (IY-127)
SUB (HL) SUB (HL)
SUB B SUB B
SUB C SUB C

View File

@ -56,6 +56,12 @@ argGrpTbl = {
chr(0x0b): "BCDEHLA", chr(0x0b): "BCDEHLA",
} }
# whenever we encounter the "(HL)" version of these instructions, spit IX/IY
# too.
instrsWithIXY = {
'ADD', 'AND', 'BIT', 'CP', 'DEC', 'INC', 'OR', 'RES', 'RL', 'RR', 'SET',
'SRL'}
def cleanupLine(line): def cleanupLine(line):
line = line.strip() line = line.strip()
idx = line.rfind(';') idx = line.rfind(';')
@ -107,6 +113,8 @@ def genargs(argspec):
return result return result
if argspec in argspecTbl: if argspec in argspecTbl:
return [argspecTbl[argspec]] return [argspecTbl[argspec]]
if argspec == chr(0xc): # special BIT "b" group
return ['0', '3', '7']
grp = argGrpTbl[argspec] grp = argGrpTbl[argspec]
return [argspecTbl[a] for a in grp] return [argspecTbl[a] for a in grp]
@ -131,13 +139,14 @@ def main():
a2 = eval(row[2]) a2 = eval(row[2])
args1 = genargs(a1) args1 = genargs(a1)
# special case handling # special case handling
if n in instrsWithIXY and a1 == 'l':
args1 += genargs('x')
args1 += genargs('y')
if n == 'JP' and isinstance(a1, str) and a1 in 'xy': if n == 'JP' and isinstance(a1, str) and a1 in 'xy':
# we don't test the displacements for IX/IY because there can't be # we don't test the displacements for IX/IY because there can't be
# any. # any.
args1 = args1[:1] args1 = args1[:1]
if n in {'BIT', 'SET', 'RES'}:
# we only want to keep 1, 2, 4
args1 = args1[:3]
if n in {'JR', 'DJNZ'} and a1 == 'n': if n in {'JR', 'DJNZ'} and a1 == 'n':
args1 = eargs(args1) args1 = eargs(args1)
if n == 'IM': if n == 'IM':
@ -145,6 +154,9 @@ def main():
if args1: if args1:
for arg1 in args1: for arg1 in args1:
args2 = genargs(a2) args2 = genargs(a2)
if n in instrsWithIXY and a2 == 'l':
args2 += genargs('x')
args2 += genargs('y')
if args2: if args2:
if n in {'JR', 'DJNZ'} and a2 == 'n': if n in {'JR', 'DJNZ'} and a2 == 'n':
args2 = eargs(args2) args2 = eargs(args2)