84PCE:OS:C Include File

From WikiTI
Revision as of 23:34, 24 October 2016 by MateoConLechuga (Talk | contribs)

Jump to: navigation, search

C Definitions

// Parts from Matt "MateoConLechuga" Waltz and Jacob "jacobly" Young, in addtion to
// contributors of http://wikiti.brandonw.net/index.php?title=84PCE:OS:Include_File
// Latest as of October 2016

#ifndef TICE_H
#define TICE_H

#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>


/************* HARDWARE AND CUSTOM ROUTINES *************/


/* Creates a random integer value */
#define randInt(min, max)   (unsigned)rand() % ((max) - (min) + 1) + (min))

/* RTC define -- useful for srand() */
#define rtc_Time()          (*(volatile uint32_t*)0xF30044)

/* RTC definitions */
#define RTC_UNFREEZE        (1<<7)
#define RTC_FREEZE          (0<<7)
#define RTC_LOAD            (1<<6)
#define RTC_ENABLE          (1<<0)|RTC_UNFREEZE
#define RTC_DISABLE         (0<<0)

/* RTC registers */
#define rtc_Seconds         (*(volatile uint8_t*)0xF30000)
#define rtc_Minutes         (*(volatile uint8_t*)0xF30004)
#define rtc_Hours           (*(volatile uint8_t*)0xF30008)
#define rtc_Days            (*(volatile uint16_t*)0xF3000C)
#define rtc_AlarmSeconds    (*(uint8_t*)0xF30010)
#define rtc_AlarmMinutes    (*(uint8_t*)0xF30014)
#define rtc_AlarmHours      (*(uint8_t*)0xF30018)
#define rtc_Control         (*(uint8_t*)0xF30020)
#define rtc_LoadSeconds     (*(uint8_t*)0xF30024)
#define rtc_LoadMinutes     (*(uint8_t*)0xF30028)
#define rtc_LoadHours       (*(uint8_t*)0xF3002C)
#define rtc_LoadDays        (*(uint16_t*)0xF30030)
#define rtc_IntStatus       (*(volatile uint8_t*)0xF30034)
#define rtc_IntAcknowledge  (*(volatile uint8_t*)0xF30034)
#define rtc_IsBusy()        (rtc_Control & RTC_LOAD)

/* RTC interrupt masks */
#define RTC_ALARM_INT_SOURCE    (1<<5)
#define RTC_DAY_INT_SOURCE      (1<<4)
#define RTC_HR_INT_SOURCE       (1<<3)
#define RTC_MIN_INT_SOURCE      (1<<2)
#define RTC_SEC_INT_SOURCE      (1<<1)

/* RTC interrupt statuses */
#define RTC_LOAD_INT            (1<<5)
#define RTC_ALARM_INT           (1<<4)
#define RTC_DAY_INT             (1<<3)
#define RTC_HR_INT              (1<<2)
#define RTC_MIN_INT             (1<<1)
#define RTC_SEC_INT             (1<<0)
#define RTC_INT_MASK            (RTC_SEC_INT | RTC_MIN_INT | RTC_HR_INT | RTC_DAY_INT | RTC_ALARM_INT | RTC_LOAD_INT)

/* Whole bunch of useful timer functions */
#define TIMER1_ENABLE	1 << 0	// Enables Timer 1
#define TIMER1_DISABLE	0 << 0	// Disables Timer 1
#define TIMER1_32K	1 << 1	// Use the 32K clock for timer 1
#define TIMER1_CPU	0 << 1	// Use the CPU clock rate for timer 1
#define TIMER1_0INT	1 << 2	// Enable an interrupt when 0 is reached for the timer 1
#define TIMER1_NOINT	0 << 2	// Disable interrupts for the timer 1
#define TIMER1_UP	1 << 9	// Timer 1 counts up
#define TIMER1_DOWN	0 << 9	// Timer 1 counts down

#define TIMER2_ENABLE	1 << 3	// Enables Timer 2
#define TIMER2_DISABLE	0 << 3	// Enables Timer 2
#define TIMER2_32K	1 << 4	// Use the 32K clock for timer 2
#define TIMER2_CPU	0 << 4	// Use the CPU clock rate for timer 2
#define TIMER2_0INT	1 << 5	// Enable an interrupt when 0 is reached for the timer 2
#define TIMER2_NOINT	0 << 5	// Disable interrupts for the timer 2
#define TIMER2_UP	1 << 10	// Timer 2 counts up
#define TIMER2_DOWN	0 << 10	// Timer 2 counts down

/* These defines can be used to check the status of the timer */
#define TIMER1_MATCH1	1 << 0	// Timer 1 hit the first match value
#define TIMER1_MATCH2	1 << 1	// Timer 1 hit the second match value
#define TIMER1_RELOADED	1 << 2	// Timer 1 was reloaded (Needs to have TIMER1_0INT enabled)

#define TIMER2_MATCH1	1 << 3	// Timer 2 hit the first match value
#define TIMER2_MATCH2	1 << 4	// Timer 2 hit the second match value
#define TIMER2_RELOADED	1 << 5	// Timer 2 was reloaded (Needs to have TIMER2_0INT enabled)

/* Timer registers */
#define timer_1_Counter		(*(volatile uint32_t *)0xF20000)
#define timer_2_Counter		(*(volatile uint32_t *)0xF20010)
#define timer_1_ReloadValue	(*(uint32_t *)0xF20004)
#define timer_2_ReloadValue	(*(uint32_t *)0xF20014)
#define timer_1_MatchValue_1	(*(uint32_t *)0xF20008) 
#define timer_1_MatchValue_2	(*(uint32_t *)0xF2000C)
#define timer_2_MatchValue_1	(*(uint32_t *)0xF20018)
#define timer_2_MatchValue_2	(*(uint32_t *)0xF2001C)
#define timer_Control		(*(uint32_t *)0xF20030)
#define timer_EnableInt		(*(uint16_t *)0xF20038)
#define timer_IntStatus		(*(volatile uint16_t *)0xF20034)
#define timer_IntAcknowledge	(*(volatile uint16_t *)0xF20034)

/* LCD defines */
#define lcd_BacklightLevel      (*(uint8_t*)0xF60024)

/* OS varaible type definitions */
typedef struct { int8_t sign, exp; uint8_t mant[7]; } real_t;
typedef struct { real_t real, imag; } cplx_t;
typedef struct { uint16_t dim; real_t items[1]; } list_t;
typedef struct { uint16_t dim; cplx_t items[1]; } cplx_list_t;
typedef struct { uint8_t cols, rows; real_t items[1]; } matrix_t;
typedef struct { uint16_t len; char data[1]; } string_t;
typedef struct { uint16_t len; char data[1]; } equ_t;
typedef struct { uint16_t size; uint8_t data[1]; } var_t;

#define matrix_element(matrix, row, col) ((matrix)->items[(row)+(col)*(matrix)->rows])
#define NEG_SIGN_MASK    0x80
#define POS_SIGN_MASK    0x00
#define CPLX_SIGN_MASK   0x0C

/* Cleans up everything and gets ready to enter back to the OS when you are ready to exit your program */
void prgm_CleanUp(void);
#define pgrm_CleanUp prgm_CleanUp

/* A faster implementation of memset */
void *memset_fast(void *ptr,int value,size_t num);


/************* TI OS SPECIFIC ROUTINES AND IMPLEMENTATIONS *************/


/**
 * Resets the RTC back to its original values
 * If enable is true, the RTC will be enabled during this function
 */
void boot_RTCInitialize(bool enable);

/**
 * Returns the Bootcode version major
 */
uint8_t boot_GetBootVerMajor(void);

/**
 * Returns the Bootcode version minor
 */
