My first computer was an Exidy Sorcerer, bought in the late '70s. It featured a full keyboard including lower case, on screen text of 64 B&W characters by 30 rows, 2 MHz z-80 processor, up to 48 kbytes of RAM, 8 kbyte ROMpacs (an msBASIC pac came standard), ROM-based diagnostic monitor program, etc. As far as full-featured computer, it was significantly ahead of its competitors such as the Apple II, TRS-80, and Commodore Pet. (Prologue because apparently no one here has talked about this computer before.)

It did not have conventional graphics; the computer was always in text mode. A text ROM defined a full set of 256 8x8 characters. However, the top 128 characters were loaded into RAM at bootup. This meant programs could dynamically redefine those characters, giving the computer a limited form of pixel-mapped graphics at a 512x240 resolution. Even within those limitations, clever programmers achieved some very nice effects and even images.

/edit add 2017.01.04 07:35 EST

General comment to many of the answers: I should have excluded the case of a computer having both definable characters and a traditional bit-mapped screen. In that event the definable characters simply allow for non-Latin character sets, and programmers are not forced to jump through hoops to display graphics at the best resolution possible. But when your display is limited only to text mode, programmers need to be pretty darn creative. Especially on the Sorcerer, where the 128 definable characters would only fill in 2 of the 30 display lines in a brute-force approach.

Similarly, computers that had no text mode, only bit-mapped, aren't the same as the Sorcerer either. Of course the characters were redefinable -- everything was! 🙃 This is not meant to downplay the existing answers, which responded to the question as asked. But for any future answers, please limit them to computers with redefinable characters in a text-mode only environment.


