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