12#define __BYTES extern UBYTE
13#define __BYTE_REG extern volatile UBYTE
14#define __REG extern volatile SFR
50#define MBC7_LATCH_ERASE 0x55u
51#define MBC7_LATCH_CAPTURE 0xAAu
52#define MBC7_SRAM_ENABLE_KEY_1 0x0Au
53#define MBC7_SRAM_ENABLE_KEY_2 0x40u
60#define P1F_5 0b00100000
61#define P1F_4 0b00010000
62#define P1F_3 0b00001000
63#define P1F_2 0b00000100
64#define P1F_1 0b00000010
65#define P1F_0 0b00000001
67#define P1F_GET_DPAD P1F_5
68#define P1F_GET_BTN P1F_4
69#define P1F_GET_NONE (P1F_4 | P1F_5)
76#define SIOF_XFER_START 0b10000000
77#define SIOF_CLOCK_INT 0b00000001
78#define SIOF_CLOCK_EXT 0b00000000
79#define SIOF_SPEED_1X 0b00000000
80#define SIOF_SPEED_32X 0b00000010
83#define SIOF_B_XFER_START 7
84#define SCF_START SIOF_XFER_START
85#define SCF_SOURCE SIOF_CLOCK_INT
86#define SCF_SPEED SIOF_SPEED_32X
97#define TACF_START 0b00000100
98#define TACF_STOP 0b00000000
99#define TACF_4KHZ 0b00000000
100#define TACF_16KHZ 0b00000011
101#define TACF_65KHZ 0b00000010
102#define TACF_262KHZ 0b00000001
108#define rAUD1SWEEP NR10_REG
109#define AUD1SWEEP_UP 0b00000000
110#define AUD1SWEEP_DOWN 0b00001000
111#define AUD1SWEEP_TIME(x) ((x) << 4)
112#define AUD1SWEEP_LENGTH(x) (x)
114#define rAUD1LEN NR11_REG
116#define rAUD1ENV NR12_REG
118#define rAUD1LOW NR13_REG
120#define rAUD1HIGH NR14_REG
123#define rAUD2LEN NR21_REG
125#define rAUD2ENV NR22_REG
127#define rAUD2LOW NR23_REG
129#define rAUD2HIGH NR24_REG
132#define rAUD3ENA NR30_REG
134#define rAUD3LEN NR31_REG
136#define rAUD3LEVEL NR32_REG
138#define rAUD3LOW NR33_REG
140#define rAUD3HIGH NR34_REG
143#define rAUD4LEN NR41_REG
145#define rAUD4ENV NR42_REG
147#define rAUD4POLY NR43_REG
148#define AUD4POLY_WIDTH_15BIT 0x00
149#define AUD4POLY_WIDTH_7BIT 0x08
151#define rAUD4GO NR44_REG
154#define rAUDVOL NR50_REG
156#define AUDVOL_VOL_LEFT(x) ((x) << 4)
157#define AUDVOL_VOL_RIGHT(x) ((x))
158#define AUDVOL_VIN_LEFT 0b10000000
159#define AUDVOL_VIN_RIGHT 0b00001000
162#define rAUDTERM NR51_REG
164#define AUDTERM_4_LEFT 0b10000000
165#define AUDTERM_3_LEFT 0b01000000
166#define AUDTERM_2_LEFT 0b00100000
167#define AUDTERM_1_LEFT 0b00010000
168#define AUDTERM_4_RIGHT 0b00001000
169#define AUDTERM_3_RIGHT 0b00000100
170#define AUDTERM_2_RIGHT 0b00000010
171#define AUDTERM_1_RIGHT 0b00000001
174#define rAUDENA NR52_REG
176#define AUDENA_ON 0b10000000
177#define AUDENA_OFF 0b00000000
183#define rLCDC LCDC_REG
185#if defined(__TARGET_ap)
186#define LCDCF_OFF 0b00000000
187#define LCDCF_ON 0b00000001
188#define LCDCF_WIN9800 0b00000000
189#define LCDCF_WIN9C00 0b00000010
190#define LCDCF_WINOFF 0b00000000
191#define LCDCF_WINON 0b00000100
192#define LCDCF_BG8800 0b00000000
193#define LCDCF_BG8000 0b00001000
194#define LCDCF_BG9800 0b00000000
195#define LCDCF_BG9C00 0b00010000
196#define LCDCF_OBJ8 0b00000000
197#define LCDCF_OBJ16 0b00100000
198#define LCDCF_OBJOFF 0b00000000
199#define LCDCF_OBJON 0b01000000
200#define LCDCF_BGOFF 0b00000000
201#define LCDCF_BGON 0b10000000
203#define LCDCF_B_WIN9C00 1
204#define LCDCF_B_WINON 2
205#define LCDCF_B_BG8000 3
206#define LCDCF_B_BG9C00 4
207#define LCDCF_B_OBJ16 5
208#define LCDCF_B_OBJON 6
209#define LCDCF_B_BGON 7
210#elif defined(__TARGET_duck)
211#define LCDCF_OFF 0b00000000
212#define LCDCF_ON 0b10000000
213#define LCDCF_WIN9800 0b00000000
214#define LCDCF_WIN9C00 0b00001000
215#define LCDCF_WINOFF 0b00000000
216#define LCDCF_WINON 0b00100000
217#define LCDCF_BG8800 0b00000000
218#define LCDCF_BG8000 0b00010000
219#define LCDCF_BG9800 0b00000000
220#define LCDCF_BG9C00 0b00000100
221#define LCDCF_OBJ8 0b00000000
222#define LCDCF_OBJ16 0b00000010
223#define LCDCF_OBJOFF 0b00000000
224#define LCDCF_OBJON 0b00000001
225#define LCDCF_BGOFF 0b00000000
226#define LCDCF_BGON 0b01000000
228#define LCDCF_B_WIN9C00 3
229#define LCDCF_B_WINON 5
230#define LCDCF_B_BG8000 4
231#define LCDCF_B_BG9C00 2
232#define LCDCF_B_OBJ16 1
233#define LCDCF_B_OBJON 0
234#define LCDCF_B_BGON 6
236#define LCDCF_OFF 0b00000000
237#define LCDCF_ON 0b10000000
238#define LCDCF_WIN9800 0b00000000
239#define LCDCF_WIN9C00 0b01000000
240#define LCDCF_WINOFF 0b00000000
241#define LCDCF_WINON 0b00100000
242#define LCDCF_BG8800 0b00000000
243#define LCDCF_BG8000 0b00010000
244#define LCDCF_BG9800 0b00000000
245#define LCDCF_BG9C00 0b00001000
246#define LCDCF_OBJ8 0b00000000
247#define LCDCF_OBJ16 0b00000100
248#define LCDCF_OBJOFF 0b00000000
249#define LCDCF_OBJON 0b00000010
250#define LCDCF_BGOFF 0b00000000
251#define LCDCF_BGON 0b00000001
253#define LCDCF_B_WIN9C00 6
254#define LCDCF_B_WINON 5
255#define LCDCF_B_BG8000 4
256#define LCDCF_B_BG9C00 3
257#define LCDCF_B_OBJ16 2
258#define LCDCF_B_OBJON 1
259#define LCDCF_B_BGON 0
263#define rSTAT STAT_REG
265#if defined(__TARGET_ap)
266#define STATF_LYC 0b00000010
267#define STATF_MODE10 0b00000100
268#define STATF_MODE01 0b00001000
269#define STATF_MODE00 0b00010000
270#define STATF_LYCF 0b00100000
271#define STATF_HBL 0b00000000
272#define STATF_VBL 0b10000000
273#define STATF_OAM 0b01000000
274#define STATF_LCD 0b11000000
275#define STATF_BUSY 0b01000000
277#define STATF_B_MODE10 2
278#define STATF_B_MODE01 3
279#define STATF_B_MODE00 4
280#define STATF_B_LYCF 5
283#define STATF_B_BUSY 6
285#define STATF_LYC 0b01000000
286#define STATF_MODE10 0b00100000
287#define STATF_MODE01 0b00010000
288#define STATF_MODE00 0b00001000
289#define STATF_LYCF 0b00000100
290#define STATF_HBL 0b00000000
291#define STATF_VBL 0b00000001
292#define STATF_OAM 0b00000010
293#define STATF_LCD 0b00000011
294#define STATF_BUSY 0b00000010
296#define STATF_B_MODE10 5
297#define STATF_B_MODE01 4
298#define STATF_B_MODE00 3
299#define STATF_B_LYCF 2
302#define STATF_B_BUSY 1
318#define rOBP0 OBP0_REG
320#define rOBP1 OBP1_REG
326#define rKEY1 KEY1_REG
329#define KEY1F_DBLSPEED 0b10000000
330#define KEY1F_PREPARE 0b00000001
338#define VBK_ATTRIBUTES 1
340#define BKGF_PRI 0b10000000
341#define BKGF_YFLIP 0b01000000
342#define BKGF_XFLIP 0b00100000
343#define BKGF_BANK0 0b00000000
344#define BKGF_BANK1 0b00001000
346#define BKGF_CGB_PAL0 0b00000000
347#define BKGF_CGB_PAL1 0b00000001
348#define BKGF_CGB_PAL2 0b00000010
349#define BKGF_CGB_PAL3 0b00000011
350#define BKGF_CGB_PAL4 0b00000100
351#define BKGF_CGB_PAL5 0b00000101
352#define BKGF_CGB_PAL6 0b00000110
353#define BKGF_CGB_PAL7 0b00000111
356#define rHDMA1 HDMA1_REG
358#define rHDMA2 HDMA2_REG
360#define rHDMA3 HDMA3_REG
362#define rHDMA4 HDMA4_REG
364#define rHDMA5 HDMA5_REG
366#define HDMA5F_MODE_GP 0b00000000
367#define HDMA5F_MODE_HBL 0b10000000
369#define HDMA5F_BUSY 0b10000000
374#define RPF_ENREAD 0b11000000
375#define RPF_DATAIN 0b00000010
376#define RPF_WRITE_HI 0b00000001
377#define RPF_WRITE_LO 0b00000000
380#define rBCPS BCPS_REG
382#define BCPSF_AUTOINC 0b10000000
384#define rBCPD BCPD_REG
387#define rOCPS OCPS_REG
389#define OCPSF_AUTOINC 0b10000000
391#define rOCPD OCPD_REG
393#define rSVBK SVBK_REG
394#define rSMBK SVBK_REG
397#define rPCM12 PCM12_REG
400#define rPCM34 PCM34_REG
405#define IEF_HILO 0b00010000
406#define IEF_SERIAL 0b00001000
407#define IEF_TIMER 0b00000100
408#define IEF_STAT 0b00000010
409#define IEF_VBLANK 0b00000001
413#define AUDLEN_DUTY_12_5 0b00000000
414#define AUDLEN_DUTY_25 0b01000000
415#define AUDLEN_DUTY_50 0b10000000
416#define AUDLEN_DUTY_75 0b11000000
417#define AUDLEN_LENGTH(x) (x)
420#define AUDENV_VOL(x) ((x) << 4)
421#define AUDENV_UP 0b00001000
422#define AUDENV_DOWN 0b00000000
423#define AUDENV_LENGTH(x) (x)
426#define AUDHIGH_RESTART 0b10000000
427#define AUDHIGH_LENGTH_ON 0b01000000
428#define AUDHIGH_LENGTH_OFF 0b00000000
431#define OAMF_PRI 0b10000000
432#define OAMF_YFLIP 0b01000000
433#define OAMF_XFLIP 0b00100000
434#define OAMF_PAL0 0b00000000
435#define OAMF_PAL1 0b00010000
436#define OAMF_BANK0 0b00000000
437#define OAMF_BANK1 0b00001000
439#define OAMF_CGB_PAL0 0b00000000
440#define OAMF_CGB_PAL1 0b00000001
441#define OAMF_CGB_PAL2 0b00000010
442#define OAMF_CGB_PAL3 0b00000011
443#define OAMF_CGB_PAL4 0b00000100
444#define OAMF_CGB_PAL5 0b00000101
445#define OAMF_CGB_PAL6 0b00000110
446#define OAMF_CGB_PAL7 0b00000111
448#define OAMF_PALMASK 0b00000111
450#define DEVICE_SCREEN_X_OFFSET 0
451#define DEVICE_SCREEN_Y_OFFSET 0
452#define DEVICE_SCREEN_WIDTH 20
453#define DEVICE_SCREEN_HEIGHT 18
454#define DEVICE_SCREEN_BUFFER_WIDTH 32
455#define DEVICE_SCREEN_BUFFER_HEIGHT 32
456#define DEVICE_SCREEN_MAP_ENTRY_SIZE 1
457#define DEVICE_SPRITE_PX_OFFSET_X 8
458#define DEVICE_SPRITE_PX_OFFSET_Y 16
459#define DEVICE_WINDOW_PX_OFFSET_X 7
460#define DEVICE_WINDOW_PX_OFFSET_Y 0
461#define DEVICE_SCREEN_PX_WIDTH (DEVICE_SCREEN_WIDTH * 8)
462#define DEVICE_SCREEN_PX_HEIGHT (DEVICE_SCREEN_HEIGHT * 8)
__BYTE_REG AUD3WAVE[16]
Definition: hardware.h:179
__REG BCPD_REG
Definition: hardware.h:383
__REG BCPS_REG
Definition: hardware.h:379
__REG BGP_REG
Definition: hardware.h:315
__REG DIV_REG
Definition: hardware.h:88
__REG DMA_REG
Definition: hardware.h:313
__REG HDMA1_REG
Definition: hardware.h:355
__REG HDMA2_REG
Definition: hardware.h:357
__REG HDMA3_REG
Definition: hardware.h:359
__REG HDMA4_REG
Definition: hardware.h:361
__REG HDMA5_REG
Definition: hardware.h:363
__REG IE_REG
Definition: hardware.h:402
__REG IF_REG
Definition: hardware.h:104
__REG KEY1_REG
Definition: hardware.h:325
__REG LCDC_REG
Definition: hardware.h:182
__REG LYC_REG
Definition: hardware.h:311
__REG LY_REG
Definition: hardware.h:309
__REG NR10_REG
Definition: hardware.h:107
__REG NR11_REG
Definition: hardware.h:113
__REG NR12_REG
Definition: hardware.h:115
__REG NR13_REG
Definition: hardware.h:117
__REG NR14_REG
Definition: hardware.h:119
__REG NR21_REG
Definition: hardware.h:122
__REG NR22_REG
Definition: hardware.h:124
__REG NR23_REG
Definition: hardware.h:126
__REG NR24_REG
Definition: hardware.h:128
__REG NR30_REG
Definition: hardware.h:131
__REG NR31_REG
Definition: hardware.h:133
__REG NR32_REG
Definition: hardware.h:135
__REG NR33_REG
Definition: hardware.h:137
__REG NR34_REG
Definition: hardware.h:139
__REG NR41_REG
Definition: hardware.h:142
__REG NR42_REG
Definition: hardware.h:144
__REG NR43_REG
Definition: hardware.h:146
__REG NR44_REG
Definition: hardware.h:150
__REG NR50_REG
Definition: hardware.h:153
__REG NR51_REG
Definition: hardware.h:161
__REG NR52_REG
Definition: hardware.h:173
__REG OBP0_REG
Definition: hardware.h:317
__REG OBP1_REG
Definition: hardware.h:319
__REG OCPD_REG
Definition: hardware.h:390
__REG OCPS_REG
Definition: hardware.h:386
__REG P1_REG
Definition: hardware.h:57
__REG PCM12_REG
Definition: hardware.h:396
__REG PCM34_REG
Definition: hardware.h:399
__BYTE_REG PCM_SAMPLE[16]
Definition: hardware.h:180
__REG RP_REG
Definition: hardware.h:371
__REG SB_REG
Definition: hardware.h:71
__REG SCX_REG
Definition: hardware.h:307
__REG SCY_REG
Definition: hardware.h:305
__REG SC_REG
Definition: hardware.h:73
__REG STAT_REG
Definition: hardware.h:262
__REG SVBK_REG
Definition: hardware.h:392
__REG TAC_REG
Definition: hardware.h:94
__REG TIMA_REG
Definition: hardware.h:90
__REG TMA_REG
Definition: hardware.h:92
__REG VBK_REG
Definition: hardware.h:332
__REG WX_REG
Definition: hardware.h:323
__REG WY_REG
Definition: hardware.h:321
__BYTE_REG _AUD3WAVERAM[]
Definition: hardware.h:29
__BYTE_REG _HRAM[]
Definition: hardware.h:30
__BYTE_REG _IO[]
Definition: hardware.h:28
__BYTES _OAMRAM[]
Definition: hardware.h:27
__BYTES _RAM[]
Definition: hardware.h:25
__BYTES _RAMBANK[]
Definition: hardware.h:26
__BYTES _SCRN0[]
Definition: hardware.h:22
__BYTES _SCRN1[]
Definition: hardware.h:23
__BYTES _SRAM[]
Definition: hardware.h:24
__BYTES _VRAM[]
Definition: hardware.h:18
__BYTES _VRAM8000[]
Definition: hardware.h:19
__BYTES _VRAM8800[]
Definition: hardware.h:20
__BYTES _VRAM9000[]
Definition: hardware.h:21
#define __BYTES
Definition: hardware.h:12
#define __BYTE_REG
Definition: hardware.h:13
#define __REG
Definition: hardware.h:14
__BYTE_REG rMBC7_ACCEL_X_HI
Definition: hardware.h:46
__BYTE_REG rMBC7_ACCEL_X_LO
Definition: hardware.h:45
__BYTE_REG rMBC7_ACCEL_Y_HI
Definition: hardware.h:48
__BYTE_REG rMBC7_ACCEL_Y_LO
Definition: hardware.h:47
__BYTE_REG rMBC7_LATCH_1
Definition: hardware.h:43
__BYTE_REG rMBC7_LATCH_2
Definition: hardware.h:44
__BYTE_REG rMBC7_SRAM_ENABLE_1
Definition: hardware.h:41
__BYTE_REG rMBC7_SRAM_ENABLE_2
Definition: hardware.h:42
__BYTE_REG rRAMB
Definition: hardware.h:37
__BYTE_REG rRAMG
Definition: hardware.h:34
__BYTE_REG rROMB0
Definition: hardware.h:35
__BYTE_REG rROMB1
Definition: hardware.h:36