Marko Mäkelä’s old computers: UltiMem

The UltiMem is an all-in-one cartridge for the Commodore Vic-20 that consists of in-system programmable Flash ROM and RAM, enough for storing and running almost all Vic-20 software ever produced.

The UltiMem is a spiritual successor to my Vic Flash Plugin, of which only some prototypes were built. In 2015 and 2016, I ported the software that I had originally written between 2000 and 2010.

You can try the UltiMem in VICE, starting with release 2.4.25.



Menu Software

The menu software automatically selects the correct RAM expansion type for program images. The selection can be influenced at image creation time.

By holding a key during hardware reset or pressing a key in the menu, you can enter the Commodore BASIC interpreter in different memory configurations:

key memory configuration
STOP unexpanded (3583 bytes free)
3 3 KiB memory expansion (6655 bytes free)
8 24 KiB memory expansion (28159 bytes free; compatible with 8 KiB and 16 KiB)

If you additionally hold the SHIFT key, you can hide the configuration registers until hardware reset, for maximum compatibility with programs that write to normally unmapped address space.

The menu software is accessed by the keyboard as follows.

Keyboard assignment in the menu software
key memory configuration
az jump to the next item starting with the letter
AZ jump to the previous item starting with the letter
CRSR⇅ line down
SHIFT+CRSR⇅ line up
CRSR⇆ page down
SHIFT+CRSR⇆ page up
HOME first item
SHIFT+HOME last item
RETURN activate the selected item
SHIFT+RETURN activate the selected item, hiding the configuration registers
f1f8 activate the menu item assigned to the key (if any)


All software is licensed under the GNU General Public License, either version 2 (or at your option) any later version of the license. The 6502 software has been translated with the XA (xa65) cross-assembler.

The packages contain the source code and precompiled binaries. You can test xvic -ultimem ultimem8m-s.bin (in VICE 2.4.25 or later).
UltiMem 1.0.1 release, 2016-07-11, with the following changes.
Change the UltiMem logo colors.
Indicate with the LED when an operation is in progress.
Preserve the BLK1,BLK2,BLK5 memory configuration.
The Installation section.
UltiMem 1.0 release, 2016-06-24.


Copy flash4file.prg and a .bin file to a medium that is accessible from a Vic-20 that is equipped with the UltiMem. Start the Vic-20 in unexpanded memory configuration.

Enabling a Fastloader

Because flash4file.prg uses the KERNAL file routines for loading the data, it is slow. The good news is that fastloaders should work. If your storage device implements the JiffyDOS protocol but your Vic-20 is not equipped with JiffyDOS, you can load an external fastloader prior to loading and starting flash4file.prg. The SJLOAD-20 release 07 comes in two precompiled variants, both residing in extended memory. Because the UltiMem starts up in unexpanded configuration by default, you will have to change the memory configuration first:


Press f5 and f7, then type


Alternatively, press f5, 4, and f7, then type


Now that the fastloader is installed, you can proceed to the next step.

Installation from a File

Load the loader:


You should see one line:

2016 SYS4130"ULTIMEM.BIN",00:::::

Invoke the program by typing the SYS statement. The first parameter is the image file name, and the second one is the device number (0 to use the last accessed device). You can also edit this line in place (avoid changing the length of the line!) and type RUN.


The UltiMem LED will flash while the operation is in progress. You may want to turn off the screen. Even with SJLOAD-20 and sd2iec, it may take 30 to 60 minutes to program the entire 8 MiB flash.


I would like to express my thanks to the following people:

Jim Brain for
The VICE team for
my sons Väinö and Otso for
my wife Heli for