UCart for Commodore 64
UCart was a cartridge designed for arcade implementations of C64 used in Poland (in one place). This cartridge has 27512 EPROM to store one game and runs it as C64 starts. Few years ago UCart came out in C64 forum, its author Suchy, released schematics and ROM dump, then someone reverse-engineered its loader, called Cartridge OS or SysOp here. This system, written by author, had to occupy a whole one 8K bank of EPROM. Wegi described schematic and principle of operation, then re-written OS: this one was better, but it still launched 1 program only. How to put more PRGs on cartridge?
I tried to modify Wegi's SysOp to add this menu. As I have no
experience in C64 machine code, result is buggy and slow. It has a bug
which makes some interrupt-sensitive programs not run, I solved it before adding
programs by compressing program with loader, for example using PUCrunch or
Exomizer. Menu-based SysOP, called SysOp 2.8, allowed to store up to 8 programs
in cartridge and select them from menu.
Later I decided to change hardware a little, to change cartridge's turning off mechanism. By modifying it I got one more address line, allowing to use 27010 EPROM and to run up to 16 programs from it (but in this situation each program is max. 8kB, first ~7,5kB). To support it I modified SysOp making version 2.16. System is still buggy.
This is a schematic of my hardware implementation of UCart, this implementation allows to run programs using Wegi's SysOp or menu-based SysOp 2.8. It uses quite rare 74000 circuit, so it's better to use some NOR gates from, for example 74LS02, as in original schematic was.
It uses hex, not decade counter and uses NAND latch to lock cartridge out after copying memory. One free NAND gate is not connected.
To make ROM go to next 8kB bank, it makes "Click", "Click" is made by access to certain place in memory making IO1 pin flip the counter. In 2.16 there are 2 types of Click, one for bank changing (IO1), one for locking cartridge out (latching /EXROM high) - IO2.
After powering on reset goes low for a moment and everything is set to zero, /Exrom is low. Boot part starts from EPROM and initializes computer. In my cartridge it shows a menu. In Wegi's it goes straight to copying. After displaying a menu it waits for key, then copies rest of routine to screen memory and runs it from there. Now it can switch EPROM contents by clicking. It makes some count of "clicks" to get to needed bank (depending on a key), then copies everything from bank, clicks to next, copies etc. As it's buggy it may copy blank RAM to blank RAM or do something other such stupid but it works. After copying it switches cartridge off (in Suchy/Wegi/2.8 by another click it locks automatically, in my by clicking IO2), then runs copied program from RAM.
MAKING CARTRIDGE ROM IMAGE FILE FROM PRG:
1. Copy SysOp, then PRG 1 without first 2 bytes, if any other program must be added, pad with zeros to next multiply of 8192, next program without first 2 bytes, etc.
2. Configure and build SysOp source, update it (make it the same size!), try the image in C64. It's good to make a cartridge prototype with socket.
CARTRIDGE IMAGE SOFTWARE (PC side):
Highly unstable, experimental, with many quick-and-dirty fixes. Written in Qt 4.8, can be compiled in Debian and Windows.
- My SysOps 2.8 and 2.16 (assembly
sources and binaries - binaries can be hex-patched to fullfill needs)
- Builder and its source. (you will probably need Qt Gui and Qt Core libraries).
- Windows Qt 4.0 runtime DLLs needed to run Builder: Part1, Part2
PROTOTYPES PHOTOS (switch is to select upper/lower part of 010 circuit in 2.8, which needs only 512):