mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-30 06:50:39 +00:00
149 lines
3.4 KiB
C
149 lines
3.4 KiB
C
|
|
#ifndef _ACBIOS_H
|
|
#define _ACBIOS_H
|
|
|
|
#include "aclib.h"
|
|
|
|
// FONT DESCRIPTORS
|
|
|
|
typedef struct {
|
|
byte base_ch;
|
|
byte frame_x;
|
|
byte frame_y;
|
|
byte pattern_x;
|
|
byte pattern_y;
|
|
const byte* chartab;
|
|
} FontDescriptor;
|
|
|
|
const FontDescriptor __at(0x206) FNTSYS; // system font
|
|
const FontDescriptor __at(0x20d) FNTSML; // small font
|
|
const byte __at(0x214) ALKEYS[4]; // "all keys" keyboard mask
|
|
|
|
// SENTRY
|
|
|
|
typedef enum {
|
|
SNUL,
|
|
SCT0,SCT1,SCT2,SCT3,SCT4,SCT5,SCT6,SCT7,
|
|
SF0,SF1,SF2,SF3,SF4,SF5,SF6,SF7,
|
|
SSEC,
|
|
SKYU,SKYD,
|
|
ST0,SJ0,ST1,SJ1,ST2,SJ2,ST3,SJ3,
|
|
SP0,SP1,SP2,SP3
|
|
} SENTRYCode;
|
|
|
|
typedef struct {
|
|
byte code;
|
|
word address;
|
|
} DOITEntry;
|
|
|
|
#define DOIT_END 0xff
|
|
|
|
// PATTERNS
|
|
|
|
typedef struct {
|
|
sbyte xofs, yofs;
|
|
byte xsize, ysize;
|
|
byte pattern[0];
|
|
} RelativeBlock;
|
|
|
|
typedef struct {
|
|
byte xsize, ysize;
|
|
byte pattern[0];
|
|
} PatternBlock;
|
|
|
|
// FUNCTIONS
|
|
|
|
#define OPT_1x1 0x00
|
|
#define OPT_2x2 0x40
|
|
#define OPT_4x4 0x80
|
|
#define OPT_8x8 0xc0
|
|
#define OPT_XOR 0x20
|
|
#define OPT_OR 0x10
|
|
#define OPT_ON(n) ((n)<<2)
|
|
#define OPT_OFF(n) ((n))
|
|
|
|
#define DISBCD_SML 0x40
|
|
#define DISBCD_NOZERO 0x80
|
|
|
|
void activate_interrupts(void);
|
|
void sleep(byte frames) __z88dk_fastcall;
|
|
void fast_vsync(void);
|
|
|
|
void display_string(byte x, byte y, byte options, const char* str);
|
|
void paint_rectangle(byte x, byte y, byte w, byte h, byte colormask);
|
|
void blank_area(byte wb, byte h, byte data, byte* video);
|
|
|
|
void write_relative(byte x, byte y, byte magic, const byte* pattern);
|
|
void write_pattern(byte x, byte y, byte magic, const byte* pattern);
|
|
|
|
void display_bcd_number(byte x, byte y, byte options, const byte* number, byte extopt);
|
|
void bcdn_add(byte* dest, byte size, const byte* n);
|
|
void bcdn_sub(byte* dest, byte size, const byte* n);
|
|
byte ranged_random(byte n) __z88dk_fastcall;
|
|
byte keycode_to_ascii(byte n) __z88dk_fastcall;
|
|
|
|
word sense_transition(const byte keypad_mask[4]) __z88dk_fastcall;
|
|
void respond_to_input(const DOITEntry* doit_table, byte a);
|
|
void respond_to_input_b(const DOITEntry* doit_table, byte b);
|
|
|
|
void begin_music(const byte* stack, byte voices, const byte* musicdata);
|
|
void end_music(void);
|
|
|
|
// QUICK MACROS
|
|
|
|
#define SYS_ACTINT()\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x0f");\
|
|
|
|
#define SYS_PAWS(frames)\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x51");\
|
|
__asm__(".db "#frames);\
|
|
|
|
#define SYS_SETOUT(verbl,horcb,inmod)\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x17");\
|
|
__asm__(".db "#verbl);\
|
|
__asm__(".db "#horcb);\
|
|
__asm__(".db "#inmod);\
|
|
|
|
#define SYS_FILL(dest,count,val)\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x1b");\
|
|
__asm__(".dw "#dest);\
|
|
__asm__(".dw "#count);\
|
|
__asm__(".db "#val);\
|
|
|
|
#define SYS_MOVE(dest,src,count)\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x5f");\
|
|
__asm__(".dw "#dest);\
|
|
__asm__(".dw "#count);\
|
|
__asm__(".dw "#src);\
|
|
|
|
#define SYS_RECTAN(x,y,width,height,color)\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x1d");\
|
|
__asm__(".db "#x);\
|
|
__asm__(".db "#y);\
|
|
__asm__(".db "#width);\
|
|
__asm__(".db "#height);\
|
|
__asm__(".db "#color);\
|
|
|
|
#define SYS_BMUSIC(stack,voices,musicdata)\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x13");\
|
|
__asm__(".dw "#stack);\
|
|
__asm__(".db "#voices);\
|
|
__asm__(".dw "#musicdata);\
|
|
|
|
#define SYS_EMUSIC()\
|
|
__asm__("rst 0x38");\
|
|
__asm__(".db 0x15");\
|
|
|
|
#define RESET_TIMEOUT() \
|
|
__asm__("ld a,#0xff");\
|
|
__asm__("ld (0x4FEC),a");
|
|
|
|
#endif
|