Retro bitmap font editor
Draw and edit 8-pixel-wide bitmap fonts for the Amiga, C64, Atari 8-bit and ST, or any microcontroller — transform glyphs, preview text on classic screens, rearrange into C64 screen-code or Atari order, and export raw ROM images, .64c, .fnt, PSF, PNG sheets, C or assembler tables, or an Amiga TextFont.
Added
How to use it
-
Start from a built-in font — Schumacher Clean 8×8 (regular or bold) or the 5×8 X11 "fixed" font, which also covers Latin-1 — or a blank one, or Import your own.
-
Glyph — click or drag to draw; the first pixel you touch decides whether you draw or erase. Tools shift (with wrap-around), mirror, rotate (8×8 only), invert, make bold or thin, slant, outline, underline, clear, copy and paste. Tick Apply to every glyph to make a bold or italic variant of the whole font in one click. The panel lists each row in hex and binary. Alt + arrow keys step between glyphs; Ctrl/⌘ + Z undoes.
-
Character set — every glyph; click one to edit it. Hover to see its slot and character.
-
⛶ Full screen (or
F) gives the glyph editor and the character set the whole screen; the editing grid grows to fit, and ◫ Panels shows or hides the font settings — the browser’s full screen where it is allowed, otherwise a full-window layer (iPhone). Escape leaves. -
Preview — type text and see it on a Workbench 1.3 or 2.0 screen, a C64, an Atari 8-bit, an ST in monochrome, or green or amber phosphor. Characters the font has no slot for show as grey blocks.
Character order
The slot a glyph lives in depends on the machine:
-
ASCII / Latin-1 — slot = character code. Amiga, Atari ST, PCs, most microcontroller libraries.
-
C64 screen codes — what goes in a C64 character ROM or a custom charset at
$D018:@is 0,A–Zare 1–26, digits are 48–57. The upper/graphics set has graphics in 64–127; the lower/upper set has lower case at 1–26 and capitals at 65–90. -
Atari 8-bit internal order — space is 0,
Ais 33; the control graphics follow at 64–95 and lower case at 96–127. This is the order of a 1024-byte.fntfile and ofCHBAS.
Character order only relabels slots. Rearrange glyphs into… moves the glyphs so the same characters stay readable in the new order; slots with no equivalent (C64 graphics, Atari control graphics) keep whatever glyph they had. Converting to C64 order also fills 128–255 with the reversed characters, as in the real ROM.
Import and export
Import recognises raw fonts by size (1024 bytes = 128 glyphs, 2048 = 256, 4096 = 256 at
8×16), skips a two-byte C64 load address (.64c files are 2050 bytes), reads Linux console
PSF1 and PSF2 fonts that are 8 pixels wide, and reads PNG sheets with 16 glyphs per row at
any integer scale (anything that differs from the top-left pixel is ink).
Export as a raw binary, a C64 .64c with load address $3000, an Atari .fnt, a PSF2
console font, a PNG sheet, a C array, assembler tables for 68000 (dc.b), 6502 (.byte,
!byte) or Z80/x86 (db), or an Amiga TextFont — C source with the glyph strip in chip
RAM, the tf_CharLoc table and a filled-in struct TextFont that you can pass straight to
SetFont(). In every format bit 7 of a byte is the leftmost pixel.
The Clean fonts are © 1989 Dale Schumacher and may be used, copied, modified and distributed freely provided the copyright notice is kept. The 5×8 font is in the public domain.
Sharing
Share link copies a link with the edited font (packed into ?s=; an 8×8 font with 256 glyphs fits comfortably), the selected glyph, preview text, colour scheme, scale, and export settings. Preview settings are readable on their own: ?text=, ?scheme= (wb13, wb20, c64, atari, st, green, amber), ?scale=.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.