Skip to content

Commit

Permalink
ProDOS ROM Drive Card
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanizag committed Mar 4, 2024
1 parent cedb810 commit 9611993
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Portable emulator of an Apple II+ or //e. Written in Go.
- Brain Board II
- MultiROM card
- Dan ][ Controller card
- ProDOS ROM card
- Useful cards not emulating a real card
- Bootable SmartPort / ProDOS card with the following smartport devices:
- Block device (hard disks)
Expand Down Expand Up @@ -240,6 +241,7 @@ The available cards are:
mouse: Mouse card implementation, does not emulate a real card, only the firmware behaviour
multirom: Multiple Image ROM card
parallel: Card to dump to a file what would be printed to a parallel printer
prodosrom: A bootable 1 MB solid state disk
saturn: RAM card with 128Kb, it's like 8 language cards
smartport: SmartPort interface card
softswitchlogger: Card to log softswitch accesses
Expand Down
1 change: 1 addition & 0 deletions cardBuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ func getCardFactory() map[string]*cardBuilder {
cardFactory["mouse"] = newCardMouseBuilder()
cardFactory["multirom"] = newMultiRomCardBuilder()
cardFactory["parallel"] = newCardParallelPrinterBuilder()
cardFactory["prodosrom"] = newCardProDOSRomDriveBuilder()
cardFactory["saturn"] = newCardSaturnBuilder()
cardFactory["smartport"] = newCardSmartPortStorageBuilder()
cardFactory["swyftcard"] = newCardSwyftBuilder()
Expand Down
73 changes: 73 additions & 0 deletions cardProDOSRomDrive.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package izapple2

import "fmt"

/*
ProDOS-ROM-Drive: A bootable 1 MB solid state disk for Apple ][ computers
Emulates version 4.0+
See:
https://github.com/tjboldt/ProDOS-ROM-Drive
https://github.com/Alex-Kw/ProDOS-ROM-Drive-Images
*/

// CardMemoryExpansion is a Memory Expansion card
type CardProDOSRomDrive struct {
cardBase
address uint16
data []uint8
}

const proDOSRomDriveMask = 0xf_ffff // 1 MB mask

func newCardProDOSRomDriveBuilder() *cardBuilder {
return &cardBuilder{
name: "ProDOS ROM Drive",
description: "A bootable 1 MB solid state disk",
defaultParams: &[]paramSpec{
//∫{"image", "ROM image with the ProDOS volume", "https://github.com/tjboldt/ProDOS-ROM-Drive/raw/v4.0/Firmware/GamesWithFirmware.po"},
{"image", "ROM image with the ProDOS volume", "https://github.com/Alex-Kw/ProDOS-ROM-Drive-Images/raw/main/ProDOS242_Beta5.po"},
},
buildFunc: func(params map[string]string) (Card, error) {
image := paramsGetPath(params, "image")
if image == "" {
return nil, fmt.Errorf("image required for the ProDOS ROM drive")
}

data, _, err := LoadResource(image)
if err != nil {
return nil, err
}

var c CardProDOSRomDrive
c.data = data
c.loadRom(data[0x300:0x400])
return &c, nil
},
}
}

func (c *CardProDOSRomDrive) assign(a *Apple2, slot int) {

// Set pointer position
c.addCardSoftSwitchW(0, func(value uint8) {
c.address = uint16(value) | c.address&0xff00
}, "LATCHLO")
c.addCardSoftSwitchW(1, func(value uint8) {
c.address = uint16(value)<<8 | c.address&0xff
}, "LATCHHI")

// Read data
for i := uint8(0x0); i <= 0xf; i++ {
iCopy := i
c.addCardSoftSwitchR(iCopy, func() uint8 {
offset := uint32(c.address)<<4 + uint32(iCopy)
offset &= proDOSRomDriveMask
return c.data[offset]
}, fmt.Sprintf("READ%X", iCopy))
}

c.cardBase.assign(a, slot)
}
1 change: 1 addition & 0 deletions doc/usage.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ The available cards are:
mouse: Mouse card implementation, does not emulate a real card, only the firmware behaviour
multirom: Multiple Image ROM card
parallel: Card to dump to a file what would be printed to a parallel printer
prodosrom: A bootable 1 MB solid state disk
saturn: RAM card with 128Kb, it's like 8 language cards
smartport: SmartPort interface card
softswitchlogger: Card to log softswitch accesses
Expand Down

0 comments on commit 9611993

Please sign in to comment.