]> cloudbase.mooo.com Git - ddt180.git/commitdiff
Dissassembler: new argument printing
authorLeo C <erbl259-lmu@yahoo.de>
Mon, 6 May 2019 22:12:56 +0000 (00:12 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Tue, 7 May 2019 07:06:48 +0000 (09:06 +0200)
ddt180.z80

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