158 lines
3.4 KiB
C
158 lines
3.4 KiB
C
#ifndef CX16_VERA_H
|
|
#define CX16_VERA_H
|
|
|
|
// Thanks to crisps for providing the initial code for this library
|
|
|
|
#include <c64/types.h>
|
|
|
|
#define VERA_ADDRH_DECR 0x08
|
|
#define VERA_ADDRH_INC 0xf0
|
|
|
|
#define VERA_CTRL_RESET 0x80
|
|
#define VERA_CTRL_DCSEL 0x02
|
|
#define VERA_CTRL_ADDRSEL 0x01
|
|
|
|
#define VERA_IRQ_LINE_8 0x80
|
|
#define VERA_IRQ_AFLOW 0x08
|
|
#define VERA_IRQ_SPRCOL 0x04
|
|
#define VERA_IRQ_LINE 0x02
|
|
#define VERA_IRQ_VSYNC 0x01
|
|
|
|
#define VERA_DCVIDEO_MODE_OFF 0x00
|
|
#define VERA_DCVIDEO_MODE_VGA 0x01
|
|
#define VERA_DCVIDEO_MODE_NTSC 0x02
|
|
#define VERA_DCVIDEO_MODE_RGBI 0x03
|
|
|
|
#define VERA_DCVIDEO_NCHROMA 0x04
|
|
#define VERA_DCVIDEO_LAYER0 0x10
|
|
#define VERA_DCVIDEO_LAYER1 0x20
|
|
#define VERA_DCVIDEO_SPRITES 0x40
|
|
|
|
#define VERA_LAYER_DEPTH_1 0x00
|
|
#define VERA_LAYER_DEPTH_2 0x01
|
|
#define VERA_LAYER_DEPTH_4 0x02
|
|
#define VERA_LAYER_DEPTH_8 0x03
|
|
|
|
#define VERA_LAYER_BITMAP 0x04
|
|
#define VERA_LAYER_T256C 0x08
|
|
#define VERA_LAYER_WIDTH_32 0x00
|
|
#define VERA_LAYER_WIDTH_64 0x10
|
|
#define VERA_LAYER_WIDTH_128 0x20
|
|
#define VERA_LAYER_WIDTH_256 0x30
|
|
#define VERA_LAYER_HEIGHT_32 0x00
|
|
#define VERA_LAYER_HEIGHT_64 0x40
|
|
#define VERA_LAYER_HEIGHT_128 0x80
|
|
#define VERA_LAYER_HEIGHT_256 0xc0
|
|
|
|
#define VERA_TILE_WIDTH_8 0x00
|
|
#define VERA_TILE_WIDTH_16 0x01
|
|
#define VERA_TILE_HEIGHT_8 0x00
|
|
#define VERA_TILE_HEIGHT_16 0x02
|
|
|
|
|
|
struct VERA
|
|
{
|
|
volatile word addr;
|
|
volatile byte addrh;
|
|
volatile byte data0, data1;
|
|
|
|
volatile byte ctrl;
|
|
volatile byte ien;
|
|
volatile byte isr;
|
|
volatile byte irqline;
|
|
|
|
volatile byte dcvideo;
|
|
volatile byte dchscale;
|
|
volatile byte dcvscale;
|
|
volatile byte dcborder;
|
|
|
|
volatile byte l0config;
|
|
volatile byte l0mapbase;
|
|
volatile byte l0tilebase;
|
|
volatile word l0hscroll;
|
|
volatile word l0vscroll;
|
|
|
|
volatile byte l1config;
|
|
volatile byte l1mapbase;
|
|
volatile byte l1tilebase;
|
|
volatile word l1hscroll;
|
|
volatile word l1vscroll;
|
|
|
|
volatile byte audioctrl;
|
|
volatile byte audiorate;
|
|
volatile byte audiodata;
|
|
|
|
volatile byte spidata;
|
|
volatile byte spictrl;
|
|
};
|
|
|
|
enum VERASpriteMode
|
|
{
|
|
VSPRMODE_4,
|
|
VSPRMODE_8
|
|
};
|
|
|
|
enum VERASpriteSize
|
|
{
|
|
VSPRSZIZE_8,
|
|
VSPRSZIZE_16,
|
|
VSPRSZIZE_32,
|
|
VSPRSZIZE_64
|
|
};
|
|
|
|
enum VERASpritePriority
|
|
{
|
|
VSPRPRI_OFF,
|
|
VSPRPRI_BACK,
|
|
VSPRPRI_MIDDLE,
|
|
VSPRPRI_FRONT
|
|
};
|
|
|
|
#define VERA_COLOR(r, g, b) (((unsigned)(r) << 8) | ((unsigned)(g) << 4) | (unsigned)(b))
|
|
|
|
#define vera (*(VERA *)0x9f20)
|
|
|
|
inline void vram_addr(unsigned long addr);
|
|
|
|
inline void vram_addr0(unsigned long addr);
|
|
|
|
inline void vram_addr2(unsigned long addr);
|
|
|
|
inline void vram_put(char data);
|
|
|
|
inline void vram_putw(unsigned data);
|
|
|
|
inline char vram_get(void);
|
|
|
|
inline unsigned vram_getw(void);
|
|
|
|
inline void vram_put_at(unsigned long addr, char data);
|
|
|
|
inline char vram_get_at(unsigned long addr);
|
|
|
|
void vram_putn(unsigned long addr, const char * data, unsigned size);
|
|
|
|
void vram_getn(unsigned long addr, char * data, unsigned size);
|
|
|
|
void vram_fill(unsigned long addr, char data, unsigned size);
|
|
|
|
void vera_spr_set(char spr, unsigned addr32, VERASpriteMode mode8, VERASpriteSize w, VERASpriteSize h, VERASpritePriority z, char pal);
|
|
|
|
void vera_spr_flip(char spr, bool fliph, bool flipv);
|
|
|
|
void vera_spr_move(char spr, int x, int y);
|
|
|
|
void vera_spr_image(char spr, unsigned addr32);
|
|
|
|
void vera_pal_put(char index, unsigned color);
|
|
|
|
unsigned vera_pal_get(char index);
|
|
|
|
void vera_pal_putn(char index, const unsigned * color, unsigned size);
|
|
|
|
void vera_pal_getn(char index, unsigned * color, unsigned size);
|
|
|
|
#pragma compile("vera.c")
|
|
|
|
#endif
|