1 /** @file gb/hardware.h
2     Defines that let the GB's hardware registers be accessed
3     from C.  See the Pan doc for what to set them to.
4 */
5 #ifndef _HARDWARE_H
6 #define _HARDWARE_H
7 
8 #include <sys/types.h>
9 #include <sys/compiler.h>
10 
11 #ifndef __SDCC
12 __sfr __at 0x00 P1_REG		; /* Joystick: 1.1.P15.P14.P13.P12.P11.P10 */
13 __sfr __at 0x01 SB_REG		; /* Serial IO data buffer */
14 __sfr __at 0x02 SC_REG		; /* Serial IO control register */
15 __sfr __at 0x04 DIV_REG		; /* Divider register */
16 __sfr __at 0x05 TIMA_REG		; /* Timer counter */
17 __sfr __at 0x06 TMA_REG		; /* Timer modulo */
18 __sfr __at 0x07 TAC_REG		; /* Timer control */
19 __sfr __at 0x0f IF_REG		; /* Interrupt flags: 0.0.0.JOY.SIO.TIM.LCD.VBL */
20 __sfr __at 0x10 NR10_REG		; /* Sound register */
21 __sfr __at 0x11 NR11_REG		; /* Sound register */
22 __sfr __at 0x12 NR12_REG		; /* Sound register */
23 __sfr __at 0x13 NR13_REG		; /* Sound register */
24 __sfr __at 0x14 NR14_REG		; /* Sound register */
25 __sfr __at 0x16 NR21_REG		; /* Sound register */
26 __sfr __at 0x17 NR22_REG		; /* Sound register */
27 __sfr __at 0x18 NR23_REG		; /* Sound register */
28 __sfr __at 0x19 NR24_REG		; /* Sound register */
29 __sfr __at 0x1a NR30_REG		; /* Sound register */
30 __sfr __at 0x1b NR31_REG		; /* Sound register */
31 __sfr __at 0x1c NR32_REG		; /* Sound register */
32 __sfr __at 0x1d NR33_REG		; /* Sound register */
33 __sfr __at 0x1e NR34_REG		; /* Sound register */
34 __sfr __at 0x20 NR41_REG		; /* Sound register */
35 __sfr __at 0x21 NR42_REG		; /* Sound register */
36 __sfr __at 0x22 NR43_REG		; /* Sound register */
37 __sfr __at 0x23 NR44_REG		; /* Sound register */
38 __sfr __at 0x25 NR50_REG		; /* Sound register */
39 __sfr __at 0x25 NR51_REG		; /* Sound register */
40 __sfr __at 0x26 NR52_REG		; /* Sound register */
41 __sfr __at 0x40 LCDC_REG		; /* LCD control */
42 __sfr __at 0x41 STAT_REG		; /* LCD status */
43 __sfr __at 0x42 SCY_REG		; /* Scroll Y */
44 __sfr __at 0x43 SCX_REG		; /* Scroll X */
45 __sfr __at 0x44 LY_REG		; /* LCDC Y-coordinate */
46 __sfr __at 0x45 LYC_REG		; /* LY compare */
47 __sfr __at 0x46 DMA_REG		; /* DMA transfer */
48 __sfr __at 0x47 BGP_REG		; /* BG palette data */
49 __sfr __at 0x48 OBP0_REG		; /* OBJ palette 0 data */
50 __sfr __at 0x49 OBP1_REG		; /* OBJ palette 1 data */
51 __sfr __at 0x4a WY_REG		; /* Window Y coordinate */
52 __sfr __at 0x4b WX_REG		; /* Window X coordinate */
53 __sfr __at 0x4d KEY1_REG		; /* CPU speed */
54 __sfr __at 0x4f VBK_REG		; /* VRAM bank */
55 __sfr __at 0x51 HDMA1_REG		; /* DMA control 1 */
56 __sfr __at 0x52 HDMA2_REG		; /* DMA control 2 */
57 __sfr __at 0x53 HDMA3_REG		; /* DMA control 3 */
58 __sfr __at 0x54 HDMA4_REG		; /* DMA control 4 */
59 __sfr __at 0x55 HDMA5_REG		; /* DMA control 5 */
60 __sfr __at 0x56 RP_REG		; /* IR port */
61 __sfr __at 0x68 BCPS_REG		; /* BG color palette specification */
62 __sfr __at 0x69 BCPD_REG		; /* BG color palette data */
63 __sfr __at 0x6a OCPS_REG		; /* OBJ color palette specification */
64 __sfr __at 0x6b OCPD_REG		; /* OBJ color palette data */
65 __sfr __at 0x70 SVBK_REG		; /* WRAM bank */
66 __sfr __at 0xff IE_REG		; /* Interrupt enable */
67 
68 #else
69 
70 #define __REG	volatile uint8_t *
71 
72 #define P1_REG		(*(__REG)0xFF00)	/* Joystick: 1.1.P15.P14.P13.P12.P11.P10 */
73 #define SB_REG		(*(__REG)0xFF01)	/* Serial IO data buffer */
74 #define SC_REG		(*(__REG)0xFF02)	/* Serial IO control register */
75 #define DIV_REG		(*(__REG)0xFF04)	/* Divider register */
76 #define TIMA_REG	(*(__REG)0xFF05)	/* Timer counter */
77 #define TMA_REG		(*(__REG)0xFF06)	/* Timer modulo */
78 #define TAC_REG		(*(__REG)0xFF07)	/* Timer control */
79 #define IF_REG		(*(__REG)0xFF0F)	/* Interrupt flags: 0.0.0.JOY.SIO.TIM.LCD.VBL */
80 #define NR10_REG	(*(__REG)0xFF10)	/* Sound register */
81 #define NR11_REG	(*(__REG)0xFF11)	/* Sound register */
82 #define NR12_REG	(*(__REG)0xFF12)	/* Sound register */
83 #define NR13_REG	(*(__REG)0xFF13)	/* Sound register */
84 #define NR14_REG	(*(__REG)0xFF14)	/* Sound register */
85 #define NR21_REG	(*(__REG)0xFF16)	/* Sound register */
86 #define NR22_REG	(*(__REG)0xFF17)	/* Sound register */
87 #define NR23_REG	(*(__REG)0xFF18)	/* Sound register */
88 #define NR24_REG	(*(__REG)0xFF19)	/* Sound register */
89 #define NR30_REG	(*(__REG)0xFF1A)	/* Sound register */
90 #define NR31_REG	(*(__REG)0xFF1B)	/* Sound register */
91 #define NR32_REG	(*(__REG)0xFF1C)	/* Sound register */
92 #define NR33_REG	(*(__REG)0xFF1D)	/* Sound register */
93 #define NR34_REG	(*(__REG)0xFF1E)	/* Sound register */
94 #define NR41_REG	(*(__REG)0xFF20)	/* Sound register */
95 #define NR42_REG	(*(__REG)0xFF21)	/* Sound register */
96 #define NR43_REG	(*(__REG)0xFF22)	/* Sound register */
97 #define NR44_REG	(*(__REG)0xFF23)	/* Sound register */
98 #define NR50_REG	(*(__REG)0xFF24)	/* Sound register */
99 #define NR51_REG	(*(__REG)0xFF25)	/* Sound register */
100 #define NR52_REG	(*(__REG)0xFF26)	/* Sound register */
101 #define LCDC_REG	(*(__REG)0xFF40)	/* LCD control */
102 #define STAT_REG	(*(__REG)0xFF41)	/* LCD status */
103 #define SCY_REG		(*(__REG)0xFF42)	/* Scroll Y */
104 #define SCX_REG		(*(__REG)0xFF43)	/* Scroll X */
105 #define LY_REG		(*(__REG)0xFF44)	/* LCDC Y-coordinate */
106 #define LYC_REG		(*(__REG)0xFF45)	/* LY compare */
107 #define DMA_REG		(*(__REG)0xFF46)	/* DMA transfer */
108 #define BGP_REG		(*(__REG)0xFF47)	/* BG palette data */
109 #define OBP0_REG	(*(__REG)0xFF48)	/* OBJ palette 0 data */
110 #define OBP1_REG	(*(__REG)0xFF49)	/* OBJ palette 1 data */
111 #define WY_REG		(*(__REG)0xFF4A)	/* Window Y coordinate */
112 #define WX_REG		(*(__REG)0xFF4B)	/* Window X coordinate */
113 #define KEY1_REG	(*(__REG)0xFF4D)	/* CPU speed */
114 #define VBK_REG		(*(__REG)0xFF4F)	/* VRAM bank */
115 #define HDMA1_REG	(*(__REG)0xFF51)	/* DMA control 1 */
116 #define HDMA2_REG	(*(__REG)0xFF52)	/* DMA control 2 */
117 #define HDMA3_REG	(*(__REG)0xFF53)	/* DMA control 3 */
118 #define HDMA4_REG	(*(__REG)0xFF54)	/* DMA control 4 */
119 #define HDMA5_REG	(*(__REG)0xFF55)	/* DMA control 5 */
120 #define RP_REG		(*(__REG)0xFF56)	/* IR port */
121 #define BCPS_REG	(*(__REG)0xFF68)	/* BG color palette specification */
122 #define BCPD_REG	(*(__REG)0xFF69)	/* BG color palette data */
123 #define OCPS_REG	(*(__REG)0xFF6A)	/* OBJ color palette specification */
124 #define OCPD_REG	(*(__REG)0xFF6B)	/* OBJ color palette data */
125 #define SVBK_REG	(*(__REG)0xFF70)	/* WRAM bank */
126 #define IE_REG		(*(__REG)0xFFFF)	/* Interrupt enable */
127 
128 #endif
129 
130 
131 #endif /* _HARDWARE_H */
132