hardware.h (5196B)
1/** @file msx/hardware.h 2 Defines that let the MSX hardware registers be accessed 3 from C. 4*/ 5#ifndef _HARDWARE_H 6#define _HARDWARE_H 7 8#include <types.h> 9 10#define __BYTES extern UBYTE 11#define __BYTE_REG extern volatile UBYTE 12 13static volatile SFR AT(0x3E) MEMORY_CTL; 14 15#define MEMCTL_JOYON 0b00000000 16#define MEMCTL_JOYOFF 0b00000100 17#define MEMCTL_BASEON 0b00000000 18#define MEMCTL_BASEOFF 0b00001000 19#define MEMCTL_RAMON 0b00000000 20#define MEMCTL_RAMOFF 0b00010000 21#define MEMCTL_CROMON 0b00000000 22#define MEMCTL_CROMOFF 0b00100000 23#define MEMCTL_ROMON 0b00000000 24#define MEMCTL_ROMOFF 0b01000000 25#define MEMCTL_EXTON 0b00000000 26#define MEMCTL_EXTOFF 0b10000000 27 28static volatile SFR AT(0x3F) JOY_CTL; 29 30#define JOY_P1_LATCH 0b00000010 31#define JOY_P2_LATCH 0b00001000 32 33static volatile SFR AT(0x7E) VCOUNTER; 34 35static volatile SFR AT(0x7F) PSG; 36 37#define PSG_LATCH 0x80 38 39#define PSG_CH0 0b00000000 40#define PSG_CH1 0b00100000 41#define PSG_CH2 0b01000000 42#define PSG_CH3 0b01100000 43 44#define PSG_VOLUME 0b00010000 45 46static volatile SFR AT(0x7F) HCOUNTER; 47 48static volatile SFR AT(0x98) VDP_DATA; 49static volatile SFR AT(0x99) VDP_CMD; 50static volatile SFR AT(0x99) VDP_STATUS; 51 52#define STATF_INT_VBL 0b10000000 53#define STATF_9_SPR 0b01000000 54#define STATF_SPR_COLL 0b00100000 55 56#define VDP_REG_MASK 0b10000000 57#define VDP_R0 0b10000000 58extern UBYTE shadow_VDP_R0; 59 60#define R0_DEFAULT 0b00000000 61#define R0_CB_OUTPUT 0b00000000 62#define R0_CB_INPUT 0b01000000 63#define R0_IE2_OFF 0b00000000 64#define R0_IE2 0b00100000 65#define R0_IE1_OFF 0b00000000 66#define R0_IE1 0b00010000 67#define R0_SCR_MODE1 0b00000000 68#define R0_SCR_MODE2 0b00000010 69#define R0_SCR_MODE3 0b00000100 70#define R0_ES_OFF 0b00000000 71#define R0_ES 0b00000001 72 73#define VDP_R1 0b10000001 74extern UBYTE shadow_VDP_R1; 75 76#define R1_DEFAULT 0b10000000 77#define R1_DISP_OFF 0b00000000 78#define R1_DISP_ON 0b01000000 79#define R1_IE_OFF 0b00000000 80#define R1_IE 0b00100000 81#define R1_SCR_MODE1 0b00010000 82#define R1_SCR_MODE2 0b00000000 83#define R1_SCR_MODE3 0b00000000 84#define R1_SPR_8X8 0b00000000 85#define R1_SPR_16X16 0b00000010 86#define R1_SPR_MAG 0b00000001 87#define R1_SPR_MAG_OFF 0b00000000 88 89#define VDP_R2 0b10000010 90extern UBYTE shadow_VDP_R2; 91 92#define R2_MAP_0x3800 0xFF 93#define R2_MAP_0x3000 0xFD 94#define R2_MAP_0x2800 0xFB 95#define R2_MAP_0x2000 0xF9 96#define R2_MAP_0x1800 0xF7 97#define R2_MAP_0x1000 0xF5 98#define R2_MAP_0x0800 0xF3 99#define R2_MAP_0x0000 0xF1 100 101#define VDP_R3 0b10000011 102extern UBYTE shadow_VDP_R3; 103#define VDP_R4 0b10000100 104extern UBYTE shadow_VDP_R4; 105#define VDP_R5 0b10000101 106extern UBYTE shadow_VDP_R5; 107 108#define R5_SAT_0x3F00 0xFF 109#define R5_SAT_MASK 0b10000001 110 111#define VDP_R6 0b10000110 112extern UBYTE shadow_VDP_R6; 113 114#define R6_BANK0 0xFB 115#define R6_DATA_0x0000 0xFB 116#define R6_BANK1 0xFF 117#define R6_DATA_0x2000 0xFF 118 119#define VDP_R7 0b10000111 120extern UBYTE shadow_VDP_R7; 121#define VDP_RBORDER 0b10000111 122extern UBYTE shadow_VDP_RBORDER; 123 124#define R7_COLOR_MASK 0b11110000 125 126#define VDP_R8 0b10001000 127extern UBYTE shadow_VDP_R8; 128#define VDP_RSCX 0b10001000 129extern UBYTE shadow_VDP_RSCX; 130 131#define VDP_R9 0b10001001 132extern UBYTE shadow_VDP_R9; 133#define VDP_RSCY 0b10001001 134extern UBYTE shadow_VDP_RSCY; 135 136#define VDP_R10 0b10001010 137extern UBYTE shadow_VDP_R10; 138 139#define R10_INT_OFF 0xFF 140#define R10_INT_EVERY 0x00 141 142static volatile SFR AT(0xDC) JOY_PORT1; 143 144#define JOY_P1_UP 0b00000001 145#define JOY_P1_DOWN 0b00000010 146#define JOY_P1_LEFT 0b00000100 147#define JOY_P1_RIGHT 0b00001000 148#define JOY_P1_SW1 0b00010000 149#define JOY_P1_TRIGGER 0b00010000 150#define JOY_P1_SW2 0b00100000 151#define JOY_P2_UP 0b01000000 152#define JOY_P2_DOWN 0b10000000 153 154static volatile SFR AT(0xDD) JOY_PORT2; 155 156#define JOY_P2_LEFT 0b00000001 157#define JOY_P2_RIGHT 0b00000010 158#define JOY_P2_SW1 0b00000100 159#define JOY_P2_TRIGGER 0b00000100 160#define JOY_P2_SW2 0b00001000 161#define JOY_RESET 0b00010000 162#define JOY_P1_LIGHT 0b01000000 163#define JOY_P2_LIGHT 0b10000000 164 165static volatile SFR AT(0xF0) FMADDRESS; 166static volatile SFR AT(0xF1) FMDATA; 167static volatile SFR AT(0xF2) AUDIOCTRL; 168 169static volatile SFR AT(0xfc) MAP_FRAME0; 170static volatile SFR AT(0xfd) MAP_FRAME1; 171static volatile SFR AT(0xfe) MAP_FRAME2; 172static volatile SFR AT(0xff) MAP_FRAME3; 173 174extern const UBYTE _BIOS; 175 176extern const UBYTE _SYSTEM; 177 178#define SYSTEM_PAL 0x00 179#define SYSTEM_NTSC 0x01 180 181extern volatile UBYTE VDP_ATTR_SHIFT; 182 183#define VDP_SAT_TERM 0xD0 184 185#if defined(__TARGET_msxdos) 186#define DEVICE_SCREEN_X_OFFSET 0 187#define DEVICE_SCREEN_Y_OFFSET 0 188#define DEVICE_SCREEN_WIDTH 32 189#define DEVICE_SCREEN_HEIGHT 24 190#define DEVICE_SCREEN_BUFFER_WIDTH 32 191#define DEVICE_SCREEN_BUFFER_HEIGHT 28 192#define DEVICE_SCREEN_MAP_ENTRY_SIZE 2 193#define DEVICE_SPRITE_PX_OFFSET_X 0 194#define DEVICE_SPRITE_PX_OFFSET_Y -1 195#else 196#error Unrecognized port 197#endif 198#define DEVICE_SCREEN_PX_WIDTH (DEVICE_SCREEN_WIDTH * 8) 199#define DEVICE_SCREEN_PX_HEIGHT (DEVICE_SCREEN_HEIGHT * 8) 200 201#endif