7

There's this page about the ZS Scorpion, and I'm reading about the way bankswitching works. Port 0x7ffd is the same as on western ZX Spectrums, but to double the amount of RAM to 256k and also the amount of ROM, this is augmented by another port, 0x1ffd.

Here is the copypasta:

*port 7ffd. full compatibility with Zx spectrum 128. digits are:

D0-D2 - number of RAM page to put in C000-FFFF
D3    - switch of address for RAM of screen. 0 - 4000, 1 - c000
D4    - switch of ROM : 0-zx128, 1-zx48
D5    - 1 in this bit will block further output in port 7FFD, until reset.

*port 1ffd - additional port for resources of computer.

D0    - block of ROM in 0-3fff. when set to 1 - allows read/write page 0 of RAM
D1    - selects ROM expansion. this rom contains main part of service monitor.
D2    - not used
D3    - used for output in RS-232C
D4    - extended RAM. set to 1 - connects RAM page with number 8-15 in
        C000-FFFF. number of page is given in gidits D0-D2 of port 7FFD
D5    - signal of strobe for interface centronics. to form the strobe has to be
        set to 1.
D6-D7 - not used. ( yet ? )

It's quite clear how 0x7ffd works. It is clearly documented in English and works in an obvious way.

But I'm struggling to really understand some details of what that second port does.

Is 0x1ffd:d1 active high or active low?

If 0x1ffd:d1 is true, such that ROM expansion is selected, then are 0x1ffd:d0 and 0x7ffd:d4 both don't-cares? How then can the TR-DOS ROM be selected?

Also, several of those bits are left unused. Are they the mechanism by which the Scorpion may be expanded to 2 megabytes of RAM, and ½ megabyte of ROM? Is it known how that works? I would appreciate some more unambiguous information.

1
  • 1
    It's possible there is clear documentation out there in Russian. I can just about read Russian but I find it hard to search so in the case that anyone has a link to a document I'll be able to make use of it Commented Apr 27, 2020 at 13:16

2 Answers 2

2

There was several unofficial modifications of Scorpion memory:

You can also take a look at translation of Scorpion-related page at Russian Speccy wiki.

Yes, looks like here was an official Scorpion ZS-1024 Turbo+ model (Russian version of wiki, because English has no related info), but it was based on GMX board extension (translation), "a module for increasing memory capacity, additional video modes, hardware emulation of other ZX Spectrum clones" (source of the quote, English wiki has no detailed info again).

In those days, few people had a GMX board (I also only had a Scorpion with common 256kb RAM), but let's try to figure out of interested ports of GMX:

  • 1FFD - expansion port.
  • 7EFD - GMX modes port.
  • DFFD - memory expansion port (Profi).
  • 78FD - port of the 2nd window (#8000-#BFFF) for working with RAM.

So based of the description of these ports (translation), to access Scorpion memory extension you'll need to support ZX-Spectrum Profi (on GMX board) on port #DFFD and Pentagon (on custom modifications) memory standards with higher bits of port #7FFD. I found a memory expansion driver (translation) in Spectrofon 22 disk magazine, there was some memory expansions controlled on higher bits of #7FFD. Yes, like on Pentagon 1024 custom memory expansion.

Perhaps related community on #zxcoding Telegram channel can tell you more on your tech questions. Some of the members still own real ZX-Spectrum hardware to test something.

4

Working backwards from FUSEmachine_current->ram.last_byte appears to be the current state of 7ffd and machine_current->ram.last_byte2 is 1ffd:

  • 1ffd:d1 is active high;
  • 1ffd:d0 appears to override d1d1 selects which ROM would be visible in the usual ROM area if ROM were selected; d0 determines whether ROM or RAM is selected;
  • d1 does sit in front of the 7ffd selection though — the classic 128kb or 48kb ROM selection is relevant only if the user hasn't selected the Scorpion ROM instead.

Extension: per Czech wikipedia as machine translated, port $dffd is the Scorpion's "extended memory paging", so I suspect that's used for memory beyond the first 256kb. Unfortunately the reference is a print magazine which I haven't yet found an online copy of.

2
  • Good shout, looking at emulator source code. It answers part of the question very well. But part of the question is about how later models go beyond 256k, this is not emulated by fuse. Commented Apr 27, 2020 at 18:15
  • Agreed; and in case anybody else has the time to search more widely, FUSE was my go to because the code is mature and generally easy to follow, and it has a good reputation for accuracy. I haven't done a more thorough search for open source emulators that support the Scorpion in higher memory configurations.
    – Tommy
    Commented Apr 27, 2020 at 18:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .