This section, which you may want to read in conjunction with the Timex TS2068 Technical Manual,
discusses the three (official) Timex machines that closely resemble the ZX Spectrum; the TS2068, TC2068
and TC2048. Timex produced a number of other machines (the TS1000,
TS1500, etc.) which are closely related to the
ZX81 - additional information about these can found in the
ZX81 FAQ, and from various sites listed in the 'links' and
'hardware' sections of this document. In addition, several variants or clones of
these machines were produced (often unofficially) - unless particularly noteworthy, these machines are not covered in
detail here. Many are documented in the Russian Machines FAQ. A
Timex Basic reference is also available.
The Timex Machines:
The TS2068, the TC2068 and the TC2048 each share the same basic internal design, described immediately below:
- The TS2068 is an American machine operating at 60Hz on a 110v power supply and generates an NTSC television picture
(just like the Spectrums sold by mail order in the US by Sinclair) but with a TS1000 (ZX81) compatible expansion bus.
- The TC2068 is the European version operating at 50Hz on a 230-240v power supply and generates a PAL
television signal (used throughout Europe, except in France where SECAM is used instead) with a normal expansion bus.
Both machines feature an AY-3-8912 sound chip (not 128 compatible), an
extended version of BASIC in 24K of ROM (semi-compatible), two non-standard joystick ports, a cartridge dock
(not IF2 compatible), and a new ULA with extra video modes, but some incompatiblities. There is also a Polish clone of the
TC2068, called the UK2086, which substitutes an RS232 port for one of the joystick ports.
- The TC2048 is a TC2068 with all the extra hardware removed, except the new ULA, but a normal BASIC ROM (only slightly
modified), a BNC composite out (but no RGB signals on the bus), and a Kempston joystick port (but no +5v as needed by
autofire joysticks).
There are also two modified versions of the TC2048; the TC2128 (Rebuiltion or similar) and the TC2144
(by Jarek Adamski). The TC2128 extends the TC2048 to 128K using the
Spectrum 128 memory scheme. The TC2144 does the same but provides an extra 16K of memory between 8000h and C000h. Both
upgrades allow the ULA to use the shadow screen in Bank 7 giving the machine a total of four screen areas.
Although the Timex machines are similar to the 48K machine there are some timing differences:
- The main processor runs at 3.52800 MHz, as opposed to 3.50000 MHz on the 48K Spectrum.
- The AY-3-8912 sound chip runs at 1.76475 Mhz.
- The American machines have a 60 Hz interrupt as opposed to 50 Hz on the European machines.
- The scanline timings are probably different.
There are 224 T-states on a normal 48K Spectrum, 312 scanlines per frame and 64 scanlines before the television picture.
Theoretically, on the European models there should be 226 T-states per scanline. There are either 311 or 312 scanlines per frame and 63
or 64 scanlines before the television picture, but this has not been accurately tested. This means that there are probably somewhere between
70286 and 70512 T states per frame. At a guess, on European models the '50 Hz' interrupt occurs at 50.04 Hz. It is not known at precisely what
point the '60 Hz' interrupt occurs on American models. The Spectrum's ULA bug which causes snow when I is set to point to
conteded memory is not present as the Timex machines use a different ULA.
- Screen Modes
The ULA used by the Timex machines provides a number of additional screen modes.
These are controlled using Port FFh. An unfortunate side effect of this is that a few games, like Arkanoid, which expect reading #FF to
produce screen and ATTR data bytes when the ULA is reading the screen memory, will not work, since reading FFh on the Timex returns
the last byte sent to the port. It is not known if this port is fully decoded but it seems likely that it is partially decoded, as on the Spectrum.
Port FFh is also used to enable/disable the timer interrupt and select which bank of memory to use for the horizontal MMU. The byte to
output will be interpreted thus:
Bits 0-2: Screen mode. 000=screen 0, 001=screen 1, 010=hi-colour, 110=hi-res
Bits 3-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
Bit 6: If set disables the generation of the timer interrupt.
Bit 7: Selects which bank the horizontal MMU should use. 0=DOCK, 1=EX-ROM.
Screen 0 is the normal screen at 4000h. Screen 1 uses the same format but at 6000h.
The hi-colour 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 colurs, including the BORDER, are BRIGHT, and the BORDER colour
is the same as the PAPER colour.
The multi-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 are in series, must
be converted to be displayed.
Bit 6 is the hardware equivalent of issuing a DI (disable interrupts) instruction in machine code, and is unaffected by the instruction EI
(enable interrupts), so should be used with caution. Bit 6 can be useful for getting ROM routines which normally enable interrupts to
run slightly faster.
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. However, it is believed that no commercial software ever actually did this.
- Sound Chip
The AY-3-8912 used in the TS2068 and TC2068 is controlled by two I/O ports:
OUT (F5h) - Select a register 0-14
IN (F6h) - Read the value of the selected register
OUT (F6h) - Write to the selected register
IN F5h always returns 255.
Most Spectrum software written to use the AY chip expects to find it at the addresses used by the Spectrum 128.
Typically, the AY chip is written to inside 128K games using:
LD BC,#FFFD 01 FD FF
OUT (C),D ED 51
LD B,#BF 06 BF
OUT (C),E ED 59
To convert to a TS2068 or TC2068 poke a few values as follows:
LD BC,#FFF5 01 F5 FF
OUT (C),D ED 51
LD C,#F6 0E F6
OUT (C),E ED 59
If you've got a Fuller box, you can do the same mod, replacing F5 with 3F and F6 with 5F.
- Joysticks
On the 128K ZX Spectrum 128, AY chip is used
to control MIDI and RS232 but on the TS2068 and TC2068 it is used to read the Timex joysticks instead, using register R14.
Address bits A8 and A9 determine which joystick will be read (01=one, 10=two, 11=both OR-ed). So mainly port #01F6 is used to read
joystick one, and mainly port #02F6 is used to read joystick two (with R14 as the active register). When R14 acts as an output port
(bit D6=1 in register R7), the bits in register R14 have following meaning:
Output:
bits D0-D4: 'masks' for reading bits D0-D4; may also be used by third-party peripherals
bit D5: If D5=0 then access to the (never released) 16MB Bus Expansion Unit is enabled.
bits D6-D7: may be used by third-party peripherals
Input:
bit D0: up (0=active)
bit D1: down
bit D2: left
bit D3: jright
bit D4: fire (0=active)
bits D5-D7: last values sent to these bits
The bits D0-D4 when reading return valid values only if they are not masked, i.e. if corresponding mask bits is one,
else they will return zeroes. When register R14 acts as input port (bit D6=0 in register R7, this is the only
reliable way for joystick reading), output is ignored and the bits in register R14 have following meanings:
Input:
bit D0: up (0=active)
bit D1: down
bit D2: left
bit D3: right
bit D4: fire (0=active)
bits D5-D7: always one
In this case, bits D0-D4 could not be masked.
|