As I started the development of ALBERT, the pixel art editor for creating extended Commodore 64 images, almost exactly one year ago, I thought to share a few stats about my development efforts in the last year by means of a GitHub profile screenshot:
Although most of the commits were probably for ALBERT itself, I’ve also been working at a number of my other projects in parallel 🙂
Today I had a chance to create TAP files with the mastering tool for Gyrospeed by Gary Saunders, and record the CRC32 of the CBM Data files it produces. I’ve added those signatures to TAPClean in order to speed up its scanning process by only looking for Gyrospeed files when such signature is detected. The development branch I had created to add support for Gyrospeed in TAPClean has therefore been merged into the main development branch, master.
An unfortunate circumstance I stumbled upon while performing the testing in CCS64 is that the EOF marker of REPEATed CBM Data files was not written, which lead to TAPClean miscalculating their CRC32 value. It’s not a big deal as TAPClean can be instructed not to look for such EOF markers (using the -noc64eof commandline option).
However, because of the abovementioned circumstance, I added an entry to TAPClean’s TODO list to move the CRC32 calculation for boot CBM Data files out of the cbm_search() function, so that I can also add some logic and calculate the CRC32 value on either the FIRST or REPEATed CBM Data file, depending on which one is structurally intact.
Version 1.1.1 of ALBERT, the pixel art editor for creating extended Commodore 64 images, is now available on its official homepage. Binaries are available for Windows and macOS (Intel). For Linux users, Docker images are published on Docker Hub here.
This is a minor update delivering the following fix to a bug reported by ElfKaa:
Fixed the coordinate validation for flood fill to avoid a memory access violation
I contributed the same fix to the code repository that I had used for inspiration. Here’s the pull request I raised, showing the nature of the fix, i.e. performing the seed point coordinate validation before reading its color.
Version 1.1.0 of ALBERT, the pixel art editor for creating extended Commodore 64 images, is now available on its official homepage. Binaries are available for Windows and macOS (Intel). For Linux users, Docker images are published on Docker Hub here.
With support for rectangular selections, symmetrical drawing, image and selection flipping, and many more features, ALBERT celebrates its first year of development with a bang!
Furthermore, there’s an Easter egg in ALBERT 1.1.0. If you can find it, contact me with its details and you get a chance to prioritize a feature from the list of ALBERT’s upcoming features.
Here are all changes delivered in this update:
Added support for rectangular selections (drag, cut, copy, and paste), solid or transparent
Added support for symmetrical (horizontal, vertical, quadrant, and bisected quadrant) drawing and flood fill
Added support for flipping (horizontally or vertically) canvas and selection contents
Added the option to load transparent PNG images into a separate layer to be used as a drawing reference, which can be hidden and shown as needed
Added the option for setting the aspect ratio of pixels (1:1, PAL, or NTSC) for the main canvas and the preview window
Added the option to reset image adjustment curve properties when importing PNG images
Added the option to set font properties for the scripting window (part of the Preferences dialog)
Added two new Lua functions to draw hollow and filled rectangles
Added two new Lua functions to draw ellipses and provide a strong reference for drawing circles when targeting PAL or NTSC displays
Added the option to generate random shapes using the Pareidolia menu item
Added shortcuts for setting the color of pen 1 to values in the range 8-15
When opening a project or importing a PNG image the main canvas is now zoomed for best fit
Corrected the display of the current graphic mode in the main window’s status bar
Fixed color swapping and replacing so that they only modify the editable area and correctly process color clashing
Multiple instances of dialogs that require user interaction cannot be erroneously created any longer by users under macOS
As readers asked for it, I am sharing a preview version of CBM Flux Studio 2. There is no user documentation that comes with it and format support is limited to CBM and Vorpal (later) sectors. There is some support for V-MAX! version 3, but that’s unfinished, which is also the current state of the application.
The software is provided “as is” and if you download it you can do whatever you want with it, as long as it doesn’t require commitments on my part. However, in order to avoid unfinished software from being used to create faulty material, the save option is disabled.
At this stage I don’t require any “beta” testers. The application is in “alpha” stage, meaning I firstly need time to do research and secondly I need access to original material for field testing. I haven’t got shortage of access to said material, but at the moment I do have shortage of time to dedicate to the project.
right clicking on a selected track brings up a contextual menu that can be used to delete the track or add 8 1-bit cells at the end of the track as long, as there’s room for these,
the Alt key and left mouse button pressed together invert a bit cell,
the Shift key and left mouse button pressed together zero a whole byte in the raw data, thus creating weak bits (be mindful of the byte boundary),
while a track is selected in a G64 disk image, the Alt key and cursor keys left or right pressed together shift its raw data by 1 bit cell left or right respectively.
This week, I changed CBM Flux Studio 2 to also shorten CBM block syncs longer than 40 bits to exactly 40 bits in NIB files, ahead of their conversion to G64, instead of just standardizing those CBM blocks syncs shorter than 40 bits. It was one of those changes that made other workflows downstream break completely in the presence of edge conditions. During testing I was lucky enough to stumble across a NIB file I created a while ago that triggered multiple edge conditions. The Pandora’s box it opened almost caused me to want to rewrite everything again, but I managed to sort things out through a long troubleshooting process and I am glad I did because I appreciate those edge conditions much better now.
Tools like TAPClean and CBM Flux Studio scream for a test-driven coding approach, or comprehensive regression testing. I can’t wait for the day when my development on TAPClean and CBM Flux Studio is going to test every change with a CI merge pipeline that performs regression testing on thousands of TAP or raw disk images and blocks any code change that causes an unexpected change in behavior caught in a batch-mode report.
In 2024 I shall be thinking about a way to make the research material for regression testing available and how to organize it efficiently, so that I can target subgroups such as just tapes that use “Turbotape 250 + clones” or just raw disk images that use “V-MAX!”.
Following from my earlier tests I tried to generate two rather naïve alpha value lookup tables for the circular plot in CBM Flux Studio 2, when SCP mode is used.
Here are the results of each one of them:
I reckon the second table seems to represent the tail gap better, while still marking block syncs quite well, given that the raw data looks as per below at the tail gap:
Don’t forget to click on the above images to see a non-scaled version without scaling artefacts.
I’ll keep experimenting with alpha lookup tables as soon as I get new ideas on the generation function for a new table.