· Text 2145 · w8 · inlagg
Nu har jag hittat senaste buggen i BASICII.
Ja bugg och bugg, men det är fel i alla fall.
Om man händelsevis skulle knappa in följande program:
10 I=17
20 poke 65329,129 : poke 65293,129
30 chain "x2"
Och sedan, av en annan händelse (p<0.001), skulle knappa in något
i den här stilen:
10 ;i
Observera att variablerna heter SAMMA ASCII-bokstav !
Spara porg1 med SAVE och porg 2 som "x2" med list.
Buggen då ? Jo kör porg1 som chainar "x2" och vad ser ni ?
Ja vad ser ni Jo ERROR 2 (Qué?) ! Står inte i manualen !
Noggrann som jag är konsulterar jag min lilla röda och min debugger
varvid jag finner att:
När COMTOP/BOTTOM pokas upp läses .BAS-filen in på en
högre (större) adress än .BAC-filen. När .BAS-filen
kompileras tillverkas ett programblock på 20 byte först
i filen (Här var den förra buggen, 37 bytes "tappas bort")
där bland annat pekaren till vanliga variabler finns.
En annan pekare till vanliga variabler finns också, nämligen
adress 0ff2eh. Den förra pekaren sätts upp till variablernas
nya adress 08100h, men den senare ändras INTE ! Således kommer
BASICII vid förkollen att leta efter .BAS-I i .BAC-filens
variabellista ! När sedan VARPEK skall räknas ut i rutinen
som i min bok kallas VAR FINNS (adress 02f9ch) kommer denna bli
NEGATIV = CARRY = ERROR ! Detta förutsätter att det är samma
variabel.
Testa med heltal (%) => Error 1
Testa med flyttal (.) => Error 2
Testa med matris => STOP
Testa med sträng (¤) => Error 2
Testa med en variabel med annat namn och den hamnar UNDER BOTTOM !
Detta måste alltså vara:
1 :BAC-program med variabel flyttar upp bottom
2 .BAS-program med "samma" variabel qkar ur
Som errcode erhålles en funktion av variabeltypen.
Vad sägs om det, mina herrar !