1 REM Bosse Gidmark <455> 1985-08-26 21.01.42 2 REM ARNE STOCKMAN 80 01 04 12 : 45 3 REM [ndrar till skysta kod och adresser av 4 REM Kent Berggren 5 REM 85 09 20 10 DIM Q$=15,P$=25,V1$=4 20 DIM D(3),A4$=250 30 DIM A2$(255)=20,B$(95)=20,B(255),C$(7)=10,D$(3)=7,E$(8)=5 40 C$(0)="RLC " : C$(1)="RRC " : C$(2)="RL " 50 C$(3)="RR " : C$(4)="SLA " : C$(5)="SRA " : C$(6)="DEFB 221" 60 C$(7)="SRL " : D$(1)="BIT " : D$(2)="RES " : D$(3)="SET " 70 E$(7)="A" : E$(0)="B" : E$(1)="C" : E$(2)="D" 80 E$(3)="E" : E$(4)="H" : E$(5)="L" : E$(6)="(HL)" 90 I2=1 : I7=0 110 FOR I=0 TO 255 : READ A2$(I) : NEXT I 140 P=0 150 FOR I=0 TO 255 : READ A$ 160 IF A$="" THEN B(I)=95 ELSE B(I)=P : B$(P)=A$ : P=P+1 170 NEXT I : B$(95)=C$(6) 180 ; CHR$(12) "DISASSEMBLER" 190 ; "FILNAMN " : INPUT Q$ : IF INSTR(1,Q$,".")=0 Q$=Q$+".ABS" 191 ON ERROR GOTO 195 : OPEN Q$ AS FILE 1 : GOTO 200 195 IF ERRCODE=21 THEN ; "Hittar ej filen" ELSE ; "Error" ERRCODE "" 196 GOTO 190 200 S=65535 270 ; "SKALL TEXTEN SPARAS (J/N) "; : INPUT A$ : IF A$="" THEN 270 ELSE A$=LEFT$(A$,1) 280 A3$="" 290 ; : IF A$="J" OR A$="j" THEN ; 'FILENAMN'; : INPUT \$ : PREPARE \$ AS FILE 2 : R5=1 : GOTO 310 300 IF A$<>"N" AND A$<>"n" GOTO 270 310 GOSUB 770 315 IF R5=0 AND PEEK(65013) GET A$ : GET A$ 320 B=1 330 P$=A2$(D(0)) 340 IF P$="" THEN GOSUB 560 350 I7=INSTR(6,P$,"nn") 355 IF I7=0 THEN 370 360 P$=LEFT$(P$,I7-1)+RIGHT$(NUM$(D(B+1)*256+D(B)),2)+RIGHT$(P$,I7+2) : B=B+2 370 I7=INSTR(6,P$,"n") 380 IF I7 THEN P$=LEFT$(P$,I7-1)+RIGHT$(NUM$(D(B)),2)+RIGHT$(P$,I7+1) : B=B+1 390 I7=INSTR(6,P$,"e-2") : IF I7=0 THEN 440 400 D1=D(1)+I+2 : IF (D(1) AND 128) THEN D1=D1-256 410 D2=D1 AND 255 : D1=SWAP%(D1) AND 255 420 P$=LEFT$(P$,I7-1)+RIGHT$(NUM$(D1*256+D2),2)+RIGHT$(P$,I7+3) 430 B=B+1 440 I7=SWAP%(I) AND 255 450 I1$=NUM$(I7*256+(I AND 255)) 460 ; I1$+" "+P$+SPACE$(25-LEN(P$)); : IF R5 THEN ; #2,I1$+" "+P$+SPACE$(25-LEN(P$)); 461 IF INSTR(1,P$,"DEFB") THEN B=B-1 470 V1$="" 480 FOR T4=0 TO B-1 490 IF D(T4)<127 AND D(T4)>31 THEN V1$=V1$+CHR$(D(T4)) ELSE V1$=V1$+" " 500 Q$=NUM$(D(T4))+SPACE$(4-LEN(NUM$(D(T4)))) 510 ; Q$; : IF R5 THEN ; #2,Q$; 520 NEXT T4 530 ; SPACE$(16-4*B)+V1$ : IF R5 THEN ; #2,SPACE$(16-4*B)+V1$ 540 GOSUB 790 550 GOTO 310 560 D2=D(1) : B=B+1 570 IF D(0)=237 THEN 690 ELSE IF D(0)=203 THEN 710 580 IF D(0)/16=13 THEN F$="X" ELSE F$="Y" 590 IF INSTR(1,"FV~rs",CHR$(D2)) THEN D2=D2+15 600 IF D2=203 GOTO 660 610 P$=B$(B(D2)) 620 IF INSTR(1,P$,"*")=0 THEN P$=C$(6) 630 IF P$=C$(6) THEN RETURN 640 IF D2=54 THEN I7=INSTR(6,P$,"n") : B=B+1 : P$=LEFT$(P$,I7-1)+RIGHT$(NUM$(D(2)),2)+RIGHT$(P$,I7+1) 650 I6=INSTR(6,P$,"*") : P$=LEFT$(P$,I6-1)+F$+RIGHT$(P$,I6+1) : RETURN 660 D2=D(3) : P$=D$(D2/64) 670 IF P$="" THEN P$=C$(D2/8)+"(I*+n)" ELSE P$=P$+RIGHT$(NUM$((D2/8) AND 7),2)+",(I*+n)" 680 I7=INSTR(1,P$,"n") : P$=LEFT$(P$,I7-1)+RIGHT$(NUM$(D(2)),2)+RIGHT$(P$,I7+1) : B=4 : GOTO 650 690 P$=B$(B(D(1))) : IF INSTR(1,P$,"*") THEN P$=C$(6) 700 RETURN 710 P$=D$(D(1)/64) 720 IF P$="" THEN P$=C$(D(1)/8)+E$(D(1) AND 7) : RETURN 730 P$=P$+RIGHT$(NUM$((D(1)/8) AND 7),2)+","+E$(D(1) AND 7) : RETURN 740 INPUT Q$ : IF Q$="" 65000 ELSE B=INSTR(1,Q$,":") : IF B=0 GOTO 740 742 B=SWAP%(VAL(LEFT$(Q$,B-1)))+VAL(RIGHT$(Q$,B+1)) 750 ON ERROR GOTO 0 760 RETURN 770 IF LEN(A4$)<4 THEN 810 780 FOR B=0 TO 3 : D(B)=ASCII(RIGHT$(A4$,B+1)) : NEXT B : RETURN 790 I=I+B : IF B>=LEN(A4$) THEN A4$="" ELSE A4$=RIGHT$(A4$,B+1) 800 RETURN 810 IF LEN(Q0$)<14 THEN GOSUB 870 820 U3=ASCII(RIGHT$(Q0$,2)) : U4=SWAP%(ASCII(RIGHT$(Q0$,4)))+ASCII(RIGHT$(Q0$,6)) 830 IF U3=0 THEN IF A4$<>"" GOTO 850 ELSE GOTO 930 835 IF NOT (U2=U4 OR A4$="") THEN 850 840 U2=U4+U3 : I=U4-LEN(A4$) : A4$=A4$+MID$(Q0$,8,U3) : Q0$=RIGHT$(Q0$,U3+9) : GOTO 770 850 B2=LEN(A4$) : FOR I7=1 TO B2 : D(I7-1)=ASCII(RIGHT$(A4$,I7)) : NEXT I7 860 FOR B=I7 TO 3 : D(B)=0 : NEXT B : RETURN 870 S=S+1 : A=CALL(28666,1) : A=CALL(28668,S) : RETURN 930 END 1000 DATA "NOP","LD BC,nn","LD (BC),A","INC BC","INC B","DEC B" 1010 DATA "LD B,n","RLCA","EXX AF","ADD HL,BC","LD A,(BC)","DEC BC" 1020 DATA "INC C","DEC C","LD C,n","RRCA","DJNZ e-2","LD DE,nn" 1030 DATA "LD (DE),A","INC DE","INC D","DEC D","LD D,n","RLA" 1040 DATA "JR e-2","ADD HL,DE","LD A,(DE)","DEC DE","INC E","DEC E" 1050 DATA "LD E,n","RRA","JR NZ,e-2","LD HL,nn","LD (nn),HL","INC HL" 1060 DATA "INC H","DEC H","LD H,n","DAA","JR Z,e-2","ADD HL,HL" 1070 DATA "LD HL,(nn)","DEC HL","INC L","DEC L","LD L,n","CPL" 1080 DATA "JR NC,e-2","LD SP,nn","LD (nn),A","INC SP","INC (HL)","DEC (HL)" 1090 DATA "LD (HL),n","SCF","JR C,e-2","ADD HL,SP","LD A,(nn)","DEC SP" 1100 DATA "INC A","DEC A","LD A,n","CCF","LD B,B","LD B,C","LD B,D","LD B,E" 1110 DATA "LD B,H","LD B,L","LD B,(HL)","LD B,A","LD C,B","LD C,C" 1120 DATA "LD C,D","LD C,E","LD C,H","LD C,L","LD C,(HL)","LD C,A" 1130 DATA "LD D,B","LD D,C","LD D,D","LD D,E","LD D,H","LD D,L" 1140 DATA "LD D,(HL)","LD D,A","LD E,B","LD E,C","LD E,D","LD E,E" 1150 DATA "LD E,H","LD E,L","LD E,(HL)","LD E,A","LD H,B","LD H,C" 1160 DATA "LD H,D","LD H,E","LD H,H","LD H,L","LD H,(HL)","LD H,A" 1170 DATA "LD L,B","LD L,C","LD L,D","LD L,E","LD L,H","LD L,L" 1180 DATA "LD L,(HL)","LD L,A","LD (HL),B","LD (HL),C","LD (HL),D","LD (HL),E" 1190 DATA "LD (HL),H","LD (HL),L","HALT","LD (HL),A","LD A,B","LD A,C" 1200 DATA "LD A,D","LD A,E","LD A,H","LD A,L","LD A,(HL)","LD A,A" 1210 DATA "ADD B","ADD C","ADD D","ADD E","ADD H","ADD L","ADD (HL)","ADD A" 1220 DATA "ADC B","ADC C","ADC D","ADC E","ADC H","ADC L","ADC (HL)","ADC A" 1230 DATA "SUB B","SUB C","SUB D","SUB E","SUB H","SUB L","SUB (HL)","SUB A" 1240 DATA "SBC B","SBC C","SBC D","SBC E","SBC H","SBC L","SBC (HL)","SBC A" 1250 DATA "AND B","AND C","AND D","AND E","AND H","AND L","AND (HL)","AND A" 1260 DATA "XOR B","XOR C","XOR D","XOR E","XOR H","XOR L","XOR (HL)","XOR A" 1270 DATA "OR B","OR C","OR D","OR E","OR H","OR L","OR (HL)","OR A" 1280 DATA "CP B","CP C","CP D","CP E","CP H","CP L","CP (HL)","CP A" 1290 DATA "RET NZ","POP BC","JP NZ,nn","JP nn","CALL NZ,nn","PUSH BC" 1300 DATA "ADD n","RST 0","RET Z","RET","JP Z,nn","","CALL Z,nn","CALL nn" 1310 DATA "ADC n","RST 8","RET NC","POP DE","JP NC,nn","OUT (n),A" 1320 DATA "CALL NC,nn","PUSH DE","SUB n","RST 16","RET C","EXX","JP C,nn","INP A,(n)" 1330 DATA "CALL C,nn","","SBC n","RST 24","RET PO","POP HL","JP O,nn","EX (SP),HL" 1340 DATA "CALL PO,nn","PUSH HL","AND n","RST 32","RET PE","JP (HL)" 1350 DATA "JP E,nn","EX DE,HL","CALL PE,nn","","XOR n","RST 40" 1360 DATA "RET PL","POP AF","JP L,nn","DI","CALL PL,nn","PUSH AF" 1370 DATA "OR n","RST 48","RET MI","LD SP,HL","JP MI,nn","EI" 1380 DATA "CALL MI,nn","","CP n","RST 56","","","","","","","","" 1390 DATA "","ADD I*,BC","","","","","","","","","","","","","","","","ADD I*,DE" 1400 DATA "","","","","","","","LD I*,nn","LD (nn),I*","INC I*" 1410 DATA "","","","","","ADD I*,I*","LD I*,(nn)","DEC I*","","" 1420 DATA "","","","","","","INC (I*+n)","DEC (I*+n)","LD (I*+n),n","" 1430 DATA "","ADD I*,SP","","","","","","","IN A,(B)","OUT (B),A" 1440 DATA "SBC HL,BC","LD (nn),BC","NEG","RET n","IM0","LD I,A" 1450 DATA "IN A,(C)","OUT (C),A","ADC HL,BC","LD BC,(nn)","","RETI" 1460 DATA "LD C,(I*+n)","LD R,A","IN A,(D)","OUT (D),A","SBC HL,DE","LD (nn),DE" 1470 DATA "","LD B,(I*+n)","IM1","","IN A,(E)","OUT (E),A","ADC HL,DE","LD DE,(nn)" 1480 DATA "","","IM2","LD A,R","IN A,(H)","OUT (H),A","SBC HL,HL","" 1490 DATA "","LD D,(I*+n)","LD H,(I*+n)","RRD (HL)","IN A,(L)","OUT (L),A" 1500 DATA "ADC HL,HL","","","LD E,(I*+n)","LD L,(I*+n)","RLD (HL)" 1510 DATA "LD (I*+n),B","LD (I*+n),C","SBC HL,SP","LD (nn),SP" 1520 DATA "LD (I*+n),H","LD (I*+n),L","","LD (I*+n),A","IN A,(A)","OUT (A),A" 1530 DATA "ADC HL,SP","LD SP,(nn)","","","LD A,(I*+n)","","","LD (I*+n),D" 1540 DATA "LD (I*+n),E","","","","ADD (I*+n)","","","","","","","" 1550 DATA "ADC (I*+n)","","","","","","","","SUB (I*+n)","","","","","" 1560 DATA "","","SBC (I*+n)","","LDI","CPI","INI","OUTI","","","AND (I*+n)","" 1570 DATA "LDD","CPD","IND","OUTD","","","XOR (I*+n)","","LDIR","CPIR" 1580 DATA "INIR","OUTIR","","","OR (I*+n)","","LDDR","CPDR","INDR","OUTDR" 1590 DATA "","","CP (I*+n)","","","","","","","","","","","","","" 1600 DATA "","","","","","","","","","","","","","","","","","","","" 1610 DATA "","POP I*","","EX (SP),I*","","PUSH I*","","","","JP (I*)" 1620 DATA "","","","","","","","","","","","","","","","LD SP,I*","","" 1630 DATA "","","","", 65000 END