diff options
| author | crecher <crecher@crecher.net> | 2026-10-12 04:07:09 +0200 |
|---|---|---|
| committer | crecher <crecher@crecher.net> | 2026-10-12 04:07:09 +0200 |
| commit | 8b0292cccf768efdd5295fe0b662488cbc671079 (patch) | |
| tree | f2896047a2328d8aea9a7f7815a6cf8d9c0636ea /cart/nrom.go | |
| parent | 7775f9ad5407f2be4b03c300d1db4c745fda2f69 (diff) | |
| download | gones-8b0292cccf768efdd5295fe0b662488cbc671079.tar.gz gones-8b0292cccf768efdd5295fe0b662488cbc671079.zip | |
added cart package, more tests, tests are now at ./tests and added .gitignore
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 } |