]> cloudbase.mooo.com Git - ddt180.git/commitdiff
disas: optimized opcode tables
authorLeo C <erbl259-lmu@yahoo.de>
Fri, 21 Feb 2020 10:58:09 +0000 (11:58 +0100)
committerLeo C <erbl259-lmu@yahoo.de>
Fri, 21 Feb 2020 10:58:09 +0000 (11:58 +0100)
ddt180.z80

index 3cdf550408f83db9548d4d4faf24bac27810ce35..41457bf5201ca88aac58eba1ba204c2c793c2967 100644 (file)
@@ -2876,10 +2876,35 @@ GETNDX:
        DEC     B                       ;Restore the mode byte\r
 \r
 TABEND:\r
-       push    af\r
+       push    af                      ;save Z flag\r
+       cp      i_opc_bli\r
+       jr      c,tabe_0\r
+       ld      l,a\r
+       ld      a,c\r
+       and     03h\r
+       add     a,l\r
+       ld      l,a\r
+       ld      a,c\r
+       rra\r
+       and     0ch\r
+       add     a,l\r
+       jr      tabe_1\r
+tabe_0:\r
+       cp      i_opc_alu\r
+       jr      c,tabe_1\r
+       bit     7,b\r
+       jr      nz,tabe_1\r
+       ld      l,a\r
+       ld      a,c\r
+       rra\r
+       rra\r
+       rra\r
+       and     07h\r
+       add     a,l\r
+tabe_1:\r
        PUSH    DE                      ;save source pointer\r
        ld      de,disasbuf             ;buffer pointer\r
-       LD      HL,MONICS\r
+       LD      HL,t_MNEMONICS\r
        CALL    XTRACT                  ;copy mnemonic to buffer\r
 \r
        ex      de,hl\r
@@ -2891,7 +2916,6 @@ da_spaces:
        jr      c,da_spaces\r
        POP     DE                      ;source pointer\r
        pop     af\r
-       or      a\r
        jr      z,OPDONE1\r
 \r
        LD      A,B                     ;test\r
@@ -2951,293 +2975,263 @@ OPDONE1:
 \r
 GROUP2:\r
        DB      0C0h,036h               ;mask, mode\r
-       DB      040h,004h               ; bit b,g\r
-       DB      080h,02Dh               ; res b,g\r
-       DB      0C0h,0BEh               ; set b,g\r
+       DB      040h,i_BIT              ; bit b,g\r
+       DB      080h,i_RES              ; res b,g\r
+       DB      0C0h,i_SET+80h          ; set b,g\r
        DB      0FFh                    ;\r
-       DB      0F8h,006h               ;mask, mode\r
-       DB      000h,033h               ; rlc  g\r
-       DB      008h,038h               ; rrc  g\r
-       DB      010h,035h               ; rl   g\r
-       DB      018h,03Ah               ; rr   g\r
-       DB      020h,03Fh               ; sla  g\r
-       DB      028h,040h               ; sra  g\r
-       DB      030h,000h               ;(sll  g)\r
-       DB      038h,0C1h               ; srl  g\r
+       DB      0F8h,000h               ;mask, mode\r
+       DB      030h,i_?+80h            ; (sll g)\r
+       DB      0FFh                    ;\r
+       DB      0C0h,006h               ;mask, mode\r
+       DB      000h,i_RLC+80h          ; rlc g ... srl g\r
 \r
 ; Main group\r
 \r
 GROUP1:\r
        DB      0FFh,000h               ;mask, mode\r
-       DB      000h,024h               ; NOP\r
-       DB      007h,032h               ; RLCA\r
-       DB      00Fh,037h               ; RRCA\r
-       DB      017h,031h               ; RLA\r
-       DB      01Fh,036h               ; RRA\r
-       DB      027h,00Dh               ; DAA\r
-       DB      02Fh,00Bh               ; CPL\r
-       DB      037h,03Dh               ; SCF\r
-       DB      03Fh,006h               ; CCF\r
-       DB      076h,014h               ; HALT\r
-       DB      0C9h,030h               ; RET\r
-       DB      0D9h,012h               ; EXX\r
-       DB      0F3h,00Fh               ; DI\r
-       DB      0FBh,091h               ; EI\r
-\r
-       DB      072h\r
-       DB      0C6h,002h\r
-       DB      0CEh,001h\r
-       DB      0DEh,0BCh\r
-\r
-       DB      002h\r
-       DB      0D6h,042h\r
-       DB      0E6h,003h\r
-       DB      0EEh,043h\r
-       DB      0F6h,025h\r
-       DB      0FEh,08Ch\r
-\r
-       DB      004h\r
-       DB      008h,093h\r
-\r
+       DB      000h,i_NOP              ; NOP\r
+       DB      076h,i_HALT             ; HALT\r
+       DB      0C9h,i_RET              ; RET\r
+       DB      0D9h,i_EXX              ; EXX\r
+       DB      0F3h,i_DI               ; DI\r
+       DB      0FBh,i_EI+80h           ; EI\r
+\r
+       DB      004h                    ;mode\r
+       DB      008h,i_EX+80h           ;\r
        DB      001h\r
