Intro
I've had the intention of putting together a C64 single-load PRG games collection for a long time. Spending more time at home recently as a result of the COVID-19 pandemic has given me the impetus to finally make my idea a reality. And thus the OneLoad64 Games Collection is born. Although I have primarily created this collection for my own personal use, I thought it'd be worthwhile to share it, as there may to be other Commodore 64 fans who will find it useful. It currently contains over 2000 unique games.
The key objectives of this project are:
- Have single-load games that can be loaded quickly in C64 emulators.
- Make the loading experience feel a little more like using cartridge images.
Background
I do enjoy and appreciate scene releases with the extras they contain such as great intro effects and tunes, trainers, fixes and docs (especially the more recent 'jewel' releases). But as I've recently been playing C64 games with my 8 year old son, I wanted a collection without additional menus and decrunching steps to minimise the fuss of playing games. And although it's rather nostalgic watching games load from tape when going for that truly authentic experience, the vast majority of the time I just want to load and play the games as quickly as possible. I also wanted the collection to be a little more frontend and cab friendly. This allows me to enjoy my childhood favourites with my kids and friends more easily.
Whilst there are of course some excellent existing resources that provide some games that start directly (i.e. cartridge dumps or examples within collections such as the famous Blast from the Past series and other more recent curated fan collections), I wanted a collection where every PRG worked this way. I've written a tiny loader stub in 6502 assembly which utilises the technique of modifying the C64s jump vector table for auto-loading, which complements the ability of C64 emulators to inject them directly into the emulated C64s RAM for fast loading.
The Collection
This is just the first release and I plan to continue adding new games over time. Each entry includes the original image file (.TAP, .D64, .G64), the memory dump, an XML metadata file recording the dump specifics (e.g. initial memory bank and interrupt setup, patching notes etc), plus two PRG files:
- The first contains the tiny loader stub and is to be used with emulators. These are not intended for use on real hardware due to their size (they represent almost the full 64kb of memory). They may also not play nicely with other hardware such as cartridges due to their arbitrary modification of the system jump vector table.
- The second is a crunched self-extracting version which can be used on real hardware, using floppies or newer storage solutions such as the BackBit, EasyFlash cartridge, SD2IEC, 1541 Ultimate, Tapecart etc. These are created with the fantastic Exomizer compression tool which adds an additional short decrunching step when loading and are denoted by the trailing "-[ex]" in their filename.
It is also important to point out that these are not cracks, although some of the games have been patched to alter their behaviour such as within intro routines or remove protection/obfuscation mechanisms. Fortunately most are dumped from original tape images, so in reality most don't have any real protection to speak of. I have however used disk images as the original source where either a tape version wasn't available, or it provided a better copy of the game than any of the available alternatives.
The games have been dumped from the C64s memory using emulators and their built-in machine code monitors (I've use both CCS64 and VICE for this task). The general process involves finding a games starting address and dumping memory right at the point the game is about to start. This allows a clean start of the game without any of the glitchiness associated with dumps or snapshots created just after the game has started running. It should be said however that this process has been made much simpler with the use of emulators than it ever was back in the day. I have not focused on stripping out memory sections which are unused or left over from the loading process, unless this was necessary to allow the game to run properly.
But before anybody feels the need to decry this as a "lamer gamer release" because it does not follow scene release standards, this method of dumping is wholly intentional, as I want to work through the huge single-load C64 game library as quickly as possible. As the games will be primarily used on emulators or devices with a significantly larger amount of storage than plain old floppies, I don't feel this represents any significant issue.
Obviously as the majority of games are dumped from tape images, they are mostly intended for use on European PAL systems where tape usage was far more prevalent than in North America. There are a few NTSC titles included where either this was the best or only version available. Whilst some of the PAL games may run fine on NTSC systems (if a little fast), many may not work properly on an NTSC C64, whether emulated or not.
And finally...
Apologies for the somewhat long-winded blurb! Hopefully it'll make sense to those who didn't feel a sense of TL;DR higher up this post!
Special thanks go out to the following people for their contributions and support:
- karokin and Pezz82 for helping me track down the issues with the quick-loading PRGs on the C64 MiSTer core
- Per Håkan Sundell for his CCS64 emulator
- The VICE Team for their C64 emulator
- Magnus Lind for his excellent Exomizer crunching tool
- The Gamebase64 Team for providing many of the original game images
- The Lemon64 Team for their comprehensive database
The Included Games