Skip to content

DrWize/CustomC64StartScreen

Repository files navigation

C64 Boot Screen Editor

A browser-based tool for designing custom Commodore 64 startup screens. Draw PETSCII art, pick from templates, edit character ROMs, and patch your KERNAL ROM with the result.

Setup

  1. Clone this repo
  2. Download the font files - see Font Files below. The font library will not work without them.
  3. Open index.html in your browser — or use the included server script for the font library

The editor works directly from the filesystem (file://), but the font library needs a local server to scan the fonts/ directory. Use the included scripts to start one:

# Linux/macOS
./start-server.sh

# Windows (PowerShell)
.\start-server.ps1

Then open http://localhost:8064 (pass a different port as an argument if needed).

Features

Screen Editor

  • 40x25 character grid rendered on HTML5 Canvas using C64 chargen bitmap data
  • Drawing tools: Draw, Erase, Fill, Text, Color Paint, Line, Rectangle
  • Row operations: Delete Row (shifts rows up), Insert Row (shifts rows down)
  • Per-cell color: each character can have its own foreground color from the 16-color C64 palette
  • Global colors: border and background color pickers
  • "Apply color to all" button to recolor all existing characters at once
  • Right-click to pick character + color from screen
  • Undo/Redo with full state history
  • Grid overlay toggle
  • Uppercase/graphics and lowercase/uppercase character set toggle

Templates

  • Boot screens: Classic C64, Dark Mode, Hacker Green, C= Logo Modern, Rainbow, Retro Terminal, Blank, Underline, Color Bars
  • C64 Ultimate editions: Ultimate, Ultimate Dark, Ultimate Gold, Ultimate Starlight

Character ROM / Font Library

  • Auto-scans the fonts/ directory on startup — drop any .bin file in and refresh
  • Click any font to instantly switch the screen and character picker
  • Upload your own 4KB chargen ROM via the Chargen tab
  • 8x8 pixel editor for individual characters with shift, mirror, invert, clear operations
  • Download modified chargen ROM

ROM Patching

  • Simple mode: change startup text (Line 1 + Line 2) and colors in the KERNAL ROM
  • Extended mode: inject a full PETSCII boot screen into the KERNAL ROM using RLE-compressed 6502 machine code
    • Overwrites RS-232 NMI/Tx/Rx routines at $EEBB-$F0BC (safe for users who don't use the serial port for RS-232)
    • Hooks into the KERNAL startup at $E39A, replacing the banner print routine
    • Auto-detects cursor position: BASIC's "READY." prompt lands 2 rows below your design
    • Sets text color for READY. to match your design's dominant color
    • Jumps to BASIC warm start ($A644) for normal input loop
  • Status bar shows where the cursor/READY. will appear after boot

Export & Output Formats

  • Patched KERNAL ROM (.bin) — This is what you want for actually changing your boot screen. Upload your original KERNAL ROM in the ROM tab, design your screen, then download the patched .bin. In VICE: Settings > Machine > KERNAL and point to your patched file. On real hardware: burn to EPROM.
    • Simple mode: changes startup text + colors only
    • Extended mode: injects your full PETSCII screen design with custom 6502 code
  • .PRG file — A standalone C64 program for quick preview/testing. Load it in VICE with LOAD "BOOTSCREEN.PRG",8,1 then RUN. Displays your screen and waits for a keypress, then returns to BASIC. This does NOT modify your KERNAL — it's just for previewing.
  • JSON — Export/import screen designs for sharing or later editing
  • Chargen ROM (.bin) — Download modified character set for use as a replacement chargen ROM

Keyboard Shortcuts

Key Tool
D Draw
E Erase
F Fill
T Text mode
C Color paint
L Line
R Rectangle
G Toggle grid
Ctrl+Z Undo
Ctrl+Y Redo
Right-click Pick char + color from screen

Usage

Just open index.html directly in your browser — no build step, no server required. Pure HTML/CSS/JS.

Project Structure

C64Boot/
  index.html                 - Main app
  css/styles.css             - C64-themed dark UI
  js/
    c64-data.js              - Chargen ROM data, color palette, PETSCII mappings
    screen-editor.js         - Canvas-based 40x25 PETSCII editor
    rom-patcher.js           - KERNAL ROM patching + .PRG export + RLE compression
    chargen-editor.js        - 8x8 pixel character editor
    templates.js             - Boot screen templates
    app.js                   - Main app controller
  fonts/                     - Chargen ROM .bin files (not in repo, see below)
  kernal/                    - Your KERNAL ROM files (not in repo)

Font Files (REQUIRED)

The font library needs chargen ROM files (.bin, 4096 bytes each) placed in the fonts/ directory. These are not included in the repository - you must download them yourself.

Source: patrickmollohan/c64-fonts

Download all font ROMs from patrickmollohan/c64-fonts and place them in the fonts/ folder (flat, no subfolders):

fonts/
  c64.bin              - Default C64/128 character set
  c64_swedish.bin      - Swedish/Finnish variant
  c64_swedish2.bin     - Alternative Swedish variant
  aniron.bin           - Lord of the Rings inspired
  apple_ii.bin         - Apple II character set
  aurebesh.bin         - Star Wars Aurebesh script
  comic_sans.bin       - Comic Sans parody
  hachicro.bin         - Simplistic outline design
  kauno.bin            - Calligraphic font
  kirby_forgotten_land.bin - Kirby game font
  minecraft.bin        - Minecraft font
  pxlfont.bin          - PXLfont (see below)
  zx_spectrum.bin      - ZX Spectrum character set

Quick download:

# Linux/macOS
./download-fonts.sh

# Windows (PowerShell)
.\download-fonts.ps1

Additional font: PXLfont

PXLfont is a popular replacement character ROM for the C64 with improved readability. Download the .bin file from CSDB and place it as fonts/pxlfont.bin. It will appear in the font library as "PXLfont".

Adding your own fonts

The font library automatically scans the fonts/ directory on startup. Any .bin file (4096 bytes, C64 chargen ROM format) placed in the folder will appear in the list after a page refresh. No code changes needed — just drop the file in and reload.

You can also load any chargen ROM on the fly via the Chargen tab's "Upload Chargen ROM" button without placing it in the folder.

The editor works with the built-in character set even without any font files in the directory.

KERNAL ROM

You need your own C64 KERNAL ROM file (8KB .bin/.rom) for the ROM patching features. The editor works without one for screen design and .PRG export.

KERNAL ROM Offsets (for reference)

Data Offset Length Default
Line 1 (banner) 1141 37 bytes **** COMMODORE 64 BASIC V2 ****
Line 2 (RAM info) 1178 17 bytes 64K RAM SYSTEM
Border color 3289 1 byte $0E (light blue)
Background color 3290 1 byte $06 (blue)
Text color 1333 1 byte $0E (light blue)
Banner print JSR $E39A 3 bytes JSR $E422 (hook point for extended mode, redirected to $EEBB)
RS-232 safe area $EEBB 514 bytes RS-232 NMI/Tx/Rx routines (injection target for extended mode)

Credits

About

A browser-based tool for designing custom Commodore 64 startup screens. Draw PETSCII art, pick from templates and country flags, edit character ROMs, and patch your KERNAL ROM with the result.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors