moa/emulator/systems/trs80/src/peripherals/charset.rs

695 lines
7.9 KiB
Rust
Raw Normal View History

const CHARACTERS: [[u8; 8]; 64] = [
// Blank
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Character !
2021-11-08 06:44:40 +00:00
[ 0b001000,
0b001000,
0b001000,
0b001000,
0b001000,
0b000000,
0b001000,
0b000000 ],
// Character "
2021-11-08 06:44:40 +00:00
[ 0b010100,
0b010100,
0b010100,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Character #
2021-11-08 06:44:40 +00:00
[ 0b010100,
0b010100,
0b111110,
0b010100,
0b111110,
0b010100,
0b010100,
0b000000 ],
// Character $
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b101010,
0b101000,
0b011100,
0b001010,
0b101010,
0b011100,
0b001000 ],
// Character %
2021-11-08 06:44:40 +00:00
[ 0b110010,
0b110100,
0b000100,
0b001000,
0b010000,
0b010110,
0b100110,
0b000000 ],
// Character &
2021-11-08 06:44:40 +00:00
[ 0b001000,
0b010100,
0b010100,
0b001000,
0b011000,
0b100110,
0b011100,
0b000000 ],
// Character '
2021-11-08 06:44:40 +00:00
[ 0b010000,
0b010000,
0b010000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Character (
2021-11-08 06:44:40 +00:00
[ 0b000100,
0b001000,
0b010000,
0b010000,
0b010000,
0b001000,
0b000100,
0b000000 ],
// Character )
2021-11-08 06:44:40 +00:00
[ 0b001000,
0b000100,
0b000010,
0b000010,
0b000010,
0b000100,
0b001000,
0b000000 ],
// Character *
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b010100,
0b001000,
0b010100,
0b000000,
0b000000,
0b000000 ],
// Character +
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b001000,
0b011100,
0b001000,
0b000000,
0b000000,
0b000000 ],
// Character ,
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000100,
0b000100,
0b001000,
0b000000 ],
// Character -
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b011100,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Character .
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b001100,
0b001100,
0b000000,
0b000000 ],
// Character /
2021-11-08 06:44:40 +00:00
[ 0b000010,
0b000100,
0b000100,
0b001000,
0b010000,
0b010000,
0b100000,
0b000000 ],
// Character 0
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b110010,
0b101010,
0b100110,
0b100010,
0b011100,
0b000000 ],
// Character 1
2021-11-08 06:44:40 +00:00
[ 0b001000,
0b011000,
0b001000,
0b001000,
0b001000,
0b001000,
0b011100,
0b000000 ],
// Character 2
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b000010,
0b000100,
0b001000,
0b010000,
0b111110,
0b000000 ],
// Character 3
2021-11-08 06:44:40 +00:00
[ 0b111100,
0b000010,
0b000010,
0b011100,
0b000010,
0b000010,
0b111100,
0b000000 ],
// Character 4
2021-11-08 06:44:40 +00:00
[ 0b000010,
0b000110,
0b001010,
0b010010,
0b111110,
0b000010,
0b000010,
0b000000 ],
// Character 5
2021-11-08 06:44:40 +00:00
[ 0b111110,
0b100000,
0b100000,
0b111110,
0b000010,
0b000010,
0b111100,
0b000000 ],
// Character 6
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100000,
0b111100,
0b100010,
0b100010,
0b011100,
0b000000 ],
// Character 7
2021-11-08 06:44:40 +00:00
[ 0b111110,
0b000010,
0b000100,
0b001000,
0b010000,
0b010000,
0b010000,
0b000000 ],
// Character 8
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100010,
0b011100,
0b100010,
0b100010,
0b011100,
0b000000 ],
// Character 9
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100010,
0b011110,
0b000010,
0b000010,
0b011100,
0b000000 ],
// Character :
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b011000,
0b011000,
0b000000,
0b011000,
0b011000,
0b000000 ],
// Character ;
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b011000,
0b011000,
0b000000,
0b001000,
0b001000,
0b000000 ],
// Character <
2021-11-08 06:44:40 +00:00
[ 0b000010,
0b000100,
0b001000,
0b010000,
0b001000,
0b000100,
0b000010,
0b000000 ],
// Character =
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b111110,
0b000000,
0b111110,
0b000000,
0b000000,
0b000000 ],
// Character >
2021-11-08 06:44:40 +00:00
[ 0b010000,
0b001000,
0b000100,
0b000010,
0b000100,
0b001000,
0b010000,
0b000000 ],
// Character ?
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b000010,
0b000100,
0b001000,
0b000000,
0b001000,
0b000000 ],
// Character @
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b101010,
0b101110,
0b100000,
0b100010,
0b011100,
0b000000 ],
// Letter A
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100010,
0b111110,
0b100010,
0b100010,
0b100010,
0b000000 ],
// Letter B
2021-11-08 06:44:40 +00:00
[ 0b111100,
0b100010,
0b100010,
0b111100,
0b100010,
0b100010,
0b111100,
0b000000 ],
// Letter C
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100000,
0b100000,
0b100000,
0b100010,
0b011100,
0b000000 ],
// Letter D
2021-11-08 06:44:40 +00:00
[ 0b111100,
0b100010,
0b100010,
0b100010,
0b100010,
0b100010,
0b111100,
0b000000 ],
// Letter E
2021-11-08 06:44:40 +00:00
[ 0b111110,
0b100000,
0b100000,
0b111110,
0b100000,
0b100000,
0b111110,
0b000000 ],
// Letter F
2021-11-08 06:44:40 +00:00
[ 0b111110,
0b100000,
0b100000,
0b111110,
0b100000,
0b100000,
0b100000,
0b000000 ],
// Letter G
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100000,
0b100110,
0b100010,
0b100010,
0b011110,
0b000000 ],
// Letter H
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b100010,
0b100010,
0b111110,
0b100010,
0b100010,
0b100010,
0b000000 ],
// Letter I
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b001000,
0b001000,
0b001000,
0b001000,
0b001000,
0b011100,
0b000000 ],
// Letter J
2021-11-08 06:44:40 +00:00
[ 0b000010,
0b000010,
0b000010,
0b000010,
0b000010,
0b100010,
0b011100,
0b000000 ],
// Letter K
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b100100,
0b101000,
0b110000,
0b101000,
0b100100,
0b100010,
0b000000 ],
// Letter L
2021-11-08 06:44:40 +00:00
[ 0b100000,
0b100000,
0b100000,
0b100000,
0b100000,
0b100000,
0b111100,
0b000000 ],
// Letter M
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b100010,
0b110110,
0b101010,
0b100010,
0b100010,
0b100010,
0b000000 ],
// Letter N
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b110010,
0b101010,
0b101010,
0b100110,
0b100010,
0b100010,
0b000000 ],
// Letter O
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100010,
0b100010,
0b100010,
0b100010,
0b011100,
0b000000 ],
// Letter P
2021-11-08 06:44:40 +00:00
[ 0b111100,
0b100010,
0b100010,
0b111100,
0b100000,
0b100000,
0b100000,
0b000000 ],
// Letter Q
2021-11-08 06:44:40 +00:00
[ 0b011100,
0b100010,
0b100010,
0b100010,
0b100010,
0b100110,
0b011110,
0b000000 ],
// Letter R
2021-11-08 06:44:40 +00:00
[ 0b111100,
0b100010,
0b100010,
0b111100,
0b100100,
0b100010,
0b100010,
0b000000 ],
// Letter S
2021-11-08 06:44:40 +00:00
[ 0b011110,
0b100000,
0b100000,
0b011100,
0b000010,
0b000010,
0b111100,
0b000000 ],
// Letter T
2021-11-08 06:44:40 +00:00
[ 0b111110,
0b001000,
0b001000,
0b001000,
0b001000,
0b001000,
0b001000,
0b000000 ],
// Letter U
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b100010,
0b100010,
0b100010,
0b100010,
0b100010,
0b011100,
0b000000 ],
// Letter V
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b100010,
0b100010,
0b100010,
0b100010,
0b010100,
0b001000,
0b000000 ],
// Letter W
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b100010,
0b100010,
0b100010,
0b101010,
0b101010,
0b010100,
0b000000 ],
// Letter X
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b100010,
0b010100,
0b001000,
0b001000,
0b010100,
0b100010,
0b000000 ],
// Letter Y
2021-11-08 06:44:40 +00:00
[ 0b100010,
0b100010,
0b100010,
0b010100,
0b001000,
0b001000,
0b001000,
0b000000 ],
// Letter Z
2021-11-08 06:44:40 +00:00
[ 0b111110,
0b000010,
0b000100,
0b001000,
0b010000,
0b100000,
0b111110,
0b000000 ],
//////// LEFT TO DO ///////
// Blank
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Blank
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Blank
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Blank
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
// Blank
2021-11-08 06:44:40 +00:00
[ 0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000,
0b000000 ],
];
use moa_host::Pixel;
pub struct CharacterGenerator {
pub row: i8,
pub col: i8,
pub data: &'static [u8; 8],
}
impl CharacterGenerator {
pub fn new(ch: u8) -> Self {
Self {
row: 0,
2021-11-08 06:44:40 +00:00
col: 5,
data: &CHARACTERS[ch as usize],
}
}
}
impl Iterator for CharacterGenerator {
type Item = Pixel;
fn next(&mut self) -> Option<Self::Item> {
if self.row >= 8 {
None
} else {
let bit = (self.data[self.row as usize] & (1 << self.col)) != 0;
self.col -= 1;
if self.col < 0 {
2021-11-08 06:44:40 +00:00
self.col = 5;
self.row += 1;
}
if bit {
Some(Pixel::Rgb(0xC0, 0xC0, 0xC0))
} else {
Some(Pixel::Rgb(0, 0, 0))
}
}
}
}