uint8_t boot_GetBootVerMinor(void);

/**
 * Returns the Harware version
 */
uint8_t boot_GetHardwareVers(void);

/**
 * Turns all of VRAM into 0xFF (white)
 */
void boot_ClearVRAM(void);

/**
 * Checks if the [on] key was pressed
 */
bool boot_CheckOnPressed(void);

/** 
 * Basically a reimplemented form of printf that prints to some debugging device
 */
void boot_DebugPrintf(const char *string);

/**
 * Turns off the calculator (probably not a good idea to use)
 */
void boot_TurnOff(void);

/**
 * Inserts a new line at the current cursor posistion on the homescreen
 */
void boot_NewLine(void);

/**
 * Prints the boot version at a really silly place on the homescreen
 */
void boot_PrintBootVersion(void);

/**
 * Returns the current battery status
 */
uint8_t boot_GetBatteryStatus(void);

/**
 * Waits for 10 ms
 */
void boot_WaitShort(void);

/**
 * Set the time of the calculator
 */
void boot_SetTime(uint8_t seconds, uint8_t minutes, uint8_t hours);

/**
 * Disables the OS cursor
 */
void os_DisableCursor(void);

/**
 * Enables the OS cursor
 */
void os_EnableCursor(void);

/**
 * Set/Get the foreground color used to draw text on the graphscreen
 */
void os_SetDrawFGColor(int color);
uint24_t os_GetDrawFGColor(void);

/**
 * Set/Get the backgroundground color used to draw text on the graphscreen
 * os_GetDrawBGColor is only useable in OS 5.2 and above; use at your own risk
 */
void os_SetDrawBGColor(uint24_t color);
uint24_t os_GetDrawBGColor(void);

/**
 * Set/Get the cursor posistion used on the homescreen
 */
void os_SetCursorPos(uint8_t curRow, uint8_t curCol);
void os_GetCursorPos(uint8_t **curRow, uint8_t **curCol);

/**
 * Selects/Gets the font to use when drawing on the graphscreen
 * 0: small font
 * 1: large monospace font
 */
void os_FontSelect(char id);
uint24_t os_FontGetID(void);

/**
 * Returns the width of a string in the varaible-width format
 * Second function is used to get the height of the characters
 */
uint24_t os_FontGetWidth(const char *string);
uint24_t os_FontGetHeight(void);

/**
 * Draws a text using the small font to the screen
 * Returns the end column
 */
uint24_t os_FontDrawText(const char *string, uint16_t col, uint8_t row);
uint24_t os_FontDrawTransText(const char *string, uint16_t col, uint8_t row);

/**
 * Puts some text at the current homescreen cursor location
 * Returns 1 if string fits on screen, 0 otherwise
 */
uint24_t os_PutStrFull(const char *string);

/**
 * Puts some text at the current homescreen cursor location
 * Returns 1 if string fits on line, 0 otherwise
 */
uint24_t os_PutStrLine(const char *string);

/**
 * Set/Get a particular flag variable
 */
void os_SetFlagByte(int offset, uint8_t set);
uint8_t os_GetFlagByte(int offset);

/**
 * Returns amount of free ram, free set to start of free ram
 */
size_t os_MemChk(void **free);

/**
 * Throws an OS error
 */
void os_ThrowError(uint8_t error);

/**
 * Returns a pointer to the system stats
 */
void *os_GetSystemStats(void);

/**
 * Sets up the defualt error handlers if an OS routine encounters an error when running
 */
void os_PushErrorHandler(void *routine);
void os_PopErrorHandler(void);

/**
 * Returns a pointer to symtable of the OS
 */
void *os_GetSymTablePtr(void);

/**
 * Creates an appvar; and returns a pointer to the structure 
 * Returns NULL if creation failed for some reason, otherwise a pointer to the size bytes
 */
var_t *os_CreateAppVar(const char *name, uint16_t size);

/**
 * Returns next entry or NULL if no more entries, pass os_GetSymTablePtr() as first entry
 */
void *os_NextSymEntry(void *entry, uint24_t *type, uint24_t *nameLength, const char *name, void **data);

/**
 * If file exists, returns 1 and sets entry and data, otherwise returns 0.
 * entry and/or data can be NULL if you don't care
 */
int os_ChkFindSym(uint8_t type, const char *name, void **entry, void **data);

/**
 * type is set to the current varaible type in ANS, and a pointer to the data is returned
 * Returns NULL if Ans doesn't exist or type is NULL
 */
void *os_RclAns(uint8_t *type);

/**
 * Copies a real_t
 */
real_t os_RealCopy(const real_t *src);

/**
 * Unary operations used to interact with the OS math functions
 */
real_t os_RealAcosRad(const real_t *arg);
real_t os_RealAsinRad(const real_t *arg);
real_t os_RealAtanRad(const real_t *arg);
real_t os_RealCosRad(const real_t *arg);
real_t os_RealRadToDeg(const real_t *arg);
real_t os_RealExp(const real_t *arg);
real_t os_RealFloor(const real_t *arg);
real_t os_RealFrac(const real_t *arg);
real_t os_RealRoundInt(const real_t *arg);
real_t os_RealLog(const real_t *arg);
real_t os_RealNeg(const real_t *arg);
real_t os_RealDegToRad(const real_t *arg);
real_t os_RealInv(const real_t *arg);
real_t os_RealSinRad(const real_t *arg);
real_t os_RealSqrt(const real_t *arg);
real_t os_RealTanRad(const real_t *arg);
real_t os_RealInt(const real_t *arg);
cplx_t os_CplxSquare(const cplx_t *arg);

/**
 * Binary operations used to interact with the OS math functions
 */
real_t os_RealAdd(const real_t *arg1, const real_t *arg2);
real_t os_RealDiv(const real_t *arg1, const real_t *arg2);
real_t os_RealGcd(const real_t *arg1, const real_t *arg2);
real_t os_RealLcm(const real_t *arg1, const real_t *arg2);
real_t os_RealMax(const real_t *arg1, const real_t *arg2);
real_t os_RealMin(const real_t *arg1, const real_t *arg2);
real_t os_RealMul(const real_t *arg1, const real_t *arg2);
real_t os_RealNcr(const real_t *total, const real_t *num);
real_t os_RealNpr(const real_t *total, const real_t *num);
real_t os_RealPow(const real_t *base, const real_t *exp);
real_t os_RealRandInt(const real_t *min, const real_t *max);
real_t os_RealMod(const real_t *arg1, const real_t *arg2);
real_t os_RealSub(const real_t *arg1, const real_t *arg2);
/**
 * digits must be in the range 0 - 9
 */
real_t os_RealRound(const real_t *arg, char digits);

/**
 * Returns -1, 0, or 1 depending on the comparison
 */
int os_RealCompare(const real_t *arg1, const real_t *arg2);

/**
 * Conversion routines for ti-floats.
 * All saturate on overflow.
 */
int24_t os_RealToInt24(const real_t *arg);
real_t os_Int24ToReal(int24_t arg);
float os_RealToFloat(const real_t *arg);
real_t os_FloatToReal(float arg);

/** os_RealToStr:
  *  This converts a ti-float to a ti-ascii string.
  *  result: zero terminated string copied to this address
  *  arg: real to convert
  * maxLength: 
  *  <=0: use default max length (14)
  *  >0:  max length of result, minimum of 6
  * mode:
  *  0: Use current mode for everything (digits ignored)
  *  1: Normal mode
  *  2: Sci mode
  *  3: Eng mode
  *  >4: Use current Normal/Sci/Eng mode (digits still used)
  * digits:
  *  -1:  Float mode
  *  0-9: Fix # mode
  *  returns length of result
  */