-       DB      010h,010h\r
-       DB      018h,09Dh\r
-\r
+       DB      010h,i_DJNZ\r
+       DB      018h,i_JR+80h\r
        DB      0AFh\r
-       DB      022h,0A2h\r
-\r
+       DB      022h,i_LD+80h\r
        DB      0FAh\r
-       DB      02Ah,0A2h\r
-\r
+       DB      02Ah,i_LD+80h\r
        DB      0A7h\r
-       DB      032h,0A2h\r
+       DB      032h,i_LD+80h\r
        DB      07Ah\r
-       DB      03Ah,0A2h\r
-\r
+       DB      03Ah,i_LD+80h\r
        DB      003h\r
-       DB      0C3h,01Ch\r
-       DB      0CDh,085h\r
-\r
+       DB      0C3h,i_JP\r
+       DB      0CDh,i_CALL+80h\r
        DB      097h\r
-       DB      0D3h,0AAh\r
+       DB      0D3h,i_OUT+80h\r
        DB      079h\r
-       DB      0DBh,09Bh\r
+       DB      0DBh,i_IN+80h\r
        DB      05Fh\r
-       DB      0E3h,093h\r
+       DB      0E3h,i_EX+80h\r
        DB      00Eh\r
-       DB      0E9h,09Ch\r
+       DB      0E9h,i_JP+80h\r
        DB      005h\r
-       DB      0EBh,093h\r
+       DB      0EBh,i_EX+80h           ;\r
        DB      0DFh\r
-       DB      0F9h,0A2h\r
-       DB      0FFh\r
-\r
-       DB      0C0h\r
-       DB      0B6h,\r
-       DB      040h,0A2h\r
+       DB      0F9h,i_LD+80h\r
        DB      0FFh\r
 \r
-       DB      0F8h\r
-       DB      076h,\r
-       DB      080h,002h\r
-       DB      088h,001h\r
-       DB      098h,0BCh\r
-\r
-       DB      006h\r
-       DB      090h,042h\r
-       DB      0A0h,003h\r
-       DB      0A8h,043h\r
-       DB      0B0h,025h\r
-       DB      0B8h,08Ch\r
+       DB      0C0h                    ;mask\r
+       DB      0B6h                    ;mode r[y],r[z]\r
+       DB      040h,i_LD+80h\r
+       DB      006h                    ;mode alu[y],r[z]\r
+       DB      080h,i_ADD+80h\r
        DB      0FFh\r
 \r
-       DB      0C7h\r
+       DB      0C7h                    ;mask\r
        DB      00Bh\r
-       DB      004h,016h\r
-       DB      005h,08Eh\r
+       DB      004h,i_INC              ; inc r[y]\r
+       DB      005h,i_DEC+80h          ; dec r[y]\r
        DB      0B2h,\r
-       DB      006h,0A2h\r
+       DB      006h,i_LD+80h           ; ld r[y],nn\r
+       DB      000h                    ;mode\r
+       DB      007h,i_RLCA+080h        ; rlca ...\r
        DB      020h\r
-       DB      0C0h,0B0h\r
+       DB      0C0h,i_RET+080h         ; ret cc\r
        DB      023h\r
-       DB      0C2h,01Ch\r
-       DB      0C4h,085h\r
+       DB      0C2h,i_JP               ; jp cc,mn\r
+       DB      0C4h,i_CALL+080h        ; call cc,mn\r
        DB      010h\r
-       DB      0C7h,0BBh\r
+       DB      0C7h,i_RST+080h         ; rst\r
+       DB      002h                    ;mode alu[y] n\r
+       DB      0C6h,i_ADD+80h          ; add ...\r
        DB      0FFh\r
 \r
        DB      0CFh\r
        DB      0D3h\r
