]> cloudbase.mooo.com Git - ddt180.git/blobdiff - ddt180.z80
Reorg dissassembler tables 4 (wip)
[ddt180.git] / ddt180.z80
index 386bad7b08810c8a1d512a889d9958467c4e221c..5e17667aa124973a22d8d89b1d78ecba4f75729e 100644 (file)
@@ -108,7 +108,6 @@ reg.iff:
        db      0f3h\r
        db      0c3h\r
 reg.pc:        dw      TPA\r
-var.$: dw      0000h\r
 \r
 cmd_rpt:dw     mainloop\r
 \r
@@ -213,7 +212,6 @@ p_msg_error:
 mainloop:\r
        ld sp,stack\r
        ld hl,(reg.pc)\r
-       ld (var.$),hl\r
        call bp_clr_temporary\r
        ld hl,(cmd_rpt)\r
        ld de,mainloop\r
@@ -392,6 +390,14 @@ outchar:
        pop ix\r
        ret\r
 \r
+pstr_sel:\r
+       inc b\r
+       jr pstr_sel2\r
+pstr_sel1:\r
+       call sub_0345h\r
+pstr_sel2:\r
+       djnz pstr_sel1\r
+       ;fall thru\r
 pstr:\r
        ld a,(hl)\r
        inc hl\r
@@ -656,14 +662,6 @@ l0339h:
        pop bc\r
        ret\r
 \r
-sel_dc_string:\r
-       inc b\r
-l033eh:\r
-       dec b\r
-       ret z\r
-       call sub_0345h\r
-       jr l033eh\r
-\r
 sub_0345h:\r
        ld a,(hl)\r
        and a\r
@@ -944,7 +942,7 @@ do_factor:
        call get.number\r
        ret nc\r
        inc de\r
-       ld hl,(BDOS+1)\r
+       ld hl,ddtz_base-1\r
        cp 'T'\r
        ret z\r
        ld hl,(high_load)\r
@@ -956,12 +954,6 @@ do_factor:
        ld hl,TPA\r
        cp 'L'\r
        ret z\r
-       ld hl,(var.$)\r
-       cp '$'\r
-       ret z\r
-       ld hl,ddtz_base\r
-       cp 'Z'\r
-       ret z\r
        cp '-'\r
        jr z,fact_factneg\r
        cp '~'\r
@@ -1690,15 +1682,13 @@ cmd_X:
        jp nc,p_cpustat0\r
        call assert_eol\r
        ld a,b\r
-       cp 01eh\r
+       cp 25\r
        jr z,l0c5fh\r
-       cp 01fh\r
+       cp 26\r
        jr z,l0c4fh\r
-       cp 01dh\r
-       jp z,ERROR\r
        ex de,hl\r
        ld hl,t_reg_names\r
-       call sel_dc_string\r
+       call pstr_sel\r
        call l0c33h\r
 \r
        call outbl\r
@@ -1723,7 +1713,6 @@ l0c30h:
        ret\r
 \r
 l0c33h:\r
-       call pstr\r
        call    pstr_inl\r
        dc      '='\r
        ld a,(de)\r
@@ -1808,38 +1797,33 @@ sub_0caeh:
        ret\r
 \r
 t_reg_names:\r
-       DC      'BC'''\r
-       DC      'DE'''\r
-       DC      'HL'''\r
-       DC      'BC'\r
-       DC      'DE'\r
-       DC      'HL'\r
-       DC      'A'''\r
-       DC      'B'''\r
-       DC      'C'''\r
-       DC      'D'''\r
-       DC      'E'''\r
-       DC      'H'''\r
-       DC      'L'''\r
-       DC      'A'\r
-       DC      'B'\r
-       DC      'C'\r
-       DC      'D'\r
-       DC      'E'\r
-       DC      'H'\r
-       DC      'L'\r
-       DC      'IX'\r
-       DC      'IY'\r
-       DC      'SP'\r
-       DC      'PC'\r
-       DC      'X'\r
-       DC      'Y'\r
-       DC      'S'\r
-       DC      'P'\r
-       DC      'I'\r
-       DC      'IP'\r
-       DC      'F'''\r
-       DC      'F'\r
+       DC      'BC'''          ;0\r
+       DC      'DE'''          ;1\r
+       DC      'HL'''          ;2\r
+       DC      'BC'            ;3\r
+       DC      'DE'            ;4\r
+       DC      'HL'            ;5\r
+       DC      'A'''           ;6\r
+       DC      'B'''           ;7\r
+       DC      'C'''           ;8\r
+       DC      'D'''           ;9\r
+       DC      'E'''           ;10\r
+       DC      'H'''           ;11\r
+       DC      'L'''           ;12\r
+       DC      'A'             ;13\r
+       DC      'B'             ;14\r
+       DC      'C'             ;15\r
+       DC      'D'             ;16\r
+       DC      'E'             ;17\r
+       DC      'H'             ;18\r
+       DC      'L'             ;19\r
+       DC      'IX'            ;20\r
+       DC      'IY'            ;21\r
+       DC      'SP'            ;22\r
+       DC      'PC'            ;23\r
+       DC      'I'             ;24\r
+       DC      'F'''           ;25\r
+       DC      'F'             ;26\r
        DB      0\r
 \r
 b_0cfa_start:\r
