Hardware

SDX Plus comprises the following :-

If you shop around :-

Item Cost
GAL16V8 x 2 £2
EEPROM x 2 £4
Total£6

Memory

In these pictures, ROMs are shown with their names and are 8KB in size and RAM pages are assigned letters and are 16KB in size.

SDX Plus logical memory map, as seen in RELCPMH=0 mode :-

R2,R1,R00x0000..0x1fff0x2000..0x3fff 0x4000..0x7fff0x8000..0xbfff0xc000..0xffff P3,P2,P1,P0
0 OS *BASIC * γ β α0
1 ASSEM   δ 1
2       2
3       3
4 CP/M boot ROM *    4
5 SDX ROM *     5
6       6
7     TV ** 7
  T0 ***   8
T1 **   9
T2 **   A
T3 **   B
T4 **   C
T5 **   D
T6 **   E
T7 ** X2 **** F

SDX Plus logical memory map, as seen in RELCPMH=1 mode :-

0x0000..0x3fff0x4000..0x7fff0x8000..0xbfff0xc000..0xffff P3,P2,P1,P0
δ γ β α0
a b c 1
d e f 2
g h i 3
j k l 4
m n o 5
p q r 6
s t TV ** 7
      8
      9
      A
      B
      C
      D
      E
X0 **** X1 **** X2 **** F

* Replacement ROMs.

** Pages used for virtual tape support. TV holds tape variables, T1 to T7 hold tape data. I had not intended to make the TV page visible in RELCPMH=1 mode, but its an unwanted, unavoidable but harmless side-effect of using a GAL16V8 to replace the bipolar PROM.

*** Unused page (avoid writing code which uses this).

**** Extra pages, not used at present.

The α page and the X pages are provided from the motherboard. If the motherboard only has 32KB, then X0 and X1 will be aliases of the X2 and α pages.

The SDX memory expansion circuitry is approximately reverse engineered here. This (incomplete) analysis allowed me to determine the inputs used as addresses into the PROM, thus allowing the construction of appropriate logic in the GAL16V8.

Andys SDX

My SDX had a PROM with an off-by-one bug in the memory map. In addition, the motherboard provides no memory - the motherboard address decoder PAL14L4 never lowers the /RAM signal, the RAS and CAS signals (and maybe READ too) never make it to the DRAMs (which happen to be 32KB). In short, someone has deliberately nobbled the motherboard.

I therefore have to use a different SDX address decoder GAL16V8.

On this system, the T0 page is actually an alias of the α page. The α page has to come from somewhere, and due to the difficulty in writing PALASM equations, it ends up there.

In addition, there are no X pages. After all the motherboard doesn't provide any memory.

I'm wondering in Memotech Business/2 systems are more like a normal SDX, or more like my SDX.

Cassette tape

By default SDX Plus does not load from or save to cassette tape. Almost all of the Memotech library on cassette has been converted into .MTX file format. Instead, SDX Plus supports "virtual cassette tapes".

"Virtual cassette tapes" are implemented as hidden areas of RAM, per the diagram above. There are two virtual tapes, one 64KB, the other 48KB.

Looking at the known library of Memotech cassettes, almost all of them will fit within 48KB.

The SDX Plus supplied OS ROM is patched to jump to virtual tape code at the end of SDX ROM 5. The variables used by the virtual tape support are stored in the TV page. Tape data is stored in pages T1-T3 (tape slot 1) and T4-T7 (tape slot 0).

Virtual cassette tapes are accessed from CP/M using the SDPTAPE command.

Unlike REMEMOrizer, SDX Plus does not support switching between real cassette and virtual cassette modes. There is not enough free ROM space to support this.