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.
magic readsequence
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.
key | memory configuration |
---|---|
a‒z | jump to the next item starting with the letter |
A‒Z | 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 |
f1‒f8 | 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.prg
flash.s
flash4file.prg
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.
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:
LOAD"ULTIMEM.PRG",8,1
RUN
Press f5 and f7, then type
LOAD"SJLOAD$B0.PRG",8,1
NEW
SYS45056
Alternatively, press f5, 4, and f7, then type
LOAD"SJLOAD$04.PRG",8,1
SYS1024
Now that the fastloader is installed, you can proceed to the next step.
Load the loader:
LOAD"FLASH4FILE.PRG",8,1
LIST
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
.
SYS4130"ULTIMEM8M.BIN",0
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:
reference implementationsof bank-switched memory expansions