mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-26 10:49:17 +00:00
143 lines
5.1 KiB
C
143 lines
5.1 KiB
C
|
|
||
|
// define basic types for convenience
|
||
|
typedef unsigned char byte; // 8-bit unsigned
|
||
|
typedef signed char sbyte; // 8-bit signed
|
||
|
typedef unsigned short word; // 16-bit signed
|
||
|
typedef enum { false, true } bool; // boolean
|
||
|
|
||
|
/// MEMORY MAPS
|
||
|
|
||
|
typedef struct t_TIA {
|
||
|
byte _00;
|
||
|
byte VBLANK; // input port control
|
||
|
byte _02_07[6];
|
||
|
byte INPT0; // PADDLE CONTROL INPUT 0 WO
|
||
|
byte INPT1; // PADDLE CONTROL INPUT 1 WO
|
||
|
byte INPT2; // PADDLE CONTROL INPUT 2 WO
|
||
|
byte INPT3; // PADDLE CONTROL INPUT 3 WO
|
||
|
byte INPT4; // PLAYER 0 FIRE BUTTON INPUT WO
|
||
|
byte INPT5; // PLAYER 1 FIRE BUTTON INPUT WO
|
||
|
byte _0e_14[7];
|
||
|
byte AUDC0; // AUDIO CONTROL CHANNEL 0 WO
|
||
|
byte AUDC1; // AUDIO CONTROL CHANNEL 1 WO
|
||
|
byte AUDF0; // AUDIO FREQUENCY CHANNEL 0 WO
|
||
|
byte AUDF1; // AUDIO FREQUENCY CHANNEL 1 WO
|
||
|
byte AUDV0; // AUDIO VOLUME CHANNEL 0 WO
|
||
|
byte AUDV1; // AUDIO VOLUME CHANNEL 1 WO
|
||
|
} t_TIA;
|
||
|
|
||
|
typedef struct t_MARIA {
|
||
|
byte BACKGRND ;// X '20' BACKGROUND COLOR R/W
|
||
|
byte P0C1 ;// X '21' PALETTE 0 - COLOR 1 R/W
|
||
|
byte P0C2 ;// X '22' - COLOR 2 R/W
|
||
|
byte P0C3 ;// X '23' - COLOR 3 R/W
|
||
|
byte WSYNC ;// X '24' WAIT FOR SYNC STROBE
|
||
|
byte P1C1 ;// X '25' PALETTE 1 - COLOR 1 R/W
|
||
|
byte P1C2 ;// X '26' - COLOR 2 R/W
|
||
|
byte P1C3 ;// X '27' - COLOR 3 R/W
|
||
|
byte MSTAT ;// X '28' MARIA STATUS RO
|
||
|
byte P2C1 ;// X '29' PALETTE 2 - COLOR 1 R/W
|
||
|
byte P2C2 ;// X '2A' - COLOR 2 R/W
|
||
|
byte P2C3 ;// X '2B' - COLOR 3 R/W
|
||
|
byte DPPH ;// X '2C' DISPLAY LIST LIST POINT HIGH WO
|
||
|
byte P3C1 ;// X '2D' PALETTE 3 - COLOR 1 R/W
|
||
|
byte P3C2 ;// X '2E' - COLOR 2 R/W
|
||
|
byte P3C3 ;// X '2F' - COLOR 3 R/W
|
||
|
byte DPPL ;// X '30' DISPLAY LIST LIST POINT LOW WO
|
||
|
byte P4C1 ;// X '31' PALETTE 4 - COLOR 1 R/W
|
||
|
byte P4C2 ;// X '32' - COLOR 2 R/W
|
||
|
byte P4C3 ;// X '33' - COLOR 3 R/W
|
||
|
byte CHARBASE ;// X '34' CHARACTER BASE ADDRESS WO
|
||
|
byte P5C1 ;// X '35' PALETTE 5 - COLOR 1 R/W
|
||
|
byte P5C2 ;// X '36' - COLOR 2 R/W
|
||
|
byte P5C3 ;// X '37' - COLOR 3 R/W
|
||
|
byte OFFSET ;// X '38' FOR FUTURE EXPANSION -STORE ZERO HERE R/W
|
||
|
byte P6C1 ;// X '39' PALETTE 6 - COLOR 1 R/W
|
||
|
byte P6C2 ;// X '3A' - COLOR 2 R/W
|
||
|
byte P6C3 ;// X '3B' - COLOR 3 R/W
|
||
|
byte CTRL ;// X '3C' MARIA CONTROL REGISTER WO
|
||
|
byte P7C1 ;// X '3D' PALETTE 7 - COLOR 1 R/W
|
||
|
byte P7C2 ;// X '3E' - COLOR 2 R/W
|
||
|
byte P7C3 ;// X '3F' - COLOR 3 R/W
|
||
|
} t_MARIA;
|
||
|
|
||
|
typedef struct t_P6532 {
|
||
|
byte SWCHA; // P0,P1 JOYSTICK DIRECTIONAL INPUT R/W
|
||
|
byte CTLSWA; // CONSOLE SWITCHES RO
|
||
|
byte SWCHB; // I/O CONTROL FOR SWCHA R/W
|
||
|
byte CTLSWB; // I/O CONTROL FOR SWCHB R/W
|
||
|
} t_P6532;
|
||
|
|
||
|
typedef struct DLLEntry {
|
||
|
byte offset_flags;
|
||
|
/*
|
||
|
unsigned int offset:4;
|
||
|
unsigned int _unused:1;
|
||
|
unsigned int h8:1;
|
||
|
unsigned int h16:1;
|
||
|
unsigned int dli:1;
|
||
|
*/
|
||
|
byte dl_hi;
|
||
|
byte dl_lo;
|
||
|
} DLLEntry;
|
||
|
|
||
|
typedef struct DL4Entry {
|
||
|
byte data_lo;
|
||
|
byte width_pal;
|
||
|
/*
|
||
|
unsigned int width:5;
|
||
|
unsigned int palette:3;
|
||
|
*/
|
||
|
byte data_hi;
|
||
|
byte xpos;
|
||
|
} DL4Entry;
|
||
|
|
||
|
typedef struct DL5Entry {
|
||
|
byte data_lo;
|
||
|
byte flags;
|
||
|
byte data_hi;
|
||
|
byte width_pal;
|
||
|
/*
|
||
|
unsigned int width:5;
|
||
|
unsigned int palette:3;
|
||
|
*/
|
||
|
byte xpos;
|
||
|
} DL5Entry;
|
||
|
|
||
|
/// CONSTANTS
|
||
|
|
||
|
#define DLL_DLI 0x80 // Display List Interrupt flag
|
||
|
#define DLL_H16 0x40 // Holey DMA 4k flag
|
||
|
#define DLL_H8 0x20 // Holey DMA 2k flag
|
||
|
|
||
|
#define DL5_WM 0x80 // Write Mode
|
||
|
#define DL5_DIRECT 0x40 // Direct Mode
|
||
|
#define DL5_INDIRECT 0x60 // Indirect Mode
|
||
|
|
||
|
#define DL_WIDTH(x) (32-(x)) // for width_pal
|
||
|
#define DL_PAL(x) ((x)<<5) // OR them together
|
||
|
#define DL_WP(w,p) (DL_WIDTH(w)|DL_PAL(p))
|
||
|
|
||
|
#define CTRL_COLORKILL 0x80
|
||
|
#define CTRL_DMA_ON 0x40
|
||
|
#define CTRL_DMA_OFF 0x60
|
||
|
#define CTRL_DBLBYTE 0x10
|
||
|
#define CTRL_BLKBORDER 0x08
|
||
|
#define CTRL_KANGAROO 0x04
|
||
|
#define CTRL_160AB 0x00
|
||
|
#define CTRL_320BD 0x02
|
||
|
#define CTRL_320AC 0x03
|
||
|
|
||
|
#define MSTAT_VBLANK 0x80
|
||
|
|
||
|
/// GLOBALS
|
||
|
|
||
|
#define TIA (*((t_TIA*) 0x00))
|
||
|
#define MARIA (*((t_MARIA*) 0x20))
|
||
|
#define P6532 (*((t_P6532*) 0x280))
|
||
|
|
||
|
/// MACROS
|
||
|
|
||
|
#define STROBE(addr) __asm__ ("sta %w", addr)
|
||
|
#define WSYNC() STROBE(0x24)
|