Difference between revisions of "84PCE:OS:C Include File"
From WikiTI
| Line 3: | Line 3: | ||
<pre>// Parts from Matt "MateoConLechuga" Waltz and Jacob "jacobly" Young, in addtion to | <pre>// 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 | // contributors of http://wikiti.brandonw.net/index.php?title=84PCE:OS:Include_File | ||
| − | // Latest as of | + | // Latest as of June 2016 |
#ifndef TICE_H | #ifndef TICE_H | ||
| Line 10: | Line 10: | ||
#include <stdbool.h> | #include <stdbool.h> | ||
#include <stdint.h> | #include <stdint.h> | ||
| + | #include <stddef.h> | ||
| + | |||
| + | #define randInt(min, max) ((unsigned)rand() % ((max) - (min) + 1) + (min)) | ||
/* Defines for MMIO memory areas */ | /* Defines for MMIO memory areas */ | ||
| Line 25: | Line 28: | ||
#define rtc_SetMinutes(m) ((*((uint8_t*)0xF30028)) = (uint8_t)(m)) | #define rtc_SetMinutes(m) ((*((uint8_t*)0xF30028)) = (uint8_t)(m)) | ||
#define rtc_SetHours(h) ((*((uint8_t*)0xF3002C)) = (uint8_t)(h)) | #define rtc_SetHours(h) ((*((uint8_t*)0xF3002C)) = (uint8_t)(h)) | ||
| − | #define rtc_SetDays(d) ((*((uint16_t*) | + | #define rtc_SetDays(d) ((*((uint16_t*)0xF30030)) = (uint16_t)(d)) |
#define rtc_Time() (*(volatile uint32_t*)0xF30044) | #define rtc_Time() (*(volatile uint32_t*)0xF30044) | ||
| + | |||
| + | /** | ||
| + | * 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 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); | ||
/* LCD defines */ | /* LCD defines */ | ||
#define lcd_GetBacklightLevel() (*((uint8_t*)0xF60024)) | #define lcd_GetBacklightLevel() (*((uint8_t*)0xF60024)) | ||
| − | #define lcd_SetBacklightLevel(b) ((*((uint8_t*)0xF60024)) = (uint8_t)(b); | + | #define lcd_SetBacklightLevel(b) ((*((uint8_t*)0xF60024))) = (uint8_t)(b); |
/** | /** | ||
| Line 46: | Line 66: | ||
* when you are ready to exit your program | * when you are ready to exit your program | ||
*/ | */ | ||
| − | void | + | void prgm_CleanUp(void); |
| + | |||
| + | /* This is here because Mateo can't spell */ | ||
| + | #define pgrm_CleanUp prgm_CleanUp | ||
/** | /** | ||
| Line 85: | Line 108: | ||
/** | /** | ||
* Performs an OS call to get the keypad scan code | * Performs an OS call to get the keypad scan code | ||
| + | * Values returned are listed below | ||
*/ | */ | ||
int os_GetCSC(void); | int os_GetCSC(void); | ||
| + | typedef uint8_t sk_key_t; | ||
| + | #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_Pgrm 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 | ||
/** | /** | ||
| Line 106: | Line 180: | ||
/** | /** | ||
* Set/Get the backgroundground color used to draw text on the graphscreen | * Set/Get the backgroundground color used to draw text on the graphscreen | ||
| − | * os_GetDrawBGColor is | + | * os_GetDrawBGColor is only useable in OS 5.2 and above; use at your own risk |
*/ | */ | ||
void os_SetDrawBGColor(int color); | void os_SetDrawBGColor(int color); | ||
| − | void | + | void os_GetDrawBGColor(int color); |
/** | /** | ||
| Line 181: | Line 255: | ||
* Returns next entry or NULL if no more entries, pass os_GetSymTablePtr() as first entry | * 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, char *name, void **data); | + | void *os_NextSymEntry(void *entry, uint24_t *type, uint24_t *nameLength, const char *name, void **data); |
/** | /** | ||
| Line 345: | Line 419: | ||
/** | /** | ||
| − | * Whole bunch of | + | * Whole bunch of useful timer functions |
| + | * Use the below defines to send to boot_SetTimersControlRegister | ||
*/ | */ | ||
| + | #define TIMER1_ENABLE 1 << 0 // Enables 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_INT 1 << 2 // Enable an interrupt 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_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_INT 1 << 5 // Enable an interrupt 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_INT 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_INT enabled) | ||
| + | |||
void boot_SetTimersControlRegister(uint16_t value); | void boot_SetTimersControlRegister(uint16_t value); | ||
uint16_t boot_GetTimersControlRegister(void); | uint16_t boot_GetTimersControlRegister(void); | ||
| Line 371: | Line 471: | ||
/** | /** | ||
| − | * Things you shouldn't use unless you know what you are doing | + | * Things you shouldn't use unless you know what you are doing |
*/ | */ | ||
void os_ForceCmdNoChar(void); | void os_ForceCmdNoChar(void); | ||
| − | |||
| − | /* | + | |
| − | + | /** | |
| − | + | * Use this function to call assembly functions in the OS and Bootcode | |
| − | + | * i.e. _OS( asm_HomeUp ); | |
| − | + | */ | |
| − | + | void _OS(void *function); | |
| − | + | ||
| − | + | /** | |
| − | + | * 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); | ||
#endif | #endif | ||
Revision as of 14:55, 7 September 2016
C Function Prototypes
// 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 June 2016
#ifndef TICE_H
#define TICE_H
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#define randInt(min, max) ((unsigned)rand() % ((max) - (min) + 1) + (min))
/* Defines for MMIO memory areas */
/* RTC defines */
/* There’s a whole slew of bootcode RTC functions, but a lot of them are kind of pointless when you could just use these defines from MMIO */
#define rtc_GetSeconds() (*((uint8_t*)0xF30000))
#define rtc_GetMinutes() (*((uint8_t*)0xF30004))
#define rtc_GetHours() (*((uint8_t*)0xF30008))
#define rtc_GetDays() (*((uint16_t*)0xF3000C))
#define rtc_GetControl() (*((uint8_t*)0xF30020))
#define rtc_SetControl(c) ((*((uint8_t*)0xF30020)) = (uint8_t)(c))
#define rtc_LoadSetTime() ((*((uint8_t*)0xF30020)) = (*((uint8_t*)0xF30020))|64)
#define rtc_SetSeconds(s) ((*((uint8_t*)0xF30024)) = (uint8_t)(s))
#define rtc_SetMinutes(m) ((*((uint8_t*)0xF30028)) = (uint8_t)(m))
#define rtc_SetHours(h) ((*((uint8_t*)0xF3002C)) = (uint8_t)(h))
#define rtc_SetDays(d) ((*((uint16_t*)0xF30030)) = (uint16_t)(d))
#define rtc_Time() (*(volatile uint32_t*)0xF30044)
/**
* 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 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);
/* LCD defines */
#define lcd_GetBacklightLevel() (*((uint8_t*)0xF60024))
#define lcd_SetBacklightLevel(b) ((*((uint8_t*)0xF60024))) = (uint8_t)(b);
/**
* 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; } list_t;
typedef struct { uint16_t dim; cplx_t *items; } cplx_list_t;
typedef struct { uint8_t cols, rows; real_t *items; } matrix_t;
typedef struct { uint16_t size; uint8_t *data; } var_t;
/**
* Cleans up everything and gets ready to enter back to the OS
* when you are ready to exit your program
*/
void prgm_CleanUp(void);
/* This is here because Mateo can't spell */
#define pgrm_CleanUp prgm_CleanUp
/**
* A faster implementation of memset
*/
void *memset_fast(void *ptr,int value,size_t num);
/**
* 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);
/**
* Returns extended keys as 16-bits
*/
int os_GetKey(void);
/**
* Performs an OS call to get the keypad scan code
* Values returned are listed below
*/
int os_GetCSC(void);
typedef uint8_t sk_key_t;
#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_Pgrm 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
/**
* 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);
int 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(int color);
void os_GetDrawBGColor(int color);
/**
* Set/Get the cursor posistion used on the homescreen
*/
void os_SetCursorPos(uint8_t curRow, uint8_t curCol);
void os_GetCursorPos(unsigned int *curRow, unsigned int *curCol);
/**
* Selects/Gets the font to use when drawing on the graphscreen
* 0: small font
* 1: large monospace font
*/
void os_FontSelect(char id);
int 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
*/
int os_FontGetWidth(const char *string);
int os_FontGetHeight(void);
/**
* Draws a text using the small font to the screen
* Returns the end column
*/
int os_FontDrawText(const char *string, uint16_t col, uint8_t row);
int 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
*/
int os_PutStrFull(const char *string);
/**
* Puts some text at the current homescreen cursor location
* Returns 1 if string fits on line, 0 otherwise
*/
int 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 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 type to another location
* Returns dest
*/
real_t *os_RealCopy(real_t *dest, const real_t *src);
/**
* Urnary operations used to interact with the OS math functions
* All return result
*/
real_t *os_RealAcosRad(real_t *result, const real_t *arg);
real_t *os_RealAsinRad(real_t *result, const real_t *arg);
real_t *os_RealAtanRad(real_t *result, const real_t *arg);
real_t *os_RealCosRad(real_t *result, const real_t *arg);
real_t *os_RealRadToDeg(real_t *result, const real_t *arg);
real_t *os_RealExp(real_t *result, const real_t *arg);
real_t *os_RealFloor(real_t *result, const real_t *arg);
real_t *os_RealFrac(real_t *result, const real_t *arg);
real_t *os_RealRoundInt(real_t *result, const real_t *arg);
real_t *os_RealLog(real_t *result, const real_t *arg);
real_t *os_RealNeg(real_t *result, const real_t *arg);
real_t *os_RealDegToRad(real_t *result, const real_t *arg);
real_t *os_RealInv(real_t *result, const real_t *arg);
real_t *os_RealSinRad(real_t *result, const real_t *arg);
real_t *os_RealSqrt(real_t *result, const real_t *arg);
real_t *os_RealTanRad(real_t *result, const real_t *arg);
real_t *os_RealInt(real_t *result, const real_t *arg);
cplx_t *os_CplxSquare(cplx_t *result, const cplx_t *arg);
/**
* Binary operations used to interact with the OS math functions
* All return result
*/
real_t *os_RealAdd(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealDiv(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealGcd(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealLcm(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealMax(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealMin(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealMul(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealNcr(real_t *result, const real_t *total, const real_t *num);
real_t *os_RealNpr(real_t *result, const real_t *total, const real_t *num);
real_t *os_RealPow(real_t *result, const real_t *base, const real_t *exp);
real_t *os_RealRandInt(real_t *result, const real_t *min, const real_t *max);
real_t *os_RealMod(real_t *result, const real_t *arg1, const real_t *arg2);
real_t *os_RealSub(real_t *result, const real_t *arg1, const real_t *arg2);
/**
* digits must be in the range 0 - 9
*/
real_t *os_RealRound(real_t *result, 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);
/** 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(real_t *result, const char *string, char **end);
/**
* 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);
/**
* Sets the calculator into 6MHz mode and 48MHz modes. Note that the ones
* suffix with I perserve the interrupt vectors
*/
void boot_Set6MHzMode(void);
void boot_Set48MHzMode(void);
void boot_Set6MHzModeI(void);
void boot_Set48MHzModeI(void);
/**
* Returns the current battery status
*/
uint8_t boot_GetBatteryStatus(void);
/**
* Waits for just a bit
* Someone should really look at this to see how long it actually is
*/
void boot_WaitShort(void);
/**
* Checks if the calculator is being powered via USB
*/
bool boot_USBPowered(void);
/**
* Checks if there is not a USB plug of A type in the USB port
*/
bool boot_NotPlugTypeA(void);
/**
* Set the time of the calculator
*/
void boot_SetTime(uint8_t seconds, uint8_t minutes, uint8_t hours);
/**
* 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);
/**
* Whole bunch of useful timer functions
* Use the below defines to send to boot_SetTimersControlRegister
*/
#define TIMER1_ENABLE 1 << 0 // Enables 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_INT 1 << 2 // Enable an interrupt 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_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_INT 1 << 5 // Enable an interrupt 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_INT 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_INT enabled)
void boot_SetTimersControlRegister(uint16_t value);
uint16_t boot_GetTimersControlRegister(void);
void boot_SetTimersInterruptStatus(uint16_t value);
uint16_t boot_GetTimersInterruptStatus(void);
void boot_SetTimersInterruptMask(uint16_t value);
uint16_t boot_GetTimersInterruptMask(void);
void boot_SetTimer1Counter(uint32_t count);
uint32_t boot_GetTimer1Counter(void);
void boot_SetTimer1ReloadValue(uint32_t value);
uint32_t boot_GetTimer1ReloadValue(void);
void boot_SetTimer1MatchValue1(uint32_t value);
uint32_t boot_GetTimer1MatchValue1(void);
void boot_SetTimer1MatchValue2(uint32_t value);
uint32_t boot_GetTimer1MatchValue2(void);
void boot_SetTimer2Counter(uint32_t count);
uint32_t boot_GetTimer2Counter(void);
void boot_SetTimer2ReloadValue(uint32_t value);
uint32_t boot_GetTimer2ReloadValue(void);
void boot_SetTimer2MatchValue1(uint32_t value);
uint32_t boot_GetTimer2MatchValue1(void);
void boot_SetTimer2MatchValue2(uint32_t value);
uint32_t boot_GetTimer2MatchValue2(void);
/**
* Things you shouldn't use unless you know what you are doing
*/
void os_ForceCmdNoChar(void);
/**
* Use this function to call assembly functions in the OS and Bootcode
* i.e. _OS( asm_HomeUp );
*/
void _OS(void *function);
/**
* 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);
#endif
C Function Locations and definitions
; C Functions present in the CE OS and Bootcode
; === External Definitions ===================
.assume ADL=1
.def _boot_GetBootVerMajor
.def _boot_GetHardwareVers
.def _boot_GetBootVerMinor
.def _boot_DebugPrintf
.def _boot_ClearVRAM
.def _boot_TurnOff
.def _boot_NewLine
.def _boot_PrintBootVersion
.def _boot_Set6MHzMode
.def _boot_Set48MHzMode
.def _boot_Set6MHzModeI
.def _boot_Set48MHzModeI
.def _boot_GetBatteryStatus
.def _boot_WaitShort
.def _boot_DoNothing1, _boot_DoNothing2
.def _boot_USBPowered
.def _boot_NotPlugTypeA
.def _boot_SetTimersControlRegister
.def _boot_GetTimersControlRegister
.def _boot_SetTimersInterruptStatus
.def _boot_GetTimersInterruptStatus
.def _boot_SetTimersInterruptMask
.def _boot_GetTimersInterruptMask
.def _boot_SetTimer1Counter
.def _boot_GetTimer1Counter
.def _boot_SetTimer1ReloadValue
.def _boot_GetTimer1ReloadValue
.def _boot_SetTimer1MatchValue1
.def _boot_GetTimer1MatchValue1
.def _boot_SetTimer1MatchValue2
.def _boot_GetTimer1MatchValue2
.def _boot_SetTimer2Counter
.def _boot_GetTimer2Counter
.def _boot_SetTimer2ReloadValue
.def _boot_GetTimer2ReloadValue
.def _boot_SetTimer2MatchValue1
.def _boot_GetTimer2MatchValue1
.def _boot_SetTimer2MatchValue2
.def _boot_GetTimer2MatchValue2
.def _boot_CheckOnPressed
.def _boot_SetTime
.def _os_ThrowError
.def _os_RealCopy
.def _os_RealAsinRad
.def _os_RealAcosRad
.def _os_RealAtanRad
.def _os_RealAdd
.def _os_CplxSquare
.def _os_RealCompare
.def _os_RealCosRad
.def _os_RealRadToDeg
.def _os_RealDiv
.def _os_RealExp
.def _os_RealFloor
.def _os_RealToStr
.def _os_RealFrac
.def _os_RealGcd
.def _os_RealRoundInt
.def _os_RealLcm
.def _os_RealLog
.def _os_RealMax
.def _os_RealMin
.def _os_RealMul
.def _os_RealNcr
.def _os_RealNeg
.def _os_RealNpr
.def _os_RealPow
.def _os_RealDegToRad
.def _os_RealRandInt
.def _os_RealInv
.def _os_RealMod
.def _os_RealRound
.def _os_RealSinRad
.def _os_RealSqrt
.def _os_RealSub
.def _os_RealTanRad
.def _os_StrToReal
.def _os_RealInt
.def _os_SetFlagBits
.def _os_ResetFlagBits
.def _os_TestFlagBits
.def _os_SetFlagByte
.def _os_GetFlagByte
.def _os_GetCursorPos
.def _os_PutStrFull
.def _os_PutStrLine
.def _os_SetCursorPos
.def _os_GetKey
.def _os_GetCSC
.def _os_DisableCursor
.def _os_EnableCursor
.def _os_FontDrawText
.def _os_FontGetHeight
.def _os_FontGetWidth
.def _os_InitDrawing
.def _os_SetDrawBGColor
.def _os_SetDrawFGColor
.def _os_FontSelect
.def _os_GetDrawBGColor_BROKEN
.def _os_GetDrawFGColor
.def _os_FontGetID
.def _os_ForceCmdNoChar
.def _os_GetSymTablePtr
.def _os_NextSymEntry
.def _os_ChkFindSym
.def _os_MemChk
.def _os_FontDrawTransText
.def _os_CreateAppVar
; ============================================
; === Location Equates =======================
_boot_GetBootVerMajor equ 000080h
_boot_GetHardwareVers equ 000084h
_boot_GetBootVerMinor equ 00008Ch
_boot_DebugPrintf equ 0000B4h
_boot_ClearVRAM equ 000374h
_boot_TurnOff equ 000388h
_boot_NewLine equ 000390h
_boot_PrintBootVersion equ 000394h
_boot_Set6MHzMode equ 00039Ch
_boot_Set48MHzMode equ 0003A0h
_boot_Set6MHzModeI equ 0003A4h
_boot_Set48MHzModeI equ 0003A8h
_boot_GetBatteryStatus equ 0003B0h
_boot_WaitShort equ 0003B4h
_boot_DoNothing1 equ 0003D8h
_boot_DoNothing2 equ 0003DCh
_boot_USBPowered equ 0003E4h
_boot_NotPlugTypeA equ 0003E8h
_boot_SetTimersControlRegister equ 000520h
_boot_GetTimersControlRegister equ 000524h
_boot_SetTimersInterruptStatus equ 000528h
_boot_GetTimersInterruptStatus equ 00052Ch
_boot_SetTimersInterruptMask equ 000530h
_boot_GetTimersInterruptMask equ 000534h
_boot_SetTimer1Counter equ 000538h
_boot_GetTimer1Counter equ 00053Ch
_boot_SetTimer1ReloadValue equ 000540h
_boot_GetTimer1ReloadValue equ 000544h
_boot_SetTimer1MatchValue1 equ 000548h
_boot_GetTimer1MatchValue1 equ 00054Ch
_boot_SetTimer1MatchValue2 equ 000550h
_boot_GetTimer1MatchValue2 equ 000554h
_boot_SetTimer2Counter equ 000558h
_boot_GetTimer2Counter equ 00055Ch
_boot_SetTimer2ReloadValue equ 000560h
_boot_GetTimer2ReloadValue equ 000564h
_boot_SetTimer2MatchValue1 equ 000568h
_boot_GetTimer2MatchValue1 equ 00056Ch
_boot_SetTimer2MatchValue2 equ 000570h
_boot_GetTimer2MatchValue2 equ 000574h
_boot_CheckOnPressed equ 00057Ch
_boot_SetTime equ 0005B4h
_os_ThrowError equ 021C80h
_os_RealCopy equ 021C84h
_os_RealAsinRad equ 021C88h
_os_RealAcosRad equ 021C8Ch
_os_RealAtanRad equ 021C90h
_os_RealAdd equ 021C94h
_os_CplxSquare equ 021C98h
_os_RealCompare equ 021C9Ch
_os_RealCosRad equ 021CA0h
_os_RealRadToDeg equ 021CA4h
_os_RealDiv equ 021CA8h
_os_RealExp equ 021CACh
_os_RealFloor equ 021CB0h
_os_RealToStr equ 021CB4h
_os_RealFrac equ 021CB8h
_os_RealGcd equ 021CBCh
_os_RealRoundInt equ 021CC0h
_os_RealLcm equ 021CC4h
_os_RealLog equ 021CC8h
_os_RealMax equ 021CCCh
_os_RealMin equ 021CD0h
_os_RealMul equ 021CD4h
_os_RealNcr equ 021CD8h
_os_RealNeg equ 021CDCh
_os_RealNpr equ 021CE0h
_os_RealPow equ 021CE4h
_os_RealDegToRad equ 021CE8h
_os_RealRandInt equ 021CECh
_os_RealInv equ 021CF0h
_os_RealMod equ 021CF4h
_os_RealRound equ 021CF8h
_os_RealSinRad equ 021CFCh
_os_RealSqrt equ 021D00h
_os_RealSub equ 021D04h
_os_RealTanRad equ 021D08h
_os_StrToReal equ 021D0Ch
_os_RealInt equ 021D10h
_os_SetFlagBits equ 021D14h
_os_ResetFlagBits equ 021D18h
_os_TestFlagBits equ 021D1Ch
_os_SetFlagByte equ 021D20h
_os_GetFlagByte equ 021D24h
_os_GetCursorPos equ 021D28h
_os_PutStrFull equ 021D2Ch
_os_PutStrLine equ 021D30h
_os_SetCursorPos equ 021D34h
_os_GetKey equ 021D38h
_os_GetCSC equ 021D3Ch
_os_DisableCursor equ 021DE4h
_os_EnableCursor equ 021DE8h
_os_FontDrawText equ 021E00h
_os_FontGetHeight equ 021E14h
_os_FontGetWidth equ 021E18h
_os_InitDrawing equ 021E1Ch
_os_SetDrawBGColor equ 021E20h
_os_SetDrawFGColor equ 021E24h
_os_FontSelect equ 021E28h
_os_GetDrawBGColor_BROKEN equ 021EE4h ; doesn't work due to bug (needs to be ld hl.sis)
_os_GetDrawFGColor equ 021EE8h
_os_FontGetID equ 021EECh
_os_ForceCmdNoChar equ 021FA8h
_os_GetSymTablePtr equ 021FB0h
_os_NextSymEntry equ 021FB4h
_os_ChkFindSym equ 021FB8h
_os_MemChk equ 021FF0h
_os_FontDrawTransText equ 022178h
_os_CreateAppVar equ 022184h
; ============================================