Slicing characters
This code from block 852 is loaded into node 513. It send horizontal slices of characters to 713 via 613, fetching those characters from 512 and their font from 514.
go
An infinite loop that displays 25 30-line rows and 18 blank lines.
row
- 3 blank lines
- Slice number (0) on stack
- For 9 slices:
- Display the characters in the row 3 times with the current slice
- Increment the slice number by 5
lines
Generate blank lines by sending a negative character.
chars
- Put slice number into a
- Fetch character from right (512)
- If negative, end-of-line; forward to 713 and exit
- Send to left (514)
- Fetch 2 words of character bits
- Extract 5-bit slice and forward to 713
- Repeat until end-of-line
slice
Double shift (36 bits) by amount in a.
- If high-order word negative, descender; reduce a by 10
- If negative, return 0 for top pixels
- If a is not 15
- If it's greater than 15, slice is in low-order word; subtract 18 and shift it
- Otherwise shift high-order word
- If a is 15, shift high-order word and append 3 bits of low-order
shift
- Shift left number of bits in a
- Shift right and mask 5 bits
out
Send number to up (713 via 613)