From 8b0292cccf768efdd5295fe0b662488cbc671079 Mon Sep 17 00:00:00 2001 From: crecher Date: Mon, 12 Oct 2026 04:07:09 +0200 Subject: added cart package, more tests, tests are now at ./tests and added .gitignore --- cart/nrom.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 cart/nrom.go (limited to 'cart/nrom.go') 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 } -- cgit v1.2.3