diff options
Diffstat (limited to 'cart/nrom.go')
| -rw-r--r-- | cart/nrom.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/cart/nrom.go b/cart/nrom.go new file mode 100644 index 0000000..3828c16 --- /dev/null +++ b/cart/nrom.go @@ -0,0 +1,47 @@ +package cart + +type nrom struct { + prg []uint8 + chr []uint8 + chrIsRAM bool + prgRAM [8 * 1024]uint8 + mirroring Mirroring +} + +func newNROM(c *Cartridge) *nrom { + return &nrom{ + prg: c.PRG, + chr: c.CHR, + chrIsRAM: c.CHRIsRAM, + mirroring: c.Mirroring, + } +} + +func (m *nrom) CPURead(addr uint16) uint8 { + switch { + case addr >= 0x8000: + return m.prg[int(addr-0x8000)%len(m.prg)] + case addr >= 0x6000: + return m.prgRAM[addr-0x6000] + default: + return 0 + } +} + +func (m *nrom) CPUWrite(addr uint16, v uint8) { + if addr >= 0x6000 && addr < 0x8000 { + m.prgRAM[addr-0x6000] = v + } +} + +func (m *nrom) PPURead(addr uint16) uint8 { + return m.chr[int(addr)%len(m.chr)] +} + +func (m *nrom) PPUWrite(addr uint16, v uint8) { + if m.chrIsRAM { + m.chr[int(addr)%len(m.chr)] = v + } +} + +func (m *nrom) Mirroring() Mirroring { return m.mirroring } |