Compucolor.org – Virtual Media

Listing of file='8080P.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>"
143 FF= PEEK (33265)
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
192 PLOT 27,18,3,27,13:REM  ESCAPE TO RS232C PORT MODE
194 PLOT 30:REM  SETS MIDDLE SIZE PRINT ON MICROLINE 80
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 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 RETURN
600 PRINT "LHLD ";:GOSUB 2500
605 RETURN
610 PRINT "STA ";:GOSUB 2500
620 RETURN
630 PRINT "LDA ";:GOSUB 2500
640 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 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 RETURN
2110 ON S+ 1GOTO 2120,2140,2150,2170,2190,2200,2210,2220
2120 PRINT "JMP ";:GOSUB 2500
2130 RETURN
2140 PRINT "ILLOGICAL";:RETURN
2150 PRINT "OUT ";:GOSUB 2600
2160 RETURN
2170 PRINT "IN ";:GOSUB 2600
2180 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 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 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 RETURN
2350 PRINT "ACI ";:GOSUB 2600
2360 RETURN
2370 PRINT "SUI ";:GOSUB 2600
2380 RETURN
2390 PRINT "SBI ";:GOSUB 2600
2400 RETURN
2410 PRINT "ANI ";:GOSUB 2600
2420 RETURN
2430 PRINT "XRI ";:GOSUB 2600
2440 RETURN
2450 PRINT "CPI ";:GOSUB 2600
2460 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( 40);CH$(Z);:RETURN
3000 POKE 33265,FF:REM  RESET MODE
3005 PRINT :INPUT "HIT RETURN TO CONTINUE / Y TO RE-START :";Q$
3010 IF Q$= ""THEN PLOT 28,11:N= M:M= N+ STP:PLOT 27,18,3,27,13: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