|
 |
 |
Appendix D
Note: The ^ means "to the power
of" as in 2 ^ 2=4.
Program D-I . Disassembler (VIC,
PET, Apple, 64 Version).
1
HE$="0123456789ABCDEF" 2
L$="------------------------------------ ---" 4
J$=" --->" 13 PRINT" DISASSEMBLER
14 PRINT 16 DIMM$(15,15) 17
FORI=0TO15:FORB=0TO14:READM$(I,B):NEXTB:
NEXTI 25 REM START MAIN LOOP 30 PRINT"STARTING ADDRESS
(DECIMAL)";:INPUT SA:TA=SA 31 PRINT"START
ADDRESS HEX ";:DE=SA:ZX=3:G
OSUB1200:PRINTH$" " 35 IFSA<0THENEND 41 I=SA 45
REM PRINT ADDRESS 46 PRINTI" "; 50 X=PEEK(I) 55 GOSUB5000
56 IFL%=15ORM$(H%,L%)="0"THENPRINT" ? "
X:CK=0:LN=LN+1:GOTO70 58
PRINTM$(H%,L%); 60 GOSUB6000:IFEQTHENEQ=O 70 I=I+1 72
IFLN=20THENLN=0:GOTO2000 80 GOTO45 600 IFCK=12THEN603 601
B=PEEK(I+1):IFB>127THENB=((NOTB)AND255)+
1:B=-B 602 BAD=I+2+B:PRINT"
"BAD:I=I+1:RETUR N 603
IFH%>8THEN800 604 IFH%=2THENJ=1:GOTO850 605
IFH%=6THENPRINT:PRINTL$:EQ=1:RETURN 606 IFH%=6THENRETURN 607
PRINT 608 RETURN 610 IFCK=12THEN615 611 PRINT"
("PEEK(I+1)"),Y" 612 I=I+1:RETURN 615 PRINT" ("PEEK(I+1)",X)"
616 I=I+1:RETURN 630 IFCK=12THEN635 631 PRINT"
"PEEK(I+1)",X" 632 I=I+1:RETURN 635 PRINT" "PEEK(I+1) 636
I=I+1:RETURN 640 IFCK=12THEN645 641 PRINT" "PEEK(I+1)",X"
642 I=I+1:RETURN 645 PRINT" "PEEK(I+l) 646
I=I+1:RETURN 660 IFCK=12THEN645 661 IFH%=90RH%=11THENPRINT"
"PEEK(I+1)",Y" 662 IFH%=70RH%=150H%=50RH%=3THEN640 663
IFH%=13THEN631 664 PRINT:GOTO642 680 PRINT: RETURN 690
IFCK=12THEN800 691 I$="Y":GOTO850 720 IFCK=12THEN725 722
I$="X":GOTO850 725 IFH%=6THENPRINT" (IND. ";:I=I+l 726
IFH%=2THEN850 727 IFH%=4THENPRINTJ$;:GOTO850 728
IFH%=8ORH%=10ORH%=12ORH%=14THEN850 729 GOTO610 730
IFCK=12THEN850 731 I$="X":GOTO850 740 IFCK=12THEN850 741
IFH%=11THENI$="Y":GOTO850 742 I$="X":GOTO850 800 PRINT"
#"PEEK(I+1) 801 I=I+1:RETURN 850
N=PEEK(I+1)+PEEK(I+2)*256 860 IFI$=""THEN900 870
IFI$="X"THENPRINT" "N",X" 880 IFI$="Y"THENPRINT" "N",Y" 890
I$="":I=I+2:RETURN 900 PRINT" "N:I=I+2 906
RETURN 1000 DATABRK,ORA,0,0,0,ORA,ASL,0,PHP,ORA,ASL,
0,0,ORA,ASL,BPL,ORA,0,0,0,ORA,ASL 1010
DATA0,CLC,ORA,0,0,0,ORA,ASL,JSR,AND,0,0,
BIT,AND,ROL,0,PLP,AND,ROL,0,BIT 1020
DATAAND,ROL,BMI,AND,0,0,0,AND,ROL,0,SEC,
AND,0,0,0,AND,ROL,RTI,EOR,0,0,0 1030
DATAEOR,LSR,0,PHA,EOR,LSR,0,JMP,EOR,LSR,
BVC,EOR,0,0,0,EOR,LSR,0,CLI,EOR,0 1040
DATA0,0,FOR,LSR,RTS,ADC,0,0,0,ADC,ROR,0,
PLA,ADC 1045 DATAROR,0,JMP,ADC,ROR,BVS,ADC,0,0,0 1050
DATAADC,ROR,0,SEI,ADC,0,0,0,ADC,ROR,0,ST
A 1055 DATA0,0,STY,STA,STX,0,DEY,0,TXA,0,STY,ST
A 1060
DATASTX,BCC,STA,0,0,STY,STA,STX,0,TYA,ST
A,TXS,0,0,STA,0,LDY,LDA,LDX,0 1070
DATALDY,LDA,LDX,0,TAY,LDA,TAX,0,LDY,LDA,
LDX,BCS,LDA,0,0,LDY,LDA,LDX,0 1080 DATACLV,LDA,TSX,0 1090
DATALDY,LDA,LDX,CPY,CMP,0,0,CPY,CMP,DEC,
0,INY,CMP,DEX,0,CPY,CMP,DEC 1095
DATABNE,CMP,0,0,0,CMP,DEC,0,CLD,CMP,0,0,
0,CMP,DEC,CPX,SBC,0,0,CPX,SBC,INC 1098
DATA0,INX,SBC,NOP,0,CPX,SBC,INC,BEQ,SBC,
0,0,0,SBC,INC,0,SED,SBC,0,0,0,SBC 1099 DATAINC 1200 REM MAKE
DECIMAL INTO HEX 1201 H$="":FORM=ZXTO0STEP-1:N%=DE/(16^M):DE=D
E-N%*16^M:H$=H$+MID$(HE$,N%+1,1) 1202
NEXT:RETURN 2000 PRINT"TYPE C TO CONTINUE FROM" I 2001
GETK$:IFK$=""THEN2001 2002 IFK$="C"THENSA=I:TA=SA:GOTO35 2003
INPUTSA:TA=SA:GOTO35 5000 REM ANALYZE H & L OF OPCODE
5010 H%=X/16:L%=X-H%*16 5020 :RETURN 6000 REM FIND ADDRESS
TYPE & GOSUB 6020 CK=H%/2:IFCK=INT(CK)THENCK=12 6025
L%=L%+1 6030 ONL%GOSUB600,610,800,6050,640,640,660,60
50,680,690,680,6050,720,730,740 6040
CK=0 6045 LN=LN+l 6050 RETURN
Program D-2. Atari Disassembler.
100 REM 105 GRAPHICS 0:POSITION 11,0:? " ":? :? "Loading opc
odes..." 110 DIM OPCODE$(256*10),LN(255),NB(25
5),T$(10),D$(5) 120 FOR I=0 TO 255 125
READ T$,NB 130 LN(I)=LEN(T$) 140
OPCODE$(I*10+1,I*10+LN(I))=T$ 150 NB(I)=NB 160 NEXT I 170
GRAPHICS 0:POSITION 11,0:? " 180 ? :? 190 TRAP 190:? "{UP}{DEL LINE}Startin
g Address (Decimal)";:INPUT ADDR:
TRAP 40000 200 IF ADDR<0 OR
ADDR>65535 THEN 190 210 OP=PEEK(ADDR):NB=NB(OP) 220
T$=OPCODE$(OP*10+1,OP*10+LN(OP)) 230 PRINT ADDR;:POKE
85,10:PRINT OP;: POKE 85,15 240 ON NB+2
GOTO 242,244,250,260,270 242 NB=2:T=PEEK(ADDR+1):IF T>128
THEN T=T-256 243 PRINT T;:POKE 85,20:PRINT
T$;" " ;ADDR+2+T:GOTO 300 244 ? " ":NB=1:GOTO 300 246 PRINT T$;" ";ADDR+2+T:GOTO
300 250 POKE 85,20:PRINT T$:GOTO 300 260 PRINT
PEEK(ADDR+1);:POKE 85,20:D$
=STR$(PEEK(ADDR+1)):GOSUB 400:GOT 0
300 270 PRINT PEEK(ADDR+1);:POKE 85,15:PR
INT PEEK(ADDR+2);:POKE 85,20 280
D$=STR$((PEEK(ADDR+1)+256*PEEK(AD
DR+2))):GOSUB 400 300 ADDR=ADDR+NP:IF ADDR=<0 THEN ADDR=
65536-T 310 IF ADDR>65535 THEN ADDR=T
320 IF PEEK(53279)=7 THEN 210 330 GOTO 190 400 ?
T$(1,4+(LN(OP)>4));D$;T$(4+2*(L
N(OP)>5)):RETURN 500 DATA BRK,1,ORA
(X),2,?,0,?,0,?,0, ORA ,2,ASL
,2,?,0,PHP,1,ORA # , 2 510 DATA ASL
A,1,?,0,?,0,ORA ,3,ASL
,3,?,0,BPL,-1,ORA ()Y,2,?,0,?,0 520 DATA ?,0,ORA X,2,ASL
X,2,?,0,CL C,1,ORA
Y,3,?,0,?,0,?,0,ORA X,3 530 DATA ASL ,2,?,0,JSR
,3,AND (X),2 ,?,0,?,0,BIT ,2,AND ,2,ROL
,2,?,0 540 DATA PLP,1,AND # ,2,ROL A,1,?,0,B
IT ,3,AND ,3,ROL
,3,?,0,BMI,-1,AN D ()Y,2 550 DATA
?,0,?,0,?,0,AND X,2,ROL X,
2,?,0,SEC,1,AND Y,3,CLI,1,?,0 560 DATA ?,0,AND
X,3,ROL X,3,?,0,RT I,1,EOR
(X),2,?,0,?,0,?,0,EOR ,2 570 DATA LSR
,2,?,0,PHA,1,EOR # ,2,L SR
,3,?,0,JMP ,3,EOR ,3,LSR ,
3,?,0 580 DATA BVC,-1,EOR ()Y,2,?,0,?,0,?,0
,EOR X,2,LSR X,2,?,0,CLI,1,EOR
Y,2 590 DATA ?,0,?,0,?,0,EOR X,3,LSR
X, 3,?,0,RTS,1,ADC (X),2,?,0,?,0 600
DATA ?,0,ADC ,2,ROR ,2,?,0,PLA,
1,ADC # ,2,ROR A,1,?,0,JMP (),108 ,ADC
,3 610 DATA ROR ,3,?,0,BVS,-l,ADC ()Y,2
,?,0.?.0.?,0,ADC X,2,ROR
X,2,?, 0 620 DATA SEI,1,ADC
Y,0,?,0,?,0,?,0,A DC
X,3,ROR X,3,?,0,?,0,STA (X), 2 630
DATA ?,0,?,0,STY ,2,STA ,2,STX
,2,?,0,DEY,1,?,0,TXA,1,?,0 640 DATA STY ,3,STA ,3,STX
,3,?,0, BCC,-1,STA
()Y,2,?,0,?,0,STY X,2 ,STA
X,2 650 DATA STX Y,2,?,0,TYA,1,STA Y,3,
TXS,1,?,0,?,0,STA X,3,?,0 660 DATA
LDY # ,2,LDA (X),2,LDX # ,2, ?,0,LDY
,2,LDA ,2,LDX ,2,?,0,T AY,1,LDA #
,2 670 DATA TAX,1,?,0,LDY ,3,LDA ,3,LD
X ,3,?,0,BCS,-1,LDA ()Y,2,?,0,?,
0 680 DATA LDY X,2,LDA
X,2,LDX Y,2,? ,0,CLV,1,LDA
Y,3,TSX,1,?,0,LDY X,3,LDA
X,3 690 DATA LDX Y,3,?,0,CPY # ,2,CMP (X
),2,?,0,?,0,CPY ,2,CMP
,2,DEC ,2,?,0 700 DATA INY,1,CMP #
,2,DEX,1,?,0,CPY ,3,CMP
,3,DEC ,3,?,0,BNE,-1,C MP ()Y,2 710
DATA ?,0,?,0,?,0,CMP X,2,DEC X,
2,?,0,CLD,1,CMP Y,3,?,0,?,0 720 DATA ?,0,CMP
X,3,DEC X,3,?,0,CP X # ,2,SBC
(X),2,?,0,?,0,CPX ,2, SBC
,2 730 DATA INC ,2,?,0,INX,1,SBC #
,2,N OP,1,?,0,CPX ,3,SBC ,3,INC
, 3, ?,0 740 DATA BEQ,-1,SBC
(Y),2,?,0,?,0,?,0 ,SBC X,2,INC
X,2,?,0,SED,1,SBC Y,3 750 DATA
?,0,?,0,?,0,SBC X,3,INC X,
3,?,0
Return to Table
of Contents | Previous
Chapter | Next
Chapter |
| |
|