]> git.lizzy.rs Git - plan9front.git/blob - sys/src/games/gb/dat.h
games/gb: fix mbc5 register addressing (fixes warioland3 gamebreaking bug)
[plan9front.git] / sys / src / games / gb / dat.h
1 typedef struct Event Event;
2 typedef struct MBC3Timer MBC3Timer;
3
4 extern u16int curpc;
5
6 extern uchar *rom, *back, reg[256], oam[256];
7 extern MBC3Timer timer;
8 extern uchar vram[16384];
9 extern int nrom, nback, nbackbank;
10 extern u32int pal[64];
11 extern s8int dma;
12 extern u32int divclock;
13
14 extern Event *elist;
15 extern ulong clock;
16
17 extern u8int ppuy, ppustate;
18
19 extern u8int apustatus;
20
21 extern u8int mode;
22 extern u8int mbc, feat;
23
24 enum {
25         JOYP = 0x00,
26         SB = 0x01,
27         SC = 0x02,
28         DIV = 0x04,
29         TIMA = 0x05,
30         TMA = 0x06,
31         TAC = 0x07,
32         IF = 0x0F,
33         NR10 = 0x10,
34         NR11 = 0x11,
35         NR12 = 0x12,
36         NR13 = 0x13,
37         NR14 = 0x14,
38         NR21 = 0x16,
39         NR22 = 0x17,
40         NR23 = 0x18,
41         NR24 = 0x19,
42         NR30 = 0x1A,
43         NR31 = 0x1B,
44         NR32 = 0x1C,
45         NR33 = 0x1D,
46         NR34 = 0x1E,
47         NR41 = 0x20,
48         NR42 = 0x21,
49         NR43 = 0x22,
50         NR44 = 0x23,
51         NR50 = 0x24,
52         NR51 = 0x25,
53         NR52 = 0x26,
54         WAVE = 0x30,
55         LCDC = 0x40,
56         STAT = 0x41,
57         SCY = 0x42,
58         SCX = 0x43,
59         LY = 0x44,
60         LYC = 0x45,
61         DMA = 0x46,
62         BGP = 0x47,
63         OBP0 = 0x48,
64         OBP1 = 0x49,
65         WY = 0x4A,
66         WX = 0x4B,
67         KEY1 = 0x4D,
68         VBK = 0x4F,
69         RP = 0x56,
70         HDMASH = 0x51,
71         HDMASL = 0x52,
72         HDMADH = 0x53,
73         HDMADL = 0x54,
74         HDMAC = 0x55,
75         
76         BCPS = 0x68,
77         BCPD = 0x69,
78         OCPS = 0x6A,
79         OCPD = 0x6B,
80         SVBK = 0x70,
81         IE = 0xFF
82 };
83
84 enum {
85         LCDEN = 0x80,
86         WINMAP = 0x40,
87         WINEN = 0x20,
88         BGTILE = 0x10,
89         BGMAP = 0x08,
90         SPR16 = 0x04,
91         SPREN = 0x02,
92         BGEN = 0x01,
93         BGPRI = 0x01,
94         
95         IRQLYC = 0x40,
96         IRQM2 = 0x20,
97         IRQM1 = 0x10,
98         IRQM0 = 0x08,
99                 
100         IRQVBL = 1,
101         IRQLCDS = 2,
102         IRQTIM = 4,
103         IRQSER = 8,
104         IRQJOY = 16,
105 };
106
107 enum {
108         CGB = 1,
109         COL = 2,
110         TURBO = 4,
111         FORCEDMG = 8,
112
113         FEATRAM = 1,
114         FEATBAT = 2,
115         FEATTIM = 4,
116         
117         INIT = -1,
118         SAVE = -2,
119         RSTR = -3,
120         READ = -4,
121 };
122
123 enum {
124         TIMERSIZ = 18,
125         PICW = 160,
126         PICH = 144,
127         FREQ = 1<<23
128 };
129
130 struct Event {
131         int time;
132         void (*f)(void *);
133         Event *next;
134         void *aux;
135 };
136 extern Event *elist;
137
138 struct MBC3Timer {
139         vlong ns;
140         u8int sec, min, hr, dl, dh;
141 };
142
143 typedef struct Var Var;
144
145 struct Var {
146         void *a;
147         int s, n;
148 };
149 #define VAR(a) {&a, sizeof(a), 1}
150 #define ARR(a) {a, sizeof(*a), nelem(a)}
151 enum { NEVENT = 8 };
152 extern int (*mapper)(int, int);
153 extern u32int moncols[4];