Compucolor.org – Virtual Media

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

100 REM  DISASSEMBLER PROGRAM (IN BASIC)--LISTING TO SCREEN
110 REM  CORRECTIONS BY RICK TAUBOLD
120 REM  197 HOLLYBROOK ROAD, ROCHESTER, N.Y. 14623
130 REM  ORIGINAL AUTHOR UNKNOWN
140 CLEAR 200:PLOT 15,12,6,2:PRINT TAB( 20)"DISSASEMBLE TO SCREEN"
141 PRINT TAB( 20)"eeeeeeeeeeeeeeeeeeeee"
150 DIM RG$(7),AI$(7),C6$(7),CC$(7),C1$(7),C3$(7)
160 DIM C5$(7),X7$(7),X2$(7),HX$(15),RP$(3),ST(10)
170 GOSUB 1240:GOTO 260
180 X= N:GOSUB 220:N$= X$:X= A:GOSUB 210:A$= X$:IF A1= 1THEN RETURN
190 X= A2:GOSUB 210:A2$= X$:IF A1= 2THEN RETURN
200 X= A3:GOSUB 210:A3$= X$:X= AD:GOSUB 220:AD$= X$:RETURN
210 X$= HX$(INT (X/ 16))+ HX$(XAND 15):RETURN
220 T= X:X= INT (T/ 256):GOSUB 210:T$= X$
230 X= T- 256* X:GOSUB 210:X$= T$+ X$:RETURN
240 X$= RIGHT$ ("  "+ MID$ (STR$ (X),2),3):RETURN
250 X$= RIGHT$ ("    "+ MID$ (STR$ (X),2),5):RETURN
260 PLOT 3,13,8:INPUT "ENTER NAME OF ROUTINE: ";NM$
270 IF NM$= ""THEN PLOT 12:END
280 PRINT :PLOT 3,13,10:INPUT "ENTER START ADDRESS IN DECIMAL: ";LM
290 PRINT :PLOT 3,13,12:INPUT "DO YOU WISH TO TRACE JUMPS AND CALLS? ";D$
300 PLOT 12
310 PRINT NM$:PRINT
320 PRINT "START ADDRESS: ";LM:PRINT
330 N= LM:F= 0:S= 0
340 IF S= 30THEN 550
350 S= S+ 1:A= PEEK (N):X= A:GOSUB 240:A$= X$:X= N:GOSUB 250
360 N$= X$:GOSUB 620:ON A1GOTO 460,580,370,460
370 A2= PEEK (N+ 1):X= A2:GOSUB 240:A2$= X$
380 A3= PEEK (N+ 2):X= A3:GOSUB 240:A3$= X$
390 AD= 256* A3+ A2:X= AD:GOSUB 250:AD$= X$
400 PRINT N$;" ";A$;" ";A2$;" ";A3$;" ";
410 GOSUB 180:PRINT TAB( 25);N$;" ";A$;" ";A2$;" ";A3$;TAB( 40);" ";A1$;TAB( 49);AD$
420 IF LEFT$ (D$,1)< > "Y"THEN 450
430 IF A1$= "CALL "THEN F= F+ 1:ST(F)= N+ 3:N= AD:GOTO 340
440 IF A1$= "JMP  "THEN N= AD:GOTO 340
450 N= N+ 3:GOTO 340
460 PRINT N$;" ";A$;
470 GOSUB 180:PRINT TAB( 25);N$;" ";A$;TAB( 40);" ";A1$
480 IF LEFT$ (D$,1)< > "Y"THEN N= N+ 1:GOTO 340
490 IF A1$= "RET"OR A1$= "PCHL"THEN 520
500 IF A1= 4THEN F= F+ 1:ST(F)= N+ 1:N= 8* M:GOTO 340
510 N= N+ 1:GOTO 340
520 IF F< > 0THEN N= ST(F):F= F- 1:GOTO 340
530 INPUT "FINISHED. PRESS RETURN ";AB$
540 GOTO 260
550 PRINT "DO YOU WISH TO CONTINUE THIS ROUTINE ? ";AB$
552 POKE 33278,0:FOR I= 1TO 200:NEXT I
554 X= PEEK (33278):IF X= 0THEN 552
556 X$= CHR$ (X)
560 IF X$= "Y"THEN S= 0:PLOT 28,11:GOTO 350
570 PLOT 12:GOTO 260
580 A2= PEEK (N+ 1):X= A2:GOSUB 240:A2$= X$
590 PRINT N$;" ";A$;" ";A2$;" ";
600 GOSUB 180:PRINT TAB( 25);N$;" ";A$;" ";A2$;TAB( 40);" ";A1$;TAB( 51);A2$
610 N= N+ 2:GOTO 340
620 REM  LL MMM KKK
630 L= INT (A/ 64)
640 M= INT (A/ 8)AND 7
650 K= AAND 7
660 ON LGOTO 960,990,1010
670 REM  00 MMM KKK
680 ON KGOTO 720,790,830,890,890,920,940
690 REM  00 MMM 000
700 IF M= 0THEN A1$= "NOP":A1= 1:RETURN
710 IF M> 0THEN A1$= "- -":A1= 1:RETURN
720 REM  00 MMM 001
730 K= M/ 2
740 IF AAND 8THEN 770
750 REM  00 KK0 001
760 A1$= "LXI  "+ RP$(K)+ ",":A1= 3:RETURN
770 REM  00 KK1 001
780 A1$= "DAD  "+ RP$(K):A1= 1:RETURN
790 REM  00 MMM 010
800 A1$= X2$(M):REM  STAX OR LDAX
810 IF M< 4THEN A1= 1:RETURN
820 A1= 3:RETURN
830 REM  00 MMM 011
840 K= INT (M/ 2)
850 M= MAND 1
860 IF M= 0THEN A1$= "INX  "
870 IF M= 1THEN A1$= "DCX  "
880 A1$= A1$+ RP$(K):A1= 1:RETURN
890 REM  00 MMM 100 INR   00 MMM 101 DCR
900 IF K= 4THEN A1$= "INR  "+ RG$(M):A1= 1:RETURN
910 IF K= 5THEN A1$= "DCR  "+ RG$(M):A1= 1:RETURN
920 REM  00 MMM 110 MVI
930 A1$= "MVI  "+ RG$(M)+ ",":A1= 2:RETURN
940 REM  00 MMM 111
950 A1$= X7$(M):A1= 1:RETURN
960 REM  01 MMM KKK MOV
970 IF M= 6AND K= 6THEN A1$= "HLT":A1= 1:RETURN
980 A1$= "MOV  "+ RG$(M)+ ","+ RG$(K):A1= 1:RETURN
990 REM  10 MMM KKK
1000 A1$= AI$(M)+ "  "+ RG$(K):A1= 1:RETURN
1010 REM  11 MMM KKK
1020 ON KGOTO 1050,1070,1110,1090,1160,1190,1210
1030 REM  11 MMM 000
1040 A1$= "R"+ CC$(M):A1= 1:RETURN
1050 REM  11 MMM 001
1060 A1$= C1$(M):A1= 1:RETURN
1070 A1$= "J"+ CC$(M)+ "  ":A1= 3:RETURN
1080 A1$= "J"+ CC$(M)+ "  ":A1= 3:RETURN
1090 REM  11 MMM 100
1100 A1$= "C"+ CC$(M)+ "  ":A1= 3:RETURN
1110 REM  11 MMM 011
1120 A1$= C3$(M)+ "  ":A1= 1
1130 IF M= 0THEN A1= 3
1140 IF M= 2OR M= 3THEN A1= 2
1150 RETURN
1160 REM  11 MMM 101
1170 A1$= C5$(M):IF M< > 1THEN A1= 1:RETURN
1180 A1= 3:RETURN
1190 REM  11 MMM 110
1200 A1$= C6$(M)+ "  ":A1= 2:RETURN
1210 REM  11 MMM 111 RST
1220 A1$= "RST  "+ MID$ (STR$ (M),2)
1230 A1= 4:RETURN
1240 FOR I= 0TO 7:READ RG$(I):NEXT
1250 DATA  B,C,D,E,H,L,M,A
1260 FOR I= 0TO 3:READ RP$(I):NEXT
1270 DATA  B,D,H,SP
1280 FOR I= 0TO 7:READ AI$(I):NEXT
1290 DATA  ADD,ADC,SUB,SBB,ANA,XRA,ORA,CMP
1300 FOR I= 0TO 7:READ C6$(I):NEXT
1310 DATA  ADI,ACI,SUI,SBI,ANI,XRI,ORI,CPI
1320 FOR I= 0TO 7:READ CC$(I):NEXT
1330 DATA "NZ","Z ","NC","C ","PO","PE","P ","M "
1340 FOR I= 0TO 7:READ C1$(I):NEXT
1350 DATA  "POP  B","RET","POP  D","- -","POP  H","PCHL"
1360 DATA  "POP  PSW","SPHL"
1370 FOR I= 0TO 7:READ C3$(I):NEXT
1380 DATA  "JMP","- -",OUT,IN ,XTHL,XCHG,DI,EI
1390 FOR I= 0TO 7:READ C5$(I):NEXT
1400 DATA "PUSH B","CALL ","PUSH D","- -","PUSH H"
1410 DATA "- -","PUSH PSW","- -"
1420 FOR I= 0TO 7:READ X7$(I):NEXT
1430 DATA  RLC,RRC,RAL,RAR,DAA,CMA,STC,CMC
1440 FOR I= 0TO 7:READ X2$(I):NEXT
1450 DATA  "STAX B","LDAX B","STAX D","LDAX D","SHLD "
1460 DATA "LHLD ","STA  ","LDA  "
1470 FOR I= 0TO 15:READ HX$(I):NEXT
1480 DATA  0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
1490 RETURN