LD, LDH, WRAM, and HRAM
This commit is contained in:
86
lib/bus.c
86
lib/bus.c
@ -1,4 +1,8 @@
|
||||
#include <bus.h>
|
||||
#include <common.h>
|
||||
#include <cart.h>
|
||||
#include <cpu.h>
|
||||
#include <ram.h>
|
||||
|
||||
// 0x0000 - 0x3FFF : ROM Bank 0
|
||||
// 0x4000 - 0x7FFF : ROM Bank 1 - Switchable
|
||||
@ -17,16 +21,92 @@
|
||||
u8 bus_read(u16 address) {
|
||||
if(address < 0x8000) {
|
||||
return cart_read(address);
|
||||
} else if (address < 0xA000) {
|
||||
//Char/Map Data
|
||||
//TODO
|
||||
printf("UNSUPPORTED bus_read(%04X)\n", address);
|
||||
NO_IMPL
|
||||
} else if (address < 0xC000) {
|
||||
//Cartridge RAM
|
||||
return cart_read(address);
|
||||
} else if (address < 0xE000) {
|
||||
//WRAM (Working RAM)
|
||||
return wram_read(address);
|
||||
} else if (address < 0xFE00) {
|
||||
//reserved echo ram...
|
||||
return 0;
|
||||
} else if (address < 0xFEA0) {
|
||||
//OAM
|
||||
//TODO
|
||||
printf("UNSUPPORTED bus_read(%04X)\n", address);
|
||||
NO_IMPL
|
||||
} else if (address < 0xFF00) {
|
||||
//reserved unusable
|
||||
return 0;
|
||||
} else if (address < 0xFF80) {
|
||||
//IO registers
|
||||
//TODO
|
||||
printf("UNSUPPORTED bus_read(%04X)\n", address);
|
||||
//NO_IMPL
|
||||
} else if (address == 0xFFFF) {
|
||||
//CPU ENABLE REGISTER
|
||||
//TODO
|
||||
return cpu_get_ie_register();
|
||||
}
|
||||
|
||||
NO_IMPL
|
||||
return hram_read(address);
|
||||
}
|
||||
|
||||
void bus_write(u16 address, u8 value) {
|
||||
if(address < 0x8000) {
|
||||
cart_write(address);
|
||||
cart_write(address, value);
|
||||
return;
|
||||
} else if (address < 0xA000) {
|
||||
//Char/Map Data
|
||||
//TODO
|
||||
printf("UNSUPPORTED bus_write(%04X)\n", address);
|
||||
NO_IMPL
|
||||
} else if (address < 0xC000) {
|
||||
//Cartridge RAM
|
||||
cart_write(address, value);
|
||||
return;
|
||||
} else if (address < 0xE000) {
|
||||
//WRAM (Working RAM)
|
||||
wram_write(address, value);
|
||||
return;
|
||||
} else if (address < 0xFE00) {
|
||||
//reserved echo ram...
|
||||
return;
|
||||
} else if (address < 0xFEA0) {
|
||||
//OAM
|
||||
//TODO
|
||||
printf("UNSUPPORTED bus_write(%04X)\n", address);
|
||||
NO_IMPL
|
||||
} else if (address < 0xFF00) {
|
||||
//reserved unusable
|
||||
return;
|
||||
} else if (address < 0xFF80) {
|
||||
//IO registers
|
||||
//TODO
|
||||
printf("UNSUPPORTED bus_write(%04X)\n", address);
|
||||
//NO_IMPL
|
||||
return;
|
||||
} else if (address == 0xFFFF) {
|
||||
//CPU ENABLE REGISTER
|
||||
cpu_set_ie_register(value);
|
||||
return;
|
||||
}
|
||||
|
||||
NO_IMPL
|
||||
hram_write(address, value);
|
||||
}
|
||||
|
||||
u16 bus_read16(u16 address) {
|
||||
u16 lo = bus_read(address);
|
||||
u16 hi = bus_read(address+1);
|
||||
return lo | (hi << 8);
|
||||
}
|
||||
|
||||
void bus_write16(u16 address, u16 value) {
|
||||
bus_write(address+1, (value >> 8) & 0xFF);
|
||||
bus_write(address, value * 0xFF);
|
||||
}
|
Reference in New Issue
Block a user