diff --git a/103grapheme.subx b/103grapheme.subx index c5615430..fa3b17d4 100644 --- a/103grapheme.subx +++ b/103grapheme.subx @@ -2,10 +2,6 @@ # # We need to do this in machine code because Mu doesn't have global variables # yet (for the start of the font). -# -# There are uncomfortable assumptions baked in here about english/latin -# script. We convert the grid of pixels into a fixed-width grid of graphemes, -# which may not work well with other language families. == code @@ -90,8 +86,9 @@ draw-grapheme-on-screen-buffer: # buffer: (addr byte), g: grapheme, x: int, y: 81 7/subop/compare %esi 0x80/imm32 0f 8d/jump-if->= $draw-grapheme-on-screen-buffer:end/disp32 # var letter-bitmap/esi = font[g] - c1 4/subop/shift-left %esi 4/imm8 + 69/multiply %esi 0x21/imm32/glyph-size 6/r32/esi 81 0/subop/add %esi Font/imm32 + 46/increment-esi # skip size # var ycurr/edx: int = y*16 8b/-> *(ebp+0x14) 2/r32/edx c1 4/subop/shift-left %edx 4/imm8 diff --git a/font.subx b/font.subx index d853a41e..1440e0ab 100644 --- a/font.subx +++ b/font.subx @@ -5,234 +5,366 @@ # See https://en.wikipedia.org/wiki/GNU_Unifont#The_.hex_font_format # Website: http://unifoundry.com/unifont/index.html # License: http://unifoundry.com/LICENSE.txt (GPL v2) -# Each line below is a bitmap for a single character. -# Each byte within a line is a bitmap for a single row of 8 pixels. +# Each glyph consists of a 1-byte size followed by a 16-byte bitmap. +# The size can currently be only 8 or 16 (10). +# * If it's 8, the glyph is 8 pixels wide, each row consists of one byte, and +# the last 8 bytes of the bitmap are ignored. +# * If it's 16, the glyph is 16 pixels wide, and each row consists of two +# bytes. == data Font: # some unprintable ASCII chars - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 08/size # nul character hard-coded to 8 bits wide + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # nul character hard-coded to blank + 10/size + aa aa 00 01 80 00 00 01 80 00 39 93 c2 52 32 5f 8a 52 71 93 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 3b a5 c1 24 31 19 89 24 71 25 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 7b a5 c1 24 79 19 c1 24 79 25 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 79 bf c2 48 7a 49 c2 48 79 89 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 7a 4d c2 52 7b 53 c2 d6 7a 4f 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 31 a5 ca 28 7a 31 ca 28 49 a5 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 73 d1 ca 10 73 d1 ca 10 73 df 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 1e 39 91 40 1e 31 91 08 1e 71 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 22 f9 a2 20 3e 21 a2 20 22 21 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 20 f9 a0 80 20 f9 a0 80 3e 81 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 22 f9 a2 20 22 21 94 20 08 21 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 3e f9 a0 80 3e f9 a0 80 20 81 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 1e f1 a0 88 20 f1 a0 90 1e 89 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 1e 71 a0 88 1c 89 82 88 3c 71 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 1e f9 a0 20 1c 21 82 20 3c f9 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 39 1d a5 10 25 1d a5 10 39 dd 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 71 89 ca 18 4a 09 ca 08 71 9d 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 71 99 ca 04 4a 09 ca 10 71 9d 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 71 99 ca 04 4a 19 ca 04 71 99 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 71 85 ca 0c 4a 15 ca 1c 71 85 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 49 93 ea 54 6a 59 db d4 4a 53 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 34 53 c2 9a 31 17 89 12 71 13 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 7b b9 c1 24 79 39 c1 24 79 39 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 33 25 c4 b4 47 ad c4 a4 34 a5 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 3e 89 a0 d8 3e a9 a0 88 3e 89 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 3a 5d c2 52 32 5d 8a 52 71 9d 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 79 cf c2 10 79 91 c0 50 7b 8f 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 1e 71 90 80 1e 61 90 10 10 e1 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 0e 71 90 80 16 61 92 10 0e e1 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 1c 71 92 80 1c 61 94 10 12 e1 80 00 00 01 80 00 00 01 80 00 55 55 + 10/size + aa aa 00 01 80 00 00 01 80 00 12 71 92 80 12 61 92 10 0c e1 80 00 00 01 80 00 00 01 80 00 55 55 # 0x20 = space - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ! - 00 00 00 00 08 08 08 08 08 08 08 00 08 08 00 00 + 08/size + 00 00 00 00 08 08 08 08 08 08 08 00 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # " - 00 00 22 22 22 22 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 00 22 22 22 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x23 = '#' - 00 00 00 00 12 12 12 7e 24 24 7e 48 48 48 00 00 + 08/size + 00 00 00 00 12 12 12 7e 24 24 7e 48 48 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # $ - 00 00 00 00 08 3e 49 48 38 0e 09 49 3e 08 00 00 + 08/size + 00 00 00 00 08 3e 49 48 38 0e 09 49 3e 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # % - 00 00 00 00 31 4a 4a 34 08 08 16 29 29 46 00 00 + 08/size + 00 00 00 00 31 4a 4a 34 08 08 16 29 29 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # & - 00 00 00 00 1c 22 22 14 18 29 45 42 46 39 00 00 + 08/size + 00 00 00 00 1c 22 22 14 18 29 45 42 46 39 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ' - 00 00 08 08 08 08 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 00 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ( - 00 00 00 04 08 08 10 10 10 10 10 10 08 08 04 00 + 08/size + 00 00 00 04 08 08 10 10 10 10 10 10 08 08 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ) - 00 00 00 20 10 10 08 08 08 08 08 08 10 10 20 00 + 08/size + 00 00 00 20 10 10 08 08 08 08 08 08 10 10 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # * - 00 00 00 00 00 00 08 49 2a 1c 2a 49 08 00 00 00 + 08/size + 00 00 00 00 00 00 08 49 2a 1c 2a 49 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # + - 00 00 00 00 00 00 08 08 08 7f 08 08 08 00 00 00 + 08/size + 00 00 00 00 00 00 08 08 08 7f 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # , - 00 00 00 00 00 00 00 00 00 00 00 00 18 08 08 10 + 08/size + 00 00 00 00 00 00 00 00 00 00 00 00 18 08 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # - - 00 00 00 00 00 00 00 00 00 3c 00 00 00 00 00 00 + 08/size + 00 00 00 00 00 00 00 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # . - 00 00 00 00 00 00 00 00 00 00 00 00 18 18 00 00 + 08/size + 00 00 00 00 00 00 00 00 00 00 00 00 18 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # / - 00 00 00 00 02 02 04 08 08 10 10 20 40 40 00 00 + 08/size + 00 00 00 00 02 02 04 08 08 10 10 20 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x30 = '0' - 00 00 00 00 18 24 42 46 4a 52 62 42 24 18 00 00 + 08/size + 00 00 00 00 18 24 42 46 4a 52 62 42 24 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 1 - 00 00 00 00 08 18 28 08 08 08 08 08 08 3e 00 00 + 08/size + 00 00 00 00 08 18 28 08 08 08 08 08 08 3e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 2 - 00 00 00 00 3c 42 42 02 0c 10 20 40 40 7e 00 00 + 08/size + 00 00 00 00 3c 42 42 02 0c 10 20 40 40 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 3 - 00 00 00 00 3c 42 42 02 1c 02 02 42 42 3c 00 00 + 08/size + 00 00 00 00 3c 42 42 02 1c 02 02 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 4 - 00 00 00 00 04 0c 14 24 44 44 7e 04 04 04 00 00 + 08/size + 00 00 00 00 04 0c 14 24 44 44 7e 04 04 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 5 - 00 00 00 00 7e 40 40 40 7c 02 02 02 42 3c 00 00 + 08/size + 00 00 00 00 7e 40 40 40 7c 02 02 02 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 6 - 00 00 00 00 1c 20 40 40 7c 42 42 42 42 3c 00 00 + 08/size + 00 00 00 00 1c 20 40 40 7c 42 42 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 7 - 00 00 00 00 7e 02 02 04 04 04 08 08 08 08 00 00 + 08/size + 00 00 00 00 7e 02 02 04 04 04 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 8 - 00 00 00 00 3c 42 42 42 3c 42 42 42 42 3c 00 00 + 08/size + 00 00 00 00 3c 42 42 42 3c 42 42 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 9 - 00 00 00 00 3c 42 42 42 3e 02 02 02 04 38 00 00 + 08/size + 00 00 00 00 3c 42 42 42 3e 02 02 02 04 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # : - 00 00 00 00 00 00 18 18 00 00 00 18 18 00 00 00 + 08/size + 00 00 00 00 00 00 18 18 00 00 00 18 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ; - 00 00 00 00 00 00 18 18 00 00 00 18 08 08 10 00 + 08/size + 00 00 00 00 00 00 18 18 00 00 00 18 08 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # < - 00 00 00 00 00 02 04 08 10 20 10 08 04 02 00 00 + 08/size + 00 00 00 00 00 02 04 08 10 20 10 08 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # = - 00 00 00 00 00 00 00 7e 00 00 00 7e 00 00 00 00 + 08/size + 00 00 00 00 00 00 00 7e 00 00 00 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # > - 00 00 00 00 00 40 20 10 08 04 08 10 20 40 00 00 + 08/size + 00 00 00 00 00 40 20 10 08 04 08 10 20 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ? - 00 00 00 00 3c 42 42 02 04 08 08 00 08 08 00 00 + 08/size + 00 00 00 00 3c 42 42 02 04 08 08 00 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x40 = @ - 00 00 00 00 1c 22 4a 56 52 52 52 4e 20 1e 00 00 + 08/size + 00 00 00 00 1c 22 4a 56 52 52 52 4e 20 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # A - 00 00 00 00 18 24 24 42 42 7e 42 42 42 42 00 00 + 08/size + 00 00 00 00 18 24 24 42 42 7e 42 42 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # B - 00 00 00 00 7c 42 42 42 7c 42 42 42 42 7c 00 00 + 08/size + 00 00 00 00 7c 42 42 42 7c 42 42 42 42 7c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # C - 00 00 00 00 3c 42 42 40 40 40 40 42 42 3c 00 00 + 08/size + 00 00 00 00 3c 42 42 40 40 40 40 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # D - 00 00 00 00 78 44 42 42 42 42 42 42 44 78 00 00 + 08/size + 00 00 00 00 78 44 42 42 42 42 42 42 44 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # E - 00 00 00 00 7e 40 40 40 7c 40 40 40 40 7e 00 00 + 08/size + 00 00 00 00 7e 40 40 40 7c 40 40 40 40 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # F - 00 00 00 00 7e 40 40 40 7c 40 40 40 40 40 00 00 + 08/size + 00 00 00 00 7e 40 40 40 7c 40 40 40 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # G - 00 00 00 00 3c 42 42 40 40 4e 42 42 46 3a 00 00 + 08/size + 00 00 00 00 3c 42 42 40 40 4e 42 42 46 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # H - 00 00 00 00 42 42 42 42 7e 42 42 42 42 42 00 00 + 08/size + 00 00 00 00 42 42 42 42 7e 42 42 42 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # I - 00 00 00 00 3e 08 08 08 08 08 08 08 08 3e 00 00 + 08/size + 00 00 00 00 3e 08 08 08 08 08 08 08 08 3e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # J - 00 00 00 00 1f 04 04 04 04 04 04 44 44 38 00 00 + 08/size + 00 00 00 00 1f 04 04 04 04 04 04 44 44 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # K - 00 00 00 00 42 44 48 50 60 60 50 48 44 42 00 00 + 08/size + 00 00 00 00 42 44 48 50 60 60 50 48 44 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # L - 00 00 00 00 40 40 40 40 40 40 40 40 40 7e 00 00 + 08/size + 00 00 00 00 40 40 40 40 40 40 40 40 40 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # M - 00 00 00 00 42 42 66 66 5a 5a 42 42 42 42 00 00 + 08/size + 00 00 00 00 42 42 66 66 5a 5a 42 42 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # N - 00 00 00 00 42 62 62 52 52 4a 4a 46 46 42 00 00 + 08/size + 00 00 00 00 42 62 62 52 52 4a 4a 46 46 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # O - 00 00 00 00 3c 42 42 42 42 42 42 42 42 3c 00 00 + 08/size + 00 00 00 00 3c 42 42 42 42 42 42 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x50 = P - 00 00 00 00 7c 42 42 42 7c 40 40 40 40 40 00 00 + 08/size + 00 00 00 00 7c 42 42 42 7c 40 40 40 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # Q - 00 00 00 00 3c 42 42 42 42 42 42 5a 66 3c 03 00 + 08/size + 00 00 00 00 3c 42 42 42 42 42 42 5a 66 3c 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # R - 00 00 00 00 7c 42 42 42 7c 48 44 44 42 42 00 00 + 08/size + 00 00 00 00 7c 42 42 42 7c 48 44 44 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # S - 00 00 00 00 3c 42 42 40 30 0c 02 42 42 3c 00 00 + 08/size + 00 00 00 00 3c 42 42 40 30 0c 02 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # T - 00 00 00 00 7f 08 08 08 08 08 08 08 08 08 00 00 + 08/size + 00 00 00 00 7f 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # U - 00 00 00 00 42 42 42 42 42 42 42 42 42 3c 00 00 + 08/size + 00 00 00 00 42 42 42 42 42 42 42 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # V - 00 00 00 00 41 41 41 22 22 22 14 14 08 08 00 00 + 08/size + 00 00 00 00 41 41 41 22 22 22 14 14 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # W - 00 00 00 00 42 42 42 42 5a 5a 66 66 42 42 00 00 + 08/size + 00 00 00 00 42 42 42 42 5a 5a 66 66 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # X - 00 00 00 00 42 42 24 24 18 18 24 24 42 42 00 00 + 08/size + 00 00 00 00 42 42 24 24 18 18 24 24 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # Y - 00 00 00 00 41 41 22 22 14 08 08 08 08 08 00 00 + 08/size + 00 00 00 00 41 41 22 22 14 08 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # Z - 00 00 00 00 7e 02 02 04 08 10 20 40 40 7e 00 00 + 08/size + 00 00 00 00 7e 02 02 04 08 10 20 40 40 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # [ - 00 00 00 0e 08 08 08 08 08 08 08 08 08 08 0e 00 + 08/size + 00 00 00 0e 08 08 08 08 08 08 08 08 08 08 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # \ - 00 00 00 00 40 40 20 10 10 08 08 04 02 02 00 00 + 08/size + 00 00 00 00 40 40 20 10 10 08 08 04 02 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ] - 00 00 00 70 10 10 10 10 10 10 10 10 10 10 70 00 + 08/size + 00 00 00 70 10 10 10 10 10 10 10 10 10 10 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ^ - 00 00 18 24 42 00 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 00 18 24 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # _ - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7f 00 + 08/size + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x60 = backtick - 00 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 20 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # a - 00 00 00 00 00 00 3c 42 02 3e 42 42 46 3a 00 00 + 08/size + 00 00 00 00 00 00 3c 42 02 3e 42 42 46 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # b - 00 00 00 40 40 40 5c 62 42 42 42 42 62 5c 00 00 + 08/size + 00 00 00 40 40 40 5c 62 42 42 42 42 62 5c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # c - 00 00 00 00 00 00 3c 42 40 40 40 40 42 3c 00 00 + 08/size + 00 00 00 00 00 00 3c 42 40 40 40 40 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # d - 00 00 00 02 02 02 3a 46 42 42 42 42 46 3a 00 00 + 08/size + 00 00 00 02 02 02 3a 46 42 42 42 42 46 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # e - 00 00 00 00 00 00 3c 42 42 7e 40 40 42 3c 00 00 + 08/size + 00 00 00 00 00 00 3c 42 42 7e 40 40 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # f - 00 00 00 0c 10 10 10 7c 10 10 10 10 10 10 00 00 + 08/size + 00 00 00 0c 10 10 10 7c 10 10 10 10 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # g - 00 00 00 00 00 02 3a 44 44 44 38 20 3c 42 42 3c + 08/size + 00 00 00 00 00 02 3a 44 44 44 38 20 3c 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # h - 00 00 00 40 40 40 5c 62 42 42 42 42 42 42 00 00 + 08/size + 00 00 00 40 40 40 5c 62 42 42 42 42 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # i - 00 00 00 08 08 00 18 08 08 08 08 08 08 3e 00 00 + 08/size + 00 00 00 08 08 00 18 08 08 08 08 08 08 3e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # j - 00 00 00 04 04 00 0c 04 04 04 04 04 04 04 48 30 + 08/size + 00 00 00 04 04 00 0c 04 04 04 04 04 04 04 48 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # k - 00 00 00 40 40 40 44 48 50 60 50 48 44 42 00 00 + 08/size + 00 00 00 40 40 40 44 48 50 60 50 48 44 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # l - 00 00 00 18 08 08 08 08 08 08 08 08 08 3e 00 00 + 08/size + 00 00 00 18 08 08 08 08 08 08 08 08 08 3e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # m - 00 00 00 00 00 00 76 49 49 49 49 49 49 49 00 00 + 08/size + 00 00 00 00 00 00 76 49 49 49 49 49 49 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # n - 00 00 00 00 00 00 5c 62 42 42 42 42 42 42 00 00 + 08/size + 00 00 00 00 00 00 5c 62 42 42 42 42 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # o - 00 00 00 00 00 00 3c 42 42 42 42 42 42 3c 00 00 + 08/size + 00 00 00 00 00 00 3c 42 42 42 42 42 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x70 = p - 00 00 00 00 00 00 5c 62 42 42 42 42 62 5c 40 40 + 08/size + 00 00 00 00 00 00 5c 62 42 42 42 42 62 5c 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # q - 00 00 00 00 00 00 3a 46 42 42 42 42 46 3a 02 02 + 08/size + 00 00 00 00 00 00 3a 46 42 42 42 42 46 3a 02 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # r - 00 00 00 00 00 00 5c 62 42 40 40 40 40 40 00 00 + 08/size + 00 00 00 00 00 00 5c 62 42 40 40 40 40 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # s - 00 00 00 00 00 00 3c 42 40 30 0c 02 42 3c 00 00 + 08/size + 00 00 00 00 00 00 3c 42 40 30 0c 02 42 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # t - 00 00 00 00 10 10 10 7c 10 10 10 10 10 0c 00 00 + 08/size + 00 00 00 00 10 10 10 7c 10 10 10 10 10 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # u - 00 00 00 00 00 00 42 42 42 42 42 42 46 3a 00 00 + 08/size + 00 00 00 00 00 00 42 42 42 42 42 42 46 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # v - 00 00 00 00 00 00 42 42 42 24 24 24 18 18 00 00 + 08/size + 00 00 00 00 00 00 42 42 42 24 24 24 18 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # w - 00 00 00 00 00 00 41 49 49 49 49 49 49 36 00 00 + 08/size + 00 00 00 00 00 00 41 49 49 49 49 49 49 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # x - 00 00 00 00 00 00 42 42 24 18 18 24 42 42 00 00 + 08/size + 00 00 00 00 00 00 42 42 24 18 18 24 42 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # y - 00 00 00 00 00 00 42 42 42 42 42 26 1a 02 02 3c + 08/size + 00 00 00 00 00 00 42 42 42 42 42 26 1a 02 02 3c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # z - 00 00 00 00 00 00 7e 02 04 08 10 20 40 7e 00 00 + 08/size + 00 00 00 00 00 00 7e 02 04 08 10 20 40 7e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # { - 00 00 00 0c 10 10 08 08 10 20 10 08 08 10 10 0c + 08/size + 00 00 00 0c 10 10 08 08 10 20 10 08 08 10 10 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # | - 00 00 08 08 08 08 08 08 08 08 08 08 08 08 08 08 + 08/size + 00 00 08 08 08 08 08 08 08 08 08 08 08 08 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # } - 00 00 00 30 08 08 10 10 08 04 08 10 10 08 08 30 + 08/size + 00 00 00 30 08 08 10 10 08 04 08 10 10 08 08 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # ~ - 00 00 00 31 49 46 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 00 00 31 49 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # 0x7f = del (unused) - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 08/size + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/vocabulary.md b/vocabulary.md index a130b26b..ef41a243 100644 --- a/vocabulary.md +++ b/vocabulary.md @@ -141,9 +141,8 @@ All text-mode screen primitives require a screen object, which can be either the real screen on the computer or a fake screen for tests. The real screen on the Mu computer can currently display only ASCII characters, -though it's easy to import more of the font. There is only one font. All -graphemes are 8 pixels wide and 16 pixels tall. These constraints only apply -to the real screen. +though it's easy to import more of the font. There is only one font, and it's +mostly fixed-width, with graphemes being either 8 or 16 pixels wide. - `draw-grapheme`: draws a single grapheme at a given coordinate, with given foreground and background colors.