;DASM.ZLG (ver. >= 3.0) ;This routine is the ZILOG mnemonic disassembler module for ZZSOURCE.ASM. ;It must replace the DASM.TDL module in ZESOURCE (ver. >= 3.0) ; DASM: CALL HSYM ;WRITE A SYMBOL IF IT EXISTS ;.. AND PUT PC ON THE CRT LHLD RPLPTR ;SEE IF THIS LINE IS REPLACED MOV A,H ORA L JZ DASM1 MOV B,M INX H ;SKIP THE '*' DCR B CALL NWLN0 ;PRINT THE REPLACING LINE AS A COMMENT MVI A,0FFH STA REPLSW ;INDICATE NO MORE PRINTING DASM1: LHLD PC XCHG LHLD OFFSET DAD D ;HL IS NOW THE BIASED PC SHLD BIASED XCHG ;DE IS NOW THE BIASED PC INX H SHLD PC ;THE NEW PC (NEXT BYTE) XCHG ;DE IS THE BYTE AFTER THE INSTRUCTION MOV B,M LXI H,OPC-4 CALL GTCD CALL TYPEOC CPI 0AH ;TYPES 0 THRU 9 ARE 1 BYTE JC OLDPC ; .. SO DON'T CHANGE THE PC LHLD PC INX H CPI 10H ;TYPES 0A THRU 0FH ARE 2-BYTERS JC NEWPC CPI 16H ;TYPES 10H THRU 15H ARE 3 BYTES JNC NEWPC INX H NEWPC: SHLD PC OLDPC: PUSH D ;SAVE THE 'E' REGISTER (MAY BE 'X' OR 'Y') MOV E,A MVI D,0 LXI H,JMPTBL DAD D ;ADD 2*OPCODE TYPE TO JMPTBL TO GET DAD D ;.. ROUTINE ADDRESS MOV E,M INX H MOV D,M XCHG ;HL NOW CONTAINS THE ROUTINE ADDRESS POP D PUSH H LHLD BIASED RET ;'RETURN' TO THE ROUTINE ; GTCD: LXI D,4 NXTCD: DAD D NXTCD1: MOV A,M ORA A ;SEE IF WE'RE AT THE NEXT MASK YET INX H JP NXTCD1 ;JUMP IF NOT ANA B ;MASK OUT VARIABLES IN THE INSTRUCTION CMP M ;CHECK THE GENERIC INSTRUCTION TYPE JNZ NXTCD INX H MOV A,M ;AFTER A MATCH, GET THE OPCODE TYPE STA OPCTP RET ; TOC2: CPI 20H ;CONVERT SPACES IN THE TABLE TO TABS JNZ TOC1 MVI A,9 TOC1: CALL TYPE TYPEOC: INX H ;TYPE THE OPCODE THAT HL IS POINTING TO MOV A,M ORA A JZ TYPEOC JP TOC2 LHLD PC LDA OPCTP RET ; JMPTBL: DW T0 ;SIMPLE 1 BYTE INSTRUCTIONS DW T1 ;8 BIT, REGISTER ARITHMETIC & LOGICAL DW T2 ;DEC & INC DW T3 ;DOUBLE REGISTER SINGLE BYTE ARITHMETIC DW T4 ;8 BIT LOAD FROM MEMORY DW T5 ;8 BIT LOAD TO MEMORY DW T6 ;POP's AND PUSH's DW T7 ;CONDITIONAL RETURNS DW T8 ;THE RST INSTRUCTIONS DW T9 ;REGISTER TO REGISTER LOADS ;2 BYTE INSTRUCTIONS DW TA ;8 BIT LOAD IMMEDIATES DW TB ;8 BIT IMMEDIATE ARITH. & LOGICAL DW TC ;IN A,(n) DW TD ;OUT (n),A DW TE ;CONDITIONAL, RELATIVE JUMPS DW TF ;OTHER RELATIVE JUMPS ;3 BYTE INSTRUCTIONS DW T10 ;16 BIT LOADS DW T11 ;JUMPS & CALLS DW T12 ;DIRECT LOADS DW T13 ;DIRECT STORES DW T14 ;LD (nn),A DW T15 ;CONDITIONAL JUMPS & CALLS ;MULTI-BYTE OPCODES DW T16 ;THE 'CB' SERIES {1, 1A, 2A} DW T17 ;THE 'DD' SERIES {1B thru 25 & 2A} DW T18 ;THE 'FD' SERIES {1B thru 25 & 2A} DW T19 ;THE 'ED' SERIES {0, 2, 3, 26 thru 2A} ;1 BYTE DW T1A ;THE BIT, RES & SET FOR 'CB' DW T1B ;INDEX REGISTER LOADS DW T1C ;JUMP INDIRECT INDEX REGISTER DW T1D ;INDEX REGISTER ADD ;2 BYTE DW T1E ;INDEX REGISTER ARITH. AND LOGICAL DW T1F ;INDEXED LOAD TO REGISTER DW T20 ;INDEXED REGISTER STORE ;3 BYTES AFTER 'DD' OR 'FE' DW T21 ;LD xx,nn DW T22 ;LD (nn),n DW T23 ;LD xx,(nn) DW T24 ;LD (xx+d),n DW T25 ;THE 'CB' EXTENSIONS TO 'DD' OR 'FD' ;1 BYTE AFTER 'ED' DW T26 ;IN r,(C) DW T27 ;BLOCK MOVES ;3 BYTES AFTER 'ED' DW T28 ;LD (nn),dd DW T29 ;LD dd,(nn) ;WHATEVER IS LEFT DW T2A ;INDEFINED OPCODES ; ;ONE BYTE INSTRUCTIONS, SIMPLE ; T0: JMP DCRLF ; ;ARITHMETIC & LOGICAL, 8 BIT, REGISTER ; T1: CALL PSREG ;PRINT THE SOURCE REGISTER JMP DCRLF ; ;DEC AND INC INSTRUCTIONS ; T2: CALL PDREG ;PRINT THE DESTINATION REGISTER JMP DCRLF ; ;DOUBLE REGISTER SINGLE BYTE ; T3: CALL PXSREG ;PRINT HL, DE, BC, OR SP JMP DCRLF T4: CALL LPAR ; LD A,(BC or DE) CALL PXSREG CALL RPAR JMP DCRLF T5: CALL LPAR ; LD (BC or DE),A CALL PXSREG CALL RPAR CALL PCMAA JMP DCRLF ; ;POP AND PUSH ; T6: CALL PXQREG ;PRINT HL, DE, BC, OR AF JMP DCRLF ; ;CONDITIONAL RETURNS ; T7: CALL PRCND JMP DCRLF ; ;THE RST INSTRUCTIONS ; T8: MOV A,M ANI 38H CALL PRST JMP DCRLF ; ;REGISTER TO REGISTER LOADS ; T9: CALL PDREG CALL COMMA LHLD BIASED CALL PSREG JMP DCRLF ; ;TWO BYTE INSTRUCTIONS ; 8 BIT IMMEDIATE LOADS ; TA: CALL PDREG CALL COMMA LHLD BIASED ;ARITHMETIC & LOGICAL IMMEDIATES TB: INX H DTABYT: MOV A,M CPI ' ' JC NOTASC CPI 5BH JNC NOTASC CALL PASCII MVI A,'''' CALL TYPE LDA XCSW ;WANT SYMBOL COMMENTS? ORA A JZ DCRLF CALL TAB CALL SEMI NOTASC: MOV A,M CPI 0AH JC NTSC0 CALL PASHEX MVI A,'H' CALL TYPE JMP DCRLF NTSC0: ADI '0' CALL TYPE JMP DCRLF ; ;IN ; TC: CALL LPAR ;FOR 'IN A,(C)' INX H MOV A,M CALL PASHEX MVI A,'H' CALL TYPE CALL RPAR JMP DCRLF ;OUT TD: CALL LPAR INX H MOV A,M CALL PASHEX MVI A,'H' CALL TYPE CALL RPAR CALL COMMA MVI A,'A' CALL TYPE JMP DCRLF ; ;CONDITIONAL RELATIVE JUMPS ; TE: CALL PRCND1 ;THE SPECIAL CC LIST LHLD BIASED CALL COMMA ;OTHER RELATIVE INSTRUCTIONS TF: INX H MOV A,M MOV E,A MVI D,0 LHLD PC ORA A JP PSTV DCR D PSTV: DAD D XCHG CALL PRNTDE CC PDERTN JMP DCRLF ; ;THREE BYTE INSTRUCTIONS ;16 BIT LOADS ; T10: CALL PXSREG CALL COMMA LHLD BIASED ;JUMPS AND CALLS T11 CALL PRNN CC PDERTN JMP DCRLF ; ;LOAD DIRECT ; T12: CALL DRADR CC PDERTN JMP DCRLF DRADR: CALL LPAR ;PRINT THE VALUE FOR DE IN PARENTHESIS CALL PRNN PUSH PSW CALL RPAR POP PSW RET ; ;STORE DIRECT ; T13: CALL DRADR PUSH PSW CALL COMMA MVI A,'H' CALL TYPE MVI A,'L' CALL TYPE POP PSW CC PDERTN JMP DCRLF ; ;STORE ACCUMULATOR DIRECT ; T14: CALL DRADR PUSH PSW CALL PCMAA POP PSW CC PDERTN JMP DCRLF ; ;CONDITIONAL JUMPS & CALLS ; T15: CALL PRCND CALL COMMA LHLD BIASED CALL PRNN CC PDERTN JMP DCRLF ; ;THE 'CB' SERIES LEAD IN ; T16: INX H MOV B,M ;THE SECOND BYTE OF THE INSTRUCTION SHLD BIASED LXI H,OPC2-4 CALL GTCD ;FIND THE TYPE OF THE 'CB' INSTRUCTION CALL TYPEOC JMP OLDPC ; ;THE 'DD' SERIES LEAD IN ; T17: MVI E,'X' ;FOR THE 'IX' INSTRUCTIONS T170: PUSH D INX H SHLD BIASED MOV B,M LXI H,OPC3-4 CALL GTCD CALL TYPEOC POP D CPI 1EH JC OLDPC CPI 2AH JZ OLDPC CPI 21H INX H JC NEWPC INX H JMP NEWPC ; ;THE 'FD' SERIES LEAD IN ; T18: MVI E,'Y' JMP T170 ; ;THE 'ED' SERIES LEAD IN ; T19: INX H SHLD BIASED MOV B,M LXI H,OPC4-4 CALL GTCD CALL TYPEOC CPI 28H JC OLDPC CPI 2AH JZ OLDPC INX H INX H JMP NEWPC ; ;BIT, RES AND SET ; T1A: CALL PBIT CALL COMMA CALL PSREG JMP DCRLF ; ;INDEX REGISTER MOVES ; T1B: CALL PRXX ;TO TYPE EITHER 'IX' OR 'IY' JMP DCRLF ; ;JUMP INDIRECT TO INDEX REGISTER ; T1C: CALL LPAR CALL PRXX CALL RPAR JMP DCRLF ; ;INDEX REGISTER ADDITION ; T1D: CALL PRXX CALL COMMA MOV A,E CPI 'X' MOV A,M LXI H,IXREGS JZ T1D0 LXI H,IYREGS T1D0: CALL PXREG JMP DCRLF ; ;INDEX REGISTER ARITHMETIC AND LOGICAL ; T1E: INX H CALL PDISP ;PRINT '(IX(Y)+d) JMP DCRLF ; ;INDEXED LOAD TO REGISTER ; T1F: CALL PDREG CALL COMMA LHLD BIASED INX H CALL PDISP JMP DCRLF ; ;INDEXED REGISTER STORE ; T20: INX H CALL PDISP CALL COMMA LHLD BIASED CALL PSREG JMP DCRLF ; ; LD xx,nn ; T21: CALL PRXX CALL COMMA CALL PRNN CC PDERTN JMP DCRLF ; ; LD (nn),xx ; T22: CALL LPAR PUSH D CALL PRNN XCHG ;HL NOW CONTAINS THE NUMBER POP D ;RECOVER THE 'E' REG. ('X' OR 'Y') PUSH PSW ;SAVE THE CARRY FOR A LATER 'PEDRTN' CALL RPAR CALL COMMA CALL PRXX POP PSW ;THE CARRY FLAG IS RESTORED XCHG ;DE AGAIN CONTAINS THE VALUE FOR nn CC PDERTN JMP DCRLF ; ; LD xx,(nn) ; T23: CALL PRXX CALL COMMA CALL LPAR CALL PRNN PUSH PSW ;SAVE Cy VALUE CALL RPAR POP PSW CC PDERTN JMP DCRLF ; ; LD (xx+d),n ; T24: INX H CALL PDISP CALL COMMA JMP TB ; ;THE 'CB' EXTENSIONS TO 'DD' OR 'FD' ; T25: INX H INX H MOV B,M LXI H,OPC2-4 PUSH D ;SAVE 'X' OR 'Y' CALL GTCD CALL TYPEOC POP D MOV A,B ;GET THE O.C. ANI 7 CPI 6 JNZ ILLEG LDA OPCTP LHLD BIASED CPI 1AH JC T1E JZ DD12 ILLEG: LHLD PC DCX H DCX H SHLD PC JMP T2A DD12: INX H INX H CALL PBIT CALL COMMA DCX H DCX H JMP T1E ; ; IN r,(C) ; T26: CALL PDREG CALL COMMA CALL LPAR MVI A,'C' CALL TYPE CALL RPAR JMP DCRLF ; ;THE BLOCK MOVES AND I/O ; T27: MOV A,M ANI 8 MVI A,'I' ;AN INCREMENTING TYPE OF INSTRUCTION? JZ T270 MVI A,'D' ;NO, IT WAS DECREMENTING T270: CALL TYPE MOV A,M ANI 10H JZ DCRLF MVI A,'R' ;A REPEATING INSTRUCTION TYPE CALL TYPE JMP DCRLF ; ; LD (nn),dd ; T28: CALL LPAR CALL PRNN PUSH PSW ;SAVE Cy VALUE PUSH D ;SAVE THE 'NN' VALUE CALL RPAR CALL COMMA LHLD BIASED CALL PXSREG POP D POP PSW CC PDERTN JMP DCRLF ; ; LD dd,(nn) ; T29: CALL PXSREG CALL COMMA LHLD BIASED CALL LPAR CALL PRNN PUSH PSW CALL RPAR POP PSW CC PDERTN JMP DCRLF ; ;ALL UNDEFINED OPCODES COME HERE FOR A 'DB VALUE' TREATMENT ; T2A: LHLD PC DCX H SHLD PC LHLD BIASED DCX H CALL PSTG DB 'DB',9,0 JMP DTABYT ; ; ; ;------------------------------------------------------------------------ ; COMMA: MVI A,',' JMP TYPE TAB: MVI A,9 JMP TYPE SEMI: MVI A,';' JMP TYPE LPAR: MVI A,'(' JMP TYPE RPAR: MVI A,')' JMP TYPE PCMAA: CALL COMMA MVI A,'A' JMP TYPE ;PRINT THE CONDITION CODE LETTERS FOR THIS INSTRUCTION. PRCND: MOV A,M ANI 38H ;FOR A FULL SET OF CONDITION CODES PRC: RRC RRC LXI H,CNDTAB CALL SKIP MOV A,M CALL TYPE INX H MOV A,M CPI '.' CNZ TYPE RET PRCND1: MOV A,M ANI 18H JMP PRC CNDTAB: DB 'NZZ.NCC.POPEP.M.' ; ;PRINT THE SOURCE REGISTER FOR A BYTE PSREG: MOV A,M PREG: LXI H,REGTAB ANI 7 CPI 6 ;MUST CATCH THE (HL) REFERENCES JZ PHLREG CALL SKIP MOV A,M JMP TYPE PHLREG: CALL LPAR MVI A,'H' CALL TYPE MVI A,'L' CALL TYPE JMP RPAR PDREG: MOV A,M ;PRINT THE DESTINATION REGISTER FOR A BYTE RAR RAR RAR JMP PREG ;ADVANCE H&L BY (A) SKIP: ADD L MOV L,A RNC INR H RET REGTAB: DB 'BCDEHLMA' ;'M' IS NEVER PRINTED - '(HL)' IS INSTEAD ; ;PRINT A DOUBLE REGISTER PAIR PXSREG: MOV A,M LXI H,DREGS JMP PXREG PXQREG: MOV A,M LXI H,DREGQ PXREG: RAR RAR RAR ANI 6 CALL SKIP MOV A,M CALL TYPE INX H MOV A,M JMP TYPE DREGS: DB 'BCDEHLSP' DREGQ: DB 'BCDEHLAF' IXREGS: DB 'BCDEIXSP' IYREGS: DB 'BCDEIYSP' ; PBIT: MOV A,M RAR RAR RAR ANI 7 ADI '0' JMP TYPE PRXX: MVI A,'I' CALL TYPE MOV A,E JMP TYPE ;PRINT A LEADING QUOTE AND THEN THE ASCII ;.. (PRINT '' FOR '). PASCII: PUSH PSW MVI A,'''' CALL TYPE POP PSW CPI '''' JNZ TYPE PUSH PSW CALL TYPE POP PSW JMP TYPE ;PRINT THE VALUE IN A AS HEX ; WITH A LEADING ZERO IF NECESSARY PASHEX: CPI 0A0H JC PHEX PUSH PSW MVI A,'0' CALL TYPE POP PSW JMP PHEX ;PRINT THE STRING AT (HL) FOR (B) CHARACTERS. PRNT: MOV A,M CALL TYPE INX H DCR B JNZ PRNT RET ; ;PRINT A DISPLACEMENT IN THE FORM '(IX+d)' PDISP: CALL LPAR CALL PRXX MVI A,'+' CALL TYPE MOV A,M CALL PASHEX MVI A,'H' CALL TYPE JMP RPAR ; ;PRINT THE NEXT 2 BYTES AS A SYMBOL (AND RETURN Cy=1) IF POSSIBLE ; PRNN: INX H MOV E,M INX H MOV D,M PRNTDE: PUSH D CALL SYMSCH JC NOMTCH CALL PRNT ;GOT ONE, SO PRINT IT POP D STC ;INDICATE THAT A SYMBOL WAS PRINTED RET NOMTCH: LDA BUILD ;DO WE BUILD A SYMBOL? ORA A POP D JZ NOBLD ;JUST PRINT THE HEX VALUE PUSH D CALL BLDSYM POP D JMP NOBLD PDERTN: LDA XCSW ORA A RZ ;DON'T PRINT THE SYMBOL AS A COMMENT CALL TAB ;WE'LL PRINT A VALUE AS A COMMENT CALL SEMI NOBLD: MOV A,D ORA E MVI A,'0' JZ NOBLD1 MOV A,D ORA A JZ NOBLD2 CALL PASHEX ;PRINT THE HIGH ORDER BYTE MOV A,E CALL PHEX NOBLD0: MVI A,'H' NOBLD1: CALL TYPE ORA A ;CLEAR THE CARRY RET NOBLD2: MOV A,E PRST: CPI 0AH JC NOBLD3 CALL PASHEX JMP NOBLD0 NOBLD3: ADI '0' JMP NOBLD1 ; ; ;<><><><><><><><><><><><><><><> OPCODE TABLES <><><><><><><><><><><><><><><> ; OPC: DB 0FFH,0EBH,0,'EX DE,HL' DB 0FFH,008H,0,'EX AF,AF''' DB 0FFH,0D9H,0,'EXX' DB 0FFH,0E3H,0,'EX (SP),HL' DB 0FFH,027H,0,'DAA' DB 0FFH,0F3H,0,'DI' DB 0FFH,0FBH,0,'EI' DB 0FFH,076H,0,'HALT' DB 0FFH,02FH,0,'CPL' DB 0FFH,03FH,0,'CCF' DB 0FFH,000H,0,'NOP' DB 0FFH,037H,0,'SCF' DB 0FFH,0E9H,0,'JP (HL)' DB 0FFH,007H,0,'RLCA' DB 0FFH,017H,0,'RLA' DB 0FFH,00FH,0,'RRCA' DB 0FFH,01FH,0,'RRA' DB 0FFH,0C9H,0,'RET' DB 0FFH,0F9H,0,'LD SP,HL' DB 0F8H,088H,1,'ADC A,' DB 0F8H,080H,1,'ADD A,' DB 0F8H,0A0H,1,'AND ' DB 0F8H,0B8H,1,'CP ' DB 0F8H,0B0H,1,'OR ' DB 0F8H,098H,1,'SBC A,' DB 0F8H,090H,1,'SUB ' DB 0F8H,0A8H,1,'XOR ' DB 0C7H,005H,2,'DEC ' DB 0C7H,004H,2,'INC ' DB 0CFH,009H,3,'ADD HL,' DB 0CFH,00BH,3,'DEC ' DB 0CFH,003H,3,'INC ' DB 0EFH,00AH,4,'LD A,' DB 0EFH,002H,5,'LD ' DB 0CFH,0C1H,6,'POP ' DB 0CFH,0C5H,6,'PUSH ' DB 0C7H,0C0H,7,'RET ' DB 0C7H,0C7H,8,'RST ' DB 0C0H,040H,9,'LD ' DB 0C7H,006H,0AH,'LD ' DB 0FFH,0C6H,0BH,'ADD A,' DB 0FFH,0CEH,0BH,'ADC A,' DB 0FFH,0E6H,0BH,'AND ' DB 0FFH,0FEH,0BH,'CP ' DB 0FFH,0F6H,0BH,'OR ' DB 0FFH,0D6H,0BH,'SUB ' DB 0FFH,0DEH,0BH,'SBC A,' DB 0FFH,0EEH,0BH,'XOR ' DB 0FFH,0DBH,0CH,'IN A,' DB 0FFH,0D3H,0DH,'OUT ' DB 0E7H,020H,0EH,'JR ' DB 0FFH,010H,0FH,'DJNZ ' DB 0FFH,018H,0FH,'JR ' DB 0CFH,001H,10H,'LD ' DB 0FFH,0C3H,11H,'JP ' DB 0FFH,0CDH,11H,'CALL ' DB 0FFH,03AH,12H,'LD A,' DB 0FFH,02AH,12H,'LD HL,' DB 0FFH,022H,13H,'LD ' DB 0FFH,032H,14H,'LD ' DB 0C7H,0C4H,15H,'CALL ' DB 0C7H,0C2H,15H,'JP ' DB 0FFH,0CBH,16H,0,0 DB 0FFH,0DDH,17H,0,0 DB 0FFH,0FDH,18H,0,0 DB 0FFH,0EDH,19H OPC2: DB 0F8H,000H,01H,'RLC ' DB 0F8H,008H,01H,'RRC ' DB 0F8H,010H,01H,'RL ' DB 0F8H,018H,01H,'RR ' DB 0F8H,020H,01H,'SLA ' DB 0F8H,028H,01H,'SRA ' DB 0F8H,038H,01H,'SRL ' DB 0C0H,040H,1AH,'BIT ' DB 0C0H,080H,1AH,'RES ' DB 0C0H,0C0H,1AH,'SET ' DB 080H,000H,2AH OPC3: DB 0FFH,0E3H,1BH,'EX (SP),' DB 0FFH,0E9H,1CH,'JP ' DB 0FFH,0F9H,1BH,'LD SP,' DB 0FFH,0E1H,1BH,'POP ' DB 0FFH,0E5H,1BH,'PUSH ' DB 0CFH,009H,1DH,'ADD ' DB 0FFH,023H,1BH,'INC ' DB 0FFH,02BH,1BH,'DEC ' DB 0FFH,034H,1EH,'INC ' DB 0FFH,035H,1EH,'DEC ' DB 0FFH,086H,1EH,'ADD A,' DB 0FFH,08EH,1EH,'ADC A,' DB 0FFH,096H,1EH,'SUB ' DB 0FFH,09EH,1EH,'SBC A,' DB 0FFH,0A6H,1EH,'AND ' DB 0FFH,0AEH,1EH,'XOR ' DB 0FFH,0B6H,1EH,'OR ' DB 0FFH,0BEH,1EH,'CP ' DB 0C7H,046H,1FH,'LD ' DB 0F8H,070H,20H,'LD ' DB 0FFH,021H,21H,'LD ' DB 0FFH,022H,22H,'LD ' DB 0FFH,02AH,23H,'LD ' DB 0FFH,036H,24H,'LD ' DB 0FFH,0CBH,25H,0,0 DB 080H,000H,2AH,0,0 DB 080H,080H,2AH OPC4: DB 0FEH,070H,2AH,0,0 ;PREVENTS 'IN (HL),(C)' DB 0FFH,044H,00H,'NEG' DB 0FFH,045H,00H,'RETN' DB 0FFH,046H,00H,'IM 0' DB 0FFH,056H,00H,'IM 1' DB 0FFH,05EH,00H,'IM 2' DB 0FFH,047H,00H,'LD I,A' DB 0FFH,04DH,00H,'RETI' DB 0FFH,04FH,00H,'LD R,A' DB 0FFH,057H,00H,'LD A,I' DB 0FFH,05FH,00H,'LD A,R' DB 0FFH,067H,00H,'RRD' DB 0FFH,06FH,00H,'RLD' DB 0CFH,042H,03H,'SBC HL,' DB 0CFH,04AH,03H,'ADC HL,' DB 0C7H,040H,26H,'IN ' DB 0C7H,041H,02H,'OUT (C),' DB 0E7H,0A0H,27H,'LD' DB 0E7H,0A1H,27H,'CP' DB 0E7H,0A2H,27H,'IN' DB 0F7H,0A3H,27H,'OUT' DB 0F7H,0B3H,27H,'OT' DB 0CFH,043H,28H,'LD ' DB 0CFH,04BH,29H,'LD ' DB 080H,000H,2AH,0,0 DB 080H,080H,2AH ;--------------------------- END OF OPCODE TABLE ---------------------  DB 080H,080H,2AH ;--------------------------- END OF OPCODE TABLE ---------------------