; DIS-ASSEMBLER FOR 8048 (AVOCET XASM-48) ; CPU DEPENDING PART ; ; 1982.12.14. ; 1983.07.31. ; 1983.10.04. ; ; EQUATIONS OF EXTERNAL & ENTRY SYMBOLS ; ENTRY STRTMD ;START MODE SET UP ROUTINE ENTRY LOOPIN ;LOOP INITIALIZE ROUTINE ENTRY SETDB ;SET DEFINE BYTE PSUDO LINE ENTRY SETDW ;SET DEFINE WORD PSEUDO LINE ENTRY SETWDT ;SET WORD DATA ENTRY SETBDT ;SET BYTE DATA ; ENTRY IXMNEM ;MNEMONIC MAIN INDEX ENTRY IXMAIN ;MAIN ROUTINE INDEX ; ENTRY PORG ;ORIGINATE PSUDO DATA POINT ENTRY PEQU ;EQUATION PSUDO DATA POINT ENTRY PEND ;END PSUDO DATA POINT ; ENTRY CSTUP ;START UP COMMENT ENTRY CPAGE ;PAGE TOP COMMENT ENTRY CTAG ;TAG DATA ENTRY MENDCD ;END CODE POINT ENTRY ASMTYP ;filetye.ASM ; EXT GETYN ;GET YES NO RESPONSE EXT COPY ;COPY DATA EXT ENDLIS ;ONE LINE END PROCESS EXT STLBOR ;SET LABEL DATA EXT LOOPDL ;LINE DECODE LOOP FOR INDEXED EXT SRCHCD ;SEARCH CODE EXT SETLOC ;SET LOCATION DATA EXT SETBYT ;SET BYTE DATA ; EXT WKOPCD ;OPCODE POINT IN WORK EXT BCODE ;INPUT FILE CODE BUFFER EXT PCURNT ;CURRENT PROGRAM ADDRESS ; ; EQUATIONS OF DATA ; CR EQU 0DH ;CARIAGE RETURN FF EQU 0CH ;FORM FEED LF EQU 0AH ;LINE FEED ; ; OPTION SELECTION AT START POINT ; STRTMD: XRA A STA BNKSFF RET ;NO OPTION ; ; ONE LINE DECODING LOOP INITIALIZE ROUTINE ; OUTPUT ; HL:LINE END ROUTINE POINTER ; LOOPIN: MVI A,-1 STA MENDCD ;RESET END CODE MODE LXI H,ENDLIN RET ; ; END PROCESS OF ONE LINE ; ENDLIN: JMP ENDLIS ;TO MAIN END ROUTINE ; ; SET UP OF LABELED OPERAND ; SLOPDT: ;DATA LABEL MVI C,'D' JMP STLBOP ; SLOPPR: ;PROGRAM LABEL MVI C,'A' JMP STLBOP ; SLOPTB: ;TABLE LABEL MVI C,'T' STLBOP: MOV A,M INX H MOV H,M MOV L,A ;GET ADDRESS JMP STLBOR ; ; SET DEFINE BYTE ; SETDB: POP H ;CANCEL CODE POINTER SETDBS: CALL CLROPA ;CLEAR OPCODE & OPRAND AREA LXI H,PDB CALL SETOPC ;SET 'DB ' MVI B,1 ;ONE BYTE LDA BCODE ;GET CODE JMP SETBDT ;SET BYTE DATA ; ; SET DEFINE WORD ; SETDW: LXI H,PDW CALL SETOPC ;SET 'DW ' POP H MVI B,2 ;TWO BYTE DATA JMP SLOPPR ;SET AS PROGRAM LABEL ; ; SET OPCODE TO BUFFER ; INPUT ; HL:OPCODE DATA POINT ; OUTPUT ; DE:OPERAND BUFFER POINT ; SETOPC: LXI D,WKOPCD ;OPCODE DATA BUFFER LXI B,4 ;LENGTH OF OPCODE CALL COPY LXI D,WKOPCD+8 ;OPERAND BUFFER POINT RET ; ; SET COMMA ; SETCOM: PUSH PSW MVI A,',' STAX D INX D POP PSW RET ; ; CLEAR OPCODE & OPERAND AREA ; CLROPA: LXI H,WKOPCD MVI B,20 CLRLIL: MVI M,' ' ;FILL BY SPACE INX H DCR B JNZ CLRLIL MVI M,0 ;SET END CODE RET ; ; SET WORD DATA ; INPUT ; HL:DATA ; DE:BUFFER POINTER ; SETWDT: PUSH PSW MVI A,'0' STAX D INX D CALL SETLOC ;SET ADDRESS MVI A,'H' STAX D INX D POP PSW RET ; ; SET BYTE DATA ; INPUT ; A:DATA ; DE:BUFFER POINTER ; SETBDT: PUSH PSW MVI A,'0' STAX D INX D POP PSW CALL SETBYT MVI A,'H' STAX D INX D RET ; ; SET END CODE MODE ; STENDC: XRA A STA MENDCD ;SET END CODE MODE RET ; ; EACH INSTRUCTION ROUTINE ; ; INPUT ; A:CODE ; B:1 ; DE:OPERAND DATA BUFFER POINT ; HL:CODE DATA BUFFER POINT ; ; ONE BYTE NO OPERAND ; OBNOOP: RET ;DO NOTHING ; OBNOPE: ;NO OPERAND END CODE JMP STENDC ; ; JB NUMBER ; JBITNM: RLC RLC RLC ANI 7 ADI '0' STA WKOPCD+2 ;SET BIT NUMBER JMPCPG: ;JUMP IN CURRENT PAGE MOV A,M ;GET LOWER ADDRESS LHLD PCURNT ;GET CURRENT ADDRESS MOV L,A MVI B,2 ;2 BYTE MVI C,'A' JMP STLBOR ;SET AS PROGRAM ADDRESS ; ; DO LOOP ; DOLOOP: PUSH H ANI 7 CALL SETRGN ;SET REGISTER NAME CALL SETCOM ;SET COMMA POP H JMP JMPCPG ;JUMP IN CURRENT PAGE ; ; JUMP OR CALL ; JMPFUL: ;JUMP FULL ADDRESS MOV C,A CALL STENDC ;SET END CODE MOV A,C CALLFL: MOV L,M ;GET LOWER ADDRESS RLC ;A10_A9_A8_00100 RLC RLC ANI 7 MOV H,A ;GET HIGHER ADDRESS ; LDA PCURNT+1 ANI 8 ;GET HIGHER BIT FOR MBF ORA H ;High Address MOV H,A ;SET HIGH Address ; LDA BNKSFF ANI 2 JZ NOSEL ;CLEAR Memory Bank Flag ; LDA BNKSFF ; 2 or 3 .. (b5,b4) CMP 3 JZ MBSEL1 ; SEL MB1 ; MOV A,H ; SEL MB0 ANI 7 JMP MBSEL0 ; MBSEL1: MOV A,H ORI 8 ;Toggle MBF MBSEL0: MOV H,A ; NOSEL: MVI B,2 MVI C,'A' JMP STLBOR ; ; ONE REGISTER MODE ; INDJMP: CALL STENDC MVI A,13H JMP SETRGS ; CARRY: MVI A,19H ;C JMP SETRGS ; FLAG: ;F0,F1 RLC RLC RLC ANI 1 ADI 10H JMP SETRGS ; INTMOD: ;INTERRUPT MODE ANI 20H MVI A,18H CNZ SETRGN ;TCNTI MVI A,'I' STAX D RET ; TMRCNT: ;TIMER CONTROL RRC RRC RRC RRC ANI 1 ADI 16H JMP SETRGS ; TMRSTP: ;'STOP' MVI A,18H JMP SETRGS ;TCNT ; OPRNDA: ;A OPERAND MVI A,12H JMP SETRGS ; OPRNIR: ;@RN ANI 1 ADI 1AH JMP SETRGS ; ; TWO OPERAND REGISTERS ; OPRAIR: ;A,@RN ANI 1 ADI 1AH MOV L,A MVI H,12H ;A JMP SETRGD ; OPRNRN: ;RN ANI 7 JMP SETRGS ; OPRARN: ;A,RN ANI 7 MOV L,A MVI H,12H JMP SETRGD ; OPRRNA: ;RN,A ANI 7 MOV H,A MVI L,12H JMP SETRGD ; OPRIRA: ;@RN,A ANI 1 ADI 1AH MOV H,A MVI L,12H JMP SETRGD ; OPRAPS: ;A,PSW LXI H,1215H JMP SETRGD ; OPRPSA: ;PSW,A LXI H,1512H JMP SETRGD ; OPRAIA: ;A,@A CPI 0E3H MVI A,'3' JNZ $+6 ;'MOVP' STA WKOPCD+4 ;'MOVP3' LXI H,1213H JMP SETRGD ; OPRAT: ;A,T LXI H,1217H JMP SETRGD ; OPRTA: ;T,A LXI H,1712H JMP SETRGD ; OPRANM: ;A,#N MVI A,12H JMP SETRNM ; OPRRNM: ;RN,#N ANI 7 JMP SETRNM ; OPRRIN: ;@RN,#N ANI 1 ADI 1AH JMP SETRNM ; OPRBNM: ;BUS,#N MVI A,14H JMP SETRNM ; OPRPNM: ;PP,#N ANI 7 ADI 8 JMP SETRNM ; OPRBUA: ;BUS,A LXI H,1412H JMP SETRGD ; OPRABU: ;A,BUS LXI H,1214H JMP SETRGD ; OPRPPA: ;PP,A ANI 7 ADI 8 MOV H,A MVI L,12H JMP SETRGD ; OPRAPP: ;A,PP ANI 7 ADI 8 MOV L,A MVI H,12H JMP SETRGD ; OPRRBM: RRC ;b5_b4_ RRC RRC RRC ANI 3 STA BNKSFF ;BANK Flag ADI 1CH JMP SETRGS ; OPRCLK: ;CLK MVI A,20H JMP SETRGS ; ; SET REGISTER NAME ; INPUT ; A:CODE OF REGISTER NAME ; DE:DATA BUFFER POINT ; OUTPUT ; CF:ON ERROR ; SETRGN: ADD A ADD A LXI H,IXREGN ADD L MOV L,A MOV A,H ACI 0 MOV H,A MOV A,M CPI ' ' STC RZ ;ERROR CODE MVI C,4 MOV A,M CPI ' ' RZ ;END OF CODE STAX D ;SET CODE INX H INX D DCR C JNZ $-8 ORA A RET ; ; SET DOUBLE REGISTER OPERAND ; INPUT ; HL:REGISTER CODE H,L ; DE:DATA POINT ; SETRGD: PUSH H MOV A,H CALL SETRGN ;SET FIRST POP H JC SETDBS ;ERROR CALL SETCOM ;SET COMMA MOV A,L SETRGS: CALL SETRGN ;SET SECOND JC SETDBS ;ERROR RET ; ; SET REGISTER NAME & NUMBER ; INPUT ; A:REGISTER NAME CODE ; HL:CODE POINT ; DE:BUFFER POINT ; SETRNM: PUSH H CALL SETRGN ;SET REGISTER NAME POP H JC SETDBS ;ERROR CALL SETCOM ;SET COMMA MVI A,'#' STAX D INX D MOV A,M ;GET DATA MVI B,2 JMP SETBDT ;SET DATA ; ; MAIN ROUTINE INDEX ; IXMAIN: DW OBNOPE ;0 END CODE NO OPERAND DW OBNOOP ;1 NO OPERAND DW JBITNM ;2 JUMP BY BIT TEST DW JMPCPG ;3 CONDITIONAL JUMP DW CALLFL ;4 CALL DW JMPFUL ;5 JMP DW INDJMP ;6 INDEXED JUMP DW DOLOOP ;7 DO LOOP DW CARRY ;8 C DW FLAG ;9 F0,F1 DW INTMOD ;10 INTERRUPT MODE DW TMRCNT ;11 TIMER CONTROL DW TMRSTP ;12 STOP DW OPRNDA ;13 OPERAND A DW OPRNIR ;14 OPERAND @RN DW OPRAIR ;15 A,@R DW OPRNRN ;16 RN DW OPRARN ;17 A,RN DW OPRRNA ;18 RN,A DW OPRIRA ;19 @RN,A DW OPRAPS ;20 A,PSW DW OPRPSA ;21 PSW,A DW OPRAIA ;22 A,@A DW OPRAT ;23 A,T DW OPRTA ;24 T,A DW OPRANM ;25 A,#N DW OPRRNM ;26 RN,#N DW OPRRIN ;27 @RN,#N DW OPRBNM ;28 BUS,#N DW OPRPNM ;29 PP,#N DW OPRBUA ;30 BUS,A DW OPRABU ;31 A,BUS DW OPRPPA ;32 PP,A DW OPRAPP ;33 A,PP DW OPRRBM ;34 RB0,RB1,MB0,MB1 DW OPRCLK ;35 CLK ; ; REGISTER NAME INDEX ; IXREGN: DB 'R0 ' DB 'R1 ' DB 'R2 ' DB 'R3 ' DB 'R4 ' ;4 DB 'R5 ' DB 'R6 ' DB 'R7 ' DB ' ' ;8 DB 'P1 ' DB 'P2 ' DB ' ' DB 'P4 ' ;C DB 'P5 ' DB 'P6 ' DB 'P7 ' DB 'F0 ' ;10 DB 'F1 ' DB 'A ' DB '@A ' DB 'BUS ' ;14 DB 'PSW ' DB 'CNT ' DB 'T ' DB 'TCNT' ;18 DB 'C ' DB '@R0 ' DB '@R1 ' DB 'RB0 ' ;1C DB 'RB1 ' DB 'MB0 ' DB 'MB1 ' DB 'CLK ' ;20 ; ; CODE INDEX ; IXMNEM: ; DB 0FFH,2 ;NO OPERAND END CODE 0 DB 083H,'RET ' DB 093H,'RETR' DB 0FFH,1 ;NO OPERAND NOT END 1 DB 000H,'NOP ' ; DB 1FH,1 ;JB NUMBER 2 DB 012H,'JB ' DB 0FFH,12 ;CONDITIONAL JUMP 3 DB 016H,'JTF ' DB 086H,'JNI ' DB 0F6H,'JC ' DB 0E6H,'JNC ' DB 0C6H,'JZ ' DB 096H,'JNZ ' DB 036H,'JT0 ' DB 026H,'JNT0' DB 056H,'JT1 ' DB 046H,'JNT1' DB 0B6H,'JF0 ' DB 076H,'JF1 ' DB 1FH,1 ;CALL 4 DB 014H,'CALL' DB 01FH,1 ;JUMP END CODE 5 DB 004H,'JMP ' DB 0FFH,1 ;INDIRECT JUMP @A 6 DB 0B3H,'JMPP' DB 0F8H,1 ;DO LOOP RN,ADD 7 DB 0E8H,'DJNZ' ; DB 0FFH,2 ;CARRY FLAG 8 DB 097H,'CLR ' DB 0A7H,'CPL ' DB 0DFH,2 ;F0,F1 9 DB 085H,'CLR ' DB 095H,'CPL ' ; DB 0DFH,2 ;INTERRUPT CONTROL I,TCNTI 10 DB 005H,'EN ' DB 015H,'DIS ' DB 0EFH,1 ;CNT,T 11 DB 045H,'STRT' DB 0FFH,1 ;TCNT 12 DB 065H,'STOP' ; DB 0FFH,10 ;OPERAND A 13 DB 007H,'DEC ' DB 017H,'INC ' DB 027H,'CLR ' DB 037H,'CPL ' DB 047H,'SWAP' DB 057H,'DA ' DB 067H,'RRC ' DB 077H,'RR ' DB 0E7H,'RL ' DB 0F7H,'RLC ' ; DB 0FEH,1 ;@RN 14 DB 010H,'INC ' ; DB 0FEH,9 ;A,@RN 15 DB 0F0H,'MOV ' DB 080H,'MOVX' DB 020H,'XCH ' DB 030H,'XCHD' DB 060H,'ADD ' DB 070H,'ADDC' DB 050H,'ANL ' DB 040H,'ORL ' DB 0D0H,'XRL ' ; DB 0F8H,2 ;RN 16 DB 018H,'INC ' DB 0C8H,'DEC ' ; DB 0F8H,7 ;A,RN 17 DB 0F8H,'MOV ' DB 028H,'XCH ' DB 068H,'ADD ' DB 078H,'ADDC' DB 058H,'ANL ' DB 048H,'ORL ' DB 0D8H,'XRL ' ; DB 0F8H,1 ;RN,A 18 DB 0A8H,'MOV ' DB 0FEH,2 ;@RN,A 19 DB 0A0H,'MOV ' DB 090H,'MOVX' ; DB 0FFH,1 ;A,PSW 20 DB 0C7H,'MOV ' DB 0FFH,1 ;PSW,A 21 DB 0D7H,'MOV ' ; DB 0BFH,1 ;A,@A 22 DB 0A3H,'MOVP' ;0E3H = MOVP3 ; DB 0FFH,1 ;A,T 23 DB 042H,'MOV ' DB 0FFH,1 ;T,A 24 DB 062H,'MOV ' ; DB 0FFH,6 ;A,#N 25 DB 023H,'MOV ' DB 003H,'ADD ' DB 013H,'ADDC' DB 053H,'ANL ' DB 043H,'ORL ' DB 0D3H,'XRL ' ; DB 0F8H,1 ;RN,#N 26 DB 0B8H,'MOV ' DB 0FEH,1 ;@RN,#N 27 DB 0B0H,'MOV ' ; DB 0FFH,2 ;BUS,#N 28 DB 088H,'ORL ' DB 098H,'ANL ' DB 0FCH,2 ;PP,#N 29 DB 088H,'ORL ' DB 098H,'ANL ' ; DB 0FFH,1 ;BUS,A 30 DB 002H,'OUTL' DB 0FFH,1 ;A,BUS 31 DB 008H,'INS ' ; DB 0FCH,4 ;PP,A 32 DB 038H,'OUTL' DB 03CH,'MOVD' DB 09CH,'ANLD' DB 08CH,'ORLD' ; DB 0FCH,2 ;A,PP 33 DB 008H,'IN ' DB 00CH,'MOVD' ; DB 0CFH,1 ;RB0,RB1,MB0,MB1 34 DB 0C5H,'SEL ' ; DB 0FFH,1 ;CLK 35 DB 075H,'ENT0' ; DB 0 ; ; PSEUDO OPERATION CODES ; PORG: DB 'ORG ' PEND: DB 'END ' PEQU: DB 'EQU ' PDB: DB 'DB ' PDW: DB 'DW ' ; ; COMMENTS ; CSTUP: DB 'DIS-ASSEMBLER 8048 VER.1.02',0 CPAGE: DB FF,'/* DIS-ASSEMBLER 8048 VER.1.02 */',0 CTAG: DB ':',0 ;TAG DATA ASMTYP: DW 'SM' ; BNKSFF: DS 1 ; MENDCD: DS 1 ;END CODE MODE 0 END CODE ; ; ; END