Compucolor.org – Virtual Media

Listing of file='DIS.BAS;01' on disk='vmedia/ncc_2-sector.ccvf'

1 REM DISSASSEMBLER PROGRAM
2 REM
3 REM BART EVANS - MARCH 79
4 REM

100 CLEAR
110 REM

999 REM LOAD HEX CONVERSION TABLE
1000 DIM A$(15)
1010 FOR X= 0TO 15
1020 READ A$(X)
1030 NEXT
1040 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
1050 REM

1999 REM LOAD CODE, BYTE NUMBERS
2000 DIM C$(255)
2010 DIM P(255)
2020 FOR X= 0TO 255
2030 READ C$(X),P(X)
2040 NEXT
2050 REM

2999 REM GET START ADDRESS
3000 INPUT "START ADDRESS: ";AD
3010 PRINT
3020 REM

3999 REM NEW LINE
4000 H= AD
4005 PRINT H;TAB( 7);
4010 GOSUB 62000
4020 PRINT TAB( 13);
4030 D= PEEK (AD)
4040 N= P(D)
4050 ON N+ 1GOSUB 5000,6000,7000
4060 PRINT
4070 AD= AD+ 1
4080 GOTO 4000
4090 REM

4999 REM 1-BYTE INSTRUCTION
5000 L= D
5010 GOSUB 61000
5020 PRINT TAB( 23);
5030 PRINT C$(D);
5040 RETURN
5050 REM

5999 REM 2-BYTE INSTRUCTION
6000 L= D
6010 GOSUB 61000
6020 PRINT TAB( 16);
6030 AD= AD+ 1
6040 DA= PEEK (AD)
6050 L= DA
6060 GOSUB 61000
6070 PRINT TAB( 23);
6080 GOSUB 63000
6090 PRINT " ";
6100 L= DA
6110 GOSUB 61000
6120 PRINT " (";L;" )";
6130 RETURN
6140 REM

6999 REM 3-BYTE INSTRUCTION
7000 L= D
7010 GOSUB 61000
7020 PRINT TAB( 16);
7030 AD= AD+ 1
7040 L1= PEEK (AD)
7050 L= L1
7060 GOSUB 61000
7070 PRINT TAB( 19);
7080 AD= AD+ 1
7090 H1= PEEK (AD)
7100 L= H1
7110 GOSUB 61000
7120 PRINT TAB( 23);
7130 GOSUB 63000
7140 H= L1+ 256* H1
7150 GOSUB 62000
7160 PRINT " (";H;" )";
7170 RETURN
7180 REM

