all repos — mgba @ 498aa541fc660c8755cda99cf8889171b3bd5381

mGBA Game Boy Advance Emulator

include/mgba/internal/ds/io.h (view raw)

  1/* Copyright (c) 2013-2017 Jeffrey Pfau
  2 *
  3 * This Source Code Form is subject to the terms of the Mozilla Public
  4 * License, v. 2.0. If a copy of the MPL was not distributed with this
  5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  6#ifndef DS_IO_H
  7#define DS_IO_H
  8
  9#include <mgba-util/common.h>
 10
 11CXX_GUARD_START
 12
 13#include <mgba/core/log.h>
 14
 15enum DSIORegisters {
 16	// Video
 17	DS_REG_DISPSTAT = 0x004,
 18	DS_REG_VCOUNT = 0x006,
 19
 20	// DMA
 21	DS_REG_DMA0SAD_LO = 0x0B0,
 22	DS_REG_DMA0SAD_HI = 0x0B2,
 23	DS_REG_DMA0DAD_LO = 0x0B4,
 24	DS_REG_DMA0DAD_HI = 0x0B6,
 25	DS_REG_DMA0CNT_LO = 0x0B8,
 26	DS_REG_DMA0CNT_HI = 0x0BA,
 27	DS_REG_DMA1SAD_LO = 0x0BC,
 28	DS_REG_DMA1SAD_HI = 0x0BE,
 29	DS_REG_DMA1DAD_LO = 0x0C0,
 30	DS_REG_DMA1DAD_HI = 0x0C2,
 31	DS_REG_DMA1CNT_LO = 0x0C4,
 32	DS_REG_DMA1CNT_HI = 0x0C6,
 33	DS_REG_DMA2SAD_LO = 0x0C8,
 34	DS_REG_DMA2SAD_HI = 0x0CA,
 35	DS_REG_DMA2DAD_LO = 0x0CC,
 36	DS_REG_DMA2DAD_HI = 0x0CE,
 37	DS_REG_DMA2CNT_LO = 0x0D0,
 38	DS_REG_DMA2CNT_HI = 0x0D2,
 39	DS_REG_DMA3SAD_LO = 0x0D4,
 40	DS_REG_DMA3SAD_HI = 0x0D6,
 41	DS_REG_DMA3DAD_LO = 0x0D8,
 42	DS_REG_DMA3DAD_HI = 0x0DA,
 43	DS_REG_DMA3CNT_LO = 0x0DC,
 44	DS_REG_DMA3CNT_HI = 0x0DE,
 45	DS_REG_DMA0FILL_LO = 0x0E0,
 46	DS_REG_DMA0FILL_HI = 0x0E2,
 47	DS_REG_DMA1FILL_LO = 0x0E4,
 48	DS_REG_DMA1FILL_HI = 0x0E6,
 49	DS_REG_DMA2FILL_LO = 0x0E8,
 50	DS_REG_DMA2FILL_HI = 0x0EA,
 51	DS_REG_DMA3FILL_LO = 0x0EC,
 52	DS_REG_DMA3FILL_HI = 0x0EE,
 53
 54	// Timers
 55	DS_REG_TM0CNT_LO = 0x100,
 56	DS_REG_TM0CNT_HI = 0x102,
 57	DS_REG_TM1CNT_LO = 0x104,
 58	DS_REG_TM1CNT_HI = 0x106,
 59	DS_REG_TM2CNT_LO = 0x108,
 60	DS_REG_TM2CNT_HI = 0x10A,
 61	DS_REG_TM3CNT_LO = 0x10C,
 62	DS_REG_TM3CNT_HI = 0x10E,
 63
 64	// Keypad
 65	DS_REG_KEYINPUT = 0x130,
 66	DS_REG_KEYCNT = 0x132,
 67
 68	// IPC
 69	DS_REG_IPCSYNC = 0x180,
 70	DS_REG_IPCFIFOCNT = 0x184,
 71	DS_REG_IPCFIFOSEND_LO = 0x188,
 72	DS_REG_IPCFIFOSEND_HI = 0x18A,
 73	DS_REG_IPCFIFORECV_LO = 0x100000,
 74	DS_REG_IPCFIFORECV_HI = 0x100002,
 75
 76	// Game card
 77	DS_REG_AUXSPICNT = 0x1A0,
 78	DS_REG_AUXSPIDATA = 0x1A2,
 79	DS_REG_ROMCNT_LO = 0x1A4,
 80	DS_REG_ROMCNT_HI = 0x1A6,
 81	DS_REG_ROMCMD_0 = 0x1A8,
 82	DS_REG_ROMCMD_1 = 0x1A9,
 83	DS_REG_ROMCMD_2 = 0x1AA,
 84	DS_REG_ROMCMD_3 = 0x1AB,
 85	DS_REG_ROMCMD_4 = 0x1AC,
 86	DS_REG_ROMCMD_5 = 0x1AD,
 87	DS_REG_ROMCMD_6 = 0x1AE,
 88	DS_REG_ROMCMD_7 = 0x1AF,
 89	DS_REG_ROMDATA_0 = 0x100010,
 90	DS_REG_ROMDATA_1 = 0x100011,
 91	DS_REG_ROMDATA_2 = 0x100012,
 92	DS_REG_ROMDATA_3 = 0x100013,
 93
 94	// Interrupts
 95	DS_REG_IME = 0x208,
 96	DS_REG_IE_LO = 0x210,
 97	DS_REG_IE_HI = 0x212,
 98	DS_REG_IF_LO = 0x214,
 99	DS_REG_IF_HI = 0x216,
100
101	DS_REG_POSTFLG = 0x300,
102};
103
104enum DS7IORegisters {
105	// Keypad
106	DS7_REG_EXTKEYIN = 0x136,
107	DS7_REG_RTC = 0x138,
108
109	// SPI
110	DS7_REG_SPICNT = 0x1C0,
111	DS7_REG_SPIDATA = 0x1C2,
112
113	// Etc
114	DS7_REG_EXMEMSTAT = 0x204,
115
116	// Memory control
117	DS7_REG_VRAMSTAT = 0x240,
118	DS7_REG_WRAMSTAT = 0x241,
119	DS7_REG_HALTCNT = 0x301,
120	DS7_REG_POWCNT2 = 0x304,
121	DS7_REG_BIOSPROT_LO = 0x308,
122	DS7_REG_BIOSPROT_HI = 0x30A,
123
124	// Audio
125	DS7_REG_SOUND0CNT_LO = 0x400,
126	DS7_REG_SOUND0CNT_HI = 0x402,
127	DS7_REG_SOUND0SAD_LO = 0x404,
128	DS7_REG_SOUND0SAD_HI = 0x406,
129	DS7_REG_SOUND0TMR    = 0x408,
130	DS7_REG_SOUND0PNT    = 0x40A,
131	DS7_REG_SOUND0LEN_LO = 0x40C,
132	DS7_REG_SOUND0LEN_HI = 0x40E,
133	DS7_REG_SOUND1CNT_LO = 0x410,
134	DS7_REG_SOUND1CNT_HI = 0x412,
135	DS7_REG_SOUND1SAD_LO = 0x414,
136	DS7_REG_SOUND1SAD_HI = 0x416,
137	DS7_REG_SOUND1TMR    = 0x418,
138	DS7_REG_SOUND1PNT    = 0x41A,
139	DS7_REG_SOUND1LEN_LO = 0x41C,
140	DS7_REG_SOUND1LEN_HI = 0x41E,
141	DS7_REG_SOUND2CNT_LO = 0x420,
142	DS7_REG_SOUND2CNT_HI = 0x422,
143	DS7_REG_SOUND2SAD_LO = 0x424,
144	DS7_REG_SOUND2SAD_HI = 0x426,
145	DS7_REG_SOUND2TMR    = 0x428,
146	DS7_REG_SOUND2PNT    = 0x42A,
147	DS7_REG_SOUND2LEN_LO = 0x42C,
148	DS7_REG_SOUND2LEN_HI = 0x42E,
149	DS7_REG_SOUND3CNT_LO = 0x430,
150	DS7_REG_SOUND3CNT_HI = 0x432,
151	DS7_REG_SOUND3SAD_LO = 0x434,
152	DS7_REG_SOUND3SAD_HI = 0x436,
153	DS7_REG_SOUND3TMR    = 0x438,
154	DS7_REG_SOUND3PNT    = 0x43A,
155	DS7_REG_SOUND3LEN_LO = 0x43C,
156	DS7_REG_SOUND3LEN_HI = 0x43E,
157	DS7_REG_SOUND4CNT_LO = 0x440,
158	DS7_REG_SOUND4CNT_HI = 0x442,
159	DS7_REG_SOUND4SAD_LO = 0x444,
160	DS7_REG_SOUND4SAD_HI = 0x446,
161	DS7_REG_SOUND4TMR    = 0x448,
162	DS7_REG_SOUND4PNT    = 0x44A,
163	DS7_REG_SOUND4LEN_LO = 0x44C,
164	DS7_REG_SOUND4LEN_HI = 0x44E,
165	DS7_REG_SOUND5CNT_LO = 0x450,
166	DS7_REG_SOUND5CNT_HI = 0x452,
167	DS7_REG_SOUND5SAD_LO = 0x454,
168	DS7_REG_SOUND5SAD_HI = 0x456,
169	DS7_REG_SOUND5TMR    = 0x458,
170	DS7_REG_SOUND5PNT    = 0x45A,
171	DS7_REG_SOUND5LEN_LO = 0x45C,
172	DS7_REG_SOUND5LEN_HI = 0x45E,
173	DS7_REG_SOUND6CNT_LO = 0x460,
174	DS7_REG_SOUND6CNT_HI = 0x462,
175	DS7_REG_SOUND6SAD_LO = 0x464,
176	DS7_REG_SOUND6SAD_HI = 0x466,
177	DS7_REG_SOUND6TMR    = 0x468,
178	DS7_REG_SOUND6PNT    = 0x46A,
179	DS7_REG_SOUND6LEN_LO = 0x46C,
180	DS7_REG_SOUND6LEN_HI = 0x46E,
181	DS7_REG_SOUND7CNT_LO = 0x470,
182	DS7_REG_SOUND7CNT_HI = 0x472,
183	DS7_REG_SOUND7SAD_LO = 0x474,
184	DS7_REG_SOUND7SAD_HI = 0x476,
185	DS7_REG_SOUND7TMR    = 0x478,
186	DS7_REG_SOUND7PNT    = 0x47A,
187	DS7_REG_SOUND7LEN_LO = 0x47C,
188	DS7_REG_SOUND7LEN_HI = 0x47E,
189	DS7_REG_SOUND8CNT_LO = 0x480,
190	DS7_REG_SOUND8CNT_HI = 0x482,
191	DS7_REG_SOUND8SAD_LO = 0x484,
192	DS7_REG_SOUND8SAD_HI = 0x486,
193	DS7_REG_SOUND8TMR    = 0x488,
194	DS7_REG_SOUND8PNT    = 0x48A,
195	DS7_REG_SOUND8LEN_LO = 0x48C,
196	DS7_REG_SOUND8LEN_HI = 0x48E,
197	DS7_REG_SOUND9CNT_LO = 0x490,
198	DS7_REG_SOUND9CNT_HI = 0x492,
199	DS7_REG_SOUND9SAD_LO = 0x494,
200	DS7_REG_SOUND9SAD_HI = 0x496,
201	DS7_REG_SOUND9TMR    = 0x498,
202	DS7_REG_SOUND9PNT    = 0x49A,
203	DS7_REG_SOUND9LEN_LO = 0x49C,
204	DS7_REG_SOUND9LEN_HI = 0x49E,
205	DS7_REG_SOUNDACNT_LO = 0x4A0,
206	DS7_REG_SOUNDACNT_HI = 0x4A2,
207	DS7_REG_SOUNDASAD_LO = 0x4A4,
208	DS7_REG_SOUNDASAD_HI = 0x4A6,
209	DS7_REG_SOUNDATMR    = 0x4A8,
210	DS7_REG_SOUNDAPNT    = 0x4AA,
211	DS7_REG_SOUNDALEN_LO = 0x4AC,
212	DS7_REG_SOUNDALEN_HI = 0x4AE,
213	DS7_REG_SOUNDBCNT_LO = 0x4B0,
214	DS7_REG_SOUNDBCNT_HI = 0x4B2,
215	DS7_REG_SOUNDBSAD_LO = 0x4B4,
216	DS7_REG_SOUNDBSAD_HI = 0x4B6,
217	DS7_REG_SOUNDBTMR    = 0x4B8,
218	DS7_REG_SOUNDBPNT    = 0x4BA,
219	DS7_REG_SOUNDBLEN_LO = 0x4BC,
220	DS7_REG_SOUNDBLEN_HI = 0x4BE,
221	DS7_REG_SOUNDCCNT_LO = 0x4C0,
222	DS7_REG_SOUNDCCNT_HI = 0x4C2,
223	DS7_REG_SOUNDCSAD_LO = 0x4C4,
224	DS7_REG_SOUNDCSAD_HI = 0x4C6,
225	DS7_REG_SOUNDCTMR    = 0x4C8,
226	DS7_REG_SOUNDCPNT    = 0x4CA,
227	DS7_REG_SOUNDCLEN_LO = 0x4CC,
228	DS7_REG_SOUNDCLEN_HI = 0x4CE,
229	DS7_REG_SOUNDDCNT_LO = 0x4D0,
230	DS7_REG_SOUNDDCNT_HI = 0x4D2,
231	DS7_REG_SOUNDDSAD_LO = 0x4D4,
232	DS7_REG_SOUNDDSAD_HI = 0x4D6,
233	DS7_REG_SOUNDDTMR    = 0x4D8,
234	DS7_REG_SOUNDDPNT    = 0x4DA,
235	DS7_REG_SOUNDDLEN_LO = 0x4DC,
236	DS7_REG_SOUNDDLEN_HI = 0x4DE,
237	DS7_REG_SOUNDECNT_LO = 0x4E0,
238	DS7_REG_SOUNDECNT_HI = 0x4E2,
239	DS7_REG_SOUNDESAD_LO = 0x4E4,
240	DS7_REG_SOUNDESAD_HI = 0x4E6,
241	DS7_REG_SOUNDETMR    = 0x4E8,
242	DS7_REG_SOUNDEPNT    = 0x4EA,
243	DS7_REG_SOUNDELEN_LO = 0x4EC,
244	DS7_REG_SOUNDELEN_HI = 0x4EE,
245	DS7_REG_SOUNDFCNT_LO = 0x4F0,
246	DS7_REG_SOUNDFCNT_HI = 0x4F2,
247	DS7_REG_SOUNDFSAD_LO = 0x4F4,
248	DS7_REG_SOUNDFSAD_HI = 0x4F6,
249	DS7_REG_SOUNDFTMR    = 0x4F8,
250	DS7_REG_SOUNDFPNT    = 0x4FA,
251	DS7_REG_SOUNDFLEN_LO = 0x4FC,
252	DS7_REG_SOUNDFLEN_HI = 0x4FE,
253	DS7_REG_SOUNDCNT = 0x500,
254	DS7_REG_SOUNDBIAS = 0x504,
255
256	DS7_REG_MAX = 0x51E,
257
258	DS7_IO_BASE_WIFI = 0x800000,
259	DS7_IO_END_WIFI = 0x810000,
260};
261
262enum DS9IORegisters {
263	// Video
264	DS9_REG_A_DISPCNT_LO = 0x000,
265	DS9_REG_A_DISPCNT_HI = 0x002,
266	DS9_REG_A_BG0CNT = 0x008,
267	DS9_REG_A_BG1CNT = 0x00A,
268	DS9_REG_A_BG2CNT = 0x00C,
269	DS9_REG_A_BG3CNT = 0x00E,
270	DS9_REG_A_BG0HOFS = 0x010,
271	DS9_REG_A_BG0VOFS = 0x012,
272	DS9_REG_A_BG1HOFS = 0x014,
273	DS9_REG_A_BG1VOFS = 0x016,
274	DS9_REG_A_BG2HOFS = 0x018,
275	DS9_REG_A_BG2VOFS = 0x01A,
276	DS9_REG_A_BG3HOFS = 0x01C,
277	DS9_REG_A_BG3VOFS = 0x01E,
278	DS9_REG_A_BG2PA = 0x020,
279	DS9_REG_A_BG2PB = 0x022,
280	DS9_REG_A_BG2PC = 0x024,
281	DS9_REG_A_BG2PD = 0x026,
282	DS9_REG_A_BG2X_LO = 0x028,
283	DS9_REG_A_BG2X_HI = 0x02A,
284	DS9_REG_A_BG2Y_LO = 0x02C,
285	DS9_REG_A_BG2Y_HI = 0x02E,
286	DS9_REG_A_BG3PA = 0x030,
287	DS9_REG_A_BG3PB = 0x032,
288	DS9_REG_A_BG3PC = 0x034,
289	DS9_REG_A_BG3PD = 0x036,
290	DS9_REG_A_BG3X_LO = 0x038,
291	DS9_REG_A_BG3X_HI = 0x03A,
292	DS9_REG_A_BG3Y_LO = 0x03C,
293	DS9_REG_A_BG3Y_HI = 0x03E,
294	DS9_REG_A_WIN0H = 0x040,
295	DS9_REG_A_WIN1H = 0x042,
296	DS9_REG_A_WIN0V = 0x044,
297	DS9_REG_A_WIN1V = 0x046,
298	DS9_REG_A_WININ = 0x048,
299	DS9_REG_A_WINOUT = 0x04A,
300	DS9_REG_A_MOSAIC = 0x04C,
301	DS9_REG_A_BLDCNT = 0x050,
302	DS9_REG_A_BLDALPHA = 0x052,
303	DS9_REG_A_BLDY = 0x054,
304	DS9_REG_DISPCAPCNT_LO = 0x064,
305	DS9_REG_DISPCAPCNT_HI = 0x066,
306	DS9_REG_DISP_MMEM_FIFO_LO = 0x068,
307	DS9_REG_DISP_MMEM_FIFO_HI = 0x06A,
308	DS9_REG_A_MASTER_BRIGHT = 0x06C,
309
310	DS9_REG_B_DISPCNT_LO = 0x1000,
311	DS9_REG_B_DISPCNT_HI = 0x1002,
312	DS9_REG_B_BG0CNT = 0x1008,
313	DS9_REG_B_BG1CNT = 0x100A,
314	DS9_REG_B_BG2CNT = 0x100C,
315	DS9_REG_B_BG3CNT = 0x100E,
316	DS9_REG_B_BG0HOFS = 0x1010,
317	DS9_REG_B_BG0VOFS = 0x1012,
318	DS9_REG_B_BG1HOFS = 0x1014,
319	DS9_REG_B_BG1VOFS = 0x1016,
320	DS9_REG_B_BG2HOFS = 0x1018,
321	DS9_REG_B_BG2VOFS = 0x101A,
322	DS9_REG_B_BG3HOFS = 0x101C,
323	DS9_REG_B_BG3VOFS = 0x101E,
324	DS9_REG_B_BG2PA = 0x1020,
325	DS9_REG_B_BG2PB = 0x1022,
326	DS9_REG_B_BG2PC = 0x1024,
327	DS9_REG_B_BG2PD = 0x1026,
328	DS9_REG_B_BG2X_LO = 0x1028,
329	DS9_REG_B_BG2X_HI = 0x102A,
330	DS9_REG_B_BG2Y_LO = 0x102C,
331	DS9_REG_B_BG2Y_HI = 0x102E,
332	DS9_REG_B_BG3PA = 0x1030,
333	DS9_REG_B_BG3PB = 0x1032,
334	DS9_REG_B_BG3PC = 0x1034,
335	DS9_REG_B_BG3PD = 0x1036,
336	DS9_REG_B_BG3X_LO = 0x1038,
337	DS9_REG_B_BG3X_HI = 0x103A,
338	DS9_REG_B_BG3Y_LO = 0x103C,
339	DS9_REG_B_BG3Y_HI = 0x103E,
340	DS9_REG_B_WIN0H = 0x1040,
341	DS9_REG_B_WIN1H = 0x1042,
342	DS9_REG_B_WIN0V = 0x1044,
343	DS9_REG_B_WIN1V = 0x1046,
344	DS9_REG_B_WININ = 0x1048,
345	DS9_REG_B_WINOUT = 0x104A,
346	DS9_REG_B_MOSAIC = 0x104C,
347	DS9_REG_B_BLDCNT = 0x1050,
348	DS9_REG_B_BLDALPHA = 0x1052,
349	DS9_REG_B_BLDY = 0x1054,
350	DS9_REG_B_MASTER_BRIGHT = 0x106C,
351
352	// Etc
353	DS9_REG_EXMEMCNT = 0x204,
354
355	// Memory control
356	DS9_REG_VRAMCNT_A = 0x240,
357	DS9_REG_VRAMCNT_B = 0x241,
358	DS9_REG_VRAMCNT_C = 0x242,
359	DS9_REG_VRAMCNT_D = 0x243,
360	DS9_REG_VRAMCNT_E = 0x244,
361	DS9_REG_VRAMCNT_F = 0x245,
362	DS9_REG_VRAMCNT_G = 0x246,
363	DS9_REG_WRAMCNT = 0x247,
364	DS9_REG_VRAMCNT_H = 0x248,
365	DS9_REG_VRAMCNT_I = 0x249,
366
367	// Math
368	DS9_REG_DIVCNT = 0x280,
369	DS9_REG_DIV_NUMER_0 = 0x290,
370	DS9_REG_DIV_NUMER_1 = 0x292,
371	DS9_REG_DIV_NUMER_2 = 0x294,
372	DS9_REG_DIV_NUMER_3 = 0x296,
373	DS9_REG_DIV_DENOM_0 = 0x298,
374	DS9_REG_DIV_DENOM_1 = 0x29A,
375	DS9_REG_DIV_DENOM_2 = 0x29C,
376	DS9_REG_DIV_DENOM_3 = 0x29E,
377	DS9_REG_DIV_RESULT_0 = 0x2A0,
378	DS9_REG_DIV_RESULT_1 = 0x2A2,
379	DS9_REG_DIV_RESULT_2 = 0x2A4,
380	DS9_REG_DIV_RESULT_3 = 0x2A6,
381	DS9_REG_DIVREM_RESULT_0 = 0x2A8,
382	DS9_REG_DIVREM_RESULT_1 = 0x2AA,
383	DS9_REG_DIVREM_RESULT_2 = 0x2AC,
384	DS9_REG_DIVREM_RESULT_3 = 0x2AE,
385	DS9_REG_SQRTCNT = 0x2B0,
386	DS9_REG_SQRT_RESULT_LO = 0x2B4,
387	DS9_REG_SQRT_RESULT_HI = 0x2B6,
388	DS9_REG_SQRT_PARAM_0 = 0x2B8,
389	DS9_REG_SQRT_PARAM_1 = 0x2BA,
390	DS9_REG_SQRT_PARAM_2 = 0x2BC,
391	DS9_REG_SQRT_PARAM_3 = 0x2BE,
392
393	// GX
394	DS9_REG_DISP3DCNT = 0x060,
395	DS9_REG_RDLINES_COUNT = 0x320,
396	DS9_REG_EDGE_COLOR_0 = 0x330,
397	DS9_REG_EDGE_COLOR_1 = 0x332,
398	DS9_REG_EDGE_COLOR_2 = 0x334,
399	DS9_REG_EDGE_COLOR_3 = 0x336,
400	DS9_REG_EDGE_COLOR_4 = 0x338,
401	DS9_REG_EDGE_COLOR_5 = 0x33A,
402	DS9_REG_EDGE_COLOR_6 = 0x33C,
403	DS9_REG_EDGE_COLOR_7 = 0x33E,
404	DS9_REG_ALPHA_TEST_REF = 0x340,
405	DS9_REG_CLEAR_COLOR_LO = 0x350,
406	DS9_REG_CLEAR_COLOR_HI = 0x352,
407	DS9_REG_CLEAR_DEPTH = 0x354,
408	DS9_REG_CLRIMAGE_OFFSET = 0x356,
409	DS9_REG_FOG_COLOR_LO = 0x358,
410	DS9_REG_FOG_COLOR_HI = 0x35A,
411	DS9_REG_FOG_OFFSET = 0x35C,
412	DS9_REG_FOG_TABLE_0 = 0x360,
413	DS9_REG_FOG_TABLE_1 = 0x362,
414	DS9_REG_FOG_TABLE_2 = 0x364,
415	DS9_REG_FOG_TABLE_3 = 0x366,
416	DS9_REG_FOG_TABLE_4 = 0x368,
417	DS9_REG_FOG_TABLE_5 = 0x36A,
418	DS9_REG_FOG_TABLE_6 = 0x36C,
419	DS9_REG_FOG_TABLE_7 = 0x36E,
420	DS9_REG_FOG_TABLE_8 = 0x370,
421	DS9_REG_FOG_TABLE_9 = 0x372,
422	DS9_REG_FOG_TABLE_A = 0x374,
423	DS9_REG_FOG_TABLE_B = 0x376,
424	DS9_REG_FOG_TABLE_C = 0x378,
425	DS9_REG_FOG_TABLE_D = 0x37A,
426	DS9_REG_FOG_TABLE_E = 0x37C,
427	DS9_REG_FOG_TABLE_F = 0x37E,
428	DS9_REG_TOON_TABLE_00 = 0x380,
429	DS9_REG_TOON_TABLE_01 = 0x382,
430	DS9_REG_TOON_TABLE_02 = 0x384,
431	DS9_REG_TOON_TABLE_03 = 0x386,
432	DS9_REG_TOON_TABLE_04 = 0x388,
433	DS9_REG_TOON_TABLE_05 = 0x38A,
434	DS9_REG_TOON_TABLE_06 = 0x38C,
435	DS9_REG_TOON_TABLE_07 = 0x38E,
436	DS9_REG_TOON_TABLE_08 = 0x390,
437	DS9_REG_TOON_TABLE_09 = 0x392,
438	DS9_REG_TOON_TABLE_0A = 0x394,
439	DS9_REG_TOON_TABLE_0B = 0x396,
440	DS9_REG_TOON_TABLE_0C = 0x398,
441	DS9_REG_TOON_TABLE_0D = 0x39A,
442	DS9_REG_TOON_TABLE_0E = 0x39C,
443	DS9_REG_TOON_TABLE_0F = 0x39E,
444	DS9_REG_TOON_TABLE_10 = 0x3A0,
445	DS9_REG_TOON_TABLE_11 = 0x3A2,
446	DS9_REG_TOON_TABLE_12 = 0x3A4,
447	DS9_REG_TOON_TABLE_13 = 0x3A6,
448	DS9_REG_TOON_TABLE_14 = 0x3A8,
449	DS9_REG_TOON_TABLE_15 = 0x3AA,
450	DS9_REG_TOON_TABLE_16 = 0x3AC,
451	DS9_REG_TOON_TABLE_17 = 0x3AE,
452	DS9_REG_TOON_TABLE_18 = 0x3B0,
453	DS9_REG_TOON_TABLE_19 = 0x3B2,
454	DS9_REG_TOON_TABLE_1A = 0x3B4,
455	DS9_REG_TOON_TABLE_1B = 0x3B6,
456	DS9_REG_TOON_TABLE_1C = 0x3B8,
457	DS9_REG_TOON_TABLE_1D = 0x3BA,
458	DS9_REG_TOON_TABLE_1E = 0x3BC,
459	DS9_REG_TOON_TABLE_1F = 0x3BE,
460	DS9_REG_GXFIFO_00 = 0x400,
461	DS9_REG_GXFIFO_01 = 0x402,
462	DS9_REG_GXFIFO_02 = 0x404,
463	DS9_REG_GXFIFO_03 = 0x406,
464	DS9_REG_GXFIFO_04 = 0x408,
465	DS9_REG_GXFIFO_05 = 0x40A,
466	DS9_REG_GXFIFO_06 = 0x40C,
467	DS9_REG_GXFIFO_07 = 0x40E,
468	DS9_REG_GXFIFO_08 = 0x410,
469	DS9_REG_GXFIFO_09 = 0x412,
470	DS9_REG_GXFIFO_0A = 0x414,
471	DS9_REG_GXFIFO_0B = 0x416,
472	DS9_REG_GXFIFO_0C = 0x418,
473	DS9_REG_GXFIFO_0D = 0x41A,
474	DS9_REG_GXFIFO_0E = 0x41C,
475	DS9_REG_GXFIFO_0F = 0x41E,
476	DS9_REG_GXFIFO_10 = 0x420,
477	DS9_REG_GXFIFO_11 = 0x422,
478	DS9_REG_GXFIFO_12 = 0x424,
479	DS9_REG_GXFIFO_13 = 0x426,
480	DS9_REG_GXFIFO_14 = 0x428,
481	DS9_REG_GXFIFO_15 = 0x42A,
482	DS9_REG_GXFIFO_16 = 0x42C,
483	DS9_REG_GXFIFO_17 = 0x42E,
484	DS9_REG_GXFIFO_18 = 0x430,
485	DS9_REG_GXFIFO_19 = 0x432,
486	DS9_REG_GXFIFO_1A = 0x434,
487	DS9_REG_GXFIFO_1B = 0x436,
488	DS9_REG_GXFIFO_1C = 0x438,
489	DS9_REG_GXFIFO_1D = 0x43A,
490	DS9_REG_GXFIFO_1E = 0x43C,
491	DS9_REG_GXFIFO_1F = 0x43E,
492	DS9_REG_GXSTAT_LO = 0x600,
493	DS9_REG_GXSTAT_HI = 0x602,
494	DS9_REG_RAM_COUNT_LO = 0x604,
495	DS9_REG_RAM_COUNT_HI = 0x606,
496	DS9_REG_DISP_1DOT_DEPTH = 0x610,
497	DS9_REG_POS_RESULT_0 = 0x620,
498	DS9_REG_POS_RESULT_1 = 0x622,
499	DS9_REG_POS_RESULT_2 = 0x624,
500	DS9_REG_POS_RESULT_3 = 0x626,
501	DS9_REG_POS_RESULT_4 = 0x628,
502	DS9_REG_POS_RESULT_5 = 0x62A,
503	DS9_REG_POS_RESULT_6 = 0x62C,
504	DS9_REG_POS_RESULT_7 = 0x62E,
505	DS9_REG_VEC_RESULT_0 = 0x630,
506	DS9_REG_VEC_RESULT_1 = 0x632,
507	DS9_REG_VEC_RESULT_2 = 0x634,
508	DS9_REG_CLIPMTX_RESULT_00 = 0x640,
509	DS9_REG_CLIPMTX_RESULT_01 = 0x642,
510	DS9_REG_CLIPMTX_RESULT_02 = 0x644,
511	DS9_REG_CLIPMTX_RESULT_03 = 0x646,
512	DS9_REG_CLIPMTX_RESULT_04 = 0x648,
513	DS9_REG_CLIPMTX_RESULT_05 = 0x64A,
514	DS9_REG_CLIPMTX_RESULT_06 = 0x64C,
515	DS9_REG_CLIPMTX_RESULT_07 = 0x64E,
516	DS9_REG_CLIPMTX_RESULT_08 = 0x650,
517	DS9_REG_CLIPMTX_RESULT_09 = 0x652,
518	DS9_REG_CLIPMTX_RESULT_0A = 0x654,
519	DS9_REG_CLIPMTX_RESULT_0B = 0x656,
520	DS9_REG_CLIPMTX_RESULT_0C = 0x658,
521	DS9_REG_CLIPMTX_RESULT_0D = 0x65A,
522	DS9_REG_CLIPMTX_RESULT_0E = 0x65C,
523	DS9_REG_CLIPMTX_RESULT_0F = 0x65E,
524	DS9_REG_CLIPMTX_RESULT_10 = 0x660,
525	DS9_REG_CLIPMTX_RESULT_11 = 0x662,
526	DS9_REG_CLIPMTX_RESULT_12 = 0x664,
527	DS9_REG_CLIPMTX_RESULT_13 = 0x666,
528	DS9_REG_CLIPMTX_RESULT_14 = 0x668,
529	DS9_REG_CLIPMTX_RESULT_15 = 0x66A,
530	DS9_REG_CLIPMTX_RESULT_16 = 0x66C,
531	DS9_REG_CLIPMTX_RESULT_17 = 0x66E,
532	DS9_REG_CLIPMTX_RESULT_18 = 0x670,
533	DS9_REG_CLIPMTX_RESULT_19 = 0x672,
534	DS9_REG_CLIPMTX_RESULT_1A = 0x674,
535	DS9_REG_CLIPMTX_RESULT_1B = 0x676,
536	DS9_REG_CLIPMTX_RESULT_1C = 0x678,
537	DS9_REG_CLIPMTX_RESULT_1D = 0x67A,
538	DS9_REG_CLIPMTX_RESULT_1E = 0x67C,
539	DS9_REG_CLIPMTX_RESULT_1F = 0x67E,
540	DS9_REG_VECMTX_RESULT_00 = 0x680,
541	DS9_REG_VECMTX_RESULT_01 = 0x682,
542	DS9_REG_VECMTX_RESULT_02 = 0x684,
543	DS9_REG_VECMTX_RESULT_03 = 0x686,
544	DS9_REG_VECMTX_RESULT_04 = 0x688,
545	DS9_REG_VECMTX_RESULT_05 = 0x68A,
546	DS9_REG_VECMTX_RESULT_06 = 0x68C,
547	DS9_REG_VECMTX_RESULT_07 = 0x68E,
548	DS9_REG_VECMTX_RESULT_08 = 0x690,
549	DS9_REG_VECMTX_RESULT_09 = 0x692,
550	DS9_REG_VECMTX_RESULT_0A = 0x694,
551	DS9_REG_VECMTX_RESULT_0B = 0x696,
552	DS9_REG_VECMTX_RESULT_0C = 0x698,
553	DS9_REG_VECMTX_RESULT_0D = 0x69A,
554	DS9_REG_VECMTX_RESULT_0E = 0x69C,
555	DS9_REG_VECMTX_RESULT_0F = 0x69E,
556	DS9_REG_VECMTX_RESULT_10 = 0x6A0,
557	DS9_REG_VECMTX_RESULT_11 = 0x6A2,
558	DS9_REG_VECMTX_RESULT_12 = 0x6A4,
559
560	DS9_REG_MAX = 0x106E,
561
562	DS9_REG_POWCNT1 = 0x304,
563};
564
565mLOG_DECLARE_CATEGORY(DS_IO);
566
567extern const char* const DS7IORegisterNames[];
568extern const char* const DS9IORegisterNames[];
569
570struct DS;
571void DS7IOInit(struct DS* ds);
572void DS7IOWrite(struct DS* ds, uint32_t address, uint16_t value);
573void DS7IOWrite8(struct DS* ds, uint32_t address, uint8_t value);
574void DS7IOWrite32(struct DS* ds, uint32_t address, uint32_t value);
575uint16_t DS7IORead(struct DS* ds, uint32_t address);
576uint32_t DS7IORead32(struct DS* ds, uint32_t address);
577
578void DS9IOInit(struct DS* ds);
579void DS9IOWrite(struct DS* ds, uint32_t address, uint16_t value);
580void DS9IOWrite8(struct DS* ds, uint32_t address, uint8_t value);
581void DS9IOWrite32(struct DS* ds, uint32_t address, uint32_t value);
582uint16_t DS9IORead(struct DS* ds, uint32_t address);
583uint32_t DS9IORead32(struct DS* ds, uint32_t address);
584
585CXX_GUARD_END
586
587#endif