When I was young, The ZX Spectrum was
the cheapest of the 8 bits, and frequently looked down upon by CPC
and C64 owners... Despite its more limited graphics, they do yield
some interesting advantages... compared to the CPCs 4 color mode
1... the ZX Spectrum has similar resolution, and twice the onscreen
colors - what's more, it uses half the screen memory which means
Spectrum games are often significantly smoother than their CPC
equivalents...
These days, clever developers are able to work around the spectrums
color limitations, and produce impressive looking games with fast
gameplay on this classic 8 bit.
We can read in a row of the keyboard by setting BC to the correct value
and using IN A,(C)... the resulting byte will contain a 0 if the key is
pressed, 1 if it is not.
The "Beeper" sound chip is incredibly crude... it is controlled by
bit 5 of the port &FE... by turning it on and off we can make
simple sounds...
See the example to the right... by changing the pause (caused by BC)
we can change the pitch of the sound... 3000 will be a relatively
low pitch... 500 will be higher...
Some clever programs even manage to "Fake" multiple sound channels!
The big disadvantage to all this is that the CPU will be busy during
the whole time, so the Beeper chip isn't very helpful, and we'll
want to use the AY sound chip on the 128k systems... but on the 48k
machines, it's all we've got!
xor a loopy:
xor %00010000
;---S-BBB S=Sound B=Border
out (&fe),a
ld bc,3000 ;Lower
number=higher pitch pausey:
dec c
jr nz,pausey
dec b
jr nz,pausey
jr loopy
Ram Banking
Ram banking is controlled by port &7FFD and &1FFD - they can
be written, but not read, therefore, you should keep a backup of the value
last sent to this port... by default the firmware keeps one at &5B5C and
&5B67
Port
Backup
Bits
Details
&7FFD
&5B5C
- - IRSMMM
MMM= ram
bank at C000 (0-7) S=Screen
page bit R=Rom Low bit
I=I/O
Disabling
&1FFD
&5B67
- - - SDR - P
P =
paging mode (0=normal 1=+3) R=Rom high bit D = Disk Motor S=Printer
strobe
The ZX Spectrum 128 has 4 banks of 16k, the first is always rom on the
128k... the +3 CAN have ram in this bank, but this will mean you cannot
support the 128k system (only about 15% of spectrums on the market are
+3's)
Note... the Black +2 has the same hardware as the +3... the Grey +2 has the
same hardware as the spectrum128 system
ZX 128K
&0000
ROM
&4000
Screen 1 (5)*
&8000
Ram (2)
&C000
Screen 2 (7)
* ZX Firmware uses &5B00-&6000
Ram Contention
'Contention' is banks of memory which are slower due to sharing
with the screen memory, unfortunately, the banks that are contended are
different on the 128k machines and the +3
128K
+3
Ram 0
Ram 0
Ram 1
Ram 1
Ram 3
Ram 3
Ram 4
Ram 4
Ram 6
Ram 6
Dark=Contended
Spectrum +3 Ram Options
As Mentioned, the spectrum +3 has some special banking options,
which were used to allow CPM to work on the Spectrum - they are enabled by
setting bit 0 of &1FFD to '1' to turn on this special mode
&1FFD
Bits 2,1
00
01
10
11
&C000
Bank 3
Bank 7
Bank 3
Bank 3
&8000
Bank 2
Bank 6
Bank 6
Bank 6
&4000
Bank 1
Bank 5 (S)
Bank 5 (S)
Bank 7 (S)
&0000
Bank
0
Bank
4
Bank
4
Bank
4
S=Screen Bank
Memory Map
48k
Usage
0000
3FFF
ROM
4000
57FF
Screen
Ram
5800
5AFF
Screen
Ram Color Data
5B00
5BFF
Printer
Buffer (Sysvars on +3)
5C00
5CBF
System
Vars
5CC0
5CCA
Reserved
5CCA
5D3B
TR-DOS
Area
5D3B
FF57
Available
Memory (Between Prog and Ramtop
FF58
FFFF
Reserved
(User
defined characters)
Screen Map
Calculating screen addresses can be performed with the following
'formula'
H
L
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
0
1
0
Y7
Y6
Y2
Y1
Y0
Y5
Y4
Y3
X4
X3
X2
X1
X0
Each Color byte is defined in the following format:
%
7
6
5
4
3
2
1
0
Flash
Bright
Back
Back
Back
Fore
Fore
Fore
FOREground and BACKground colors are defined by 3 bits each... values from
0-7:
7
6
5
4
3
2
1
0
White
Yellow
Cyan
Green
Magenta
Red
Blue
Black
Spectrum +3 Disk File Header
Position
Bytes
Content
Details
Example
&0000
8
PLUS3DOS
Text Header
PLUS3DOS
&0009
1
EOF byte
EOF Character
26
&000A
1
Issue Num
Issue Num
1
&000B
1
Version Num
Version Num
0
&000F
4
Size+128
Size INC
Header
&1080
&0010
2
Size
Size of file
&1000
&0012
5
Basic Header
Basic Header
&03,&00,&80,&00,&80
&0017
104
Unused
Unused
0 0 0 0�
&007F
1
Checksum
Checksum of
Header bytes 0-126 (MOD 256)
?
&0080
Program
Code
Spectrum Links Fuse - My
Spectrum emulator of choice! Spectrum
128k and
Spectrum 48K reference - Great summary of the hardware - provides much
of the info you'll want for ZX dev Basic Manual -
You'll want to know at least enough basic to do calls and operate the
computer Spectrum Computing Forum
- Web community full of helpful people!