zx2psf(1)

πŸ“¦
version 1.1.3 Β· 2 versions
, in nixpkgs unstable, ubuntu stonking

πŸ’… zx2psf β€” the PSF Tools glow-up page

okay so bestie, welcome to zx2psf(1), part of PSF Tools 🌸 β€” yes the whole dang suite, and yes this page is just about the one little program. sit down, grab a snack, we're converting fonts πŸ’–


✨ NAME ✨

zx2psf β€” she turns a Spectrum font into PSF format. that's the whole job. that's her whole thing. πŸŽ€


🌈 SYNOPSIS 🌈

zx2psf [--rom] [--sna] [--mode=bare] [--mode=merge1] [--mode=latin1]
[--mode=synth1] [--mode=move1] [--graphics=none] [--graphics=block]
[--graphics=udg] [--psf1] [--psf2] [INPUTFILE [OUTPUTFILE]]

like… look at all those flags. she's giving options. literally. ✨


πŸ¦‹ DESCRIPTION πŸ¦‹

so zx2psf converts a Spectrum font into PSF format, periodt. πŸ’…

and when we say "a Spectrum font" we mean any one of these three icons:

  • a +3DOS file
  • a TAP file with one member
  • a raw memory dump

ngl that's a lot of ways to be a font and she handles all of them 🫢


πŸ‘‘ OPTIONS πŸ‘‘

every single one, no skips bestie:

  • --rom β€” the file is a Spectrum ROM image, so she reaches in and extracts the font that's embedded in there. it's giving archaeology πŸ’€βœ¨
  • --sna β€” the file is a Spectrum SNA snapshot image; if there's a font hiding in it, she'll pull it out. πŸŽ€ BUT. this lowkey depends on the CHARS system variable having been set up properly, i.e. the game actually outputs using the ROM routines. if the program in the snapshot uses some other form of output, it may just leave CHARS alone or set it to a random value, and then πŸ™ˆ good luck. for example, the font in the game 2112 cannot be found using this method. not her fault, she's just the messenger 😭
  • --mode=bare β€” the Spectrum font gets copied as-is. any character outside the range defined by the Spectrum is set to blank. minimalist queen, no thoughts, empty glyph 🌸
  • --mode=latin1 β€” the Spectrum font gets copied as-is, and characters outside the Spectrum's range get set to the ones in LAT1-01.PSF (which is based on ISO-8859-1, but with extra character shapes). so… latin1 flavoured but make it ✨extra✨
  • --mode=merge1 β€” same energy as latin1 above, but the pound sign, the up arrow and the copyright characters get moved to their correct positions for ISO Latin-1. relocation era πŸ’…
  • --mode=synth1 β€” like merge1, except the Latin-1 characters are mostly generated from the Spectrum characters rather than copied from LAT1-08.PSF. and listen: if you use this one, the font will need manual editing afterwards to make it look better. she said DIY, no cap 🧚
  • --mode=move1 β€” like bare, but the pound sign and the copyright characters get moved to their correct positions for ISO Latin-1. two guys on the move, that's it πŸŽ€
  • --graphics=none β€” the graphics characters 128-159 will be blank (with --mode=bare) or those from LAT1-08.PSF (in the other modes). choose your fighter ✨
  • --graphics=block β€” characters 128-143 will be the Spectrum block graphics. 144-159 will be blank (with --mode=bare) or those from LAT1-08.PSF (in the other modes). half block-y, half mystery 🌈
  • --graphics=udg β€” characters 128-143 will be the Spectrum block graphics. if --sna was present, characters 144-159 will be the first 16 user-defined graphics; otherwise they'll be copies of "A" to "P". and if --mode=bare is set, characters 160-164 will be the last five UDGs (if --sna is present) or copies of "Q" to "U" (otherwise). it's giving conditional, it's giving nested, it's giving iykyk πŸ’€πŸ‘‘
  • --psf1 β€” output in the PSF1 format.
  • --psf2 β€” output in the PSF2 format (default). she picked this one for you already 🫢

πŸ’€ BUGS πŸ’€

okay so real talk, the whole Latin-1 thing? ugly. no cap, it's ugly, she knows it, we know it, everyone knows it 😭

fortunately though, zx2psf always puts a correct Unicode directory on the resulting file, so Unicode-aware utilities should always be able to find the correct character. so like… the vibe is chaotic but the data is correct. slay? πŸŽ€


πŸ”₯ SEE ALSO πŸ”₯

  • psf2zx(1) β€” the reverse girly. go say hi πŸ’–

πŸ’œ AUTHOR πŸ’œ

John Elliott <seasip.webmaster@gmail.com> β€” the main character who made all this happen. we're obsessed, fr fr πŸ‘‘


and that's the page bestie!! ✨ Version 1.1.3 ✨ dated 28 April, 2026 β€” go convert some fonts and hydrate πŸ’…πŸ¦‹πŸ’–

πŸ“¦ where this page comes from