src/gba/gba-io.c (view raw)
1#include "gba-io.h"
2
3#include "gba-video.h"
4
5void GBAIOWrite(struct GBA* gba, uint32_t address, uint16_t value) {
6 switch (address) {
7 case REG_DISPSTAT:
8 GBAVideoWriteDISPSTAT(&gba->video, value);
9 break;
10 case REG_WAITCNT:
11 GBAAdjustWaitstates(&gba->memory, value);
12 break;
13 case REG_IE:
14 GBAWriteIE(gba, value);
15 break;
16 case REG_IME:
17 GBAWriteIME(gba, value);
18 break;
19 default:
20 GBALog(GBA_LOG_STUB, "Stub I/O register write: %03x", address);
21 break;
22 }
23 gba->memory.io[address >> 1] = value;
24}
25
26uint16_t GBAIORead(struct GBA* gba, uint32_t address) {
27 switch (address) {
28 case REG_DISPSTAT:
29 return GBAVideoReadDISPSTAT(&gba->video);
30 break;
31 case REG_IE:
32 case REG_WAITCNT:
33 case REG_IME:
34 // Handled transparently by registers
35 break;
36 default:
37 GBALog(GBA_LOG_STUB, "Stub I/O register read: %03x", address);
38 break;
39 }
40 return gba->memory.io[address >> 1];
41}