etherforth_logo

Node 514

Character bitmaps.

Source code

usb node 515 node 513 node 514
514 chars
go 00 @b 2* A table + dup a! 40 and if a right a! !
then @+ !b @ !b go ; 0A

table 0A
0 o, 0 o,
0 38444444 444438 g, 1 10301010 101010 g,
2 38440438 40407C g, 3 38440418 44438 g,
4 4848487C 80808 g, 5 78404078 44438 g,
6 30404078 444438 g, 7 7C040810 202020 g,
8 38444438 444438 g, 9 3844443C 40418 g,
a 3804 3C443C g, b 40407844 444478 g,
c 3C40 40403C g, d 4043C44 44443C g,
e 3844 7C403C g, f 10282070 202020 g,
g BC444444 3C0438 g, h 40407844 444444 g,
i 100030 101038 g, j 90001010 101060 g,
k 40404448 506844 g, l 10101010 101008 g,
m 7854 545454 g, n 5864 444444 g,
o 3844 444438 g, p F8444444 784040 g, 40

init left b! go ; 43

1 d 5 r 0 ether

Definitions

go
Fetch a char code, add offset (0A), and if the resulting address is greater than 3F we set A to RIGHT and send the address to node 515. We read two words from either our memory or from 515, and send back to LEFT.
init
Set B, and jump to go.

Description

This node contains first part of character bitmaps. Each character is stored as two 18-bit words, in little-endian order. Format of these two words is following:

333444445555566666

d00000111112222233

d
Descender bit. If set, the whole bitmap is shifted two double scan lines down.
nnnnn
Five bits of each slice. Slices are numbered from the top of the character matrix.

We calculate address of a character bitmap from its code. Since code has been incremented by one in node 513, the table begins with a space, i.e. empty bitmap. If this address overflows RAM size, we use it in node 515.