@@ -1891,18 +1875,8 @@ b_0cfa_start:
        dw      reg_sp\r
        db      003h\r
        dw      reg.pc\r
-       db      003h\r
-       dw      reg.ix\r
-       db      003h\r
-       dw      reg.iy\r
-       db      003h\r
-       dw      reg_sp\r
-       db      003h\r
-       dw      reg.pc\r
        db      000h\r
        dw      reg.i\r
-       db      003h\r
-       dw      l004eh\r
        db      000h\r
        dw      reg.f2\r
        db      000h\r
@@ -2388,7 +2362,7 @@ p_max_high:
        call out_hl\r
        call pstr_inl\r
        DC      '  Top = '\r
-       ld hl,(BDOS+1)\r
+       ld hl,ddtz_base-1\r
        call out_hl\r
        jp crlf\r
 \r
@@ -2408,19 +2382,6 @@ p_max_high:
 CALL_HL:\r
        jp (hl)\r
 \r
-;-------------------------------------------------------------------------------\r
-\r
-\r
-\r
-\r
-b_176d_start:\r
-       DC      'AF,AF'''\r
-l1773h:\r
-       DC      'DE,HL'\r
-       DC      '(SP),HL'\r
-       DC      '(SP),IX'\r
-       DC      '(SP),IY'\r
-       db      0\r
 \r
 ;-------------------------------------------------------------------------------\r
 ; >>L [startaddr] [endaddr]\r
@@ -2472,21 +2433,13 @@ cmdl_p_line:
        ret\r
 \r
 p_disas_line:\r
-       call outbl2\r
        call out_hl\r
-       call z,outbl\r
-       call outbl\r
+       call outbl2\r
        sub a\r
        ld (con_col),a\r
        push    hl\r
        pop     iy\r
        call p_disas_instr\r
-       ret z\r
-\r
-       ld      c,15\r
-       call    p_goto_col\r
-       ; fall thru\r
-;-------------------------------------------------------------------------------\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -2681,7 +2634,6 @@ disas_nopfx:
        ret c\r
        ld hl,b_1b9b_start\r
        call lookup_opc\r
-       ret nc\r
        ld b,3\r
        ret\r
 \r
@@ -2697,7 +2649,7 @@ sub_1a72h:
        inc hl\r
        jr sub_1a72h\r
 l1a7fh:\r
-       ld de,l1c97h\r
+       ld de,p_arg_none\r
        inc hl\r
        ld c,(hl)\r
        jr get_mnemonic\r
@@ -2731,6 +2683,9 @@ lookup_opc:
 l1aa8h:\r
        inc hl\r
        ld c,(hl)\r
+       inc c\r
+       ret z\r
+       dec c\r
        inc hl\r
        ld e,(hl)\r
        inc hl\r
@@ -2746,253 +2701,237 @@ get_mnemonic:
 ; 1 byte opcodes (no parameters)\r
 ; Format: db opcode, t_MNEMONICS-index\r
 b_1ab6_start:\r
-       db 076h,039h            ;halt\r
-       db 0d9h,036h            ;exx\r
-       db 0f3h,02ch            ;di\r
-       db 0fbh,032h            ;ei\r
-       db 000h,069h            ;nop\r
-       db 007h,09eh            ;rlca\r
-       db 00fh,0adh            ;rrca\r
-       db 017h,098h            ;rla\r
-       db 01fh,0a7h            ;rra\r
-       db 027h,026h            ;daa\r
-       db 02fh,023h            ;cpl\r
-       db 037h,0bah            ;scf\r
-       db 03fh,010h            ;ccf\r
+       db 076h,o_HALT          ;halt\r
+       db 0d9h,o_EXX           ;exx\r
+       db 0f3h,o_DI            ;di\r
+       db 0fbh,o_EI            ;ei\r
+       db 000h,o_NOP           ;nop\r
+       db 007h,o_RLCA          ;rlca\r
+       db 00fh,o_RRCA          ;rrca\r
+       db 017h,o_RLA           ;rla\r
+       db 01fh,o_RRA           ;rra\r
+       db 027h,o_DAA           ;daa\r
+       db 02fh,o_CPL           ;cpl\r
+       db 037h,o_SCF           ;scf\r
+       db 03fh,o_CCF           ;ccf\r
+       db 0c9h,o_RET           ;ret\r
        db 0ffh\r
 \r
 \r
 ; 1 byte opcodes\r
 ; Format: db mask, match, t_MNEMONICS-index\r
-;        dw argument formating fuction\r
+;        dw argument formating function\r
 b_1ad1_start:\r
-       db 0c0h,040h,056h       ;ld r,r\r
+       db 0c0h,040h,o_LD       ;ld r,r\r
        dw p_arg_r_r\r
-       db 0f8h,080h,003h       ;add a,r\r
+       db 0f8h,080h,o_ADD      ;add a,r\r
        dw p_arg_a_r\r
-       db 0f8h,088h,000h       ;adc a,r\r
+       db 0f8h,088h,o_ADC      ;adc a,r\r
        dw p_arg_a_r\r
