; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Sources:
;  What's Where in the Apple, by William F. Luebbert
;  S-C DocuMentor: Applesoft, by Bob Sander-Cederlof

*SYNOPSIS Applesoft BASIC addresses and constants

BAS_USRVEC      @ $0A 3     ;USR() command vector
BAS_CHARAC      @ $0D       ;used by string utility
BAS_ENDCHR      @ $0E       ;used by string utility
BAS_VALTYP      @ $11 2     ;flag for last FAC operation ($00=num, $FF=str)
BAS_SUBFLG      @ $14       ;subscript flag ($00=allowed, $80=not)
BAS_HCOLOR1     @ $1C       ;hi-res color mask
BAS_COUNTH      @ $1D       ;hi-res high-order byte of step for line
BAS_HBASL       @ $26       ;base address for hi-res drawing (lo part)
BAS_HBASH       @ $27       ;base address for hi-res drawing (hi part)
BAS_HMASK       @ $30       ;hi-res graphics on-the-fly bit mask
BAS_LINNUM      @ $50 2     ;line number (2b)
BAS_TEMPPT      @ $52 2     ;temporary point (2b)
BAS_INDEX       @ $5E 2     ;temp (stack) pointer for moving strings (2b)
BAS_TEXTTAB     @ $67 2     ;pointer to start of Applesoft program (2b)
BAS_VARTAB      @ $69 2     ;pointer to start of Applesoft variables (2b)
BAS_ARYTAB      @ $6B 2     ;pointer to start of Applesoft array space (2b)
BAS_STREND      @ $6D 2     ;pointer to end of numeric storage (2b)
BAS_FRETOP      @ $6F 2     ;pointer to end of string storage (2b)
BAS_MEMSIZE     @ $73 2     ;HIMEM (2b)
BAS_CURLIN      @ $75 2     ;current line number (2b)
BAS_OLDLIN      @ $77 2     ;last line executed (2b)
BAS_OLDTEXT     @ $79 2     ;old text pointer (2b)
BAS_DATLIN      @ $7B 2     ;current line # from which data is being read (2b)
BAS_DATPTR      @ $7D 2     ;points to mem from which data is being read (2b)
BAS_VARNAM      @ $81 2     ;holds last-used variable's name (2b)
BAS_VARPNT      @ $83 2     ;pointer to last-used variable's value (2b)
BAS_FORPNT      @ $85 2     ;general pointer (2b)
BAS_JMPADRS     @ $90 3     ;jump address; $90 is set to $4C (3b)
BAS_TEMP1       @ $93       ;fp math register
BAS_HIGHDS      @ $94 2     ;block copy pointer (2b)
BAS_HIGHTR      @ $96 2     ;block copy pointer (2b)
BAS_TEMP2       @ $98       ;fp math register
BAS_LOWTR       @ $9B 2     ;general pointer (2b)
BAS_FAC         @ $9D 6     ;floating point accumulator (6b)
BAS_FACMO       = $A0       ;middle-order byte of mantissa of FAC
BAS_FACLO       = $A1       ;low-order byte of mantissa of FAC
BAS_FACSIGN     @ $A2       ;single byte sign of FAC
BAS_ARG         @ $A5 6     ;secondary floating point accumulator (6b)
BAS_STRNG1      @ $AB 2     ;pointer to a string (2b)
BAS_STRNG2      @ $AD 2     ;pointer to a string (2b)
BAS_PRGEND      @ $AF 2     ;pointer to end of program (2b)
BAS_CHRGET      @ $B1       ;get next character or Applesoft token
BAS_CHRGOT      @ $B7       ;get next, but don't advance TXTPTR
BAS_TXTPTR      @ $B8 2     ;points at next char or token (2b)
BAS_RND         @ $C9 5     ;floating point random number (5b)
BAS_AUTORUN     @ $D6       ;set to $80 to auto-run
BAS_ERRFLG      @ $D8       ;$80 if onerr active
BAS_HPAG        @ $E6       ;hi-res page to draw on ($20 or $40)
BAS_SCALE       @ $E7       ;hi-res graphics scale factor
BAS_HSHAPE      @ $E8 2     ;hi-res shape table pointer (2b)
BAS_FIRST       @ $F0       ;used for lo-res plot coordinates
BAS_SPEEDZ      @ $F1       ;controls text output speed
BAS_ORMASK      @ $F3       ;mask for output control
BAS_REMSTK      @ $F8       ;stack pointer saved before each statement

BAS_AMPERV      @ $03F5 3   ;JMP to function that handles Applesoft '&' cmds

