Reference cards
File formats |
Atari BASIC File Format Description
BYTE - 8 bit unsigned char
WORD - 16bit unsigned short (little endian)
WORD - 16bit unsigned short (little endian)
Header
WORD LOMEM WORD VNT WORD VNTE WORD VVT WORD STMTAB
WORD STMCUR WORD STARPLOMEM should be always zero - points to page with immediate buffer
VNT - start of variable name table - usually offset $100 from LOMEM
VNTE - end of variable name table
VVT - start of variable values table
STMTAB - start of token area
STMCUR - current line (line 32768)
STARP - end of token area, start of stacks
Variable name table
Variable names are stored in char per char, last is ORed with $80.
Sometimes the name area is overwritten with $9B chars (so called unlistable
programs).
Variable values table
8 bytes per value:
$00 SCALAR - data is interpreted as Atari BCD
$40 ARRAY undimed - data is interpreted as follows:
$80 STRING undimed - data is interpreted as follows:
BYTE btType BYTE btNumber - offset to variable name table BYTE[6] data - depends on btTypebtType could be one of:
$00 SCALAR - data is interpreted as Atari BCD
$40 ARRAY undimed - data is interpreted as follows:
WORD STARP offset$41 ARRAY - same as above
WORD dim1
WORD dim2
$80 STRING undimed - data is interpreted as follows:
WORD STARP offset$81 STRING - same as above
WORD length
WORD dim
Token area
Line begins with
Then there may be some operands:
SCONST is followed by string data.
If operand has bit 7 set, then it's reference to variable.
WORD line number BYTE line length in bytesThen there is one command:
BYTE token len BYTE token byte additional dataTokens 0 & 1 are followed by string ending by $9B.
00 REM 01 DATA 02 INPUT 03 COLOR 04 LIST 05 ENTER 06 LET 07 IF 08 FOR 09 NEXT 0A GOTO 0B GO TO 0C GOSUB 0D TRAP 0E BYE 0F CONT 10 COM 11 CLOSE 12 CLR 13 DEG 14 DIM 15 END 16 NEW 17 OPEN 18 LOAD 19 SAVE 1A STATUS 1B NOTE 1C POINT 1D XIO 1E ON 1F POKE 20 PRINT 21 RAD 22 READ 23 RESTORE 24 RETURN 25 RUN 26 STOP 27 POP 28 ? 29 GET 2A PUT 2B GRAPHICS 2C PLOT 2D POSITION 2E DOS 2F DRAWTO 30 SETCOLOR 31 LOCATE 32 SOUND 33 LPRINT 34 CSAVE 35 CLOAD 36 silent let 37 ERROR -
Then there may be some operands:
0E NCONST 0F SCONST 10 NOUSE 11 NOUSE 12 , 13 $ 14 : 15 ; 16 EOL 17 GOTO 18 GOSUB 19 TO 1A STEP 1B THEN 1C # 1D <= 1E <> 1F >= 20 < 21 > 22 = 23 ^ 24 * 25 + 26 - 27 / 28 NOT 29 OR 2A AND 2B ( 2C ) 2D = 2E = 2F <= 30 <> 31 >= 32 < 33 > 34 = 35 + 36 - 37 ( 38 ( 39 ( 3A ( 3B ( 3C , 3D STR$ 3E CHR$ 3F USR 40 ASC 41 VAL 42 LEN 43 ADR 44 ATN 45 COS 46 PEEK 47 SIN 48 RND 49 FRE 4A EXP 4B LOG 4C CLOG 4D SQR 4E SGN 4F ABS 50 INT 51 PADDLE 52 STICK 53 PTRIG 54 STRIGNCONST is followed by 6 bytes of Atari BCD number.
SCONST is followed by string data.
If operand has bit 7 set, then it's reference to variable.
000A 0F 0F 36 80 2D 0E 40 10 00 00 00 00 16Output of my ChkBas program:
Line 10 $0F - end of commands $0F - end of this command $36 - silent let $80 - $80 & $7F = $00 - reference to variable 0 (A) $2D - = $0E - number constant $4010000000 - BCD 10 $16 - EOL 0014 08 08 20 80 15 16
Line 20 $08 - end of commands $08 - end of this command $20 - PRINT $80 - ref. to variable 0 $15 - ; $16 - EOL
ChkBas v1.00 (c) 1998-1999 Jindrich Kubec <kubecj@asw.cz> Latest version can be found at http://www.asw.cz/~kubecj Published under GPL. See GPL.TXT Thanks to Russ Gilbert for his SALVAGE programs
Input file: h Constants & pointers: Start of Name Table (VNT) : 000E End of Name Table (VNTE) : 000F Lenght of Name Table (VNTL) : 0002 Start of Variable Table (VVT) : 0010 End of Variable Table (VVTE) : 0017 Length of Variable Table (VVTL) : 0008 Number of Variables (NV) : 0001 Start of Code (STMTAB): 0018 Length of Code : 0017 Current command (STMCUR): 002F Length of current command : 000C First byte after program (STARP) : 003B Length of file : 003B File len difference : 00000000 Variable table: 0001 SCALAR (00) 00: 0 A Main code starts here: 10 A=10 20 PRINT A; Immediate code starts here: 32768 SAVE "H1:H"
(c) 1998-2004 Jindroush