int os_RealToStr(char *result, const real_t *arg, char maxLength, char mode, char digits);

/** os_StrToReal:
  *  This converts a ti-ascii string to a ti-float.
  *  String format regexp: / *[-\032+]?[0-9]*(\.[0-9]*)?([eE\033][-\032+]?[0-9]*)?/
  *  result: resulting ti-float stored here, on exponent overflow this is +-9.9999999999999e99
  *  string: ti-ascii string to convert
  *  end: if non-null, pointer to end of parsed number is stored here
  *  returns result
  */
real_t os_StrToReal(const char *string, char **end);

/**
 * High 8 is unsigned offset, low 8 is bits to test
 * os_TestFlagBits will return a 0 or 1
 */
int os_TestFlagBits(uint16_t offset_pattern);
void os_SetFlagBits(int16_t offset_pattern);
void os_ResetFlagBits(int16_t offset_pattern);

/**
 * Returns extended key in high byte
 */
uint16_t os_GetKey(void);

/**
 * Performs an OS call to get the keypad scan code
 * Technically return type is uint24_t, but that is not useful as the high byte is 0
 * Values returned are listed below
 */
uint8_t os_GetCSC(void);
typedef uint8_t sk_key_t;

/**
 * Things you shouldn't use unless you know what you are doing
 */
void os_ForceCmdNoChar(void);
void boot_Set6MHzMode(void);
void boot_Set48MHzMode(void);
void boot_Set6MHzModeI(void);
void boot_Set48MHzModeI(void);

/**
 * Use this function to call assembly functions in the OS and Bootcode
 * i.e. _OS( asm_HomeUp );
 */
void _OS(void (*function)(void));

/**
 * Assembly functions ( Don't forget to call from _OS() )
 */
void asm_MoveUp(void);
void asm_MoveDown(void);
void asm_HomeUp(void);
void asm_RunIndicOn(void);
void asm_RunIndicOff(void);
void asm_DisableAPD(void);
void asm_EnableAPD(void);
void asm_ArcChk(void);

/**
 * OS RAM Location defines for direct modification
 */
#define OS_BLUE_COLOR       10
#define OS_RED_COLOR        11
#define OS_BLACK_COLOR      12
#define OS_MAGENTA_COLOR    13
#define OS_GREEN_COLOR      14
#define OS_ORANGE_COLOR     15
#define OS_BROWN_COLOR      16
#define OS_NAVY_COLOR       17
#define OS_LTBLUE_COLOR     18
#define OS_YELLOW_COLOR     19
#define OS_WHITE_COLOR      20
#define OS_LTGRAY_COLOR     21
#define OS_MEDGRAY_COLOR    22
#define OS_GRAY_COLOR       23
#define OS_DARKGRAY_COLOR   24

#define os_ramStart          ((uint8_t*)0xD00000)
#define os_flags             ((uint8_t*)0xD00080)
#define os_textFlags         (*(uint8_t*)0xD00080)
#define os_apdFlags          (*(uint8_t*)0xD00088)
#define os_rclFlags          (*(uint8_t*)0xD0008E)
 
#define os_kbdScanCode       (*(uint8_t*)0xD00587)
#define os_kbdLGSC           (*(uint8_t*)0xD00588)
#define os_kbdPSC            (*(uint8_t*)0xD00589)
#define os_kbdWUR            (*(uint8_t*)0xD0058A)
#define os_kbdDebncCnt       (*(uint8_t*)0xD0058B)
#define os_kbdKey	     (*(uint8_t*)0xD0058C)
#define os_kbdGetKy          (*(uint8_t*)0xD0058D)
#define os_keyExtend         (*(uint8_t*)0xD0058E)
#define os_brightness        (*(uint8_t*)0xD0058F)
#define os_apdSubTimer       (*(uint8_t*)0xD00590)
#define os_apdTimer          (*(uint8_t*)0xD00591)
#define os_curRow            (*(uint8_t*)0xD00595)
#define os_curCol            (*(uint8_t*)0xD00596)

#define os_OP1               ((uint8_t*)0xD005F8)
#define os_OP2               ((uint8_t*)0xD00603)
#define os_OP3               ((uint8_t*)0xD0060E)
#define os_OP4               ((uint8_t*)0xD00619)
#define os_OP5               ((uint8_t*)0xD00624)
#define os_OP6               ((uint8_t*)0xD0062F)

#define os_progToEdit        ((char*)0xD0065B)
#define os_nameBuff          ((char*)0xD00663)

#define os_promptRow         (*(uint8_t*)0xD00800)
#define os_promptCol         (*(uint8_t*)0xD00801)
#define os_promptIns         (*(uint8_t*)0xD00802)
#define os_promptShift       (*(uint8_t*)0xD00803)
#define os_promptRet         (*(uint8_t*)0xD00804)
#define os_promptValid       (*(uint8_t*)0xD00807)

#define os_penCol            (*(uint24_t*)0xD008D2)
#define os_penRow            (*(uint8_t*)0xD008D5)

#define os_asmPrgmSize       (*(uint16_t*)0xD0118C) 

#define os_y1LineType        (*(uint8_t*)0xD024BF)
#define os_y2LineType        (*(uint8_t*)0xD024C0)
#define os_y3LineType        (*(uint8_t*)0xD024C1)
#define os_y4LineType        (*(uint8_t*)0xD024C2)
#define os_y5LineType        (*(uint8_t*)0xD024C3)
#define os_y6LineType        (*(uint8_t*)0xD024C4)
#define os_y7LineType        (*(uint8_t*)0xD024C5)
#define os_y8LineType        (*(uint8_t*)0xD024C6)
#define os_y9LineType        (*(uint8_t*)0xD024C7)
#define os_y0LineType        (*(uint8_t*)0xD024C8)
#define os_para1LineType     (*(uint8_t*)0xD024C9)
#define os_para2LineType     (*(uint8_t*)0xD024CA)
#define os_para3LineType     (*(uint8_t*)0xD024CB)
#define os_para4LineType     (*(uint8_t*)0xD024CC)
#define os_para5LineType     (*(uint8_t*)0xD024CD)
#define os_para6LineType     (*(uint8_t*)0xD024CE)
#define os_polar1LineType    (*(uint8_t*)0xD024CF)
#define os_polar2LineType    (*(uint8_t*)0xD024D0)
#define os_polar3LineType    (*(uint8_t*)0xD024D1)
#define os_polar4LineType    (*(uint8_t*)0xD024D2)
#define os_polar5LineType    (*(uint8_t*)0xD024D3)
#define os_polar6LineType    (*(uint8_t*)0xD024D4)
#define os_secULineType      (*(uint8_t*)0xD024D5)
#define os_secVLineType      (*(uint8_t*)0xD024D6)
#define os_secWLineType      (*(uint8_t*)0xD024D7)
#define os_y1LineColor       (*(uint8_t*)0xD024D8)
#define os_y2LineColor       (*(uint8_t*)0xD024D9)
#define os_y3LineColor       (*(uint8_t*)0xD024DA)
#define os_y4LineColor       (*(uint8_t*)0xD024DB)
#define os_y5LineColor       (*(uint8_t*)0xD024DC)
#define os_y6LineColor       (*(uint8_t*)0xD024DD)
#define os_y7LineColor       (*(uint8_t*)0xD024DE)
#define os_y8LineColor       (*(uint8_t*)0xD024DF)
#define os_y9LineColor       (*(uint8_t*)0xD024E0)
#define os_y0LineColor       (*(uint8_t*)0xD024E1)
#define os_para1LineColor    (*(uint8_t*)0xD024E2)
#define os_para2LineColor    (*(uint8_t*)0xD024E3)
#define os_para3LineColor    (*(uint8_t*)0xD024E4)
#define os_para4LineColor    (*(uint8_t*)0xD024E5)
#define os_para5LineColor    (*(uint8_t*)0xD024E6)
#define os_para6LineColor    (*(uint8_t*)0xD024E7)
#define os_polar1LineColor   (*(uint8_t*)0xD024E8)
#define os_polar2LineColor   (*(uint8_t*)0xD024E9)
#define os_polar3LineColor   (*(uint8_t*)0xD024EA)
#define os_polar4LineColor   (*(uint8_t*)0xD024EB)
#define os_polar5LineColor   (*(uint8_t*)0xD024EC)
#define os_polar6LineColor   (*(uint8_t*)0xD024ED)
#define os_secULineColor     (*(uint8_t*)0xD024EE)
#define os_secVLineColor     (*(uint8_t*)0xD024EF)
#define os_secWLineColor     (*(uint8_t*)0xD024F0)

