10 #define __BYTES extern UBYTE
11 #define __BYTE_REG extern volatile UBYTE
13 static volatile __sfr __at(0x3E) MEMORY_CTL;
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
28 static volatile __sfr __at(0x3F) JOY_CTL;
30 #define JOY_P1_LATCH 0b00000010
31 #define JOY_P2_LATCH 0b00001000
33 static volatile __sfr __at(0x7E) VCOUNTER;
34 static volatile __sfr __at(0x7F) PSG;
35 static volatile __sfr __at(0x7F) HCOUNTER;
37 static volatile __sfr __at(0xBE) VDP_DATA;
38 static volatile __sfr __at(0xBF) VDP_CMD;
39 static volatile __sfr __at(0xBF) VDP_STATUS;
41 #define STATF_INT_VBL 0b10000000
42 #define STATF_9_SPR 0b01000000
43 #define STATF_SPR_COLL 0b00100000
45 #define VDP_REG_MASK 0b10000000
46 #define VDP_R0 0b10000000
49 #define R0_VSCRL 0b00000000
50 #define R0_VSCRL_INH 0b10000000
51 #define R0_HSCRL 0b00000000
52 #define R0_HSCRL_INH 0b01000000
53 #define R0_NO_LCB 0b00000000
54 #define R0_LCB 0b00100000
55 #define R0_IE1_OFF 0b00000000
56 #define R0_IE1 0b00010000
57 #define R0_SS_OFF 0b00000000
58 #define R0_SS 0b00001000
59 #define R0_DEFAULT 0b00000110
60 #define R0_ES_OFF 0b00000000
61 #define R0_ES 0b00000001
63 #define VDP_R1 0b10000001
66 #define R1_DEFAULT 0b10000000
67 #define R1_DISP_OFF 0b00000000
68 #define R1_DISP_ON 0b01000000
69 #define R1_IE_OFF 0b00000000
70 #define R1_IE 0b00100000
71 #define R1_SPR_8X8 0b00000000
72 #define R1_SPR_8X16 0b00000010
74 #define VDP_R2 0b10000010
77 #define R2_MAP_0x3800 0xFF
78 #define R2_MAP_0x3000 0xFD
79 #define R2_MAP_0x2800 0xFB
80 #define R2_MAP_0x2000 0xF9
81 #define R2_MAP_0x1800 0xF7
82 #define R2_MAP_0x1000 0xF5
83 #define R2_MAP_0x0800 0xF3
84 #define R2_MAP_0x0000 0xF1
86 #define VDP_R3 0b10000011
88 #define VDP_R4 0b10000100
90 #define VDP_R5 0b10000101
93 #define R5_SAT_0x3F00 0xFF
94 #define R5_SAT_MASK 0b10000001
96 #define VDP_R6 0b10000110
100 #define R6_DATA_0x0000 0xFB
101 #define R6_BANK1 0xFF
102 #define R6_DATA_0x2000 0xFF
104 #define VDP_R7 0b10000111
106 #define VDP_RBORDER 0b10000111
109 #define R7_COLOR_MASK 0b11110000
111 #define VDP_R8 0b10001000
113 #define VDP_RSCX 0b10001000
116 #define VDP_R9 0b10001001
118 #define VDP_RSCY 0b10001001
121 #define VDP_R10 0b10001010
124 #define R10_INT_OFF 0xFF
125 #define R10_INT_EVERY 0x00
127 static volatile __sfr __at(0xDC) JOY_PORT1;
129 #define JOY_P1_UP 0b00000001
130 #define JOY_P1_DOWN 0b00000010
131 #define JOY_P1_LEFT 0b00000100
132 #define JOY_P1_RIGHT 0b00001000
133 #define JOY_P1_SW1 0b00010000
134 #define JOY_P1_TRIGGER 0b00010000
135 #define JOY_P1_SW2 0b00100000
136 #define JOY_P2_UP 0b01000000
137 #define JOY_P2_DOWN 0b10000000
139 static volatile __sfr __at(0xDD) JOY_PORT2;
141 #define JOY_P2_LEFT 0b00000001
142 #define JOY_P2_RIGHT 0b00000010
143 #define JOY_P2_SW1 0b00000100
144 #define JOY_P2_TRIGGER 0b00000100
145 #define JOY_P2_SW2 0b00001000
146 #define JOY_RESET 0b00010000
147 #define JOY_P1_LIGHT 0b01000000
148 #define JOY_P2_LIGHT 0b10000000
150 static volatile __sfr __at(0xF0) FMADDRESS;
151 static volatile __sfr __at(0xF1) FMDATA;
152 static volatile __sfr __at(0xF2) AUDIOCTRL;
154 static volatile UBYTE __at(0xfffc) RAM_CONTROL;
156 #define RAMCTL_BANK 0b00000100
157 #define RAMCTL_ROM 0b00000000
158 #define RAMCTL_RAM 0b00001000
159 #define RAMCTL_RO 0b00010000
160 #define RAMCTL_PROT 0b10000000
162 static volatile UBYTE __at(0xfff8) GLASSES_3D;
164 static volatile UBYTE __at(0xfffd) MAP_FRAME0;
165 static volatile UBYTE __at(0xfffe) MAP_FRAME1;
166 static volatile UBYTE __at(0xffff) MAP_FRAME2;
172 #define SYSTEM_PAL 0x00
173 #define SYSTEM_NTSC 0x01
177 #define VDP_SAT_TERM 0xD0
179 #if defined(__TARGET_sms)
180 #define DEVICE_SCREEN_X_OFFSET 0
181 #define DEVICE_SCREEN_Y_OFFSET 0
182 #define DEVICE_SCREEN_WIDTH 32
183 #define DEVICE_SCREEN_HEIGHT 24
184 #define DEVICE_SCREEN_BUFFER_WIDTH 32
185 #define DEVICE_SCREEN_BUFFER_HEIGHT 28
186 #define DEVICE_SCREEN_MAP_ENTRY_SIZE 2
187 #define DEVICE_SPRITE_PX_OFFSET_X 0
188 #define DEVICE_SPRITE_PX_OFFSET_Y -1
189 #elif defined(__TARGET_gg)
190 #define DEVICE_SCREEN_X_OFFSET 6
191 #define DEVICE_SCREEN_Y_OFFSET 3
192 #define DEVICE_SCREEN_WIDTH 20
193 #define DEVICE_SCREEN_HEIGHT 18
194 #define DEVICE_SCREEN_BUFFER_WIDTH 32
195 #define DEVICE_SCREEN_BUFFER_HEIGHT 28
196 #define DEVICE_SCREEN_MAP_ENTRY_SIZE 2
197 #define DEVICE_SPRITE_PX_OFFSET_X 48
198 #define DEVICE_SPRITE_PX_OFFSET_Y 23
200 #error Unrecognized port
202 #define DEVICE_SCREEN_PX_WIDTH (DEVICE_SCREEN_WIDTH * 8)
203 #define DEVICE_SCREEN_PX_HEIGHT (DEVICE_SCREEN_HEIGHT * 8)