Language cartridge for Device 32620
This page describes the speech module of the
32620 speech/morse generator.
It was created in an attempt to make a working reproduction
of the module, as it was missing from the 32620 in our collection.
In the original design, the module consists of two identical
speech boards, one of which is mounted upside down.
This allows the unit to be installed in two possible orientations.
The purpose of using two speech boards, is twofold: (1) It can
be used to accomodate two languages (one on each board), or (2)
it can be used for a language which cannot be fitted onto a single
card. The board furthest from the CPU is the primary speech card '0'.
It is used by default.
If two languages are used (one on each board), the alternative
language can be selected by inserting the speech module upside-down
before switching the device on. The secondary speech
board has now become the primary one. In this configuration,
the secondary board is not used.
In case a language cannot be fitted into the six 8KB EPROMs of a single
board, the remainder is stored on the secondary board. This is
the case, for example, with the Spanish version which requires eight EPROMs.
In this configuration, the speech module cannot be used upside-down.
When the CPU is started, the firmware reads a lookup table that is
stored in the first 64 bytes (0x40) of the first EPROM (Speech 1) on
the primary board. This lookup table tells the firmware where each
sound sample starts an on which card it is stored. Although the
format of the lookup table is not documented, most of it is trivial.
Full details of the lookup table are provided below.
Below is the memory map of the Z80 CPU platform used in the 32620.
The Z80 has 16 address lines (A0-A15), which is equivalent to a total
address space of 64KB. The bottom 16KB (0x0000 - 0x3FFF) is used
for the system EPROM, the SRAMs and off-board memory-mapped peripherals.
The top 48KB (0x4000-0xFFFF) is used for external memory, which in our
case is taken by the speech module. In the standard design, this space is
used to address 6 EPROMs of 8KB each. The logic on the original board,
maps the 6 EPROMs to the external memory space (0x4000-0xFFFF).
If the sound samples for a given language can be fitted into these 6 EPROMs,
only one speech board is needed. This is the case for the German version.
In that situation, the second speech board (when present) can hold an alternative
language, but only if it can also be fitted into 48KB of memory.
To use the second language, the user has to install the speech module
If the sound samples for a given language cannot be fitted into 6 EPROMs,
they have to be spread over the two boards. If this is the case, the speech
module can only be used in one orientation. This is the case with the
Spanish version, which meeds 8 EPROMs. In this case, 6 EPROMs are on
the primary speech card (0) and 2 on the secondary card (1). The remaining
4 spaces are empty.
The first EPROM (Speech 1) of the primary speech board holds a lookup
table in the first 64 bytes (0x40). This means that the first sound
sample starts at offset 0x40 (actually at address 0x4040 as the EPROM
starts at 0x4000). The table has 20 entries of 3 bytes each,
and is 0xFF terminated.
Only the first 13 entries of the table are used. The rest is reserved
for 'future expansion' and is filled with 0xFF.
The first two bytes of each entry contain a pointer to the start of
the sample (i.e. the start address) in LSB/MSB order.
For example: address [0x4AF8] is stored as [0xF8] [0x4A].
The third byte contains the flags for that entry. The upper nibble of the flags
specifies the board that holds the sample. Only bits 6 and 7 of
the upper nibble are used.
Of the lower nibble, bits 0-2 specify the audio level in the range 0-7 .
The remainings bits (3-5) are unused (all 0).
In the German version of the EPROM-set, all flags have a value of
0x43, except for the terminator which is 0xFF. In the Spanish
version, flags values 0x42, 0x43, 0x45, 0xC3 and 0x83 are found
(plus 0xFF for the terminator). This confirms that the Spanish data
is spread over two boards and that a varying audio level is used.
The German and Spanish lookup tables are listed below.
40 40 43 40 40 42
F8 4A 43 19 50 43 ← Stored on board 1
1C 58 43 18 5C 45 ← ?
ED 66 43 CA 70 43
F7 73 43 26 81 43
18 82 43 49 95 43
3F 92 43 7A A9 43
AC A1 43 FF BD 43
5E B1 43 D2 D0 43
1E C0 43 F7 E3 43
73 D0 43 70 F9 C3 ← Spread over board 1 and 2
15 E0 43 13 57 83 ← Stored on board 2
1F EF 43 6D 6B 83
9D FB FF BA 7F FF ← End-address and terminator
➤ Play German version
➤ Play Spanish version
To verify the format of the lookup tables (above), we created various
language files from publicly available sound samples, and added a matching
lookup table. Trying this with Dutch and Arabic, worked
at the first attempt.
Other languages are currently under development.
We are still looking for original sound samples that were used with the
32620, like Russian and Polish.
From publicly available recordings, we have recreated the English
cartridge that was used in Poland.
➤ Play the English version (spoken by a Polish person)
Making an exact copy of the original sound cards is not difficult.
The board measures 95 x 170 mm and contains six 2764 (8KB) EPROMs,
plus a number of logic circuits to map these EPROMs into the
0x4000-0xFFFF address space. This means that the lower 16KB of the
address space (0x000-0x3FFF) is not used. This is the area in which
the CPU's EPROM and SRAMs are located.
To save ourselves a lot of work, it was decided to use the larger
EPROM type 27C020, which has a storage space of 256KB. If we divide
this into 4 banks, each bank has a capacity of 64KB, of which only
the upper 48KB can be used (the lower 16KB is not addressable).
This allows us to store four langages on a single card.
The upper two address lines of the EPROM are controlled by switches.
The diagram above shows the proposed circuit, in which all 16 address
lines from the CPU (A0-A15) are connected directly to the EPROM.
Address lines A16 and A17 are connected to toggle switches, so that
they can be made HI or LO. This allows any of four 64KB banks to be
Note that the switches have a neutral centre position (OFF), that
allows the secondary board to be slaved to the primary one. If this
option is used, a 3-wire cable should be connected between the slave
connectors of the two boards.
This feature can be particularly useful, if one or more languages
are too large to be fitted onto a single speech board, such as with
MERQ is the external memory select line, directly from the CPU.
BS is the board select line, which is controlled by one of the
PIOs on the expansion board. BS and MERQ are both fed to the logic
circuit around IC2 (27HCT27). They are used to
enable the EPROM (CE) under control of the CPU.
Address lines A14 and A15 are also fed to IC2, to disable the lower
16KB segment of the EPROM.
The diagram above shows how the two bank switches (S1,S2) can be replaced
by a single 4-position rotary selector (S1a, b), which is what we used in the
reproduction described below.
The above circuit diagram was converted into a Printed Circuit Board
(PCB) in December 2021. At the same time, a simple BASIC program
was created to allow the EPROM-dumps of the available languages to be
merged into two 27C020 EPROMs of 256KB each (one for each speech board).
There were two practical problems though. The first one is the 58-way
connector by which the speech board is slotted into the backplane of the
32620. These connectors were made by RFT and have a pin distance of 2.5 mm
(metric) instead of the conventional 2.54 mm (imperial).
These are no longer in production.
In addition, a frame was needed to allow both speech cards to be inserted
into the backplane of the 32620 simultaneously.
Both problems were solved by some very kind members of the
a group of people that keeps old DDR technology alive .
The required EFS-58/AB connectors – extremely hard to find these days –
were kindly provided and soldered onto our board. Furthermore, one of the
members provided a so-called EGS frame that allows both boards to be merged
into a single cartridge. The same EGS frame was used in the original 32620
speech cartridge. Many thanks to all contributors from the
For future service and repair, we also decided to make an
that allows us to run any of the 32620 boards outside of the device.
To make life a bit easier, we used two 29C020 Flash-ROMs instead of
conventional 27C020 EPROMs. They have the same pinout but can be erased and
programmed in a couple of seconds.
Next, the two boards were installed on the backplane of the 32620:
the primary one in the rightmost slot and the secondary one to its left.
After turning the device on, it worked straight away.
The lady now speaks German and – with the flick of a switch – Spanish.
As there were quite a few anomalies with the German speech, it was replaced
with the ROM-dump from a different source. It fixed the anomalies.
Both German and Spanish now sound exactly like they did in the 1980s.
It replaces the two miniature switches on each of the speech cards.
The image also shows the
interconnection cable between the two cards.
Note that in our case, we had to remove a metal stub from the backplane
of the 32620. This is a 5 mm thick metal alignment guide that was added
to prevent the cartridge from being installed upside down. As the EGS frame
we used for the reconstructed cartridge does not support this guide pin,
it was blocking the cartridge.
The following persons have contributed to this page and to the
reconstruction of the speech cartridge as described above:
- Various members of the Robotron Forum
- Detlev Vreisleben
- Jörg Drobick
- Marc Simons
- Paul Reuvers
Document from BStU archives , kindly supplied by Detlev Vreisleben .
Full name: Bundesbeauftragte für die Unterlagen des Staatssicherheitsdienstes
der ehemaligen Deutschen Demokratischen Republik
Federal Commissioner for the Records of the
State Security Service
of the former German Democratic Republic (GDR) —
officially abbreviated to BStU.
Any links shown in red are currently unavailable.
If you like the information on this website, why not make a donation?|
© Crypto Museum. Created: Tuesday 28 December 2021. Last changed: Thursday, 02 February 2023 - 09:07 CET.