#define os_appErr1           ((char*)0xD025A9)
#define os_appErr2           ((char*)0xD025B6)

#define os_cursorHookPtr     (*(uint24_t*)0xD025D5)
#define os_libraryHookPtr    (*(uint24_t*)0xD025D8)
#define os_rawKeyHookPtr     (*(uint24_t*)0xD025DB)
#define os_getKeyHookPtr     (*(uint24_t*)0xD025DE)
#define os_homescreenHookPtr (*(uint24_t*)0xD025E1)
#define os_windowHookPtr     (*(uint24_t*)0xD025E4)
#define os_graphHookPtr      (*(uint24_t*)0xD025E7)
#define os_yEqualsHookPtr    (*(uint24_t*)0xD025EA)
#define os_fontHookPtr       (*(uint24_t*)0xD025ED)
#define os_regraphHookPtr    (*(uint24_t*)0xD025F0)
#define os_graphicsHookPtr   (*(uint24_t*)0xD025F3)
#define os_traceHookPtr      (*(uint24_t*)0xD025F6)
#define os_parserHookPtr     (*(uint24_t*)0xD025F9)
#define os_appChangeHookPtr  (*(uint24_t*)0xD025FC)
#define os_catalog1HookPtr   (*(uint24_t*)0xD025FF)
#define os_helpHookPtr       (*(uint24_t*)0xD02602)
#define os_cxRedispHookPtr   (*(uint24_t*)0xD02605)
#define os_menuHookPtr       (*(uint24_t*)0xD02608)
#define os_catalog2HookPtr   (*(uint24_t*)0xD0260B)
#define os_tokenHookPtr      (*(uint24_t*)0xD0260E)
#define os_localizeHookPtr   (*(uint24_t*)0xD02611)
#define os_silentLinkHookPtr (*(uint24_t*)0xD02614)
#define os_USBActiveHookPtr  (*(uint24_t*)0xD0261A)

#define os_tempFreeArc       (*(uint24_t*)0xD02655) /* Set after asm_ArcChk call */

#define os_textBGcolor       (*(uint16_t*)0xD02688)
#define os_textFGcolor       (*(uint16_t*)0xD0268A)

#define os_drawBGColor       (*(uint16_t*)0xD026AA)
#define os_drawFGColor       (*(uint16_t*)0xD026AC)
#define os_drawColorCode     (*(uint8_t*)0xD026AE)

#define os_batteryStatus     (*(uint8_t*)0xD02A86)

#define os_graphBGColor      ((uint16_t*)0xD02A98)

#define os_fillRectColor     (*(uint16_t*)0xD02AC0)
#define os_statusBarBGColor  ((uint16_t*)0xD02ACC)

/**
 * ---- TI-OS Token definitions ----
 */
#define tToDMS		0x01
#define tToDEC		0x02
#define tToAbc		0x03
#define tStore		0x04	// ->
#define tBoxPlot	0x05
#define tLBrack		0x06	// '['
#define tRBrack		0x07	// ']'
#define tLBrace		0x08	// '{'
#define tRBrace		0x09	// '}'
#define tFromRad	0x0A
#define tFromDeg	0x0B
#define tRecip		0x0C
#define tSqr		0x0D
#define tTrnspos	0x0E
#define tCube		0x0F	// '^3'
#define tLParen		0x10	// '('
#define tRParen		0x11	// ')'
#define tRound		0x12	// 'round'
#define tPxTst		0x13	// 'PXL-TEST'
#define tAug		0x14	// 'aug'
#define tRowSwap	0x15	// 'rSwap'
#define tRowPlu		0x16	// 'rAdd'
#define tmRow		0x17	// 'multR'
#define tmRowPlus	0x18	// 'mRAdd'
#define tMax		0x19	// 'max'
#define tMin		0x1A	// 'min'
#define tRToPr		0x1B	// 'R>Pr'
#define tRToPo		0x1C	// 'R>Po'
#define tPToRx		0x1D	// 'P>Rx'
#define tPToRy		0x1E	// 'P>Ry'
#define tMedian		0x1F	// 'MEDIAN'
#define tRandM		0x20	// 'randM'
#define tMean		0x21	// 'MEAN'
#define tRoot		0x22	// 'ROOT'
#define tSeries		0x23	// 'seq'
#define tFnInt		0x24	// 'fnInt'
#define tNDeriv		0x25	// 'fnIr'
#define tEvalF		0x26
#define tFmin		0x27
#define tFmax		0x28
#define tSpace		0x29	// ' '
#define tString		0x2A	// '"'
#define tComma		0x2B	// ','
#define tii		0x2C	// 'i'
#define tFact		0x2D	// '!'
#define tCubicR		0x2E
#define tQuartR		0x2F
#define t0		0x30
#define t1		0x31
#define t2		0x32
#define t3		0x33
#define t4		0x34
#define t5		0x35
#define t6		0x36
#define t7		0x37
#define t8		0x38
#define t9		0x39
#define tDecPt		0x3A	// '.'
#define tee		0x3B	// 'e'
#define tOr		0x3C	// '_or_'
#define tXor		0x3D
#define tColon		0x3E	// ':'
#define tEnter		0x3F
#define tAnd		0x40	// '_and_'
#define tA		0x41
#define tB		0x42
#define tC		0x43
#define tD		0x44
#define tE		0x45
#define tF		0x46
#define tG		0x47
#define tH		0x48
#define tI		0x49
#define tJ		0x4A
#define tK		0x4B
#define tL		0x4C
#define tM		0x4D
#define tN		0x4E
#define tO		0x4F
#define tP		0x50
#define tQ		0x51
#define tR		0x52
#define tS		0x53
#define tT		0x54
#define tU		0x55
#define tV		0x56
#define tW		0x57
#define tX		0x58
#define tY		0x59
#define tZ		0x5A
#define tTheta		0x5B

/**
 * Extended Tokens
 */
