mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-28 23:49:20 +00:00
118 lines
2.7 KiB
C
118 lines
2.7 KiB
C
|
|
#ifndef _WILLIAMS_H
|
|
#define _WILLIAMS_H
|
|
|
|
typedef unsigned char byte;
|
|
typedef unsigned char bool;
|
|
typedef signed char sbyte;
|
|
typedef unsigned short word;
|
|
|
|
enum { false=0, true=1 };
|
|
|
|
byte* palette = 0xc000;
|
|
byte* nvram = 0xcc00;
|
|
|
|
#define input0 (*(byte*)0xc804)
|
|
#define input1 (*(byte*)0xc806)
|
|
#define input2 (*(byte*)0xc80c)
|
|
#define sound_pia (*(byte*)0xc80c)
|
|
#define rom_select *((byte*)0xc900)
|
|
#define video_counter *((byte*)0xcb00)
|
|
#define watchdog0x39 *((byte*)0xcbff)
|
|
|
|
#define WATCHDOG (watchdog0x39 = 0x39)
|
|
|
|
// switch flags
|
|
|
|
#define UP1 (input0 & 0x1)
|
|
#define DOWN1 (input0 & 0x2)
|
|
#define LEFT1 (input0 & 0x4)
|
|
#define RIGHT1 (input0 & 0x8)
|
|
#define START1 (input0 & 0x10)
|
|
#define START2 (input0 & 0x20)
|
|
#define UP2 (input0 & 0x40)
|
|
#define DOWN2 (input0 & 0x80)
|
|
#define LEFT2 (input1 & 0x1)
|
|
#define RIGHT2 (input1 & 0x2)
|
|
#define AUTOUP (input2 & 0x1)
|
|
#define ADVANCE (input2 & 0x2)
|
|
#define COIN2 (input2 & 0x4)
|
|
#define HIGHSCORERESET (input2 & 0x8)
|
|
#define COIN1 (input2 & 0x10)
|
|
#define COIN3 (input2 & 0x20)
|
|
#define TILTSWITCH (input2 & 0x40)
|
|
#define SOUNDACK (input2 & 0x80)
|
|
|
|
// blitter flags
|
|
#define SRCSCREEN 0x1
|
|
#define DSTSCREEN 0x2
|
|
#define ESYNC 0x4
|
|
#define FGONLY 0x8
|
|
#define SOLID 0x10
|
|
#define RSHIFT 0x20
|
|
#define EVENONLY 0x40
|
|
#define ODDONLY 0x80
|
|
|
|
struct {
|
|
byte flags;
|
|
byte solid;
|
|
word sstart;
|
|
word dstart;
|
|
byte width;
|
|
byte height;
|
|
} *_blitter = 0xca00;
|
|
|
|
#define blitter (*_blitter)
|
|
|
|
struct {
|
|
byte mem[152][256];
|
|
} *_vid = 0x0;
|
|
|
|
#define vidmem (_vid->mem)
|
|
|
|
#define BLIT_OP(_x,_y,_w,_h,_src,_color,_flags) do {\
|
|
blitter.width = (_w)^4; \
|
|
blitter.height = (_h)^4; \
|
|
blitter.sstart = (word)(_src); \
|
|
blitter.dstart = ((word)(_x)<<8)+(_y); \
|
|
blitter.solid = (_color); \
|
|
blitter.flags = (_flags); \
|
|
} while (0)
|
|
|
|
#define BLIT_SOLID(x, y, w, h, color) \
|
|
BLIT_OP(x, y, w, h, 0, color, DSTSCREEN|SOLID)
|
|
|
|
|
|
// x1: 0-151
|
|
// y1: 0-255
|
|
void blit_solid(byte x1, byte y1, byte w, byte h, byte color);
|
|
|
|
void blit_copy(byte x1, byte y1, byte w, byte h, const byte* data);
|
|
|
|
void blit_copy_solid(byte x1, byte y1, byte w, byte h, const byte* data, byte solid);
|
|
|
|
void blit_sprite(const byte* data, byte x, byte y);
|
|
|
|
void blit_sprite_solid(const byte* data, byte x, byte y, byte color);
|
|
|
|
void unblit_sprite_rect(const byte* data, byte x, byte y);
|
|
|
|
void blit_sprite_strided(const byte* data, byte x, byte y, byte stride);
|
|
|
|
void unblit_sprite_strided(const byte* data, byte x, byte y, byte stride);
|
|
|
|
// x1: 0-303
|
|
// y1: 0-255
|
|
void draw_pixel(word xx, byte y, byte color);
|
|
|
|
void draw_solid(word x, byte y, byte w, byte h, byte color);
|
|
|
|
void draw_vline(word x, byte y, byte h, byte color);
|
|
|
|
void draw_copy_solid(word x, byte y, byte w, byte h, const byte* data, byte solid);
|
|
|
|
// BCD
|
|
asm word bcd_add(word a, word b);
|
|
|
|
#endif
|