From 086a2da973287aa1959b3f03f96676165d23ba31 Mon Sep 17 00:00:00 2001 From: April Ayres-Griffiths Date: Tue, 19 Feb 2019 22:38:03 +1100 Subject: [PATCH] prodos large volumes block mapping fix --- disk/diskimage.go | 8 +++----- disk/diskimagepd.go | 10 +++++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/disk/diskimage.go b/disk/diskimage.go index e83a08c..66c9b81 100644 --- a/disk/diskimage.go +++ b/disk/diskimage.go @@ -2,16 +2,14 @@ package disk import ( "bytes" + "crypto/sha256" + "encoding/hex" "errors" + "fmt" "io" "io/ioutil" "os" "strings" - - "crypto/sha256" - "encoding/hex" - - "fmt" ) //import "math/rand" diff --git a/disk/diskimagepd.go b/disk/diskimagepd.go index 385fc16..1e44b5a 100644 --- a/disk/diskimagepd.go +++ b/disk/diskimagepd.go @@ -1172,11 +1172,13 @@ func (d *DSKWrapper) PRODOS800ChecksumBlock(b int) string { func (d *DSKWrapper) PRODOSGetBlockSectors(block int) (int, int, int) { - track := block / PRODOS_BLOCKS_PER_TRACK + bpt := d.Format.USPT() / 2 - bo := block % PRODOS_BLOCKS_PER_TRACK + track := block / bpt - if d.Layout == SectorOrderProDOSLinear { + bo := block % bpt + + if d.Layout == SectorOrderProDOSLinear || len(d.Data) >= PRODOS_800KB_DISK_BYTES { return track, bo * 2, bo*2 + 1 } @@ -1584,6 +1586,8 @@ func (fd *ProDOSFileDescriptor) Publish(dsk *DSKWrapper) error { func (dsk *DSKWrapper) PRODOSWrite(b int, data []byte) error { + //log.Printf("====> Request to write block %.4x", b) + for len(data) < 512 { data = append(data, 0x00) }