#define tExtTok		0xEF
#define tSetDate	0x00
#define tSetTime	0x01
#define tCheckTmr	0x02
#define tSetDtFmt	0x03
#define tSetTmFmt	0x04
#define tTimeCnv	0x05
#define tDayOfWk	0x06
#define tGetDtStr	0x07
#define tGetTmStr	0x08
#define tGetDate	0x09
#define tGetTime	0x0A
#define tStartTmr	0x0B
#define tGtDtFmt	0x0C
#define tGetTmFmt	0x0D
#define tIsClockOn	0x0E
#define tClockOff	0x0F
#define tClockOn	0x10
#define tOpenLib	0x11
#define tExecLib	0x12
#define tInvT		0x13
#define tChiSquaredTest	0x14
#define tLinRegTInt	0x15
#define tManualFit	0x16
#define tZQuadrant	0x17
#define tZFracHalf	0x18
#define tZFracThird	0x19
#define tZFracFourth	0x1A
#define tZFracFifth	0x1B
#define tZFracEighth	0x1C
#define tZFracTenth	0x1D
#define tFracSlash	0x2E
#define tFracMixedNum	0x2F
#define tSwapImProper	0x30
#define tSwapFracDec	0x31
#define tRemainder	0x32
#define tSummationSigma	0x33
#define tLogBase	0x34
#define tRandIntNoRep	0x35
#define tMathPrint	0x36
#define tClassic	0x38
#define tAutoAnswer	0x3B
#define tDecAnswer	0x3C
#define tFracAnswer	0x3D
#define tBlue		0x41
#define tRed		0x42
#define tBlack		0x43
#define tMagenta	0x44
#define tGreen		0x45
#define tOrange		0x46
#define tBrown		0x47
#define tNavy		0x48
#define tLtBlue		0x49
#define tYellow		0x4A
#define tWhite		0x4B
#define tLtGray		0x4C
#define tMedGray	0x4D
#define tGray		0x4E
#define tDarkGray	0x4F
#define tGraphColor	0x65
#define tTextColor	0x67
#define tBackgroundOn	0x5B
#define tBackgroundOff	0x64
#define tThin		0x74
#define tBorderColor	0x6C
#define tAsm84CPrgm	0x68
#define tAsm84CCmp	0x69
#define tAsm84CeCmp	0x7B
#define tAsm84CePrgm	0x7A

#define tVarMat		0x5C
#define tVarLst		0x5D
#define tVarEqu		0x5E
#define tProg		0x5F
#define tVarPict	0x60
#define tVarGDB		0x61
#define tVarOut		0x62
#define tVarSys		0x63

/**
 * Mode settings tokens
 */
#define tRad		0x64	// 'Radian'
#define tDeg		0x65	// 'Degree'
#define tNormF		0x66	// 'Normal'
#define tSci		0x67	// 'Sci'
#define tEng		0x68	// 'Eng'
#define tFloat		0x69	// 'Float'
#define tFix		0x73	// 'Fix_'
#define tSplitOn	0x74
#define tFullScreen	0x75
#define tStndrd		0x76	// 'Func'
#define tParam		0x77	// 'Param'
#define tPolar		0x78	// 'Pol'
#define tSeqG		0x79	// ;79h
#define tAFillOn	0x7A	// 'AUTO FILL ON'
#define tAFillOff	0x7B	// 'AutoFill OFF'
#define tACalcOn	0x7C
#define tACalcOff	0x7D

#define tEQ		0x6A	// '=='
#define tLT		0x6B	// '<'
#define tGT		0x6C	// '>'
#define tLE		0x6D	// LLE
#define tGE		0x6E	// LGE
#define tNE		0x6F	// LNE
#define tAdd		0x70	// '+'
#define tSub		0x71	// '-'
#define tMul		0x82	// '*'
#define tDiv		0x83	// '/'
#define tAns		0x72

#define tBoxIcon	0x7F
#define tCrossIcon	0x80
#define tDotIcon	0x81

#define tTrace		0x84	// 'Trace'
#define tClDrw		0x85	// 'ClDraw'
#define tZoomStd	0x86	// 'ZStd'
#define tZoomtrg	0x87	// 'Ztrg'
#define tZoomBox	0x88	// 'ZBOX'
#define tZoomIn		0x89	// 'ZIn'
#define tZoomOut	0x8A	// 'ZOut'
#define tZoomSqr	0x8B	// 'ZSqr'
#define tZoomInt	0x8C	// 'ZInt'
#define tZoomPrev	0x8D	// 'ZPrev'
#define tZoomDec	0x8E	// 'ZDecm'
#define tZoomStat	0x8F	// 'ZStat
#define tUsrZm		0x90	// 'ZRcl'
#define tPrtScrn	0x91	// 'PrtScrn'
#define tZoomSto	0x92	//  'ZSto'
#define tText		0x93

#define tnPr		0x94	// '_nPr_'
#define tnCr		0x95	// '_nCr_'

// Graph Commands
#define tYOn		0x96	// 'FnOn_'
#define tYOff		0x97	// 'FnOff_'
#define tStPic		0x98	// 'StPic_'
#define tRcPic		0x99	// 'RcPic_'
#define tStoDB		0x9A	// 'StGDB_'
#define tRclDB		0x9B	// 'RcGDB_'
#define tLine		0x9C	// 'Line'
#define tVert		0x9D	// 'Vert_'
#define tPtOn		0x9E	// 'PtOn'
#define tPtOff		0x9F	// 'PtOff'
#define tPtChg		0xA0	// 'PtChg'
#define tPXOn		0xA1
#define tPXOff		0xA2
#define tPXChg		0xA3
#define tShade		0xA4	// 'Shade'
#define tCircle		0xA5	// 'Circle'
#define tHorz		0xA6	// 'HORIZONTAL'
#define tTanLn		0xA7	// 'TanLn'
#define tDrInv		0xA8	// 'DrInv_'
#define tDrawF		0xA9	// 'DrawF_'
#define tVarStrng	0xAA

// Functions with No Argument
#define tRand		0xAB	// 'rand'
#define tPi		0xAC	//  Lpi
#define tGetKey		0xAD	// 'getKy'
#define tAPost		0xAE	// '''
#define tQuest		0xAF	// '?'
#define tChs		0xB0
#define tInt		0xB1
#define tAbs		0xB2
#define tDet		0xB3
#define tIdent		0xB4
#define tDim		0xB5
#define tSum		0xB6
#define tProd		0xB7
#define tNot		0xB8
#define tIPart		0xB9
#define tFPart		0xBA

// New 2 Byte Tokens
#define t2ByteTok	0xBB
#define tSqrt		0xBC
#define tCubRt		0xBD
#define tLn		0xBE
#define tExp		0xBF
#define tLog		0xC0
#define tALog		0xC1
#define tSin		0xC2
#define tASin		0xC3
#define tCos		0xC4
#define tACos		0xC5
#define tTan		0xC6
#define tATan		0xC7
#define tSinH		0xC8
#define tASinH		0xC9
#define tCoshH		0xCA
#define tACosH		0xCB
#define tTanH		0xCC
#define tATanH		0xCD

// Some Programming Commands
#define tIf		0xCE	// 'If_'
#define tThen		0xCF	// 'Then_'
#define tElse		0xD0	// 'Else_'
#define tWhile		0xD1	// 'While_'
#define tRepeat		0xD2	// 'Repeat_'
#define tFor		0xD3	// 'For_'
#define tEnd		0xD4	// 'End'
#define tReturn		0xD5	// 'Return'
#define tLbl		0xD6	// 'Lbl_'
#define tGoto		0xD7	// 'Goto_'
#define tPause		0xD8	// 'Pause_'
#define tStop		0xD9	// 'Stop'
#define tISG		0xDA	// 'IS>'
#define tDSL		0xDB	// 'DS<'
#define tInput		0xDC	// 'Input_'
#define tPrompt		0xDD	// 'Prompt_'
#define tDisp		0xDE	// 'Disp_'
#define tDispG		0xDF	// 'DispG'
#define tOutput		0xE0	// 'Outpt'
#define tClLCD		0xE1	// 'ClLCD'
#define tConst		0xE2	// 'Fill'
#define tSortA		0xE3	// 'sortA_'
#define tSortD		0xE4	// 'sortD_'
#define tDispTab	0xE5	// 'Disp Table
#define tMenu		0xE6	// 'Menu'
#define tSendMBL	0xE7	// 'Send'
#define tGetMBL		0xE8	// 'Get'

// Stat Plot Commands
#define tPlotOn		0xE9	// 'PLOTSON'
#define tPlotOff	0xEA	// 'PLOTSOFF
#define tListName	0xEB	// List Designator
#define tPlot1		0xEC
#define tPlot2		0xED
#define tPlot3		0xEE
#define tUnused01	0xEF	// available?
#define tPower		0xF0	// '^'
#define tXRoot		0xF1	// LsupX,Lroot
#define tOneVar		0xF2	// 'OneVar_'
#define tTwoVar		0xF3
#define tLR		0xF4	// 'LinR(A+BX)'
#define tLRExp		0xF5	// 'ExpR_'
#define tLRLn		0xF6	// 'LnR_'
#define tLRPwr		0xF7	// 'PwrR_'
#define tMedMed		0xF8
#define tQuad		0xF9
#define tClrLst		0xFA	// 'Clear List'
#define tClrTbl		0xFB	// 'Clear Table'
#define tHist		0xFC	// 'Hist_'
#define txyLine		0xFD	// 'xyline_'
#define tScatter	0xFE	// 'Scatter_'
#define tLR1		0xFF	// 'LINR(AX+B)'

// 2nd Half Of Graph Format Tokens
#define tSeq		0x00	// 'SeqG'
#define tSimulG		0x01	// 'SimulG'
#define tPolarG		0x02	// 'PolarGC'
#define tRectG		0x03	// 'RectGC'
#define tCoordOn	0x04	// 'CoordOn'
#define tCoordOff	0x05	// 'CoordOff'
#define tDrawLine	0x06	// 'DrawLine'
#define tDrawDot	0x07	// 'DrawDot'
#define tAxisOn		0x08	// 'AxesOn'
#define tAxisOff	0x09	// 'AxesOff'
#define tGridOn		0x0A	// 'GridOn'
#define tGridOff	0x0B	// 'GridOff'
#define tLblOn		0x0C	// 'LabelOn'
#define tLblOff		0x0D	// 'LabelOff'
#define tWebOn		0x0E	// 'WebOn'
#define tWebOff		0x0F	// 'WebOFF'
#define tuv		0x10	// U vs V
#define tvw		0x11	// V vs W
#define tuw		0x12	// U vs W

// 2nd Half Of User Matrix Tokens
#define tMatA		0x00	// MAT A
#define tMatB		0x01	// MAT B
#define tMatC		0x02	// MAT C
#define tMatD		0x03	// MAT D
#define tMatE		0x04	// MAT E
#define tMatF		0x05	// MAT F
#define tMatG		0x06	// MAT G
#define tMatH		0x07	// MAT H
#define tMatI		0x08	// MAT I
#define tMatJ		0x09	// MAT J

// 2nd Half Of User List Tokens
#define tL1		0x00	// LIST 1
#define tL2		0x01	// LIST 2
#define tL3		0x02	// LIST 3
#define tL4		0x03	// LIST 4
#define tL5		0x04	// LIST 5
#define tL6		0x05	// LIST 6

// 2nd Half Of User Equation Tokens
// Y Equations have bit 4 set
#define tY1		0x10	// Y1
#define tY2		0x11	// Y2
#define tY3		0x12	// Y3
#define tY4		0x13	// Y4
#define tY5		0x14	// Y5
#define tY6		0x15	// Y6
#define tY7		0x16	// Y7
#define tY8		0x17	// Y8
#define tY9		0x18	// Y9
#define tY0		0x19	// Y0

// Param Equations Have Bit 5 Set
#define tX1T		0x20	// X1t
#define tY1T		0x21	// Y1t
#define tX2T		0x22	// X2t
#define tY2T		0x23	// Y2t
#define tX3T		0x24	// X3t
#define tY3T		0x25	// Y3t
#define tX4T		0x26	// X4t
#define tY4T		0x27	// Y4t
#define tX5T		0x28	// X5t
#define tY5T		0x29	// Y5t
#define tX6T		0x2A	// X6t
#define tY6T		0x2B	// Y6t

// Polar Equations Have Bit 6 Set
#define tR1		0x40	// R1
#define tR2		0x41	// R2
#define tR3		0x42	// R3
#define tR4		0x43	// R4
#define tR5		0x44	// R5
#define tR6		0x45	// R6

// Recursion Equations Have Bit 7 Set
#define tun		0x80	// Un
#define tvn		0x81	// Vn
#define twn		0x82	// Wn

// 2nd Half User Picture Tokens
#define tPic1		0x00	// PIC1
#define tPic2		0x01	// PIC2
#define tPic3		0x02	// PIC3
#define tPic4		0x03	// PIC4
#define tPic5		0x04	// PIC5
#define tPic6		0x05	// PIC6
#define tPic7		0x06	// PIC7
#define tPic8		0x07	// PIC8
#define tPic9		0x08	// PIC9
#define tPic0		0x09	// PIC0

// 2nd Half User Graph Database Tokens
#define tGDB1		0x00	// GDB1
#define tGDB2		0x01	// GDB2
#define tGDB3		0x02	// GDB3
#define tGDB4		0x03	// GDB4
#define tGDB5		0x04	// GDB5
#define tGDB6		0x05	// GDB6
#define tGDB7		0x06	// GDB7
#define tGDB8		0x07	// GDB8
#define tGDB9		0x08	// GDB9
#define tGDB0		0x09	// GDB0

// 2nd Half Of String Vars
#define tStr1		0x00
#define tStr2		0x01
#define tStr3		0x02
#define tStr4		0x03
#define tStr5		0x04
#define tStr6		0x05
#define tStr7		0x06
#define tStr8		0x07
#define tStr9		0x08
#define tStr0		0x09

// 2nd Half Of System Output Only Variables
#define tRegEq		0x01	// REGRESSION EQUATION
#define tStatN		0x02	// STATISTICS N
#define tXMean		0x03	// X MEAN
#define tSumX		0x04	// SUM(X)
#define tSumXSqr	0x05	// SUM(X^2)
#define tStdX		0x06	// STANDARD DEV X
#define tStdPX		0x07	// STANDARD DEV POP X
#define tMinX		0x08	// Min X VALUE
#define tMaxX		0x09	// Max X VALUE
#define tMinY		0x0A	// Min Y VALUE
#define tMaxY		0x0B	// Max Y VALUE
#define tYmean		0x0C	// Y MEAN
#define tSumY		0x0D	// SUM(Y)
#define tSumYSqr	0x0E	// SUM(Y^2)
#define tStdY		0x0F	// STANDARD DEV Y
#define tStdPY		0x10	// STANDARD DEV POP Y
#define tSumXY		0x11	// SUM(XY)
#define tCorr		0x12	// CORRELATION
#define tMedX		0x13	// MED(X)
#define tQ1		0x14	// 1ST QUADRANT OF X
#define tQ3		0x15	// 3RD QUADRANT OF X
#define tQuadA		0x16	// 1ST TERM OF QUAD POLY REG/ Y-INT
#define tQuadB		0x17	// 2ND TERM OF QUAD POLY REG/ SLOPE
#define tQuadC		0x18	// 3RD TERM OF QUAD POLY REG
#define tCubeD		0x19	// 4TH TERM OF CUBIC POLY REG
#define tQuartE		0x1A	// 5TH TERM OF QUART POLY REG
#define tMedX1		0x1B	// x1 FOR MED-MED
#define tMedX2		0x1C	// x2 FOR MED-MED
#define tMedX3		0x1D	// x3 FOR MED-MED
#define tMedY1		0x1E	// y1 FOR MED-MED
#define tMedY2		0x1F	// y2 FOR MED-MED
#define tMedY3		0x20	// y3 FOR MED-MED
#define tRecurn		0x21	// RECURSION N
#define tStatP		0x22
#define tStatZ		0x23
#define tStatT		0x24
#define tStatChi	0x25
#define tStatF		0x26
#define tStatDF		0x27
#define tStatPhat	0x28
#define tStatPhat1	0x29
#define tStatPhat2	0x2A
#define tStatMeanX1	0x2B
#define tStatStdX1	0x2C
#define tStatN1		0x2D
#define tStatMeanX2	0x2E
#define tStatStdX2	0x2F
#define tStatN2		0x30
#define tStatStdXP	0x31
#define tStatLower	0x32
#define tStatUpper	0x33
#define tStat_s		0x34
#define tLRSqr		0x35	// r^2
#define tBRSqr		0x36	// R^2

// These next tokens are only used to access the data
// They are display only and the user cannot access them at all
#define tF_DF		0x37	// ANOFAV FACTOR DF
#define tF_SS		0x38	// ANOFAV FACTOR SS
#define tF_MS		0x39	// ANOFAV FACTOR MS
#define tE_DF		0x3A	// ANOFAV ERROR DF
#define tE_SS		0x3B	// ANOFAV ERROR SS
#define tE_MS		0x3C	// ANOFAV ERROR MS

// 2nd Half Of System Input/Output Variables
#define tuXscl		0x00
#define tuYscl		0x01
#define tXscl		0x02
#define tYscl		0x03
#define tRecuru0	0x04	// U 1st Initial condition
#define tRecurv0	0x05	// V 1st Initial condition
#define tun1		0x06	// U(N-1); not used
#define tvn1		0x07	// V(N-1); not used
#define tuRecuru0	0x08
#define tuRecurv0	0x09
#define tXmin		0x0A
#define tXmax		0x0B
#define tYmin		0x0C
#define tYmax		0x0D
#define tTmin		0x0E
#define tTmax		0x0F
#define tThetaMin	0x10
#define tThetaMax	0x11
#define tuXmin		0x12
#define tuXmax		0x13
#define tuYmin		0x14
#define tuYmax		0x15
#define tuThetMin	0x16
#define tuThetMax	0x17
#define tuTmin		0x18
#define tuTmax		0x19
#define tTblMin		0x1A
#define tPlotStart	0x1B
#define tuPlotStart	0x1C
#define tnMax		0x1D
#define tunMax		0x1E
#define tnMin		0x1F
#define tunMin		0x20
#define tTblStep	0x21
#define tTStep		0x22
#define tThetaStep	0x23
#define tuTStep		0x24
#define tuThetStep	0x25
#define tDeltaX		0x26
#define tDeltaY		0x27
#define tXFact		0x28
#define tYFact		0x29
#define tTblInput	0x2A
#define tFinN		0x2B
#define tFinI		0x2C
#define tFinPV		0x2D
#define tFinPMT		0x2E
#define tFinFV		0x2F
#define tFinPY		0x30
#define tFinCY		0x31
#define tRecurw0	0x32	// w0(1)
#define tuRecurw0	0x33
#define tPlotStep	0x34
#define tuPlotStep	0x35
#define tXres		0x36
#define tuXres		0x37
#define tRecuru02	0x38	// u0(2)
#define tuRecuru02	0x39
#define tRecurv02	0x3C	// v0(2)
#define tuRecurv02	0x3D
#define tRecurw02	0x3E	// w0(2)
#define tuRecurw02	0x3F

// 2nd Byte Of t2ByteTok Tokens
#define tFinNPV		0x00
#define tFinIRR		0x01
#define tFinBAL		0x02
#define tFinPRN		0x03
#define tFinINT		0x04
#define tFinToNom	0x05
#define tFinToEff	0x06
#define tFinDBD		0x07
#define tLCM		0x08
#define tGCD		0x09
#define tRandInt	0x0A
#define tRandBin	0x0B
#define tSubStrng	0x0C
#define tStdDev		0x0D
#define tVariance	0x0E
#define tInStrng	0x0F
#define tDNormal	0x10
#define tInvNorm	0x11
#define tDT		0x12
#define tChI		0x13
#define tDF		0x14
#define tBINPDF		0x15
#define tBINCDF		0x16
#define tPOIPDF		0x17
#define tPOICDF		0x18
#define tGEOPDF		0x19
#define tGEOCDF		0x1A
#define tNormalPDF	0x1B
#define tTPDF		0x1C
#define tChiPDF		0x1D
#define tFPDF		0x1E
#define tRandNorm	0x1F
#define tFinFPMT	0x20
#define tFinFI		0x21
#define tFinFPV		0x22
#define tFinFN		0x23
#define tFinFFV		0x24
#define tConj		0x25
#define tReal		0x26
#define tImag		0x27
#define tAngle		0x28
#define tCumSum		0x29
#define tExpr		0x2A
#define tLength		0x2B
#define tDeltaLst	0x2C
#define tRef		0x2D
#define tRRef		0x2E
#define tToRect		0x2F
#define tToPolar	0x30
#define tConste		0x31
#define tSinReg		0x32
#define tLogistic	0x33
#define tLinRegTTest	0x34
#define tShadeNorm	0x35
#define tShadeT		0x36
#define tShadeChi	0x37
#define tShadeF		0x38
#define tMatToLst	0x39
#define tLstToMat	0x3A
#define tZTest		0x3B
#define tTTest		0x3C
#define t2SampZTest	0x3D
#define t1PropZTest	0x3E
#define t2PropZTest	0x3F
#define tChiTest	0x40
#define tZIntVal	0x41
#define t2SampZInt	0x42
#define t1PropZInt	0x43
#define t2PropZInt	0x44
#define tGraphStyle	0x45
#define t2SampTTest	0x46
#define t2SampFTest	0x47
#define tTIntVal	0x48
#define t2SampTInt	0x49
#define tSetupLst	0x4A
#define tFinPMTend	0x4B
#define tFinPMTbeg	0x4C
#define tRealM		0x4D
#define tPolarM		0x4E
#define tRectM		0x4F
#define tExprOn		0x50
#define tExprOff	0x51
#define tClrAllLst	0x52
#define tGetCalc	0x53
#define tDelVar		0x54
#define tEquToStrng	0x55
#define tStrngToequ 	0x56
#define tDelLast	0x57
#define tSelect		0x58
#define tANOVA		0x59
#define tModBox		0x5A
#define tNormProb	0x5B
#define tMGT		0x64	// VERTICAL SPLIT
#define tZFit		0x65	// ZOOM FIT
#define tDiag_on	0x66	// DIANOSTIC DISPLAY ON
#define tDiag_off	0x67	// DIANOSTIC DISPLAY OFF
#define tArchive	0x68	// Archive
#define tUnarchive	0x69	// UnArchive
#define tAsm		0x6A
#define tAsmComp	0x6B	// asm compile
#define tAsmPrgm	0x6C	// Signifies a program is asm
#define tAsmCmp		0x6D	// asm program is compiled
#define tLcapAAcute	0x6E
#define tLcapAGrave	0x6F
#define tLcapACaret	0x70
#define tLcapADier	0x71
#define tLaAcute	0x72
#define tLaGrave	0x73
#define tLaCaret	0x74
#define tLaDier		0x75
#define tLcapEAcute	0x76
#define tLcapEGrave	0x77
#define tLcapECaret	0x78
#define tLcapEDier	0x79
#define tLeAcute	0x7A
#define tLeGrave	0x7B
#define tLeCaret	0x7C
#define tLeDier		0x7D
#define tLcapIGrave	0x7F
#define tLcapICaret	0x80
#define tLcapIDier	0x81
#define tLiAcute	0x82
#define tLiGrave	0x83
#define tLiCaret	0x84
#define tLiDier		0x85
#define tLcapOAcute	0x86
#define tLcapOGrave	0x87
#define tLcapOCaret	0x88
#define tLcapODier	0x89
#define tLoAcute	0x8A
#define tLoGrave	0x8B
#define tLoCaret	0x8C
#define tLoDier		0x8D
#define tLcapUAcute	0x8E
#define tLcapUGrave	0x8F
#define tLcapUCaret	0x90
#define tLcapUDier	0x91
#define tLuAcute	0x92
#define tLuGrave	0x93
#define tLuCaret	0x94
#define tLuDier		0x95
#define tLcapCCed	0x96
#define tLcCed		0x97
#define tLcapNTilde	0x98
#define tLnTilde	0x99
#define tLaccent	0x9A
#define tLgrave		0x9B
#define tLdieresis	0x9C
#define tLquesDown	0x9D
#define tLexclamDown	0x9E
#define tLalpha		0x9F
#define tLbeta		0xA0
#define tLgamma		0xA1
#define tLcapDelta	0xA2
#define tLdelta		0xA3
#define tLepsilon	0xA4
#define tLlambda	0xA5
#define tLmu		0xA6
#define tLpi		0xA7
#define tLrho		0xA8
#define tLcapSigma	0xA9
#define tLphi		0xAB
#define tLcapOmega	0xAC
#define tLphat		0xAD
#define tLchi		0xAE
#define tLstatF		0xAF
#define tLa		0xB0
#define tLb		0xB1
#define tLc		0xB2
#define tLd		0xB3
#define tLsmalle	0xB4
#define tLf		0xB5
#define tLsmallg	0xB6
#define tLh		0xB7
#define tLi		0xB8
#define tLj		0xB9
#define tLk		0xBA
#define tLl		0xBC
#define tLm		0xBD
#define tLsmalln	0xBE
#define tLo		0xBF
#define tLp		0xC0
#define tLq		0xC1
#define tLsmallr	0xC2
#define tLs		0xC3
#define tLsmallt	0xC4
#define tLu		0xC5
#define tLv		0xC6
#define tLw		0xC7
#define tLx		0xC8
#define tLy		0xC9
#define tLz		0xCA
#define tLsigma		0xCB
#define tLtau		0xCC
#define tLcapIAcute	0xCD
#define tGarbageCollect	0xCE

