Releases: portwally/BitPast
Release 4.2
Changelog
[4.2] - 2026-02-04
Fixed
- Per-Image Lock Now Works During Live Preview - Locked images now correctly use their saved settings when selected:
- Previously, locked settings were only applied during batch export
- Now the live preview also respects locked settings, showing the actual conversion result
- Switching between images correctly displays each image with its locked (or global) settings
Changed
- Locks Cleared on System Change - When switching to a different retro system, all image locks are now automatically cleared:
- Prevents confusion from stale locks that don't apply to the new system
- Users must re-lock images with desired settings for the new target system
- Lock indicators immediately disappear when changing systems
Technical
- Modified
performConversion()to check for locked settings before converting - Added
clearAllLocks()method to remove all per-image locked settings - System selector now calls
clearAllLocks()before changingselectedMachineIndex
Release 4.1
Changelog
[4.1] - 2026-02-03
Added
- Per-Image Conversion Settings - Lock individual settings for each image during batch export:
- Click the lock icon in the image toolbar to save current settings for the selected image
- Locked images display an orange lock indicator on their thumbnail
- During batch export or disk creation, each locked image uses its saved settings
- Unlocked images continue to use the current global settings
- Settings are tied to the machine type (e.g., C64 settings won't apply to Apple IIgs)
- Click the lock again to unlock and revert to global settings
Technical
- Added
lockedSettingsandlockedMachineIndexfields toInputImagestruct - Extended
RetroMachineprotocol with optional settings parameter - Updated all 15 converters to accept per-image settings
- Modified batch export methods to use per-image settings when available
- Added lock/unlock button and thumbnail indicator in ContentView
[4.0] - 2026-01-31
Added
- Universal Create Disk Feature - Create disk images for ALL supported retro systems:
- Commodore 64/VIC-20/Plus4: D64 (170KB), D71 (340KB), D81 (800KB) - CBM DOS format
- Amiga 500/1200: ADF (880KB, 1.76MB HD) - OFS filesystem
- Atari 800: ATR (90KB, 130KB, 180KB, 360KB) - Atari DOS 2.0S format
- Atari ST: ST (360KB, 720KB, 1.44MB) - FAT12 filesystem
- BBC Micro: SSD (100KB, 200KB), DSD (200KB, 400KB) - Acorn DFS format
- MSX: DSK (360KB, 720KB) - MSX-DOS FAT12 format
- Amstrad CPC: DSK (180KB, 360KB) - CPCEMU extended format
- ZX Spectrum: TRD (640KB), DSK (180KB) - TR-DOS format
- PC: IMG (360KB, 720KB, 1.2MB, 1.44MB) - DOS FAT12/FAT16 format
- Apple II/IIgs: PO, 2MG, HDV (140KB, 800KB, 32MB) - ProDOS format (existing)
- Create Disk Sheet - New unified UI with:
- Horizontal system icon bar showing all 14 systems
- Pre-selects currently active conversion system
- Dynamic format and size options per system
- System-specific volume name validation
- Volume name character set enforcement per platform
- Disk Creation Progress Bar - Visual progress indicator when creating disk images:
- Shows current file being converted and progress percentage
- Theme-aware styling (works with retro themes)
- Replaces the spinning beachball with informative feedback
- Atari ST Medium and High Res Modes - Additional graphics modes for Atari ST:
- Low Res (320×200) - 16 colors from 512-color palette → .PI1
- Medium Res (640×200) - 4 colors from 512-color palette → .PI2
- High Res (640×400) - Monochrome (2 colors) → .PI3
Changed
- ProDOS Button renamed to Create Disk - Now supports all systems, not just Apple II/IIgs
Fixed
- VIC-20 HiRes Dot Artifacts - Fixed random dots appearing in uniform areas of VIC-20 HiRes images:
- Changed pixel comparison from
<=to<so equidistant pixels default to background color - Added 10% minimum contrast threshold for foreground color selection to ignore noise
- Prevents gray or noisy pixels from being incorrectly assigned to foreground
- Changed pixel comparison from
- D64/D71/D81 PETSCII Encoding - Fixed filename and disk name display in Commodore disk images:
- Now uses correct unshifted PETSCII range ($41-$5A) that displays properly on C64
- Fixed BAM format with proper $A0 shifted space padding bytes
- Filenames and block counts now display correctly in VICE and VirtualC64
- D64/D71 Sector Allocation - Fixed broken interleave logic that wasted disk space:
- Previous code only used ~3 sectors per track before moving to next track
- Now uses sequential allocation, utilizing all sectors per track
- D64 can now fit ~16 files instead of 2-3
- Batch Conversion for Disk Images - All selected images are now converted when creating a disk image (previously only converted one)
- Image Count Display - CreateDiskSheet now shows correct number of selected images
- ADFWriter Multi-File Crash - Fixed crash when exporting multiple images to Amiga ADF disk:
- File blocks now start at block 2 (after boot blocks) instead of overlapping root/bitmap area
- Proper skip logic for root block (880 DD / 1760 HD) and bitmap block allocation
- CPC Disk File Truncation - Fixed Amstrad CPC DSK files being truncated:
- Files > 16KB now correctly use multiple directory extents (CP/M format requirement)
- 16512-byte screen files (16384 + 128 AMSDOS header) now fully stored
- Atari ST High Res Crash - Fixed crash when using High Res (640×400) monochrome mode:
- DEGAS format requires 16 palette entries even for monochrome mode
- Monochrome palette now padded to 16 entries (white, black + 14 black)
- Apple IIgs 3200-Color Brooks Format - Fixed ProDOS disk export using wrong aux type:
- 3200-color Brooks format files now use correct aux type $0002
- Other retro graphics converters can now properly identify Brooks format images
- Standard SHR files continue to use aux type $0000
Technical
- Added
DiskFormats.swiftwith centralized disk system/format/size enumerations - Added
CreateDiskSheet.swiftwith unified disk creation UI - Added
D64Writer.swiftfor Commodore D64/D71/D81 disk images (CBM DOS with BAM) - Added
ADFWriter.swiftfor Amiga ADF disk images (OFS filesystem) - Added
ATRWriter.swiftfor Atari 800 ATR disk images (Atari DOS 2.0S) - Added
STWriter.swiftfor Atari ST disk images (FAT12) - Added
BBCDiskWriter.swiftfor BBC Micro SSD/DSD disk images (Acorn DFS) - Added
MSXDiskWriter.swiftfor MSX DSK disk images (MSX-DOS) - Added
CPCDiskWriter.swiftfor Amstrad CPC DSK disk images (CPCEMU format) - Added
TRDWriter.swiftfor ZX Spectrum TRD disk images (TR-DOS) - Added
IMGWriter.swiftfor PC IMG disk images (DOS FAT12/FAT16) - Added
createDiskImage(configuration:)routing method to ConverterViewModel
[3.2] - 2026-01-30
Added
- C64 PETSCII Mode - Character-based graphics conversion for Commodore 64:
- PETSCII (40×25) - 40×25 character grid (320×200 with 8×8 character cells)
- 2 colors per character cell: 1 global background + 1 foreground per character
- XOR-based pattern matching to find best PETSCII character for each 8×8 tile
- Automatic background color selection (most common dark color)
- Output:
.prg(self-displaying executable with BASIC loader)
Fixed
- PC Text Mode ANSI Output - Fixed .ans file export for ANSI art viewers:
- Now uses valid CP437 block characters (░▒▓█▄▌▐▀) instead of control characters
- Proper ANSI.SYS escape sequences with bold attribute for bright colors
- Added SAUCE metadata record for viewer compatibility
- CGA to ANSI color mapping corrected
- Retro Theme Fonts - Fixed font loading for retro appearance modes:
- Apple IIgs theme now correctly uses "Shaston 640" font
- Commodore 64 theme now correctly uses "Pet Me 64" font
- Apple II theme uses "Print Char 21" font
- Added ATSApplicationFontsPath to Info.plist for proper font discovery
Technical
- Added
convertPETSCII(),findBestPETSCIIChar(), andcreatePETSCIIPRG()functions to C64Converter - PETSCII charset loaded from
c64petscii.binbundle resource (2048 bytes) - PRG file includes BASIC stub loader and machine code viewer
- Refactored
findBestCharacter()to only match valid CP437 block characters - Added
ansiBlockCharsarray with correct CP437 codes and bitmap patterns - Separated SAUCE record generation into
createSAUCERecord()function
[3.4] - 2026-01-29
Added
- BBC Micro Converter - Acorn BBC Micro graphics conversion support:
- Mode 0 - 640×256, 2 colors (high-resolution)
- Mode 1 - 320×256, 4 colors from 8-color palette
- Mode 2 - 160×256, 8 colors (full palette)
- Mode 4 - 320×256, 2 colors (compact memory)
- Mode 5 - 160×256, 4 colors (compact memory)
- Native .bbc file output (raw screen memory)
- System Menu Update - BBC Micro (⇧⌘8), keyboard shortcuts reorganized
Technical
- Added
BBCMicroConverter.swiftwith 6845 CRTC video emulation - 8-color fixed palette (Black, Red, Green, Yellow, Blue, Magenta, Cyan, White)
- Interleaved memory layout for authentic BBC Micro screen format
- BBC Micro icon added to Assets.xcassets
[3.3] - 2026-01-29
Added
- Atari 800 Converter - Atari 8-bit computer graphics conversion support:
- Graphics 8 - 320×192, 2 colors (high-resolution monochrome)
- Graphics 15 - 160×192, 4 colors from 128-color GTIA palette
- Graphics 9 - 80×192, 16 shades (GTIA grayscale mode)
- Graphics 10 - 80×192, 9 colors from 128-color palette (GTIA color mode)
- Graphics 11 - 80×192, 16 hues at one luminance (GTIA hue mode)
- Native .gr8, .gr15, .gr9, .gr10, .gr11 file output
- System Menu Update - Atari 800 (⇧⌘6), keyboard shortcuts reorganized
Technical
- Added
Atari800Converter.swiftwith ANTIC/GTIA video chip emulation - 128-color palette (16 hues × 8 luminances) with NTSC color approximation
- All five GTIA graphics modes fully implemented
- Atari 800 icon added to Assets.xcassets
[3.2] - 2026-01-29
Added
- MSX Converter - MSX/MSX2 graphics conversion support:
- Screen 2 (MSX1) - 256×192, 2 colors per 8×1 line from TMS9918 palette
- Screen 5 (MSX2) - 256×212, 16 colors from 512-color V9938 palette
- Screen 8 (MSX2) - 256×212, 256 fixed colors (3-3-2 RGB)
- Native .sc2, .sc5, .sc8 file output (BSAVE format)
- PC Converter - IBM PC graphics conversion support:
- CGA Mode - 320×200, 4 colors from fixed CGA palettes
- EGA Mode - 320×200, fixed 16-color EGA palette
- EGA 64 Mode - 320×200, 16 colors selected from 64-color EGA palette
- VGA Mode 13h - 320×200, 256 colors from 262,144-color palette
- CGA 80×25 Text - 64...
Release v2.7
[2.7] - 2026-01-25
Added
- Preprocessing Filters - Apply image filters before color conversion:
- Median - Noise reduction with selectable kernel size (3×3, 5×5, 7×7)
- Sharpen - Edge enhancement with adjustable strength (0.2–2.5)
- Sigma - Edge-preserving blur/noise reduction (5–50 range)
- Solarize - Artistic partial negative effect (32–224 threshold)
- Emboss - 3D relief effect with depth control (0.3–2.0)
- Find Edges - Sobel edge detection with sensitivity control (10–100)
- Filter-Specific Parameters - Each filter now has its own dedicated control with appropriate range and labeling
- Help Menu: Preprocessing Filters Section - Comprehensive documentation for all filters with:
- Parameter descriptions and ranges
- Best use cases for each filter
- Value recommendations
- Help Menu: Visit GitHub Page - Quick link to the BitPast GitHub repository
- Palette Editor Undo/Redo - Full undo/redo support (⌘Z / ⇧⌘Z) with 50-level history
- Palette Editor Copy/Paste - Copy and paste entire palettes between scanlines
Changed
- Settings Toolbar Reorganization - Controls now grouped in vertical pairs:
- Mode + Resolution + 3200-specific options in first column
- Dither + Error Matrix + Dither Amount grouped together
- Preprocessing filter with its parameter below
- Each group has subtle visual separation for clarity
- 3200 Quantization Visibility - Now only appears when 3200 Colors mode is selected
- 640x200 Preview Aspect Ratio - Fixed stretched preview for 640×200 modes (now displays with correct 2:1 aspect correction)
- Palette Editor Layout - Fixed heights for header, footer, and button bar to prevent layout compression
Fixed
- Preview Aspect Ratio - 640×200 images no longer appear horizontally stretched in preview
- Palette Editor Stability - Header and footer no longer compress when resizing window
[2.2] - 2026-01-24
Added
- Image Tools Toolbar - New toolbar buttons in the preview area:
- Palette Editor - Edit Apple IIgs palettes directly (IIgs modes only)
- H-Flip - Horizontally flip the converted image
- V-Flip - Vertically flip the converted image
- Histogram - Display RGB/Luma histogram overlay with channel toggles
- Histogram Channel Toggles - R, G, B, and Luma (L) buttons to show/hide individual channels
- Floating Palette Editor Window - Palette editor now opens as a draggable floating panel instead of a modal sheet, allowing you to see the preview while editing colors
- Direct Color Picker - Clicking a palette color now opens the native macOS color panel directly without an intermediate popup
Changed
- Retro Theme Support for Toolbar - All new toolbar buttons and histogram now properly styled for:
- Apple IIgs theme (GS/OS style with gray background)
- Apple II theme (green phosphor with Print Char 21 font)
- Commodore 64 theme (blue background with PetMe64 font)
- Palette Display Fix - Non-3200 modes now correctly show the actual number of palettes:
- 320x200 (16 Colors): 1 palette
- 640x200 modes: 1 palette
- 256 Colors (16 Palettes): 16 palettes
- 3200 Colors (Brooks): 200 palettes
- Smaller Button Labels - Apple IIgs theme now uses smaller 8pt text for toolbar button labels
Fixed
- Crash Fix - Fixed "Index out of range" crash when selecting 320x200 mode after palette storage optimization
- Palette Editor Colors - Colors now update live as you adjust them in the color picker
Removed
- cadius binary - Removed the external cadius tool; ProDOS disk creation now uses native Swift implementation exclusively
Technical
- Refactored
ToolbarButtoncomponent with theme-aware styling - Added
HistogramOverlay,HistogramChart,HistogramPath, andChannelToggleButtoncomponents - Added
PaletteEditorWindowControllerfor floating window management - Updated
AppleIIGSConverterto store only unique palettes per mode
Release 2.6
Added Apple Ii and Apple IIgs "skins". Select them in the Settings menu,
Release 2
BitPast Changelog
Release v2- 2026-01-14
Fixed
- Critical: Mode switching bug fixed - Switching between graphics modes (DHGR, HGR, LGR, DLGR) no longer causes corrupted output. Previously, switching from HGR back to DHGR would result in a dark image rendered in HGR mode instead of DHGR.
Root Cause
The b2d conversion library uses global variables that persist between calls. When used as a library (not a standalone executable), these variables retained their values from previous conversions, causing mode confusion.
Key issues fixed in b2d_wrapper.c:
- Wrong variable names - The wrapper was trying to reset variables that didn't exist (
hgr,monochrome,dlores) instead of the actual variables (hgroutput,mono,loresoutput) - grpal palette corruption - HGR mode permanently modifies the
grpal[]array (sets 10 of 16 colors to black), which broke subsequent DHGR conversions. Now restored to original values before each conversion. - Memory buffer handling - Fixed double-free crash by not freeing buffers in wrapper (b2d already frees them at end of each call)
- Comprehensive state reset - Now resets 40+ global variables and clears all buffer arrays before each conversion
Changed
-
Dither algorithms updated - Names now match b2d.c exactly:
- "Jarvis, Judice, Ninke" → "Jarvis"
- "Sierra-2" → "Sierra Two"
- "Sierra-Lite" → "Sierra Lite"
- Added "Buckels" dither algorithm (-D9)
-
Color palettes overhauled - Corrected palette mappings to match b2d.c indices:
- "Apple IIgs RGB" → "Kegs32 RGB" (-P0)
- Added "AppleWin New NTSC" (-P3)
- Added "Super Convert RGB" (-P12)
- Added "Jace NTSC" (-P13)
- Added "Cybernesto NTSC" (-P14)
- Added "tohgr NTSC HGR" (-P16)
- Removed non-functional legacy palettes (Legacy Canvas, Legacy Win16, Legacy Win32, Legacy VGA BIOS, Legacy VGA PCX) that displayed as black
Technical Details
Variables Reset Before Each Conversion
- Mode flags:
hgroutput,mono,lores,loresoutput,appletop - Dither settings:
dither,hgrdither,dither7,errorsum,serpentine,ditheroneline,ditherstart - Palette settings:
hgrpaltype,hgrcolortype - Output flags:
preview,vbmp,dosheader,spritemask,tags,debug,quietmode,outputtype - Processing flags:
diffuse,merge,scale,reformat,applesoft,reverse - Color settings:
paletteclip,globalclip,colorbleed,bleed,backgroundcolor,clearcolor - And many more...
Buffers Cleared
- Dither buffers:
redDither,greenDither,blueDither,redSeed,greenSeed,blueSeed, etc. - HGR buffers:
redSave,greenSave,blueSave,OrangeBlueError,GreenVioletError, etc. - Scanline buffers:
bmpscanline,dibscanline1-4,previewline,maskline - Color arrays:
rgbArray,rgbPreview,rgbDouble,rgbLuma, etc. - Palette restoration:
grpalarray restored to original tohgr NTSC values
Available Options
Target Formats
- DHGR (Double Hi-Res) - 560x192, 16 colors
- HGR (Hi-Res) - 280x192, 6 colors
- LGR (Lo-Res) - 40x48, 16 colors
- DLGR (Double Lo-Res) - 80x48, 16 colors
- Mono - Monochrome output
Dither Algorithms
| Name | Flag | Description |
|---|---|---|
| None | - | No dithering |
| Floyd-Steinberg | -D1 | Classic error diffusion |
| Jarvis | -D2 | Jarvis, Judice, Ninke |
| Stucki | -D3 | Stucki dither |
| Atkinson | -D4 | Bill Atkinson's algorithm (Mac classic) |
| Burkes | -D5 | Burkes dither |
| Sierra | -D6 | Sierra dither |
| Sierra Two | -D7 | Sierra two-row |
| Sierra Lite | -D8 | Sierra lite |
| Buckels | -D9 | Bill Buckels' custom algorithm |
Color Palettes
| Name | Flag | Description |
|---|---|---|
| Kegs32 RGB | -P0 | Apple IIgs emulator colors |
| CiderPress RGB | -P1 | CiderPress file viewer colors |
| AppleWin Old NTSC | -P2 | Legacy AppleWin NTSC |
| AppleWin New NTSC | -P3 | Current AppleWin NTSC |
| Wikipedia NTSC | -P4 | Wikipedia Apple II colors |
| tohgr NTSC (Default) | -P5 | Default for DHGR conversion |
| Super Convert RGB | -P12 | Super Convert colors |
| Jace NTSC | -P13 | Jace emulator colors |
| Cybernesto NTSC | -P14 | Cybernesto/Munafo NTSC |
| tohgr NTSC HGR | -P16 | Optimized for HGR mode |
Release 1.4
Release 1.4
Fixed
- 3200 Mode: Fixed horizontal banding artifacts by implementing proper palette grouping strategy
- 3200 Mode: Corrected error diffusion boundaries to prevent color bleeding across palette groups
- Pixel Packing: Fixed vertical offset artifacts in 320 and 640 modes by reversing nibble order
- 640 Mode: Fixed dark output by forcing brightness range in 4-color palette selection
- Brightness: Corrected RGB to 4-bit conversion using proper rounding instead of truncation
- Disk Images: Fixed .po image size - now correctly creates 143KB (143,360 bytes) images instead of 146KB
- 640 Enhanced/Desktop: Fixed column-aware dithering to properly use Even/Odd palettes
Added
- 640x200 Desktop Mode: GS/OS Finder-compatible palette with hardware dithering (16 dithered colors)
- 640x200 Enhanced Mode: Custom 8-color palette optimized from source image with hardware dithering
- 3200 Quantization Methods:
- Per-Scanline (Default): Generate 200 palettes, merge to 16 slots
- Palette Reuse (Optimized): Sequential palette reuse with configurable merge threshold
- Column-Aware Dithering: Proper Even/Odd column palette constraints for 640 mode
- Palette Merge Tolerance: Configurable threshold slider for Palette Reuse method
Technical Details
- Implemented intelligent palette slot mapping for 3200 mode (200 scanlines → 16 palette slots)
- Added premultiplied alpha correction in image loading
- Switched CADIUS volume size from KB notation to block count (280 blocks = 143,360 bytes)
- Post-processing validates and corrects disk image sizes to exact ProDOS specifications
- 640 Mode Hardware Dithering:
- Even columns (x%2==0) use palette indices 0-3
- Odd columns (x%2==1) use palette indices 4-7
- Indices 8-15 are duplicates for hardware compatibility
- Creates up to 16 perceived colors through optical blending on CRT monitors
- GS/OS Finder Palette: Black/Blue/Yellow/White (Even) + Black/Red/Green/White (Odd)
Documentation
- Added detailed technical documentation for 640 mode column-aware dithering
- Documented proper palette structure for hardware dithering modes
Technical Background
640 Mode Column-Aware Dithering
The Apple IIgs 640x200 mode uses a clever hardware trick to display 16 colors from only 8 palette entries:
- Even pixel columns access palette indices 0-3 (duplicated at 8-11)
- Odd pixel columns access palette indices 4-7 (duplicated at 12-15)
- Adjacent pixels optically blend on CRT monitors to create intermediate colors
- Example: Blue (even) + Red (odd) = Purple
This requires special quantization logic that constrains color selection based on the pixel's X-coordinate.
Release 1.3
Release 1.3
Fixed
- 3200 Mode: Fixed horizontal banding artifacts by implementing proper palette grouping strategy
- 3200 Mode: Corrected error diffusion boundaries to prevent color bleeding across palette groups
- Pixel Packing: Fixed vertical offset artifacts in 320 and 640 modes by reversing nibble order
- 640 Mode: Fixed dark output by forcing brightness range in 4-color palette selection
- Brightness: Corrected RGB to 4-bit conversion using proper rounding instead of truncation
- Disk Images: Fixed .po image size - now correctly creates 143KB (143,360 bytes) images instead of 146KB
Added
- 640x200 Desktop Mode: New mode using 16 fixed Apple IIgs system colors (ideal for wallpapers)
- 640x200 Enhanced Mode: New mode with 16 custom colors optimized from source image
- Palette Optimization: Median Cut algorithm now ensures full brightness range coverage
Technical Details
- Implemented intelligent palette slot mapping for 3200 mode (200 scanlines → 16 palette slots)
- Added premultiplied alpha correction in image loading
Release 1.2 640px color fix
Fixed a bug where Apple IIgs images in 640px format did not display colors correctly.
Release v 1.1
📦 v1.1
This update introduces a completely redesigned user interface and unlocks the full potential of the b2d conversion engine.
✨ UI & UX Improvements
New Layout: Completely restructured bottom section. It is now compact (fixed height) and symmetrical.
Visual System Selector: Replaced the dropdown menu with clickable tiles featuring icons (CPU vs. Display) for intuitive selection between Apple II and Apple IIgs.
Action Sidebar: Added a fixed right-hand column for export actions ("Save Image" and "Create ProDOS Disk") to declutter the main interface.
Clean Sliders: Sliders now display intelligent values (integers for matrix parameters, floats for gamma) for better readability.
🍏 Apple II Converter Engine
Extended Dithering Algorithms: Added support for all 8 algorithms provided by b2d (including Burkes, Sierra, Sierra-2, Sierra-Lite).
Deep-Dive Parameters: Implemented new controls for Cross-hatch Pattern (-X), Threshold (-Z), and Error Matrix Index (-E).
Palette Mapping: User-friendly palette names (e.g., "Apple IIgs RGB", "Wikipedia NTSC") are now automatically mapped to the correct internal b2d IDs.
LGR/DLGR Fix: Automatic resizing of input images to 40x48 (LGR) or 80x48 (DLGR) to prevent "Wrong Format" errors during conversion.
Cleanup: Removed non-functional parameters (Hue Tweak, Color Bleed, Luma Weight) that were effectively dead code in the underlying engine.
💾 Export
Native File Export: The "Save Image" menu now automatically detects the generated target format (e.g., .A2FC, .BIN, .SHR) and allows for direct saving of raw assets.
Release v1.0
First Release. Might still have some bugs. Please report.