tiboyse/opcodes_crazy.z80
Brendan Fletcher 6482429a81 Initial commit
2020-03-04 02:05:06 -05:00

7828 lines
No EOL
106 KiB
Z80 Assembly

#define bytes_skipped 0
;Make sure LSB of address is not C7, CF, D7, DF
#macro FIX_LBL
#if $ & $E7 == $C7
nop
#endif
#endmacro
;Your typical NEXT routine where SP=GBPC. Puts the second byte in E and calls the _B opcode routine.
#macro NEXT
rst 00h
.org $+6
#define bytes_skipped eval(bytes_skipped+6)
;ei
;pop hl ;10cc
;di
;ld b,h ;14cc
;ld h,d ;18cc
;ld h,(hl) ;25cc
;jp (hl) ;29cc
#endmacro
;Another typical NEXT routine where SP=GBPC+1, B=(GBPC). Calls the normal opcode routine.
#macro NEXT_B
rst 08h
.org $+3
#define bytes_skipped eval(bytes_skipped+3)
;ld l,b ;4cc
;ld h,e ;8cc
;ld h,(hl) ;15cc
;jp (hl) ;19cc
#endmacro
;An optimized NEXT routine where SP=GBPC+1, H=(GBPC). Calls the normal opcode routine.
#macro NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#endmacro
;A NEXT routine which allows interrupts to trigger.
#macro NEXT_INT
rst 10h
.org $+6
#define bytes_skipped eval(bytes_skipped+6)
;ei ;4cc
;pop hl ;14cc
;di ;18cc
;ld b,h ;22cc
;ld h,d ;26cc
;ld h,(hl) ;33cc
;jp (hl) ;37cc
#endmacro
#define opcodeC9_B opcodeC9
#define opcodeD9_B opcodeD9
#define opcodeE9_B opcodeE9
#define opcodeF3 opcodeF3end
#define opcodeCB bitcodes
#define opcodeD3 invalid
#define opcodeD3_B invalid
#define opcodeDB invalid
#define opcodeDB_B invalid
#define opcodeDD invalid
#define opcodeDD_B invalid
#define opcodeE3 invalid
#define opcodeE3_B invalid
#define opcodeE4 invalid
#define opcodeE4_B invalid
#define opcodeEB invalid
#define opcodeEB_B invalid
#define opcodeEC invalid
#define opcodeEC_B invalid
#define opcodeED invalid
#define opcodeED_B invalid
#define opcodeF4 invalid
#define opcodeF4_B invalid
#define opcodeFC invalid
#define opcodeFC_B invalid
#define opcodeFD invalid
#define opcodeFD_B invalid
#macro insert_op(address)
#if address&$FF == $00
#ifndef opcode00
fill_to(address)
#define opcode00 eval($)
;nop
NEXT
#else
#ifndef opcode00_B
fill_to(address)
#define opcode00_B eval($)
;nop
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $01
#ifndef opcode01
fill_to(address)
#define opcode01 eval($)
;ld bc,NN
exx
pop bc
exx
NEXT
#else
#ifndef opcode01_B
fill_to(address)
#define opcode01_B eval($)
;ld bc,NN
dec sp
exx
pop bc
exx
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $02
#ifndef opcode02
fill_to(address)
#define opcode02 eval($)
;ld (bc),a
exx
ld (bc),a
exx
NEXT
#else
#ifndef opcode02_B
fill_to(address)
#define opcode02_B eval($)
;ld (bc),a
exx
ld (bc),a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $03
#ifndef opcode03
fill_to(address)
#define opcode03 eval($)
;inc bc
exx
inc bc
exx
NEXT
#else
#ifndef opcode03_B
fill_to(address)
#define opcode03_B eval($)
;inc bc
exx
inc bc
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $04
#ifndef opcode04
fill_to(address)
#define opcode04 eval($)
;inc b
exx
inc b
exx
NEXT
#else
#ifndef opcode04_B
fill_to(address)
#define opcode04_B eval($)
;inc b
exx
inc b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $05
#ifndef opcode05
fill_to(address)
#define opcode05 eval($)
;dec b
exx
dec b
exx
NEXT
#else
#ifndef opcode05_B
fill_to(address)
#define opcode05_B eval($)
;dec b
exx
dec b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $06
#ifndef opcode06
fill_to(address)
#define opcode06 eval($)
;ld b,N
ex af,af'
pop hl
ld a,l
exx
ld b,a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode06_B
fill_to(address)
#define opcode06_B eval($)
;ld b,N
ex af,af'
ld a,b
exx
ld b,a
exx
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $07
#ifndef opcode07
fill_to(address)
#define opcode07 eval($)
;rlca
rlca
NEXT
#else
#ifndef opcode07_B
fill_to(address)
#define opcode07_B eval($)
;rlca
rlca
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $08
#ifndef opcode08
fill_to(address)
#define opcode08 eval($)
;ld (nnnn),sp
pop hl
ld (_+2),hl
_
ld (0),iy
NEXT
#else
#ifndef opcode08_B
fill_to(address)
#define opcode08_B eval($)
;ld (nnnn),sp
dec sp
pop hl
ld (_+2),hl
_
ld (0),iy
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $09
#ifndef opcode09
fill_to(address)
#define opcode09 eval($)
;add hl,bc
exx
add hl,bc
exx
NEXT
#else
#ifndef opcode09_B
fill_to(address)
#define opcode09_B eval($)
;add hl,bc
exx
add hl,bc
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $0A
#ifndef opcode0A
fill_to(address)
#define opcode0A eval($)
;ld a,(bc)
exx
ld a,(bc)
exx
NEXT
#else
#ifndef opcode0A_B
fill_to(address)
#define opcode0A_B eval($)
;ld a,(bc)
exx
ld a,(bc)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $0B
#ifndef opcode0B
fill_to(address)
#define opcode0B eval($)
;dec bc
exx
dec bc
exx
NEXT
#else
#ifndef opcode0B_B
fill_to(address)
#define opcode0B_B eval($)
;dec bc
exx
dec bc
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $0C
#ifndef opcode0C
fill_to(address)
#define opcode0C eval($)
;inc c
exx
inc c
exx
NEXT
#else
#ifndef opcode0C_B
fill_to(address)
#define opcode0C_B eval($)
;inc c
exx
inc c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $0D
#ifndef opcode0D
fill_to(address)
#define opcode0D eval($)
;dec c
exx
dec c
exx
NEXT
#else
#ifndef opcode0D_B
fill_to(address)
#define opcode0D_B eval($)
;dec c
exx
dec c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $0E
#ifndef opcode0E
fill_to(address)
#define opcode0E eval($)
;ld c,N
ex af,af'
pop hl
ld a,l
exx
ld c,a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode0E_B
fill_to(address)
#define opcode0E_B eval($)
;ld c,N
ex af,af'
ld a,b
exx
ld c,a
exx
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $0F
#ifndef opcode0F
fill_to(address)
#define opcode0F eval($)
;rrca
rrca
NEXT
#else
#ifndef opcode0F_B
fill_to(address)
#define opcode0F_B eval($)
;rrca
rrca
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $10
#ifndef opcode10
fill_to(address)
#define opcode10 eval($)
;stop
pop hl
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode10_B
fill_to(address)
#define opcode10_B eval($)
;stop
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $11
#ifndef opcode11
fill_to(address)
#define opcode11 eval($)
;ld de,NN
exx
pop de
exx
NEXT
#else
#ifndef opcode11_B
fill_to(address)
#define opcode11_B eval($)
;ld de,NN
dec sp
exx
pop de
exx
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $12
#ifndef opcode12
fill_to(address)
#define opcode12 eval($)
;ld (de),a
exx
ld (de),a
exx
NEXT
#else
#ifndef opcode12_B
fill_to(address)
#define opcode12_B eval($)
;ld (de),a
exx
ld (de),a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $13
#ifndef opcode13
fill_to(address)
#define opcode13 eval($)
;inc de
exx
inc de
exx
NEXT
#else
#ifndef opcode13_B
fill_to(address)
#define opcode13_B eval($)
;inc de
exx
inc de
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $14
#ifndef opcode14
fill_to(address)
#define opcode14 eval($)
;inc d
exx
inc d
exx
NEXT
#else
#ifndef opcode14_B
fill_to(address)
#define opcode14_B eval($)
;inc d
exx
inc d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $15
#ifndef opcode15
fill_to(address)
#define opcode15 eval($)
;dec d
exx
dec d
exx
NEXT
#else
#ifndef opcode15_B
fill_to(address)
#define opcode15_B eval($)
;dec d
exx
dec d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $16
#ifndef opcode16
fill_to(address)
#define opcode16 eval($)
;ld d,N
ex af,af'
pop hl
ld a,l
exx
ld d,a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode16_B
fill_to(address)
#define opcode16_B eval($)
;ld d,N
ex af,af'
ld a,b
exx
ld d,a
exx
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $17
#ifndef opcode17
fill_to(address)
#define opcode17 eval($)
;rla
rla
NEXT
#else
#ifndef opcode17_B
fill_to(address)
#define opcode17_B eval($)
;rla
rla
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $18
#ifndef opcode18
fill_to(address)
#define opcode18 eval($)
;jr N
ex af,af'
pop hl
dec sp
ld a,l
rla
sbc a,a
ld h,a
add hl,sp
ex af,af'
ld sp,hl
NEXT_INT
#else
#ifndef opcode18_B
fill_to(address)
#define opcode18_B eval($)
;jr N
ex af,af'
ld l,b
ld a,l
rla
sbc a,a
ld h,a
add hl,sp
ex af,af'
ld sp,hl
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $19
#ifndef opcode19
fill_to(address)
#define opcode19 eval($)
;add hl,de
exx
add hl,de
exx
NEXT
#else
#ifndef opcode19_B
fill_to(address)
#define opcode19_B eval($)
;add hl,de
exx
add hl,de
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $1A
#ifndef opcode1A
fill_to(address)
#define opcode1A eval($)
;ld a,(de)
exx
ld a,(de)
exx
NEXT
#else
#ifndef opcode1A_B
fill_to(address)
#define opcode1A_B eval($)
;ld a,(de)
exx
ld a,(de)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $1B
#ifndef opcode1B
fill_to(address)
#define opcode1B eval($)
;dec de
exx
dec de
exx
NEXT
#else
#ifndef opcode1B_B
fill_to(address)
#define opcode1B_B eval($)
;dec de
exx
dec de
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $1C
#ifndef opcode1C
fill_to(address)
#define opcode1C eval($)
;inc e
exx
inc e
exx
NEXT
#else
#ifndef opcode1C_B
fill_to(address)
#define opcode1C_B eval($)
;inc e
exx
inc e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $1D
#ifndef opcode1D
fill_to(address)
#define opcode1D eval($)
;dec e
exx
dec e
exx
NEXT
#else
#ifndef opcode1D_B
fill_to(address)
#define opcode1D_B eval($)
;dec e
exx
dec e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $1E
#ifndef opcode1E
fill_to(address)
#define opcode1E eval($)
;ld e,N
ex af,af'
pop hl
ld a,l
exx
ld e,a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode1E_B
fill_to(address)
#define opcode1E_B eval($)
;ld e,N
ex af,af'
ld a,b
exx
ld e,a
exx
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $1F
#ifndef opcode1F
fill_to(address)
#define opcode1F eval($)
;rra
rra
NEXT
#else
#ifndef opcode1F_B
fill_to(address)
#define opcode1F_B eval($)
;rra
rra
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $20
#ifndef opcode20
fill_to(address)
#define opcode20 eval($)
;jr nz,N
jp nz,opcode18
inc sp
NEXT_INT
#else
#ifndef opcode20_B
fill_to(address)
#define opcode20_B eval($)
;jr nz,N
jp nz,opcode18_B
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $21
#ifndef opcode21
fill_to(address)
#define opcode21 eval($)
;ld hl,NN
exx
pop hl
exx
NEXT
#else
#ifndef opcode21_B
fill_to(address)
#define opcode21_B eval($)
;ld hl,NN
dec sp
exx
pop hl
exx
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $22
#ifndef opcode22
fill_to(address)
#define opcode22 eval($)
;ld (hl+),a
exx
ld (hl),a
inc hl
exx
NEXT
#else
#ifndef opcode22_B
fill_to(address)
#define opcode22_B eval($)
;ld (hl+),a
exx
ld (hl),a
inc hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $23
#ifndef opcode23
fill_to(address)
#define opcode23 eval($)
;inc hl
exx
inc hl
exx
NEXT
#else
#ifndef opcode23_B
fill_to(address)
#define opcode23_B eval($)
;inc hl
exx
inc hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $24
#ifndef opcode24
fill_to(address)
#define opcode24 eval($)
;inc h
exx
inc h
exx
NEXT
#else
#ifndef opcode24_B
fill_to(address)
#define opcode24_B eval($)
;inc h
exx
inc h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $25
#ifndef opcode25
fill_to(address)
#define opcode25 eval($)
;dec h
exx
dec h
exx
NEXT
#else
#ifndef opcode25_B
fill_to(address)
#define opcode25_B eval($)
;dec h
exx
dec h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $26
#ifndef opcode26
fill_to(address)
#define opcode26 eval($)
;ld h,N
ex af,af'
pop hl
ld a,l
exx
ld h,a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode26_B
fill_to(address)
#define opcode26_B eval($)
;ld h,N
ex af,af'
ld a,b
exx
ld h,a
exx
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $27
#ifndef opcode27
fill_to(address)
#define opcode27 eval($)
;daa
daa
NEXT
#else
#ifndef opcode27_B
fill_to(address)
#define opcode27_B eval($)
;daa
daa
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $28
#ifndef opcode28
fill_to(address)
#define opcode28 eval($)
;jr z,N
jp z,opcode18
inc sp
NEXT_INT
#else
#ifndef opcode28_B
fill_to(address)
#define opcode28_B eval($)
;jr z,N
jp z,opcode18_B
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $29
#ifndef opcode29
fill_to(address)
#define opcode29 eval($)
;add hl,hl
exx
add hl,hl
exx
NEXT
#else
#ifndef opcode29_B
fill_to(address)
#define opcode29_B eval($)
;add hl,hl
exx
add hl,hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $2A
#ifndef opcode2A
fill_to(address)
#define opcode2A eval($)
;ld a,(hl+)
exx
ld a,(hl)
inc hl
exx
NEXT
#else
#ifndef opcode2A_B
fill_to(address)
#define opcode2A_B eval($)
;ld a,(hl+)
exx
ld a,(hl)
inc hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $2B
#ifndef opcode2B
fill_to(address)
#define opcode2B eval($)
;dec hl
exx
dec hl
exx
NEXT
#else
#ifndef opcode2B_B
fill_to(address)
#define opcode2B_B eval($)
;dec hl
exx
dec hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $2C
#ifndef opcode2C
fill_to(address)
#define opcode2C eval($)
;inc l
exx
inc l
exx
NEXT
#else
#ifndef opcode2C_B
fill_to(address)
#define opcode2C_B eval($)
;inc l
exx
inc l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $2D
#ifndef opcode2D
fill_to(address)
#define opcode2D eval($)
;dec l
exx
dec l
exx
NEXT
#else
#ifndef opcode2D_B
fill_to(address)
#define opcode2D_B eval($)
;dec l
exx
dec l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $2E
#ifndef opcode2E
fill_to(address)
#define opcode2E eval($)
;ld l,N
ex af,af'
pop hl
ld a,l
exx
ld l,a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode2E_B
fill_to(address)
#define opcode2E_B eval($)
;ld l,N
ex af,af'
ld a,b
exx
ld l,a
exx
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $2F
#ifndef opcode2F
fill_to(address)
#define opcode2F eval($)
;cpl
cpl
NEXT
#else
#ifndef opcode2F_B
fill_to(address)
#define opcode2F_B eval($)
;cpl
cpl
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $30
#ifndef opcode30
fill_to(address)
#define opcode30 eval($)
;jr nc,N
jp nc,opcode18
inc sp
NEXT_INT
#else
#ifndef opcode30_B
fill_to(address)
#define opcode30_B eval($)
;jr nc,N
jp nc,opcode18_B
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $31
#ifndef opcode31
fill_to(address)
#define opcode31 eval($)
;ld sp,NN
pop iy
NEXT
#else
#ifndef opcode31_B
fill_to(address)
#define opcode31_B eval($)
;ld sp,NN
dec sp
pop iy
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $32
#ifndef opcode32
fill_to(address)
#define opcode32 eval($)
;ld (hl-),a
exx
ld (hl),a
dec hl
exx
NEXT
#else
#ifndef opcode32_B
fill_to(address)
#define opcode32_B eval($)
;ld (hl-),a
exx
ld (hl),a
dec hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $33
#ifndef opcode33
fill_to(address)
#define opcode33 eval($)
;inc sp
inc iy
NEXT
#else
#ifndef opcode33_B
fill_to(address)
#define opcode33_B eval($)
;inc sp
inc iy
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $34
#ifndef opcode34
fill_to(address)
#define opcode34 eval($)
;inc (hl)
exx
inc (hl)
exx
NEXT
#else
#ifndef opcode34_B
fill_to(address)
#define opcode34_B eval($)
;inc (hl)
exx
inc (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $35
#ifndef opcode35
fill_to(address)
#define opcode35 eval($)
;dec (hl)
exx
dec (hl)
exx
NEXT
#else
#ifndef opcode35_B
fill_to(address)
#define opcode35_B eval($)
;dec (hl)
exx
dec (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $36
#ifndef opcode36
fill_to(address)
#define opcode36 eval($)
;ld (hl),N
ex af,af'
pop hl
ld a,l
exx
bit 7,h
jr z,_
ld (hl),a
exx
ex af,af'
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
_
dec sp
ld a,h
exx
ld h,a
jp memcontrol
#else
#ifndef opcode36_B
fill_to(address)
#define opcode36_B eval($)
;ld (hl),N
ex af,af'
ld a,b
exx
bit 7,h
jr z,_
ld (hl),a
exx
ex af,af'
NEXT
_
ld a,h
exx
ld h,a
ld l,b
jp memcontrol
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $37
#ifndef opcode37
fill_to(address)
#define opcode37 eval($)
;scf
scf
NEXT
#else
#ifndef opcode37_B
fill_to(address)
#define opcode37_B eval($)
;scf
scf
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $38
#ifndef opcode38
fill_to(address)
#define opcode38 eval($)
;jr c,N
jp c,opcode18
inc sp
NEXT_INT
#else
#ifndef opcode38_B
fill_to(address)
#define opcode38_B eval($)
;jr c,N
jp c,opcode18_B
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $39
#ifndef opcode39
fill_to(address)
#define opcode39 eval($)
;add hl,sp
ld hl,0
add hl,sp
ld sp,iy
exx
add hl,sp
exx
ld sp,hl
NEXT
#else
#ifndef opcode39_B
fill_to(address)
#define opcode39_B eval($)
;add hl,sp
ld hl,0
add hl,sp
ld sp,iy
exx
add hl,sp
exx
ld sp,hl
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $3A
#ifndef opcode3A
fill_to(address)
#define opcode3A eval($)
;ld a,(hl-)
exx
ld a,(hl)
dec hl
exx
NEXT
#else
#ifndef opcode3A_B
fill_to(address)
#define opcode3A_B eval($)
;ld a,(hl-)
exx
ld a,(hl)
dec hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $3B
#ifndef opcode3B
fill_to(address)
#define opcode3B eval($)
;dec sp
dec iy
NEXT
#else
#ifndef opcode3B_B
fill_to(address)
#define opcode3B_B eval($)
;dec sp
dec iy
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $3C
#ifndef opcode3C
fill_to(address)
#define opcode3C eval($)
;inc a
inc a
NEXT
#else
#ifndef opcode3C_B
fill_to(address)
#define opcode3C_B eval($)
;inc a
inc a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $3D
#ifndef opcode3D
fill_to(address)
#define opcode3D eval($)
;dec a
dec a
NEXT
#else
#ifndef opcode3D_B
fill_to(address)
#define opcode3D_B eval($)
;dec a
dec a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $3E
#ifndef opcode3E
fill_to(address)
#define opcode3E eval($)
;ld a,N
pop hl
ld a,l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcode3E_B
fill_to(address)
#define opcode3E_B eval($)
;ld a,N
ld a,b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $3F
#ifndef opcode3F
fill_to(address)
#define opcode3F eval($)
;ccf
ccf
NEXT
#else
#ifndef opcode3F_B
fill_to(address)
#define opcode3F_B eval($)
;ccf
ccf
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $40
#ifndef opcode40
fill_to(address)
#define opcode40 eval($)
;ld b,b
NEXT
#else
#ifndef opcode40_B
fill_to(address)
#define opcode40_B eval($)
;ld b,b
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $41
#ifndef opcode41
fill_to(address)
#define opcode41 eval($)
;ld b,c
exx
ld b,c
exx
NEXT
#else
#ifndef opcode41_B
fill_to(address)
#define opcode41_B eval($)
;ld b,c
exx
ld b,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $42
#ifndef opcode42
fill_to(address)
#define opcode42 eval($)
;ld b,d
exx
ld b,d
exx
NEXT
#else
#ifndef opcode42_B
fill_to(address)
#define opcode42_B eval($)
;ld b,d
exx
ld b,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $43
#ifndef opcode43
fill_to(address)
#define opcode43 eval($)
;ld b,e
exx
ld b,e
exx
NEXT
#else
#ifndef opcode43_B
fill_to(address)
#define opcode43_B eval($)
;ld b,e
exx
ld b,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $44
#ifndef opcode44
fill_to(address)
#define opcode44 eval($)
;ld b,h
exx
ld b,h
exx
NEXT
#else
#ifndef opcode44_B
fill_to(address)
#define opcode44_B eval($)
;ld b,h
exx
ld b,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $45
#ifndef opcode45
fill_to(address)
#define opcode45 eval($)
;ld b,l
exx
ld b,l
exx
NEXT
#else
#ifndef opcode45_B
fill_to(address)
#define opcode45_B eval($)
;ld b,l
exx
ld b,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $46
#ifndef opcode46
fill_to(address)
#define opcode46 eval($)
;ld b,(hl)
exx
ld b,(hl)
exx
NEXT
#else
#ifndef opcode46_B
fill_to(address)
#define opcode46_B eval($)
;ld b,(hl)
exx
ld b,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $47
#ifndef opcode47
fill_to(address)
#define opcode47 eval($)
;ld b,a
exx
ld b,a
exx
NEXT
#else
#ifndef opcode47_B
fill_to(address)
#define opcode47_B eval($)
;ld b,a
exx
ld b,a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $48
#ifndef opcode48
fill_to(address)
#define opcode48 eval($)
;ld c,b
exx
ld c,b
exx
NEXT
#else
#ifndef opcode48_B
fill_to(address)
#define opcode48_B eval($)
;ld c,b
exx
ld c,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $49
#ifndef opcode49
fill_to(address)
#define opcode49 eval($)
;ld c,c
NEXT
#else
#ifndef opcode49_B
fill_to(address)
#define opcode49_B eval($)
;ld c,c
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $4A
#ifndef opcode4A
fill_to(address)
#define opcode4A eval($)
;ld c,d
exx
ld c,d
exx
NEXT
#else
#ifndef opcode4A_B
fill_to(address)
#define opcode4A_B eval($)
;ld c,d
exx
ld c,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $4B
#ifndef opcode4B
fill_to(address)
#define opcode4B eval($)
;ld c,e
exx
ld c,e
exx
NEXT
#else
#ifndef opcode4B_B
fill_to(address)
#define opcode4B_B eval($)
;ld c,e
exx
ld c,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $4C
#ifndef opcode4C
fill_to(address)
#define opcode4C eval($)
;ld c,h
exx
ld c,h
exx
NEXT
#else
#ifndef opcode4C_B
fill_to(address)
#define opcode4C_B eval($)
;ld c,h
exx
ld c,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $4D
#ifndef opcode4D
fill_to(address)
#define opcode4D eval($)
;ld c,l
exx
ld c,l
exx
NEXT
#else
#ifndef opcode4D_B
fill_to(address)
#define opcode4D_B eval($)
;ld c,l
exx
ld c,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $4E
#ifndef opcode4E
fill_to(address)
#define opcode4E eval($)
;ld c,(hl)
exx
ld c,(hl)
exx
NEXT
#else
#ifndef opcode4E_B
fill_to(address)
#define opcode4E_B eval($)
;ld c,(hl)
exx
ld c,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $4F
#ifndef opcode4F
fill_to(address)
#define opcode4F eval($)
;ld c,a
exx
ld c,a
exx
NEXT
#else
#ifndef opcode4F_B
fill_to(address)
#define opcode4F_B eval($)
;ld c,a
exx
ld c,a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $50
#ifndef opcode50
fill_to(address)
#define opcode50 eval($)
;ld d,b
exx
ld d,b
exx
NEXT
#else
#ifndef opcode50_B
fill_to(address)
#define opcode50_B eval($)
;ld d,b
exx
ld d,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $51
#ifndef opcode51
fill_to(address)
#define opcode51 eval($)
;ld d,c
exx
ld d,c
exx
NEXT
#else
#ifndef opcode51_B
fill_to(address)
#define opcode51_B eval($)
;ld d,c
exx
ld d,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $52
#ifndef opcode52
fill_to(address)
#define opcode52 eval($)
;ld d,d
NEXT
#else
#ifndef opcode52_B
fill_to(address)
#define opcode52_B eval($)
;ld d,d
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $53
#ifndef opcode53
fill_to(address)
#define opcode53 eval($)
;ld d,e
exx
ld d,e
exx
NEXT
#else
#ifndef opcode53_B
fill_to(address)
#define opcode53_B eval($)
;ld d,e
exx
ld d,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $54
#ifndef opcode54
fill_to(address)
#define opcode54 eval($)
;ld d,h
exx
ld d,h
exx
NEXT
#else
#ifndef opcode54_B
fill_to(address)
#define opcode54_B eval($)
;ld d,h
exx
ld d,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $55
#ifndef opcode55
fill_to(address)
#define opcode55 eval($)
;ld d,l
exx
ld d,l
exx
NEXT
#else
#ifndef opcode55_B
fill_to(address)
#define opcode55_B eval($)
;ld d,l
exx
ld d,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $56
#ifndef opcode56
fill_to(address)
#define opcode56 eval($)
;ld d,(hl)
exx
ld d,(hl)
exx
NEXT
#else
#ifndef opcode56_B
fill_to(address)
#define opcode56_B eval($)
;ld d,(hl)
exx
ld d,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $57
#ifndef opcode57
fill_to(address)
#define opcode57 eval($)
;ld d,a
exx
ld d,a
exx
NEXT
#else
#ifndef opcode57_B
fill_to(address)
#define opcode57_B eval($)
;ld d,a
exx
ld d,a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $58
#ifndef opcode58
fill_to(address)
#define opcode58 eval($)
;ld e,b
exx
ld e,b
exx
NEXT
#else
#ifndef opcode58_B
fill_to(address)
#define opcode58_B eval($)
;ld e,b
exx
ld e,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $59
#ifndef opcode59
fill_to(address)
#define opcode59 eval($)
;ld e,c
exx
ld e,c
exx
NEXT
#else
#ifndef opcode59_B
fill_to(address)
#define opcode59_B eval($)
;ld e,c
exx
ld e,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $5A
#ifndef opcode5A
fill_to(address)
#define opcode5A eval($)
;ld e,d
exx
ld e,d
exx
NEXT
#else
#ifndef opcode5A_B
fill_to(address)
#define opcode5A_B eval($)
;ld e,d
exx
ld e,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $5B
#ifndef opcode5B
fill_to(address)
#define opcode5B eval($)
;ld e,e
NEXT
#else
#ifndef opcode5B_B
fill_to(address)
#define opcode5B_B eval($)
;ld e,e
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $5C
#ifndef opcode5C
fill_to(address)
#define opcode5C eval($)
;ld e,h
exx
ld e,h
exx
NEXT
#else
#ifndef opcode5C_B
fill_to(address)
#define opcode5C_B eval($)
;ld e,h
exx
ld e,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $5D
#ifndef opcode5D
fill_to(address)
#define opcode5D eval($)
;ld e,l
exx
ld e,l
exx
NEXT
#else
#ifndef opcode5D_B
fill_to(address)
#define opcode5D_B eval($)
;ld e,l
exx
ld e,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $5E
#ifndef opcode5E
fill_to(address)
#define opcode5E eval($)
;ld e,(hl)
exx
ld e,(hl)
exx
NEXT
#else
#ifndef opcode5E_B
fill_to(address)
#define opcode5E_B eval($)
;ld e,(hl)
exx
ld e,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $5F
#ifndef opcode5F
fill_to(address)
#define opcode5F eval($)
;ld e,a
exx
ld e,a
exx
NEXT
#else
#ifndef opcode5F_B
fill_to(address)
#define opcode5F_B eval($)
;ld e,a
exx
ld e,a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $60
#ifndef opcode60
fill_to(address)
#define opcode60 eval($)
;ld h,b
exx
ld h,b
exx
NEXT
#else
#ifndef opcode60_B
fill_to(address)
#define opcode60_B eval($)
;ld h,b
exx
ld h,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $61
#ifndef opcode61
fill_to(address)
#define opcode61 eval($)
;ld h,c
exx
ld h,c
exx
NEXT
#else
#ifndef opcode61_B
fill_to(address)
#define opcode61_B eval($)
;ld h,c
exx
ld h,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $62
#ifndef opcode62
fill_to(address)
#define opcode62 eval($)
;ld h,d
exx
ld h,d
exx
NEXT
#else
#ifndef opcode62_B
fill_to(address)
#define opcode62_B eval($)
;ld h,d
exx
ld h,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $63
#ifndef opcode63
fill_to(address)
#define opcode63 eval($)
;ld h,e
exx
ld h,e
exx
NEXT
#else
#ifndef opcode63_B
fill_to(address)
#define opcode63_B eval($)
;ld h,e
exx
ld h,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $64
#ifndef opcode64
fill_to(address)
#define opcode64 eval($)
;ld h,h
NEXT
#else
#ifndef opcode64_B
fill_to(address)
#define opcode64_B eval($)
;ld h,h
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $65
#ifndef opcode65
fill_to(address)
#define opcode65 eval($)
;ld h,l
exx
ld h,l
exx
NEXT
#else
#ifndef opcode65_B
fill_to(address)
#define opcode65_B eval($)
;ld h,l
exx
ld h,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $66
#ifndef opcode66
fill_to(address)
#define opcode66 eval($)
;ld h,(hl)
exx
ld h,(hl)
exx
NEXT
#else
#ifndef opcode66_B
fill_to(address)
#define opcode66_B eval($)
;ld h,(hl)
exx
ld h,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $67
#ifndef opcode67
fill_to(address)
#define opcode67 eval($)
;ld h,a
exx
ld h,a
exx
NEXT
#else
#ifndef opcode67_B
fill_to(address)
#define opcode67_B eval($)
;ld h,a
exx
ld h,a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $68
#ifndef opcode68
fill_to(address)
#define opcode68 eval($)
;ld l,b
exx
ld l,b
exx
NEXT
#else
#ifndef opcode68_B
fill_to(address)
#define opcode68_B eval($)
;ld l,b
exx
ld l,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $69
#ifndef opcode69
fill_to(address)
#define opcode69 eval($)
;ld l,c
exx
ld l,c
exx
NEXT
#else
#ifndef opcode69_B
fill_to(address)
#define opcode69_B eval($)
;ld l,c
exx
ld l,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $6A
#ifndef opcode6A
fill_to(address)
#define opcode6A eval($)
;ld l,d
exx
ld l,d
exx
NEXT
#else
#ifndef opcode6A_B
fill_to(address)
#define opcode6A_B eval($)
;ld l,d
exx
ld l,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $6B
#ifndef opcode6B
fill_to(address)
#define opcode6B eval($)
;ld l,e
exx
ld l,e
exx
NEXT
#else
#ifndef opcode6B_B
fill_to(address)
#define opcode6B_B eval($)
;ld l,e
exx
ld l,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $6C
#ifndef opcode6C
fill_to(address)
#define opcode6C eval($)
;ld l,h
exx
ld l,h
exx
NEXT
#else
#ifndef opcode6C_B
fill_to(address)
#define opcode6C_B eval($)
;ld l,h
exx
ld l,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $6D
#ifndef opcode6D
fill_to(address)
#define opcode6D eval($)
;ld l,l
NEXT
#else
#ifndef opcode6D_B
fill_to(address)
#define opcode6D_B eval($)
;ld l,l
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $6E
#ifndef opcode6E
fill_to(address)
#define opcode6E eval($)
;ld l,(hl)
exx
ld l,(hl)
exx
NEXT
#else
#ifndef opcode6E_B
fill_to(address)
#define opcode6E_B eval($)
;ld l,(hl)
exx
ld l,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $6F
#ifndef opcode6F
fill_to(address)
#define opcode6F eval($)
;ld l,a
exx
ld l,a
exx
NEXT
#else
#ifndef opcode6F_B
fill_to(address)
#define opcode6F_B eval($)
;ld l,a
exx
ld l,a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $70
#ifndef opcode70
fill_to(address)
#define opcode70 eval($)
;ld (hl),b
exx
ld (hl),b
exx
NEXT
#else
#ifndef opcode70_B
fill_to(address)
#define opcode70_B eval($)
;ld (hl),b
exx
ld (hl),b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $71
#ifndef opcode71
fill_to(address)
#define opcode71 eval($)
;ld (hl),c
exx
ld (hl),c
exx
NEXT
#else
#ifndef opcode71_B
fill_to(address)
#define opcode71_B eval($)
;ld (hl),c
exx
ld (hl),c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $72
#ifndef opcode72
fill_to(address)
#define opcode72 eval($)
;ld (hl),d
exx
ld (hl),d
exx
NEXT
#else
#ifndef opcode72_B
fill_to(address)
#define opcode72_B eval($)
;ld (hl),d
exx
ld (hl),d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $73
#ifndef opcode73
fill_to(address)
#define opcode73 eval($)
;ld (hl),e
exx
ld (hl),e
exx
NEXT
#else
#ifndef opcode73_B
fill_to(address)
#define opcode73_B eval($)
;ld (hl),e
exx
ld (hl),e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $74
#ifndef opcode74
fill_to(address)
#define opcode74 eval($)
;ld (hl),h
exx
ld (hl),h
exx
NEXT
#else
#ifndef opcode74_B
fill_to(address)
#define opcode74_B eval($)
;ld (hl),h
exx
ld (hl),h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $75
#ifndef opcode75
fill_to(address)
#define opcode75 eval($)
;ld (hl),l
exx
ld (hl),l
exx
NEXT
#else
#ifndef opcode75_B
fill_to(address)
#define opcode75_B eval($)
;ld (hl),l
exx
ld (hl),l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $76
#ifndef opcode76
fill_to(address)
#define opcode76 eval($)
;halt
ex af,af'
dec sp
jp hardware
#else
#ifndef opcode76_B
fill_to(address)
#define opcode76_B eval($)
;halt
dec sp
jp opcode76
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $77
#ifndef opcode77
fill_to(address)
#define opcode77 eval($)
;ld (hl),a
exx
ld (hl),a
exx
NEXT
#else
#ifndef opcode77_B
fill_to(address)
#define opcode77_B eval($)
;ld (hl),a
exx
ld (hl),a
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $78
#ifndef opcode78
fill_to(address)
#define opcode78 eval($)
;ld a,b
exx
ld a,b
exx
NEXT
#else
#ifndef opcode78_B
fill_to(address)
#define opcode78_B eval($)
;ld a,b
exx
ld a,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $79
#ifndef opcode79
fill_to(address)
#define opcode79 eval($)
;ld a,c
exx
ld a,c
exx
NEXT
#else
#ifndef opcode79_B
fill_to(address)
#define opcode79_B eval($)
;ld a,c
exx
ld a,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $7A
#ifndef opcode7A
fill_to(address)
#define opcode7A eval($)
;ld a,d
exx
ld a,d
exx
NEXT
#else
#ifndef opcode7A_B
fill_to(address)
#define opcode7A_B eval($)
;ld a,d
exx
ld a,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $7B
#ifndef opcode7B
fill_to(address)
#define opcode7B eval($)
;ld a,e
exx
ld a,e
exx
NEXT
#else
#ifndef opcode7B_B
fill_to(address)
#define opcode7B_B eval($)
;ld a,e
exx
ld a,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $7C
#ifndef opcode7C
fill_to(address)
#define opcode7C eval($)
;ld a,h
exx
ld a,h
exx
NEXT
#else
#ifndef opcode7C_B
fill_to(address)
#define opcode7C_B eval($)
;ld a,h
exx
ld a,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $7D
#ifndef opcode7D
fill_to(address)
#define opcode7D eval($)
;ld a,l
exx
ld a,l
exx
NEXT
#else
#ifndef opcode7D_B
fill_to(address)
#define opcode7D_B eval($)
;ld a,l
exx
ld a,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $7E
#ifndef opcode7E
fill_to(address)
#define opcode7E eval($)
;ld a,(hl)
exx
ld a,(hl)
exx
NEXT
#else
#ifndef opcode7E_B
fill_to(address)
#define opcode7E_B eval($)
;ld a,(hl)
exx
ld a,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $7F
#ifndef opcode7F
fill_to(address)
#define opcode7F eval($)
;ld a,a
NEXT
#else
#ifndef opcode7F_B
fill_to(address)
#define opcode7F_B eval($)
;ld a,a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $80
#ifndef opcode80
fill_to(address)
#define opcode80 eval($)
;add a,b
exx
add a,b
exx
NEXT
#else
#ifndef opcode80_B
fill_to(address)
#define opcode80_B eval($)
;add a,b
exx
add a,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $81
#ifndef opcode81
fill_to(address)
#define opcode81 eval($)
;add a,c
exx
add a,c
exx
NEXT
#else
#ifndef opcode81_B
fill_to(address)
#define opcode81_B eval($)
;add a,c
exx
add a,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $82
#ifndef opcode82
fill_to(address)
#define opcode82 eval($)
;add a,d
exx
add a,d
exx
NEXT
#else
#ifndef opcode82_B
fill_to(address)
#define opcode82_B eval($)
;add a,d
exx
add a,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $83
#ifndef opcode83
fill_to(address)
#define opcode83 eval($)
;add a,e
exx
add a,e
exx
NEXT
#else
#ifndef opcode83_B
fill_to(address)
#define opcode83_B eval($)
;add a,e
exx
add a,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $84
#ifndef opcode84
fill_to(address)
#define opcode84 eval($)
;add a,h
exx
add a,h
exx
NEXT
#else
#ifndef opcode84_B
fill_to(address)
#define opcode84_B eval($)
;add a,h
exx
add a,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $85
#ifndef opcode85
fill_to(address)
#define opcode85 eval($)
;add a,l
exx
add a,l
exx
NEXT
#else
#ifndef opcode85_B
fill_to(address)
#define opcode85_B eval($)
;add a,l
exx
add a,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $86
#ifndef opcode86
fill_to(address)
#define opcode86 eval($)
;add a,(hl)
exx
add a,(hl)
exx
NEXT
#else
#ifndef opcode86_B
fill_to(address)
#define opcode86_B eval($)
;add a,(hl)
exx
add a,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $87
#ifndef opcode87
fill_to(address)
#define opcode87 eval($)
;add a,a
add a,a
NEXT
#else
#ifndef opcode87_B
fill_to(address)
#define opcode87_B eval($)
;add a,a
add a,a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $88
#ifndef opcode88
fill_to(address)
#define opcode88 eval($)
;adc a,b
exx
adc a,b
exx
NEXT
#else
#ifndef opcode88_B
fill_to(address)
#define opcode88_B eval($)
;adc a,b
exx
adc a,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $89
#ifndef opcode89
fill_to(address)
#define opcode89 eval($)
;adc a,c
exx
adc a,c
exx
NEXT
#else
#ifndef opcode89_B
fill_to(address)
#define opcode89_B eval($)
;adc a,c
exx
adc a,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $8A
#ifndef opcode8A
fill_to(address)
#define opcode8A eval($)
;adc a,d
exx
adc a,d
exx
NEXT
#else
#ifndef opcode8A_B
fill_to(address)
#define opcode8A_B eval($)
;adc a,d
exx
adc a,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $8B
#ifndef opcode8B
fill_to(address)
#define opcode8B eval($)
;adc a,e
exx
adc a,e
exx
NEXT
#else
#ifndef opcode8B_B
fill_to(address)
#define opcode8B_B eval($)
;adc a,e
exx
adc a,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $8C
#ifndef opcode8C
fill_to(address)
#define opcode8C eval($)
;adc a,h
exx
adc a,h
exx
NEXT
#else
#ifndef opcode8C_B
fill_to(address)
#define opcode8C_B eval($)
;adc a,h
exx
adc a,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $8D
#ifndef opcode8D
fill_to(address)
#define opcode8D eval($)
;adc a,l
exx
adc a,l
exx
NEXT
#else
#ifndef opcode8D_B
fill_to(address)
#define opcode8D_B eval($)
;adc a,l
exx
adc a,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $8E
#ifndef opcode8E
fill_to(address)
#define opcode8E eval($)
;adc a,(hl)
exx
adc a,(hl)
exx
NEXT
#else
#ifndef opcode8E_B
fill_to(address)
#define opcode8E_B eval($)
;adc a,(hl)
exx
adc a,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $8F
#ifndef opcode8F
fill_to(address)
#define opcode8F eval($)
;adc a,a
adc a,a
NEXT
#else
#ifndef opcode8F_B
fill_to(address)
#define opcode8F_B eval($)
;adc a,a
adc a,a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $90
#ifndef opcode90
fill_to(address)
#define opcode90 eval($)
;sub b
exx
sub b
exx
NEXT
#else
#ifndef opcode90_B
fill_to(address)
#define opcode90_B eval($)
;sub b
exx
sub b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $91
#ifndef opcode91
fill_to(address)
#define opcode91 eval($)
;sub c
exx
sub c
exx
NEXT
#else
#ifndef opcode91_B
fill_to(address)
#define opcode91_B eval($)
;sub c
exx
sub c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $92
#ifndef opcode92
fill_to(address)
#define opcode92 eval($)
;sub d
exx
sub d
exx
NEXT
#else
#ifndef opcode92_B
fill_to(address)
#define opcode92_B eval($)
;sub d
exx
sub d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $93
#ifndef opcode93
fill_to(address)
#define opcode93 eval($)
;sub e
exx
sub e
exx
NEXT
#else
#ifndef opcode93_B
fill_to(address)
#define opcode93_B eval($)
;sub e
exx
sub e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $94
#ifndef opcode94
fill_to(address)
#define opcode94 eval($)
;sub h
exx
sub h
exx
NEXT
#else
#ifndef opcode94_B
fill_to(address)
#define opcode94_B eval($)
;sub h
exx
sub h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $95
#ifndef opcode95
fill_to(address)
#define opcode95 eval($)
;sub l
exx
sub l
exx
NEXT
#else
#ifndef opcode95_B
fill_to(address)
#define opcode95_B eval($)
;sub l
exx
sub l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $96
#ifndef opcode96
fill_to(address)
#define opcode96 eval($)
;sub (hl)
exx
sub (hl)
exx
NEXT
#else
#ifndef opcode96_B
fill_to(address)
#define opcode96_B eval($)
;sub (hl)
exx
sub (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $97
#ifndef opcode97
fill_to(address)
#define opcode97 eval($)
;sub a
sub a
NEXT
#else
#ifndef opcode97_B
fill_to(address)
#define opcode97_B eval($)
;sub a
sub a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $98
#ifndef opcode98
fill_to(address)
#define opcode98 eval($)
;sbc a,b
exx
sbc a,b
exx
NEXT
#else
#ifndef opcode98_B
fill_to(address)
#define opcode98_B eval($)
;sbc a,b
exx
sbc a,b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $99
#ifndef opcode99
fill_to(address)
#define opcode99 eval($)
;sbc a,c
exx
sbc a,c
exx
NEXT
#else
#ifndef opcode99_B
fill_to(address)
#define opcode99_B eval($)
;sbc a,c
exx
sbc a,c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $9A
#ifndef opcode9A
fill_to(address)
#define opcode9A eval($)
;sbc a,d
exx
sbc a,d
exx
NEXT
#else
#ifndef opcode9A_B
fill_to(address)
#define opcode9A_B eval($)
;sbc a,d
exx
sbc a,d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $9B
#ifndef opcode9B
fill_to(address)
#define opcode9B eval($)
;sbc a,e
exx
sbc a,e
exx
NEXT
#else
#ifndef opcode9B_B
fill_to(address)
#define opcode9B_B eval($)
;sbc a,e
exx
sbc a,e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $9C
#ifndef opcode9C
fill_to(address)
#define opcode9C eval($)
;sbc a,h
exx
sbc a,h
exx
NEXT
#else
#ifndef opcode9C_B
fill_to(address)
#define opcode9C_B eval($)
;sbc a,h
exx
sbc a,h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $9D
#ifndef opcode9D
fill_to(address)
#define opcode9D eval($)
;sbc a,l
exx
sbc a,l
exx
NEXT
#else
#ifndef opcode9D_B
fill_to(address)
#define opcode9D_B eval($)
;sbc a,l
exx
sbc a,l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $9E
#ifndef opcode9E
fill_to(address)
#define opcode9E eval($)
;sbc a,(hl)
exx
sbc a,(hl)
exx
NEXT
#else
#ifndef opcode9E_B
fill_to(address)
#define opcode9E_B eval($)
;sbc a,(hl)
exx
sbc a,(hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $9F
#ifndef opcode9F
fill_to(address)
#define opcode9F eval($)
;sbc a,a
sbc a,a
NEXT
#else
#ifndef opcode9F_B
fill_to(address)
#define opcode9F_B eval($)
;sbc a,a
sbc a,a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A0
#ifndef opcodeA0
fill_to(address)
#define opcodeA0 eval($)
;and b
exx
and b
exx
NEXT
#else
#ifndef opcodeA0_B
fill_to(address)
#define opcodeA0_B eval($)
;and b
exx
and b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A1
#ifndef opcodeA1
fill_to(address)
#define opcodeA1 eval($)
;and c
exx
and c
exx
NEXT
#else
#ifndef opcodeA1_B
fill_to(address)
#define opcodeA1_B eval($)
;and c
exx
and c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A2
#ifndef opcodeA2
fill_to(address)
#define opcodeA2 eval($)
;and d
exx
and d
exx
NEXT
#else
#ifndef opcodeA2_B
fill_to(address)
#define opcodeA2_B eval($)
;and d
exx
and d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A3
#ifndef opcodeA3
fill_to(address)
#define opcodeA3 eval($)
;and e
exx
and e
exx
NEXT
#else
#ifndef opcodeA3_B
fill_to(address)
#define opcodeA3_B eval($)
;and e
exx
and e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A4
#ifndef opcodeA4
fill_to(address)
#define opcodeA4 eval($)
;and h
exx
and h
exx
NEXT
#else
#ifndef opcodeA4_B
fill_to(address)
#define opcodeA4_B eval($)
;and h
exx
and h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A5
#ifndef opcodeA5
fill_to(address)
#define opcodeA5 eval($)
;and l
exx
and l
exx
NEXT
#else
#ifndef opcodeA5_B
fill_to(address)
#define opcodeA5_B eval($)
;and l
exx
and l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A6
#ifndef opcodeA6
fill_to(address)
#define opcodeA6 eval($)
;and (hl)
exx
and (hl)
exx
NEXT
#else
#ifndef opcodeA6_B
fill_to(address)
#define opcodeA6_B eval($)
;and (hl)
exx
and (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A7
#ifndef opcodeA7
fill_to(address)
#define opcodeA7 eval($)
;and a
and a
NEXT
#else
#ifndef opcodeA7_B
fill_to(address)
#define opcodeA7_B eval($)
;and a
and a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A8
#ifndef opcodeA8
fill_to(address)
#define opcodeA8 eval($)
;xor b
exx
xor b
exx
NEXT
#else
#ifndef opcodeA8_B
fill_to(address)
#define opcodeA8_B eval($)
;xor b
exx
xor b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $A9
#ifndef opcodeA9
fill_to(address)
#define opcodeA9 eval($)
;xor c
exx
xor c
exx
NEXT
#else
#ifndef opcodeA9_B
fill_to(address)
#define opcodeA9_B eval($)
;xor c
exx
xor c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $AA
#ifndef opcodeAA
fill_to(address)
#define opcodeAA eval($)
;xor d
exx
xor d
exx
NEXT
#else
#ifndef opcodeAA_B
fill_to(address)
#define opcodeAA_B eval($)
;xor d
exx
xor d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $AB
#ifndef opcodeAB
fill_to(address)
#define opcodeAB eval($)
;xor e
exx
xor e
exx
NEXT
#else
#ifndef opcodeAB_B
fill_to(address)
#define opcodeAB_B eval($)
;xor e
exx
xor e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $AC
#ifndef opcodeAC
fill_to(address)
#define opcodeAC eval($)
;xor h
exx
xor h
exx
NEXT
#else
#ifndef opcodeAC_B
fill_to(address)
#define opcodeAC_B eval($)
;xor h
exx
xor h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $AD
#ifndef opcodeAD
fill_to(address)
#define opcodeAD eval($)
;xor l
exx
xor l
exx
NEXT
#else
#ifndef opcodeAD_B
fill_to(address)
#define opcodeAD_B eval($)
;xor l
exx
xor l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $AE
#ifndef opcodeAE
fill_to(address)
#define opcodeAE eval($)
;xor (hl)
exx
xor (hl)
exx
NEXT
#else
#ifndef opcodeAE_B
fill_to(address)
#define opcodeAE_B eval($)
;xor (hl)
exx
xor (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $AF
#ifndef opcodeAF
fill_to(address)
#define opcodeAF eval($)
;xor a
xor a
NEXT
#else
#ifndef opcodeAF_B
fill_to(address)
#define opcodeAF_B eval($)
;xor a
xor a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B0
#ifndef opcodeB0
fill_to(address)
#define opcodeB0 eval($)
;or b
exx
or b
exx
NEXT
#else
#ifndef opcodeB0_B
fill_to(address)
#define opcodeB0_B eval($)
;or b
exx
or b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B1
#ifndef opcodeB1
fill_to(address)
#define opcodeB1 eval($)
;or c
exx
or c
exx
NEXT
#else
#ifndef opcodeB1_B
fill_to(address)
#define opcodeB1_B eval($)
;or c
exx
or c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B2
#ifndef opcodeB2
fill_to(address)
#define opcodeB2 eval($)
;or d
exx
or d
exx
NEXT
#else
#ifndef opcodeB2_B
fill_to(address)
#define opcodeB2_B eval($)
;or d
exx
or d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B3
#ifndef opcodeB3
fill_to(address)
#define opcodeB3 eval($)
;or e
exx
or e
exx
NEXT
#else
#ifndef opcodeB3_B
fill_to(address)
#define opcodeB3_B eval($)
;or e
exx
or e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B4
#ifndef opcodeB4
fill_to(address)
#define opcodeB4 eval($)
;or h
exx
or h
exx
NEXT
#else
#ifndef opcodeB4_B
fill_to(address)
#define opcodeB4_B eval($)
;or h
exx
or h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B5
#ifndef opcodeB5
fill_to(address)
#define opcodeB5 eval($)
;or l
exx
or l
exx
NEXT
#else
#ifndef opcodeB5_B
fill_to(address)
#define opcodeB5_B eval($)
;or l
exx
or l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B6
#ifndef opcodeB6
fill_to(address)
#define opcodeB6 eval($)
;or (hl)
exx
or (hl)
exx
NEXT
#else
#ifndef opcodeB6_B
fill_to(address)
#define opcodeB6_B eval($)
;or (hl)
exx
or (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B7
#ifndef opcodeB7
fill_to(address)
#define opcodeB7 eval($)
;or a
or a
NEXT
#else
#ifndef opcodeB7_B
fill_to(address)
#define opcodeB7_B eval($)
;or a
or a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B8
#ifndef opcodeB8
fill_to(address)
#define opcodeB8 eval($)
;cp b
exx
cp b
exx
NEXT
#else
#ifndef opcodeB8_B
fill_to(address)
#define opcodeB8_B eval($)
;cp b
exx
cp b
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $B9
#ifndef opcodeB9
fill_to(address)
#define opcodeB9 eval($)
;cp c
exx
cp c
exx
NEXT
#else
#ifndef opcodeB9_B
fill_to(address)
#define opcodeB9_B eval($)
;cp c
exx
cp c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $BA
#ifndef opcodeBA
fill_to(address)
#define opcodeBA eval($)
;cp d
exx
cp d
exx
NEXT
#else
#ifndef opcodeBA_B
fill_to(address)
#define opcodeBA_B eval($)
;cp d
exx
cp d
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $BB
#ifndef opcodeBB
fill_to(address)
#define opcodeBB eval($)
;cp e
exx
cp e
exx
NEXT
#else
#ifndef opcodeBB_B
fill_to(address)
#define opcodeBB_B eval($)
;cp e
exx
cp e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $BC
#ifndef opcodeBC
fill_to(address)
#define opcodeBC eval($)
;cp h
exx
cp h
exx
NEXT
#else
#ifndef opcodeBC_B
fill_to(address)
#define opcodeBC_B eval($)
;cp h
exx
cp h
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $BD
#ifndef opcodeBD
fill_to(address)
#define opcodeBD eval($)
;cp l
exx
cp l
exx
NEXT
#else
#ifndef opcodeBD_B
fill_to(address)
#define opcodeBD_B eval($)
;cp l
exx
cp l
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $BE
#ifndef opcodeBE
fill_to(address)
#define opcodeBE eval($)
;cp (hl)
exx
cp (hl)
exx
NEXT
#else
#ifndef opcodeBE_B
fill_to(address)
#define opcodeBE_B eval($)
;cp (hl)
exx
cp (hl)
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $BF
#ifndef opcodeBF
fill_to(address)
#define opcodeBF eval($)
;cp a
cp a
NEXT
#else
#ifndef opcodeBF_B
fill_to(address)
#define opcodeBF_B eval($)
;cp a
cp a
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C0
#ifndef opcodeC0
fill_to(address)
#define opcodeC0 eval($)
;ret nz
jp nz,opcodeC9
NEXT_INT
#else
#ifndef opcodeC0_B
fill_to(address)
#define opcodeC0_B eval($)
;ret nz
jp nz,opcodeC9_B
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C1
#ifndef opcodeC1
fill_to(address)
#define opcodeC1 eval($)
;pop bc
exx
ld c,(iy)
inc iy
ld b,(iy)
inc iy
exx
NEXT
#else
#ifndef opcodeC1_B
fill_to(address)
#define opcodeC1_B eval($)
;pop bc
exx
ld c,(iy)
inc iy
ld b,(iy)
inc iy
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C2
#ifndef opcodeC2
fill_to(address)
#define opcodeC2 eval($)
;jp nz,NN
jp nz,opcodeC3
pop hl
NEXT_INT
#else
#ifndef opcodeC2_B
fill_to(address)
#define opcodeC2_B eval($)
;jp nz,NN
jp nz,opcodeC3_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C3
#ifndef opcodeC3
fill_to(address)
#define opcodeC3 eval($)
;jp NN
pop hl
ld sp,hl
NEXT_INT
#else
#ifndef opcodeC3_B
fill_to(address)
#define opcodeC3_B eval($)
;jp NN
dec sp
pop hl
ld sp,hl
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C4
#ifndef opcodeC4
fill_to(address)
#define opcodeC4 eval($)
;call nz,NN
jp nz,opcodeCD
pop hl
NEXT_INT
#else
#ifndef opcodeC4_B
fill_to(address)
#define opcodeC4_B eval($)
;call nz,NN
jp nz,opcodeCD_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C5
#ifndef opcodeC5
fill_to(address)
#define opcodeC5 eval($)
;push bc
exx
dec iy
ld (iy),b
dec iy
ld (iy),c
exx
NEXT
#else
#ifndef opcodeC5_B
fill_to(address)
#define opcodeC5_B eval($)
;push bc
exx
dec iy
ld (iy),b
dec iy
ld (iy),c
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C6
#ifndef opcodeC6
fill_to(address)
#define opcodeC6 eval($)
;add a,N
pop hl
add a,l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeC6_B
fill_to(address)
#define opcodeC6_B eval($)
;add a,N
add a,b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C7
#ifndef opcodeC7
fill_to(address)
#define opcodeC7 eval($)
;rst 00h
ld hl,$00
jp do_call
#else
#ifndef opcodeC7_B
fill_to(address)
#define opcodeC7_B eval($)
;rst 00h
dec sp
ld hl,$00
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C8
#ifndef opcodeC8
fill_to(address)
#define opcodeC8 eval($)
;ret z
jp z,opcodeC9
NEXT_INT
#else
#ifndef opcodeC8_B
fill_to(address)
#define opcodeC8_B eval($)
;ret z
jp z,opcodeC9_B
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $C9
#ifndef opcodeC9
fill_to(address)
#define opcodeC9 eval($)
;ret
ld sp,iy
inc iy
inc iy
pop hl
ld sp,hl
NEXT_INT
#else
#ifndef opcodeC9_B
fill_to(address)
#define opcodeC9_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $CA
#ifndef opcodeCA
fill_to(address)
#define opcodeCA eval($)
;jp z,NN
jp z,opcodeC3
pop hl
NEXT_INT
#else
#ifndef opcodeCA_B
fill_to(address)
#define opcodeCA_B eval($)
;jp z,NN
jp z,opcodeC3_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $CB
#ifndef opcodeCB
fill_to(address)
#define opcodeCB eval($)
;empty
#else
#ifndef opcodeCB_B
fill_to(address)
#define opcodeCB_B eval($)
;CB-opcodes
ex af,af'
ld a,b
ld hl,bitcodes_B
jp (hl)
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $CC
#ifndef opcodeCC
fill_to(address)
#define opcodeCC eval($)
;call z,NN
jp z,opcodeCD
pop hl
NEXT_INT
#else
#ifndef opcodeCC_B
fill_to(address)
#define opcodeCC_B eval($)
;call z,NN
jp z,opcodeCD_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $CD
#ifndef opcodeCD
fill_to(address)
#define opcodeCD eval($)
;call NN
pop hl
do_call:
dec iy
dec iy
ld (_+2),iy
_
ld (0),sp
ld sp,hl
NEXT_INT
#else
#ifndef opcodeCD_B
fill_to(address)
#define opcodeCD_B eval($)
;call NN
dec sp
pop hl
dec iy
dec iy
ld (_+2),iy
_
ld (0),sp
ld sp,hl
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $CE
#ifndef opcodeCE
fill_to(address)
#define opcodeCE eval($)
;adc a,N
pop hl
adc a,l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeCE_B
fill_to(address)
#define opcodeCE_B eval($)
;adc a,N
adc a,b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $CF
#ifndef opcodeCF
fill_to(address)
#define opcodeCF eval($)
;rst 08h
ld hl,$08
jp do_call
#else
#ifndef opcodeCF_B
fill_to(address)
#define opcodeCF_B eval($)
;rst 08h
dec sp
ld hl,$08
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D0
#ifndef opcodeD0
fill_to(address)
#define opcodeD0 eval($)
;ret nc
jp nc,opcodeC9
NEXT_INT
#else
#ifndef opcodeD0_B
fill_to(address)
#define opcodeD0_B eval($)
;ret nc
jp nc,opcodeC9_B
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D1
#ifndef opcodeD1
fill_to(address)
#define opcodeD1 eval($)
;pop de
exx
ld e,(iy)
inc iy
ld d,(iy)
inc iy
exx
NEXT
#else
#ifndef opcodeD1_B
fill_to(address)
#define opcodeD1_B eval($)
;pop de
exx
ld e,(iy)
inc iy
ld d,(iy)
inc iy
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D2
#ifndef opcodeD2
fill_to(address)
#define opcodeD2 eval($)
;jp nc,NN
jp nc,opcodeC3
pop hl
NEXT_INT
#else
#ifndef opcodeD2_B
fill_to(address)
#define opcodeD2_B eval($)
;jp nc,NN
jp nc,opcodeC3_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D3
#ifndef opcodeD3
fill_to(address)
#define opcodeD3 eval($)
;empty
#else
#ifndef opcodeD3_B
fill_to(address)
#define opcodeD3_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D4
#ifndef opcodeD4
fill_to(address)
#define opcodeD4 eval($)
;call nc,NN
jp nc,opcodeCD
pop hl
NEXT_INT
#else
#ifndef opcodeD4_B
fill_to(address)
#define opcodeD4_B eval($)
;call nc,NN
jp nc,opcodeCD_B
inc sp
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D5
#ifndef opcodeD5
fill_to(address)
#define opcodeD5 eval($)
;push de
exx
dec iy
ld (iy),d
dec iy
ld (iy),e
exx
NEXT
#else
#ifndef opcodeD5_B
fill_to(address)
#define opcodeD5_B eval($)
;push de
exx
dec iy
ld (iy),d
dec iy
ld (iy),e
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D6
#ifndef opcodeD6
fill_to(address)
#define opcodeD6 eval($)
;sub N
pop hl
sub l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeD6_B
fill_to(address)
#define opcodeD6_B eval($)
;sub N
sub b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D7
#ifndef opcodeD7
fill_to(address)
#define opcodeD7 eval($)
;rst 10h
ld hl,$10
jp do_call
#else
#ifndef opcodeD7_B
fill_to(address)
#define opcodeD7_B eval($)
;rst 10h
dec sp
ld hl,$10
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D8
#ifndef opcodeD8
fill_to(address)
#define opcodeD8 eval($)
;ret c
jp c,opcodeC9
NEXT_INT
#else
#ifndef opcodeD8_B
fill_to(address)
#define opcodeD8_B eval($)
;ret c
jp c,opcodeC9_B
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $D9
#ifndef opcodeD9
fill_to(address)
#define opcodeD9 eval($)
;reti
ld sp,iy
inc iy
inc iy
pop hl
ld sp,hl
jp opcodeFB
#else
#ifndef opcodeD9_B
fill_to(address)
#define opcodeD9_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $DA
#ifndef opcodeDA
fill_to(address)
#define opcodeDA eval($)
;jp c,NN
jp c,opcodeC3
pop hl
NEXT_INT
#else
#ifndef opcodeDA_B
fill_to(address)
#define opcodeDA_B eval($)
;jp c,NN
jp c,opcodeC3_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $DB
#ifndef opcodeDB
fill_to(address)
#define opcodeDB eval($)
;empty
#else
#ifndef opcodeDB_B
fill_to(address)
#define opcodeDB_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $DC
#ifndef opcodeDC
fill_to(address)
#define opcodeDC eval($)
;call c,NN
jp c,opcodeCD
pop hl
NEXT_INT
#else
#ifndef opcodeDC_B
fill_to(address)
#define opcodeDC_B eval($)
;call c,NN
jp c,opcodeCD_B
inc sp
NEXT_INT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $DD
#ifndef opcodeDD
fill_to(address)
#define opcodeDD eval($)
;empty
#else
#ifndef opcodeDD_B
fill_to(address)
#define opcodeDD_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $DE
#ifndef opcodeDE
fill_to(address)
#define opcodeDE eval($)
;sbc a,N
pop hl
sbc a,l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeDE_B
fill_to(address)
#define opcodeDE_B eval($)
;sbc a,N
sbc a,b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $DF
#ifndef opcodeDF
fill_to(address)
#define opcodeDF eval($)
;rst 18h
ld hl,$18
jp do_call
#else
#ifndef opcodeDF_B
fill_to(address)
#define opcodeDF_B eval($)
;rst 18h
dec sp
ld hl,$18
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E0
#ifndef opcodeE0
fill_to(address)
#define opcodeE0 eval($)
;ld ($FF00+N),a
ex af,af'
dec sp
pop af
ld l,a
ld h,$FF
inc a
jp p,io_write
ex af,af'
ld (hl),a
NEXT
#else
#ifndef opcodeE0_B
fill_to(address)
#define opcodeE0_B eval($)
;ld ($FF00+N),a
ex af,af'
ld a,b
ld l,a
ld h,$FF
inc a
jp p,io_write
ex af,af'
ld (hl),a
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E1
#ifndef opcodeE1
fill_to(address)
#define opcodeE1 eval($)
;pop hl
ld (_+1),iy
exx
_
ld hl,(0)
exx
inc iy
inc iy
NEXT
#else
#ifndef opcodeE1_B
fill_to(address)
#define opcodeE1_B eval($)
;pop hl
ld (_+1),iy
exx
_
ld hl,(0)
exx
inc iy
inc iy
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E2
#ifndef opcodeE2
fill_to(address)
#define opcodeE2 eval($)
;ld ($FF00+c),a
ex af,af'
exx
ld a,c
exx
ld l,a
ld h,$FF
inc a
jp p,io_write
ex af,af'
ld (hl),a
NEXT
#else
#ifndef opcodeE2_B
fill_to(address)
#define opcodeE2_B eval($)
;ld ($FF00+c),a
dec sp
jp opcodeE2
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E3
#ifndef opcodeE3
fill_to(address)
#define opcodeE3 eval($)
;empty
#else
#ifndef opcodeE3_B
fill_to(address)
#define opcodeE3_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E4
#ifndef opcodeE4
fill_to(address)
#define opcodeE4 eval($)
;empty
#else
#ifndef opcodeE4_B
fill_to(address)
#define opcodeE4_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E5
#ifndef opcodeE5
fill_to(address)
#define opcodeE5 eval($)
;push hl
dec iy
dec iy
ld (_+1),iy
exx
_
ld (0),hl
exx
NEXT
#else
#ifndef opcodeE5_B
fill_to(address)
#define opcodeE5_B eval($)
;push hl
dec iy
dec iy
ld (_+1),iy
exx
_
ld (0),hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E6
#ifndef opcodeE6
fill_to(address)
#define opcodeE6 eval($)
;and N
pop hl
and l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeE6_B
fill_to(address)
#define opcodeE6_B eval($)
;and N
and b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E7
#ifndef opcodeE7
fill_to(address)
#define opcodeE7 eval($)
;rst 20h
ld hl,$20
jp do_call
#else
#ifndef opcodeE7_B
fill_to(address)
#define opcodeE7_B eval($)
;rst 20h
dec sp
ld hl,$20
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E8
#ifndef opcodeE8
fill_to(address)
#define opcodeE8 eval($)
;add sp,N
ex af,af'
pop hl
ld b,h
ld a,l
rla
sbc a,a
ld h,a
ex de,hl
add iy,de
ex de,hl
ex af,af'
NEXT_B
#else
#ifndef opcodeE8_B
fill_to(address)
#define opcodeE8_B eval($)
;add sp,N
ex af,af'
ld l,b
ld a,l
rla
sbc a,a
ld h,a
ex de,hl
add iy,de
ex de,hl
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $E9
#ifndef opcodeE9
fill_to(address)
#define opcodeE9 eval($)
;jp (hl)
exx
ld sp,hl
exx
NEXT_INT
#else
#ifndef opcodeE9_B
fill_to(address)
#define opcodeE9_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $EA
#ifndef opcodeEA
fill_to(address)
#define opcodeEA eval($)
;ld (NN),a
ex af,af'
pop hl
bit 7,h
jr z,_
ex af,af'
ld (hl),a
NEXT
_
ex af,af'
ld l,a
ex af,af'
jp memcontrol
#else
#ifndef opcodeEA_B
fill_to(address)
#define opcodeEA_B eval($)
;ld (NN),a
ex af,af'
pop hl
ld a,l
ld l,b
ld b,h
ld h,a
rla
jr nc,_
ex af,af'
ld (hl),a
NEXT_B
_
dec sp
ex af,af'
ld l,a
ex af,af'
jp memcontrol
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $EB
#ifndef opcodeEB
fill_to(address)
#define opcodeEB eval($)
;empty
#else
#ifndef opcodeEB_B
fill_to(address)
#define opcodeEB_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $EC
#ifndef opcodeEC
fill_to(address)
#define opcodeEC eval($)
;empty
#else
#ifndef opcodeEC_B
fill_to(address)
#define opcodeEC_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $ED
#ifndef opcodeED
fill_to(address)
#define opcodeED eval($)
;empty
#else
#ifndef opcodeED_B
fill_to(address)
#define opcodeED_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $EE
#ifndef opcodeEE
fill_to(address)
#define opcodeEE eval($)
;xor N
pop hl
xor l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeEE_B
fill_to(address)
#define opcodeEE_B eval($)
;xor N
xor b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $EF
#ifndef opcodeEF
fill_to(address)
#define opcodeEF eval($)
;rst 28h
ld hl,$28
jp do_call
#else
#ifndef opcodeEF_B
fill_to(address)
#define opcodeEF_B eval($)
;rst 28h
dec sp
ld hl,$28
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F0
#ifndef opcodeF0
fill_to(address)
#define opcodeF0 eval($)
;ld a,($FF00+N)
pop hl
ld b,h
ld h,$FF
ld a,(hl)
NEXT_B
#else
#ifndef opcodeF0_B
fill_to(address)
#define opcodeF0_B eval($)
;ld a,($FF00+N)
ld l,b
ld h,$FF
ld a,(hl)
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F1
#ifndef opcodeF1
fill_to(address)
#define opcodeF1 eval($)
;pop af
ld hl,0
add hl,sp
ld sp,iy
inc iy
inc iy
pop af
ld sp,hl
NEXT
#else
#ifndef opcodeF1_B
fill_to(address)
#define opcodeF1_B eval($)
;pop af
ld hl,0
add hl,sp
ld sp,iy
inc iy
inc iy
pop af
ld sp,hl
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F2
#ifndef opcodeF2
fill_to(address)
#define opcodeF2 eval($)
;ld a,($FF00+C)
ex af,af'
exx
ld a,c
exx
ld l,a
ld h,$FF
ex af,af'
ld a,(hl)
NEXT
#else
#ifndef opcodeF2_B
fill_to(address)
#define opcodeF2_B eval($)
;ld a,($FF00+C)
ex af,af'
exx
ld a,c
exx
ld l,a
ld h,$FF
ex af,af'
ld a,(hl)
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F3
#ifndef opcodeF3
fill_to(address)
#define opcodeF3 eval($)
;empty
#else
#ifndef opcodeF3_B
fill_to(address)
#define opcodeF3_B eval($)
;di
ex af,af'
xor a
ld (intstatus),a
ex af,af'
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F4
#ifndef opcodeF4
fill_to(address)
#define opcodeF4 eval($)
;empty
#else
#ifndef opcodeF4_B
fill_to(address)
#define opcodeF4_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F5
#ifndef opcodeF5
fill_to(address)
#define opcodeF5 eval($)
;push af
ld (_+1),sp
ld sp,iy
dec iy
dec iy
push af
_
ld sp,0
NEXT
#else
#ifndef opcodeF5_B
fill_to(address)
#define opcodeF5_B eval($)
;push af
ld (_+1),sp
ld sp,iy
dec iy
dec iy
push af
_
ld sp,0
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F6
#ifndef opcodeF6
fill_to(address)
#define opcodeF6 eval($)
;or N
pop hl
or l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeF6_B
fill_to(address)
#define opcodeF6_B eval($)
;or N
or b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F7
#ifndef opcodeF7
fill_to(address)
#define opcodeF7 eval($)
;rst 30h
ld hl,$30
jp do_call
#else
#ifndef opcodeF7_B
fill_to(address)
#define opcodeF7_B eval($)
;rst 30h
dec sp
ld hl,$30
jp do_call
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F8
#ifndef opcodeF8
fill_to(address)
#define opcodeF8 eval($)
;ld hl,sp+N
ex af,af'
ld hl,1
add hl,sp
exx
pop hl
ld a,l
rla
sbc a,a
ld h,a
ld sp,iy
add hl,sp
exx
ld sp,hl
ex af,af'
NEXT
#else
#ifndef opcodeF8_B
fill_to(address)
#define opcodeF8_B eval($)
;ld hl,sp+N
ex af,af'
ld hl,0
add hl,sp
ld a,b
exx
ld l,a
rla
sbc a,a
ld h,a
ld sp,iy
add hl,sp
exx
ld sp,hl
ex af,af'
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $F9
#ifndef opcodeF9
fill_to(address)
#define opcodeF9 eval($)
;ld sp,hl
exx
ex de,hl
ld iyh,d
ld iyl,e
ex de,hl
exx
NEXT
#else
#ifndef opcodeF9_B
fill_to(address)
#define opcodeF9_B eval($)
;ld sp,hl
exx
ex de,hl
ld iyh,d
ld iyl,e
ex de,hl
exx
NEXT_B
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $FA
#ifndef opcodeFA
fill_to(address)
#define opcodeFA eval($)
;ld a,(NN)
pop hl
ld a,(hl)
NEXT
#else
#ifndef opcodeFA_B
fill_to(address)
#define opcodeFA_B eval($)
;ld a,(NN)
dec sp
pop hl
ld a,(hl)
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $FB
#ifndef opcodeFB
fill_to(address)
#define opcodeFB eval($)
;ei
ex af,af'
ld a,1
ld (intstatus),a
check_ints_2:
ld hl,0
add hl,sp
ld sp,mystack
push hl
jp check_ints
#else
#ifndef opcodeFB_B
fill_to(address)
#define opcodeFB_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $FC
#ifndef opcodeFC
fill_to(address)
#define opcodeFC eval($)
;empty
#else
#ifndef opcodeFC_B
fill_to(address)
#define opcodeFC_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $FD
#ifndef opcodeFD
fill_to(address)
#define opcodeFD eval($)
;empty
#else
#ifndef opcodeFD_B
fill_to(address)
#define opcodeFD_B eval($)
;empty
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $FE
#ifndef opcodeFE
fill_to(address)
#define opcodeFE eval($)
;cp N
pop hl
cp l
;NEXT_H
ld l,h ;4cc
ld h,e ;8cc
ld h,(hl) ;15cc
jp (hl) ;19cc
#else
#ifndef opcodeFE_B
fill_to(address)
#define opcodeFE_B eval($)
;cp N
cp b
NEXT
#else
#define address eval(address+1)
#endif
#endif
#endif
#if address&$FF == $FF
#ifndef opcodeFF
fill_to(address)
#define opcodeFF eval($)
;rst 38h
ld hl,$38
jp do_call
#else
#ifndef opcodeFF_B
fill_to(address)
#define opcodeFF_B eval($)
;rst 38h
dec sp
ld hl,$38
jp do_call
#else
#if address-$ < 256
insert_op(address+1)
#endif
#endif
#endif
#endif
#endmacro
#macro fill_to(address)
#if address == ($+1)
.db $FD
#else
#if address == ($+2)
.db $FD,$FD
#else
#if address > ($+2)
rst 18h
.db address-$-1
#define bytes_skipped eval(bytes_skipped+address-$)
.org address
#else
#if address < $
.echo "ERROR: NEGATIVE FILL AT ",$," TO ",address
#endif
#endif
#endif
#endif
;.block address - $
#endmacro
#macro insert_opcodes(howmany)
#if howmany > 0
insert_op($)
insert_opcodes(howmany-1)
#endif
#endmacro
page3code:
.org $E000
opcodetable:
.db opcode00 >> 8
.db opcode01 >> 8
.db opcode02 >> 8
.db opcode03 >> 8
.db opcode04 >> 8
.db opcode05 >> 8
.db opcode06 >> 8
.db opcode07 >> 8
.db opcode08 >> 8
.db opcode09 >> 8
.db opcode0A >> 8
.db opcode0B >> 8
.db opcode0C >> 8
.db opcode0D >> 8
.db opcode0E >> 8
.db opcode0F >> 8
.db opcode10 >> 8
.db opcode11 >> 8
.db opcode12 >> 8
.db opcode13 >> 8
.db opcode14 >> 8
.db opcode15 >> 8
.db opcode16 >> 8
.db opcode17 >> 8
.db opcode18 >> 8
.db opcode19 >> 8
.db opcode1A >> 8
.db opcode1B >> 8
.db opcode1C >> 8
.db opcode1D >> 8
.db opcode1E >> 8
.db opcode1F >> 8
.db opcode20 >> 8
.db opcode21 >> 8
.db opcode22 >> 8
.db opcode23 >> 8
.db opcode24 >> 8
.db opcode25 >> 8
.db opcode26 >> 8
.db opcode27 >> 8
.db opcode28 >> 8
.db opcode29 >> 8
.db opcode2A >> 8
.db opcode2B >> 8
.db opcode2C >> 8
.db opcode2D >> 8
.db opcode2E >> 8
.db opcode2F >> 8
.db opcode30 >> 8
.db opcode31 >> 8
.db opcode32 >> 8
.db opcode33 >> 8
.db opcode34 >> 8
.db opcode35 >> 8
.db opcode36 >> 8
.db opcode37 >> 8
.db opcode38 >> 8
.db opcode39 >> 8
.db opcode3A >> 8
.db opcode3B >> 8
.db opcode3C >> 8
.db opcode3D >> 8
.db opcode3E >> 8
.db opcode3F >> 8
.db opcode40 >> 8
.db opcode41 >> 8
.db opcode42 >> 8
.db opcode43 >> 8
.db opcode44 >> 8
.db opcode45 >> 8
.db opcode46 >> 8
.db opcode47 >> 8
.db opcode48 >> 8
.db opcode49 >> 8
.db opcode4A >> 8
.db opcode4B >> 8
.db opcode4C >> 8
.db opcode4D >> 8
.db opcode4E >> 8
.db opcode4F >> 8
.db opcode50 >> 8
.db opcode51 >> 8
.db opcode52 >> 8
.db opcode53 >> 8
.db opcode54 >> 8
.db opcode55 >> 8
.db opcode56 >> 8
.db opcode57 >> 8
.db opcode58 >> 8
.db opcode59 >> 8
.db opcode5A >> 8
.db opcode5B >> 8
.db opcode5C >> 8
.db opcode5D >> 8
.db opcode5E >> 8
.db opcode5F >> 8
.db opcode60 >> 8
.db opcode61 >> 8
.db opcode62 >> 8
.db opcode63 >> 8
.db opcode64 >> 8
.db opcode65 >> 8
.db opcode66 >> 8
.db opcode67 >> 8
.db opcode68 >> 8
.db opcode69 >> 8
.db opcode6A >> 8
.db opcode6B >> 8
.db opcode6C >> 8
.db opcode6D >> 8
.db opcode6E >> 8
.db opcode6F >> 8
.db opcode70 >> 8
.db opcode71 >> 8
.db opcode72 >> 8
.db opcode73 >> 8
.db opcode74 >> 8
.db opcode75 >> 8
.db opcode76 >> 8
.db opcode77 >> 8
.db opcode78 >> 8
.db opcode79 >> 8
.db opcode7A >> 8
.db opcode7B >> 8
.db opcode7C >> 8
.db opcode7D >> 8
.db opcode7E >> 8
.db opcode7F >> 8
.db opcode80 >> 8
.db opcode81 >> 8
.db opcode82 >> 8
.db opcode83 >> 8
.db opcode84 >> 8
.db opcode85 >> 8
.db opcode86 >> 8
.db opcode87 >> 8
.db opcode88 >> 8
.db opcode89 >> 8
.db opcode8A >> 8
.db opcode8B >> 8
.db opcode8C >> 8
.db opcode8D >> 8
.db opcode8E >> 8
.db opcode8F >> 8
.db opcode90 >> 8
.db opcode91 >> 8
.db opcode92 >> 8
.db opcode93 >> 8
.db opcode94 >> 8
.db opcode95 >> 8
.db opcode96 >> 8
.db opcode97 >> 8
.db opcode98 >> 8
.db opcode99 >> 8
.db opcode9A >> 8
.db opcode9B >> 8
.db opcode9C >> 8
.db opcode9D >> 8
.db opcode9E >> 8
.db opcode9F >> 8
.db opcodeA0 >> 8
.db opcodeA1 >> 8
.db opcodeA2 >> 8
.db opcodeA3 >> 8
.db opcodeA4 >> 8
.db opcodeA5 >> 8
.db opcodeA6 >> 8
.db opcodeA7 >> 8
.db opcodeA8 >> 8
.db opcodeA9 >> 8
.db opcodeAA >> 8
.db opcodeAB >> 8
.db opcodeAC >> 8
.db opcodeAD >> 8
.db opcodeAE >> 8
.db opcodeAF >> 8
.db opcodeB0 >> 8
.db opcodeB1 >> 8
.db opcodeB2 >> 8
.db opcodeB3 >> 8
.db opcodeB4 >> 8
.db opcodeB5 >> 8
.db opcodeB6 >> 8
.db opcodeB7 >> 8
.db opcodeB8 >> 8
.db opcodeB9 >> 8
.db opcodeBA >> 8
.db opcodeBB >> 8
.db opcodeBC >> 8
.db opcodeBD >> 8
.db opcodeBE >> 8
.db opcodeBF >> 8
.db opcodeC0 >> 8
.db opcodeC1 >> 8
.db opcodeC2 >> 8
.db opcodeC3 >> 8
.db opcodeC4 >> 8
.db opcodeC5 >> 8
.db opcodeC6 >> 8
.db opcodeC7 >> 8
.db opcodeC8 >> 8
.db opcodeC9 >> 8
.db opcodeCA >> 8
.db opcodeCB >> 8
.db opcodeCC >> 8
.db opcodeCD >> 8
.db opcodeCE >> 8
.db opcodeCF >> 8
.db opcodeD0 >> 8
.db opcodeD1 >> 8
.db opcodeD2 >> 8
.db opcodeD3 >> 8
.db opcodeD4 >> 8
.db opcodeD5 >> 8
.db opcodeD6 >> 8
.db opcodeD7 >> 8
.db opcodeD8 >> 8
.db opcodeD9 >> 8
.db opcodeDA >> 8
.db opcodeDB >> 8
.db opcodeDC >> 8
.db opcodeDD >> 8
.db opcodeDE >> 8
.db opcodeDF >> 8
.db opcodeE0 >> 8
.db opcodeE1 >> 8
.db opcodeE2 >> 8
.db opcodeE3 >> 8
.db opcodeE4 >> 8
.db opcodeE5 >> 8
.db opcodeE6 >> 8
.db opcodeE7 >> 8
.db opcodeE8 >> 8
.db opcodeE9 >> 8
.db opcodeEA >> 8
.db opcodeEB >> 8
.db opcodeEC >> 8
.db opcodeED >> 8
.db opcodeEE >> 8
.db opcodeEF >> 8
.db opcodeF0 >> 8
.db opcodeF1 >> 8
.db opcodeF2 >> 8
.db opcodeF3 >> 8
.db opcodeF4 >> 8
.db opcodeF5 >> 8
.db opcodeF6 >> 8
.db opcodeF7 >> 8
.db opcodeF8 >> 8
.db opcodeF9 >> 8
.db opcodeFA >> 8
.db opcodeFB >> 8
.db opcodeFC >> 8
.db opcodeFD >> 8
.db opcodeFE >> 8
.db opcodeFF >> 8
opcodetable_B:
.db opcode00_B >> 8
.db opcode01_B >> 8
.db opcode02_B >> 8
.db opcode03_B >> 8
.db opcode04_B >> 8
.db opcode05_B >> 8
.db opcode06_B >> 8
.db opcode07_B >> 8
.db opcode08_B >> 8
.db opcode09_B >> 8
.db opcode0A_B >> 8
.db opcode0B_B >> 8
.db opcode0C_B >> 8
.db opcode0D_B >> 8
.db opcode0E_B >> 8
.db opcode0F_B >> 8
.db opcode10_B >> 8
.db opcode11_B >> 8
.db opcode12_B >> 8
.db opcode13_B >> 8
.db opcode14_B >> 8
.db opcode15_B >> 8
.db opcode16_B >> 8
.db opcode17_B >> 8
.db opcode18_B >> 8
.db opcode19_B >> 8
.db opcode1A_B >> 8
.db opcode1B_B >> 8
.db opcode1C_B >> 8
.db opcode1D_B >> 8
.db opcode1E_B >> 8
.db opcode1F_B >> 8
.db opcode20_B >> 8
.db opcode21_B >> 8
.db opcode22_B >> 8
.db opcode23_B >> 8
.db opcode24_B >> 8
.db opcode25_B >> 8
.db opcode26_B >> 8
.db opcode27_B >> 8
.db opcode28_B >> 8
.db opcode29_B >> 8
.db opcode2A_B >> 8
.db opcode2B_B >> 8
.db opcode2C_B >> 8
.db opcode2D_B >> 8
.db opcode2E_B >> 8
.db opcode2F_B >> 8
.db opcode30_B >> 8
.db opcode31_B >> 8
.db opcode32_B >> 8
.db opcode33_B >> 8
.db opcode34_B >> 8
.db opcode35_B >> 8
.db opcode36_B >> 8
.db opcode37_B >> 8
.db opcode38_B >> 8
.db opcode39_B >> 8
.db opcode3A_B >> 8
.db opcode3B_B >> 8
.db opcode3C_B >> 8
.db opcode3D_B >> 8
.db opcode3E_B >> 8
.db opcode3F_B >> 8
.db opcode40_B >> 8
.db opcode41_B >> 8
.db opcode42_B >> 8
.db opcode43_B >> 8
.db opcode44_B >> 8
.db opcode45_B >> 8
.db opcode46_B >> 8
.db opcode47_B >> 8
.db opcode48_B >> 8
.db opcode49_B >> 8
.db opcode4A_B >> 8
.db opcode4B_B >> 8
.db opcode4C_B >> 8
.db opcode4D_B >> 8
.db opcode4E_B >> 8
.db opcode4F_B >> 8
.db opcode50_B >> 8
.db opcode51_B >> 8
.db opcode52_B >> 8
.db opcode53_B >> 8
.db opcode54_B >> 8
.db opcode55_B >> 8
.db opcode56_B >> 8
.db opcode57_B >> 8
.db opcode58_B >> 8
.db opcode59_B >> 8
.db opcode5A_B >> 8
.db opcode5B_B >> 8
.db opcode5C_B >> 8
.db opcode5D_B >> 8
.db opcode5E_B >> 8
.db opcode5F_B >> 8
.db opcode60_B >> 8
.db opcode61_B >> 8
.db opcode62_B >> 8
.db opcode63_B >> 8
.db opcode64_B >> 8
.db opcode65_B >> 8
.db opcode66_B >> 8
.db opcode67_B >> 8
.db opcode68_B >> 8
.db opcode69_B >> 8
.db opcode6A_B >> 8
.db opcode6B_B >> 8
.db opcode6C_B >> 8
.db opcode6D_B >> 8
.db opcode6E_B >> 8
.db opcode6F_B >> 8
.db opcode70_B >> 8
.db opcode71_B >> 8
.db opcode72_B >> 8
.db opcode73_B >> 8
.db opcode74_B >> 8
.db opcode75_B >> 8
.db opcode76_B >> 8
.db opcode77_B >> 8
.db opcode78_B >> 8
.db opcode79_B >> 8
.db opcode7A_B >> 8
.db opcode7B_B >> 8
.db opcode7C_B >> 8
.db opcode7D_B >> 8
.db opcode7E_B >> 8
.db opcode7F_B >> 8
.db opcode80_B >> 8
.db opcode81_B >> 8
.db opcode82_B >> 8
.db opcode83_B >> 8
.db opcode84_B >> 8
.db opcode85_B >> 8
.db opcode86_B >> 8
.db opcode87_B >> 8
.db opcode88_B >> 8
.db opcode89_B >> 8
.db opcode8A_B >> 8
.db opcode8B_B >> 8
.db opcode8C_B >> 8
.db opcode8D_B >> 8
.db opcode8E_B >> 8
.db opcode8F_B >> 8
.db opcode90_B >> 8
.db opcode91_B >> 8
.db opcode92_B >> 8
.db opcode93_B >> 8
.db opcode94_B >> 8
.db opcode95_B >> 8
.db opcode96_B >> 8
.db opcode97_B >> 8
.db opcode98_B >> 8
.db opcode99_B >> 8
.db opcode9A_B >> 8
.db opcode9B_B >> 8
.db opcode9C_B >> 8
.db opcode9D_B >> 8
.db opcode9E_B >> 8
.db opcode9F_B >> 8
.db opcodeA0_B >> 8
.db opcodeA1_B >> 8
.db opcodeA2_B >> 8
.db opcodeA3_B >> 8
.db opcodeA4_B >> 8
.db opcodeA5_B >> 8
.db opcodeA6_B >> 8
.db opcodeA7_B >> 8
.db opcodeA8_B >> 8
.db opcodeA9_B >> 8
.db opcodeAA_B >> 8
.db opcodeAB_B >> 8
.db opcodeAC_B >> 8
.db opcodeAD_B >> 8
.db opcodeAE_B >> 8
.db opcodeAF_B >> 8
.db opcodeB0_B >> 8
.db opcodeB1_B >> 8
.db opcodeB2_B >> 8
.db opcodeB3_B >> 8
.db opcodeB4_B >> 8
.db opcodeB5_B >> 8
.db opcodeB6_B >> 8
.db opcodeB7_B >> 8
.db opcodeB8_B >> 8
.db opcodeB9_B >> 8
.db opcodeBA_B >> 8
.db opcodeBB_B >> 8
.db opcodeBC_B >> 8
.db opcodeBD_B >> 8
.db opcodeBE_B >> 8
.db opcodeBF_B >> 8
.db opcodeC0_B >> 8
.db opcodeC1_B >> 8
.db opcodeC2_B >> 8
.db opcodeC3_B >> 8
.db opcodeC4_B >> 8
.db opcodeC5_B >> 8
.db opcodeC6_B >> 8
.db opcodeC7_B >> 8
.db opcodeC8_B >> 8
.db opcodeC9_B >> 8
.db opcodeCA_B >> 8
.db opcodeCB_B >> 8
.db opcodeCC_B >> 8
.db opcodeCD_B >> 8
.db opcodeCE_B >> 8
.db opcodeCF_B >> 8
.db opcodeD0_B >> 8
.db opcodeD1_B >> 8
.db opcodeD2_B >> 8
.db opcodeD3_B >> 8
.db opcodeD4_B >> 8
.db opcodeD5_B >> 8
.db opcodeD6_B >> 8
.db opcodeD7_B >> 8
.db opcodeD8_B >> 8
.db opcodeD9_B >> 8
.db opcodeDA_B >> 8
.db opcodeDB_B >> 8
.db opcodeDC_B >> 8
.db opcodeDD_B >> 8
.db opcodeDE_B >> 8
.db opcodeDF_B >> 8
.db opcodeE0_B >> 8
.db opcodeE1_B >> 8
.db opcodeE2_B >> 8
.db opcodeE3_B >> 8
.db opcodeE4_B >> 8
.db opcodeE5_B >> 8
.db opcodeE6_B >> 8
.db opcodeE7_B >> 8
.db opcodeE8_B >> 8
.db opcodeE9_B >> 8
.db opcodeEA_B >> 8
.db opcodeEB_B >> 8
.db opcodeEC_B >> 8
.db opcodeED_B >> 8
.db opcodeEE_B >> 8
.db opcodeEF_B >> 8
.db opcodeF0_B >> 8
.db opcodeF1_B >> 8
.db opcodeF2_B >> 8
.db opcodeF3_B >> 8
.db opcodeF4_B >> 8
.db opcodeF5_B >> 8
.db opcodeF6_B >> 8
.db opcodeF7_B >> 8
.db opcodeF8_B >> 8
.db opcodeF9_B >> 8
.db opcodeFA_B >> 8
.db opcodeFB_B >> 8
.db opcodeFC_B >> 8
.db opcodeFD_B >> 8
.db opcodeFE_B >> 8
.db opcodeFF_B >> 8
bitop_table:
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_swap_b & $FF
.db bitop_swap_c & $FF
.db bitop_swap_d & $FF
.db bitop_swap_e & $FF
.db bitop_swap_h & $FF
.db bitop_swap_l & $FF
.db bitop_swap_hl & $FF
.db bitop_swap_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_xf & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_x & $FF
.db bitop_a & $FF
;////////////////////////
;///// BIT SHIFTING /////
;////////////////////////
bitop_a:
ld (_+1),a
ex af,af'
_
rlc a
NEXT
bitop_x:
bitop_xf:
ld (_+1),a
ex af,af'
exx
_
rlc b
exx
NEXT
bitop_swap_b:
exx
ld a,b
rrca \ rrca \ rrca \ rrca
ld b,a
exx
ex af,af'
NEXT
bitop_swap_c:
exx
ld a,c
rrca \ rrca \ rrca \ rrca
ld c,a
exx
ex af,af'
NEXT
bitop_swap_d:
exx
ld a,d
rrca \ rrca \ rrca \ rrca
ld d,a
exx
ex af,af'
NEXT
bitop_swap_e:
exx
ld a,e
rrca \ rrca \ rrca \ rrca
ld e,a
exx
ex af,af'
NEXT
bitop_swap_h:
exx
ld a,h
rrca \ rrca \ rrca \ rrca
ld h,a
exx
ex af,af'
NEXT
bitop_swap_l:
exx
ld a,l
rrca \ rrca \ rrca \ rrca
ld l,a
exx
ex af,af'
NEXT
bitop_swap_hl:
exx
ld a,(hl)
rrd
exx
ex af,af'
NEXT
bitop_swap_a:
ex af,af'
rrca \ rrca \ rrca \ rrca
NEXT
fill_to($E3CB)
bitcodes:
ex af,af'
dec sp
pop af
bitcodes_B:
ld l,a
dec h
ld l,(hl)
inc h
jp (hl)
fill_to($E3FB)
#define opcodeFB_B eval($)
;ei
dec sp
jp opcodeFB
opcodes_start:
insert_opcodes(512-27)
.echo "Opcode emulation size is ", $-opcodes_start
;Input: HL = address, A = LSB of address plus 1, Z = (LSB==$FF)
FIX_LBL
io_write:
ex af,af'
ld (hl),a
ex af,af'
jp z,check_ints_2
dec a
jp z,getkey
cp $0f
jp z,check_ints_2
cp $41
jr nz,_
res 0,(hl)
res 1,(hl)
ld a,(LY)
cp 144
jr c,end_io_write
set 0,(hl)
jr end_io_write
_
cp $46
jr nz,end_io_write
ld de,$fe00
ld h,(hl)
ld l,e
ld a,c
ld bc,$00a0
ldir
ld c,a
ld de,(opcodetable_B & $FF00) + (opcodetable >> 8)
end_io_write:
ex af,af'
NEXT
FIX_LBL
timer1:
ld a,2
out ($31),a
ld d,0
in a,($32)
ld e,a
inc de
inc de
inc de
ld hl,(chan3cnt)
add hl,de
jr nc,++_
ld hl,NR52_backup
bit 2,(hl)
jr z,_
ld a,(NR32)
and %01100000
jr z,_
ld l,soundOutputs+1 & $FF
ld a,(hl)
xor 2
ld (hl),a
_
ld hl,(chan3div)
bit 1,a
jr z,$+3
inc hl
res 0,l
_
ld (chan3cnt),hl
ld a,$FF
cp h
jr nz,_
xor l
_
ld b,a
ld hl,(chan4cnt)
add hl,de
jr nc,++_
ld hl,NR52_backup
bit 3,(hl)
jr z,_
ld l,soundOutputs & $FF
ld a,r
xor (hl)
and 1
xor (hl)
ld (hl),a
_
ld hl,(chan4div)
_
ld (chan4cnt),hl
ld a,$FF
cp h
jr nz,_
xor l
_
cp b
jr c,_
ld a,b
_
out ($32),a
ld hl,(soundOutputs)
ld a,h
xor l
ld (soundDiff1),a
ld (soundDiff2),a
bit 7,c
ld c,l
jr z,$+3
ld c,h
ld de,(opcodetable_B & $FF00) + (opcodetable >> 8)
ex af,af'
NEXT
FIX_LBL
timer2:
ld a,2
out ($34),a
ld d,0
in a,($35)
ld e,a
inc de
inc de
inc de
ld hl,(chan1cnt)
add hl,de
jr nc,++_
ld hl,NR52_backup
bit 0,(hl)
jr z,_
ld l,soundOutputs & $FF
ld a,(hl)
xor 2
ld (hl),a
bit 1,a
ld hl,(chan1div1)
jr nz,++_
_
ld hl,(chan1div0)
_
ld (chan1cnt),hl
ld a,$FF
cp h
jr nz,_
xor l
_
ld b,a
ld hl,(chan2cnt)
add hl,de
jr nc,++_
ld hl,NR52_backup
bit 1,(hl)
jr z,_
ld l,soundOutputs+1 & $FF
ld a,(hl)
xor 1
ld (hl),a
rra
ld hl,(chan2div1)
jr c,++_
_
ld hl,(chan2div0)
_
ld (chan2cnt),hl
ld a,$FF
cp h
jr nz,_
xor l
_
cp b
jr c,_
ld a,b
_
out ($35),a
ld hl,(soundOutputs)
ld a,h
xor l
ld (soundDiff1),a
ld (soundDiff2),a
bit 7,c
ld c,l
jr z,$+3
ld c,h
ld de,(opcodetable_B & $FF00) + (opcodetable >> 8)
ex af,af'
NEXT
FIX_LBL
irq_sound:
ex (sp),hl
ex af,af'
in a,(4)
rla
jr nc,_
sbc a,a
out ($37),a
ld a,c
soundDiff1 = $+1
xor 0
ld c,a
out (0),a
dec ixl
jr z,hardware
ex af,af'
NEXT
_
rla
jp c,timer2
rla
jp c,timer1
and %00100000
jp z,die
ld (_+1),sp
ld sp,mystack
ld a,3
out (6),a
call handleSound
ld a,(pageA)
out (6),a
_
ld sp,0
ex af,af'
jp opcode00
FIX_LBL
irq:
ex (sp),hl
ex af,af'
in a,(4)
rla
jp nc,die
FIX_LBL
hardware:
ld a,(STAT)
rrca
rrca
add a,a
rlca
jp pe,_
xor 3
ld (STAT),a
ld a,(channelSelect)
or a
ld a,2
ld ixl,a
jr nz,midscanline_continue
out ($37),a
out ($38),a
jr midscanline_continue
FIX_LBL
_
ld (STAT),a
ld hl,0
add hl,sp
ld sp,mystack
push hl
ld a,3
out (6),a
call hardwareflash
ld a,(pageA)
out (6),a
FIX_LBL
check_ints:
ld a,(intstatus)
or a
ld a,(IE)
ld hl,IF
jr z,no_interrupts
and (hl)
jr z,no_interrupts_3
rra
jr nc,_
res 0,(hl)
ld l,$40
jr do_interrupt
_
rra
jr nc,_
res 1,(hl)
ld l,$48
jr do_interrupt
_
rra
jr nc,_
res 2,(hl)
ld l,$50
jr do_interrupt
_
rra
jr nc,no_interrupts
res 3,(hl)
ld l,$58
do_interrupt:
xor a
ld h,a
ld (intstatus),a
ex (sp),hl
ld a,(hl)
cp $76 ;halt
jr nz,_
inc hl
_
dec iy
ld (iy),h
dec iy
ld (iy),l
pop hl
ld sp,hl
ex af,af'
NEXT
no_interrupts:
and (hl)
no_interrupts_3:
pop hl
jr z,no_interrupts_2
ld a,(hl)
cp $76
jr nz,no_interrupts_2
inc hl
no_interrupts_2:
ld sp,hl
midscanline_continue:
ex af,af'
NEXT
FIX_LBL
getkey:
;Writing to $ff00, so gimmeh the keys
ld a,(hl)
ld hl,(keys)
or %00001111
bit 4,a
jr nz,$+3
and l
bit 5,a
jr nz,$+3
and h
ld (P1),a
ex af,af'
jp opcode00
FIX_LBL
memcontrol:
ld a,(mbc)
dec a
jp z,dombc2
dec a
jp z,dombc3
dec a
jp z,dombc5
ld a,h
and %01100000
cp $60
jr nz,_
ld a,l
ld hl,mbcstatus
res 0,(hl)
rra
jr nc,$+4
set 0,(hl)
ex af,af'
jp opcode00
_
cp $20
jr nz,_
in a,(6)
ld h,a
ld a,(basepage)
sub h
and %11100000
ld h,a
ld a,l
and %00011111
jr nz,$+3
inc a
or h
jr setcartrom
_
cp $40
jr nz,++_
ld a,(mbcstatus)
rra
jr c,setcartram
in a,(6)
ld h,a
ld a,(basepage)
sub h
ld h,a
ld a,l
rrca
rrca
rrca
xor h
and %01100000
xor h
jr nz,setcartrom
inc a
jr setcartrom
FIX_LBL
dombc5:
ld a,h
and %01100000
cp $20
jr nz,_
ld a,l
and %01111111
jr z,setcartrom_abs
setcartrom:
ld h,a
ld a,(basepage)
sub h
setcartrom_abs:
ld (pageA),a
out (6),a
ex af,af'
jp opcode00
FIX_LBL
dombc3:
ld a,h
and %01100000
cp $20
jr nz,_
ld a,l
and %01111111
jr nz,setcartrom
inc a
jr setcartrom
_
cp $40
jr nz,_
setcartram:
ld a,l
and 3
ld hl,maxRamPageUsed
cp (hl)
jr c,$+3
ld (hl),a
add a,$81
ld (pageB),a
out (7),a
; See if accessing unavailable page
inc l
cp (hl)
jp nc,die
_
ex af,af'
jp opcode00
FIX_LBL
dombc2:
ld a,h
and %01100001
cp %00100001
jr nz,-_
ld a,l
and %00001111
jr nz,setcartrom
inc a
jr setcartrom
decompressRAM:
ld a,(basepage)
out (6),a
call decompress_page3code
ld a,3
out (6),a
ret
FIX_LBL
invalid_chk:
ex af,af'
ld hl,-$0053
add hl,sp
ld a,h
or a
jr nz,diewait
ld a,l
cp 2
jr nc,diewait
ld sp,TimerInterruptReplacement + 1
add hl,sp
ld sp,hl
ex af,af'
jp opcode00
diewait:
in a,(4)
bit 3,a
jr nz,diewait
jp die
.echo "CPU emulator: ", $-$E000, " used"
.echo "CPU emulator: ", $FC00-$, " left"
fill_to($FC00)
im2lut:
invalid:
fill_to($FC00+257)
jp invalid_chk
FIX_LBL
die:
ld a,(basepage)
out (6),a
jp Recover
FIX_LBL
irqflash:
push af
in a,(4)
rla
jr nc,_
sbc a,a
out ($37),a
ex af,af'
soundDiff2 = $+1
xor 0
out (0),a
ex af,af'
pop af
ei
ret
_
rla
jp c,timer2flash
rla
jp c,timer1flash
bit 5,a
jp z,die
push hl
call handleSound
pop hl
pop af
ei
ret
.block $%2
chan1div0:
.dw 0
chan1div1:
.dw 0
chan1cnt:
.dw 0
chan2div0:
.dw 0
chan2div1:
.dw 0
chan2cnt:
.dw 0
chan3div:
.dw 0
chan3cnt:
.dw 0
chan4div:
.dw 0
chan4cnt:
.dw 0
bytes_skipped_1 = bytes_skipped
vars:
trackoffsetY:
.db 0
trackoffsetX:
.db 0
sprite_to_track:
.db -4
sprite_track_count:
.db 1
basepage:
.db 0
sprite_detect:
.db 0
intstatus:
.db 1
lcdchanged:
.db 0
lcdchecksum:
.db 0
mbcstatus:
.db 0
mbc:
.db 1
framecount:
.db 1
frameskip:
.db 5
offsetYFake:
.db 8
offsetXFake:
.db 0
offsetY:
.db 8
offsetX:
.db 0
myLY:
.db 8
mySCY:
.db 0
mySCX:
.db 0
screenHeight:
.db 128
screenWidth:
.db 21
windowLine:
.db 0
screenCopy:
jp safecopy_mono_3
intermediateFrame:
jp safecopy_mono_3_intermediate
dithercount:
.db 1
displayFlags:
.db %11000000
displayFlagsFake:
.db %11000000
decimalSave:
.db 0
keySave:
.db 0
mycontrast:
.db 0
channelSelect:
.db 0
pageA:
.db 0
pageB:
.db $81
keys:
.dw 0
maxRamPageUsed:
.db 0
firstInvalidRamPage:
.db 0
LCDC_backup:
.db 0
STAT_backup:
.db 0
SCY_backup:
.db 0
SCX_backup:
.db 0
LY_backup:
.db 0
LYC_backup:
.db 0
DMA_backup:
.db 0
BGP_backup:
.db 0
OBP0_backup:
.db 0
OBP1_backup:
.db 0
WY_backup:
.db 0
WX_backup:
.db 0
TimerInterruptReplacement:
;.block 16
fill_to($FDF3)
#define opcodeF3end eval($)
;di
ex af,af'
xor a
ld (intstatus),a
ex af,af'
jp opcode00
fill_to($FDFD)
irq_jump:
jp irq
page3codesize = $FE00-$E000-bytes_skipped
.org page3code + page3codesize