TransWikia.com

Which computers had redefinable character sets?

Retrocomputing Asked by RichF on December 9, 2021

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 8×8 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 512×240 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.

Question

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

23 Answers

Redefinable character sets aren't limited to CRT-based computers. Many 5x7 or 5x8 dot matrix displays are driven using an HD44780 or compatible chip, which allows eight of the characters to be redefined. I don't know if any vintage portable computers used such displays, but there were certainly some that had text displays which were 4x40 or smaller, and it would hardly be surprising if some of them did use such displays.

Answered by supercat on December 9, 2021

The Future Computers FX/20 and FX/30 models from the mid-1980s ran DOS or (C)CP/M. They loaded a character map during boot, and had a utility to edit the characters.

Answered by Clive Shergold on December 9, 2021

The big value-add feature advertised for the Hercules Graphics Card Plus was RamFont, or re-definable character sets. Custom characters could be uploaded into the card, and rendered as part of a 3072 character set. (In contrast to the 256 fixed characters of the MDA, CGA, and original Hercules cards).

Driver support was available to use this feature in a few key applications of the time... at least Lotus 1-2-3 and Microsoft Word. (The original DOS version.)

https://archive.org/stream/198610ByteMagazineVol1111InsideTheIBMPC/198610%20Byte%20Magazine%20Vol%2011-11%20Inside%20the%20IBM%20PC#page/n259/mode/2up/search/RAMfont

Answered by mschaef on December 9, 2021

The Olympia People computer had a fully-redefinable character set. This was used to implement the 'national character support' its marketing touted. While a colour display with graphical add-in card was an optional extra the machine shipped by default with only a text mode.

IIRC font data was stored at $E4000 in memory with 32 bytes per character, although the default CRT controller was setup to only use half of those to display a 8x16 cells. The text-mode screen stored character/attribute pairs from $E0000. With its ability to produce four intensity levels on its monochrome monitor it was capable of very reasonable displays.

The startup screen that prompts for the boot drive shows this feature in action. The 'People' logo and surrounding box are actually characters $80+ (the 128 characters after the ASCII range) with a custom font loaded: Olympia People computer at boot screen

Answered by Philip on December 9, 2021

Any computer with a serial terminal interface supports redefineable character sets. Just plug in a VT220 terminal.

This is a curmudgeonly way of saying it's not "the computer", it's a specific display device that supports loadable characters.

I recall that, in the days when VMS MAIL would happily display whatever it got in a mail message, sending around the "Australian font" was popular around April Fool's day in DEC. Subsequent text displayed upside-down.

Answered by another-dave on December 9, 2021

Half of the character ROM of Digital Equipment Corporation's DECmate-II was user-definable. No one ever used this feature and it was dropped from subsequent models.

Answered by A. I. Breveleri on December 9, 2021

Sirius 1 (aka Victor 5000 in the US) had a programmable character generator on a nice 10x16 matrix giving a good 800x400 resolution. This was a very nice PC and much better than the crap IBM came up with. (8088@5Mhz, up to 896K RAM, MS-DOS or CP/M 86, 800K floppies, soft control for monitor,).

Answered by Patrick Schlüter on December 9, 2021

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...

Answered by Peter Camilleri on December 9, 2021

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.

Answered by Malvineous on December 9, 2021

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.

Answered by Tommy on December 9, 2021

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.

Answered by dciurchea on December 9, 2021

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.

Answered by scruss on December 9, 2021

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).

Answered by Dithermaster on December 9, 2021

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.

Answered by CJ Dennis on December 9, 2021

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

Answered by john_e on December 9, 2021

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.

Answered by Jeff Zeitlin on December 9, 2021

  • 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.

Answered by mcleod_ideafix on December 9, 2021

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.

Answered by TribalTalker on December 9, 2021

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.

Answered by TheBeardyMan on December 9, 2021

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.

Answered by dirkt on December 9, 2021

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.

Answered by Stephen Kitt on December 9, 2021

Terak had a fully downloadable font for its text mode.

Answered by Leo B. on December 9, 2021

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!)

Answered by snips-n-snails on December 9, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP