2 ! ********************************************************************** 3 ! Program LISTKOD.BAS Utg}va 1.2 1985-05-02 4 ! av Bo Kullmar 5 ! Ins{nd av Bo Kullmar 6 ! F|r ABC800M ABC800C ABC802 ABC806 8 ! Testad p} ABC802 ABC806 9 ! Rutinen skall mergas ihop med ett BASIC-program vars kod man vill lista. 10 ! Sedan anger man radnummer och f}r raden listad dels i klartext och dels 11 ! i internkodsformat. Program b|rjar alltid med en byte som talar om hur 12 ! l}ngt programmet {r och tv} byre med radnummer samt avslutas med 135. 13 ! Dessa bytes visa ej av programmet. 14 ! ********************************************************************** 20 EXTEND : INTEGER : OPTION BASE 0 100 Z=FNListkod 65000 DEF FNListkod LOCAL Rad,Rad.,R$=10 65005 ON ERROR GOTO 65005 65010 ; CHR$(13); : INPUT 'Lista rad (avsluta med BYE) ? 'R$ 65015 R=PEEK(-173)-1 65020 ; CUR(R,0) SPACE$(40); 65025 IF R$='BYE' OR R$='bye' OR R$='Bye' THEN Z=FNEnd ELSE Rad.=VAL(R$) 65030 Rad=Rad. 65035 Z=FNL{skod(Rad,Rad.) 65040 GOTO 65010 65045 FNEND 65050 DEF FNL{skod(Rad,Rad.) LOCAL Adr,L{ngd,Radnr,Radnr.,Slutm1,Slutm2 65055 Adr=SYS(11)+20 65060 IF PEEK(Adr)<>135 THEN STOP 65065 L{ngd=PEEK(Adr+1) 65070 Radnr=PEEK2(Adr+2) 65075 IF Radnr<0 THEN Radnr.=Radnr+65536. ELSE Radnr.=Radnr 65080 IF Rad=Radnr THEN Z=FNListarad(Adr,Radnr.,L{ngd) : RETURN 0 65085 Adr=Adr+L{ngd 65090 Slutm1=PEEK(Adr) : Slutm2=PEEK(Adr+1) 65095 IF Slutm1=135 AND Slutm2=1 THEN 65100 ELSE 65065 65100 ; 'Radnummer' Rad. 'finns ej i programmet!' : ; 65105 RETURN 0 65110 FNEND 65115 DEF FNListarad(Adr,Radnr.,L{ngd) LOCAL Adress.,A 65120 Adress.=Adr+4 65125 IF Adress.<0 THEN Adress.=Adress.+65536. 65130 ; FNList$(NUM$(Radnr.)) 65135 ; 'Adress till f|rsta byten =' Adress. : ; 65140 FOR I=1 TO L{ngd-4 65145 A=PEEK(Adr+I+3) 65150 ; USING '_ ###_ ' A; 65155 IF A>31 AND A<128 THEN ; '(' CHR$(A) ')'; ELSE ; ' '; 65160 NEXT I 65165 ; : ; 65170 RETURN 0 65175 FNEND 65180 DEF FNEnd 65185 END 65190 RETURN 0 65195 FNEND 65200 DEF FNList$(P$) LOCAL Par$=20,Par 65205 Par$=P$+CHR$(13) 65210 Par=VARPTR(Par$) 65215 POKE 64512,213,33,Par,SWAP%(Par),201 65220 Z=CALL(64512,FNList) 65225 RETURN '' 65230 FNEND 65235 DEF FNList LOCAL Adr,Tolk$=0 65240 POKE VAROOT(Tolk$),0,96,0,0,0,96 65245 Adr=INSTR(1,Tolk$,"UNSAVE") 65250 Adr=INSTR(Adr,Tolk$,CHR$(255))+VARPTR(Tolk$) 65255 ! RUN = Adr, LOAD = Adr + 4, SAVE = Adr + 22 osv 65260 RETURN PEEK2(Adr+8) 65265 FNEND