The SP512 is a 512K RAM expansion for the CPC464 made by Vortex GmbH which is is fitted inside the CPC464.
There are 3 connections to the main CPC464 P.C.B.
The SP512 can't be fitted to:
Reason: The Gate-Array is of a different design and is soldered to the main P.C.B.
Reason: The Gate-Array and Z80 CPU are sited in positions which the SP512 can't connect to.
Reason: These two use a new design with an ASIC which is soldered to the main P.C.B. The SP512 can't connect to this.
It is not worth the effort trying to connect the SP512 to the above computers when there are alternative RAM expansions available.
Image showing top of SP512 RAM expansion P.C.B.:
In the middle is the socket for the Z80 CPU. Above that socket is the cable and connector which connect to the site of the Z80 CPU on the main P.C.B. To the right are two sockets for different versions of the Gate-Array. Above those sockets is the cable and connector which connect to the site of the Gate-Array on the main P.C.B. Notice the three positions that the lead can be put into. In this picture, the lead is in position 2. Position 1 is obscured by the lead.
Image showing bottom of SP512 RAM expansion P.C.B.:
The SP512 has an on-board 16K EPROM which contains B.O.S (Banked Operating System) which is assigned to ROM position 6. This assignment is fixed and the ROM can't be disabled, so if you want to use a ROM board ensure position 6 is not used.
When the computer is turned on the message "BOS 2.1 SP512 (C)1987 vortex GmbH" is displayed followed by a short pause. RSX commands are now available. (Technical Note: B.O.S hooks into 'KL FIND COMMAND' to provide it's commands instead of using the recommended 'KL LOG EXT').
There are two versions of the Gate-Array, '40007' and '40010'. These may be marked on the P.C.B. Otherwise this is how you can identify them:
For the '40007', carefully remove both the Gate-Array and both pieces of metal together. Do not seperate.
For the '40010', use an I.C. lifting tool or follow the tip below.
Tip for removing ICs:
You can remove ICs using a flat head screwdriver. Put the head of the screw driver under the IC at one end of the socket and lever it up gently. Do the same on the other side. Repeat on both sides until the I.C. can be removed from the socket. Be careful not to break any it's feet. If any feet have bent, then carefully straigten them back into position. If any feet have broken then you have to find a replacement IC.
NOTE:
There are two sockets that the Gate-Array can fit into.
Either of these may be fitted to your CPC464 and with some P.C.B. designs there is often space for both. My CPC464 had a 40010 type.
To find the appropiate position:
Removal of the SP512 is almost the reverse of fitting.
There are two versions of the Gate-Array. One is marked '40010', the other has a flat piece of metal stuck to the top of it with white paste, this is the '40007' type. For the 40007, remove both the IC and the metal together. Do not seperate.
This image shows the CPC464 main P.C.B. before the RAM expansion is fitted. From this picture you can see the original locations of the Z80 CPU and the Gate-Array:
This image shows the CPC464 main P.C.B. after the RAM expansion is fitted. Notice the P.C.B. of the RAM expansion, the new location of the Z80 CPU and Gate-Array:
The information in this section is incomplete. I do not have a manual for the SP512 so I have discovered these commands and their functions by disassembling B.O.S.
(Located at &D720 in B.O.S. ROM)
Not known at this time.
(Located at &D7F0 in B.O.S. ROM)
Not known at this time.
(Located at &C56E in B.O.S. ROM)
Not known at this time.
(Located at &C5E9 in B.O.S. ROM)
Not known at this time.
(Located at &C7F0 in B.O.S. ROM)
Not known at this time.
(Located at &C7BC in B.O.S. ROM)
Not known at this time.
(Located at &C790 in B.O.S. ROM)
Not known at this time.
(Located at &D082 in B.O.S. ROM)
Not known at this time.
(Located at &D0BB in B.O.S. ROM)
Not known at this time.
(Located at &C6C7 in B.O.S. ROM)
Not known at this time.
(Located at &C32F in B.O.S. ROM)
Produces an error if disc interface is not connected.
Not known at this time.
(Located at &C32F in B.O.S. ROM)
Produces an error if disc interface is not connected.
Not known at this time.
(Located at &D680 in B.O.S. ROM)
Not known at this time.
(Located at &D572 in B.O.S. ROM)
Not known at this time.
(Located at &D650 in B.O.S. ROM)
Not known at this time.
(Located at &C474 in B.O.S. ROM)
Not known at this time.
(Located at &CC43 in B.O.S. ROM)
|PEEK,<RAM bank>,<address>,@<byte>
<RAM bank>: See table below. Range 0-8.
<RAM bank> | Description |
---|---|
0 | Main RAM of CPC464 |
1 | 1st bank of 64K RAM on SP512 RAM expansion |
2 | 2nd bank of 64K RAM on SP512 RAM expansion |
. | . |
. | . |
. | . |
8 | 8th bank of 64K RAM on SP512 RAM expansion |
<address>:memory address within 64K block. Range 0-65535 (&0000-&ffff)
<byte>: integer variable to receive value of data.
a%=0:|PEEK,0,16384,@a%
Read the value from address 16384 in the main CPC464 RAM and put result into variable a%.
a%=0:|PEEK,1,16384,@a%
Read the value from address 16384 in the 1st 64K RAM of the SP512 RAM expansion and put result into variable a%.
(Located at &CCE6 in B.O.S. ROM)
|POKE,<RAM bank>,<address>,<byte>
<RAM bank>: See table below. Range 0-8.
<RAM bank> | Description |
---|---|
0 | Main RAM of CPC464 |
1 | 1st bank of 64K RAM on SP512 RAM expansion |
2 | 2nd bank of 64K RAM on SP512 RAM expansion |
. | . |
. | . |
. | . |
8 | 8th bank of 64K RAM on SP512 RAM expansion |
<address>:memory address within 64K block. Range 0-65535 (&0000-&ffff)
<byte>: byte to write. Range 0-255 (&00-&FF)
|POKE,0,16384,255
Poke 255 to memory address 16384 in main CPC464 memory.
|POKE,1,16384,254
Poke 254 to memory address 16384 in 1st 64K RAM bank of SP512 RAM expansion.
(Located at &CC75 in B.O.S. ROM)
Not known at this time.
(Located at &C69A in B.O.S. ROM)
Not known at this time.
(Located at &C523 in B.O.S. ROM)
Not known at this time.
(Located at &C483 in B.O.S. ROM)
Not known at this time.
(Located at &D1DA in B.O.S. ROM)
Not known at this time.
(Located at &D2F7 in B.O.S. ROM)
Not known at this time.
(Located at &D3B7 in the B.O.S. ROM)
Not known at this time.
(Located at &F0C0 in the B.O.S. ROM)
At the '*' prompt you can single character commands, or press ESC to return to BASIC. A command may have 0 or more parameters. Pressing ',' will allow you to enter the next parameter.
Legend:
Values given in angle brackets '<' '>' define parameters that can be entered.
[] surround optional parameters.
Example syntax:
M<start address>[,<end address>]
Command is 'M'.
<start address> is the first parameter and is a 4 digit hexidecimal value. Pressing ENTER at this point will execute the command using the <start address> parameter. But if you press ',' instead of ENTER, then you can enter the the optional <end address> parameter. Pressing ENTER now will execute the command using both the <start address> and <end address> parameter.
B
Set the memory address for each of the 8 breakpoints.
Pressing B will show the following:
*B -B1- -B2- -B3- -B4- -B5- -B6- -B7- -B8- 0000 0000 0000 0000 0000 0000 0000 0000
The first breakpoint will be selected. You can enter the address of the breakpoint (enter all 4 hexidecimal digits), or press RETURN to keep the current breakpoint and select the next.
Press ESC once at any time to return to the monitor prompt.
Set the breakpoint address to '0000' to disable that breakpoint.
D<start address>[,<end address>]
Display a dump of the memory.
Shows memory bytes and their ASCII equivalent.
You must enter a start memory address, and an optional end memory address.
Each line shows the data for 16 consecutive memory addresses.
The first column shows the memory address. The next 16 columns show the bytes. The last column shows the ASCII for each byte.
F<start address>,<end address>,<byte>
Find a byte of data (<byte>) between <start address> and <end address> inclusive. Displays a list of memory addresses where the byte is found.
G<address>
Unknown function at this time.
I<filename>
Reads the binary file named <filename> into memory at the start address specified in it's header.
NOTE: It is not possible to define where the file is loaded into memory.
O<filename>,<start address>,<length>,<execution address>
Writes the data between <start address> and <end address> inclusive to the file called <filename>. The file is saved as binary and will have the execution address defined as <execution address>. When 'RUN' from BASIC, the file will be loaded to <start address> and executed at <execution address>.
Pressing ESC during the operation will abort the save and return back to the monitor prompt.
L<start address>[,<end address>]
Displays a dissassembly listing starting at <start address> and ending at <end address> (if specified). If <end address> is not defined, will show 24 lines of dissassembly.
Pressing ESC once will pause the output, pressing any key will then resume output. Pressing ESC twice during output will return to the monitor prompt.
First column shows memory address. Second column shows Z80 instruction opcodes in hexidecimal. Third column shows mneumonic for Z80 instruction.
Example:
*LF0C0 F0C0 F5 PUSH AF F0C1 3E02 LD A,&02 F0C3 CD0EBC CALL &BC0E F0C6 CDA4F1 CALL &F1A4 . . .
S<start address>
Modify data in memory a byte/address at a time.
Example:
*SFF00 FF00 DD DD FF01 E5 E6
First column shows memory address. Second column shows original data value, third column shows new value. For each memory address you can press ENTER to leave the byte as it is, or enter the new value (2 hexidecimal digits) and press RETURN to write the modified value to memory. Pressing ESC once will return to the monitor prompt.
Function not known. Enable/Disable output to printer?
T<address>[,<count>]
Unknown function at this time.
R
Displays the Z80 register values and allows you to alter them.
Pressing R shows:
*R -AF- -BC- -DE- -HL- -IX- -IY- -SP- -XP- FFFF FFFF 0000 FFFF BFFE 7D43 BF7C FBFF
The first register pair (AF) is selected. You can enter the new value for the register pair by entering a 4 digit hexidecimal value. Pressing ENTER will select the next register pair (BC). Pressing ESC once will return to the monitor prompt.
M<start address<,<length>,<destination address>.
Move the memory data starting at <start address< with length <length> to the address given as <destination address>.
Unknown function at this time
Y<byte>
Unknown function at this time.
Z<byte>
Unknown function at this time.
(Located at &FEF9 in B.O.S. ROM)
Not known at this time.
(Located at &F1A4 in B.O.S. ROM)
Used to speed up drawing of characters in screen mode 2. Doesn't work in screen mode 0 or 1.
Not known at this time.
(Located at &BB51 in B.O.S. ROM)
Restores original method of drawing characters for screen mode 2.
Not known at this time.
(Located at &C173 in B.O.S. ROM)
Can be used to disable B.O.S.
Not known at this time.
(Located at &C2F0 in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
(Located at &E04B in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
(Located at &E23B in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
(Located at &DF46 in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
(Located at &E21C in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
(Located at &c348 in B.O.S. ROM)
Not known at this time.
(Located at &E1C9 in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
(Located at &E1C0 in B.O.S. ROM)
Not known at this time.
(Located at &E2E9 in B.O.S. ROM)
Not known at this time.
(Located at &E2B1 in B.O.S. ROM)
Produces an error if disc interface is not fitted.
Not known at this time.
See |SELECT
(Located at &D9DB in B.O.S. ROM)
Not known at this time.
(Located at &CB43 in B.O.S. ROM)
Not known at this time.
(Located at &CBDF in B.O.S. ROM)
Not known at this time.
(Located at &CD5A in B.O.S. ROM)
Re-directs output to printer or a file.
Not known at this time.
(Located at &CD53 in B.O.S. ROM)
See |SPOOL.ON
Not known at this time.
(Located at &CD4B in B.O.S. ROM)
See |SPOOL.ON
Not known at this time.
(Located at &C913 in B.O.S. ROM)
Not known at this time.
(Located at &CAC5 in B.O.S. ROM)
Not known at this time.
(Located at &c711 in B.O.S. ROM)
Not known at this time.
(Located at &C6F2 in B.O.S. ROM)
Not known at this time.
(At &C6E6 in B.O.S. ROM)
Not known at this time.
(Located at &D02E in B.O.S. ROM)
Not known at this time.
(Located at &D10C in B.O.S. ROM)
Not known at this time.
(Located at &D125 in B.O.S. ROM)
Not known at this time.
(Located at &CD16 in B.O.S. ROM)
Not known at this time.
(Located at &C81D in B.O.S. ROM)
ROM Startup function. Installs RSX commands.
This section describes how you can access the RAM of the SP512.
The exact decoding (e.g. complete or partial) of I/O port addresses is not confirmed at this time.
The port addresses given are recommended and are those used by B.O.S..
I/O port &FBBD:
Bit | Function |
---|---|
7 | Unknown |
6 | Unknown (Discology utility uses it - does it choose RAM in 32K blocks instead of 64K blocks??) |
5 | When 1, bits 2..0 define which 64k block of SP512 RAM to select. When 0, chooses internal 64K RAM of CPC464. |
4 | Unknown |
3 | Unknown |
2..0 | Used to choose the 64K block of the SP512 to select |
I/O port &7F00:
Bit | Function |
---|---|
7 | Set to 1 |
6 | 1 = make RAM visible in range &8000-&FFFF, 0 = make RAM visible in range &0000-&7FFF |
5 | Set to 1 to activate SP512. If bit 5 of &FBBD is 1 will select SP512 ram, otherwise select RAM of CPC464. |
3 | 1 = Upper ROM disable, 0 = Upper ROM enable |
2 | 1 = Lower ROM disable, 0 = lower ROM enable |
1,0 | Screen mode |
Notes: