blob: 3828c16d699f47af599bb34727d1a44d6a234bfa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 }
|