Easy ROM Switcher for the RC2014 Classic

273 views
Skip to first unread message

Le Fauve

unread,
Mar 6, 2023, 10:25:37 PM3/6/23
to RC2014-Z80
Hi,

I made this thing a while ago, to make it easier to switch between BASIC and the SCM on my RC2014 Classic:
ROM-Switcher-1.jpg

It plugs on the 3 rows of jumpers, and require a connection to the RESET signal on the bus:
ROM-Switcher-2.jpg

The principle is that an ATtiny13A is generating the 0 or 1 values on the 3 highers address bits of the ROM chip, which selects the active ROM bank.

When the RESET line is pulled down for more than 2 seconds, the selected ROM changes.
When the RESET line goes up (when you release the RESET button), the currently selected bank number is stored in the ATtiny13A internal eeprom while the RC2014 reboots on the selected ROM image.

Here is a very quick video showing how to switch from ROM image 0 (BASIC 4.7c) to image 3 (BASIC 4.7b + Phil G's Monitor): https://youtu.be/7Xc3uBmUOsk

I made this about 2 years ago, and it has worked fine since then, so I suppose we can call it a working solution (as you can see from the picture, I used a dupont pin to connect the reset wire, so I could remove it easily in case it wouldn't work :o) ).

The jumper on the top allow to select the ROM size between 64KB and 32KB. That was convenient for me because I'm using AT28C256 eeproms, and it allows changing the ROM size without having to reprogram the ATtiny.

I made this for the old Switchable ROM module.

It should work with the Banked ROM module of the RC2014 Classic II, but you may have to redesign the PCB because the jumpers seems to have been rotated on the new design and I'm not sure there will be enough room between the jumper pins and the backplane.

I'm not sure about the Micro and the Mini, but that should be fine too if you can make it fit (the order of jumpers have changed (A14, A13, A15 => A13, A14, A15), but I use "natural" order to increase the bank number so that shouldn't be an issue (except perhaps with 32KB chips?)).

Also as you can see on the video, the ATtiny ends up blocking a part of the next backplane connector. That wasn't an issue for me because on the "classic", the clock and reset module only uses the middle part of the connector, but you may have to relocate your ROM module on the front connector.

There is also a 2 pins connector next to the ATtiny. That gives you Vcc and GND.
I added it to have an easy way to plug my logic probe, but since I kind of forgot to add a decoupling caps to the ATtiny, that's a good spot to add one (on the board I'm using, I put the caps on the back of the PCB).

I can probably dig out the Arduino source code and the Gerber files (or even the KiCad files) if anyone is interested.

I choose the ATtiny13A because at the time that was the cheapest MC with enough pins that was easily available, but you can probably use any other ATtiny with the same number of pins (I prototyped with an ATtiny85 I had around).

Note that some of those will come with an Arduino bootloader. You will have to remove it because that would delay the starting of your program (the bootloader on Digispark boards waits for one full second), and it will prevent the ROM bank to be selected fast enough on power on.

I used a very cheap external programmer (FabISP clone, about $3 on aliexpress) but you may be able to use a TL866, or an Arduino UNO as a programmer.

Don't hesitate to ask if you have questions :o).

I have a couple of PCB lefts if you are interested, but keep in mind that will probably only fit a "classic" (and perhaps a "classic II") model.

Cheers,
Eric
 

Spencer Owen

unread,
Mar 7, 2023, 7:06:16 AM3/7/23
to rc201...@googlegroups.com
That is great!

I was wondering about your solution and as I thought about it, I came to a similar conclusion.  It is very similar to the ZX SpectROM module I designed that use an ATTiny85 to switch the high address lines on a ROM, although I used the micro either as a timer, or to detect a dedicated switch.  

That is very neat though.  I think I changed the layout of the ROM jumpers on almost every kit I make, so you're probably right that it won't fit directly on to the Micro, Mini or Classic II - although I'm sure that with taller headers it would work with any of them.

The component I showed in the other thread is similar to one of these https://uk.rs-online.com/web/p/pushwheel-switches/3609739 (although rescued from some decommissioned electronics. I wouldn't pay THAT much money for one!), and it's 4 bit, so will switch between a theoretical 16 banks - however, I'm only using 3 bits, so it just does 8, the same as your one.

Cheers

Spencer

--
You received this message because you are subscribed to the Google Groups "RC2014-Z80" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rc2014-z80+...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/rc2014-z80/efd26df9-1fc0-4e6d-b24b-8b8fd8852640n%40googlegroups.com.

