Compucolor.org – Virtual Media

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

100 REM  BY MYRON T. STEFFY.  SUN CITY, ARIZONA  8/79
110 PLOT 12,15,22
120 PRINT TAB( 10)"MACHINE TO ASSEMBLY LANGUAGE CONVERTER"
130 PRINT
180 PRINT TAB( 10)"THIS WILL TAKE 20 SECONDS TO LOAD THE ARRAY"
200 DIM D$(15,15)
210 FOR M= 0TO 15
220 FOR L= 0TO 15
230 READ D$(M,L)
240 DATA "NOP","LXI B, ++","STAX B","INX B","INR B","DCR B","MVI B, +","RLC"
250 DATA "0","DAD B","LDAX B","DCX B","INR C","DCR C","MVI C, +","RRC"
260 DATA "0","LXI D, ++","STAX D","INX D","INR D","DCR D","MVI D, +","RAL"
270 DATA "0","DAD D","LDAX D","DCX D","INR E","DCR E","MVI E, +","RAR"
280 DATA "RIM (8085)","LXI H, ++","SHLD ++","INX H","INR H","DCR H","MVI H, +","DAA"
290 DATA "0","DAD H","LHLD ++","DCX H","INR L","DCR L","MVI L, +","CMA"
300 DATA "SIM (8085)","LXI SP, ++","STA ++","INX SP","INR M","DCR M","MVI M, +","STC"
310 DATA "0","DAD SP","LDA ++","DCX SP","INR A","DCR A","MVI A, +","CMC"
320 DATA "MOV B,B","MOV B,C","MOV B,D","MOV B,E","MOV B,H","MOV B,L","MOV B,M","MOV B,A"
330 DATA "MOV C,B","MOV C,C","MOV C,D","MOV C,E","MOV C,H","MOV C,L","MOV C,M","MOV C,A"
340 DATA "MOV D,B","MOV D,C","MOV D,D","MOV D,E","MOV D,H","MOV D,L","MOV D,M","MOV D,A"
350 DATA "MOV E,B","MOV E,C","MOV E,D","MOV E,E","MOV E,H","MOV E,L","MOV E,M","MOV E,A"
360 DATA "MOV H,B","MOV H,C","MOV H,D","MOV H,E","MOV H,H","MOV H,L","MOV H,M","MOV H,A"
370 DATA "MOV L,B","MOV L,C","MOV L,D","MOV L,E","MOV L,H","MOV L,L","MOV L,M","MOV L,A"
380 DATA "MOV M,B","MOV M,C","MOV M,D","MOV M,E","MOV M,H","MOV M,L","HLT","MOV M,A"
390 DATA "MOV A,B","MOV A,C","MOV A,D","MOV A,E","MOV A,H","MOV A,L","MOV A,M","MOV A,A"
400 DATA "ADD B","ADD C","ADD D","ADD E","ADD H","ADD L","ADD M","ADD A"
410 DATA "ADC B","ADC C","ADC D","ADC E","ADC H","ADC L","ADC M","ADC A"
420 DATA "SUB B","SUB C","SUB D","SUB E","SUB H","SUB L","SUB M","SUB A"
430 DATA "SBB B","SBB C","SBB D","SBB E","SBB H","SBB L","SBB M","SBB A"
440 DATA "ANA B","ANA C","ANA D","ANA E","ANA H","ANA L","ANA M","ANA A"
450 DATA "XRA B","XRA C","XRA D","XRA E","XRA H","XRA L","XRA M","XRA A"
460 DATA "ORA B","ORA C","ORA D","ORA E","ORA H","ORA L","ORA M","ORA A"
470 DATA "CMP B","CMP C","CMP D","CMP E","CMP H","CMP L","CMP M","CMP A"
480 DATA "RNZ","POP B","JNZ ++","JMP ++","CNZ ++","PUSH B","ADI +","RST 0"
490 DATA "RZ","RET","JZ ++","0","CZ ++","CALL ++","ACI +","RST 1"
500 DATA "RNC","POP D","JNC ++","OUT +","CNC ++","PUSH D","SUI +","RST 2"
510 DATA "RC","0","JC ++","IN +","CC ++","0","SBI +","RST 3"
520 DATA "RPO","POP H","JPO ++","XTHL","CPO ++","PUSH H","ANI +","RST 4"
530 DATA "RPE","PCHL","JPE ++","XCHG","CPE ++","0","XRI +","RST 5"
540 DATA "RP","POP PSW","JP ++","DI","CP ++","PUSH PSW","ORI +","RST 6"
550 DATA "RM","SPHL","JM ++","EI","CM ++","0","CPI +","RST 7"
570 NEXT L
580 PRINT TAB( 28)"WORKING"
590 NEXT M
600 INPUT "WHAT IS THE STARTING ADDRESS IN DECIMAL ?";AD
601 IF AD< > 0THEN T= AD:GOSUB 1100:AD$= H$:GOTO 610
605 INPUT "WHAT IS THE STARTING ADDRESS IN HEX ?";AD$
610 INPUT "WHAT IS THE SIZE IN BLOCKS FROM DISC DIRECTORY ? ";SZ$
620 INPUT "INPUT THE LAST BYTE COUNT FROM DIRECTORY ? ";BT$
625 GOSUB 50000:PRINT
630 H$= AD$:GOSUB 1000:AD= T
640 H$= SZ$:GOSUB 1000:SZ= T
650 H$= BT$:GOSUB 1000:BT= T
660 TM= AD+ ((SZ- 1)* 128)+ BT
665 CT= 7:REM  STARTING LINE COUNT FOR PAGING
670 FOR D= ADTO TM
675 IF CT> 59THEN CT= 0:FOR C6= 0TO 6:PRINT :NEXT C6
680 N= PEEK (D)
690 M= INT (N/ 16):L= N- (M* 16)
700 G$= D$(M,L)
710 IF RIGHT$ (G$,2)= "++"THEN 900
720 IF RIGHT$ (G$,1)= "+"THEN 800
730 PRINT D;:PRINT TAB( 8)N;
735 CT= CT+ 1
740 PRINT TAB( 26)G$;
745 IF N> 31AND N< 97THEN PRINT TAB( 45)CHR$ (N);
750 T= D:GOSUB 1100:PRINT TAB( 50)H$+ " ";
760 T= N:GOSUB 1100:PRINT H$
770 IF D> TMTHEN 985
780 NEXT D
790 GOTO 985
800 PRINT D;:PRINT TAB( 8)N;
810 CT= CT+ 1
820 PRINT  TAB( 12)PEEK (D+ 1);
830 PRINT TAB( 26)G$;
835 PRINT TAB( 36)PEEK (D+ 1);
836 IF N> 31AND N< 97THEN PRINT TAB( 45)CHR$ (N);
840 T= D:GOSUB 1100:PRINT TAB( 50)H$+ " ";
850 T= N:GOSUB 1100:PRINT H$+ " ";
860 T= PEEK (D+ 1):GOSUB 1100:PRINT H$
870 D= D+ 1:IF D> TMTHEN 985
880 NEXT D
890 GOTO 985
900 PRINT D;:PRINT TAB( 8)N;
910 CT= CT+ 1
920 PRINT  TAB( 12)PEEK (D+ 1);:PRINT PEEK (D+ 2);
930 PRINT TAB( 26)G$;
935 PRINT TAB( 35)PEEK (D+ 1)+ PEEK (D+ 2)* 256;
936 IF N> 31AND N< 97THEN PRINT TAB( 45)CHR$ (N);
940 T= D:GOSUB 1100:PRINT TAB( 50)H$+ " ";
950 T= N:GOSUB 1100:PRINT H$+ " ";
960 T= PEEK (D+ 1):GOSUB 1100:PRINT H$+ " ";
970 T= PEEK (D+ 2):GOSUB 1100:PRINT H$
975 D= D+ 2:IF D> TMTHEN 985
980 NEXT D
985 C= (D- AD- 1):T= C:GOSUB 1100
990 PRINT TAB( 15)"BYTE COUNT IS";C;"  ";"( ";H$+ " H )"
995 GOSUB 51000:END
1000 REM  HEX TO DECIMAL CONVERSION
1010 T= 0:E= 0:X= 1
1020 FOR I= LEN (H$)TO 1STEP - 1
1030 H= ASC (MID$ (H$,I,1))- 48:IF H> 9THEN H= H- 7
1040 IF (H< 0OR H> 15)THEN E= 1:RETURN
1050 T= T+ (H* X)
1060 X= X* 16
1070 NEXT I
1080 RETURN
1090 REM  DECIMAL TO HEX CONVERSION
1100 H$= "":X= 4096:E= 0:IF (T< 0OR T> 65535)THEN E= 1:RETURN
1110 IF T< 256THEN X= 16
1120 H= INT (T/ X):T= T- (H* X)
1130 H= H+ 48:IF H> 57THEN H= H+ 7
1140 H$= H$+ CHR$ (H)
1150 X= X/ 16:IF X< 1THEN RETURN
1160 GOTO 1120
1170 END
50000 REM  PRINTING SUBROUTINE
50010 INPUT "DO YOU WISH TO PRINT THE TABLE ? ( Y OR N ) ";PR$
50020 IF PR$< > "Y"THEN RETURN
50025 INPUT "SET BAUD RATE ";BR
50030 PLOT 14,27,18,BR,15
50040 POKE 33289,80
50050 PLOT 27,13:REM  ALL OUTPUT TO RS-232 PORT
50060 OUT 8,4:REM  DISABLE INTERUPTS
50070 RETURN
51000 REM  BACK TO BASIC SUBROUTINE
51010 OUT 8,255:REM  ENABLES ALL INTERUPTS
51020 POKE 33265,0:REM  RESTORES OUTPUT TO CRT
51030 RETURN