mirror of
https://github.com/tjboldt/Apple2-IO-RPi.git
synced 2024-09-27 11:57:44 +00:00
Fix boot of dynamic drive
This commit is contained in:
parent
f0e67ea5ff
commit
a13866a458
@ -57,7 +57,12 @@ func main() {
|
|||||||
case resetCommand:
|
case resetCommand:
|
||||||
handlers.ResetCommand()
|
handlers.ResetCommand()
|
||||||
case readBlockCommand:
|
case readBlockCommand:
|
||||||
handlers.ReadBlockCommand(drive1, drive2)
|
var block int
|
||||||
|
block, err = handlers.ReadBlockCommand(drive1, drive2)
|
||||||
|
if err == nil && block == 0 {
|
||||||
|
resetCwd()
|
||||||
|
drive1, _ = generateDriveFromCwd()
|
||||||
|
}
|
||||||
case writeBlockCommand:
|
case writeBlockCommand:
|
||||||
handlers.WriteBlockCommand(drive1, drive2)
|
handlers.WriteBlockCommand(drive1, drive2)
|
||||||
case getTimeCommand:
|
case getTimeCommand:
|
||||||
@ -67,7 +72,7 @@ func main() {
|
|||||||
newCwd, _ := os.Getwd()
|
newCwd, _ := os.Getwd()
|
||||||
if newCwd != cwd {
|
if newCwd != cwd {
|
||||||
cwd = newCwd
|
cwd = newCwd
|
||||||
drive1, err = generateDrive1FromCwd()
|
drive1, _ = generateDriveFromCwd()
|
||||||
}
|
}
|
||||||
case loadFileCommand:
|
case loadFileCommand:
|
||||||
handlers.LoadFileCommand()
|
handlers.LoadFileCommand()
|
||||||
@ -105,16 +110,7 @@ func getDriveFiles() (prodos.ReaderWriterAt, prodos.ReaderWriterAt) {
|
|||||||
drive1, err = os.OpenFile(drive1Name, os.O_RDWR, 0755)
|
drive1, err = os.OpenFile(drive1Name, os.O_RDWR, 0755)
|
||||||
logAndExitOnErr(err)
|
logAndExitOnErr(err)
|
||||||
} else {
|
} else {
|
||||||
var exec string
|
drive1, err = generateDriveFromCwd()
|
||||||
exec, err = os.Executable()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("ERROR: %s", err.Error())
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
cwd := filepath.Dir(exec)
|
|
||||||
err = os.Chdir(filepath.Join(cwd, "../driveimage"))
|
|
||||||
logAndExitOnErr(err)
|
|
||||||
drive1, err = generateDrive1FromCwd()
|
|
||||||
logAndExitOnErr(err)
|
logAndExitOnErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,14 +130,25 @@ func logAndExitOnErr(err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateDrive1FromCwd() (prodos.ReaderWriterAt, error) {
|
func resetCwd() {
|
||||||
|
exec, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("ERROR: %s", err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
cwd := filepath.Dir(exec)
|
||||||
|
err = os.Chdir(filepath.Join(cwd, "../driveimage"))
|
||||||
|
logAndExitOnErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateDriveFromCwd() (prodos.ReaderWriterAt, error) {
|
||||||
cwd, err := os.Getwd()
|
cwd, err := os.Getwd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
drive1 := prodos.NewMemoryFile(0x2000000)
|
drive := prodos.NewMemoryFile(0x2000000)
|
||||||
fmt.Printf("Generating Drive 1 in memory from: %s\n", cwd)
|
fmt.Printf("Generating Drive in memory from: %s\n", cwd)
|
||||||
prodos.CreateVolume(drive1, "APPLE2.IO.RPI", 65535)
|
prodos.CreateVolume(drive, "APPLE2.IO.RPI", 65535)
|
||||||
err = prodos.AddFilesFromHostDirectory(drive1, cwd)
|
err = prodos.AddFilesFromHostDirectory(drive, cwd)
|
||||||
return drive1, err
|
return drive, err
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ReadBlockCommand handles requests to read ProDOS blocks
|
// ReadBlockCommand handles requests to read ProDOS blocks
|
||||||
func ReadBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt) {
|
func ReadBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt) (int, error) {
|
||||||
blockLow, _ := comm.ReadByte()
|
blockLow, _ := comm.ReadByte()
|
||||||
blockHigh, _ := comm.ReadByte()
|
blockHigh, _ := comm.ReadByte()
|
||||||
var driveUnit byte
|
var driveUnit byte
|
||||||
@ -23,7 +23,7 @@ func ReadBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt
|
|||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to read block")
|
fmt.Printf("Failed to read block")
|
||||||
return
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
file := drive1
|
file := drive1
|
||||||
@ -43,7 +43,7 @@ func ReadBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt
|
|||||||
buffer, err := prodos.ReadBlock(file, block)
|
buffer, err := prodos.ReadBlock(file, block)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("failed %s\n", err)
|
fmt.Printf("failed %s\n", err)
|
||||||
return
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = comm.WriteBlock(buffer)
|
err = comm.WriteBlock(buffer)
|
||||||
@ -52,10 +52,12 @@ func ReadBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt
|
|||||||
} else {
|
} else {
|
||||||
fmt.Printf("failed %s\n", err)
|
fmt.Printf("failed %s\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return block, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteBlockCommand handles requests to write ProDOS blocks
|
// WriteBlockCommand handles requests to write ProDOS blocks
|
||||||
func WriteBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt) {
|
func WriteBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterAt) error {
|
||||||
blockLow, _ := comm.ReadByte()
|
blockLow, _ := comm.ReadByte()
|
||||||
blockHigh, _ := comm.ReadByte()
|
blockHigh, _ := comm.ReadByte()
|
||||||
|
|
||||||
@ -65,7 +67,7 @@ func WriteBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterA
|
|||||||
driveUnit, err = comm.ReadByte()
|
driveUnit, err = comm.ReadByte()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to write block")
|
fmt.Printf("Failed to write block")
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
file := drive1
|
file := drive1
|
||||||
@ -87,7 +89,7 @@ func WriteBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterA
|
|||||||
err = comm.ReadBlock(buffer)
|
err = comm.ReadBlock(buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("failed %s\n", err)
|
fmt.Printf("failed %s\n", err)
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf("...")
|
fmt.Printf("...")
|
||||||
|
|
||||||
@ -97,4 +99,6 @@ func WriteBlockCommand(drive1 prodos.ReaderWriterAt, drive2 prodos.ReaderWriterA
|
|||||||
} else {
|
} else {
|
||||||
fmt.Printf("failed\n")
|
fmt.Printf("failed\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user