diff --git a/src/memory.ml b/src/memory.ml index fab5630..f6a5943 100644 --- a/src/memory.ml +++ b/src/memory.ml @@ -8,6 +8,8 @@ type map = { rom_bank_00 : bytes; (* cartridge, 16KB *) rom_bank_01 : bytes; (* additional bank, 16KB *) vram : bytes; (* Video RAM, 8KB *) + wram_bank_0 : bytes; (* work RAM, 4KB *) + wram_bank_1 : bytes; (* work RAM, 4KB *) io : bytes; (* I/O ports *) hram : bytes; (* High RAM, 8KB *) interrupt : bytes; (* Interrupt Enable Register *) @@ -18,6 +20,8 @@ let init (cartridge: Cartridge.t) = rom_bank_00 = sub cartridge.full_rom 0 0x4000; rom_bank_01 = create 0x4000; vram = create 0x2000; + wram_bank_0 = create 0x1000; + wram_bank_1 = create 0x1000; io = create 0x0080; hram = create 0x2000; interrupt = create 1 @@ -28,6 +32,9 @@ let get_mem_bank mem addr = | x when x < 0x4000 -> mem.rom_bank_00, x | x when x < 0x8000 -> mem.rom_bank_01, (x - 0x4000) | x when x < 0xA000 -> mem.vram, (x - 0x8000) + | x when x < 0xC000 -> failwith "Unimplemented memory range." + | x when x < 0xD000 -> mem.wram_bank_0, (x - 0xC000) + | x when x < 0xE000 -> mem.wram_bank_1, (x - 0xD000) | x when x < 0xFF00 -> failwith "Unimplemented memory range." | x when x < 0xFF80 -> mem.io, x - 0xFF00 | x when x < 0xFFFF -> mem.hram, x - 0xFF80