-       DB      001h,0A2h\r
+       DB      001h,i_LD+80h           ; ld ww,mn\r
        DB      00Dh\r
-       DB      003h,016h\r
-       DB      00Bh,08Eh\r
+       DB      003h,i_INC              ; inc rp\r
+       DB      00Bh,i_DEC+80h          ; dec rp\r
        DB      0FDh\r
-       DB      009h,082h\r
+       DB      009h,i_ADD+80h          ; add hl,rp\r
        DB      060h\r
-       DB      0C1h,02Bh\r
-       DB      0C5h,0ACh\r
+       DB      0C1h,i_POP              ; pop rp2\r
+       DB      0C5h,i_PUSH+80h         ; push rp2\r
        DB      0FFh\r
 \r
        DB      0E7h\r
        DB      021h\r
-       DB      020h,09Dh\r
+       DB      020h,i_JR+80h           ;jr cc,\r
        DB      0FFh\r
 \r
        DB      0EFh\r
        DB      0E7h\r
-       DB      002h,0A2h\r
+       DB      002h,i_LD+80h           ; ld (rp),a ;rp=bc,de\r
        DB      07Eh\r
-       DB      00Ah,0A2h\r
+       DB      00Ah,i_LD+80h           ; ld a,(rp) ;rp=bc,de\r
 \r
 ; ED group\r
 \r
 GROUP3:\r
        DB      0FFh,000h               ;\r
-       DB      044h,023h               ;NEG\r
-       DB      045h,02Fh               ;RETN\r
-       DB      04Dh,02Eh               ;RETI\r
-       DB      04Eh,000h               ;(IM 0)\r
-       DB      067h,039h               ;RRD\r
-       DB      06Fh,034h               ;RLD\r
-;      DB      070h,000h               ;(IN (C))\r
-       DB      071h,000h               ;(OUT (C),0)\r
-       DB      0A0h,021h               ;LDI\r
-       DB      0A1h,00Ah               ;CPI\r
-       DB      0A2h,01Ah               ;INI\r
-       DB      0A3h,029h               ;OUTI\r
-       DB      0A8h,01Fh               ;LDD\r
-       DB      0A9h,008h               ;CPD\r
-       DB      0AAh,018h               ;IND\r
-       DB      0ABh,028h               ;OUTD\r
-       DB      0B0h,020h               ;LDIR\r
-       DB      0B1h,009h               ;CPIR\r
-       DB      0B2h,019h               ;INIR\r
-       DB      0B3h,027h               ;OTIR\r
-       DB      0B8h,01Eh               ;LDDR\r
-       DB      0B9h,007h               ;CPDR\r
-       DB      0BAh,017h               ;INDR\r
-       DB      0BBh,0A6h               ;OTDR\r
-       DB      0FFh\r
-\r
-       DB      0FFh\r
+       DB      044h,i_NEG              ; NEG\r
+       DB      045h,i_RETN             ; RETN\r
+       DB      04Dh,i_RETI             ; RETI\r
+       DB      04Eh,i_?                ; (IM 0)\r
+       DB      067h,i_RRD              ; RRD\r
+       DB      06Fh,i_RLD              ; RLD\r
+       DB      071h,i_?+80h            ; (OUT (C),0)\r
        DB      080h\r
-       DB      070h,09Bh               ;IN (C)\r
+       DB      070h,i_IN+80h           ; IN (C)\r
        DB      0FFh\r
 \r
        DB      0C7h\r
        DB      0B8h\r
-       DB      040h,09Bh               ;IN r,(C)\r
+       DB      040h,i_IN+80h           ; IN r,(C)\r
        DB      08Bh                    ;\r
-       DB      041h,0AAh               ;OUT (C),r\r
+       DB      041h,i_OUT+80h          ; OUT (C),r\r
        DB      0FFh                    ;\r
                                        ;\r
        DB      0CFh                    ;\r
        DB      0FDh                    ;\r
-       DB      042h,03Ch               ;sbc hl,rp\r
-       DB      04Ah,081h               ;adc hl,rp\r
+       DB      042h,i_SBC              ; sbc hl,rp\r
+       DB      04Ah,i_ADC+80h          ; adc hl,rp\r
        DB      0ADh                    ;\r
-       DB      043h,0A2h               ;LD (nn),rp\r
+       DB      043h,i_LD+80h           ; LD (nn),rp\r
        DB      0DAh                    ;\r
