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