home *** CD-ROM | disk | FTP | other *** search
- ;
- ;DASMTDL.MAC from DASM.TDL (ver. 3.0)
- ;The following routine is the disassembler module for TDL Mnemonics in DASM.
- ;It is included during the assembly of DASM by M80.
- ;
- IF1
- .PRINTX /DASM with TDL Mnemonics/
- ENDIF
- ;
- ; This is the Header to be printed for this module by DASM
- ;
- HEADER:
- DEFB 'DASM for TDL Mnemonics',0dh,0ah
- DEFB ' Derived from ZZSOURCE/RESOURCE',0dh,0ah
- DEFB 0dh,0ah,'$',0
- ;
- ; This is the main Disassembler module; the instruction to be disassembled
- ; is pted to by PC
- ;
- DASM: CALL HSYM ;write a symbol if it exists, then put PC
- LD HL,(RPLPTR) ;IS THIS ENTIRE LINE TO BE REPLACED?
- LD A,H
- OR L
- JR Z,DASM1
- LD B,(HL)
- INC HL
- DEC B
- CALL NWLN0
- DASM1: LD HL,(PC)
- EX DE,HL ;DE hold the PC
- LD HL,(OFFSET)
- ADD HL,DE ;HL is now the biased PC
- LD (BIASED),HL
- EX DE,HL
- INC HL
- LD (PC),HL ;the new PC (next byte)
- EX DE,HL ;DE is byte after instruction address
- LD B,(HL) ;get the current byte
- LD HL,OPC
- CALL GTCD
- CALL TYPEOC
- ;
- ;........TYPE 1, 2, AND 3 ARE 1-BYTE INSTRUCTIONS.
- ;
- CP 4
- JR C,OLDPC
- ;
- ;........TYPE 9, A, B AND C ARE 1-BYTE INSTRUCTIONS.
- ;
- CP 9
- JR C,XTND ;not a 1-byte
- CP 0DH
- JR C,OLDPC ;is a 1-byte
- XTND: INC HL
- CP 6
- JR C,NEWPC ;types 4 & 5 are 2 byte
- CP 9
- JR NC,NEWPC ;types d, e, f, etc. -2 bytes or more
- INC HL ;3 bytes for 6, 7, and 8.
- NEWPC: LD (PC),HL
- OLDPC: PUSH DE
- LD E,A
- LD D,0
- LD HL,JMPTBL
- ADD HL,DE ;add 3*opcode type to JMPTBL to
- ADD HL,DE ;.. get routine jump vector address
- ADD HL,DE
- POP DE
- PUSH HL ;push address
- LD HL,(BIASED)
- RET ;'return' to routine
- ;
- ; GO TO JUMP TABLE + 3*(OPCODE TYPE).
- ;
- JMPTBL: JP TZERO
- JP TONE
- JP TTWO
- JP TTHREE
- JP TFOUR
- JP TFIVE
- JP TSIX
- JP TSEVEN
- JP TEIGHT
- JP TNINE
- JP TTEN
- JP TELEVEN
- ; New decode routines
- JP T12 ;bit, res, set
- JP T13 ;djnz, jmpr
- JP T14 ;jrxx
- JP T15 ;the 'cb' series
- JP T16 ;'db' generation
- JP T17 ;the 'dd' series
- JP T18 ; " 'fd' "
- JP T19 ; " 'ed' "
- JP T20 ; 2 byte dd/fd
- JP T21 ; " " "
- JP T22 ; " " "
- JP T23 ; 3 byte dd/fd
- JP T24 ; " " "
- JP T25 ; " " "
- JP T26 ; LXIii nn
- JP T27 ; LIiiD, SIxxD
- JP T28 ; mvi d(ii),n
- JP T29 ; the 4 byte 'cb' series
- JP T30 ; inc/dec/repeat group
- JP T31 ; 4 byte direct store
- ;
- GTCD: LD DE,6
- ;
- ; FIND THE OPCODE FOR THIS BYTE.
- ;
- NXTCD: ADD HL,DE
- LD A,(HL) ;get mask
- AND B
- INC HL ;point to compare byte.
- CP (HL)
- JR NZ,NXTCD
- INC HL
- LD A,(HL) ;get type
- LD (OPCTP),A
- RET
- ;
- ; TYPE THE OPCODE MNEMONIC.
- ;
- TYPEOC: LD B,4 ;maximum of 4 characters to type
- TYPEC1: INC HL
- LD A,(HL)
- CP '.' ;do not type '.'
- CALL NZ,COUT
- DJNZ TYPEC1
- LD HL,(PC)
- LD A,(OPCTP)
- RET
- ;
- ; SIMPLE ONE BYTE INSTRUCTIONS.
- ;
- TZERO: JP DCRLF
- ;
- ; ARITHMETIC AND LOGICAL INSTRUCTIONS.
- ;
- TONE: CALL TAB
- REG0: CALL PREG0
- JP DCRLF
- ;
- ; DCR AND INR INSTRUCTIONS.
- ;
- TTWO: CALL TAB
- CALL PREG1
- JP DCRLF
- ;
- ; DOUBLE REGISTER NON-IMMEDIATES.
- ;
- TTHREE: CALL TAB
- LD E,'H'
- CALL PXREG
- JP DCRLF
- ;
- ; THE 'MVI' INSTRUCTIONS.
- ;
- TFOUR: CALL TAB
- CALL PREG1
- T4PT: CALL COMMA
- JR BYTWO
- ;
- ; REGISTER IMMEDIATES (EXCEPT MVI) AND IN & OUT.
- ;
- TFIVE: CALL TAB
- BYTWO: LD HL,(BIASED)
- INC HL
- LD (BIASED),HL
- DTABYT: LD A,(HL)
- CP ' '
- JR C,NOTASC
- CP 5BH
- JR NC,NOTASC
- ;
- ;...ONLY TYPE 4 & 5 WITH ASCII DATA BYTES GET HERE.
- ;
- LD A,(HL)
- CALL PASCII
- LD A,''''
- CALL COUT
- LD A,(XCSW) ;IS SYMBOL COMMENTING ON?
- OR A
- JP Z,DCRLF
- CALL TAB
- CALL SEMI
- ;
- ;..THE DATA BYTE SHOULD NOT BE PRINTED AS ASCII.
- ;
- NOTASC: LD A,(HL)
- CP 0AH
- JR C,NTSC0
- CALL PASHEX
- LD A,'H'
- CALL COUT
- JP DCRLF
- NTSC0: ADD A,'0'
- CALL COUT
- JP DCRLF
- ;
- ; THE LXI INSTRUCTION.
- ;
- TSIX: CALL TAB
- LD E,'H'
- CALL PXREG
- T6PT: CALL COMMA
- ;
- ; READ THE 2 BYTES AFTER BIASED INTO DE.
- ;
- TWOBYTE:LD HL,(BIASED)
- INC HL
- LD E,(HL)
- INC HL
- LD D,(HL)
- CALL PRNTDE
- JP DCRLF
- ;
- ; UNCONDITIONAL JUMPS AND 3-BYTERS WITH ADDRESSES.
- ;
- TSEVEN: CALL TAB
- JR TWOBYTE
- ;
- ; CONDITIONAL CALLS AND JUMPS.
- ;
- TEIGHT: LD E,0EH
- CALL PRNTCND
- LD HL,(BIASED)
- JR TSEVEN
- ;
- ; THE CONDITIONAL RETURNS...
- ;
- TNINE: LD E,0EH
- CALL PRNTCND
- JP DCRLF
- ;
- ; THE RST INSTRUCTION.....
- ;
- TTEN: CALL TAB
- LD A,(HL)
- RRA
- RRA
- RRA
- AND 7
- OR '0'
- CALL COUT
- JP DCRLF
- ;
- TELEVEN:CALL TAB
- CALL PREG1
- T11PT: CALL COMMA
- LD HL,(BIASED)
- LD A,(HL)
- JP REG0
- ; ADDED Z-80 ROUTINES
- T12: CALL TAB ;bit, res, set
- CALL PBIT
- JR T11PT
- PBIT: LD A,(HL)
- RRA
- RRA
- RRA
- AND 7
- ADD A,'0'
- JP COUT
- T13: CALL TAB ;djnz & jmpr
- INC HL
- LD A,(HL)
- LD E,A
- LD D,0
- LD HL,(PC)
- OR A
- JP P,PSTV
- DEC D
- PSTV: ADD HL,DE
- EX DE,HL
- CALL PRNTDE
- JP DCRLF
- T14: LD E,6 ;conditional relative jumps
- CALL PRNTCND
- LD HL,(BIASED)
- JR T13
- T15: INC HL ;the 'cb' series
- LD B,(HL)
- LD (BIASED),HL ;new current byte
- LD HL,OPC2-6
- CALL GTCD ;octyp is either 1, 10h or 0ch
- CALL TYPEOC
- JP OLDPC
- T16: LD HL,(PC) ;a 'db', so back up the pc
- DEC HL
- LD (PC),HL
- LD HL,(BIASED)
- DEC HL ;back up here too
- JP PRDB
- T17: LD E,'X' ;the 'dd' series
- T170: PUSH DE
- INC HL
- LD (BIASED),HL ;second byte of instruction
- LD B,(HL)
- LD HL,OPC3-6
- CALL GTCD
- CALL TYPEOC
- POP DE
- CP 23
- JP C,OLDPC
- INC HL
- CP 26
- JP C,NEWPC
- INC HL
- JP NEWPC
- T18: LD E,'Y' ;the 'fd' series
- JR T170
- T19: INC HL ;the 'ed' series
- LD (BIASED),HL
- LD B,(HL)
- LD HL,OPC4-6
- CALL GTCD
- CALL TYPEOC
- CP 1FH
- JP C,OLDPC
- INC HL
- INC HL
- JP NEWPC
- T21: CALL TAB ;pop x, push x
- T20: LD A,E ;xtix, etc.
- CALL COUT
- JP DCRLF
- T22: LD A,E
- CALL COUT
- CALL TAB
- CALL PXREG
- JP DCRLF
- T23: CALL TAB
- T231: CALL PDISP
- CALL PINDX
- JP DCRLF
- PDISP: INC HL ;print displacement
- LD A,(HL)
- CALL PASHEX
- LD A,'H'
- JP COUT
- PINDX: LD A,'(' ;print '(x)'
- CALL COUT
- LD A,E
- CALL COUT
- LD A,')' ;
- JP COUT
- T24: CALL TAB ;mov r,d(ii)
- CALL PREG1
- CALL COMMA
- LD HL,(BIASED)
- JR T231
- T25: CALL TAB ;mov d(ii),r
- CALL PDISP
- CALL PINDX
- JP T11PT
- T26: CALL TAB
- LD A,E
- CALL COUT
- JP T6PT
- T27: LD A,E
- CALL COUT
- LD A,'D'
- CALL COUT
- JP TSEVEN
- T28: CALL TAB ;mvi d(ii),n
- CALL PDISP
- CALL PINDX
- LD (BIASED),HL
- JP T4PT
- T29: INC HL
- INC HL
- LD B,(HL)
- LD HL,OPC2-6
- PUSH DE
- CALL GTCD
- POP DE
- LD A,B ;get o.c.
- AND 7
- CP 6
- JR NZ,ILLEG
- CALL TYPEOC
- LD HL,(BIASED)
- CP 0CH
- JP C,T23
- JR Z,DD12
- ILLEG: LD HL,(PC)
- DEC HL
- DEC HL
- LD (PC),HL
- JP T16
- DD12: CALL TAB
- INC HL
- INC HL
- CALL PBIT
- CALL COMMA
- DEC HL
- DEC HL
- JP T231
- T30: LD A,(HL)
- AND 8
- LD A,'I'
- JR Z,T301
- LD A,'D'
- T301: CALL COUT
- LD A,(HL)
- AND 10H
- JP Z,DCRLF
- LD A,'R'
- CALL COUT
- JP DCRLF
- T31: LD E,'H'
- CALL PXREG
- LD A,D
- RRCA
- LD D,A
- LD A,'C'
- DEC D
- JP M,T311
- LD A,'E'
- DEC D
- JP M,T311
- LD A,'L'
- DEC D
- T311: CALL NZ,COUT
- LD A,'D'
- CALL COUT
- JP TSEVEN
- ;
- ; THE END OF Z80 ADDITIONS.
- ;
- ; ROUTINES TO PRINT VARIOUS CHARACTERS
- ;
- COMMA: LD A,','
- JP COUT
- TAB: LD A,9
- JP COUT
- SEMI: LD A,';'
- JP COUT
- PRDB: CALL PSTG
- DEFB 'DB',9,0
- JP DTABYT
- ;
- ;...PRINT THE CONDITION CODE LETTERS FOR THIS INSTRUCTION.
- ;
- PRNTCND: LD A,(HL)
- RRA
- RRA
- AND E
- LD HL,CNDTAB
- CALL SKIP
- LD A,(HL)
- CALL COUT
- INC HL
- LD A,(HL)
- CP '.'
- CALL NZ,COUT
- RET
- ;
- ;...PRINT A LEADING QUOTE AND THEN THE ASCII
- ; (PRINT '' FOR ').
- ;
- PASCII: PUSH AF
- LD A,''''
- CALL COUT
- POP AF
- CP ''''
- JP NZ,COUT
- PUSH AF
- CALL COUT
- POP AF
- JP COUT
- ;
- ;...PRINT THE FALUE FOR A DOUBLE REGISTER.
- ;
- PXREG: LD A,(HL)
- RRA
- RRA
- RRA
- AND 6
- LD D,A
- CP 4
- JR NZ,TAGN
- LD A,E
- JP COUT
- TAGN: CP 6
- JR NZ,PREG
- LD A,(HL)
- AND 0CFH
- ;
- ;......IS IT A POP?
- ;
- CP 0C1H
- JR Z,PPSW
- ;
- ;......IS IT A PUSH?
- ;
- CP 0C5H
- JR Z,PPSW
- LD A,'S'
- CALL COUT
- LD A,'P'
- JP COUT
- PPSW: CALL PSTG
- DEFB 'PSW',0
- RET
- ;
- ;...READ A BYTE AND PRINT ITS DEST. REGISTER.
- ;
- PREG1: LD A,(HL)
- RRA
- RRA
- RRA
- JR PREG
- ;
- ;...READ A BYTE AND PRINT ITS SOURCE REGISTER.
- ;
- PREG0: LD A,(HL)
- PREG: LD HL,REGTAB
- AND 7
- CALL SKIP
- LD A,(HL)
- JP COUT
- ;
- ;...ADVANCE H & L BY (A).
- ;
- SKIP: ADD A,L
- LD L,A
- RET NC
- INC H
- RET
- ;
- ;...PRINT THE VALUE IN A AS HEX,
- ; WITH A LEADING ZERO IF NECESSARY.
- ;
- PASHEX: CP 0A0H
- JP C,PHEX
- PUSH AF
- LD A,'0'
- CALL COUT
- POP AF
- JP PHEX
- ;
- ;...PRINT A SYMBOLIC VALUE FOR (DE)
- ;
- PRNTDE: PUSH DE
- CALL SYMSCH
- POP DE
- JR NC,SYMTCH
- LD A,(BUILD)
- OR A
- JR Z,NOBLD
- PUSH DE
- CALL BLDSYM
- POP DE
- JR NOBLD
- SYMTCH: CALL PRNT
- PDERTN: LD A,(XCSW) ;SYMBOL COMMENTING?
- OR A
- RET Z
- CALL TAB
- CALL SEMI
- NOBLD: LD A,D
- OR E
- LD A,'0'
- JR Z,NOBLD1
- LD A,D
- OR A
- JR Z,NOBLD2
- CALL PASHEX
- LD A,E
- CALL PHEX
- NOBLD0: LD A,'H'
- NOBLD1: CALL COUT
- RET
- NOBLD2: LD A,E
- CP 0AH
- JR C,NOBLD3
- CALL PASHEX
- JR NOBLD0
- NOBLD3: ADD A,'0'
- JR NOBLD1
- ;
- ;...PRINT THE STRING AT (HL) FOR (B) CHARACTERS.
- ;
- PRNT: LD A,(HL)
- CALL COUT
- INC HL
- DJNZ PRNT
- RET
- ;
- ; OPCODE TABLES
- ;
- CNDTAB: DEFB 'NZZ.NCC.POPEP.M.'
- REGTAB: DEFB 'BC'
- OPC: DEFB 'DEHLMA'
- DEFB 0FFH,0CEH,5,'ACI.'
- DEFB 0F8H,88H,1,'ADC.'
- DEFB 0F8H,80H,1,'ADD.'
- DEFB 0FFH,0C6H,5,'ADI.'
- DEFB 0F8H,0A0H,1,'ANA.'
- DEFB 0FFH,0E6H,5,'ANI.'
- DEFB 0C7H,0C4H,8,'C...'
- DEFB 0FFH,0CDH,7,'CALL'
- DEFB 0FFH,2FH,0,'CMA.'
- DEFB 0FFH,3FH,0,'CMC.'
- DEFB 0F8H,0B8H,1,'CMP.'
- DEFB 0FFH,0FEH,5,'CPI.'
- DEFB 0FFH,27H,0,'DAA.'
- DEFB 0CFH,9,3,'DAD.'
- DEFB 0C7H,5,2,'DCR.'
- DEFB 0CFH,0BH,3,'DCX.'
- DEFB 0FFH,0F3H,0,'DI..'
- DEFB 0FFH,0FBH,0,'EI..'
- DEFB 0FFH,76H,0,'HLT.'
- DEFB 0FFH,0DBH,5,'IN..'
- DEFB 0C7H,4,2,'INR.'
- DEFB 0CFH,3,3,'INX.'
- DEFB 0C7H,0C2H,8,'J...'
- DEFB 0FFH,0C3H,7,'JMP.'
- DEFB 0FFH,3AH,7,'LDA.'
- DEFB 0EFH,0AH,3,'LDAX'
- DEFB 0FFH,2AH,7,'LHLD'
- DEFB 0CFH,1,6,'LXI.'
- DEFB 0C0H,40H,0BH,'MOV.'
- DEFB 0C7H,6,4,'MVI.'
- DEFB 0FFH,0,0,'NOP.'
- DEFB 0F8H,0B0H,1,'ORA.'
- DEFB 0FFH,0F6H,5,'ORI.'
- DEFB 0FFH,0D3H,5,'OUT.'
- DEFB 0FFH,0E9H,0,'PCHL'
- DEFB 0CFH,0C1H,3,'POP.'
- DEFB 0CFH,0C5H,3,'PUSH'
- DEFB 0C7H,0C0H,9,'R...'
- DEFB 0FFH,17H,0,'RAL.'
- DEFB 0FFH,1FH,0,'RAR.'
- DEFB 0FFH,0C9H,0,'RET.'
- DEFB 0FFH,0FH,0,'RRC.'
- DEFB 0FFH,7,0,'RLC.'
- DEFB 0C7H,0C7H,0AH,'RST.'
- DEFB 0F8H,98H,1,'SBB.'
- DEFB 0FFH,0DEH,5,'SBI.'
- DEFB 0FFH,22H,7,'SHLD'
- DEFB 0FFH,0F9H,0,'SPHL'
- DEFB 0FFH,32H,7,'STA.'
- DEFB 0EFH,2,3,'STAX'
- DEFB 0FFH,37H,0,'STC.'
- DEFB 0F8H,90H,1,'SUB.'
- DEFB 0FFH,0D6H,5,'SUI.'
- DEFB 0FFH,0EBH,0,'XCHG'
- DEFB 0F8H,0A8H,1,'XRA.'
- DEFB 0FFH,0EEH,5,'XRI.'
- DEFB 0FFH,0E3H,0,'XTHL'
- ;
- DEFB 0FFH,008H,0,'EXAF'
- DEFB 0FFH,0D9H,0,'EXX.'
- DEFB 0FFH,010H,0DH,'DJNZ'
- DEFB 0FFH,018H,0DH,'JMPR'
- DEFB 0E7H,020H,0EH,'JR..'
- DEFB 0FFH,0CBH,0FH,'....';THE 'CB' SERIES
- DEFB 0FFH,0DDH,11H,'....'; " 'DD' "
- DEFB 0FFH,0FDH,12H,'....'; " 'FD' "
- DEFB 0FFH,0EDH,13H,'....'; " 'ED' "
- OPC2: DEFB 0F8H,0,1,'RLCR'
- DEFB 0F8H,8,1,'RRCR'
- DEFB 0F8H,10H,1,'RALR'
- DEFB 0F8H,18H,1,'RARR'
- DEFB 0F8H,20H,1,'SLAR'
- DEFB 0F8H,28H,1,'SRAR'
- DEFB 0F8H,38H,1,'SRLR'
- DEFB 0C0H,40H,0CH,'BIT.'
- DEFB 0C0H,80H,0CH,'RES.'
- DEFB 0C0H,0C0H,0CH,'SET.'
- DEFB 0,0,10H,'....'
- OPC3: DEFB 0FFH,0E3H,14H,'XIT.'
- DEFB 0FFH,0E9H,14H,'PCI.'
- DEFB 0FFH,0F9H,14H,'SPI.'
- DEFB 0FFH,0E1H,15H,'POP.'
- DEFB 0FFH,0E5H,15H,'PUSH'
- DEFB 0CFH,9,16H,'DAD.'
- ;
- DEFB 0FFH,23H,15H,'INX.'
- DEFB 0FFH,2BH,15H,'DCX.'
- DEFB 0FFH,34H,17H,'INR.'
- DEFB 0FFH,35H,17H,'DCR.'
- DEFB 0FFH,86H,17H,'ADD.'
- DEFB 0FFH,8EH,17H,'ADC.'
- DEFB 0FFH,96H,17H,'SUB.'
- DEFB 0FFH,9EH,17H,'SBB.'
- DEFB 0FFH,0A6H,17H,'ANA.'
- DEFB 0FFH,0AEH,17H,'XRA.'
- DEFB 0FFH,0B6H,17H,'ORA.'
- DEFB 0FFH,0BEH,17H,'CMP.'
- DEFB 0C7H,046H,18H,'MOV.'
- DEFB 0F8H,070H,19H,'MOV.'
- ;
- DEFB 0FFH,021H,1AH,'LXI.'
- DEFB 0FFH,022H,1BH,'SI..'
- DEFB 0FFH,02AH,1BH,'LI..'
- DEFB 0FFH,036H,1CH,'MVI.'
- DEFB 0CBH,0CBH,1DH,'....'
- DEFB 0,0,010H,'....'
- OPC4: DEFB 0FEH,070H,010H,'....';PREVENTS 'INP M'
- DEFB 0FFH,044H,0,'NEG.'
- DEFB 0FFH,045H,0,'RETN'
- DEFB 0FFH,046H,0,'IM0.'
- DEFB 0FFH,056H,0,'IM1.'
- DEFB 0FFH,05EH,0,'IM2.'
- DEFB 0FFH,047H,0,'STAI'
- DEFB 0FFH,04DH,0,'RETI'
- DEFB 0FFH,04FH,0,'STAR'
- DEFB 0FFH,057H,0,'LDAI'
- DEFB 0FFH,05FH,0,'LDAR'
- DEFB 0FFH,067H,0,'RRD.'
- DEFB 0FFH,06FH,0,'RLD.'
- DEFB 0CFH,042H,3,'DSBC'
- DEFB 0CFH,04AH,3,'DADC'
- DEFB 0C7H,040H,2,'INP.'
- DEFB 0C7H,041H,2,'OUTP'
- DEFB 0E7H,0A0H,1EH,'LD..'
- DEFB 0E7H,0A1H,1EH,'CC..'
- DEFB 0E7H,0A2H,1EH,'IN..'
- DEFB 0E7H,0A3H,1EH,'OUT.'
- DEFB 0CFH,043H,1FH,'S...'
- DEFB 0CFH,04BH,1FH,'L...'
- DEFB 0,0,010H,'....'
- ;
- ; END OF OPCODE TABLES
- ;
-