diff --git a/apple2/apple2.go b/apple2/apple2.go index 827dca6..9a03c3c 100644 --- a/apple2/apple2.go +++ b/apple2/apple2.go @@ -13,16 +13,18 @@ type Apple2 struct { io *ioC0Page cards []cardBase isApple2e bool + panicSS bool activeSlot int // Slot that has the addressing 0xc800 to 0ccfff } // NewApple2 instantiates an apple2 -func NewApple2(romFile string) *Apple2 { +func NewApple2(romFile string, panicSS bool) *Apple2 { var a Apple2 a.mmu = newMemoryManager(&a) a.cpu = core6502.NewNMOS6502(a.mmu) a.loadRom(romFile) a.mmu.resetPaging() + a.panicSS = panicSS // Set the io in 0xc000 a.io = newIoC0Page(&a) diff --git a/apple2/ioC0Page.go b/apple2/ioC0Page.go index 3cccef8..b38e07a 100644 --- a/apple2/ioC0Page.go +++ b/apple2/ioC0Page.go @@ -72,10 +72,11 @@ func (p *ioC0Page) Peek(address uint8) uint8 { //fmt.Printf("Peek on $C0%02x ", address) ss := p.softSwitchesR[address] if ss == nil { - //panic(fmt.Sprintf("Unknown softswitch on read to 0xC0%02x", address)) + if p.apple2.panicSS { + panic(fmt.Sprintf("Unknown softswitch on read to 0xC0%02x", address)) + } return 0 } - return ss(p) } @@ -83,7 +84,9 @@ func (p *ioC0Page) Poke(address uint8, value uint8) { //fmt.Printf("Poke on $C0%02x with %02x ", address, value) ss := p.softSwitchesW[address] if ss == nil { - //panic(fmt.Sprintf("Unknown softswitch on write to 0xC0%02x", address)) + if p.apple2.panicSS { + panic(fmt.Sprintf("Unknown softswitch on write to 0xC0%02x", address)) + } return } ss(p, value) diff --git a/main.go b/main.go index 8d3c11c..bd3d70e 100644 --- a/main.go +++ b/main.go @@ -1,22 +1,46 @@ package main import ( + "flag" "go6502/apple2" "go6502/apple2sdl" ) func main() { + romFile := flag.String( + "rom", + "apple2/romdumps/Apple2_Plus.rom", + "main rom file") + disk2RomFile := flag.String( + "diskRom", + "apple2/romdumps/DISK2.rom", + "rom file for the disk drive controller") + diskImage := flag.String( + "disk", + "../dos33.dsk", + "file to load on the first disk drive") + useSdl := flag.Bool( + "sdl", + true, + "use SDL") + panicSS := flag.Bool( + "panicss", + false, + "panic if a not implemented softwtich is used") + flag.Parse() + //romFile := "apple2/romdumps/Apple2.rom" - romFile := "apple2/romdumps/Apple2_Plus.rom" + //romFile := "apple2/romdumps/Apple2_Plus.rom" //romFile := "apple2/romdumps/Apple2e.rom" - disk2RomFile := "apple2/romdumps/DISK2.rom" - diskImage := "../dos33.dsk" + //disk2RomFile := "apple2/romdumps/DISK2.rom" + //diskImage := "../dos33.dsk" + //diskImage := "../Apex II - Apple II Diagnostic (v4.7-1986).DSK" + //diskImage := "../A2Diag.v4.1.SDK" log := false - sdl := true - a := apple2.NewApple2(romFile) - a.AddDisk2(disk2RomFile, diskImage) - if sdl { + a := apple2.NewApple2(*romFile, *panicSS) + a.AddDisk2(*disk2RomFile, *diskImage) + if *useSdl { apple2sdl.SDLRun(a) } else { a.Run(log, true)