Thursday, December 25, 2008
Redefining the ZX Spectrum character set
This was something I always wanted to do as a kid but could never get it to work. Thought I'd have a bash tonight and it was pretty easy after realising two key facts:
(1) The CHARS system variable needs the low byte of the address of the new character stored before the high byte
(2) BUT for some reason, the value of CHARS needs to be 256 less than the start of the new character set.
Here is a screenshot of the BASIC program I knocked up as a simple test of a new 'A' character.
After a break, I remembered a game I really liked in about 1985 called Bored of the Rings which had a good font. I had a think, and came up with this plan:
- Load Bored of the Rings into Fuse on my Mac
- Open the Memory Browser and look at the contents of 23606 and 23607 which together contained 0xBE68. Adding 256 to this gave a memory location of 49000 for the start of the new character set
- I exported using File / Export Binary Data from location 49000 and length 768
- I then loaded my test program from earlier, did File / Import to load the binary data back to 49000 and then did POKE 23606,104 and POKE 23607, 190 and lo: