84PCE:OS:C Include File
From WikiTI
Revision as of 22:34, 24 October 2016 by MateoConLechuga (Talk | contribs)
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