W liczbach calkowitych, c64 zapisuje najpierw mlodszy bajt, a potem starszy, adres ostatniej zmiennej jest zapisany w komorkach 71-72 ($47-$48), czyli, jezeli chcesz uzyskac dostep bezposredni do ostatniej zmiennej to:
Mozna zrobic tak:
10 a=[ilestam]
....
430 a=a [zeby uzyc zmiennej]
440 x= peek(71)+peek(72)*256
I w zmiennej x mamy adres ostatniej zmiennej
Zminne rzeczywiste sa zapisywane w 7 bajtach:
2 pierwsze to nazwa zmiennej
a 5 nastepnych to liczba
z ktorych 1 bajt to wykladnik, a 4 nastepny, to znak i mantysa
W c64 przyjeto reprezentacje liczb rzeczywistych:
(-1)^b*(1+c)*2^(a-129), gdzie |c|<:+1
w pamieci wyglada to tak:
x:=1.27
0047 03 08 - wiec skaczemy do $0803
0803 58 00 81 22 8f 3c 29
X 1.27 ( a=129, b=0, c=0.27 )
Zmienna calkowita:
2 pierwsze bajty to nazwa (bajty zwiekszone o $80), 2 nastepne to liczba w kodzie uzupelnien do 2, a 3 nastepne sa zerowe
czyli:
XY%=17
0047 0a 08 (skaczemy...)
080a d8 d9 ff ef 00 00 00
X Y 17
od pierwszych 2 nalezy odjac $80, natomiast 2 nastepne to liczba.
Jezeli wartosc tych nastepnych jest wieksza niz 32767 ($7fff), to wtedy liczbe liczy sie od tylu, i jest ujemna (pierwszy bit oznacza znak) czyli:
$ffff =-1
$fffe = -2
itd...
czyli jezeli liczba jest wieksza od 32767 to nalezy przeliczyc ja przez wzor
XY% = [liczba w pamieci] - 65535
Lancuchy:
2 pierwsze bajty to nazwa (drugi zwiekszony o $80) nastepny to dlugosc lancucha, a 2 nastepne to adres (lancuchy sa przechowywane na koncu pamieci Basic od 9ffff w dol), a 2 nastepne sa zerowe, czyli:
AB$=":TEST":
0047 11 08
0811 41 c2 04 fc 9f 00 00
A B 4 adres
czyli mamy 4 znakowy lancuch zaczynajacy sie w $9ffc, czyli:
9ffc 54 45 53 54
T E S T
I to by bylo na tyle (chociaz zapisu zmiennych rzeczywistych sam do koncz nie rozumie)....