Strings - Raster

How are strings drawn by vectrex BIOS?

The vectrex BIOS stores a raster "image" of all characters supported, this can be seen e.g. by using dumpi:



Dumpi


Each char is represented by 7 bytes, each byte repressents one row of the character and each bit position one column. So the "pixel" size of one char is 8*7 (width * height).

If a string is to be printed, the BIOS loads the address of the bitmap, examines each character of the string and uses the char values as a lookup reference into the raster image and outputs in one long line the first row of all characters of the string.

Of each char (in the string) the first byte is read and the bits which are set are output with the "light switched on" and bits which are not set are output with the "light switched off".

Actually each line of a String output is one long line which changes its "pattern"-byte continually along the way. Lets call this thing a "string-line" for easier reference.

All raster outputs on a vectrex are more or less done exactly that way.

Outputting more than one line

There is virtually no way the above explained can be made more efficient. To output one byte of (raster) data you need one full "shift cycle". One shift cycle takes 18 (CPU) cylces. You can finish that sooner - than you did not output 8 bits, you can finish that later, but you will not output more bits. So - exactly 18 cycles is what it takes. Fullstop!

The only way one can change the output of "complete" strings is to change the things which are done in between the output of each string-line.

Take a look at the following image, here I show three different ways what can be done:



PrintString


BIOS routine - the original

This I call "uni directional output", in short:

Moon Lander routines (and some of "thomas")

This I call "bi directional output", in short:

Alex Herbert/Kristof Tuts (?) routines

This I call "synced output", in short:

Pros /Cons

uni directional output

bi directional output

synced output

Example routines can be found in codi:
codelib/Snippets/Malban/Print_Tests/