summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2019-05-07 00:12:56 +0200
committerLeo C2019-05-07 09:06:48 +0200
commit2c2c7492fac525a2c87f38fdd9683ecaa723554e (patch)
tree1182ecb6c3f9c12e2c2493d75715bedd131330c7
parent998c0841e630a26996601f9e5f4400f28f1512d4 (diff)
downloadddt180-2c2c7492fac525a2c87f38fdd9683ecaa723554e.zip
Dissassembler: new argument printing
-rw-r--r--ddt180.z80800
1 files changed, 338 insertions, 462 deletions
diff --git a/ddt180.z80 b/ddt180.z80
index f8b82b8..dc3e141 100644
--- a/ddt180.z80
+++ b/ddt180.z80
@@ -2439,8 +2439,7 @@ p_disas_instr:
ld c,a
call pstr ;print mnemonic
call p_goto_col
- ex de,hl
- call CALL_HL ;print arguments
+ call pr_instr_args ;print arguments
pop bc
scf
ret
@@ -2630,7 +2629,7 @@ lookup_op:
inc hl
jr lookup_op
l1a7fh:
- ld de,p_arg_none
+ ld e,a_noarg
inc hl
ld c,(hl)
jr get_mnemonic
@@ -2655,7 +2654,6 @@ lookup_op_arg:
inc hl
inc hl
inc hl
- inc hl
ld a,(hl)
and a
jr nz,lookup_op_arg
@@ -2665,12 +2663,10 @@ l1aa8h:
inc hl
ld c,(hl)
inc c
- ret z
+ ret z ;carry clear
dec c
inc hl
ld e,(hl)
- inc hl
- ld d,(hl)
get_mnemonic:
ld hl,t_MNEMONICS
ld b,0
@@ -2678,6 +2674,28 @@ get_mnemonic:
scf
ret
+lookup_branch_op ;TODO
+ ld a,(iy+000h)
+ and (hl)
+ inc hl
+ cp (hl)
+ jr z,l1aa8_br
+ inc hl
+ inc hl
+ inc hl
+ ld a,(hl)
+ and a
+ jr nz,lookup_branch_op
+ ret
+
+l1aa8_br:
+ inc hl
+ ld e,(hl)
+ inc hl
+ ld d,(hl)
+ scf
+ ret
+
;-------------------------------------------------------------------------------
; 1 byte opcodes (no parameters)
; Format: db opcode, t_MNEMONICS-index
@@ -2704,109 +2722,109 @@ b_1ab6_start:
; dw argument formating function
b_1ad1_start:
db 0c0h,040h,o_LD ;ld r[y],r[z]
- dw p_arg_ry_rz
+ db a_rr
db 0f8h,080h,o_ADD ;add a,r[z]
- dw p_arg_a_r
+ db a_ar
db 0f8h,088h,o_ADC ;adc a,r[z]
- dw p_arg_a_r
+ db a_ar
db 0f8h,090h,o_SUB ;sub r[z]
- dw p_rz
+ db a_r
db 0f8h,098h,o_SBC ;sbc a,r[z]
- dw p_arg_a_r
+ db a_ar
db 0f8h,0a0h,o_AND ;and r[z]
- dw p_rz
+ db a_r
db 0f8h,0a8h,o_XOR ;xor r[z]
- dw p_rz
+ db a_r
db 0f8h,0b0h,o_OR ;or r[z]
- dw p_rz
+ db a_r
db 0f8h,0b8h,o_CP ;cp r[z]
- dw p_rz
+ db a_r
db 0c7h,0c0h,o_RET ;ret cc
- dw p_cc
+ db a_cc
db 0c7h,0c7h,o_RST ;rst
- dw p_arg_rst
+ db a_rst
db 0cfh,0c1h,o_POP ;pop rp2
- dw p_rp2
+ db a_p2
db 0cfh,0c5h,o_PUSH ;push rp2
- dw p_rp2
+ db a_p2
db 0ffh,0e3h,o_EX ;ex (sp),hl
- dw l1ca0h
+ db a_esphl
db 0ffh,0e9h,o_JP ;jp (hl)
- dw l1caeh
+ db a_hl
db 0ffh,0ebh,o_EX ;ex de,hl
- dw p_arg_ex_dehl
+ db a_dehl
db 0ffh,0f9h,o_LD ;ld sp,hl
- dw l1cc1h
+ db a_lsphl
db 0cfh,003h,o_INC ;inc rp
- dw p_rp
+ db a_p
db 0cfh,00bh,o_DEC ;dec rp
- dw p_rp
+ db a_p
db 0c7h,004h,o_INC ;inc r[y]
- dw p_ry
+ db a_ry
db 0c7h,005h,o_DEC ;dec r[y]
- dw p_ry
+ db a_ry
db 0ffh,008h,o_EX ;ex af,af'
- dw p_arg_ex_afaf
+ db a_eaf
db 0cfh,009h,o_ADD ;add hl,rp
- dw l1dcah
+ db a_hlp
db 0efh,002h,o_LD ;ld (rp),a ;rp=bc,de
- dw l1cdch
+ db a_pa
db 0efh,00ah,o_LD ;ld a,(rp) ;rp=bc,de
- dw l1ce5h
+ db a_ap
db 0
-; 2 byte opdodes
+; 2 byte opcodes
b_1b54_start:
db 0c7h,006h,o_LD ;ld r[y],nn
- dw l1cfah
+ db a_rn
db 0ffh,0c6h,o_ADD ;add a,nn
- dw l1cf5h
+ db a_an
db 0ffh,0ceh,o_ADC ;adc a,nn
- dw l1cf5h
+ db a_an
db 0ffh,0d6h,o_SUB ;sub nn
- dw l1d09h
+ db a_n
db 0ffh,0deh,o_SBC ;sbc a,nn
- dw l1cf5h
+ db a_an
db 0ffh,0e6h,o_AND ;and nn
- dw l1d09h
+ db a_n
db 0ffh,0eeh,o_XOR ;xor nn
- dw l1d09h
+ db a_n
db 0ffh,0f6h,o_OR ;or nn
- dw l1d09h
+ db a_n
db 0ffh,0feh,o_CP ;cp nn
- dw l1d09h
+ db a_n
db 0ffh,010h,o_DJNZ ;djnz
- dw p_arg_jrel
+ db a_j
db 0ffh,018h,o_JR ;jr
- dw p_arg_jrel
+ db a_j
db 0e7h,020h,o_JR ;jr cc,
- dw p_arg_cc_jrel
+ db a_ccj
db 0ffh,0d3h,o_OUT ;out (nn),a
- dw l1d37h
+ db a_ma
db 0ffh,0dbh,o_IN ;in a,(nn)
- dw l1d29h
+ db a_am
db 0
; 3 byte opcodes
b_1b9b_start:
db 0c7h,0c2h,o_JP ;jp cc,mn
- dw p_arg_cc_mn
+ db a_ccnn
db 0c7h,0c4h,o_CALL ;call cc,mn
- dw p_arg_cc_mn
+ db a_ccnn
db 0cfh,001h,o_LD ;ld ww,mn
- dw p_arg_ww_mn
+ db a_rnn
db 0ffh,0c3h,o_JP ;jp mn
- dw p_arg_mn
+ db a_nn
db 0ffh,0cdh,o_CALL ;call mn
- dw p_arg_mn
+ db a_nn
db 0ffh,022h,o_LD ;ld (mn),hl
- dw p_arg_addr_hl
+ db a_mmhl
db 0ffh,02ah,o_LD ;ld hl,(mn)
- dw p_arg_hl_addr
+ db a_hlmm
db 0ffh,032h,o_LD ;ld (mn),a
- dw p_arg_addr_a
+ db a_mma
db 0ffh,03ah,o_LD ;ld a,(mn)
- dw p_arg_a_addr
+ db a_amm
db 0
; Prefix ED + 1 byte opcode, no arguments
@@ -2842,44 +2860,44 @@ b_1bc9_start:
b_1bf4_start:
db 0ffh,070h,o_IN ;in (c) ;
- dw p_arg_in_c_0 ;
+ db a_c
db 0c7h,040h,o_IN ;in r,(c) ;r=b,c,d,e,h,l,a
- dw p_arg_in_c ;
+ db a_rc
db 0ffh,071h,0ffh ;out (c),0 ;
- dw p_arg_out_c ;
+ db a_cr
db 0c7h,041h,o_OUT ;out (c),r ;r=b,c,d,e,h,l,a
- dw p_arg_out_c ;
+ db a_cr
db 0cfh,042h,o_SBC ;sbc hl,rp
- dw l1dcah ;
+ db a_hlp
db 0cfh,04ah,o_ADC ;adc hl,rp
- dw l1dcah ;
+ db a_hlp
db 0ffh,046h,o_IM ;im 0
- dw l1d85h ;
+ db a_im0
db 0ffh,056h,o_IM ;im 1
- dw l1d89h ;
+ db a_im1
db 0ffh,05eh,o_IM ;im 2
- dw l1d8dh ;
+ db a_im2
db 0e7h,047h,o_LD ;ld i,a ... ld a,r
- dw p_arg_IR ;
+ db a_ai
db 0cfh,04ch,o_MLT ;mlt rr
- dw p_rp
+ db a_p
db 0c7h,004h,o_TST ;tst r
- dw p_ry
+ db a_ry
db 0
l228bh:
- db 0ffh,030h,0ffh ;in0 (m)
- dw p_arg_r_m
+ db 0ffh,030h,o_IN0 ;in0 (m)
+ db a_m
db 0c7h,000h,o_IN0 ;in0 r,(m) ;r=b,c,d,e,h,l,a
- dw p_arg_r_m
+ db a_rm
db 0ffh,031h,0ffh ;out0 (m),0
- dw p_arg_m_r
+ db a_mr
db 0c7h,001h,o_OUT0 ;out0 (m),r ;r=b,c,d,e
- dw p_arg_m_r
+ db a_mr
db 0ffh,064h,o_TST ;tst m
- dw l1d09h
+ db a_n
db 0ffh,074h,o_TSTIO ;tstio m
- dw l1d09h
+ db a_n
db 0
; Prefix ED + 1 byte opcode + 2 byte address
@@ -2887,200 +2905,207 @@ l228bh:
; dw argument formating function
b_1c40_start:
db 0cfh,043h,o_LD ;ld (mn),ww ;ww=bc,de,hl,sp
- dw p_arg_addr_ww
+ db a_mmp
db 0cfh,04bh,o_LD ;ld ww,(mn) ;ww=bc,de,hl,sp
- dw p_arg_ww_addr
+ db a_pmm
db 0
; CB
b_1c55_start:
db 0f8h,000h,o_RLC ;rlc g
- dw p_rz_cb
+ db a_cbr
db 0f8h,008h,o_RRC ;rrc g
- dw p_rz_cb
+ db a_cbr
db 0f8h,010h,o_RL ;rl g
- dw p_rz_cb
+ db a_cbr
db 0f8h,018h,o_RR ;rr g
- dw p_rz_cb
+ db a_cbr
db 0f8h,020h,o_SLA ;sla g
- dw p_rz_cb
+ db a_cbr
db 0f8h,028h,o_SRA ;sra g
- dw p_rz_cb
+ db a_cbr
db 0f8h,038h,o_SRL ;srl g
- dw p_rz_cb
+ db a_cbr
db 0c0h,040h,o_BIT ;bit b,g
- dw p_arg_bitop
+ db a_bcbr
db 0c0h,080h,o_RES ;res b,g
- dw p_arg_bitop
+ db a_bcbr
db 0c0h,0c0h,o_SET ;set b,g
- dw p_arg_bitop
+ db a_bcbr
db 0
;-------------------------------------------------------------------------------
+;-------------------------------------------------------------------------------
-p_arg_ry_rz:
- call p_ry
- call p_char_comma
- jp p_rz
-p_arg_a_r:
- call p_A_comma
- jp p_rz
-p_arg_r_m:
- call p_ry
- call p_char_comma
- jp sub_1d2ch
+pr_instr_args:
+ ld hl,t_argf
+ ld d,0
+ add hl,de
+pria_l:
+ ld a,(hl) ;get next token
+ inc hl
+ or a
+ ret z ;
+ jp m,pria_1
+ call outchar ;print as normal character
+ jr pria_l
-p_arg_m_r:
- call sub_1d2ch
- call p_char_comma
- jp p_ry
+pria_1: ;
+ push hl
+ ld hl,do_arg_n
+ and 07fh
+ call add_hl_a2
+ ld a,(hl)
+ inc hl
+ ld h,(hl)
+ ld l,a
+ call CALL_HL
+ pop hl
+ jr pria_l
-p_arg_rst:
- ld a,(iy+000h)
- and 038h
- jp out_hex
+;
+; http://www.z80.info/decoding.htm
+;
+; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+; | x | y | z |
+; | p | q |
+;
-l1ca0h:
- call pstr_inl
- DC '(SP),'
- jp p_arg_hlixiy
+t_argf:
+; 1 byte opcodes
+a_rr equ $-t_argf
+ db fi_ry,',' ;ld r[y],r[z]
+a_r equ $-t_argf
+ db fi_rz,0 ;op r[z]
+a_ar equ $-t_argf
+ db 'A,',fi_rz,0 ;op A,r[z]
+a_cc equ $-t_argf
+ db fi_ccy,0 ;op cc[y]
+a_rst equ $-t_argf
+ db fi_rst,0 ;rst y*8
+a_p2 equ $-t_argf
+ db fi_rp2,0 ;rp2[p]
+a_esphl equ $-t_argf
+ db '(SP),',fi_hlixiy,0 ;ex (sp),hl
+a_hl equ $-t_argf
+ db '(',fi_hlixiy,')',0 ;jp (hl)
+a_dehl equ $-t_argf
+ db 'DE,HL',0
+a_lsphl equ $-t_argf
+ db 'SP,',fi_hlixiy,0 ;ld SP,HL
+a_eaf equ $-t_argf
+ db 'AF,AF''',0 ;ex af,af'
+a_hlp equ $-t_argf
+ db fi_hlixiy,',' ;add hl,rp
+a_p equ $-t_argf
+ db fi_rp,0 ;rp[p]
+a_pa equ $-t_argf
+ db '(',fi_rp,'),A',0 ;ld (rp),a ;rp=bc,de
+a_ap equ $-t_argf
+ db 'A,(',fi_rp,')',0 ;ld a,(rp) ;rp=bc,de
-l1caeh:
- call p_char_lparen
- call p_arg_hlixiy
- jr out_rparen
+; 2 byte opcodes
+a_rn equ $-t_argf
+ db fi_ry,',',fi_n,0 ;ld r[y],n
+a_an equ $-t_argf
+ db 'A,' ;op a,n
+a_n equ $-t_argf
+ db fi_n,0 ;op n
+a_ccj equ $-t_argf
+ db fi_ccy2,',' ;jr cc,j ;cc = nz,z,nc,c
+a_j equ $-t_argf
+ db fi_j,0 ;jr j
+a_ma equ $-t_argf
+ db '(',fi_n,'),A',0 ;out (n),a
+a_am equ $-t_argf
+ db 'A,(',fi_n,')',0 ;in a,(n)
+
+; 3 byte opcodes
+a_ccnn equ $-t_argf
+ db fi_ccy,',',fi_nn,0 ;op cc[y],nn
+a_rnn equ $-t_argf
+ db fi_rp,',' ;ld rp[p],nn
+a_nn equ $-t_argf
+ db fi_nn,0 ;jp nn
+a_mmhl equ $-t_argf
+ db '(',fi_nn,'),',fi_hlixiy,0 ;ld (nn),hl
+a_hlmm equ $-t_argf
+ db fi_hlixiy,',(',fi_nn,')',0 ;ld hl,(nn)
+a_mma equ $-t_argf
+ db '(',fi_nn,'),A',0 ;ld (nn),a
+a_amm equ $-t_argf
+ db 'A,(',fi_nn,')',0 ;ld a,(nn)
-p_arg_ex_dehl:
- call pstr_inl
- DC 'DE,HL'
-p_arg_none:
- ret
+; Prefix ED + 1 byte opcode
+a_rc equ $-t_argf
+ db fi_ry,',' ;in r[y],(c)
+a_c equ $-t_argf
+ db '(C)',0 ;in (c)
+a_cr equ $-t_argf
+ db '(C),' ;out (c),r[y]
+a_ry equ $-t_argf
+ db fi_ry,0 ;inc r[y]
+a_im0 equ $-t_argf
+ db '0',0 ;im 0
+a_im1 equ $-t_argf
+ db '1',0 ;im 1
+a_im2 equ $-t_argf
+ db '2',0 ;im 2
+a_ai equ $-t_argf
+ db fi_ir,0 ;ld a,i ... r,a
-l1cc1h:
- call pstr_inl
- DC 'SP,'
- jp p_arg_hlixiy
+; Prefix ED + 2 byte (opcode + immediate)
+a_rm equ $-t_argf
+ db fi_ry,',' ;in0 r[y],(n)
+a_m equ $-t_argf
+ db '(',fi_n,')',0 ;in0 (n)
+a_mr equ $-t_argf
+ db '(',fi_n,'),',fi_ry,0 ;out0 (n),r[y]
-p_arg_ex_afaf:
- call pstr_inl
- DC 'AF,AF'''
- ret
-
-l1cdch:
- call sub_1ce8h
- call p_char_comma
- jp p_char_A
-
-l1ce5h:
- call p_A_comma
-sub_1ce8h:
- call p_char_lparen
- call p_rp
- jr out_rparen
-
-l1cf5h:
- call p_A_comma
- jr l1d09h
-l1cfah:
- call p_ry
- call p_char_comma
- ld a,(isprefix_ixiy)
- and a
- ld a,(iy+002h)
- jr nz,l1d0ch
-l1d09h:
- ld a,(iy+001h)
-l1d0ch:
- jp out_hex
+; Prefix ED + 3 byte (opcode + address)
+a_mmp equ $-t_argf
+ db '(',fi_nn,'),',fi_rp,0 ;ld (nn),rp
+a_pmm equ $-t_argf
+ db fi_rp,',(',fi_nn,')',0 ;ld rp,(nn)
-p_arg_cc_jrel:
- ld a,(iy+000h)
- and 018h
- call p_arg_cc0
- call p_char_comma
-p_arg_jrel:
- ld c,(iy+001h)
- ld a,c
- rla
- sbc a,a
- ld b,a
- push iy
- pop hl
- add hl,bc
- inc hl
- inc hl
- jr l1d4eh
+; Prefix CB + 1 byte opcode
+a_bcbr equ $-t_argf
+ db fi_y,',' ;op y,r[z]
+a_cbr equ $-t_argf
+ db fi_rz_cb,0 ;op r[z]
+a_noarg equ $-t_argf
+ db 0
-l1d29h:
- call p_A_comma
-sub_1d2ch:
- call p_char_lparen
- ld a,(iy+001h)
-p_arg_nn_rp:
- call out_hex
-out_rparen:
- jr p_char_rparen
-l1d37h:
- call sub_1d2ch
- jr p_char_comma_A
+;-------------------------------------------------------------------------------
-p_arg_cc_mn:
- call p_arg_cc
- call p_char_comma
-p_arg_mn:
- ld l,(iy+001h)
- ld h,(iy+002h)
-l1d4eh:
- jp out_hl
+argpf_index defl 0
+
+argpf macro x
+fi_&x equ 80h+argpf_index
+ dw p_&x
+argpf_index defl argpf_index+1
+ endm
+
+do_arg_n:
+ argpf ry
+ argpf rz
+ argpf ccy
+ argpf ccy2
+ argpf rst
+ argpf rp
+ argpf rp2
+ argpf hlixiy
+ argpf n
+ argpf j
+ argpf nn
+ argpf ir
+ argpf rz_cb
+ argpf y
-p_arg_ww_mn:
- call p_rp
- call p_char_comma
- jr p_arg_mn
-
-p_arg_addr_hl:
- call p_arg_addr
- call p_char_comma
- jp p_arg_hlixiy
-
-p_arg_hl_addr:
- call p_arg_hlixiy
- call p_char_comma
- jp p_arg_addr
-
-p_arg_addr_a:
- call p_arg_addr
-p_char_comma_A:
- call p_char_comma
- jr p_char_A
-
-p_A_comma:
- call p_char_A
-p_char_comma:
- ld a,','
- db 021h
-p_char_A:
- ld a,'A'
- db 021h
-l1d85h:
- ld a,'0'
- db 021h
-l1d89h:
- ld a,'1'
- db 021h
-l1d8dh:
- ld a,'2'
- db 021h
-p_char_rparen:
- ld a,')'
- db 021h
-p_char_lparen:
- ld a,'('
- jp outchar
-p_arg_IR:
+p_ir:
ld a,(iy+000h)
rra
rra
@@ -3089,74 +3114,27 @@ p_arg_IR:
ld hl,t_arg_IR
jp p_arg
-t_arg_IR:
- DC 'I,A'
- DC 'R,A'
- DC 'A,I'
- DC 'A,R'
- db 0
-p_arg_in_c:
- call p_ry
- call p_char_comma
-p_arg_in_c_0:
- ld hl,t__C_
- jp pstr
+get_cb_opc:
+ ld a,(isprefix_ixiy)
+ and a
+ ld a,(iy+001h)
+ ret z
+ ld a,(iy+002h)
+ ret
-p_arg_out_c:
- ld hl,t__C_
- call pstr
- call p_char_comma
- jr p_ry
-
-l1dcah:
- call p_arg_hlixiy
- call p_char_comma
- jp p_rp
-
-p_arg_addr_ww:
- call p_arg_addr
- call p_char_comma
- jp p_rp
-
-p_arg_ww_addr:
- call p_rp
- call p_char_comma
- jr p_arg_addr
-
-p_arg_a_addr:
- call p_A_comma
-p_arg_addr:
- call p_char_lparen
- call p_arg_mn
- jr p_char_rparen
-
-p_arg_bitop:
+p_y:
call get_cb_opc
- push af
rra
rra
rra
and 007h
-; add a,'0'
-; call outchar
- call out_dgt
- call p_char_comma
- pop af
- jr p_r0
+ jp out_dgt
p_rz_cb:
call get_cb_opc
jr p_r0
-get_cb_opc:
- ld a,(isprefix_ixiy)
- and a
- ld a,(iy+001h)
- ret z
- ld a,(iy+002h)
- ret
-
p_ry:
ld a,(iy+000h)
rra
@@ -3189,23 +3167,14 @@ p_r0:
l1e61h:
call outchar
pop af
- jp p_arg_nn_rp
-
-t_lp_IXIY:
- DC '(IX'
- DC '(IY'
-
-p_arg_hlixiy:
- ld a,(isprefix_ixiy)
- ld hl,t_HL.IX.IY
- jr p_arg
+ call out_hex
+ ld a,')'
+ jp outchar
p_rp2:
-p_arg_zz:
ld hl,t_arg_rp2
jr l1e8eh
p_rp:
-p_arg_ww:
ld hl,t_arg_rp
l1e8eh:
ld a,(iy+000h)
@@ -3215,13 +3184,19 @@ l1e8eh:
rra
and 003h
cp 002h
- jr z,p_arg_hlixiy
+ jr nz,p_arg
+p_hlixiy:
+ ld a,(isprefix_ixiy)
+ ld hl,t_HL.IX.IY
jr p_arg
-p_cc:
-p_arg_cc:
+p_ccy2:
+ ld a,(iy+000h)
+ and 018h
+ jr p_cc0
+p_ccy:
ld a,(iy+000h)
-p_arg_cc0:
+p_cc0:
rra
rra
rra
@@ -3232,20 +3207,40 @@ p_arg:
p_arg0:
jp pstr_sel
-;-------------------------------------------------------------------------------
-if 0
-p_bli:
+p_n:
+ ld a,(isprefix_ixiy)
+ and a
+ ld a,(iy+001h)
+ jr z,out_hex_0
+ ld a,(iy+002h)
+ jr out_hex_0
+
+p_rst:
ld a,(iy+000h)
- rra
- and 00ch
+ and 038h
+out_hex_0:
+ jp out_hex
+
+
+p_j:
+ ld c,(iy+001h)
+ ld a,c
+ rla
+ sbc a,a
ld b,a
- ld a,(iy+000h)
- and 003h
- or b
- ld hl,t_mn_bli
- jr p_arg
-endif
+ push iy
+ pop hl
+ add hl,bc
+ inc hl
+ inc hl
+ jr out_hl_0
+
+p_nn:
+ ld l,(iy+001h)
+ ld h,(iy+002h)
+out_hl_0:
+ jp out_hl
;-------------------------------------------------------------------------------
@@ -3403,138 +3398,19 @@ t_arg_cc:
DC 'P'
DC 'M'
DB 0
-t__C_:
- DC '(C)'
- DB 0
-
-;-------------------------------------------------------------------------------
-;-------------------------------------------------------------------------------
-if 0
-
-lookup_argstr:
- ;todo
- ret
+t_lp_IXIY:
+ DC '(IX'
+ DC '(IY'
-pr_instr_args:
- ld hl,t_argf
- call lookup_argstr
-
- ret z
-
-pria_l:
- ld a,(hl) ;get next token
- inc hl
- or a
- ret z ;
- jp m,pria_1
- call outchar ;print as normal character
- jr pria_l
-
-pria_1: ;
- push hl
- ld hl,do_arg_n
- and 07fh
- call add_hl_a2
- ld a,(hl)
- inc hl
- ld h,(hl)
- ld l,a
- call CALL_HL
- pop hl
- jr pria_l
-
-;
-; http://www.z80.info/decoding.htm
-;
-; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-; | x | y | z |
-; | p | q |
-;
-
-t_argf:
- db fi_ry,',',fi_rz,0 ;ld r[y],r[z]
- db 'A,',fi_rz,0 ;op A,r[z]
- db fi_rz,0 ;op r[z]
- db fi_ccy,0 ;op cc[y]
- db fi_rst,0 ;
- db fi_rp2,0 ;rp2[p]
- db '(SP),',fi_hlixiy,0 ;ex (sp),hl
- db fi_hlixiy,0 ;jp (hl)
- db 'DE,HL',0
- db 'SP,',fi_hlixiy,0 ;ld SP,HL
- db fi_rp,0 ;rp[p]
- db fi_ry,0 ;inc r[y]
- db 'AF,AF''',0 ;ex af,af'
- db fi_hlixiy,fi_rp,0 ;add hl,rp
- db '(',fi_rp,'),A',0 ;ld (rp),a ;rp=bc,de
- db 'A,(',fi_rp,')',0 ;ld a,(rp) ;rp=bc,de
-
- db fi_ry,fi_n,0 ;ld r[y],n
- db 'A,',fi_n,0 ;op a,n
- db fi_n,0 ;op n
- db fi_j,0 ;jr j
- db fi_ccy2,fi_j,0 ;jr cc,j ;cc = nz,z,nc,c
- db '(',fi_n,'),',fi_ry,0 ;out (n),a
- db fi_ry,',(',fi_n,')',0 ;in a,(n)
-
- db fi_ccy,fi_nn,0 ;op cc[y],nn
- db fi_rp,fi_nn,0 ;ld rp[p],nn
- db fi_nn,0 ;jp nn
- db '(',fi_nn,'),',fi_hlixiy,0 ;ld (nn),hl
- db fi_hlixiy,',(',fi_nn,')',0 ;ld hl,(nn)
- db '(',fi_nn,'),A',0 ;ld (nn),a
- db 'A,(',fi_nn,')',0 ;ld a,(nn)
-
- db fi_ry,'(C)',0 ;in r[y],(c)
- db '(C)',0 ;in (c)
- db '(C)',fi_ry,0 ;out (c),r[y]
- db '0',0 ;im 0
- db '1',0 ;im 1
- db '2',0 ;im 2
- db fi_ir,0 ;ld a,i ... r,a
-
- db fi_ry,'(',fi_n,')',0 ;in0 r[y],(n)
- db '(',fi_n,')',0 ;in0 (n)
- db '(',fi_n,')',fi_ry,0 ;out0 (n),r[y]
-
- db '(',fi_nn,'),',fi_rp,0 ;ld (nn),rp
- db fi_rp,',(',fi_nn,')',0 ;ld rp,(nn)
-
- db fi_rz_cb,0 ;op r[z]
- db fi_y,',',fi_rz_cb,0 ;op y,r[z]
-
-
-;-------------------------------------------------------------------------------
-
-argpf_index defl 0
-
-argpf macro x
-fi_&x equ 80h+argpf_index
- dw p_&x
-argpf_index defl argpf_index+1
- endm
-
-do_arg_n:
- argpf ry
- argpf rz
- argpf m8
- argpf rst
- argpf hlixiy
- argpf rp
- argpf rp2
-
-p_ry:
-p_rz:
-p_m8:
-p_rst:
-p_hlixiy:
-p_rp:
-p_rp2:
+t_arg_IR:
+ DC 'I,A'
+ DC 'R,A'
+ DC 'A,I'
+ DC 'A,R'
+ db 0
-endif
-;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
tc_set_bp:
@@ -3557,7 +3433,7 @@ tc_set_bp:
call bp_trace_enter
ld iy,(reg.pc)
ld hl,t_op_branch
- call lookup_op_arg
+ call lookup_branch_op
ccf
ret c
ex de,hl
@@ -3571,34 +3447,34 @@ l2037h:
;-------------------------------------------------------------------------------
t_op_branch:
- db 0ffh,0ddh,0 ;Prefix DD
+ db 0ffh,0ddh ;Prefix DD
dw l20a7h
- db 0ffh,0fdh,0 ;Prefix FD
+ db 0ffh,0fdh ;Prefix FD
dw l20ach
- db 0ffh,0edh,0 ;Prefix ED
+ db 0ffh,0edh ;Prefix ED
dw l20b8h
t_op_branch0:
- db 0ffh,0cdh,0 ;call mn
+ db 0ffh,0cdh ;call mn
dw l2080h
- db 0ffh,0c3h,0 ;jp mn
+ db 0ffh,0c3h ;jp mn
dw l208bh
- db 0ffh,0e9h,0 ;jp ()
+ db 0ffh,0e9h ;jp ()
dw l20a2h
- db 0ffh,0c9h,0 ;ret
+ db 0ffh,0c9h ;ret
dw l20dch
- db 0ffh,0cfh,0 ;rst 8
+ db 0ffh,0cfh ;rst 8
dw l2115h
- db 0c7h,0c7h,0 ;rst n
+ db 0c7h,0c7h ;rst n
dw l20f9h
- db 0c7h,0c4h,0 ;call cc,mn
+ db 0c7h,0c4h ;call cc,mn
dw l2080h
- db 0f7h,010h,0 ;djnz d; jr d
+ db 0f7h,010h ;djnz d; jr d
dw l2093h
- db 0e7h,020h,0 ;jr cc,d
+ db 0e7h,020h ;jr cc,d
dw l2093h
- db 0c7h,0c2h,0 ;jp cc,mn
+ db 0c7h,0c2h ;jp cc,mn
dw l208bh
- db 0c7h,0c0h,0 ;ret cc
+ db 0c7h,0c0h ;ret cc
dw l20c5h
db 0