UK101 MEMORY MAPS

(from Practical Electronics, Mar 81)

MAPPING, GET IT RIGHT! - David McDonnell, Eire

Sir - In your September issue Mr. M. C. Mannering pointed out an error
in the address decoding of the UK101. However a second fault also
exists in the decoding:

The keyboard address decoding only uses address lines A15-A10 for
generating the keyboard enable signals *RKB and WKB. This results in
the keyboard occupying a 1K block of memory from DC00-DFFF (Hex),
instead of just one location as suggested in the manual.

As Mr. Mannering found these faults only show up when experimenting
with memory mapped peripherals. Thus anyone contemplating adding an
expansion should have a clear idea of what areas of memory are
available. With this in mind before expanding my Compukit, I made out
two useful charts.

The first is a hardware memory map which is intended to show exactly
where devices are found in memory and where free blocks occur. The
second chart indicates what address decoding is available on-board,
and the range of addresges which they cover.

These charts show the two faults, but also indicate the existence of
useful empty blocks of memory and spare decode lines available. Two
separate 1K blocks with Read and Write Enables - are available and
would be perhaps suited to an expansion to the video RAM or anything
else requiring separate Read, Write Enables. IC17 provides effectively
7 spare decode lines for blocks of 256 Bytes form F100-F7FF. This is
achieved by using A10 as another "Enable" line. This way two expansions
may share a common output provided A10 activates one when high and
another when low. Spare "Enable" lines suitable for 8K RAM cards are
also available.

