100 PRINT "ITTY BITTY DISASSEMBLER"
110 PRINT "COPYRIGHT 0 1981 T.PITTMAN"
120 PRINT 
130 PRINT "COLD START (HEX, USE LETTER OH FOR 0, END WITH X)"; 
140 GOSUB 8010 
150 IF V/256*256<>V THEN GOTO 120 
160 LET G=V+20
210 PRINT
220 PRINT "WHICH CPU (1802, 6502, 6800)";
230 INPUT M
240 IF M<>1802 IF M<>6502 IF M<>6800 THEN GOTO210
250 PRINT
260 PRINT "OFFSET (HEX, 0X IF NONE)";
270 GOSUB 8080 
280 LET Z=V 
320 PRINT 
330 PRINT " HEX STARTING ADDRESS"; 
340 GOSUB 8010 
350 LET P=V 
360 PRINT " HEX ENDING ADDRESS"; 
370 GOSUB 8080 
380 LET J=V 
390 IF P>J THEN GOTO210 
1000 REM MAIN INSTRUCTION DECODE 
1010 PRINT 
1020 IF P>J THENGOTO320 
1030 LET H=P 
1040 GOSUB 8810 
1050 GOSUB 3060 
1060 LET O=V 
1070 LET H=V 
1080 PRINT "  "; 
1090 GOSUB 8880 
1110 PRINT " "; 
1120 LET W=0 
1130 IF M=6502 THEN GOTO1410 
1140 IF M=1802 THEN GOTO1610 
1200 REM 6800 DECODE 
1210 IF O=33 THEN GOTO 9970 
1220 IF O=141 THEN LET O=33 
1230 LET I=O/16 
1240 IF I=2 THEN LET W=1 
1250 IF I<4 THEN GOTO 1330 
1260 LET O=O-I*16+I/8*16+64 
1270 IF I>5 THEN LET W=1 
1280 IF I/4*4+3=I THEN LET W=2 
1290 IF V=140 THEN LET W=2
1310 IF V=142 THEN LET W=2         
1320 IF V=206 THEN LET W=2 
1330 LET O=O+250 
1340 GOTO2010 
1400 REM 6502 DECODE 
1410 LET I=O-O/4*4 
1430 IF I=3 THEN GOTO 9970 
1440 IF O=32 THEN LET W=2 
1450 IF O-O/16*16>11 THEN LET W=2 
1460 IF O-O/32*32=25 THEN LET W=2 
1470 IF O-O/16*16-I/2*2=8 THEN GOTO 1510 
1480 IF O/32<4 THEN IF O=O/32*32 THEN GOTO 1510 
1490 IF W<>2 THEN LET W=1 
1510 LET O=O/32+I*8 
1520 IF V-V/32*32=16 THEN LET O=O+24 
1530 IF W=0 IF V-V/32*32-V/128<>10 THEN LET O=(V/16+I)*8-V/32*15+32 
1540 LET I=(V-V/32*32) /4 
1550 IF V=V/32*32 IF V<128 THEN LET O=V/32+48 
1560 LET O=O+500 
1570 GOTO2010 
1600 REM 1802 DECODE 
1610 LET O=V/16 
1620 LET I=V-O*16 
1630 IF O=12 THEN IF (V-V/8*8)/4=0 THEN LET W=2 
1640 IF O=3 THEN IF V<>56 THEN LET W=1 
1650 IF V=200 THEN LET W=0 
1660 IF O=7 THEN IF V<>126 THEN LET W=I/12 
1670 IF O=15 THEN IF V<>254 THEN LET W=I/8 
1680 IF O<16 THEN IF O-O/8*8=7 THEN LET O=V-W*8 
1690 IF V=0 THEN LET O=192
1710 IF W=2 THEN LET O=V-144
1720 IF V=96 THEN LET O=V
1730 IF V/2=106 THEN LET O=V
1740 IF V=254 THEN LET O=160
1750 IF O=3 THEN LET O=V
1760 IF O=12 THEN LET O=V
1770 IF O=6 THEN LET O=O+I/8
1780 IF O=212 THEN LET W=2
2000 REM DISPLAY OPERANDS
2010 IF W=0 THEN GOTO2160
2020 GOSUB 3060
2030 LET L=V
2040 LET H=V
2050 IF W=1 THEN GOTO2140
2060 GOSUB 8880
2070 GOSUB 3060
2080 IF M=6502 THEN GOTO2120
2090 LET L=L*256+V
2110 GOTO2140
2120 LET L=L+V*256
2140 LET H=V
2150 GOSUB 8880
2160 PRINT "",
2180 GOTO O*20+10010 
3000 REM FETCH OPCODE BYTE
3060 LET V=USR(G,P+Z)
3070 LET P=P+1
3080 RETURN
8000 REM INPUT HEX VALUE
8010 LET A=-10
8020 LET B=-11
8030 LET C=-12
8040 LET D=-13
8050 LET E=-14
8060 LET F=-15
8070 LET X=-999
8080 LET O=0
8090 LET V=0
8110 INPUT H
8120 IF H=X THEN RETURN
8130 IF H>999 THEN LET V=V*16
8140 IF H>99 THEN LET V=V*16
8150 IF H>9 THEN LET V=V*16
8160 LET V=V*16
8170 IF H>=0 THEN LET V=V+H+H/10*6+H/100*96+H/1000*1536
8180 IF H<0 THEN LET V=V-H
8190 GOTO 8110
8600 REM PRINT HEX VALUE
8620 PRINT "A";
8630 RETURN 
8650 PRINT "B"; 
8660 RETURN 
8680 PRINT "C"; 
8690 RETURN 
8710 PRINT "D"; 
8720 RETURN 
8740 PRINT "E"; 
8750 RETURN 
8770 PRINT "F"; 
8780 RETURN 
8810 LET X=H/4096 
8820 IF H<0 THEN LET X=(H-16384*2)/4096+8 
8830 LET H=H-X*4096 
8840 GOSUB8950 
8850 LET X=H/256 
8860 LET H=H-X*256 
8870 GOSUB 8950 
8880 LET X=H/16 
8930 GOSUB 8950 
8940 LET X=H-X*16 
8950 IF X>9 THEN GOTO X*30+8320 
8960 PRINT X; 
8970 RETURN 
9900 REM ILLEGAL OPCODE 
9970 PRINT "", 
9980 PRINT "***"
9990 GOTO 1020 
10000 REM 1802 MNEMONICS 
10010 PRINT "LD","@";
10020 GOTO 10330 
10030 PRINT "INC", 
10040 GOTO 10330
10050 PRINT "DEC",
10060 GOTO 10330
10090 PRINT "LD","(";I;")+"
10100 GOTO 1020
10110 PRINT "ST","@";
10120 GOTO 10330 
10130 PRINT "OUT",I 
10140 GOTO 1020 
10150 PRINT "IN",I-8 
10160 GOTO 1020 
10170 PRINT "LDLO", 
10180 GOTO 10330 
10190 PRINT "LDHI", 
10200 GOTO 10330 
10210 PRINT "STLO", 
10220 GOTO 10330 
10230 PRINT "STHI", 
10240 GOTO 10330 
10270 PRINT "CALL","@"; 
10280 GOTO 10330 
10290 PRINT "LD","#";I;",.X"
10300 GOTO 1020 
10330 PRINT ".";I 
10340 GOTO 1020 
10810 IF W=2 THEN GOTO 10850 
10820 IF P<0 THEN LET L=L-(-P-256)/256*256-256 
10830 IF P>0 THEN LET L=L+P/256*256 
10840 GOTO 10860 
10850 PRINT "/"; 
10860 LET H=L 
10870 GOSUB 8810 
10880 GOTO 1010 
10970 PRINT "BR", 
10980 GOTO 10810 
10990 PRINT "BQ", 
11000 GOTO 10810 
11010 PRINT "BZ", 
11020 GOTO 10810 
11030 PRINT "BC", 
11040 GOTO 10810 
11050 PRINT "BX1", 
11060 GOTO 10810 
11070 PRINT "BX2", 
11080 GOTO 10810 
11090 PRINT "BX3", 
11100 GOTO 10810 
11110 PRINT "BX4", 
11120 GOTO 10810 
11130 PRINT "SKIP",1
11140 GOTO 1020 
11150 PRINT "BNQ", 
11160 GOTO 10810 
11170 PRINT "BNZ", 
11180 GOTO 10810  
11190 PRINT "BNC", 
11200 GOTO 10810 
11210 PRINT "BNX1", 
11220 GOTO 10810 
11230 PRINT "BNX2", 
11240 GOTO 10810 
11250 PRINT "BNX3", 
11260 GOTO 10810 
11270 PRINT "BNX4", 
11280 GOTO 10810 
11930 PRINT "INC","@.X"   
11940 GOTO 1020 
12250 PRINT "EI" 
12260 GOTO 1020 
12270 PRINT "DI" 
12280 GOTO 1020 
12290 PRINT "POP" 
12300 GOTO 1020 
12310 PRINT "PUSH" 
12320 GOTO 1020 
12330 PRINT "ADDC", 
12340 GOTO 12560 
12350 PRINT "SUBRC", 
12360 GOTO 12560 
12370 PRINT "RORC", 
12380 GOTO 1020 
12390 PRINT "SUBC", 
12400 GOTO 12560 
12410 PRINT "PUSH",".T" 
12420 GOTO 1020 
12430 PRINT "PUSH",".XP" 
12440 GOTO 1020 
12450 PRINT "CLR",".Q" 
12460 GOTO 1020 
12470 PRINT "SET","A" 
12480 GOTO 1020 
12530 PRINT "ROLC" 
12540 GOTO 1020 
12560 IF W=0 THEN GOTO 1010 
12570 PRINT "#"; 
12580 LET H=L 
12590 GOSUB 8880 
12610 GOTO 1010 
13210 PRINT "SHL" 
13220 GOTO 1020 
13850 PRINT "WAIT" 
13860 GOTO 1020 
13930 PRINT "NOP" 
13940 GOTO 1020 
13950 PRINT "SKNQ" 
13960 GOTO 1020 
13970 PRINT "SKNZ" 
13980 GOTO 1020 
13990 PRINT "SKNC" 
14000 GOTO 1020 
14010 PRINT "SKIP",2 
14020 GOTO 1020 
14090 PRINT "SKIE" 
14100 GOTO 1020 
14110 PRINT "SKQ" 
14120 GOTO 1020 
14130 PRINT "SKZ" 
14140 GOTO 1020 
14150 PRINT "SKC" 
14160 GOTO 1020 
14250 PRINT "CALL", 
14260 GOTO 10810 
14270 PRINT "RET" 
14280 GOTO 1020 
14810 PRINT "LD", 
14820 GOTO 12560 
14830 PRINT "OR", 
14840 GOTO 12560 
14850 PRINT "AND", 
14860 GOTO 12560 
14870 PRINT "XOR", 
14880 GOTO 12560 
14890 PRINT "ADD", 
14900 GOTO 12560 
14910 PRINT "SUBR", 
14920 GOTO 12560 
14930 PRINT "SHR" 
14940 GOTO 1020 
14950 PRINT "SUB", 
14960 GOTO 12560 
15000 REM 6800 MNEMONICS 
15010 GOTO 9980 
15030 PRINT "NOP" 
15040 GOTO 1020 
15050 REM 
15070 REM 
15090 REM 
15110 GOTO 9980 
15130 PRINT "MOV",".A,.P" 
15140 GOTO 1020 
15150 PRINT "MOV",".P,.A" 
15160 GOTO 1020 
15170 PRINT "INC",".X" 
15180 GOTO 1020 
15190 PRINT "DEC",".X" 
15200 GOTO 1020 
15210 PRINT "CLRV" 
15220 GOTO 1020 
15230 PRINT "SETV" 
15240 GOTO 1020 
15250 PRINT "CLRC" 
15260 GOTO 1020 
15270 PRINT "SETC" 
15280 GOTO 1020 
15290 PRINT "EI" 
15300 GOTO 1020 
15310 PRINT "DI" 
15320 GOTO 1020 
15330 PRINT "SUB",".B,.A" 
15340 GOTO 1020 
15350 PRINT "CMP",".B,.A" 
15360 GOTO 1020 
15370 REM 
15390 REM 
15410 REM 
15430 GOTO 9980 
15450 PRINT "MOV",".A,.B" 
15460 GOTO 1020 
15470 PRINT "MOV",".B,.A" 
15480 GOTO 1020 
15490 GOTO 9980 
15510 PRINT "ADJ" 
15520 GOTO 1020 
15530 GOTO 9980 
15550 PRINT "ADD",".B,.A" 
15560 GOTO 1020 
15570 REM 
15590 REM 
15610 REM 
15630 GOTO 9980 
15650 PRINT "BR", 
15660 GOTO 18010 
15670 PRINT "CALL", 
15680 GOTO 18010
15690 PRINT "BH",
15700 GOTO 18010
15710 PRINT "BNH",
15720 GOTO 18010
15730 PRINT "BNC",
15740 GOTO 18010
15750 PRINT "BC",
15760 GOTO 18010
15770 PRINT "BNZ",
15780 GOTO 18010
15790 PRINT "BZ",
15800 GOTO 18010
15810 PRINT "BNV",
15820 GOTO 18010
15830 PRINT "BV,
15840 GOTO 18010
15850 PRINT "BP",
15860 GOTO 18010
15870 PRINT "BM",
15880 GOTO 18010
15890 PRINT "BGE",
15900 GOTO 18010
15910 PRINT "BLT",
15920 GOTO 18010
15930 PRINT "BGT",
15940 GOTO 18010
15950 PRINT "BLE",
15960 GOTO 18010
15970 PRINT "MOV",".S,.X"
15980 GOTO 1020
15990 PRINT "INC",".S"
16000 GOTO 1020
16010 PRINT "POP",".A"
16020 GOTO 1020
16030 PRINT "POP",".B"
16040 GOTO 1020
16050 PRINT "DEC",".S"
16060 GOTO 1020
16070 PRINT "MOV",".X,.S"
16080 GOTO 1020
16090 PRINT "PUSH",".A"
16100 GOTO 1020
16110 PRINT "PUSH",".B"
16120 GOTO 1020
16130 GOTO 9980
16150 PRINT "RET"
16160 GOTO 1020
16170 GOTO 9980
16190 PRINT "RETI"
16200 GOTO 1020
16210 REM
16230 GOTO 9980
16250 PRINT "WAIT"
16260 GOTO 1020
16270 PRINT "BRK"
16280 GOTO 1020
16290 PRINT "NEG",
16300 GOTO 16970
16310 REM
16330 GOTO 9980
16350 PRINT "NOT",
16360 GOTO 16970
16370 PRINT "SHR",
16380 GOTO 16970
16390 GOTO 9980
16410 PRINT "ROR",
16420 GOTO 16970
16430 PRINT "SHRA",
16440 GOTO 16970
16450 PRINT "SHL",
16460 GOTO 16970
16470 PRINT "ROL",
16480 GOTO 16970
16490 PRINT "DEC",
16500 GOTO 16970
16510 GOTO 9980
16530 PRINT "INC",
16540 GOTO 16970
16550 PRINT "TST",
16560 GOTO 16970
16570 PRINT "BR",
16580 GOTO 16970
16590 PRINT "CLR",
16600 GOTO 16970
16610 PRINT "SUB",
16620 GOTO 17010
16630 GOTO 16850
16650 PRINT "SUBC",
16660 GOTO 17010
16670 GOTO 9980
16690 PRINT "AND",
16700 GOTO 17010
16710 PRINT "TST",
16720 GOTO 16950
16730 GOTO 16890
16750 GOTO 16910
16770 PRINT "XOR",
16780 GOTO 17010
16790 PRINT "ADDC",
16800 GOTO 17010
16810 PRINT "OR",
16820 GOTO 17010
16830 PRINT "ADD",
16840 GOTO 17010
16850 PRINT "CMP",
16860 GOTO 16950
16870 PRINT "CALL",
16880 GOTO 17050
16890 PRINT "LD",
16900 GOTO 17010
16910 PRINT "ST",
16950 GOSUB 17110
16960 PRINT ",";
16970 IF I>5 THEN GOTO 17050 
16980 GOSUB I*20+17050
16990 GOTO 1010
17010 GOSUB 17310
17020 PRINT ",";
17030 GOSUB 17110
17040 GOTO 1010
17050 GOSUB 17310
17060 GOTO 1010
17100 REM PRINT SELECTED REGISTER
17110 IF O>=342 THEN GOTO 17170
17120 IF I>11 THEN GOTO 17150
17130 PRINT ".A";
17140 RETURN
17150 PRINT ".B";
17160 RETURN
17170 IF O>342 THEN IF I<12 THEN GOTO 17210
17180 PRINT ".X";
17190 RETURN
17210 PRINT ".S";
17220 RETURN
17300 REM PRINT ADDRESSING MODE
17310 LET H=L
17320 GOTO (I-I/4*4)*100+17410
17410 PRINT "#";
17420 GOTO 8950-W*70
17510 PRINT "!";
17520 GOTO 8810
17610 PRINT L;"(.X)";
17620 RETURN
17710 PRINT "/";
17720 GOTO 8810
18010 PRINT "$";
18020 LET H=P+L-L/128*256
18030 GOSUB 8810
18040 GOTO 1010
20000 REM 6502 MNEMONICS
20010 GOTO 9980
20030 PRINT "TST",
20040 GOTO 21310
20050 PRINT "BR",
20060 GOTO 21310
20070 PRINT "BR","@";
20080 GOTO 21310
20090 PRINT "ST",".Y,";
20100 GOTO 21310
20110 PRINT "LD",
20120 GOTO 21310
20130 PRINT "CMP",".Y,";
20140 GOTO 21310
20150 PRINT "CMP",".X,";
20160 GOTO 21310
20170 PRINT "OR",
20180 GOTO 21310
20190 PRINT "AND",
20200 GOTO 21310
20210 PRINT "XOR",
20220 GOTO 21310
20230 PRINT "ADDC",
20240 GOTO 21310
20250 PRINT "ST",".A,";
20260 GOTO 21310
20270 PRINT "LD",
20280 GOTO 21310
20290 PRINT "CMP",".A,";
20300 GOTO 21310
20310 PRINT "SUBC",
20320 GOTO 21310
20330 PRINT "SHL",
20340 GOTO 21310
20350 PRINT "ROL",
20360 GOTO 21310 
20370 PRINT "SHR",
20380 GOTO 21310
20390 PRINT "ROR",
20400 GOTO 21310
20410 PRINT "ST",".X,";
20420 GOTO 21310
20430 PRINT "LD",
20440 GOTO 21310
20450 PRINT "DEC",
20460 GOTO 21310
20470 PRINT "INC",
20480 GOTO 21310
20490 PRINT "BP",
20500 GOTO 18010
20510 PRINT "BM",
20520 GOTO 18010
20530 PRINT "BNV",
20540 GOTO 18010
20550 PRINT "BV,
20560 GOTO 18010
20570 PRINT "BNC",
20580 GOTO 18010
20590 PRINT "BC",
20600 GOTO 18010
20610 PRINT "BNZ",
20620 GOTO 18010
20630 PRINT "BZ",
20640 GOTO 18010
20650 PRINT "PUSH",".P"
20660 GOTO 1020
20670 PRINT "POP",".P"
20680 GOTO 1020
20690 PRINT "PUSH",".A"
20700 GOTO 1020
20710 PRINT "POP",".A"
20720 GOTO 1020
20730 PRINT "DEC",".Y"
20740 GOTO 1020
20750 PRINT "MOV",".A,.Y"
20760 GOTO 1020
20770 PRINT "INC",".Y"
20780 GOTO 1020
20790 PRINT "INC",".X"
20800 GOTO 1020
20810 PRINT "CLRC"
20820 GOTO 1020
20830 PRINT "SETC"
20840 GOTO 1020
20850 PRINT "EI"
20860 GOTO 1020
20870 PRINT "DI"
20880 GOTO 1020
20890 PRINT "MOV",".Y,.A"
20900 GOTO 1020 
20910 PRINT "CLRV"
20920 GOTO 1020
20930 PRINT "CLRD"
20940 GOTO 1020
20950 PRINT "SETD"
20960 GOTO 1020
20970 PRINT "BRK"
20980 GOTO 1020
20990 PRINT "CALL",
21000 GOTO 21550
21010 PRINT "RETI"
21020 GOTO 1020
21030 PRINT "RET"
21040 GOTO 1020
21050 PRINT "MOV",".X,.A"
21060 GOTO 1020
21070 PRINT "MOV",".A,.X"
21080 GOTO 1020
21090 PRINT "DEC",".X"
21100 GOTO 1020
21110 PRINT "NOP"
21120 GOTO 1020
21130 REM
21150 REM
21170 REM
21190 GOTO 9980
21210 PRINT "MOV",".X,.S"
21220 GOTO 1020
21230 PRINT "MOV",".S,.X"
21240 GOTO 1020
21250 REM
21270 GOTO 9980
21300 REM ADDRESSING MODES
21310 LET H=L
21320 GOSUB I*50+21410
21330 IF O-O/8*8=1 THEN GOSUB O/4*10+20090
21340 GOTO 1010
21350 PRINT ",.Y";
21360 RETURN
21370 PRINT ",.A;
21380 RETURN
21390 PRINT ",.X;
21400 RETURN
21410 IF (O-500)/8=1 THEN GOTO 21860
21420 PRINT "#";
21430 GOTO 8880
21460 PRINT "!";
21470 GOTO 8880
21510 IF O<516 THEN GOTO 21420
21520 PRINT ".A";
21530 RETURN
21550 LET H=L
21560 PRINT "/";
21570 GOTO 8810 
21610 PRINT "@!";
21620 GOTO 21770
21660 PRINT "!";
21670 GOTO 21770
21710 REM
21760 PRINT "/";
21770 GOSUB 8810
21780 IF I/2*2=I THEN GOTO 21810
21790 PRINT "(.X)";
21800 RETURN
21810 PRINT "(.Y)";
21820 RETURN
21860 PRINT "!";
21870 GOSUB 8880
21880 PRINT "(.X)@";
21890 RETURN
