izapple2/diskette.go

45 lines
793 B
Go
Raw Normal View History

2019-12-22 13:15:19 +00:00
package apple2
2020-06-06 12:10:27 +00:00
import (
"errors"
"strings"
)
2019-12-22 13:15:19 +00:00
type diskette interface {
powerOn(cycle uint64)
powerOff(cycle uint64)
read(quarterTrack int, cycle uint64) uint8
write(quarterTrack int, value uint8, cycle uint64)
}
func loadDiskette(filename string) (diskette, error) {
2019-12-22 13:15:19 +00:00
data, err := loadResource(filename)
if err != nil {
return nil, err
}
2020-06-06 12:10:27 +00:00
if isFileNib(data) {
var d diskette16sector
d.nib = newFileNib(data)
return &d, nil
}
if isFileDsk(data) {
isPO := strings.HasSuffix(strings.ToLower(filename), "po")
2019-12-22 13:15:19 +00:00
var d diskette16sector
2020-06-06 12:10:27 +00:00
d.nib = newFileDsk(data, isPO)
2019-12-22 13:15:19 +00:00
return &d, nil
}
if isFileWoz(data) {
f, err := newFileWoz(data)
if err != nil {
return nil, err
}
return newDisquetteWoz(f)
}
return nil, errors.New("Diskette format not supported")
}