-       db 0f8h,090h,0c9h       ;sub r\r
+       db 0f8h,090h,o_SUB      ;sub r\r
        dw p_arg_rs\r
-       db 0f8h,098h,0b7h       ;sbc a,r\r
+       db 0f8h,098h,o_SBC      ;sbc a,r\r
        dw p_arg_a_r\r
-       db 0f8h,0a0h,006h       ;and r\r
+       db 0f8h,0a0h,o_AND      ;and r\r
        dw p_arg_rs\r
-       db 0f8h,0a8h,0cch       ;xor r\r
+       db 0f8h,0a8h,o_XOR      ;xor r\r
        dw p_arg_rs\r
-       db 0f8h,0b0h,06ch       ;or r\r
+       db 0f8h,0b0h,o_OR       ;or r\r
        dw p_arg_rs\r
-       db 0f8h,0b8h,013h       ;cp r\r
+       db 0f8h,0b8h,o_CP       ;cp r\r
        dw p_arg_rs\r
-       db 0c7h,0c0h,08bh       ;ret cc\r
+       db 0c7h,0c0h,o_RET      ;ret cc\r
        dw p_arg_cc\r
-       db 0c7h,0c7h,0b4h       ;rst\r
-       dw l1c98h\r
-       db 0ffh,0c9h,08bh       ;ret\r
-       dw l1c97h\r
-       db 0cfh,0c1h,081h       ;pop rr\r
+       db 0c7h,0c7h,o_RST      ;rst\r
+       dw p_arg_rst\r
+       db 0cfh,0c1h,o_POP      ;pop rr\r
        dw p_arg_zz\r
-       db 0cfh,0c5h,084h       ;push rr\r
+       db 0cfh,0c5h,o_PUSH     ;push rr\r
        dw p_arg_zz\r
-       db 0ffh,0e3h,034h       ;ex (sp),hl\r
+       db 0ffh,0e3h,o_EX       ;ex (sp),hl\r
        dw l1ca0h\r
-       db 0ffh,0e9h,052h       ;jp (hl)\r
+       db 0ffh,0e9h,o_JP       ;jp (hl)\r
        dw l1caeh\r
-       db 0ffh,0ebh,034h       ;ex de,hl\r
+       db 0ffh,0ebh,o_EX       ;ex de,hl\r
        dw p_arg_ex_dehl\r
-       db 0ffh,0f9h,056h       ;ld sp,hl\r
+       db 0ffh,0f9h,o_LD       ;ld sp,hl\r
        dw l1cc1h\r
-       db 0cfh,003h,041h       ;inc rr\r
+       db 0cfh,003h,o_INC      ;inc rr\r
        dw p_arg_ww\r
-       db 0cfh,00bh,029h       ;dec rr\r
+       db 0cfh,00bh,o_DEC      ;dec rr\r
        dw p_arg_ww\r
-       db 0c7h,004h,041h       ;inc r\r
+       db 0c7h,004h,o_INC      ;inc r\r
        dw p_arg_r\r
-       db 0c7h,005h,029h       ;dec r\r
+       db 0c7h,005h,o_DEC      ;dec r\r
        dw p_arg_r\r
-       db 0ffh,008h,034h       ;ex af,af'\r
+       db 0ffh,008h,o_EX       ;ex af,af'\r
        dw p_arg_ex_afaf\r
-       db 0cfh,009h,003h       ;add hl,rr\r
+       db 0cfh,009h,o_ADD      ;add hl,rr\r
        dw l1cd3h\r
-       db 0efh,002h,056h       ;ld (rr),a ;rr=bc,de\r
+       db 0efh,002h,o_LD       ;ld (rr),a ;rr=bc,de\r
        dw l1cdch\r
-       db 0efh,00ah,056h       ;ld a,(rr) ;rr=bc,de\r
+       db 0efh,00ah,o_LD       ;ld a,(rr) ;rr=bc,de\r
        dw l1ce5h\r
        db 0\r
 \r
 ; 2 byte opdodes\r
 b_1b54_start:\r
-       db 0c7h,006h,056h       ;ld r,nn\r
+       db 0c7h,006h,o_LD       ;ld r,nn\r
        dw l1cfah\r
-       db 0ffh,0c6h,003h       ;add a,nn\r
+       db 0ffh,0c6h,o_ADD      ;add a,nn\r
        dw l1cf5h\r
-       db 0ffh,0ceh,000h       ;adc a,nn\r
+       db 0ffh,0ceh,o_ADC      ;adc a,nn\r
        dw l1cf5h\r
-       db 0ffh,0d6h,0c9h       ;sub a,nn\r
+       db 0ffh,0d6h,o_SUB      ;sub nn\r
        dw l1d09h\r
-       db 0ffh,0deh,0b7h       ;sbc a,nn\r
+       db 0ffh,0deh,o_SBC      ;sbc a,nn\r
        dw l1cf5h\r
-       db 0ffh,0e6h,006h       ;and a,nn\r
+       db 0ffh,0e6h,o_AND      ;and nn\r
        dw l1d09h\r
-       db 0ffh,0eeh,0cch       ;xor nn\r
+       db 0ffh,0eeh,o_XOR      ;xor nn\r
        dw l1d09h\r
