Compucolor.org – Virtual Media

Listing of file='8080D.BAS;01' on disk='vmedia/utility-sector.ccvf'

5 DIM X(8):CLEAR 200
10 DIM SR$(7):FOR X= 0TO 7:READ SR$(X):NEXT
20 DATA "B","C","D","E","H","L","M","A"
30 DIM CF$(7):FOR X= 0TO 7:READ CF$(X):NEXT
40 DATA "NZ","Z","NC","C","PO","PE","P ","M "
50 DIM DR$(7):FOR X= 0TO 7:READ DR$(X):NEXT
60 DATA "B","BC","D","DE","H","HL","SP","SP"
70 DIM CH$(32):FOR X= 0TO 32:READ CH$(X):NEXT
80 DATA "<NULL>","<AUTO>","<PLOT>","<CURSR X,Y>","?","?","<CCI>"
90 DATA "?","<HOME>","<TAB>","<LNFEED>","<ERASE LN>"
100 DATA "<ERASE PG>","<RETN>","<A7 ON>","<BLNK/A7 OFF>"
110 DATA "<BLACK>","<RED>","<GREEN>","<YELLOW>","<BLUE>"
120 DATA "<MAGNTA>","<CYAN>","<WHITE>","<TRNSMIT>"
130 DATA "<CRSR RGHT>","<CRSR LFT>","<ESC>","<CRSR UP>"
140 DATA "<FG ON/FL OFF>","<BG ON/FL ON>","<BLNK ON>","<SPACE>"
145 PLOT 12
147 PRINT
150 PRINT TAB( 10);"==========8080 DISASSEMBLER=========="
160 PRINT TAB( 18);"BY L.J. WILSON (8/1980)"
170 PRINT :PRINT
180 INPUT "ENTER MEMORY START ADDRESS ( DECIMAL ):";N
190 INPUT "ENTER MEMORY STEPS TO END :";STP:M= N+ STP
195 PLOT 11,28,11,28,11
196 PRINT " ----- ---  --- ------------------------- -----------"
197 PRINT "  MEM";TAB( 21);"ASSEMBLY";TAB( 42);"ASCII REF'S"
198 PRINT "  ORY (DEC)(OCT)    INSTRUCTION"
199 PRINT " ----- ---  --- ------------------------- -----------"
200 IF M< 0OR M> 65536THEN PRINT "OUT OF RANGE":GOTO 180
230 IF M< NTHEN 3000:REM  REPEAT ROUTINE
240 PRINT "":PRINT N;
250 Q= PEEK (N):S= (QAND 56)/ 8:T= QAND 7
252 U= Q
255 PRINT TAB( 6);"";Q;
257 GOSUB 4000
260 PRINT TAB( 11);"";C;" ";TAB( 16);
280 ON U/ 64+ 1GOSUB 500,1000,1500,2000
290 PRINT TAB( 41);CHR$ (28);:Z= U:GOSUB 330
300 Z= V:GOSUB 330
310 Z= O:GOSUB 330
320 U= 257:V= 257:O= 257:N= N+ 1:GOTO 230
330 IF Z> 32AND Z< 127THEN PRINT CHR$ (Z);:RETURN
340 IF Z= 257THEN RETURN
350 GOSUB 2700
360 RETURN
370 N= N+ 1:GOTO 230
500 ON T+ 1GOTO 510,530,550,650,680,690,700,720
510 IF S= 0THEN PRINT "NOP":RETURN
520 PRINT "ILLOGICAL":RETURN
530 ON S+ 1GOTO 535,545,535,545,535,545,535,545
535 PRINT "LXI ";DR$(S);:GOSUB 2500
540 PRINT :RETURN
545 PRINT "DAD ";DR$(S):RETURN
550 ON S+ 1GOTO 560,570,560,570,580,600,610,630
560 PRINT "STAX ";DR$(S):RETURN
570 PRINT "LDAX ";DR$(S):RETURN
580 PRINT "SHLD ";:GOSUB 2500
590 PRINT :RETURN
600 PRINT "LHLD ";:GOSUB 2500
605 PRINT :RETURN
610 PRINT "STA ";:GOSUB 2500
620 PRINT :RETURN
630 PRINT "LDA ";:GOSUB 2500
640 PRINT :RETURN
650 ON S+ 1GOTO 660,670,660,670,660,670,660,670
660 PRINT "INX ";DR$(S):RETURN
670 PRINT "DCX ";DR$(S):RETURN
680 PRINT "INR ";DR$(S):RETURN
690 PRINT "DCR ";DR$(S):RETURN
700 PRINT "MVI ";SR$(S);:GOSUB 2600
710 PRINT :RETURN
720 ON S+ 1GOTO 730,740,750,760,770,780,790,800
730 PRINT "RLC ":RETURN
740 PRINT "RRC ":RETURN
750 PRINT "RAL ":RETURN
760 PRINT "RAR ":RETURN
770 PRINT "DAA ":RETURN
780 PRINT "CMA ":RETURN
790 PRINT "STC ":RETURN
800 PRINT "CMC ":RETURN
1000 IF S= 6AND T= 6THEN PRINT "HLT":RETURN
1010 PRINT "MOV ";SR$(S);",";SR$(T):RETURN
1500 ON S+ 1GOTO 1510,1520,1530,1540,1550,1560,1570,1580
1510 PRINT "ADD ";SR$(T):RETURN
1520 PRINT "ADC ";SR$(T):RETURN
1530 PRINT "SUB ";SR$(T):RETURN
1540 PRINT "SBB ";SR$(T):RETURN
1550 PRINT "ANA ";SR$(T):RETURN
1560 PRINT "XRA ";SR$(T):RETURN
1570 PRINT "ORA ";SR$(T):RETURN
1580 PRINT "CMP ";SR$(T):RETURN
2000 ON T+ 1GOTO 2010,2020,2090,2110,2230,2250,2320,2470
2010 PRINT "R";CF$(S):RETURN
2020 ON S+ 1GOTO 2030,2040,2030,2050,2030,2060,2070,2080
2030 PRINT "POP ";DR$(S):RETURN
2040 PRINT "RET":RETURN
2050 PRINT "ILLOGICAL":RETURN
2060 PRINT "PCHL":RETURN
2070 PRINT "POP PSW":RETURN
2080 PRINT "SPHL":RETURN
2090 PRINT "J";CF$(S);:GOSUB 2500
2100 PRINT :RETURN
2110 ON S+ 1GOTO 2120,2140,2150,2170,2190,2200,2210,2220
2120 PRINT "JMP ";:GOSUB 2500
2130 PRINT :RETURN
2140 PRINT "ILLOGICAL":RETURN
2150 PRINT "OUT ";:GOSUB 2600
2160 PRINT :RETURN
2170 PRINT "IN ";:GOSUB 2600
2180 PRINT :RETURN
2190 PRINT "XTHL":RETURN
2200 PRINT "XCHG":RETURN
2210 PRINT "DI":RETURN
2220 PRINT "EI":RETURN
2230 PRINT "C";CF$(S);:GOSUB 2500
2240 PRINT :RETURN
2250 ON S+ 1GOTO 2260,2270,2260,2290,2260,2290,2300,2290
2260 PRINT "PUSH";DR$(S):RETURN
2270 PRINT "CALL";:GOSUB 2500
2280 PRINT :RETURN
2290 PRINT "ILLOGICAL":RETURN
2300 PRINT "PUSH PSW":RETURN
2320 ON S+ 1GOTO 2330,2350,2370,2390,2410,2430,2430,2450
2330 PRINT "ADI ";:GOSUB 2600
2340 PRINT :RETURN
2350 PRINT "ACI ";:GOSUB 2600
2360 PRINT :RETURN
2370 PRINT "SUI ";:GOSUB 2600
2380 PRINT :RETURN
2390 PRINT "SBI ";:GOSUB 2600
2400 PRINT :RETURN
2410 PRINT "ANI ";:GOSUB 2600
2420 PRINT :RETURN
2430 PRINT "XRI ";:GOSUB 2600
2440 PRINT :RETURN
2450 PRINT "CPI ";:GOSUB 2600
2460 PRINT :RETURN
2470 PRINT "RST ";S:RETURN
2500 X= PEEK (N+ 2):Y= PEEK (N+ 1):N= N+ 2:W= 256* X+ Y
2510 V= Y:O= X
2520 PRINT "<";Y;"><";X;">";W;:RETURN
2600 X= PEEK (N+ 1):N= N+ 1:V= X
2610 PRINT "<";X;">";:RETURN
2700 IF Z= 127THEN PRINT "<DEL>";:RETURN
2710 IF Z> 127AND Z< 240THEN PRINT "?";:RETURN
2720 IF Z> 239AND Z< 256THEN PRINT "<PLT MODE>";:RETURN
2730 IF Z< 33THEN PRINT TAB( 39);CH$(Z);:RETURN
3000 PRINT :INPUT "HIT RETURN TO CONTINUE / Y TO RE-START / E TO END :";Q$
3010 IF Q$= ""THEN PLOT 28,11:N= M:M= N+ STP:GOTO 200
3050 FOR I= 0TO 31:PLOT 3,0,I,11:NEXT
3070 IF Q$= "Y"THEN 145
3080 PLOT 12:END
4000 REM  OCTAL CONVERSION ROUTINE
4140 C$= ""
4150 FOR D= 7TO 0STEP - 1
4160 DV= 2^ D:REM  DV=DIVISOR
4170 C= INT (Q/ DV)
4180 IF C= 1THEN C$= C$+ "1":Q= Q- DV:GOTO 4200
4190 C$= C$+ "0"
4200 NEXT D
4230 FOR I= 1TO 8
4240 X(I)= VAL (MID$ (C$,I,1))
4250 NEXT I
4270 A= X(6)* 4+ X(7)* 2+ X(8)
4280 B= (X(3)* 4+ X(4)* 2+ X(5))* 10
4290 C= (X(1)* 2+ X(2))* 100
4300 C= C+ B+ A
4310 RETURN