gigatron/rom/Archive/lcc/Libs/Gigatron.h
2025-01-28 19:17:01 +03:00

131 lines
4.6 KiB
C

/*----------------------------------------------------------------------+
| |
| Gigatron.h -- Gigatron system definitions |
| |
+----------------------------------------------------------------------*/
/*----------------------------------------------------------------------+
| Common types |
+----------------------------------------------------------------------*/
typedef unsigned char byte;
typedef unsigned short word;
/*----------------------------------------------------------------------+
| Definitions from interface.json |
+----------------------------------------------------------------------*/
enum {
romTypeValue_ROMv1 = 0x1c,
romTypeValue_ROMv2 = 0x20,
romTypeValue_ROMv3 = 0x28,
romTypeValue_ROMv4 = 0x38,
romTypeValue_DEVROM = 0xf8,
};
#define frameCount (*(volatile byte*)0x000e)
#define serialRaw (*(volatile byte*)0x000f)
#define buttonState (*(volatile byte*)0x0011)
#define vAC (*(word*)0x0018)
#define romType (*(byte*)0x0021)
#define sysFn (*(word*)0x0022)
#define sysArgs ( (byte*)0x0024)
#define videoTable ( (byte*)0x0100)
#define videoTop_DEVROM (*(byte*)0x01f9)
#define screenMemory ( (byte(*)[256])0x0800)
#define font32up ( (byte*)0x0700)
#define font82up ( (byte*)0x0800)
#define buttonRight (255^1)
#define buttonLeft (255^2)
#define buttonDown (255^4)
#define buttonUp (255^8)
#define buttonStart (255^16)
#define buttonSelect (255^32)
#define buttonB (255^64)
#define buttonA (255^128)
/*
* Draw 8 pixels vertically from bit mask
*
* sysArgs[0] Color 0 (background)
* sysArgs[1] Color 1 (pen)
* sysArgs[2] 8 bits, highest bit first (destructive)
* sysArgs[4:5] Position on screen
*/
#define SYS_VDrawBits_134 0x04e1
/*
* Update entropy[] and return 16 bits of it in vAC
*/
#define SYS_Random_34 0x04a7
/*
* Set video mode to value in vAC
* 0..3 Full mode to fastest
* 1975 Disable video loop ("zombie mode")
* -1 Enable video loop
* Requires ROMv2+
*/
#define SYS_SetMode_v2_80 0xb00
/*
* vReset() restarts the Gigatron and returns to the main menu
*/
#define vReset ((void(*)(void)) 0x1f0)
/*----------------------------------------------------------------------+
| Library definitions |
+----------------------------------------------------------------------*/
#define Indent 2 // Indent 2 pixels from the left
// TODO: add to interface.json
#define Black 0x00
#define DarkRed 0x01
#define Red 0x02
#define LightRed 0x03
#define DarkGreen 0x04
#define Green 0x08
#define LightGreen 0x0c
#define DarkBlue 0x10
#define Blue 0x20
#define LightBlue 0x30
#define White 0x3f
/*----------------------------------------------------------------------+
| Library data |
+----------------------------------------------------------------------*/
extern int ScreenPos; // Really a pointer into screen memory
extern byte Color; // Pen color
extern byte BgColor; // Background color
/*----------------------------------------------------------------------+
| Library functions |
+----------------------------------------------------------------------*/
void ClearScreen(void);
void Newline(void);
word Random(void);
byte WaitKey(void);
void BusyWait(int frames);
void PutChar(int c);
void SetMode_v2(int mode);
word ReadRomDir_DEVROM(word prev, char name[8]);
// Not implemented and/or decided:
void VideoScrollY(int dy);
char *IntToString(char s[7], int n);
char *UIntToString(char s[7], unsigned n);
void DrawLine(int dx, int dy);
//int scanf(const char *restrict format, ...);
/*----------------------------------------------------------------------+
| |
+----------------------------------------------------------------------*/