-       db 0ffh,0f6h,06ch       ;or nn\r
+       db 0ffh,0f6h,o_OR       ;or nn\r
        dw l1d09h\r
-       db 0ffh,0feh,013h       ;cp a,nn\r
+       db 0ffh,0feh,o_CP       ;cp nn\r
        dw l1d09h\r
-       db 0ffh,010h,02eh       ;djnz\r
+       db 0ffh,010h,o_DJNZ     ;djnz\r
        dw p_arg_jrel\r
-       db 0ffh,018h,054h       ;jr\r
+       db 0ffh,018h,o_JR       ;jr\r
        dw p_arg_jrel\r
-       db 0e7h,020h,054h       ;jr cc,\r
+       db 0e7h,020h,o_JR       ;jr cc,\r
        dw p_arg_cc_jrel\r
-       db 0ffh,0d3h,076h       ;out (nn),a\r
+       db 0ffh,0d3h,o_OUT      ;out (nn),a\r
        dw l1d37h\r
-       db 0ffh,0dbh,03fh       ;in a,(nn)\r
+       db 0ffh,0dbh,o_IN       ;in a,(nn)\r
        dw l1d29h\r
        db 0\r
 \r
 ; 3 byte opcodes\r
 b_1b9b_start:\r
-       db 0c7h,0c2h,052h       ;jp cc,mn\r
+       db 0c7h,0c2h,o_JP       ;jp cc,mn\r
        dw p_arg_cc_mn\r
-       db 0c7h,0c4h,00ch       ;call cc,mn\r
+       db 0c7h,0c4h,o_CALL     ;call cc,mn\r
        dw p_arg_cc_mn\r
-       db 0cfh,001h,056h       ;ld ww,mn\r
+       db 0cfh,001h,o_LD       ;ld ww,mn\r
        dw p_arg_ww_mn\r
-       db 0ffh,0c3h,052h       ;jp mn\r
+       db 0ffh,0c3h,o_JP       ;jp mn\r
        dw p_arg_mn\r
-       db 0ffh,0cdh,00ch       ;call mn\r
+       db 0ffh,0cdh,o_CALL     ;call mn\r
        dw p_arg_mn\r
-       db 0ffh,022h,056h       ;ld (mn),hl\r
+       db 0ffh,022h,o_LD       ;ld (mn),hl\r
        dw p_arg_addr_hl\r
-       db 0ffh,02ah,056h       ;ld hl,(mn)\r
+       db 0ffh,02ah,o_LD       ;ld hl,(mn)\r
        dw p_arg_hl_addr\r
-       db 0ffh,032h,056h       ;ld (mn),a\r
+       db 0ffh,032h,o_LD       ;ld (mn),a\r
        dw p_arg_addr_a\r
-       db 0ffh,03ah,056h       ;ld a,(mn)\r
+       db 0ffh,03ah,o_LD       ;ld a,(mn)\r
        dw p_arg_a_addr\r
        db 0\r
 \r
 ; Prefix ED + 1 byte opcode, no arguments\r
 ; Format: opcode, t_MNEMONICS index\r
 b_1bc9_start:\r
-       db 044h,066h            ;neg\r
-       db 045h,092h            ;retn\r
-       db 04dh,08eh            ;reti\r
-       db 067h,0b1h            ;rrd\r
-       db 06fh,0a2h            ;rld\r
-       db 0a0h,05fh            ;ldi\r
-       db 0a1h,01ch            ;cpi\r
-       db 0a2h,04bh            ;ini\r
-       db 0a3h,07dh            ;outi\r
-       db 0a8h,058h            ;ldd\r
-       db 0a9h,015h            ;cpd\r
-       db 0aah,044h            ;ind\r
-       db 0abh,079h            ;outd\r
-       db 0b0h,062h            ;ldir\r
-       db 0b1h,01fh            ;cpir\r
-       db 0b2h,04eh            ;inir\r
-       db 0b3h,072h            ;otir\r
-       db 0b8h,05bh            ;lddr\r
-       db 0b9h,018h            ;cpdr\r
-       db 0bah,047h            ;indr\r
-       db 0bbh,06eh            ;otdr\r
-       db 08bh,0d5h            ;otdm\r
-       db 09bh,0d9h            ;otdmr\r
-       db 083h,0deh            ;otim\r
-       db 093h,0e2h            ;otimr\r
-       db 076h,0ebh            ;slp\r
+       db 044h,o_NEG           ;neg\r
+       db 045h,o_RETN          ;retn\r
+       db 04dh,o_RETI          ;reti\r
+       db 067h,o_RRD           ;rrd\r
+       db 06fh,o_RLD           ;rld\r
+       db 0a0h,o_LDI           ;ldi\r
+       db 0a1h,o_CPI           ;cpi\r
+       db 0a2h,o_INI           ;ini\r
+       db 0a3h,o_OUTI          ;outi\r
+       db 0a8h,o_LDD           ;ldd\r
+       db 0a9h,o_CPD           ;cpd\r
+       db 0aah,o_IND           ;ind\r
+       db 0abh,o_OUTD          ;outd\r
+       db 0b0h,o_LDIR          ;ldir\r
+       db 0b1h,o_CPIR          ;cpir\r
+       db 0b2h,o_INIR          ;inir\r
+       db 0b3h,o_OTIR          ;otir\r
+       db 0b8h,o_LDDR          ;lddr\r
+       db 0b9h,o_CPDR          ;cpdr\r
+       db 0bah,o_INDR          ;indr\r
+       db 0bbh,o_OTDR          ;otdr\r
+       db 08bh,o_OTDM          ;otdm\r
+       db 09bh,o_OTDMR         ;otdmr\r
+       db 083h,o_OTDM          ;otim\r
+       db 093h,o_OTDMR         ;otimr\r
+       db 076h,o_SLP           ;slp\r
        db 0ffh                 ;<end mark>\r
 \r
 b_1bf4_start:\r