;
; Useful Applesoft routines.
; TODO: there are many more
;
BAS_ERROR       @ $D412     ;print error based on X-reg
BAS_FRMNUM      @ $DD67     ;call FRMEVL, confirm expr is numeric
BAS_FRMEVL      @ $DD7B     ;eval expr at TXTPTR (num/str), result into FAC
BAS_SYN_ERROR   @ $DEC9     ;throw SYNTAX ERROR
BAS_CHKCOM      @ $DEBE     ;checks TXTPTR for comma
BAS_ILLQ_ERROR  @ $E199     ;throw ILLEGAL QUANTITY ERROR
BAS_GETADR      @ $E752     ;convert FAC to 2-byte integer in LINNUM
BAS_GETBYT      @ $E6F8     ;gets byte, in X/FACLO
BAS_QINT        @ $EBF2     ;converts FP value in FAC to int in FAC+1..FAC+4
BAS_HFNS        @ $F6B9     ;get hi-res x/y for hplot

;
; Applesoft BASIC tokens.
;
*TAG Applesoft-Tokens
TOK_END         = $80
TOK_FOR         = $81
TOK_NEXT        = $82
TOK_DATA        = $83
TOK_INPUT       = $84
TOK_DEL         = $85
TOK_DIM         = $86
TOK_READ        = $87
TOK_GR          = $88
TOK_TEXT        = $89
TOK_PR          = $8a
TOK_IN          = $8b
TOK_CALL        = $8c
TOK_PLOT        = $8d
TOK_HLIN        = $8e
TOK_VLIN        = $8f
TOK_HGR2        = $90
TOK_HGR         = $91
TOK_HCOLOR      = $92
TOK_HPLOT       = $93
TOK_DRAW        = $94
TOK_XDRAW       = $95
TOK_HTAB        = $96
TOK_HOME        = $97
TOK_ROT         = $98
TOK_SCALE       = $99
TOK_SHLOAD      = $9a
TOK_TRACE       = $9b
TOK_NOTRACE     = $9c
TOK_NORMAL      = $9d
TOK_INVERSE     = $9e
TOK_FLASH       = $9f
TOK_COLOR       = $a0
TOK_POP         = $a1
TOK_VTAB        = $a2
TOK_HIMEM       = $a3
TOK_LOMEM       = $a4
TOK_ONERR       = $a5
TOK_RESUME      = $a6
TOK_RECALL      = $a7
TOK_STORE       = $a8
TOK_SPEED       = $a9
TOK_LET         = $aa
TOK_GOTO        = $ab
TOK_RUN         = $ac
TOK_IF          = $ad
TOK_RESTORE     = $ae
TOK_AMPER       = $af
TOK_GOSUB       = $b0
TOK_RETURN      = $b1
TOK_REM         = $b2
TOK_STOP        = $b3
TOK_ON          = $b4
TOK_WAIT        = $b5
TOK_LOAD        = $b6
TOK_SAVE        = $b7
TOK_DEF         = $b8
TOK_POKE        = $b9
TOK_PRINT       = $ba
TOK_CONT        = $bb
TOK_LIST        = $bc
TOK_CLEAR       = $bd
TOK_GET         = $be
TOK_NEW         = $bf
TOK_TAB         = $c0
TOK_TO          = $c1
TOK_FN          = $c2
TOK_SPC         = $c3
TOK_THEN        = $c4
TOK_AT          = $c5
TOK_NOT         = $c6
TOK_STEP        = $c7
TOK_PLUS        = $c8
TOK_MINUS       = $c9
TOK_MULT        = $ca
TOK_DIV         = $cb
TOK_EXPOP       = $cc
TOK_AND         = $cd
TOK_OR          = $ce
TOK_GREATER     = $cf
TOK_EQUAL       = $d0
TOK_LESSER      = $d1
TOK_SGN         = $d2
TOK_INT         = $d3
TOK_ABS         = $d4
TOK_USR         = $d5
TOK_FRE         = $d6
TOK_SCRN        = $d7
TOK_PDL         = $d8
TOK_POS         = $d9
TOK_SQR         = $da
TOK_RND         = $db
TOK_LOG         = $dc
TOK_EXP         = $dd
TOK_COS         = $de
TOK_SIN         = $df
TOK_TAN         = $e0
TOK_ATN         = $e1
TOK_PEEK        = $e2
TOK_LEN         = $e3
TOK_STR         = $e4
TOK_VAL         = $e5
TOK_ASC         = $e6
TOK_CHR         = $e7
TOK_LEFT        = $e8
TOK_RIGHT       = $e9
TOK_MID         = $ea
; end of tokens
