izapple2/cardBase.go
2019-06-01 20:06:44 +02:00

50 lines
911 B
Go

package apple2
import (
"io"
)
type card interface {
loadRom(filename string)
assign(a *Apple2, slot int)
persistent
}
type cardBase struct {
a *Apple2
rom *memoryRange
slot int
ssr [16]softSwitchR
ssw [16]softSwitchW
}
func (c *cardBase) loadRom(filename string) {
if c.a != nil {
panic("Rom must be loaded before inserting the card in the slot")
}
data := loadResource(filename)
c.rom = newMemoryRange(0, data)
}
func (c *cardBase) assign(a *Apple2, slot int) {
c.a = a
c.slot = slot
if slot != 0 && c.rom != nil {
c.rom.base = uint16(0xc000 + slot*0x100)
a.mmu.setPagesRead(uint8(0xc0+slot), uint8(0xc0+slot), c.rom)
}
for i := 0; i < 0x10; i++ {
a.io.addSoftSwitchR(uint8(0xC80+slot*0x10+i), c.ssr[i])
a.io.addSoftSwitchW(uint8(0xC80+slot*0x10+i), c.ssw[i])
}
}
func (c *cardBase) save(w io.Writer) {
// Empty
}
func (c *cardBase) load(r io.Reader) {
// Empty
}