2 ! **********************************************************************
3 ! Program          VIRTUELL.BAS     Utg}va  1.1      1983-07-21
4 ! av Bo Kullmar
5 ! Ins{nd av Bo Kullmar
6 ! F|r ABC800M ABC800C ABC802 ABC806
8 ! Testad p} ABC806
9 ! Huvudprogram med ett exempel p} en subrutin, som anropas in medan huvud
10 ! programmet finns kvar i minnet. Subrutinen finns i programmet SUBRUT1.
11 ! F|r att det skall fungera m}te b}de SUBRUT1 lagras i BAC-format.
12 ! **********************************************************************
60 INTEGER : EXTEND : OPTION BASE 0
1000 COMMON Bofa,Eofa,Top
1010 ; CHR$(12)
1020 Z=FNList
1030 ; : ; 
1040 ; 'Tryck f|r |verg}ng till subrutinen! '; : GET \$
1050 Z=FNSub('SUBRUT1.BAC')
2000 DEF FNSub(Subfil$) LOCAL T.,Tal
2010   Bofa=SYS(11) : Eofa=PEEK2(-248)
2020   Top=PEEK2(-242)
2030   T.=(Bofa+65536.)-(Eofa+65536.)
2040   IF SGN(T.)=-1 THEN Tal=Bofa-1 ELSE Tal=Eofa+1
2050   POKE -242,Tal,SWAP%(Tal)
2060   CHAIN Subfil$
2070 FNEND 
3000 DEF FNList LOCAL Par$=20,Par
3010   Par$='1-1050'+CHR$(13)
3020   Par=VARPTR(Par$)
3030   POKE 65512,213,33,Par,SWAP%(Par),201
3040   Z=CALL(65512,FNListadr)
3050   RETURN 0
3060 FNEND 
10000 DEF FNListadr LOCAL Adr,Tolk$=0
10010   POKE VAROOT(Tolk$),0,96,0,0,0,96
10020   Adr=INSTR(1,Tolk$,"UNSAVE")
10030   Adr=INSTR(Adr,Tolk$,CHR$(255))+VARPTR(Tolk$)
10040   ! RUN = Adr, LOAD = Adr + 4, SAVE = Adr + 22 osv
10050   RETURN PEEK2(Adr+8)
10060 FNEND 
