We've just wrote a part of the description of the VAT
! Go and see it !
WARNING: This is for TI92/92 II only . The VAT on TI89/92+ is slightly different. Mail me if you want infos about it.
When we have time, we will talk about:
If you have a tip and you want it to be on that page, mail us! The VAT(variable alocation table) is a table
which lists the variables and folders of your calc.
We will describe it in four parts:
1) The folder table
2) The variables tables
3) Some variables caracteristics
4) Some variable formats
For all actual Roms, the folder table is associated with handle #$0B.
So when you do moveq.w #$B,d0
tios::DEREF d0,a0
You get in a0 the adress of the folder table:
It has the following format:
0(a0).w = maximum number of folders before handle
#$B needs to be resized
2(a0).w = actual number of folders
We always have: 2(a0).w <= 0(a0).w
After this small header, there is the list, composed of the names of
the folders, their state, and their associated variables list.
With addq.l #4,a0
You get in a0 the adress of the beginning of the list.
Here is the format:
0(a0) to 7(a0): 8 char name of the folder
8(a0).b : a end of string null character
9(a0).b : the state byte
10(a0).w : the handle of the associated variables
list
Here is an example in hexa:
00 0A 00 03 64 6F
63 73 ....docs -> you see: maxfold = $A = 10,
nbfold = 3
00 00 00 00 00 80 00
2E ........
-> handle to the 'docs' folder = $002E
67 61 6D 65 73 00 00 00 games...
00 80 00 2F 6D 61 69 6E ....main
00 00 00 00 00 80 00 0C ........
The state byte has the following format:
<76543210>: 7 is always set for a folder
5 is set when the folder is checked in the Var-Link or in Doors
3 is set when the folder is locked
For example, you can have
6D 61 69 6E 00 00 00 00
00 80
00 0C
name=
"main"
null char state byte handle
Then the name of the folder is main, it is NOT locked and NOT checked, and its handle is #$C (in fact it is always #$C for the 'main' folder)
They have nearly the same format than the folder one: they have the
same header, and the same list format
The only thing that changes is the state byte format:
7 is never set for a variable
So, you can have, for example
66 69 6C 65 6C 69 62 00
00 00
00 16
name="filelib"
null char state byte handle
Then the name of the variable is filelib, it is NOT locked and NOT checked, and its handle is #$16
3) Some variables caracteristics
When you have the handle of a variable in d0,you can do:
tios::DEREF d0,a0
You get the adress of the content of the variable in a0
After that ALL variables have the following format:
0(a0).w = size of the variable WARNING! This is not the real size of the var: you must add #2 to get the real size
Then you can do:
move.w (a0),d1 and you have
1(a0,d1.w) = the type byte of the variable
This type byte can be one of the followings:
$DC -> PRGM or FUNC
$D9 -> MAT or LIST
$E0 -> TEXT
$2D -> STR
$DD -> DATA
$E1 -> FIG
$DF -> PIC
$DE -> GDB
$E2 -> MACR
All other values are EXPR variables
cmp.b #$19,-5(a0,d1.w)
If -5(a0,d1.w) is not #$19 then the variable has the FUNC type,else it has the PRGM type.
Now you will maybe know how to distinguish Fargo vars and normal PRGM
vars.
Let's do the following:
cmp.l
#$4150504C,8(a0) ;comp with
"APPL"
beq
\Fargo II prog
cmp.l
#$00503130,2(a0) ;comp
with "P10"
beq
\Fargo I prog
cmp.l
#$444C4C20,8(a0) ;comp with
"DLL "
beq
\Fargo II library
cmp.l
#$004C3130,2(a0) ;comp
with "L10"
beq
\Fargo I library
And that's all for the PRGM type !
cmp.b #$D9,0(a0,d1.w)
If 0(a0,d1.w) is #$D9, then the variable has the MAT type else it has the LIST type
We only know the following variables formats:
TEXT variables
PIC variables
STRING variables
Suppose you have a TEXT variable handle in d0.
With tios::DEREF
d0,a0
you get in a0 the variable adress
From then you have the following format:
(a0).w
= size of the variable - 2
2(a0).w = position of
the cursor in the TIOS editor or in XeTal
from 4(a0).w to the end =
your text.
Text has the following format:
#13 = nextline
#20 = beginning of a line.
It is always after a #13 char or a the very beginning of the text
#0 = end of the text
At the end of a TEXT variable,
you have a #$E0 char, it tells you that it is a TEXT variable
If a0 is the variable adress, then you have:
(a0).w = size of the variable
- 2
2(a0).w = height of the picture
4(a0).w = width of the picture
from 4(a0).w to the end =
your picture
If a bit is set, then the
pixel is on, else, it is off
At the end of a PIC variable,
you have a #$DF char, it tells you that it is a PIC variable
If a0 is the variable adress, then you have:
(a0).w = size of the variable
- 2
2(a0).b = a null char (#0)
from 3(a0).b to the end =
your string, it ends with a null char (#0)
At the end of a STRING variable, you have a #$2D
char, it tells you that it is a STRING variable
If you want to add something about these formats, or you know the formats of other variables types, you can mail us