I think these charts would be very useful for any of your readers
wishing to expand their Compukit, as it helps avoid mistakes like
placing a programmable sound generator in the ACIA memory block (or
didn't you notice that slip?).


UK101 HARDWARE MEMORY MAP  Fig.1

Location	Memory
Hex	Dec	Type		COMMENTS

0000	0	RAM		PAGE ZERO;
TO				SCRATCH PAD RAM
00FF	255
0100	256	RAM		PAGE ONE;
TO				STACK
0221	545
0222	546	RAM		UNUSED-USING NEW MONITOR EPROM
TO				This region seems to exist between 0223 and
02FA	762			02FA
0301	769	RAM		PAGE THREE;
				BEGINNING OF BASIC WORKSPACE
03FF	1023	RAM		END OF FIRST BLOCK OF 1K RAM
07FF	2047	RAM		END OF 2K OF RAM
0BFF	3071	RAM		END OF 3K OF RAM
0FFF	4095	RAM		END OF 4K OF RAM
13FF	5119	RAM		END OF 5K OF RAM
17FF	6143	RAM		END OF 6K OF RAM
1BFF	7167	RAM		END OF 7K OF RAM
1FFF	8191	RAM		END OF 8K OF RAM
				END OF ON-BOARD USER RAM
3FFF	16,383			END OF 16K OF RAM
5FFF	24,575			END OF 24K OF RAM
7FFF	32,767			END OF 32K OF RAM
9FFF	40,959			END OF 40K OF RAM
				HIGHEST ADDRESS TO WHICH USER
				MEMORY MAY BE CONTINUOUSLY EXPANDED
AOOO	40,960	ROM		BEGINNING OF 8K BASIC INTERPRETER
TO
BFFF	49,151	ROM		END OF BASIC INTERPRETER
C000	49,152			FREE; TOTAL = 4K
TO
CFFF	53,247
D000	53,248	RAM		VIDEO REFRESH MEMORY
TO				TOTAL = 1K
D3FF	54,271
D400	54,272			FREE; TOTAL = 2K
TO
DBFF	56,319
DC00	56,320	PERIPHERAL	KEYBOARD OCCUPIES THIS BLOCK
TO				TOTAL = 1K
DFFF	57,343
E000	57,344			FREE; TOTAL = 4K
TO
EFFF	64,439
F000	61,440	PERIPHERAL	ACIA; TOTAL = 256 BYTES
TO
F0FF	61,695
F100	61,696			FREE; TOTAL = 1791 BYTES
TO
F7FF	63,487
F800	63,488	ROM/EPROM	OPERATING MONITOR
TO
FFFF	65,535			END OF DIRECTLY ADDRESSABLE MEMORY


UK101 ADDRESS DECODING  Fig.2
NOTE: all outputs are active low

Range (Hex) 	IC 	Pin In
Low  High 	No. 	No. Use 	COMMENTS
0000 1FFF	23	15	8K BLOCK; ENABLES IC22
0000 03FF	22	7	*RS0: 1K RAM ENABLE
0400 07FF	22	9	*RS1: 1K RAM ENABLE
0800 0BFF	22	10	*RS2: 1K RAM ENABLE
0C00 0FFF	22	11	*RS3: 1K RAM ENABLE
1000 13FF	22	12	*RS4: 1K RAM ENABLE
1400 17FF	22	13	*RS5: 1K RAM ENABLE
1800 1BFF	22	14	*RS6: 1K RAM ENABLE
1C00 1FFF	22	15	*RS7: 1K RAM ENABLE
2000 3FFF	23	14	8K BLOCK; UNUSED
4000 5FFF	23	13	8K BLOCK; UNUSED
6000 7FFF	23	12	8K BLOCK; UNUSED
8000 9FFF	23	11	8K BLOCK; UNUSED
A000 BFFF	23	10	8K BLOCK; ENABLES IC17 DECODER No.1
A000 BFFF 	15d 	13	BS BASIC SELECT FOR 8K ROM
A000 A7FF	17	7	*BS0; BASIC ROM SELECT
A800 AFFF	17	6	*BS1; BASIC ROM SELECT
B000 B7FF	17	5	*BS2; BASIC ROM SELECT
B800 BFFF	17	4	*BS3; BASIC ROM SELECT
C000 DFFF	23	9	8K BLOCK; ENABLES IC20 *V LINE ALSO DECODES
				THIS BLOCK
D000 D3FF 	20 	12	1K BLOCK; DECODES VIDEO RAM ON READ
				PORTION OF R/*W CYCLE
D000 D3FF 	20	7	1K BLOCK; DECODES VIDEO RAM ON WRITE
				PORTION OF R/*W CYCLE
D400 D7FF	20	13	1K BLOCK; ENABLED ON READ PORTION
D400 D7FF	20	9	1K BLOCK; ENABLED ON *WRITE PORTION
D800 DBFF	20	14	1K BLOCK; ENABLED ON READ PORTION
D800 DBFF	20	10	1K BLOCK; ENABLED ON *WRITE PORTION
DC00 DFFF 	20 	15	1K BLOCK; ENABLES KEYBOARD ON READ
DC00 DFFF 	20 	11	1K BLOCK; ENABLES KEYBOARD ON *WRITE
E000 FFFF 	23	7	8K BLOCK; ENABLES ACIA AND MONITOR
				ROM DECODING
F000 F0FF 	17 	12	256 BYTES; *ACS ENABLES ACIA ASSUMING
				A11,A10 = 0
F100 F1FF	17	11	256 BYTES, ASSUMING A11,A10 = 0
F200 F2FF	17	10	256 BYTES; ASSUMING A11,A10 = 0
F300 F3FF	17	9	256 BYTES; ASSUMING A11,A10 = 0
F400 F4FF	17	12	256 BYTES; ASSUMING A11 = 0, A10 = 1
F500 F5FF	17	11	256 BYTES; ASSUMING A11 = 0, A10 = 1
F600 F6FF	17	10	256 BYTES; ASSUMING A11 = 0, A10 = 1
F700 F7FF	17	9	256 BYTES; ASSUMING A11 = 0, A10 = 1
F800 FFFF 	19	6	2K; *MCS - ENABLES MONITOR ROM

-----------------------------------------------------------------------

Changes from the original article:

1. Original text used a bar over mnemonics to indicate active low.
   Here, it is represented with a preceding '*' character.
2. Several obvious typos in the tables fixed.