59999 REM CODE TABLE: ASSY CODE, # ADD'L BYTES
60000 DATA NOP,0,LXI.B,2,STAX.B,0,INX.B,0,INR.B,0,DCR.B,0,MVI.B,1,RLC,0
60008 DATA ?,0,DAD.B,0,LDAX.B,0,DCX.B,0,INR.C,0,DCR.C,0,MVI.C,1,RRC,0
60010 DATA ?,0,LXI.D,2,STAX.D,0,INX.D,0,INR.D,0,DCR.D,0,MVI.D,1,RAL,0
60018 DATA ?,0,DAD.D,0,LDAX.D,0,DCX.D,0,INR.E,0,DCR.E,0,MVI.E,1,RAR,0
60020 DATA ?,0,LXI.H,2,SHLD,2,INX.H,0,INR.H,0,DCR.H,0,MVI.H,1,DAA,0
60028 DATA ?,0,DAD.H,0,LHLD,2,DCX.H,0,INR.L,0,DCR.L,0,MVI.L,1,CMA,0
60030 DATA ?,0,LXI.SP,2,STA,2,INX.SP,0,INR.M,0,DCR.M,0,MVI.M,1,STC,0
60038 DATA ?,0,DAD.SP,0,LDA,2,DCX.SP,0,INR.A,0,DCR.A,0,MVI.A,1,CMC,0
60040 DATA MOV.B<B,0,MOV.B<C,0,MOV.B<D,0,MOV.B<E,0,MOV.B<H,0,MOV.B<L,0,MOV.B<M,0,MOV.B<A,0
60048 DATA MOV.C<B,0,MOV.C<C,0,MOV.C<D,0,MOV.C<E,0,MOV.C<H,0,MOV.C<L,0,MOV.C<M,0,MOV.C<A,0
60050 DATA MOV.D<B,0,MOV.D<C,0,MOV.D<D,0,MOV.D<E,0,MOV.D<H,0,MOV.D<L,0,MOV.D<M,0,MOV.D<A,0
60058 DATA MOV.E<B,0,MOV.E<C,0,MOV.E<D,0,MOV.E<E,0,MOV.E<H,0,MOV.E<L,0,MOV.E<M,0,MOV.E<A,0
60060 DATA MOV.H<B,0,MOV.H<C,0,MOV.H<D,0,MOV.H<E,0,MOV.H<H,0,MOV.H<L,0,MOV.H<M,0,MOV.H<A,0
60068 DATA MOV.L<B,0,MOV.L<C,0,MOV.L<D,0,MOV.L<E,0,MOV.L<H,0,MOV.L<L,0,MOV.L<M,0,MOV.L<A,0
60070 DATA MOV.M<B,0,MOV.M<C,0,MOV.M<D,0,MOV.M<E,0,MOV.M<H,0,MOV.M<L,0,HALT,0,MOV.M<A,0
60078 DATA MOV.A<B,0,MOV.A<C,0,MOV.A<D,0,MOV.A<E,0,MOV.A<H,0,MOV.A<L,0,MOV.A<M,0,MOV.A<A,0
60080 DATA ADD.B,0,ADD.C,0,ADD.D,0,ADD.E,0,ADD.H,0,ADD.L,0,ADD.M,0,ADD.A,0
60088 DATA ADC.B,0,ADC.C,0,ADC.D,0,ADC.E,0,ADC.H,0,ADC.L,0,ADC.M,0,ADC.A,0
60090 DATA SUB.B,0,SUB.C,0,SUB.D,0,SUB.E,0,SUB.H,0,SUB.L,0,SUB.M,0,SUB.A,0
60098 DATA SBB.B,0,SBB.C,0,SBB.D,0,SBB.E,0,SBB.H,0,SBB.L,0,SBB.M,0,SBB.A,0
60100 DATA ANA.B,0,ANA.C,0,ANA.D,0,ANA.E,0,ANA.H,0,ANA.L,0,ANA.M,0,ANA.A,0
60108 DATA XRA.B,0,XRA.C,0,XRA.D,0,XRA.E,0,XRA.H,0,XRA.L,0,XRA.M,0,XRA.A,0
60110 DATA ORA.B,0,ORA.C,0,ORA.D,0,ORA.E,0,ORA.H,0,ORA.L,0,ORA.M,0,ORA.A,0
60118 DATA CMP.B,0,CMP.C,0,CMP.D,0,CMP.E,0,CMP.H,0,CMP.L,0,CMP.M,0,CMP.A,0
60120 DATA RNX,0,POP.B,0,JNZ,2,JMP,2,CNZ,2,PUSH.B,0,ADI,1,RST.0,0
60128 DATA RZ,0,RET,0,JZ,2,?,0,CZ,2,CALL,2,ACI,1,RST.1,0
60130 DATA RNC,0,POP.D,0,JNC,2,OUT,1,CNC,2,PUSH.D,0,SUI,1,RST.2,0
60138 DATA RC,0,?,0,JC,2,IN,1,CC,2,?,0,SBI,1,RST.3,0
60140 DATA RPO,0,POP.H,0,JPO,2,XTHL,0,CPO,2,PUSH.H,0,ANI,1,RST.4,0
60148 DATA RPE,0,PCHL,0,JPE,2,XCHG,0,CPE,2,?,0,XRI,1,RST.5,0
60150 DATA RP,0,POP.PSW,0,JP,2,DI,0,CP,2,PUSH.PSW,0,ORI,1,RST.6,0
60158 DATA RM,0,SPHL,0,JM,2,EI,0,CM,2,?,0,CPI,1,RST.7,0
60200 REM
60300 END
60310 REM

60999 REM PRINT "L" IN 2 HEX DIGITS
61000 D1= INT (L/ 16)
61010 D2= L- 16* D1
61020 PRINT A$(D1);A$(D2);
61030 RETURN
61040

61999 REM PRINT "H" IN 4 HEX DIGITS
62000 D1= INT (H/ 4096)
62010 D2= INT ((H- 4096* D1)/ 256)
62020 D3= INT ((H- 4096* D1- 256* D2)/ 16)
62030 D4= H- 4096* D1- 256* D2- 16* D3
62040 PRINT A$(D1);A$(D2);A$(D3);A$(D4);
62050 RETURN
62060 REM

62999 REM PRINT CODE + SPACE
63000 PRINT C$(D);" ";
63010 RETURN
63020 REM