-       DB      04Bh,0A2h               ;LD rp,(nn)\r
+       DB      04Bh,i_LD+80h           ; LD rp,(nn)\r
        DB      0FFh                    ;\r
                                        ;\r
        DB      0E7h                    ;\r
        DB      040h                    ;\r
-       DB      046h,095h               ;IM x\r
+       DB      046h,i_IM+80h           ; IM x\r
        DB      0FFh                    ;\r
                                        ;\r
        DB      0F7h                    ;\r
        DB      0C7h                    ;\r
-       DB      047h,0A2h               ;LD i|r,A\r
+       DB      047h,i_LD+80h           ; LD i|r,A\r
        DB      07Ch                    ;\r
-       DB      057h,0A2h               ;LD A,i|r\r
+       DB      057h,i_LD+80h           ; LD A,i|r\r
        DB      0FFh\r
+\r
+       DB      0E4h                    ;\r
+       DB      000h                    ;\r
+       DB      0A0h,i_LDI+80h          ; LDI ...\r
+       DB      0FFh                    ;\r
+                                       ;\r
        DB      000h\r
 \r
-;_______________\r
-\r
-MONICS:\r
-       DC      0BFh            ; 0     ?\r
-       DC      'ADC'           ; 1     ADC\r
-       DC      'ADD'           ; 2     ADD\r
-       DC      'AND'           ; 3     AND\r
-       DC      'BIT'           ; 4     BIT\r
-       DC      'CALL'          ; 5     CALL\r
-       DC      'CCF'           ; 6     CCF\r
-       DC      'CPDR'          ; 7     CPDR\r
-       DC      'CPD'           ; 8     CPD\r
-       DC      'CPIR'          ; 9     CPIR\r
-       DC      'CPI'           ;10     CPI\r
-       DC      'CPL'           ;11     CPL\r
-       DC      'CP'            ;12     CP\r
-       DC      'DAA'           ;13     DAA\r
-       DC      'DEC'           ;14     DEC\r
-       DC      'DI'            ;15     DI\r
-       DC      'DJNZ'          ;16     DJNZ\r
-       DC      'EI'            ;17     EI\r
-       DC      'EXX'           ;18     EXX\r
-       DC      'EX'            ;19     EX\r
-       DC      'HALT'          ;20     HALT\r
-       DC      'IM'            ;21     IM\r
-       DC      'INC'           ;22     INC\r
-       DC      'INDR'          ;23     INDR\r
-       DC      'IND'           ;24     IND\r
-       DC      'INIR'          ;25     INIR\r
-       DC      'INI'           ;26     INI\r
-       DC      'IN'            ;27     IN\r
-       DC      'JP'            ;28     JP\r
-       DC      'JR'            ;29     JR\r
-       DC      'LDDR'          ;30     LDDR\r
-       DC      'LDD'           ;31     LDD\r
-       DC      'LDIR'          ;32     LDIR\r
-       DC      'LDI'           ;33     LDI\r
-       DC      'LD'            ;34     LD\r
-       DC      'NEG'           ;35     NEG\r
-       DC      'NOP'           ;36     NOP\r
-       DC      'OR'            ;37     OR\r
-       DC      'OTDR'          ;38     OTDR\r
-       DC      'OTIR'          ;39     OTIR\r
-       DC      'OUTD'          ;40     OUTD\r
-       DC      'OUTI'          ;41     OUTI\r
-       DC      'OUT'           ;42     OUT\r
-       DC      'POP'           ;43     POP\r
-       DC      'PUSH'          ;44     PUSH\r
-       DC      'RES'           ;45     RES\r
-       DC      'RETI'          ;46     RETI\r
-       DC      'RETN'          ;47     RETN\r
-       DC      'RET'           ;48     RET\r
-       DC      'RLA'           ;49     RLA\r
-       DC      'RLCA'          ;50     RLCA\r
-       DC      'RLC'           ;51     RLC\r
-       DC      'RLD'           ;52     RLD\r
-       DC      'RL'            ;53     RL\r
-       DC      'RRA'           ;54     RRA\r
-       DC      'RRCA'          ;55     RA\r
-       DC      'RRC'           ;56     RRC\r
-       DC      'RRD'           ;57     RRD\r
-       DC      'RR'            ;58     RR\r
-       DC      'RST'           ;59     RST\r
-       DC      'SBC'           ;60     SBC\r
-       DC      'SCF'           ;61     SCF\r
-       DC      'SET'           ;62     SET\r
-       DC      'SLA'           ;63     SLA\r
-       DC      'SRA'           ;64     SRA\r
-       DC      'SRL'           ;65     SRL\r
-       DC      'SUB'           ;66     SUB\r
-       DC      'XOR'           ;67     XOR\r
-;Z180\r
-       DC      'IN0'           ;68     IN0\r
-       DC      'MLP'           ;69     MLP\r
-       DC      'OTDM'          ;70     OTDM\r
-       DC      'OTDMR'         ;71     OTDMR\r
-       DC      'OTIM'          ;72     OTIM\r
-       DC      'OTIMR'         ;73     OTIMR\r
-       DC      'OUT0'          ;74     OUT0\r
-       DC      'SLP'           ;75     SLP\r
-       DC      'TST'           ;76     TST\r
-       DC      'TSTIO'         ;77     TSTIO\r
+;-------------------------------------------------------------------------------\r
+\r
+opc    macro   x\r
+\r
+i_&x   equ     opc_index\r
+       dc      '&x'\r
+opc_index      defl    opc_index+1\r
+       endm\r
 \r
