func runDiskConvert(cmd *commander.Command, args []string) { if len(args) != 2 { cmd.Usage() return } if diskVolume > 254 { log.Fatalf("disk volume must be 0-254, got %d", diskVolume) } nyb, err := disk.DiskFromFile(args[0], byte(diskVolume)) if err != nil { log.Fatal(err) } if err = disk.DiskToFile(args[1], nyb); err != nil { log.Fatal(err) } }
// Run the emulator func RunEmulator() { rom := util.ReadRomOrDie("../data/roms/apple2+.rom") // charRom = util.ReadFullCharacterRomOrDie("../data/roms/apple2char.rom") charRom := util.ReadSmallCharacterRomOrDie("../data/roms/apple2-chars.rom") screen, err := Init() if err != nil { panic(err) } var a2 *goapple2.Apple2 oncePerFrame := func() { a2.Done = a2.Done || ProcessEvents(sdl.Events, a2) runtime.Gosched() } plotter := SdlPlotter{screen, oncePerFrame} a2 = goapple2.NewApple2(plotter, rom, charRom) intBasicRom := util.ReadRomOrDie("../data/roms/apple2.rom") firmwareCard, err := cards.NewFirmwareCard(intBasicRom, "Intbasic Firmware Card", 0, a2) if err != nil { panic(err) } if err := a2.AddCard(firmwareCard); err != nil { log.Fatal(err) } diskCardRom := util.ReadRomOrDie("../data/roms/Apple Disk II 16 Sector Interface Card ROM P5 - 341-0027.bin") diskCard, err := cards.NewDiskCard(diskCardRom, 6, a2) if err != nil { panic(err) } if err := a2.AddCard(diskCard); err != nil { log.Fatal(err) } // disk1, err := disk.DiskFromFile("../data/disks/spedtest.dsk", 0) // disk1, err := disk.DiskFromFile("../data/disks/dung_beetles.dsk", 0) disk1, err := disk.DiskFromFile("../data/disks/chivalry.dsk", 0) if err != nil { log.Fatal(err) } diskCard.LoadDisk(disk1, 0) steps := *steplimit if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } /* a2.AddPCAction( 0xB940, goapple2.PCAction{Type: goapple2.ActionDumpMem, String: "0xB940-goa2.bin", Mask: cpu.FLAG_Z, Masked: cpu.FLAG_Z, Delay: 68}) a2.AddPCAction(0xB7B5, goapple2.PCAction{Type: goapple2.ActionHere, String: "ENTER.RWTS"}) a2.AddPCAction(0xB7BE, goapple2.PCAction{Type: goapple2.ActionHere, String: "ENTER.RWTS - Success"}) a2.AddPCAction(0xB7C1, goapple2.PCAction{Type: goapple2.ActionHere, String: "ENTER.RWTS - Fail"}) a2.AddPCAction(0xBD00, goapple2.PCAction{Type: goapple2.ActionHere, String: "RWTS"}) a2.AddPCAction(0xBDAF, goapple2.PCAction{Type: goapple2.ActionHere, String: "RWTS Command"}) // a2.AddPCAction(0xBE35, goapple2.PCAction{Type: goapple2.ActionHere, String: "RWTS READ.SECTOR call"}) // a2.AddPCAction(0xBE38, goapple2.PCAction{Type: goapple2.ActionHere, String: "RWTS READ.SECTOR success"}) a2.AddPCAction(0xBE46, goapple2.PCAction{Type: goapple2.ActionHere, String: "RWTS Success"}) a2.AddPCAction(0xBE48, goapple2.PCAction{Type: goapple2.ActionHere, String: "RWTS Error"}) a2.AddPCAction(0xBDAF, goapple2.PCAction{Type: goapple2.ActionDiskStatus}) a2.AddPCAction(0xBDAF, goapple2.PCAction{Type: goapple2.ActionTrace, String: "on", Delay: 70}) a2.AddPCAction( 0xBE48, goapple2.PCAction{Type: goapple2.ActionSetLimit, String: "1"}) a2.AddPCAction( 0xBDAF, goapple2.PCAction{Type: goapple2.ActionDumpMem, String: "0xBDAF-goa2.bin", Delay: 68}) */ _ = cpu.FLAG_Z // go typeProgram(a2) for !a2.Done { err := a2.Step() if err != nil { fmt.Println(err) break } // runtime.Gosched() // So the keyboard-reading goroutines can run if steps > 0 { steps-- if steps == 0 { a2.Quit() } } } a2.Quit() sdl.Quit() }