-       db 0e7h,040h,03fh       ;in r,(c) ;r=b,c,d,e\r
+       db 0ffh,070h,0ffh       ;in (c)    ;\r
        dw p_arg_in_c           ;\r
-       db 0f7h,060h,03fh       ;in r,(c) ;r=h,l\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 0ffh,078h,03fh       ;in r,(c) ;r=a\r
-       dw p_arg_in_c           ;\r
-       db 0e7h,041h,076h       ;out (c),r ;r=b,c,d,e\r
-       dw p_arg_out_c          ;\r
-       db 0f7h,061h,076h       ;out (c),r ;r=h,l\r
+       db 0ffh,071h,0ffh       ;out (c),0 ;\r
        dw p_arg_out_c          ;\r
-       db 0ffh,079h,076h       ;out (c),r ;r=a\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 0cfh,042h,0b7h       ;sbc hl,rr\r
+       db 0cfh,042h,o_SBC      ;sbc hl,rr\r
        dw l1dcah               ;\r
-       db 0cfh,04ah,000h       ;adc hl,rr\r
+       db 0cfh,04ah,o_ADC      ;adc hl,rr\r
        dw l1dcah               ;\r
-       db 0ffh,046h,03dh       ;im 0\r
+       db 0ffh,046h,o_IM       ;im 0\r
        dw l1d85h               ;\r
-       db 0ffh,056h,03dh       ;im 1\r
+       db 0ffh,056h,o_IM       ;im 1\r
        dw l1d89h               ;\r
-       db 0ffh,05eh,03dh       ;im 2\r
+       db 0ffh,05eh,o_IM       ;im 2\r
        dw l1d8dh               ;\r
-       db 0ffh,047h,056h       ;ld i,a\r
-       dw l1d92h               ;\r
-       db 0ffh,057h,056h       ;ld a,i\r
-       dw l1d97h               ;\r
-       db 0ffh,04fh,056h       ;ld r,a\r
-       dw l1d9ch               ;\r
-       db 0ffh,05fh,056h       ;ld a,r\r
-       dw l1da1h\r
-       db 0cfh,04ch,0d2h       ;mlt rr\r
+       db 0e7h,047h,o_LD       ;ld i,a ... ld a,r\r
+       dw p_arg_IR             ;\r
+       db 0cfh,04ch,o_MLT      ;mlt rr\r
        dw p_arg_ww\r
-       db 0c7h,004h,0eeh       ;tst r\r
+       db 0c7h,004h,o_TST      ;tst r\r
        dw p_arg_r\r
        db 0\r
 \r
 l228bh:\r
-       db 0e7h,000h,0cfh       ;in0 r,(m) ;r=b,c,d,e\r
+       db 0ffh,030h,0ffh       ;in0 (m)\r
        dw p_arg_r_m\r
-       db 0f7h,020h,0cfh       ;in0 r,(m) ;r=h,l\r
+       db 0c7h,000h,o_IN       ;in0 r,(m) ;r=b,c,d,e,h,l,a\r
        dw p_arg_r_m\r
-       db 0ffh,038h,0cfh       ;in0 a,(m)\r
-       dw p_arg_r_m\r
-       db 0e7h,001h,0e7h       ;out0 (m),r ;r=b,c,d,e\r
-       dw p_arg_m_r\r
-       db 0f7h,021h,0e7h       ;out0 (m),r ;r=h,l\r
+       db 0ffh,031h,0ffh       ;out0 (m),0\r
        dw p_arg_m_r\r
-       db 0ffh,039h,0e7h       ;out0 (m),a\r
+       db 0ech,001h,o_OUT0     ;out0 (m),r ;r=b,c,d,e\r
        dw p_arg_m_r\r
-       db 0ffh,064h,0eeh       ;tst m\r
+       db 0ffh,064h,o_TST      ;tst m\r
        dw l1d09h\r
-       db 0ffh,074h,0f1h       ;tstio m\r
+       db 0ffh,074h,o_TSTIO    ;tstio m\r
        dw l1d09h\r
        db 0\r
 \r
+; Prefix ED + 1 byte opcode + 2 byte address\r
+; Format: db mask, match, t_MNEMONICS-index\r
+;        dw argument formating function\r
 b_1c40_start:\r
-       db 0efh,043h,056h       ;ld (mn),ww     ;ww=bc,de\r
+       db 0cfh,043h,o_LD       ;ld (mn),ww     ;ww=bc,de,hl,sp\r
        dw p_arg_addr_ww\r