+t_MNEMONICS:\r
+opc_index      defl    0\r
+; 1-byte other\r
+       opc ?           ; 0\r
+       opc NOP         ; 1\r
+       opc LD          ; 2\r
+       opc INC         ; 3\r
+       opc DEC         ; 4\r
+       opc DJNZ        ; 5\r
+       opc JR          ; 6\r
+       opc HALT        ; 7\r
+\r
+       opc RET         ; 8\r
+       opc POP         ; 9\r
+       opc JP          ;10\r
+       opc CALL        ;11\r
+       opc PUSH        ;12\r
+       opc RST         ;13\r
+       opc OUT         ;14\r
+       opc EXX         ;15\r
+       opc IN          ;16\r
+       opc EX          ;17\r
+       opc DI          ;18\r
+       opc EI          ;19\r
+; CB bit\r
+       opc BIT         ;20\r
+       opc RES         ;21\r
+       opc SET         ;22\r
+; ED\r
+       opc NEG         ;23\r
+       opc RETN        ;24\r
+       opc RETI        ;25\r
+       opc IM          ;26\r
+       opc RRD         ;27\r
+       opc RLD         ;28\r
+; Z180\r
+       opc IN0         ;29\r
+       opc OUT0        ;30\r
+       opc TST         ;31\r
+       opc MLT         ;32\r
+       opc TSTIO       ;33\r
+       opc SLP         ;34\r
+       opc OTIM        ;35\r
+       opc OTDM        ;36\r
+       opc OTIMR       ;37\r
+       opc OTDMR       ;38\r
+\r
+;opc_index_gap equ     64-opc_index\r
+;opc_index     defl    64\r
+i_opc_alu      equ     opc_index\r
+; 1-byte "alu"\r
+       opc ADD         ;72\r
+       opc ADC         ;73\r
+       opc SUB         ;74\r
+       opc SBC         ;75\r
+       opc AND         ;76\r
+       opc XOR         ;77\r
+       opc OR          ;78\r
+       opc CP          ;79\r
+; 1-byte no arguments\r
+       opc RLCA        ;64\r
+       opc RRCA        ;65\r
+       opc RLA         ;66\r
+       opc RRA         ;67\r
+       opc DAA         ;68\r
+       opc CPL         ;69\r
+       opc SCF         ;70\r
+       opc CCF         ;71\r
+; CB rot\r
+       opc RLC         ;80\r
+       opc RRC         ;81\r
+       opc RL          ;82\r
+       opc RR          ;83\r
+       opc SLA         ;84\r
+       opc SRA         ;85\r
+       opc SLL         ;86\r
+       opc SRL         ;87\r
+\r
+i_opc_bli      equ     opc_index\r
+; ED Block instr (bli)\r
+       opc LDI         ;88\r
+       opc CPI         ;89\r
+       opc INI         ;90\r
+       opc OUTI        ;91\r
+       opc LDD         ;92\r
+       opc CPD         ;93\r
+       opc IND         ;94\r
+       opc OUTD        ;95\r
+       opc LDIR        ;96\r
+       opc CPIR        ;97\r
+       opc INIR        ;98\r
+       opc OTIR        ;99\r
+       opc LDDR        ;100\r
+       opc CPDR        ;101\r
+       opc INDR        ;102\r
+       opc OTDR        ;103\r
 \r
 ;-------------------------------------------------------------------------------\r
 ;\r