1 2 /* 3 4 gameboy.h 5 6 */ 7 8 #include "globals.h" 9 10 #define GB_ROMBANKSIZE 0x4000 /* size of a rom bank */ 11 #define GB_MAXROMBANKCOUNT 0x1000 /* max count of rom banks (4 MB!) */ 12 #define GB_MAXRAMBANKCOUNT 0x04 /* max count of ram banks (32 kB) */ 13 #define GB_VRAMSIZE 0x2000 /* size of the video ram */ 14 #define GB_RAMBANKSIZE 0x2000 /* size of a ram bank */ 15 #define GB_WORKBANKCOUNT 8 /* gbc work ram bank count */ 16 #define GB_OAMSIZE 0x100 /* size of sprite attr mem 17 (only 0xA0 used!) */ 18 #define GB_IOAREASIZE 0x0100 /* io ports and free ram */ 19 #define GB_WORKRAMBANKSIZE 0x1000 /* size of internal ram (w/o echo) */ 20 #define GB_LCDXSCREENSIZE 160 /* lcd x size */ 21 #define GB_LCDYSCREENSIZE 144 /* lcd y size */ 22 #define GB_XBUFFERSIZE 184 /* buffer for scanlines 23 (+24 worstcase?) */ 24 #define GB_SPRITECOUNT 40 /* maximal sprite amount */ 25 #define GB_DIVLOAD 256 /* 16384 Hz */ 26 #define GB_JOYCLKS 65111 /* joypad update ticks */ 27 #define GB_VBLANKDELAYCLKS 24 /* v-blank delay clks */ 28 29 typedef uchar *rombank; 30 typedef uchar *rambank; 31 32 extern int ABORT_EMULATION; 33 extern int snd_updateclks; 34 extern int soundclks; 35 extern int dialoglink; 36 37 extern uchar *vram[2]; 38 extern uchar *io; 39 extern char *lcdbuffer; 40 41 extern uint rombanknr; 42 extern uchar rambanknr; 43 extern uchar newjoypadstate; 44 45 /* IO registers (0xFFnn) */ 46 #define P1 io[0x00] 47 #define SB io[0x01] 48 #define SC io[0x02] 49 #define DIV io[0x04] 50 #define TIMA io[0x05] 51 #define TMA io[0x06] 52 #define TAC io[0x07] 53 #define IF io[0x0F] 54 #define LCDC io[0x40] 55 #define STAT io[0x41] 56 #define SCY io[0x42] 57 #define SCX io[0x43] 58 #define LY io[0x44] 59 #define LYC io[0x45] 60 #define DMA io[0x46] 61 #define BGP io[0x47] 62 #define OBP0 io[0x48] 63 #define OBP1 io[0x49] 64 #define WY io[0x4A] 65 #define WX io[0x4B] 66 #define IE io[0xFF] 67 68 69 /* new CGB registers */ 70 #define KEY1 io[0x4D] 71 #define VBK io[0x4F] 72 #define HDMA1 io[0x51] 73 #define HDMA2 io[0x52] 74 #define HDMA3 io[0x53] 75 #define HDMA4 io[0x54] 76 #define HDMA5 io[0x55] 77 #define RP io[0x56] 78 #define BCPS io[0x68] 79 #define BCPD io[0x69] 80 #define OCPS io[0x6A] 81 #define OCPD io[0x6B] 82 #define SVBK io[0x70] 83 84 /* sound registers */ 85 #define NR10 io[0x10] 86 #define NR11 io[0x11] 87 #define NR12 io[0x12] 88 #define NR13 io[0x13] 89 #define NR14 io[0x14] 90 #define NR21 io[0x16] 91 #define NR22 io[0x17] 92 #define NR23 io[0x18] 93 #define NR24 io[0x19] 94 #define NR30 io[0x1A] 95 #define NR31 io[0x1B] 96 #define NR32 io[0x1C] 97 #define NR33 io[0x1D] 98 #define NR34 io[0x1E] 99 #define NR41 io[0x20] 100 #define NR42 io[0x21] 101 #define NR43 io[0x22] 102 #define NR44 io[0x23] 103 104 #define NR50 io[0x24] 105 #define NR51 io[0x25] 106 #define NR52 io[0x26] 107 108 109 /* externals */ 110 111 uchar GetByteAt(uint); 112 uint GetWordAt(uint); 113 void SetByteAt(uint,uchar); 114 void SetWordAt(uint,uint); 115 void gameboyspecifics(void); 116 void savestate(void); 117 int initcart(char *); 118 void tidyup(void); 119