Omega Race on the C64 — A Tale of Two Cartridges
A quite literal look into a curious duplication.
Continuing on a theme form a previous post, we risk a closer look into two cartridges of the same game, running both on the C64.
“Now Go Bang!” is named after a source comment in Spacewar!, the first digital video game.
It marks the very instance, when a spaceship which has been dragged into the gravitational star starts to explode. What follows, is impressionist pixel-dust floating along the ship’s former trajectory in a sparkling bloom of phosphor activation.
RSS feed: Subscribe.
Posts so far: 98, view as comprehensive list.
If you like what I’m doing, you can buy me a coffee: Buy me a coffee
A quite literal look into a curious duplication.
Continuing on a theme form a previous post, we risk a closer look into two cartridges of the same game, running both on the C64.
The PET 2001 online emulator enjoyed some TLC.
Some news on the PET 2001 online emulator:
Loding hex-dump files
You may now load a hex-dum (a text-file with extension ".hex", ".hd", ".hdp" or ".dump") in place of any binary files (in prg-format). As these files require a start address, this is either extracted from the first address label (if your hex-dump has this) or the first two bytes are used for this (low-byte, high-byte). Whatever comes first takes precedence. Otherwise any address labels, comments or annotations (e.g., blocks of ASCII/PETSCII representations) are ignored.
Valid hex-dumps are at a minumum space- or comma-separated lists of groups of hexadecimal numbers representing byte-values, and at a maximum most of the usual hex-dump formats.
E.g., the short BASIC program “10 PRINT"HELLO"” (at start address $401) may be represented as
0401: 0E 04 0A 00 99 22 48 ....."H 0408: 45 4C 4C 4F 22 00 00 00 ELLO"...
or as (mind the start address $0401 in the first two bytes)
01 04 0E 04 0A 00 99 22 48 45 4C 4C 4F 22 00 00 00
Notably, this includes the format of the hex-dumps exported by the emulator itself.
Improved for local ".SAV" or ".LOCAL"
There are moments, when you want to save a file locally from a program, e.g., for a user save state or some other file generated by your program, in order to load them later again. This is what local files are for. Files with file extensions ".sav", ".s" or ".local" are exported to the users local downloads folder. If you attempt to load a file with such a file extension, the emulator automatically issues a prompt dialog to let the user select a file to load. (This works both in BASIC and using the Kernal routines directly in a machine language program. Use device 8, the usual floppy-drive, for load and save.)
Since LOAD and SAVE work with binary files in prg-format and the user may actually pick any file, regardless of the name, you may use hex-dumps here as well.
As an important feature of this is, these local files are also loaded to a temporary mount-point, meaning, the main mount-point containing the original program or media image will remain undisturbed.
Mind that there are less checks implied with this loading method than usually. In the end, we have to supply some file to the emulated machine, otherwise it will be stuck. Because of this, if the user closes the dialog without having selected anything, and there are no other options left (like re-using a previously mounted local file), the emulator will generate an empty BASIC file (start address $0401 and a payload of two zero-bytes. Moreover, there’s an unobstrusive flag set at the very top of the video RAM for developers to check the state. (Consult the help file for details.)
This all enjoyes now better (and hopefully more robust) integration, with the additional support of ".local" files.
Update (2026-06-02)
The debugger has now a new breakpoint type for tracking read/write access in a given range.
(Ranges/brackets may now consist of a single address, as well, just leave the “To” address field empty or set it to the same value.)
This may sound like a minor feature (we just divert the access to the address space to a proxy function while using the debugger, easy), but actually required major rewrites, regarding how things are instantiated and interconnect. (JS and when exactly the properties of the ‘this’ object become externally available, you know…) Phew!
— And that’s about it. —
Maybe, if the bubble doesn’t burst, can we have a new round of RLHF training for basic phrasing every year or so?
/s
The sad story of an adorable little program and its looming demise.
Lately, we’ve seen a number of disturbing variants of the famous “10 PRINT” program for Commodore BASIC (and, with a slight modification, for any machine running BASIC). These are all about “speed”, i.e. runtime performance, but, as we’re going to argue, they are all missing the point. Even worse, they are apt to ruin it. Entirely.
A deep dive into the font of the “Dead Test” diagnostic cartridge of the C64, including an Easter egg, a look into the implementation, and, finally, some Commodore 8-bit character ROMs for download.
We’re back with some classic Commodore 8-bit content, but this time, it’s about the C64 and some of its diagnostic cartridges. But do not despair, there are also downloads, not just for the C64, but also for the VIC-20 and the PET/CBM.
A little tool to test and explore the keyboard matrix of any Commodore PET.
Complementing the previous post on PETs and their keyboard layouts, there’s now a program for visual exploration.
Defeating AI Overview without any further tools or extensions.
So, here is a short guide to how to get rid of Google AI Overview without the help of any special tools or extensions…
A tiny service for your retro development needs.
Picking up from where we left, last post, here are some charts of the PET Upper-Case/Graphics character set by screen code.