-       db 0ffh,073h,056h       ;ld (mn),sp\r
-       dw p_arg_addr_ww\r
-       db 0efh,04bh,056h       ;ld ww,(mn)     ;ww=bc,de\r
-       dw p_arg_ww_addr\r
-       db 0ffh,07bh,056h       ;ld sp,(mn)\r
+       db 0cfh,04bh,o_LD       ;ld ww,(mn)     ;ww=bc,de,hl,sp\r
        dw p_arg_ww_addr\r
        db 0\r
 \r
 ; CB\r
 b_1c55_start:\r
-       db 0f8h,000h,09bh       ;rlc g\r
+       db 0f8h,000h,o_RLC      ;rlc g\r
        dw l1e03h\r
-       db 0f8h,008h,0aah       ;rrc g\r
+       db 0f8h,008h,o_RRC      ;rrc g\r
        dw l1e03h\r
-       db 0f8h,010h,096h       ;rl g\r
+       db 0f8h,010h,o_RL       ;rl g\r
        dw l1e03h\r
-       db 0f8h,018h,0a5h       ;rr g\r
+       db 0f8h,018h,o_RR       ;rr g\r
        dw l1e03h\r
-       db 0f8h,020h,0c0h       ;sla g\r
+       db 0f8h,020h,o_SLA      ;sla g\r
        dw l1e03h\r
-       db 0f8h,028h,0c3h       ;sra g\r
+       db 0f8h,028h,o_SRA      ;sra g\r
        dw l1e03h\r
-       db 0f8h,038h,0c6h       ;srl g\r
+       db 0f8h,038h,o_SRL      ;srl g\r
        dw l1e03h\r
-       db 0c0h,040h,009h       ;bit b,g\r
+       db 0c0h,040h,o_BIT      ;bit b,g\r
        dw p_arg_bitop\r
-       db 0c0h,080h,088h       ;res b,g\r
+       db 0c0h,080h,o_RES      ;res b,g\r
        dw p_arg_bitop\r
-       db 0c0h,0c0h,0bdh       ;set b,g\r
+       db 0c0h,0c0h,o_SET      ;set b,g\r
        dw p_arg_bitop\r
        db 0\r
 \r
@@ -3005,8 +2944,6 @@ p_arg_r_r:
 p_arg_a_r:\r
        call p_A_comma\r
        jp p_arg_rs\r
-l1c97h:\r
-       ret\r
 \r
 p_arg_r_m:\r
        call p_arg_r\r
@@ -3018,7 +2955,7 @@ p_arg_m_r:
        call p_char_comma\r
        jp p_arg_r\r
 \r
-l1c98h:\r
+p_arg_rst:\r
        ld a,(iy+000h)\r
        and 038h\r
        jp out_hex\r
@@ -3034,8 +2971,10 @@ l1caeh:
        jr out_rparen\r
 \r
 p_arg_ex_dehl:\r
-       ld hl,l1773h\r
-       jp pstr\r
+       call pstr_inl\r
+       DC      'DE,HL'\r
+p_arg_none:\r
+       ret\r
 \r
 l1cc1h:\r
        call pstr_inl\r
@@ -3043,8 +2982,9 @@ l1cc1h:
        jp p_arg_hlixiy\r
 \r
 p_arg_ex_afaf:\r
-       ld hl,b_176d_start\r
-       jp pstr\r
+       call pstr_inl\r
+       DC      'AF,AF'''\r
+       ret\r
 \r
 l1cd3h:\r
        call p_arg_hlixiy\r
@@ -3167,28 +3107,21 @@ p_char_lparen:
        ld a,'('\r
        jp outchar\r
 \r
-l1d92h:\r
-       ld hl,b_1da7_start\r
-       jr l1da4h\r
-l1d97h:\r
-       ld hl,l1daah\r
-       jr l1da4h\r
-l1d9ch:\r
-       ld hl,l1dadh\r
-       jr l1da4h\r
-l1da1h:\r
-       ld hl,l1db0h\r
-l1da4h:\r
-       jp pstr\r
+p_arg_IR:\r
+       ld a,(iy+000h)\r
+       rra\r
+       rra\r
+       rra\r
+       and 03\r
+       ld hl,t_arg_IR\r
+       jp p_arg\r
 \r
-b_1da7_start:\r
+t_arg_IR:\r
        DC      'I,A'\r
-l1daah:\r
-       DC      'A,I'\r
-l1dadh:\r
        DC      'R,A'\r
-l1db0h:\r
+       DC      'A,I'\r
        DC      'A,R'\r
+       db      0\r
 \r
 p_arg_in_c:\r
        call p_arg_r\r
@@ -3269,18 +3202,15 @@ p_arg_rs:
 p_arg_r0:\r
        and 007h\r
        cp 006h\r
-       jr nz,p_arg_r1\r
+       ld b,a\r
+       ld hl,t_BCDEHL_HL_A\r
+       jr nz,p_arg0\r
        ld a,(isprefix_ixiy)\r
        and a\r
-       ld a,006h\r
-       jr z,p_arg_r1\r
-       ld hl,b_1e78_start\r
-       ld a,(isprefix_ixiy)\r
+       jr z,p_arg0\r
+       ld hl,t_lp_IXIY\r
        dec a\r
