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