TonyD

unread,
Mar 8, 2023, 4:52:49 AM3/8/23
to RC2014-Z80
Eric that's a really cool solution, I would be interesting in seeing the Arduino code and Kicad files


Spencer, sorry for asking a non-RC2014 question, your ZX SpectROM shows a ROM with Manic Miner but I don't remember this being a ROM game, does the ZX SpectROM load the ROM into RAM?

If that's the case how did you do it?

cheers

Tony

Spencer Owen

unread,
Mar 8, 2023, 5:25:15 AM3/8/23
to rc201...@googlegroups.com
Hi Tony,

You're right.  Manic Miner *was* tape only.  Almost any 48k Spectrum game can run off of the ZX SpectROM though with a bit of tinkering :)

From a Spectrum emulator running Manic Miner (or any other software) take a memory dump of the 48k of RAM.  This is then split in to 3 x 16k chunks but with a little bit of code added to the start of each chunk, and burned to ROM.  When the ZX SpectROM starts up, the Spectrum ROM is disabled.  Code at the start of the first 16k of the ROM copies the 16k bank to it's original location in RAM.  The ATTiny then pages in the next 16k bank and this is also copied to its original location in RAM, and again for the 3rd bank.  The ATTiny then turns the ROM off, which re-enables the Spectrum ROM.  It takes about 0.7 seconds to load a 48k game that way, which is somewhat quicker than the old cassette was :)

Spencer

Phil G

unread,
Mar 8, 2023, 2:54:56 PM3/8/23
to RC2014-Z80
I use these in my internet radios, same thing, 16 way hex switch but a bit cheaper...  OOS at the moment (isnt everything)

Le Fauve

unread,
Mar 9, 2023, 1:40:50 AM3/9/23
to RC2014-Z80
On Tuesday, March 7, 2023 at 10:06:16 PM UTC+10 Spencer Owen wrote:
That is great!

Thanks!
That's the first project I made completely from the basic idea to the finished PCB. To be completely honest I was kind of in shock when I realized the first version actually worked :o)

That is very neat though.  I think I changed the layout of the ROM jumpers on almost every kit I make, so you're probably right that it won't fit directly on to the Micro, Mini or Classic II - although I'm sure that with taller headers it would work with any of them.

As long as you have 3 columns of connectors, one of Vcc, one that goes to the address lines and one of Gnd, and if you plug it in the correct orientation, it should work with 64KB chips.
The only issue is with 32KB chips (at least with the 28C256 I'm using) because they require Vcc on pin 27 (which is at the same position than A14 on the 27C512).
That's the reason of the one jumper on the PCB: It connects directly the top jumper to Vcc, no matter what ROM bank is selected.

I suppose that if you really want to use a 28C256 on a classic II/mini/micro, and you don't want to make your own PCB you could just rewrite the Arduino code to force A14 to Vcc and only modify A13 and A15 to switch ROM banks (A13,A15 on 27C512 correspond to A13,A14 on 28C256) but you will lose the possibility to use a 64KB ROM chip.

The component I showed in the other thread is similar to one of these https://uk.rs-online.com/web/p/pushwheel-switches/3609739 (although rescued from some decommissioned electronics. I wouldn't pay THAT much money for one!), and it's 4 bit, so will switch between a theoretical 16 banks - however, I'm only using 3 bits, so it just does 8, the same as your one.

I always loved those mechanical components, but sadly they always seem to be priced like they're made of solid gold :o)

On Wednesday, March 8, 2023 at 7:52:49 PM UTC+10 TonyD wrote:
Eric that's a really cool solution, I would be interesting in seeing the Arduino code and Kicad files

Thanks Tony :o)
I will look into how to put this on Github this week-end.

That may be tricky because I'm using my own local Git server, and I think I'll have to add a second remote pointing to github.
I've never made this before  and I have no idea how to make it work painlessly, so if someone has advises I'll gladly accept them :o)
(what I want to do is to still have my local Git repository as "reference", but to have the possibility to push my master branch to the Github repository whenever the local repository is in a stable state).

Cheers,
Eric

Dominique Meurisse (MCHobby)

unread,
Mar 21, 2023, 10:44:20 AM3/21/23
to RC2014-Z80
Really nice idea and neat implementation
Dominique
Reply all
Reply to author
Forward
0 new messages