118 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
#ifndef C64_VIC_H
 | 
						|
#define C64_VIC_H
 | 
						|
 | 
						|
#include "types.h"
 | 
						|
 | 
						|
#define VIC_CTRL1_RSEL	0x08
 | 
						|
#define VIC_CTRL1_DEN	0x10
 | 
						|
#define VIC_CTRL1_BMM	0x20
 | 
						|
#define VIC_CTRL1_ECM	0x40
 | 
						|
#define VIC_CTRL1_RST8	0x80
 | 
						|
 | 
						|
#define VIC_CTRL2_CSEL	0x08
 | 
						|
#define VIC_CTRL2_MCM	0x10
 | 
						|
#define VIC_CTRL2_RES	0x20
 | 
						|
 | 
						|
#define VIC_INTR_RST	0x01
 | 
						|
#define VIC_INTR_MBC	0x02
 | 
						|
#define VIC_INTR_MMC	0x04
 | 
						|
#define VIC_INTR_ILP	0x08
 | 
						|
#define VIC_INTR_IRQ	0x80
 | 
						|
 | 
						|
enum VICColors
 | 
						|
{
 | 
						|
	VCOL_BLACK,
 | 
						|
	VCOL_WHITE,
 | 
						|
	VCOL_RED,
 | 
						|
	VCOL_CYAN,
 | 
						|
	VCOL_PURPLE,
 | 
						|
	VCOL_GREEN,
 | 
						|
	VCOL_BLUE,
 | 
						|
	VCOL_YELLOW,
 | 
						|
 | 
						|
	VCOL_ORANGE,
 | 
						|
	VCOL_BROWN,
 | 
						|
	VCOL_LT_RED,
 | 
						|
	VCOL_DARK_GREY,
 | 
						|
	VCOL_MED_GREY,
 | 
						|
	VCOL_LT_GREEN,
 | 
						|
	VCOL_LT_BLUE,
 | 
						|
	VCOL_LT_GREY
 | 
						|
};
 | 
						|
 | 
						|
struct VIC
 | 
						|
{
 | 
						|
	struct XY
 | 
						|
	{
 | 
						|
		volatile byte	x, y;
 | 
						|
	}	spr_pos[8];
 | 
						|
	byte	spr_msbx;
 | 
						|
 | 
						|
	volatile byte	ctrl1;
 | 
						|
	volatile byte	raster;
 | 
						|
	volatile byte	lpx, lpy;
 | 
						|
	volatile byte	spr_enable;
 | 
						|
	volatile byte	ctrl2;
 | 
						|
	volatile byte	spr_expand_y;
 | 
						|
	volatile byte	memptr;
 | 
						|
	volatile byte	intr_ctrl;
 | 
						|
	volatile byte	intr_enable;
 | 
						|
	volatile byte	spr_priority;
 | 
						|
	volatile byte	spr_multi;
 | 
						|
	volatile byte	spr_expand_x;
 | 
						|
	volatile byte	spr_sprcol;
 | 
						|
	volatile byte	spr_backcol;
 | 
						|
	volatile byte	color_border;
 | 
						|
	volatile byte	color_back;
 | 
						|
	volatile byte	color_back1;
 | 
						|
	volatile byte	color_back2;
 | 
						|
	volatile byte	color_back3;
 | 
						|
	volatile byte	spr_mcolor0;
 | 
						|
	volatile byte	spr_mcolor1;
 | 
						|
	volatile byte	spr_color[8];
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
// set the 16k Bank for the vic
 | 
						|
// 0 : 0x0000..0x3fff
 | 
						|
// 1 : 0x4000..0x7fff
 | 
						|
// 2 : 0x8000..0xbfff
 | 
						|
// 3 : 0xc000..0xffff
 | 
						|
void vic_setbank(char bank);
 | 
						|
 | 
						|
enum VicMode
 | 
						|
{
 | 
						|
	VICM_TEXT,
 | 
						|
	VICM_TEXT_MC,
 | 
						|
	VICM_TEXT_ECM,
 | 
						|
	VICM_HIRES,
 | 
						|
	VICM_HIRES_MC
 | 
						|
};
 | 
						|
 | 
						|
// set the display mode and base address. This will also
 | 
						|
// adapt the bank.
 | 
						|
void vic_setmode(VicMode mode, char * text, char * font);
 | 
						|
 | 
						|
// put a sprite at the given x/y location, taking care of the
 | 
						|
// x MSB
 | 
						|
inline void vic_sprxy(byte s, int x, int y);
 | 
						|
 | 
						|
// wait for the beam to reach the bottom of the visual area
 | 
						|
inline void vic_waitBottom(void);
 | 
						|
 | 
						|
// wait for the beam to reach the top of the frame
 | 
						|
inline void vic_waitTop(void);
 | 
						|
 | 
						|
// wait for the top of the frame and then for the bottom of the visual area
 | 
						|
inline void vic_waitFrame(void);
 | 
						|
 | 
						|
// wait for a specific raster line
 | 
						|
void vic_waitLine(int line);
 | 
						|
 | 
						|
// reference to the VIC chip
 | 
						|
#define vic	(*((struct VIC *)0xd000))
 | 
						|
 | 
						|
#pragma compile("vic.c")
 | 
						|
 | 
						|
#endif
 |