The SE, codenamed Chloe, is a modified Timex
TC2048.
The modifications were specified by
Andrew
Owen and designed and
implemented by
Jarek
Adamski.
Within each section, you may find links to
additional
information elsewhere in this FAQ, or to
other
reference
documents.
Technical
Specifications:
The technical specifications for the ZX
Spectrum
SE are;
- Codename: Chloe.
- I/N: TC2280.
- CPU: Z80A @ 3.528Mhz.
- Total RAM: 280K.
- Video RAM: 27K.
- ROM: 64K (32K active,
32K
passive)
- Sound: AY-3-8912.
- Keyboard: Cherry PS/2
Notebook.
- Mouse: Amiga 2-Button.
- Joystick: Kempston.
Hardware:
For most people, the final specification of
the ZX
Spectrum SE is probably not a concern,
since it is
just
one potential system
to run Sinclair Extended Basic on -
although I
would love
to see it supported by emulators. If you
were
holding out
for all those
new graphics modes I dreamed up, or if you
just
want a
modern Z80 based machine right now, then I
would
recommend the Sprinter from
Peters
Plus
Ltd.
I am working with Peters to ensure that
Sinclair Extended Basic will run on the
Sprinter.
If you
want to build your own Spectrum from
off-the-shelf
components then you
should look at Mike Wynne's
SpeccyBOB.
In
theory it should be possible to build a ZX
Spectrum SE
based on
the SpeccyBOB schematics, and it will
support
Sinclair
Extended Basic via a drop-in
EPROM.
If you got very excited when Zilog
announced the
eZ80
then you should keep an eye on the
development of
Richard Kelsh's Sparky project. It uses its
own
24-bit
version of Basic, based in part on Sinclair
Extended
Basic. I thought I'd be the
first to use Sinclair Extended Basic on
genuine
hardware
but Garry Lancaster, designer of the ZX
Spectrum
+3e,
beat me to it. I'm
working with him to ensure Sinclair
Extended Basic
supports ResiDOS - the operating system of
the
ZXATASP
IDE interface. We are
also looking at the possiblity of merging
aspects
of the
+3e and Sinclair Extended
Basic.
Finally, if you have an old Spectrum and
you want
to give
it a bit more pow, go and visit Jarek
Adamski's
website,
buy original
hardware, peripherals and software from
Sintech,
and read
comp.sys.sinclair and, if you read Spanish,
es.comp.sistemas.sinclair.
There are 7 subsections available:
CPU,
Memory,
Mouse/Joystick,
PSU,
ROM,
Sound Chip and
ULA.
- CPU
The main processor in the SE appears
to run
at
3.528 MHz as opposed to 3.5 Mhz on
the 48K
Spectrum. Scanline timings
are unaffected because the SCLD uses
counters
rather than time-loops. Just like a
normal
48K
Spectrum there are 224
T-states per scanline and 312
scanlines
before the
television picture.
- Memory
The SE combines the RAM paging
systems of
the
Timex TS2068 with the ZX Spectrum
128 and
then
adds another 16K to that.
This means it uses two different
systems to
access
its full 272K of RAM. Jarek
installed his
128
compatibility upgrade to take the
RAM to 144K and then installed a
128K SRAM
connected to the Timex memory
management
unit.
The Timex Horizontal MMU sees the
RAM as
three
banks of memory; HOME, DOCK, and EX
banks.
The HOME bank is the normal Spectrum
memory
area.
The top 32K is uncontended but the
16K
screen area
below that is
contended. DOCK and EX banks are
overlaid
on this
bank, but paging over the screen
area does
not
change the RAM used by the
ULA. This does mean it is possible
to set
up a
screen and page it out.
Memory is paged in 8K banks from
either the
DOCK
or the EX bank, but these banks are
mutually
exclusive - you cannot page in a
bank from both simultaneously. Bit 7
of
port 0xff
determines which bank to use
(0=DOCK,
1=EX-ROM).
Port 0xf4 determines which
banks are to be paged in with each
bit
referring
to the relevant bank (0-7 or 0'-7').
When
memory
is being paged, interrupts should
be disabled and the stack should be
in an
area
which is not going to
change.
On a TC2048, BASIC is contained in
the 16K
ROM
area and banks 0-7 and 0'-7' are not
normally
available, while on a TS2068 part of
the BASIC is stored in an 8K ROM in
bank 0'
and
cartridges plugged into the dock use
banks
0-7. On
the SE each of these banks is
connected to 64K of RAM, providing
an
additional
128K in addition to the base
RAM.
The contended memory timings for the
SE are
unknown but should be similar to
that for
the 48K
machine, except that the pattern
starts
at a different number of T-states
after the
interrupt, than the usual 14335. Odd
banks
in the
128 scheme are
contended.
Reading this port returns the last
byte
sent to
it.
The TS2068 only has 48K of base RAM,
but
the SE
has also been expanded to use a
variation
of the
ZX Spectrum 128 paging system to
increase the base RAM to 144K. This
means
that the
HOME bank is paged like a normal
Spectrum
128,
except that there is an additional
bank at 0x8000 where you would
expect to
find Bank
2. This does not appear to cause any
problems with
existing commercial software,
although some demos (such as 'Real
Action')
are
affected, but it provides some more
memory.
The HOME bank is paged in the same
way as
the
Spectrum 128, using port 0x7ffd.
D0-2: RAM bank (0-7) to map into memory at 0xc000.
D3: Select video area to be used by ULA; Bank 5 or Bank 7.
D4: Select ROM; 0 - Editor or 1 - Basic.
D5-7: Not used.
HOME RAM banks 1,3,4,6 and most of 7
are
used for
the RAM disk in 128 Basic; the rest
of 7
contains
editor scratchpads.
The EX and DOCK banks are paged by
the
horizontal
MMU.
HOME
0xffff +---------+---------++---------++--------+--------+--------+--------+---------+--------+---------+
| Ex 7 | Dock 7 || Bank 0 || Bank 1 | Bank 2 | Bank 3 | Bank 4 | Bank 5 | Bank 6 | Bank 7 |
| | || || |(also at| | |Screen 0'| |Screen 1'|
0xe000 +---------+---------+| || | 0x8000 | | +-- -- -- + +-- -- -- +
| Ex 6 | Dock 6 || || | on Spec| | | | | |
| | || || | 128) | | |Screen 0 | |Screen 1 |
0xc000 +---------+---------++---------++--------+--------+--------+--------+---------+--------+---------+
| Ex 5 | Dock 5 || Bank 8 | Any one of these pages may be switched in.
| | || |
0xa000 +---------+---------+| |
| Ex 4 | Dock 4 || |
| | || |
0x8000 +---------+---------++---------+
| Ex 3 | Dock 3 || Bank 5 |
| | ||Screen 0'|
0x6000 +---------+---------++-- -- -- +
| Ex 2 | Dock 2 || |
| | ||Screen 0 |
0x4000 +---------+---------++---------++--------+
| Ex 1 | Dock 1 || ROM 0 || ROM 1 | Either ROM may be switched in.
| | || || |
0x2000 +---------+---------+| || |
| Ex 0 | Dock 0 || || |
| | || Editor || Basic |
0x0000 +---------+---------++---------++--------+
The EX and DOCK banks
are mutually exclusive.
Pages from these banks
may be switched in over
the HOME bank.
Owing to the use of two completely
different
paging systems there are certain
hardware
limitations on which banks can be
paged in.
The first side effect is that the
odd
(slow) banks
of the 128 paging system have higher
priority than
the DOCK and EX banks.
The memory map looks like this:
bank number outed to 0x7ffd
0 1 2 3 4 5 6 7
HOME RAM0 RAM1 RAM2 RAM3 RAM4 RAM5 RAM6 RAM7
DOCK DOCK RAM1 DOCK RAM3 DOCK RAM5 DOCK RAM7
EXROM EXROM RAM1 EXROM RAM3 EXROM RAM5 EXROM RAM7
^
'---selected in section D
So, to use the DOCK or EX memory in
0xc000...0xffff, one of the even
banks
(0,2,4,6)
from the 128 paging system must be
selected.
If the selected bank is 1,3,5, or 7
this
bank will
appear instead of DOCK or EX memory.
This
concerns
bits 6 and 7 of the MMU port
0xf4.
The second side effect is that bits
2 and 3
of the
MMU port 0xf4 also apply for those
odd
(slow)
banks in section D. So when you
select
one of the odd banks (for section D,
using
port
0x7ffd), and then switch section B
(0x4000..0x7fff) to DOCK/EX, you
will have
also
the
DOCK/EX in section D.
The whole memory map is described
below.
The
DOCK/EX memory is marked as X0...X7,
because you
can only have DOCK or EX at
a time (bit 7 of 0xfe port). The
number
means 1/8
part of 64kB, corresponding to bit
in 0xf4
port.
The sections are marked as AL, AH,
BL, BH,
CL, CH,
DL, DH. Every one means
8kB.
- In case of HOME
selected
OUT 244,BIN 00000000
bank number outed to 0x7ffd
section 0 1 2 3 4 5 6 7
DH 7 RAM0H RAM1H RAM2H RAM3H RAM4H RAM5H RAM6H RAM7H
DL 6 RAM0L RAM1L RAM2L RAM3L RAM4L RAM5L RAM6L RAM7L
CH 5 ----------------- RAM8H only ------------------
CL 4 ----------------- RAM8L only ------------------
BH 3 ----------------- RAM5H only ------------------
BL 2 ----------------- RAM5L only ------------------
AH 1 --------------- ROM0H or ROM1H ----------------
AL 0 --------------- ROM0L or ROM1H ----------------
- In case of DOCK/EXROM
selected
(except
B section)
This means OUT 244,
BIN
11110011 or
its 8kB variants like
mixed
with
HOME (other 8kB of
each 16kB
are
HOME) OUT 244,
BIN 10100010 or OUT
244, BIN
01010001; or mixed
with DOCK
OUT
244, BIN 11110111 or
OUT 244,
BIN
11111011, this
applies respectively.
bank number outed to 0x7ffd
section 0 1 2 3 4 5 6 7
DH 7 X7 RAM1H X7 RAM3H X7 RAM5H X7 RAM7H
DL 6 X6 RAM1L X6 RAM3L X6 RAM5L X6 RAM7L
CH 5 ------------------- X5 only -------------------
CL 4 ------------------- X4 only -------------------
BH 3 ----------------- RAM5L only ------------------
BL 2 ----------------- RAM5L only ------------------
AH 1 ------------------- X1 only -------------------
AL 0 ------------------- X0 only -------------------
- In case of DOCK/EXROM
selected
(in
every section)
(independency
from
7FFD port)
OUT 244, BIN 1111111
section
DH 7 X7
DL 6 X6
CH 5 X5
CL 4 X4
BH 3 X3
BL 2 X2
AH 1 X1
AL 0 X0
- In case of DOCK/EXROM
selected
(except
D section)
This means OUT 244,
BIN
00111111 or
its 8kB variants (BIN
0x1x1x1x or
BIN x0x1x1x1).
bank number outed to 0x7ffd
section 0 1 2 3 4 5 6 7
DH 7 RAM0H X7 RAM2H X7 RAM4H X7 RAM6H X7
DL 6 RAM0L X6 RAM2L X6 RAM4L X6 RAM6L X6
CH 5 ------------------- X5 only -------------------
CL 4 ------------------- X4 only -------------------
BH 3 ------------------- X3 only -------------------
BL 2 ------------------- X2 only -------------------
AH 1 ------------------- X1 only -------------------
AL 0 ------------------- X0 only -------------------
- PSU
The SE requires a 9V DC supply at
800 mA
-ve
centre polarity. This is provided
via a
transformer taking a
230v AC supply at 50Hz. Jarek has
modified
the LED
so it shows red when the PSU is
connected
and
green
when the machine is powered up.
- ROM
Jarek has replaced the standard ROM
with a
64K
EPROM. Only two pages are visible to
the
hardware;
- The first is a modified
version
of the
ZX Spectrum 128
editor. A
call to
the TEST routine in
ROM-1 is
replaced with code to
reset
the
Timex ULA.
- The second is an exact
copy of
the
original ZX Spectrum
BASIC
but has
TR-DOS traps in place
of the
character set
(0x3c00..0x3fff
is
filled with PUSH AF:
RST 8:
NOP:
NOP).
This makes the machine more
compatible with
existing software titles than the
original
ZX
Spectrum 128. A third
page is exactly as the same as the
first
and a
fourth page is exactly the same as
second,
but
without TR-DOS
traps (it has the character set).
The A15
line of
EPROM is connected to /M1 of Z80,
while the
A14 is
connected to bit 3
of the 0x7ffd port latch. The TR-DOS
traps
allow
emulation of TR-DOS by the ZXVGS
operating
system.
Custom ROMs
can be loaded into memory and paged
into
place
using the DOCK or EX banks. Jarek
has
fitted an
external NMI button
for ROMs with a working NMI routine.
- Sound
Chip
Jarek has installed an AY-3-8912
sound chip
with
an added 8K serial EEPROM. Port 14
of the
AY is
used as an IIC driver
(must work as output). Bit 0 is the
SDA
(data)
line, bit 1 is SCL (clock) of the
IIC. The
chip
mapped to four I/O ports:
OUT (0xfffd) - Select a register 0-14.
IN (0xfffd) - Read the value of the selected register.
OUT (0xbffd) - Write to the selected register.
These ports match the AY chip used
in the
ZX
Spectrum 128.
OUT (0xf5) - Select a register 0-14
IN (0xf5) - Read the value of the selected register
OUT (0xf6) - Write to the selected register
These ports match the AY chip used
in the
Timex
TS2068.
The output is ABC/ACB stereo
switchable.
The sound produced by the beeper
plays
through an
internal speaker but is muted when
loading
or
saving to tape.
- ULA
The Spectrum's ULA bug which causes
snow
when I is
set to point to contended memory is
also
present
in the
TS2068 SCLD (ULA) but has been fixed
by
Jarek by
adding an AND gate. He has also
fixed a
problem
with the
SCLD which would produce snow if IM2
was
selected.
The TS2068 SCLD provides a number of
additional
screen
modes controlled using port 0xff. An
unfortunate
side effect of this is that a few
games,
like
Arkanoid, which expect
reading 0xff to produce screen and
ATTR
data bytes
when the ULA is reading screen
memory, will
not
work because the
value returned will be the last byte
sent
to the
port. The SCLD is also responsible
for I/O
and
unlike a normal Spectrum,
port addresses are fully decoded.
This
means it is
not possible to read the keyboard
from
alternate
addresses which also
causes problems with some games.
Port 0xff
is also
used to enable/disable the timer
interrupt
and
select which bank of
memory should be used by the
horizontal
MMU. The
byte to output will be interpreted
thus:
D0-2: Screen mode. 000=screen 0, 001=screen 1, 010= hi-colour, 110=hi-res
D3-5: Sets the screen colour in hi-res mode.
000 - Black on white. 100 - Green on magenta.
001 - Blue on yellow. 101 - Cyan on red.
010 - Red on cyan. 110 - Yellow on blue.
011 - Magenta on green. 111 - White on black.
D6: If set disables the generation of the timer interrupt.
D7: Selects which bank the horizontal MMU should use. 0=DOCK, 1=EX.
Screen 0 is the normal screen at the
start
of
video memory. Screen 1 uses the same
format
but is
offset by 8K.
The hi-res screen uses the data area
of
screen 0
and screen 1 to create a 512x192
pixel
screen.
Columns are taken alternately
from screen 0 and screen 1. The
attribute
area is
not used. In this mode all colours,
including the
BORDER, are BRIGHT, and the
BORDER colour is the same as the
PAPER
colour.
The hi-colour screen uses the data
area of
screen
0 for its data and the data area of
screen
1 for
its attributes, giving 2 colours
per 8x1 pixel block. The attribute
area is
in the
same byte order as the data area,
which
means MLT
files, which have the attribute
area in series, must be converted to
be
displayed.
Bit 6 has the equivalent function of
a DI
machine
code instruction when set or an EI
instruction
otherwise.
With careful timing it is possible
to mix
screen
modes so you could have a screen
where the
top
half is hi-colour and the bottom
half is hi-res - perfect for text
adventures with
graphics. Using a similar technique
it is
also
possible to have more than two
colours
on a hi-res screen. No commercial
software
ever
did this though.
In addition to these screen modes
the ULA
can
access two separate video areas,
just like
a
Spectrum 128. This is done by using
bit
3 of port 0x7ffd. This gives the ULA
a
total of
27K of RAM which can be used for up
to four
standard screen areas or two hi-res
or
hi-colour screens.
Port 0xfe deals with basic I/O. As
mentioned
before addresses are fully decoded,
so
whereas on
a normal Spectrum every even I/O
address will address the ULA, the SE
will
only
respond to the correct port. The
port is
decoded
as follows:
D0-2: Border
D3: MIC
D4: EAR/beeper
IN: Reads keys (bit 0 to bit 4
inclusive)
0xfefe SHIFT, Z, X, C, V 0xeffe 0, 9, 8, 7, 6
0xfdfe A, S, D, F, G 0xdffe P, O, I, U, Y
0xfbfe Q, W, E, R, T 0xbffe ENTER, L, K, J, H
0xf7fe 1, 2, 3, 4, 5 0x7ffe SPACE, SYM SHFT, M, N, B
Software:
Software development is ongoing, with
TS2068
and
ZX
Interface II emulators having
already
been
written.
Future
Developments:
IDE and RS232 interfaces should be
available
shortly.
|