1000 REM 1010 REM (( DIS ASSEMBLER FOR PC-8201A )) 1020 REM 1030 REM 1040 CLEAR 4000:DEFINT A-Z:DEFSNG S:SCREEN 0,1:CLS:PRINT "[[[ 8085 DISASSEMBLER ]]]":GOSUB 2680:REM INITIALIZE VARIABLES 1120 PRINT 1130 PRINT"Command: "; 1140 PRINT"[P] toggle printer on/off 1150 PRINT TAB(11);"[L] disassemble 1160 PRINT TAB(11);"[M] menu 1170 REM 1180 ST=0:LP=0 1190 OD$="]" 1200 KEY 10,"Menu"+CHR$(13) 1210 REM 1220 REM Main loop 1230 REM 1240 OF=0 1250 PRINT OD$; 1260 LINE INPUT CM$ 1270 REM 1280 IF CM$<>"P" AND CM$<>"p" THEN 1310 1290 IF LP=1 THEN LP=0:OD$="]" ELSE LP=1:OD$=")" 1300 GOTO 1240 1310 IF CM$="l" OR CM$="L" OR CM$="" THEN C=0:SS=ST:GOTO 1560 1320 REM L command 1330 C$=LEFT$(CM$,1) 1340 IF C$="M" OR C$="m" THEN MENU 1350 IF C$="l" OR C$="L" THEN 1390 1360 REM Command error 1370 PRINT "Error!":BEEP 1380 GOTO 1240 1390 REM Lxxxx,xxxx 1400 CM$=MID$(CM$,2) 1410 C=INSTR(CM$,",") 1420 IF C=1 THEN SS=ST:GOTO 1450 1430 IF C=0 THEN A1$=CM$:GOTO 1510 ELSE A1$=LEFT$(CM$,C-1) 1440 REM 1450 A2$=MID$(CM$,C+1) 1460 S$=A2$ 1470 GOSUB 2360 1480 IF S=-1 THEN 1370 1490 SE=S 1500 IF C=1 THEN 1570 1510 S$=A1$ 1520 GOSUB 2360 1530 IF S=-1 THEN 1370 1540 SS=S 1550 IF C>0 THEN 1570 1560 SE=65535! 1570 IF SE5 AND C=0 THEN 1690 1680 IF SA=65535! THEN SA=0:OF=1 1830 D=DT:GOSUB 2490 1840 D1$=D$ 1850 IF DT<64 OR DT>127 THEN 1930 1860 REM Move x,x 1870 IF DT=118 THEN M$="HLT":GOTO 2330 1880 R1=(DT AND 56)/8 1890 R2=(DT AND 7) 1900 M$="MOV "+RG$(R1)+","+RG$(R2) 1910 GOTO 2330 1920 REM 1930 IF DT<128 OR DT>191 THEN 2000 1940 REM MMM rg 1950 OP=(DT AND 56)/8 1960 R=(DT AND 7) 1970 M$=M1$(OP)+RG$(R) 1980 GOTO 2330 1990 REM 2000 IF DT>191 THEN DT=DT-128 2010 TP=TP(DT) 2020 IF TP>27 THEN 2070 2030 REM No opr 2040 M$=M2$(TP) 2050 GOTO 2330 2060 REM 2070 IF TP<240 THEN 2120 2080 REM Rst 2090 M$="RST "+STR$(TP-240) 2100 GOTO 2330 2110 REM 2120 IF TP<150 THEN 2190 2130 REM mmm rg 2140 R=TP MOD 10 2150 M$=MR$((TP/10)-15)+RG$(R) 2160 GOTO 2330 2170 REM 2180 REM mmm [rg,] xx[xx]h 2190 TP=TP-100 2200 D=PEEK(SA) 2210 SA=SA+1 2220 IF SA>65535! THEN SA=0:OF=1 2230 GOSUB 2490 2240 D2$=D$ 2250 IF TP<18 THEN 2310 2260 D=PEEK(SA) 2270 SA=SA+1 2280 IF SA>65535! THEN SA=0:OF=1 2290 GOSUB 2490 2300 D3$=D$ 2310 M$=MB$(TP)+D3$+D2$+"H" 2320 REM Make dm$ 2330 SP$=STRING$(9-LEN(D2$+D3$)," ") 2340 DM$=D1$+D2$+D3$+SP$+M$ 2350 RETURN 2360 REM 2370 REM Hex$ to decimal 2380 REM 2390 S$=RIGHT$("0000"+S$,4) 2400 S=0 2410 FOR I = 1 TO 4 2420 V$=MID$(S$,I,1) 2430 VL=INSTR("0123456789ABCDEFabcdef",V$)-1 2440 IF VL<0 OR VL>21 THEN I=4:S=-1:GOTO 2470 2450 IF VL>15 THEN VL=VL-6 2460 S=S*16+VL 2470 NEXT I 2480 RETURN 2490 REM 2500 REM Decimal to hex$(2) 2510 REM 2520 H=D/16 2530 IF H>9 THEN H=H+7 2540 L=D MOD 16 2550 IF L>9 THEN L=L+7 2560 D$=CHR$(H+48)+CHR$(L+48) 2570 RETURN 2580 REM 2590 REM Decimal to hex$(4) 2600 REM 2610 D=INT(S/256) 2620 GOSUB 2520 2630 W$=D$ 2640 D=S-D*256 2650 GOSUB 2520 2660 S$=W$+D$ 2670 RETURN 2680 REM 2690 REM initialize variables 2700 REM 2710 REM 2720 DIM TP(127) 2730 RESTORE 3120 2740 FOR I = 0 TO 127 2750 READ TP(I) 2760 NEXT I 2770 REM 2780 DIM RG$(9) 2790 RESTORE 3290 2800 FOR I =0 TO 9 2810 READ RG$(I) 2820 NEXT I 2830 REM 2840 DIM M1$(7) 2850 RESTORE 3340 2860 FOR I =0 TO 7 2870 READ M1$(I) 2880 NEXT I 2890 REM 2900 DIM M2$(27) 2910 RESTORE 3390 2920 FOR I = 0 TO 27 2930 READ M2$(I) 2940 NEXT I 2950 REM 2960 DIM MB$(43) 2970 RESTORE 3510 2980 FOR I = 0 TO 43 2990 READ MB$(I) 3000 NEXT I 3010 REM 3020 DIM MR$(8) 3030 RESTORE 3710 3040 FOR I = 0 TO 8 3050 READ MR$(I) 3060 NEXT I 3070 REM 3080 RETURN 3090 REM 3100 REM Type table TP() 3110 REM (0 to 63) 3120 DATA 1,140,150,160,170,180,110,2 3130 DATA 0,190,200,210,171,181,111,3 3140 DATA 0,141,152,162,172,182,112,4 3150 DATA 0,192,202,212,173,183,113,5 3160 DATA 26,142,118,164,174,184,114,6 3170 DATA 0,194,119,214,175,185,115,7 3180 DATA 27,143,120,166,176,186,116,8 3190 DATA 0,199,121,219,177,187,117,9 3200 REM (64 to 127) 3210 DATA 11,220,122,123,124,230,100,240 3220 DATA 12,13,125,0,126,127,101,241 3230 DATA 14,222,128,102,129,232,103,242 3240 DATA 15,0,130,109,131,0,104,243 3250 DATA 16,224,132,17,133,234,105,244 3260 DATA 18,19,134,20,135,0,106,245 3270 DATA 21,228,136,22,137,238,107,246 3280 DATA 23,24,138,25,139,0,108,247 3290 REM Data for rg$() 3300 DATA "B","C","D","E","H","L" 3310 DATA "M","A","PSW","SP" 3320 REM Data for M1$() 3330 REM mmmm reg 3340 DATA "ADD ","ADC ","SUB " 3350 DATA "SBB ","ANA ","XRA " 3360 DATA "ORA ","CMP " 3370 REM Data for M2$() 3380 REM mmmm (0 to 127) 3390 DATA "??? ","NOP ","RLC " 3400 DATA "RRC ","RAL ","RAR " 3410 DATA "DAA ","CMA ","STC " 3420 DATA "CMC ","HLT ","RNZ " 3430 DATA "RZ ","RET ","RNC " 3440 DATA "RC ","RPO ","XTHL " 3450 DATA "RPE ","PCHL ","XCHG " 3460 DATA "RP ","DI ","RM " 3470 DATA "SPHL ","EI ","RIM " 3480 DATA "SIM " 3490 REM Data for MB$() 3500 REM mmm xxh (100 to 117) 3510 DATA "ADI ","ACI ","OUT " 3520 DATA "SUI ","SBI ","ANI " 3530 DATA "XRI ","ORI ","CPI " 3540 DATA "IN " 3550 DATA "MVI B,","MVI C,","MVI D," 3560 DATA "MVI E,","MVI H,","MVI L," 3570 DATA "MVI M,","MVI A," 3580 REM mmm xxxxh (118 to 143) 3590 DATA "SHLD ","LHLD ","STA " 3600 DATA "LDA ","JNZ ","JMP " 3610 DATA "CNZ ","JZ ","CZ " 3620 DATA "CALL ","JNC ","CNC " 3630 DATA "JC ","CC ","JPO " 3640 DATA "CPO ","JPE ","CPE " 3650 DATA "JP ","CP ","JM " 3660 DATA "CM " 3670 DATA "LXI B,","LXI D,","LXI H," 3680 DATA "LXI SP," 3690 REM Data for MR$() 3700 REM mmmm reg (15x to 23x) 3710 DATA "STAX ","INX ","INR " 3720 DATA "DCR ","DAD ","LDAX " 3730 DATA "DCX ","POP ","PUSH " 3740 REM 3750 REM 3760 REM Copyright (C) 1983 3770 REM by K. Kuriyama 3780 REM 3790 END