-       jr z,l1e4dh\r
-       ld hl,l1e7bh\r
-l1e4dh:\r
-       call pstr\r
+       call p_arg\r
        ld a,(iy+001h)\r
        push af\r
        rlca\r
@@ -3295,19 +3225,15 @@ l1e61h:
        pop af\r
        jp p_arg_nn_rp\r
 \r
-p_arg_r1:\r
-       ld hl,t_BCDEHL_HL_A\r
-       jr p_arg\r
-\r
-b_1e78_start:\r
+t_lp_IXIY:\r
        DC      '(IX'\r
-l1e7bh:\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
+\r
 p_arg_zz:\r
        ld hl,t_BC.DE.HL.AF\r
        jr l1e8eh\r
@@ -3334,89 +3260,131 @@ p_arg_cc0:
        ld hl,t_tstfl_ZCPS\r
 p_arg:\r
        ld b,a\r
-       call sel_dc_string\r
-       jp pstr\r
+p_arg0:\r
+       jp pstr_sel\r
+\r
+if 0\r
+p_bli:\r
+       ld a,(iy+000h)\r
+       rra\r
+       and 00ch\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
 \r
 ;-------------------------------------------------------------------------------\r
 \r
+opc_index      defl    0\r
+opc_offset     defl    0\r
+\r
+opc    macro   x\r
+       local   pos\r
+pos    defl    $\r
+i_&x   equ     opc_index\r
+o_&x   equ     opc_offset\r
+       dc      '&x'\r
+opc_index      defl    opc_index+1\r
+opc_offset     defl    opc_offset+$-pos\r
+       endm\r
+\r
+\r
 t_MNEMONICS:\r
-       DC      'ADC'\r
-       DC      'ADD'\r
-       DC      'AND'\r
-       DC      'BIT'\r
-       DC      'CALL'\r
-       DC      'CCF'\r
-       DC      'CP'\r
-       DC      'CPD'\r
-       DC      'CPDR'\r
-       DC      'CPI'\r
-       DC      'CPIR'\r
-       DC      'CPL'\r
-       DC      'DAA'\r
-       DC      'DEC'\r
-       DC      'DI'\r
-       DC      'DJNZ'\r
-       DC      'EI'\r
-       DC      'EX'\r
-       DC      'EXX'\r
-       DC      'HALT'\r
-       DC      'IM'\r
-       DC      'IN'\r
-       DC      'INC'\r
-       DC      'IND'\r
-       DC      'INDR'\r
-       DC      'INI'\r
-       DC      'INIR'\r
-       DC      'JP'\r
-       DC      'JR'\r
-       DC      'LD'\r
-       DC      'LDD'\r
-       DC      'LDDR'\r
-       DC      'LDI'\r
-       DC      'LDIR'\r
-       DC      'NEG'\r
-       DC      'NOP'\r
-       DC      'OR'\r
-       DC      'OTDR'\r
-       DC      'OTIR'\r
-       DC      'OUT'\r
-       DC      'OUTD'\r
-       DC      'OUTI'\r
-       DC      'POP'\r
-       DC      'PUSH'\r
-       DC      'RES'\r
-       DC      'RET'\r
-       DC      'RETI'\r
-       DC      'RETN'\r
-       DC      'RL'\r
-       DC      'RLA'\r
-       DC      'RLC'\r
-       DC      'RLCA'\r
-       DC      'RLD'\r
-       DC      'RR'\r
-       DC      'RRA'\r
-       DC      'RRC'\r
-       DC      'RRCA'\r
-       DC      'RRD'\r
-       DC      'RST'\r
-       DC      'SBC'\r
-       DC      'SCF'\r
-       DC      'SET'\r
-       DC      'SLA'\r
-       DC      'SRA'\r
-       DC      'SRL'\r
-       DC      'SUB'\r
-       DC      'XOR'\r
-       DC      'IN0'\r
-       DC      'MLT'\r
-       DC      'OTDM'\r
-       DC      'OTDMR'\r
-       DC      'OTIM'\r
-       DC      'OTIMR'\r
-       DC      'OUT0'\r
-       DC      'SLP'\r
-       DC      'TST'\r
-       DC      'TSTIO'\r
+; 1-byte other\r
+       opc NOP\r
+       opc LD\r
+       opc INC\r
+       opc DEC\r
+       opc DJNZ\r
+       opc JR\r
+       opc HALT\r
+\r
+       opc RLCA\r
+       opc RRCA\r
+       opc RLA\r
+       opc RRA\r
+       opc DAA\r
+       opc CPL\r
+       opc SCF\r
+       opc CCF\r
+\r
+; 1-byte "alu"\r
+       opc ADD\r
+       opc ADC\r
+       opc SUB\r
+       opc SBC\r
+       opc AND\r
+       opc XOR\r
+       opc OR\r
+       opc CP\r
+\r
+       opc RET\r
+       opc POP\r
+       opc JP\r
+       opc CALL\r
+       opc PUSH\r
+       opc RST\r
+       opc OUT\r
+       opc EXX\r
+       opc IN\r
+       opc EX\r
+       opc DI\r
+       opc EI\r
+; CB\r
+       opc RLC\r
+       opc RRC\r
+       opc RL\r
+       opc RR\r
+       opc SLA\r
+       opc SRA\r
+;          SLL\r
+       opc SRL\r
+       opc BIT\r
+       opc RES\r
+       opc SET\r
+\r
+; ED\r
+       opc NEG\r
+       opc RETN\r
+       opc RETI\r
+       opc IM\r
+       opc RRD\r
+       opc RLD\r
+\r
+;Block instructions\r
+t_mn_bli:\r
+       opc LDI\r
+       opc CPI\r
+       opc INI\r
+       opc OUTI\r
+       opc LDD\r
+       opc CPD\r
+       opc IND\r
+       opc OUTD\r
+       opc LDIR\r
+       opc CPIR\r
+       opc INIR\r
+       opc OTIR\r
+       opc LDDR\r
+       opc CPDR\r
+       opc INDR\r
+       opc OTDR\r
+\r
+;Z180\r
+       opc IN0\r
+       opc OUT0\r
+       opc TST\r
+       opc MLT\r
+       opc TSTIO\r
+       opc SLP\r
+       opc OTIM\r
+       opc OTDM\r
+       opc OTIMR\r
+       opc OTDMR\r
+\r
        DB      0\r
 \r
 t_BCDEHL_HL_A:\r
