1 REM ARNE STOCKMAN 80 01 04 12 : 45 10 DIM Q$=15%,P$=25%,A$=25%,V1$=4% 20 DIM D%(3%),A4$=250% 30 DIM A2$(255%)=13%,B$(95%)=14%,B%(255%),C$(7%)=6%,D$(3%)=6%,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%)="OK[ND" 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 OPEN "OPCODE1.TXT" ASFILE 1% : I2%=1% : I7%=0% 100 FOR I%=0% TO 255% : INPUTLINE #1%,A$ : I7%=LEN(A$)-2% : A2$(I%)=LEFT$(A$,I7%) 110 NEXT I% : CLOSE 1% 130 OPEN "OPCODE2.TXT" ASFILE 1% 140 P%=0% 150 FOR I%=0% TO 255% : INPUTLINE #1%,A$ : A$=LEFT$(A$,LEN(A$)-2%) 160 IF A$="" THEN B%(I%)=95% ELSE B%(I%)=P% : B$(P%)=A$ : P%=P%+1% 170 NEXT I% : B$(95%)=C$(6%) : CLOSE 1% 180 ; CHR$(12%)"DISASSEMBLER" 190 ; "FILNAMN " : INPUT Q$ : IF INSTR(1%,Q$,".")=0% Q$=Q$+".ABS" 191 ONERRORGOTO 195 : OPEN Q$ ASFILE 1% : GOTO 200 195 IF ERRCODE=21% THEN ; "Hittar ej filen" ELSE ; "Error"ERRCODE"" 196 GOTO 190 200 S%=65535% 270 ; "SKALL TEXTEN PRINTAS (J/N) "; : INPUT A$ : IF A$="" THEN 270 ELSE A$=LEFT$(A$,1%) 280 A3$="" 290 ; : IF A$="J" OR A$="j" THEN OPEN "PR:" ASFILE 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%)),2%)+":"+RIGHT$(NUM$(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%),2%)+":"+RIGHT$(NUM$(D2%),2%)+RIGHT$(P$,I7%+3%) 430 B%=B%+1% 440 I7%=SWAP%(I%) AND 255% : I1$=SPACE$(4%-LEN(NUM$(I7%)))+NUM$(I7%) 450 I2$=":"+SPACE$(4%-LEN(NUM$(I% AND 255%)))+NUM$(I% AND 255%) 460 ; I1$+I2$+" "+P$+SPACE$(25%-LEN(P$)); : IF R5% THEN ; #2%,I1$+I2$+" "+P$+SPACE$(25%-LEN(P$)); 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 (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)+" i "+E$(D%(1%) AND 7%) : RETURN 740 INPUT Q$ : IF Q$="" END ELSE B%=INSTR(1%,Q$,":") : IF B%=0% GOTO 740 742 B%=SWAP%(VAL(LEFT$(Q$,B%-1%)))+VAL(RIGHT$(Q$,B%+1%)) 750 ONERRORGOTO 0 760 RETURN 770 IF LEN(A4$)<4% THEN 810 780 FOR B%=0% TO 3% : D%(B%)=ASC(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%=ASC(RIGHT$(Q0$,2%)) : U4%=SWAP%(ASC(RIGHT$(Q0$,4%)))+ASC(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%)=ASC(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