// 2 byte extended tokens (tExtTok) present in OS 5.2 and above
#define tSEQn		0x8F	// 'SEQ(n)'
#define tSEQn1		0x90	// 'SEQ(n+1)'
#define tSEQn2		0x91	// 'SEQ(n+2)'
#define tLEFT		0x92	// 'LEFT'
#define tCENTER		0x93	// 'CENTER'
#define tRIGHT		0x94	// 'RIGHT'
#define tInvBinom	0x95	// 'invBinom('
#define tWait		0x96	// 'Wait_'
#define tToString	0x97	// 'toString('
#define tEval		0x98	// 'eval('

/**
 * --- TIOS System error codes ---
 */
#define OS_E_EDIT           1<<7
#define OS_E_MASK           0x7F
#define OS_E_OVERFLOW       1+OS_E_EDIT
#define OS_E_DIVBY0         2+OS_E_EDIT
#define OS_E_SINGULARMAT    3+OS_E_EDIT
#define OS_E_DOMAIN         4+OS_E_EDIT
#define OS_E_INCREMENT      5+OS_E_EDIT
#define OS_E_BREAK          6+OS_E_EDIT
#define OS_E_NONREAL        7+OS_E_EDIT
#define OS_E_SYNTAX         8+OS_E_EDIT
#define OS_E_DATATYPE       9+OS_E_EDIT
#define OS_E_ARGUMENT       10+OS_E_EDIT
#define OS_E_DIMMISMATCH    11+OS_E_EDIT
#define OS_E_DIMENSION      12+OS_E_EDIT
#define OS_E_UNDEFINED      13+OS_E_EDIT
#define OS_E_MEMORY         14+OS_E_EDIT
#define OS_E_INVALID        15+OS_E_EDIT
#define OS_E_ILLEGALNEST    16+OS_E_EDIT
#define OS_E_BOUND          17+OS_E_EDIT
#define OS_E_GRAPHRANGE     18+OS_E_EDIT
#define OS_E_ZOOM           19+OS_E_EDIT
#define OS_E_LABEL          20
#define OS_E_STAT           21
#define OS_E_SOLVER         22+OS_E_EDIT
#define OS_E_SINGULARITY    23+OS_E_EDIT
#define OS_E_SIGNCHANGE     24+OS_E_EDIT
#define OS_E_ITERATIONS     25+OS_E_EDIT
#define OS_E_BADGUESS       26+OS_E_EDIT
#define OS_E_STATPLOT       27
#define OS_E_TOLTOOSMALL    28+OS_E_EDIT
#define OS_E_RESERVED       29+OS_E_EDIT
#define OS_E_MODE           30+OS_E_EDIT
#define OS_E_LNKERR         31+OS_E_EDIT
#define OS_E_LNKMEMERR      32+OS_E_EDIT
#define OS_E_LNKTRANSERR    33+OS_E_EDIT
#define OS_E_LNKDUPERR      34+OS_E_EDIT
#define OS_E_LNKMEMFULL     35+OS_E_EDIT
#define OS_E_UNKNOWN        36+OS_E_EDIT
#define OS_E_SCALE          37+OS_E_EDIT
#define OS_E_IDNOTFOUND     38
#define OS_E_NOMODE         39+OS_E_EDIT
#define OS_E_VALIDATION     40
#define OS_E_LENGTH         41+OS_E_EDIT
#define OS_E_APPLICATION    42+OS_E_EDIT
#define OS_E_APPERR1        43+OS_E_EDIT
#define OS_E_APPERR2        44+OS_E_EDIT
#define OS_E_EXPIREDAPP     45
#define OS_E_BADADD         46
#define OS_E_ARCHIVED       47+OS_E_EDIT
#define OS_E_VERSION        48
#define OS_E_ARCHFULL       49
#define OS_E_VARIABLE       50+OS_E_EDIT
#define OS_E_DUPLICATE      51+OS_E_EDIT

/**
 * --- TI-OS os_GetCSC Scan Code Return Values ---
 */
#define sk_Down             0x01
#define sk_Left             0x02
#define sk_Right            0x03
#define sk_Up               0x04
#define sk_Enter            0x09
#define sk_2nd              0x36
#define sk_Clear            0x0F
#define sk_Alpha            0x30
#define sk_Add              0x0A
#define sk_Sub              0x0B
#define sk_Mul              0x0C
#define sk_Div              0x0D
#define sk_Graph            0x31
#define sk_Trace            0x32
#define sk_Zoom             0x33
#define sk_Window           0x34
#define sk_Yequ             0x35
#define sk_Mode             0x37
#define sk_Del              0x38
#define sk_Store            0x2A
#define sk_Ln               0x2B
#define sk_Log              0x2C
#define sk_Square           0x2D
#define sk_Recip            0x2E
#define sk_Math             0x2F
#define sk_0                0x21
#define sk_1                0x22
#define sk_4                0x23
#define sk_7                0x24
#define sk_2                0x1A
#define sk_5                0x1B
#define sk_8                0x1C
#define sk_3                0x12
#define sk_6                0x13
#define sk_9                0x14
#define sk_Comma            0x25
#define sk_Sin              0x26
#define sk_Apps             0x27
#define sk_GraphVar         0x28
#define sk_DecPnt           0x19
#define sk_LParen           0x1D
#define sk_Cos              0x1E
#define sk_Prgm             0x1F
#define sk_Stat             0x20
#define sk_Chs              0x10
#define sk_RParen           0x15
#define sk_Tan              0x16
#define sk_Vars             0x17
#define sk_Power            0x0E

#endif