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
    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
    – OmarL
    Apr 27 '20 at 13:16

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.

  • 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.
    – OmarL
    Apr 27 '20 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
    Apr 27 '20 at 18:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.