Hardware changes required to allow it to work with +3 Roms

From Grahams Wiki

Jump to: navigation, search
Spectrum +2 with +3 roms


The original +2 by default only has 32k of ROM. There are certain advantages to modifying to use +3 roms, not least of which is the better syntax of some of the commands, and the ability to use the +3e roms with a simple hard drive interface, and its ROM bug fixes.

This modification isn't complete though. It provides the extra ROM line, and can be used to provide the Centronics Strobe and Floppy disk motor control line, however, as the RAM select for the lower 48K is controlled by the ULA, the +3's extra special mode ram paging where all 64k is RAM, cant be provided, therefore, even if i put a floppy drive interface on the +2, i couldn't use +3 bootable disks. (Ones that use machine code loaders off Track 0, rather than a file called "DISK", which will still work)


There are three independant changes required to allow this.

Contents

[edit] Better decoding of the 7FFD port

By default, the 7FFD port on the speccy 128 is decoded using %0XXX XXXX XXXX XX0X (Ie, A15 and A1) the +3 requires a port on 1FFD to handle the extra bit of ROM address. However, if you out to 1FFD on the +2, 7FFD will get it as well. for example, in 128 basic, try out 8189,0 and watch your computer crash.

Fortunately, 7FFD port is actually a 74 chip on the board, and is clocked via resistor. You can pull out one end of this resistor and add some extra decoding there on A14 and A13. with 7400 chip. Note that its important to pull out the bottom of the resistor, because the top connects with the chip. The wire from the resistor itself is "OUT" and the hole it came from is IN. In the pictures, you can also see the wires to some through holes near a capacitor, which is tapped for the +5v and 0v supply needed for the board.

When it was all tested and working, i wrapped the circuit in insulation tape, and put stickers on the plugs and the board itself with the pinouts on them. (This is because i am rotten with documentation, and would have forgotten what all the wires do by the next day.

Testing is simple. as the board is wired into the memory control, The board will make the computer either work or not work.

  • Does the computer boot up?
  • If so, go to basic and type out 8189,0
  • If it worked, the computer shouldn't crash.

[edit] Addition of the 1FFD port

This is a bit more complex. There are an number of ways of doing this. If you have any sense, you will use a 74ls174 because it has a built in reset pin you can connect directly to the reset line, and use the existing IN signal. Sadly, I was having an off day, and used a 74ls573, which lacks such nicety's. so I had to fiddle a flip flop from a LS00 connected to the output enable, (Disable when reset, enable when port is written to) and some pull down resistors because the eeprom I used doesn't like floating pins.

Required decoding is

$0001 xxxx xxxx xx0x

Sadly, I didnt get any images of the board before i covered it in insulation tape.

I carefully soldered to the far edge of the edge connector, so i can still use peripherals.

In theory to use the +3 roms, i only actually need the D2 latch. I connected the MSB to D1 (Which is unused by +3Dos) which means i have an extra 64K to mess around with if I can be bothered. Likewise, D3 and D4 could be used to implement a disk motor connection if I decide to implement it. (I have got a spare uPD765, although I am missing a spare PLL), and more realistically, the centronics interface strobe.

[edit] Rom socket

The rom is slightly more of an issue than quite frankly it should be. The original Rom is 32k, the one we want to replace it with is 64k . Most Rom chips have a similar pinout, and both 32k 27256 and 64k 27512 roms are almost identical. The difference being pin1 on the 512 being A15, and on the 256 being VPP. (And VPP being moved to pin 20, so it can be ignored) In theory, all i have to do to use this with the 1ffd latch is to bend pin 1 up carefully, solder it to a wire, and attach it to Q2 of the latch.

However, i wanted to use an EEprom, as although I have a programmer, I dont have an Eprom Eraser, for when I am fiddling with new software.

Unfortunately, the EEprom version, (28512) appear to be impossible to find, so I used a 281008 which is a 128kx8. The issue with this is that 128k roms are 32 pin instead of 28 pins, so I had to make an adapter. Fortunately, this is relatively simple, as the majority of the pinout is the same.

Mostly its a passthrough except for Pin1 and Pin28 on the socket. These had to be snapped off and pins soldered in their place. Pin1 is held low (as its the programming voltage), Pin2 and Pin3 are the extra address pins to make it 128k, These, i tie to ground via 100 ohm resistors to make up for the mistake i made in the latch above.

Pin 32 and 31 (VCC and /Write enable) Pin 30 is technically NC on this chip, but on 256kx8, it is A17, so its best to tie it low.

A flying lead goes to pin 2 and 3, which is A15 and A16. A15 goes to the 1FFD output Q2, and I am connecting A16 to Q1, as its unused as least for testing.

[edit] Extra modification

Possibly the simplest of my mods is a switch which controls the upper bits of the rom paging.

The ROM is 128k. For the +2E mod, only 64K is used.

Its nice to have the rest doing something. In this case, I decided the ability to switch back to the old +2 roms, and original 48k roms would be useful, Especially as making a keypad would be a good project at some stage.

As such, the ROM is programmed as follows:

$00000	----------------------
	| +3e Rom 0 (system) |
$04000	----------------------
	| +3e Rom 1 (Editor) |
$08000	----------------------
	| +3e Rom 2 (+3DOS)  |
$0C000	----------------------
	| +3e Rom 3 (48K)    |
$10000	----------------------
	| +2 Rom 0 (Editor)  |
$14000	----------------------
	| +2 Rom 0 (48K)     |
$18000	----------------------
	| Original 48K rom   |
$1C000	----------------------
	| Original 48K rom   |
$1FFFF	----------------------

Note that the 48K roms in the +3 and the +2 are subtly different from the original one, and its nice to have the original. I two copies of it so the state of the 1FFD bit doesn't matter. Note that RAM Paging can still be changed in this mode.

If the switches are be Break before make types, you can forget about the 1K resistor to VCC, but its probably best to leave it in anyway. (Its there to avoid shorting out the power if they are switched with the power on). Also, the exact value isnt important.

Its probably safe to switch them with the power on, but it will pretty much always crash the computer.

Logic:

  • +2E rom:
    • A15 controlled from 1FFD
    • A16 = 0
  • +2 rom:
    • A15 = 0
    • A16 = 1
  • 48K rom:
    • A15 = 1
    • A16 = 1