Were there other retro-computers that used similar character-defined graphics technology exclusively?

  • 1
    I think the Apple II had an add-on that did this, but I can't find much information about it... retrocomputing.stackexchange.com/questions/152/… – fadden Jan 4 '17 at 1:15
  • @jdv I apologize for the broadness of how the question was originally stated. I did not want to throw answerers under the bus who provided well thought out answers to my badly stated question. So instead of rewriting it, I added the two limitations going forward. 1) Don't include computers with both a bit-mapped mode and a text mode available. 2) Don't include computers with no text mode at all. // Is that still difficult to understand? – RichF Jan 4 '17 at 21:33
  • @RichF it still needs work. Just get rid of the first graf and go right into the description of the memory mapped chars. Then pop the question, "did any other computer of the time also have user-accessible memory-mapped display characters?" The epilogue also adds some confusion, too. Might belong in a comment. Keep it simple so that potential answerers can just discern the meaning with minimal effort. – user12 Jan 4 '17 at 21:52
  • So, exactly how was it "significantly ahead of its competitors such as the Apple II..."??? – cbmeeks Jul 14 '17 at 12:30
  • @cbmeeks you either missed it in the first paragraph or we disagree on the importance of certain characteristics. It exceeded the Apple ][ in it's native lower case, a 64x30 crisp display, and a full keyboard including numeric keypad. If one bought floppy drive(s), they gained the cross-manufacturer operating system CP/M. – RichF Jul 14 '17 at 14:21

16 Answers 16

  • ZX Spectrum: has 21 user definable graphics (UDG) available to the user via POKE USR command. Also, main character set can be redirected to RAM (sysvar CHARS, 23606-23607) so it is fully definibled. It doesn't have a real text mode. All text is rendered into pixels by the firmware.

  • Jupiter ACE: has the entire character set in dedicated RAM (but available in the Z80 address space as write only RAM). You can change it anytime using POKE (you cannot use PEEK to this memory). It doesn't have a graphic mode. Text is rendered by the hardware.

  • Amstrad CPC: you can use the SYMBOL AFTER command to redefine all or part of the character set. It doesn't have a real text mode. Text is rendered into pixels by the firmware.

  • MSX: the VDP uses dedicated VRAM for storing character patterns when a text mode is used. From BASIC, you can use VPEEK and VPOKE to access this VRAM memory and alter character bitmaps. Don't remember if there is specific BASIC commands for changing character patterns, such as the one used in Amstrad or Sinclair machines.

  • Dragon/Coco: The MC6847 VDP inside these machines stores characters in its own ROM when a text mode is used, so not redefinable. However, there are several graphics modes, which would allow a redefinable character set, at the expense of using more memory for the screen bitmap and a slower printing, as done in Spectrum/Amstrad.

  • Commodore 64: The VIC-II uses a dedicated CHAR ROM where character patterns are stored when a text mode is in use, but you can instruct VIC to use RAM instead for a custom character set. However, the BASIC is quite limited and there are no specific instructions to assist you on altering the character set, so you are on your own using PEEK and POKE, mapping and unmapping memory blocks, changing the character generator ROM address, etc.

  • Oric Atmos: has a text mode but character patterns are stored in RAM so they can be changed. There is support for 80 user definable characters so you can use standard character patterns for text, digits and punctuation symbols, yet allowing enough custom character patterns for most applications.

  • 1
    For MSX: no dedicated commands for altering the pattern generator table (that's the name of the VRAM area that stores character patterns), but the BASIC command BASE can be used to get the starting address of the table, so the VPOKEs are always properly targeted. – Konamiman Jan 3 '17 at 13:24
  • 1
    All of the Commodore 8-bit home computers, the VIC-20, C64 (SX-64, C64c), Commodore 16/116, Plus/4, and Commodore 128, had redefinable character sets. Also, the Educator 64, which was basically a C64 in a PET-style case with a monochrome monitor. – Tim Locke Jan 3 '17 at 15:15
  • 3
    The Atari 8-bit computers all had fully definable character sets. – Tim Locke Jan 3 '17 at 15:16

The TI-99/4a has a CALL CHAR command to redefine one ASCII character at a time. The first argument is the ASCII code and the second is the 8x8 map expressed as a series of hex digits. (This is how I learned hexadecimal back in elementary school. Good times!)

  • Cool. Did the 99/4 have a normal graphics mode as well? I seem to remember that it had sprites, but I guess that doesn't require pixel-mapped graphics. Also do you remember if all characters could be redefined, or only certain ones? // #DEADBEEF !! – RichF Jan 3 '17 at 5:44
  • @RichF Yes, I believe all characters could be redefined. Even in TI EXTENDED BASIC that supported sprites, there was no other graphics mode. But somehow TI LOGO was able to draw lines. – snips-n-snails Jan 3 '17 at 6:17
  • @RichF No, not all characters could be redefined: with the standard basic you could redefine characters 96-156, whereas with the extended basic you could redefine only characters 96-143. See, e.g., Ti Extended Basic Manual, p. 56. As traal said, there was no normal graphic mode: if you wanted to draw pictures, you had to draw a grid of characters accordingly redefined. It was a pity because, afaik, the graphics processor supported a normal mode. – Massimo Ortolano Jan 3 '17 at 21:54
  • 1
    @MassimoOrtolano - having just read the manual for the TMS9918 I can confirm that there wasn't a normal graphics mode at all. It has three modes: text (40x24 text with 256 6x8 characters and only 2 colours on screen at once), "graphics 1" and "graphics 2". "Graphics 1" is the mode TI BASIC used -- it divides the screen into 3 horizontal bands and allows a different set of 256 8x8 tiles in each one, with each tile allowing 2 colours, but TI BASIC always used the same set of tiles in all 3 bands. "Graphics 2" is basically the same as "graphics 1", but the handling of sprites is different. – Jules Sep 15 '18 at 17:16
  • 1
    Note that with 3 bands of 32 columns x 8 rows = 256 "tiles", you can just set each tile to a unique index and use it as a full graphical mode. It's just that TI BASIC didn't allow you to do that, because it always applied changes to the tile definitions to all 3 bands. I've never used an MSX, but presumably that's how they used the system. – Jules Sep 15 '18 at 17:18

Lots of homecomputers (or game consoles) had redefinable characters. Many game consoles (Atari, NES, SNES, Gameboy) are tile based in the first place, and a tile is nothing but a redefinable character. The Commodore 64 has a fixed charset in ROM, but can also use charsets in RAM. This tendency continued with the IBM PC, where graphics cards from EGA onwards also have a redefineable character set. I'm sure there's more.


All Atari 8-bit computers supported redefining the character graphics. The default character set is stored in ROM, but you can tell the ANTIC chip to read the character bitmaps from any area in memory — so typically you'd copy the character set from ROM to RAM and edit whichever characters you want to change.


The BBC model B had a range of 8 bit codes (224 to 255 by default) that could be redefined using the BASIC VDU 23 command like:

VDU 23,224,28,28,8,127,8,20,34,65

In that example 23 is the VDU code to redefine a character, 224 is the code of the character to be redefined, and the remaining 8 parameters are 8 bit bitmaps for the 8 rows of the character image.

The range of redefinable characters could also be expanded using OSBYTE &14.

  • This is true, however of course it didn't work in Mode 7 which used the fixed Teletext character set. – Chenmunka Jan 3 '17 at 10:50
  • It was also possible to intercept the OS calls that output characters and replace those with calls to put your own characters on screen (in bitmap modes) instead. – Alnitak Jan 4 '17 at 10:50

The Sinclair ZX Spectrum (the Timex 2068 in the USA) had a system variable in RAM which by default pointed to a section of ROM holding 8*8 pixel character graphics. By changing the system pointer, RAM could be used to hold custom character definitions.


Some MS-DOS program did this in VGA text mode — notably Norton Utilities and Impulse Tracker. The latter dynamically redefined the characters under the mouse pointer to provide smooth, sub-character cell movement.

  • If I understand you correctly, they used the definable characters to dynamically emulate a sprite cursor. Clever! – RichF Jan 5 '17 at 22:19
  • Yes, exactly that – scruss Jan 5 '17 at 22:30
  • If you ever get the chance to run one of these apps in an older version of Windows, make the MS-DOS Prompt windowed rather than full screen. The windowed console doesn't support redefinable characters, so you can see the actual characters used and how they change to different (standard) symbols as you move the mouse cursor around the screen. It looks way more complicated than I expected it would! – Malvineous Jul 15 '17 at 23:59

The VIC-I used in the Vic-20 differs from the VIC-II of the C64 by not having sprites or bitmap modes. So your only option is software-defined tiles. All of them are always in RAM and they're seeded with the character set from the ROM.

The ZX80 and 81 have one of the most interesting display architectures in terms of moving parts, and when used as intended it conspires to give a character-based display.

For pixel fetching there is exactly one hardware counter. It's three bits large, increments each line and is reset on vertical retrace.

To display characters, the Z80 executes the character codes. Or, rather, it attempts to. RAM is mirrored above 32768; when the machine spots an attempt to read an instruction from that area it secretes away the byte that would have been read and forces the bus to 0. Which is Z80 for NOP. So the Z80 does nothing, but does so with regular timing and while incrementing its program counter.

The Z80 was built to provide dynamic RAM refresh signals, which it does while decoding instructions. So while decoding its NOP, it announces a refresh cycle and puts a refresh address on the bus. That address can be set programmatically, though the Z80 automatically increments the low seven bits, which the machine then uses to keep track of distance across the line.

If a video value was stashed, the machine replaces the low nine bits of the address bus with the low three bits of the line counter plus six of the bits it secreted away. The value then on the data bus is loaded into a shift register and output.

The ROM configures everything so that the net effect is a character-mapped display, character forms stored in ROM.

A quirk is that if the address generated for final video fetch isn't in the ROM range, the ROM doesn't respond as the ordinary address bus is being manipulated so the ordinary decoding rules apply.

So if you have RAM that puts a value on the bus during refresh cycles, you can tweak the Z80's refresh address and put your character set in RAM. The built-in 1k does, but expansions disable that RAM and may not.

Quicksilva and some others also sold an add-on to put suitable RAM atop where a ROM mirror usually sits, intended for character set redefinition. Those fit alongside any other RAM expansion.

Smart programmers have also managed to generate a pseudo-bitmap mode (use some other part of the ROM as a character set and try to hit useful patterns) and a full-bitmap mode (keep false triggering vertical sync in time with horizontal to negate the line counter and otherwise act appropriately).

So: the ZX80 and ZX81 as cgaracter-mapped devices on which it was discovered that the character patterns could be drawn from anywhere in ROM, or reprogrammed with suitable RAM, or at a stretch you could work around the whole system and create a bitmap. Almost certainly completely without any sort of intention of hardware design, but working nonetheless.

Beyond that, anything with a TMS99[1/2]8 has to be a candidate? That owns its own 16kb, off the main system bus, and has both a tile map and tiles; it contrasts an explicit 'text mode' with three 'graphics' modes but the main difference is that the former crops tiles to 6 pixels wide in order to fit 40 on the screen. You're really only picking between 6-pixel wide characters and 8-pixel wide characters. It also has 1-bit sprites, but no built-in scrolling so it's still not really the tile-and-sprite console-type thing that its successors evolved into (e.g. the Master System is a descendant, and the Mega Drive descends from that, retaining the Master System's additions but cutting the original TMS-compatible modes).

In computers, it's as seen in the MSX 1, ColecoVision Adam, the Sega SC-3000, various Spectravideos and elsewhere. Scanning the existing answers, it's the same chip that was in the TI-99/4a, as per traal's answer.

  • Downvoter: just the lack of editing? Or an actual disagreement as to the content? It was tapped out on a mobile, so I'll endeavour better to edit later, should that be the problem. – Tommy Jul 13 '17 at 20:15
  • Darn, I accidentally downvoted this due to clumsy handling of my smartphone. When I try to undo that and upvote it instead, a message comes up saying I already voted on this answer. It is a good answer that deserves up-votes. – RichF Jul 13 '17 at 20:17
  • 2
    @RichF haha, so our comments are: "sorry about the quality, I typed it on a phone", followed by "sorry about the vote, I typed it on a phone". Who said that mobile devices make life better? – Tommy Jul 13 '17 at 20:31
  • Due to your edit, the system allowed me to change my vote. That was a long message to type onto a smartphone! – RichF Jul 13 '17 at 20:37

Although not strictly redefinable characters, the IBM CGA was able to have the size of the character cells changed from the standard 8x8 to 8x2, which combined with certain characters turned its text mode into the equivalent of a 160x100 bitmapped display.

This worked by displaying a character in each cell such that the 8x2 character box would appear as two 4x2 blocks of solid colour, effectively functioning as "pixels" at 160x100 resolution. Each character's foreground and background colour controls the colour of each half of the 8x2 character cell.

Although 160x100 was a lower resolution than the CGA's 320x200 and 640x200 bitmapped modes, it allowed all 16 colours to be used instead of only the four colours available in the true bitmap modes.

So although it wasn't done via the use of redefinable characters, it did allow for bitmapped graphics to be displayed in text mode, at a higher resolution than for normal ASCII-art style graphics.

  • 1
    @wizzwizz4 I think he means that either the left half or the right half of a rectangular character block could be "on". The page he references says there are two characters (ASCII 221 and 222) used in this mode. Apparently each half could also be one of 16 independent colors, which would effectively add the capability to have both "on" (or "off"). – RichF Jul 15 '17 at 16:37

The Convergent Technologies IWS and NGen lines of business computers (marketed under several names, such as Burroughs B21 and B25, the Mohawk Data Sciences/Momentum HERO, the DataPoint VISTA-PC, the NCR WorkSaver, the Pr1me Producer, and others) both had RAM-based fonts which could be loaded at will (with a documented OS API call) by user programs. If I recall correctly, the IWS used a 10x15 cell and the NGen used a 9x12 cell, but the NGen also supported a half-pixel offset for any row of the cell.

  • 10x15 and 9x12 would be very useful in supporting accented characters and some non-Latin character sets. I wonder if the half-pixel offset was implemented within the character RAM for each character, or if they had a separate overlay bitmap for that. – RichF Jan 3 '17 at 13:06
  • It was not an overlay bitmap; the company had a Font Designer utility, and if you loaded a NGen font into the program while running on an IWS, you'd see that pixel 0 was set in each row where the NGen showed the half-pixel offset. – Jeff Zeitlin Jan 3 '17 at 14:19

Amstrad CPC, PCW and Spectrum +3 under CP/M: The character set is held in banked memory, and all 256 characters can be redefined by a suitably-aware program. There is no true text mode; all characters are rendered by the CP/M XBIOS.

Character set addresses are:

CPC:            0x8000 in CP/M bank 0
PCW:            0xB800 in 'screen environment' bank
+3 (8x8 font):  0x3000 in CP/M bank 0
+3 (8x5 font):  0x3800 in CP/M bank 0

Regarding the TI 99/4A, the video functions were designed for games although the 64 bit representation of the real numbers made the computer pretty competent for scientific appplications. Redefinition of characters allowed a plot, but it was a lengthy process(see http://www.academic.ro/TI994A). TI itself is making the plot with the X on vertical, by using the same coding scheme, well, faster but unusual. Extended Basic allowed assembler code and thus direct access at the video memory("the missing link" solution-1990 by Texaments). Nowadays a compiler exists for Extended Basic. TI Logo requires the very expensive Peripheral Expansion Box. Nowadays, the CF7+ circuitry replaces that device, but of course, the computer itself it's not competing.


The VTech CreatiVision (also known as the Dick Smith Wizzard and the Hanimex Rameses amongst others) had redefinable characters if you were using the BASIC cartridge. If I remember correctly, the character was set with a HEX string, up to 16 characters long. Each HEX pair was one row of 8 pixels. The characters were divided into blocks (I can't remember how big) and each block could have its colour set independently of the others. So, for example, if you typed ZAP directly from the keyboard, it was possible to have the A a different colour from the Z and P.

  • I'm not familiar with this machine, and neither the wikipedia description nor a quick google search is giving any particular details, but that sounds very much like the behaviour of the TMS9918 display processor in "graphics 1" mode. See my comments about it attached to @traal's answer above - retrocomputing.stackexchange.com/a/1977/547 - which give a full description, but briefly: it divides the screen into 3 32x8 areas, each of which has a separate "tile map" that defines character appearance. Colours are associated with the tiles, rather than the cells. – Jules Sep 15 '18 at 17:40

When I saw the title of your query the first machine that came to mind was the Exidy Sorcerer and I was going to answer with that, but alas that was mentioned in your first sentence. So I'll answer with something much less known:

A third-party made an internal hardware add-on for the TRS-80 Model I that gave it a code-programmable character generator. I don't think they sold many, but a friend of mine (GB) marketed a space game (IIRC, like Defender) that used it, and it looked fantastic (especially compared to the stock 128x48 pixel graphics).

  • Heh, I just replied to your comment to my "excellent boot-up language" question. My reply mentioned the Sorcerer as well. Anyway, a code-programmable character generator could not have helped but improve the Model I. – RichF Jan 5 '17 at 21:32
  • Whoa, I didn't even realize that the first two topics I participated in were from the same person. Cool! – Dithermaster Jan 6 '17 at 21:07

Terak had a fully downloadable font for its text mode.


Many years ago I had a CP/M based machine called the Quark-100 by a small Canadian company called Megatel. The character generator was held in RAM so it could be any 256 characters desired from an 8*8 grid.

I even wrote a character set editor for the machine in the Z-80 version of Turbo-Pascal V3.

Those were the days...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.