@@ -3438,13 +3406,11 @@ t_BC.DE.HL.SP:
 t_BC.DE.HL.AF:\r
        DC      'BC'\r
        DC      'DE'\r
-\r
        DC      'HL'\r
        DC      'AF'\r
        DB      0\r
 t_HL.IX.IY:\r
        DC      'HL'\r
-\r
        DC      'IX'\r
        DC      'IY'\r
        DB      0\r
@@ -3457,12 +3423,6 @@ t_tstfl_ZCPS:
        DC      'PE'\r
        DC      'P'\r
        DC      'M'\r
-       DC      'NE'\r
-       DC      'EQ'\r
-       DC      'GE'\r
-       DC      'LT'\r
-       DC      'NV'\r
-       DC      'V'\r
        DB      0\r
 t__C_:\r
        DC      '(C)'\r
@@ -3489,7 +3449,7 @@ tc_set_bp:
        add hl,bc\r
        call bp_trace_enter\r
        ld iy,(reg.pc)\r
-       ld hl,b_2039_start\r
+       ld hl,t_op_branch\r
        call lookup_opc\r
        ccf\r
        ret c\r
@@ -3503,36 +3463,35 @@ l2037h:
 \r
 ;-------------------------------------------------------------------------------\r
 \r
-b_2039_start:\r
-       db 0ffh,0ddh,000h       ;Prefix DD\r
+t_op_branch:\r
+       db 0ffh,0ddh,0          ;Prefix DD\r
        dw l20a7h\r
-       db 0ffh,0fdh,000h       ;Prefix FD\r
+       db 0ffh,0fdh,0          ;Prefix FD\r
        dw l20ach\r
-       db 0ffh,0edh,000h       ;Prefix ED\r
+       db 0ffh,0edh,0          ;Prefix ED\r
        dw l20b8h\r
-\r
-b_2048_start:\r
-       db 0ffh,0cdh,000h       ;call mn\r
+t_op_branch0:\r
+       db 0ffh,0cdh,0          ;call mn\r
        dw l2080h\r
-       db 0ffh,0c3h,000h       ;jp mn\r
+       db 0ffh,0c3h,0          ;jp mn\r
        dw l208bh\r
-       db 0ffh,0e9h,000h       ;jp ()\r
+       db 0ffh,0e9h,0          ;jp ()\r
        dw l20a2h\r
-       db 0ffh,0c9h,000h       ;ret\r
+       db 0ffh,0c9h,0          ;ret\r
        dw l20dch\r
-       db 0ffh,0cfh,000h       ;rst 8\r
+       db 0ffh,0cfh,0          ;rst 8\r
        dw l2115h\r
-       db 0c7h,0c7h,000h       ;rst n\r
+       db 0c7h,0c7h,0          ;rst n\r
        dw l20f9h\r
-       db 0c7h,0c4h,000h       ;call cc,mn\r
+       db 0c7h,0c4h,0          ;call cc,mn\r
        dw l2080h\r
-       db 0f7h,010h,000h       ;djnz d; jr d\r
+       db 0f7h,010h,0          ;djnz d; jr d\r
        dw l2093h\r
-       db 0e7h,020h,000h       ;jr cc,d\r
+       db 0e7h,020h,0          ;jr cc,d\r
        dw l2093h\r
-       db 0c7h,0c2h,000h       ;jp cc,mn\r
+       db 0c7h,0c2h,0          ;jp cc,mn\r
        dw l208bh\r
-       db 0c7h,0c0h,000h       ;ret cc\r
+       db 0c7h,0c0h,0          ;ret cc\r
        dw l20c5h\r
        db 0\r
 \r
@@ -3630,7 +3589,6 @@ l20f9h:
        ld a,(b_21e2_start)\r
        and a\r
        ret z\r
-\r
        scf\r
        ret\r
 \r