1 REM ARNE STOCKMAN 81 11 23 10 DIM D%(3%) 20 DIM A2$=2100%,B$(95%)=15%,B%(255%),C$(7%)=6%,D$(3%)=6%,E$(8%)=5%,A2%(256%) 30 C$(0%)="RLC " : C$(1%)="RRC " : C$(2%)="RL " 40 C$(3%)="RR " : C$(4%)="SLA " : C$(5%)="SRA " : C$(6%)="OK[ND" 50 C$(7%)="SRL " : D$(1%)="BIT " : D$(2%)="RES " : D$(3%)="SET " 60 E$(7%)="A" : E$(0%)="B" : E$(1%)="C" : E$(2%)="D" 70 E$(3%)="E" : E$(4%)="H" : E$(5%)="L" : E$(6%)="(HL)" 80 OPEN "OPCODE1.TXT" ASFILE 1% : I2%=1% : I7%=0% 90 FOR I%=0% TO 255% : INPUTLINE #1%,A$ : I7%=LEN(A$)-2% : A2$=A2$+LEFT$(A$,I7%) : A2%(I%)=I2% : I2%=I2%+I7% 100 NEXT I% : CLOSE 1% 110 A2%(256%)=I2% 120 OPEN "OPCODE2.TXT" ASFILE 1% 130 P%=0% 140 FOR I%=0% TO 255% : INPUTLINE #1%,A$ : A$=LEFT$(A$,LEN(A$)-2%) 150 IF A$="" THEN B%(I%)=95% ELSE B%(I%)=P% : B$(P%)=A$ : P%=P%+1% 160 NEXT I% : B$(95%)=C$(6%) : CLOSE 1% 170 ; CHR$(12%)"DISSASEMBLER" 180 ; : ; : ; "STARTADRESS XXX:XXX "; 190 GOSUB 670 : I%=B% : ; "SLUTADRESS XXX:XXX "; : GOSUB 670 : I2%=B% : R5%=0% 200 ; "SKALL TEXTEN PRINTAS (J/N) "; : INPUT A$ : IF A$="" THEN 200 ELSE A$=LEFT$(A$,1%) 210 ; : IF A$="J" OR A$="j" THEN OPEN "PR:" ASFILE 2% : R5%=1% : GOTO 230 220 IF A$<>"N" AND A$<>"n" GOTO 200 230 GOSUB 700 240 IF I%-I2%>0% THEN CLOSE 2% : GOTO 180 245 IF PEEK(65013%) AND R5%=0% GET A$ : GET A$ 250 B%=1 260 P$=MID$(A2$,A2%(D%(0%)),A2%(D%(0%)+1%)-A2%(D%(0%))) 270 IF P$="" THEN GOSUB 490 280 I7%=INSTR(6%,P$,"NN") : IF I7%=0% THEN 300 290 P$=LEFT$(P$,I7%-1%)+RIGHT$(NUM$(D%(B%+1%)),2%)+":"+RIGHT$(NUM$(D%(B%)),2%)+RIGHT$(P$,I7%+2%) : B%=B%+2% 300 I7%=INSTR(6%,P$,"N") 310 IF I7% THEN P$=LEFT$(P$,I7%-1%)+RIGHT$(NUM$(D%(B%)),2%)+RIGHT$(P$,I7%+1%) : B%=B%+1% 320 I7%=INSTR(6%,P$,"e-2") : IF I7%=0% THEN 370 330 D1%=D%(1%)+I%+2% : IF (D%(1%) AND 128%) THEN D1%=D1%-256% 340 D2%=D1% AND 255% : D1%=SWAP%(D1%) AND 255% 350 P$=LEFT$(P$,I7%-1%)+RIGHT$(NUM$(D1%),2%)+":"+RIGHT$(NUM$(D2%),2%)+RIGHT$(P$,I7%+3%) 360 B%=B%+1% 370 I7%=SWAP%(I%) AND 255% : I1$=SPACE$(4-LEN(NUM$(I7%)))+NUM$(I7%) 380 I2$=":"+SPACE$(4%-LEN(NUM$(I% AND 255%)))+NUM$(I% AND 255%) 390 ; I1$+I2$+" "+P$+SPACE$(25%-LEN(P$)); : IF R5% THEN ; #2%,I1$+I2$+" "+P$+SPACE$(25%-LEN(P$)); 400 V1$="" 410 FOR T4%=0% TO B%-1% 420 IF D%(T4%)<127% AND D%(T4%)>31% THEN V1$=V1$+CHR$(D%(T4%)) ELSE V1$=V1$+" " 430 V$=NUM$(D%(T4%))+SPACE$(4%-LEN(NUM$(D%(T4%)))) 440 ; V$; : IF R5% THEN ; #2%,V$; 450 NEXT T4% 460 ; SPACE$(16%-4%*B%)+V1$ : IF R5% THEN ; #2%,SPACE$(16%-4%*B%)+V1$ 470 GOSUB 711 480 GOTO 230 490 D2%=D%(1%) : B%=B%+1% 500 IF D%(0%)=237% THEN 620 ELSE IF D%(0%)=203% THEN 640 510 IF D%(0%)/16%=13% THEN F$="X" ELSE F$="Y" 520 IF D2%=70% OR D2%=86% OR D2%=94% OR D2%=114% OR D2%=115% THEN D2%=D2%+15% 530 IF D2%=203% GOTO 590 540 P$=B$(B%(D2%)) 550 IF INSTR(1%,P$,"*")=0% THEN P$=C$(6%) 560 IF P$=C$(6%) THEN RETURN 570 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%) 580 I6%=INSTR(6%,P$,"*") : P$=LEFT$(P$,I6%-1%)+F$+RIGHT$(P$,I6%+1%) : RETURN 590 D2%=D%(3%) : P$=D$(D2%/64%) 600 IF P$="" THEN P$=C$(D2%/8%)+"(I*+N)" ELSE P$=P$+RIGHT$(NUM$((D2%/8%) AND 7%),2%)+" i (I*+N)" 610 I7%=INSTR(1%,P$,"N") : P$=LEFT$(P$,I7%-1%)+RIGHT$(NUM$(D%(2%)),2%)+RIGHT$(P$,I7%+1%) : B%=4% : GOTO 580 620 P$=B$(B%(D%(1%))) : IF INSTR(1%,P$,"*") THEN P$=C$(6%) 630 RETURN 640 P$=D$(D%(1%)/64%) 650 IF P$="" THEN P$=C$(D%(1%)/8%)+E$(D%(1%) AND 7%) : RETURN 660 P$=P$+RIGHT$(NUM$((D%(1%)/8%) AND 7%),2)+" i "+E$(D%(1%) AND 7%) : RETURN 670 INPUT Q$ : IF Q$="" END ELSE B%=INSTR(1%,Q$,":") : IF B%=0% GOTO 670 672 ONERRORGOTO 670 : B%=SWAP%(VAL(LEFT$(Q$,B%-1%)))+VAL(RIGHT$(Q$,B%+1%)) 680 ONERRORGOTO 0 690 RETURN 700 FOR B%=0% TO 3% : D%(B%)=PEEK(I%+B%) : NEXT B% : RETURN 711 I%=I%+B% : RETURN