Skip to content

Commit

Permalink
Videx Ultraterm support
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanizag committed Jan 1, 2025
1 parent 42efdcd commit 156877e
Show file tree
Hide file tree
Showing 16 changed files with 471 additions and 65 deletions.
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Portable emulator of an Apple II+ or //e. Written in Go.
- Apple //e 80 columns card with 64Kb extra RAM and optional RGB modes
- No Slot Clock based on the DS1216
- Videx Videoterm 80 column card with the Videx Soft Video Switch (Apple ][+ only)
- Videx Ultraterm 80 to 160 column card wuth integrated Video Switch
- SwyftCard (Apple //e only)
- Brain Board
- Brain Board II
Expand All @@ -52,7 +53,9 @@ Portable emulator of an Apple II+ or //e. Written in Go.

- Graphic modes:
- Text 40 columns
- Text 80 columns (Apple //e and Videx VideoTerm)
- Text 80 columns Apple //e
- Text 80 columns Videx VideoTerm
- Text up to 160 columns and 48 lines Videx UltraTerm
- Low-Resolution graphics
- Double-Width Low-Resolution graphics (Apple //e only)
- High-Resolution graphics
Expand Down Expand Up @@ -237,6 +240,7 @@ The available pre-configured models are:
desktop: Apple II DeskTop
dos32: Apple ][ with 13 sectors disk adapter and DOS 3.2x
swyft: swyft
ultraterm: Apple ][+ with Videx Ultraterm demo
The available cards are:
brainboard: Firmware card. It has two ROM banks
Expand All @@ -259,7 +263,8 @@ The available cards are:
softswitchlogger: Card to log softswitch accesses
swyftcard: Card with the ROM needed to run the Swyftcard word processing system
thunderclock: Clock card
videx: Videx compatible 80 columns card
videx: Videx Videoterm compatible 80 columns card
videxultraterm: Videx Utraterm compatible 80 columns card
vidhd: Firmware signature of the VidHD card to trick Total Replay to use the SHR mode
z80softcard: Microsoft Z80 SoftCard to run CP/M
Expand Down
2 changes: 1 addition & 1 deletion apple2.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type Apple2 struct {
cards [8]Card
tracers []executionTracer

softVideoSwitch *SoftVideoSwitch
softVideoSwitch softVideoSwitch
board string
isApple2e bool
hasLowerCase bool
Expand Down
5 changes: 4 additions & 1 deletion apple2Tester.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ func (at *apple2Tester) getText(textMode testTextModeFunc) string {
func (at *apple2Tester) getTextBest() string {
videxMaybe := at.a.cards[3]
if videxMaybe != nil {
if videx, ok := videxMaybe.(*CardVidex); ok {
if videx, ok := videxMaybe.(*CardVidexVideoterm); ok {
return videx.getText()
}
if videxUltraterm, ok := videxMaybe.(*CardVidexUltraterm); ok {
return videxUltraterm.getText()
}
}

videoMode := at.a.video.GetCurrentVideoMode()
Expand Down
4 changes: 2 additions & 2 deletions cardBase.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func (c *cardBase) loadRom(data []uint8, layout cardRomLayout) error {
if len(data) == 0x400 {
// The file has C800 to CBFF for ROM
// The 256 bytes in Cx00 are copied from the last page in C800-CBFF
// Used on the Videx 80 columns card
// Used on the Videx Videoterm 80 columns card
c.romCsxx = newMemoryRangeROM(0, data[0x300:], "Slot ROM")
c.romC8xx = newMemoryRangeROM(0xc800, data, "Slot C8 ROM")
} else {
Expand Down Expand Up @@ -141,7 +141,7 @@ func (c *cardBase) assign(a *Apple2, slot int) {
}
if c.romCxxx != nil {
rom := traceMemory(c.romCxxx, c.name, c.traceMemory)
a.mmu.setCardROM(slot, c.romCxxx)
a.mmu.setCardROM(slot, rom)
a.mmu.setCardROMExtra(slot, rom)
}
}
Expand Down
3 changes: 2 additions & 1 deletion cardBuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ func getCardFactory() map[string]*cardBuilder {
cardFactory["smartport"] = newCardSmartPortStorageBuilder()
cardFactory["swyftcard"] = newCardSwyftBuilder()
cardFactory["thunderclock"] = newCardThunderClockPlusBuilder()
cardFactory["videx"] = newCardVidexBuilder()
cardFactory["videx"] = newCardVidexVideotermBuilder()
cardFactory["videxultraterm"] = newCardVidexUltratermBuilder()
cardFactory["vidhd"] = newCardVidHDBuilder()
cardFactory["z80softcard"] = newCardZ80SoftCardBuilder()
return cardFactory
Expand Down
6 changes: 5 additions & 1 deletion cardCat_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,14 @@ func TestCardsDetected(t *testing.T) {
testCardDetectedInternal(t, "2plus", "saturn", "s0", 50_000_000, "SATURN 128K CARD IN SLOT 0")
})

t.Run("test Videx card", func(t *testing.T) {
t.Run("test Videx Videoterm card", func(t *testing.T) {
testCardDetectedInternal(t, "2plus", "videx", "s3", 50_000_000, "3 38-18-01-82 Videx 80 Column Text Display Card")
})

t.Run("test Videx Ultraterm card", func(t *testing.T) {
testCardDetectedInternal(t, "2plus", "videxultraterm", "s3", 50_000_000, "3 38-18-01-87 ? Unknown 80-Column Display Card")
})

t.Run("test Dan 2 SD card", func(t *testing.T) {
testCardDetectedInternal(t, "2enh", "dan2sd", "s2", 50_000_000, "2 03-3C-01-9D DAN II Card")
})
Expand Down
Loading

0 comments on commit 156877e

Please sign in to comment.