├── Manifest.py ├── .gitignore ├── LICENSE-APACHE ├── LICENSE-MIT ├── README.md └── src ├── console.v ├── attributemap.v └── glyphmap.v /Manifest.py: -------------------------------------------------------------------------------- 1 | files = [ 2 | "./src/console.v", 3 | "./src/attributemap.v", 4 | "./src/glyphmap.v", 5 | ] 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .venv 3 | *.pin 4 | *.pof 5 | *.sof 6 | *.qpf 7 | *.qsf 8 | *.sid 9 | *.map.* 10 | *.sta.* 11 | *.fit.* 12 | bitstream.tcl 13 | bitstream 14 | incremental_db 15 | *.hdb 16 | *.cdb 17 | *.ddb 18 | *.idb 19 | *.rdb 20 | *.logdb 21 | *.qmsg 22 | *.hsd 23 | *.ammdb 24 | db 25 | *.rpt 26 | *.sld 27 | *.jdi 28 | *.done 29 | *.pow.* 30 | Makefile 31 | project 32 | project.tcl 33 | files.tcl 34 | *.vcd 35 | *.vvp 36 | run.command 37 | modelsim.ini 38 | transcript 39 | work/ 40 | *.wlf -------------------------------------------------------------------------------- /LICENSE-APACHE: -------------------------------------------------------------------------------- 1 | Copyright 2019 Sameer Puri 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Sameer Puri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vga-text-mode 2 | 3 | Verilog code for [VGA-compatible text mode](https://en.wikipedia.org/wiki/VGA-compatible_text_mode) on an [FPGA](https://simple.wikipedia.org/wiki/Field-programmable_gate_array). 4 | 5 | ## Usage 6 | 7 | 1. Take files from `src/` and add them to your own project. If you use [hdlmake](https://hdlmake.readthedocs.io/en/master/), you can add this repository itself as a remote module. 8 | 1. Other helpful modules are also available in this GitHub organization. 9 | 1. Consult the usage example in [hdmi-demo](https://github.com/hdl-util/hdmi-demo) for code that runs a demo over HDMI. 10 | 1. Read through the parameters in `console.sv` and tailor any instantiations to your situation. 11 | 1. Please create an issue if you run into a problem or have any questions. 12 | 13 | ### Custom fonts 14 | 15 | The default font is the well reputed [Terminus font](https://web.archive.org/web/20080612214835/http://www.is-vn.bg/hamster/jimmy-en.html) in 8x16. You can change the font to one of your liking using [psf2verilog](https://github.com/sameer/psf2verilog) to generate a drop-in replacement for `glyphmap.v`. 16 | 17 | ### To-do List 18 | 19 | * [x] Code point 20 | * [x] Foreground color 21 | * [x] Background color 22 | * [x] Blink 23 | * [ ] Custom font sizes 24 | * Only fonts with sizes that are multiples of 8 work currently 25 | 26 | ## Special Thanks 27 | 28 | * [Detailed Wikipedia article by Incnis Mrsi](https://en.wikipedia.org/wiki/VGA-compatible_text_mode) 29 | -------------------------------------------------------------------------------- /src/console.v: -------------------------------------------------------------------------------- 1 | module console # ( 2 | parameter BIT_WIDTH = 12, 3 | parameter BIT_HEIGHT = 11, 4 | parameter FONT_WIDTH = 8, 5 | parameter FONT_HEIGHT = 16 6 | ) ( 7 | input wire clk_pixel, 8 | input wire [7:0] codepoint, 9 | input wire [7:0] attribute, 10 | input wire [BIT_WIDTH-1:0] cx, 11 | input wire [BIT_HEIGHT-1:0] cy, 12 | output reg [23:0] rgb = 24'd0 13 | ); 14 | 15 | wire [127:0] glyph; 16 | glyphmap glyphmap(.codepoint(codepoint), .glyph(glyph)); 17 | 18 | wire [23:0] fgrgb, bgrgb; 19 | wire blink; 20 | attributemap attributemap(.attribute(attribute), .fgrgb(fgrgb), .bgrgb(bgrgb), .blink(blink)); 21 | 22 | reg [BIT_HEIGHT-1:0] prevcy = 0; 23 | reg [$clog2(FONT_HEIGHT)-1:0] vindex = 0; 24 | reg [$clog2(FONT_WIDTH)-1:0] hindex = 0; 25 | reg [5:0] blink_timer = 0; 26 | 27 | always @(posedge clk_pixel) 28 | begin 29 | if (cx == 0 && cy == 0) 30 | begin 31 | prevcy <= 0; 32 | vindex <= 0; 33 | hindex <= 0; 34 | blink_timer <= blink_timer + 1'b1; 35 | end 36 | else if (prevcy != cy) 37 | begin 38 | prevcy <= cy; 39 | vindex <= vindex == FONT_HEIGHT - 1 ? 1'b0 : vindex + 1'b1; 40 | hindex <= 0; 41 | end 42 | else 43 | begin 44 | hindex <= hindex == FONT_WIDTH - 1 ? 1'b0 : hindex + 1'b1; 45 | end 46 | 47 | if (blink && blink_timer[5]) 48 | rgb <= bgrgb; 49 | else 50 | rgb <= glyph[{~vindex, ~hindex}] ? fgrgb : bgrgb; 51 | end 52 | endmodule 53 | -------------------------------------------------------------------------------- /src/attributemap.v: -------------------------------------------------------------------------------- 1 | module attributemap ( 2 | input wire [7:0] attribute, 3 | output wire [23:0] fgrgb, 4 | output wire [23:0] bgrgb, 5 | output wire blink 6 | ); 7 | // See https://en.wikipedia.org/wiki/Video_Graphics_Array#Color_palette 8 | assign blink = attribute[7]; 9 | assign bgrgb = attribute[6:4] == 3'b000 ? 24'h000000 10 | : attribute[6:4] == 3'b001 ? 24'h0000AA 11 | : attribute[6:4] == 3'b010 ? 24'h00AA00 12 | : attribute[6:4] == 3'b011 ? 24'h00AAAA 13 | : attribute[6:4] == 3'b100 ? 24'hAA0000 14 | : attribute[6:4] == 3'b101 ? 24'hAA00AA 15 | : attribute[6:4] == 3'b110 ? 24'hAA5500 16 | : attribute[6:4] == 3'b111 ? 24'hAAAAAA 17 | : 24'h000000; 18 | 19 | assign fgrgb = attribute[3:0] == 4'h0 ? 24'h000000 20 | : attribute[3:0] == 4'h1 ? 24'h0000AA 21 | : attribute[3:0] == 4'h2 ? 24'h00AA00 22 | : attribute[3:0] == 4'h3 ? 24'h00AAAA 23 | : attribute[3:0] == 4'h4 ? 24'hAA0000 24 | : attribute[3:0] == 4'h5 ? 24'hAA00AA 25 | : attribute[3:0] == 4'h6 ? 24'hAA5500 26 | : attribute[3:0] == 4'h7 ? 24'hAAAAAA 27 | : attribute[3:0] == 4'h8 ? 24'h555555 28 | : attribute[3:0] == 4'h9 ? 24'h5555FF 29 | : attribute[3:0] == 4'hA ? 24'h55FF55 30 | : attribute[3:0] == 4'hB ? 24'h55FFFF 31 | : attribute[3:0] == 4'hC ? 24'hFF5555 32 | : attribute[3:0] == 4'hD ? 24'hFF55FF 33 | : attribute[3:0] == 4'hE ? 24'hFFFF55 34 | : attribute[3:0] == 4'hF ? 24'hFFFFFF 35 | : 24'h000000; 36 | 37 | endmodule 38 | -------------------------------------------------------------------------------- /src/glyphmap.v: -------------------------------------------------------------------------------- 1 | module glyphmap ( input wire [7:0] codepoint, output wire [127:0] glyph ); 2 | assign glyph = codepoint == 8'b00000000 ? 128'h00007E42424242424242427E00000000 3 | : codepoint == 8'b00000001 ? 128'h00007C82AA8282BA9282827C00000000 4 | : codepoint == 8'b00000010 ? 128'h00007CFED6FEFEC6EEFEFE7C00000000 5 | : codepoint == 8'b00000011 ? 128'h000000006CFEFEFEFE7C381000000000 6 | : codepoint == 8'b00000100 ? 128'h0000000010387CFE7C38100000000000 7 | : codepoint == 8'b00000101 ? 128'h00001038381054FEFE54103800000000 8 | : codepoint == 8'b00000110 ? 128'h00001010387CFEFE7C10103800000000 9 | : codepoint == 8'b00000111 ? 128'h000000000000183C3C18000000000000 10 | : codepoint == 8'b00001000 ? 128'hFFFFFFFFFFFFE7C3C3E7FFFFFFFFFFFF 11 | : codepoint == 8'b00001001 ? 128'h00000000000018242418000000000000 12 | : codepoint == 8'b00001010 ? 128'hFFFFFFFFFFFFE7DBDBE7FFFFFFFFFFFF 13 | : codepoint == 8'b00001011 ? 128'h00001E060A1238444444443800000000 14 | : codepoint == 8'b00001100 ? 128'h0000384444444438107C101000000000 15 | : codepoint == 8'b00001101 ? 128'h00003E223E202020202020C000000000 16 | : codepoint == 8'b00001110 ? 128'h00007E427E4242424242424480000000 17 | : codepoint == 8'b00001111 ? 128'h00000010925438EE3854921000000000 18 | : codepoint == 8'b00010000 ? 128'h00000000C0F0FCFFFCF0C00000000000 19 | : codepoint == 8'b00010001 ? 128'h00000000030F3FFF3F0F030000000000 20 | : codepoint == 8'b00010010 ? 128'h00001038541010101054381000000000 21 | : codepoint == 8'b00010011 ? 128'h00002424242424242400242400000000 22 | : codepoint == 8'b00010100 ? 128'h00007E92929292721212121200000000 23 | : codepoint == 8'b00010101 ? 128'h00384440304844442418044438000000 24 | : codepoint == 8'b00010110 ? 128'h00000000000000007E7E7E7E00000000 25 | : codepoint == 8'b00010111 ? 128'h00001038541010105438107C00000000 26 | : codepoint == 8'b00011000 ? 128'h00001038541010101010101000000000 27 | : codepoint == 8'b00011001 ? 128'h00001010101010101054381000000000 28 | : codepoint == 8'b00011010 ? 128'h00000000000804FE0408000000000000 29 | : codepoint == 8'b00011011 ? 128'h00000000002040FE4020000000000000 30 | : codepoint == 8'b00011100 ? 128'h0000000040404040407E000000000000 31 | : codepoint == 8'b00011101 ? 128'h00000000002442FF4224000000000000 32 | : codepoint == 8'b00011110 ? 128'h00000000101038387C7CFEFE00000000 33 | : codepoint == 8'b00011111 ? 128'h00000000FEFE7C7C3838101000000000 34 | : codepoint == 8'b00100000 ? 128'h00000000000000000000000000000000 35 | : codepoint == 8'b00100001 ? 128'h00001010101010101000101000000000 36 | : codepoint == 8'b00100010 ? 128'h00242424000000000000000000000000 37 | : codepoint == 8'b00100011 ? 128'h00002424247E24247E24242400000000 38 | : codepoint == 8'b00100100 ? 128'h0010107C9290907C1212927C10100000 39 | : codepoint == 8'b00100101 ? 128'h0000649468081010202C524C00000000 40 | : codepoint == 8'b00100110 ? 128'h000018242418304A4444443A00000000 41 | : codepoint == 8'b00100111 ? 128'h00101010000000000000000000000000 42 | : codepoint == 8'b00101000 ? 128'h00000810202020202020100800000000 43 | : codepoint == 8'b00101001 ? 128'h00002010080808080808102000000000 44 | : codepoint == 8'b00101010 ? 128'h000000000024187E1824000000000000 45 | : codepoint == 8'b00101011 ? 128'h000000000010107C1010000000000000 46 | : codepoint == 8'b00101100 ? 128'h00000000000000000000101020000000 47 | : codepoint == 8'b00101101 ? 128'h000000000000007E0000000000000000 48 | : codepoint == 8'b00101110 ? 128'h00000000000000000000101000000000 49 | : codepoint == 8'b00101111 ? 128'h00000404080810102020404000000000 50 | : codepoint == 8'b00110000 ? 128'h00003C4242464A526242423C00000000 51 | : codepoint == 8'b00110001 ? 128'h00000818280808080808083E00000000 52 | : codepoint == 8'b00110010 ? 128'h00003C42420204081020407E00000000 53 | : codepoint == 8'b00110011 ? 128'h00003C4242021C020242423C00000000 54 | : codepoint == 8'b00110100 ? 128'h000002060A1222427E02020200000000 55 | : codepoint == 8'b00110101 ? 128'h00007E4040407C020202423C00000000 56 | : codepoint == 8'b00110110 ? 128'h00001C2040407C424242423C00000000 57 | : codepoint == 8'b00110111 ? 128'h00007E02020404080810101000000000 58 | : codepoint == 8'b00111000 ? 128'h00003C4242423C424242423C00000000 59 | : codepoint == 8'b00111001 ? 128'h00003C424242423E0202043800000000 60 | : codepoint == 8'b00111010 ? 128'h00000000001010000000101000000000 61 | : codepoint == 8'b00111011 ? 128'h00000000001010000000101020000000 62 | : codepoint == 8'b00111100 ? 128'h00000004081020402010080400000000 63 | : codepoint == 8'b00111101 ? 128'h00000000007E00007E00000000000000 64 | : codepoint == 8'b00111110 ? 128'h00000040201008040810204000000000 65 | : codepoint == 8'b00111111 ? 128'h00003C42424204080800080800000000 66 | : codepoint == 8'b01000000 ? 128'h00007C829EA2A2A2A69A807E00000000 67 | : codepoint == 8'b01000001 ? 128'h00003C424242427E4242424200000000 68 | : codepoint == 8'b01000010 ? 128'h00007C4242427C424242427C00000000 69 | : codepoint == 8'b01000011 ? 128'h00003C42424040404042423C00000000 70 | : codepoint == 8'b01000100 ? 128'h00007844424242424242447800000000 71 | : codepoint == 8'b01000101 ? 128'h00007E40404078404040407E00000000 72 | : codepoint == 8'b01000110 ? 128'h00007E40404078404040404000000000 73 | : codepoint == 8'b01000111 ? 128'h00003C424240404E4242423C00000000 74 | : codepoint == 8'b01001000 ? 128'h0000424242427E424242424200000000 75 | : codepoint == 8'b01001001 ? 128'h00003810101010101010103800000000 76 | : codepoint == 8'b01001010 ? 128'h00000E04040404040444443800000000 77 | : codepoint == 8'b01001011 ? 128'h00004244485060605048444200000000 78 | : codepoint == 8'b01001100 ? 128'h00004040404040404040407E00000000 79 | : codepoint == 8'b01001101 ? 128'h000082C6AA9292828282828200000000 80 | : codepoint == 8'b01001110 ? 128'h000042424262524A4642424200000000 81 | : codepoint == 8'b01001111 ? 128'h00003C42424242424242423C00000000 82 | : codepoint == 8'b01010000 ? 128'h00007C424242427C4040404000000000 83 | : codepoint == 8'b01010001 ? 128'h00003C424242424242424A3C02000000 84 | : codepoint == 8'b01010010 ? 128'h00007C424242427C5048444200000000 85 | : codepoint == 8'b01010011 ? 128'h00003C4240403C020242423C00000000 86 | : codepoint == 8'b01010100 ? 128'h0000FE10101010101010101000000000 87 | : codepoint == 8'b01010101 ? 128'h00004242424242424242423C00000000 88 | : codepoint == 8'b01010110 ? 128'h00004242424242242424181800000000 89 | : codepoint == 8'b01010111 ? 128'h000082828282829292AAC68200000000 90 | : codepoint == 8'b01011000 ? 128'h00004242242418182424424200000000 91 | : codepoint == 8'b01011001 ? 128'h00008282444428101010101000000000 92 | : codepoint == 8'b01011010 ? 128'h00007E02020408102040407E00000000 93 | : codepoint == 8'b01011011 ? 128'h00003820202020202020203800000000 94 | : codepoint == 8'b01011100 ? 128'h00004040202010100808040400000000 95 | : codepoint == 8'b01011101 ? 128'h00003808080808080808083800000000 96 | : codepoint == 8'b01011110 ? 128'h00102844000000000000000000000000 97 | : codepoint == 8'b01011111 ? 128'h000000000000000000000000007E0000 98 | : codepoint == 8'b01100000 ? 128'h10080000000000000000000000000000 99 | : codepoint == 8'b01100001 ? 128'h00000000003C023E4242423E00000000 100 | : codepoint == 8'b01100010 ? 128'h00004040407C42424242427C00000000 101 | : codepoint == 8'b01100011 ? 128'h00000000003C42404040423C00000000 102 | : codepoint == 8'b01100100 ? 128'h00000202023E42424242423E00000000 103 | : codepoint == 8'b01100101 ? 128'h00000000003C42427E40403C00000000 104 | : codepoint == 8'b01100110 ? 128'h00000E10107C10101010101000000000 105 | : codepoint == 8'b01100111 ? 128'h00000000003E42424242423E02023C00 106 | : codepoint == 8'b01101000 ? 128'h00004040407C42424242424200000000 107 | : codepoint == 8'b01101001 ? 128'h00001010003010101010103800000000 108 | : codepoint == 8'b01101010 ? 128'h00000404000C04040404040444443800 109 | : codepoint == 8'b01101011 ? 128'h00004040404244487048444200000000 110 | : codepoint == 8'b01101100 ? 128'h00003010101010101010103800000000 111 | : codepoint == 8'b01101101 ? 128'h0000000000FC92929292929200000000 112 | : codepoint == 8'b01101110 ? 128'h00000000007C42424242424200000000 113 | : codepoint == 8'b01101111 ? 128'h00000000003C42424242423C00000000 114 | : codepoint == 8'b01110000 ? 128'h00000000007C42424242427C40404000 115 | : codepoint == 8'b01110001 ? 128'h00000000003E42424242423E02020200 116 | : codepoint == 8'b01110010 ? 128'h00000000005E60404040404000000000 117 | : codepoint == 8'b01110011 ? 128'h00000000003E40403C02027C00000000 118 | : codepoint == 8'b01110100 ? 128'h00001010107C10101010100E00000000 119 | : codepoint == 8'b01110101 ? 128'h00000000004242424242423E00000000 120 | : codepoint == 8'b01110110 ? 128'h00000000004242422424181800000000 121 | : codepoint == 8'b01110111 ? 128'h00000000008282929292927C00000000 122 | : codepoint == 8'b01111000 ? 128'h00000000004242241824424200000000 123 | : codepoint == 8'b01111001 ? 128'h00000000004242424242423E02023C00 124 | : codepoint == 8'b01111010 ? 128'h00000000007E04081020407E00000000 125 | : codepoint == 8'b01111011 ? 128'h00000C10101020101010100C00000000 126 | : codepoint == 8'b01111100 ? 128'h00001010101010101010101000000000 127 | : codepoint == 8'b01111101 ? 128'h00003008080804080808083000000000 128 | : codepoint == 8'b01111110 ? 128'h0062928C000000000000000000000000 129 | : codepoint == 8'b01111111 ? 128'h0000000010284482828282FE00000000 130 | : codepoint == 8'b10000000 ? 128'h00003C42424040404042423C10102000 131 | : codepoint == 8'b10000001 ? 128'h00002424004242424242423E00000000 132 | : codepoint == 8'b10000010 ? 128'h00000810003C42427E40403C00000000 133 | : codepoint == 8'b10000011 ? 128'h00001824003C023E4242423E00000000 134 | : codepoint == 8'b10000100 ? 128'h00002424003C023E4242423E00000000 135 | : codepoint == 8'b10000101 ? 128'h00001008003C023E4242423E00000000 136 | : codepoint == 8'b10000110 ? 128'h00001824183C023E4242423E00000000 137 | : codepoint == 8'b10000111 ? 128'h00000000003C42404040423C10102000 138 | : codepoint == 8'b10001000 ? 128'h00001824003C42427E40403C00000000 139 | : codepoint == 8'b10001001 ? 128'h00002424003C42427E40403C00000000 140 | : codepoint == 8'b10001010 ? 128'h00001008003C42427E40403C00000000 141 | : codepoint == 8'b10001011 ? 128'h00004848003010101010103800000000 142 | : codepoint == 8'b10001100 ? 128'h00003048003010101010103800000000 143 | : codepoint == 8'b10001101 ? 128'h00002010003010101010103800000000 144 | : codepoint == 8'b10001110 ? 128'h2424003C4242427E4242424200000000 145 | : codepoint == 8'b10001111 ? 128'h1824183C4242427E4242424200000000 146 | : codepoint == 8'b10010000 ? 128'h0810007E404040784040407E00000000 147 | : codepoint == 8'b10010001 ? 128'h00000000006C12729E90906C00000000 148 | : codepoint == 8'b10010010 ? 128'h00007E909090FC909090909E00000000 149 | : codepoint == 8'b10010011 ? 128'h00001824003C42424242423C00000000 150 | : codepoint == 8'b10010100 ? 128'h00002424003C42424242423C00000000 151 | : codepoint == 8'b10010101 ? 128'h00001008003C42424242423C00000000 152 | : codepoint == 8'b10010110 ? 128'h00001824004242424242423E00000000 153 | : codepoint == 8'b10010111 ? 128'h00001008004242424242423E00000000 154 | : codepoint == 8'b10011000 ? 128'h00002424004242424242423E02023C00 155 | : codepoint == 8'b10011001 ? 128'h2424003C424242424242423C00000000 156 | : codepoint == 8'b10011010 ? 128'h24240042424242424242423C00000000 157 | : codepoint == 8'b10011011 ? 128'h00000010107C92909090927C10100000 158 | : codepoint == 8'b10011100 ? 128'h00001824202078202020227E00000000 159 | : codepoint == 8'b10011101 ? 128'h000082824428107C107C101000000000 160 | : codepoint == 8'b10011110 ? 128'h0000F0888888F4848E84848200000000 161 | : codepoint == 8'b10011111 ? 128'h00000C1210107C101010101010906000 162 | : codepoint == 8'b10100000 ? 128'h00000810003C023E4242423E00000000 163 | : codepoint == 8'b10100001 ? 128'h00000810003010101010103800000000 164 | : codepoint == 8'b10100010 ? 128'h00000810003C42424242423C00000000 165 | : codepoint == 8'b10100011 ? 128'h00000810004242424242423E00000000 166 | : codepoint == 8'b10100100 ? 128'h0000324C007C42424242424200000000 167 | : codepoint == 8'b10100101 ? 128'h324C00424262524A4642424200000000 168 | : codepoint == 8'b10100110 ? 128'h0038043C443C007C0000000000000000 169 | : codepoint == 8'b10100111 ? 128'h003844444438007C0000000000000000 170 | : codepoint == 8'b10101000 ? 128'h00001010001010204242423C00000000 171 | : codepoint == 8'b10101001 ? 128'h00000000007E40404000000000000000 172 | : codepoint == 8'b10101010 ? 128'h00000000007E02020200000000000000 173 | : codepoint == 8'b10101011 ? 128'h0020602022240810204C9204081E0000 174 | : codepoint == 8'b10101100 ? 128'h002060202224081022468A1E02020000 175 | : codepoint == 8'b10101101 ? 128'h00001010001010101010101000000000 176 | : codepoint == 8'b10101110 ? 128'h00000000001224489048241200000000 177 | : codepoint == 8'b10101111 ? 128'h00000000009048241224489000000000 178 | : codepoint == 8'b10110000 ? 128'h88228822882288228822882288228822 179 | : codepoint == 8'b10110001 ? 128'hAA55AA55AA55AA55AA55AA55AA55AA55 180 | : codepoint == 8'b10110010 ? 128'hEEBBEEBBEEBBEEBBEEBBEEBBEEBBEEBB 181 | : codepoint == 8'b10110011 ? 128'h10101010101010101010101010101010 182 | : codepoint == 8'b10110100 ? 128'h10101010101010F01010101010101010 183 | : codepoint == 8'b10110101 ? 128'h101010101010F010F010101010101010 184 | : codepoint == 8'b10110110 ? 128'h28282828282828E82828282828282828 185 | : codepoint == 8'b10110111 ? 128'h00000000000000F82828282828282828 186 | : codepoint == 8'b10111000 ? 128'h000000000000F010F010101010101010 187 | : codepoint == 8'b10111001 ? 128'h282828282828E808E828282828282828 188 | : codepoint == 8'b10111010 ? 128'h28282828282828282828282828282828 189 | : codepoint == 8'b10111011 ? 128'h000000000000F808E828282828282828 190 | : codepoint == 8'b10111100 ? 128'h282828282828E808F800000000000000 191 | : codepoint == 8'b10111101 ? 128'h28282828282828F80000000000000000 192 | : codepoint == 8'b10111110 ? 128'h101010101010F010F000000000000000 193 | : codepoint == 8'b10111111 ? 128'h00000000000000F01010101010101010 194 | : codepoint == 8'b11000000 ? 128'h101010101010101F0000000000000000 195 | : codepoint == 8'b11000001 ? 128'h10101010101010FF0000000000000000 196 | : codepoint == 8'b11000010 ? 128'h00000000000000FF1010101010101010 197 | : codepoint == 8'b11000011 ? 128'h101010101010101F1010101010101010 198 | : codepoint == 8'b11000100 ? 128'h00000000000000FF0000000000000000 199 | : codepoint == 8'b11000101 ? 128'h10101010101010FF1010101010101010 200 | : codepoint == 8'b11000110 ? 128'h1010101010101F101F10101010101010 201 | : codepoint == 8'b11000111 ? 128'h282828282828282F2828282828282828 202 | : codepoint == 8'b11001000 ? 128'h2828282828282F203F00000000000000 203 | : codepoint == 8'b11001001 ? 128'h0000000000003F202F28282828282828 204 | : codepoint == 8'b11001010 ? 128'h282828282828EF00FF00000000000000 205 | : codepoint == 8'b11001011 ? 128'h000000000000FF00EF28282828282828 206 | : codepoint == 8'b11001100 ? 128'h2828282828282F202F28282828282828 207 | : codepoint == 8'b11001101 ? 128'h000000000000FF00FF00000000000000 208 | : codepoint == 8'b11001110 ? 128'h282828282828EF00EF28282828282828 209 | : codepoint == 8'b11001111 ? 128'h101010101010FF00FF00000000000000 210 | : codepoint == 8'b11010000 ? 128'h28282828282828FF0000000000000000 211 | : codepoint == 8'b11010001 ? 128'h000000000000FF00FF10101010101010 212 | : codepoint == 8'b11010010 ? 128'h00000000000000FF2828282828282828 213 | : codepoint == 8'b11010011 ? 128'h282828282828283F0000000000000000 214 | : codepoint == 8'b11010100 ? 128'h1010101010101F101F00000000000000 215 | : codepoint == 8'b11010101 ? 128'h0000000000001F101F10101010101010 216 | : codepoint == 8'b11010110 ? 128'h000000000000003F2828282828282828 217 | : codepoint == 8'b11010111 ? 128'h28282828282828FF2828282828282828 218 | : codepoint == 8'b11011000 ? 128'h101010101010FF10FF10101010101010 219 | : codepoint == 8'b11011001 ? 128'h10101010101010F00000000000000000 220 | : codepoint == 8'b11011010 ? 128'h000000000000001F1010101010101010 221 | : codepoint == 8'b11011011 ? 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 222 | : codepoint == 8'b11011100 ? 128'h0000000000000000FFFFFFFFFFFFFFFF 223 | : codepoint == 8'b11011101 ? 128'hF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 224 | : codepoint == 8'b11011110 ? 128'h0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 225 | : codepoint == 8'b11011111 ? 128'hFFFFFFFFFFFFFFFF0000000000000000 226 | : codepoint == 8'b11100000 ? 128'h00000000003A46444444463A00000000 227 | : codepoint == 8'b11100001 ? 128'h0000384444487C424242427C40404000 228 | : codepoint == 8'b11100010 ? 128'h00007E40404040404040404000000000 229 | : codepoint == 8'b11100011 ? 128'h00000000007E42424242424200000000 230 | : codepoint == 8'b11100100 ? 128'h00007E40201008081020407E00000000 231 | : codepoint == 8'b11100101 ? 128'h00000000003E44444444443800000000 232 | : codepoint == 8'b11100110 ? 128'h00000000004242424242467A40404000 233 | : codepoint == 8'b11100111 ? 128'h0000000000FE10101010100C00000000 234 | : codepoint == 8'b11101000 ? 128'h0000107C9292929292927C1000000000 235 | : codepoint == 8'b11101001 ? 128'h00003C4242425A424242423C00000000 236 | : codepoint == 8'b11101010 ? 128'h00003C42424242424224246600000000 237 | : codepoint == 8'b11101011 ? 128'h00003E10083C42424242423C00000000 238 | : codepoint == 8'b11101100 ? 128'h00000000007C9292927C000000000000 239 | : codepoint == 8'b11101101 ? 128'h000002047C8A9292A27C408000000000 240 | : codepoint == 8'b11101110 ? 128'h000000001E20407E40201E0000000000 241 | : codepoint == 8'b11101111 ? 128'h000000003C4242424242424200000000 242 | : codepoint == 8'b11110000 ? 128'h000000007E00007E00007E0000000000 243 | : codepoint == 8'b11110001 ? 128'h000000000010107C1010007C00000000 244 | : codepoint == 8'b11110010 ? 128'h00000020100804081020007C00000000 245 | : codepoint == 8'b11110011 ? 128'h00000004081020100804003E00000000 246 | : codepoint == 8'b11110100 ? 128'h00000C12121010101010101010101010 247 | : codepoint == 8'b11110101 ? 128'h10101010101010101090906000000000 248 | : codepoint == 8'b11110110 ? 128'h000000001010007C0010100000000000 249 | : codepoint == 8'b11110111 ? 128'h0000000000324C00324C000000000000 250 | : codepoint == 8'b11111000 ? 128'h00182424180000000000000000000000 251 | : codepoint == 8'b11111001 ? 128'h00000000000000181800000000000000 252 | : codepoint == 8'b11111010 ? 128'h00000000000000101000000000000000 253 | : codepoint == 8'b11111011 ? 128'h00060404040444444424140C00000000 254 | : codepoint == 8'b11111100 ? 128'h00003824242424000000000000000000 255 | : codepoint == 8'b11111101 ? 128'h0018240408103C000000000000000000 256 | : codepoint == 8'b11111110 ? 128'h00000000003C3C3C3C3C3C0000000000 257 | : codepoint == 8'b11111111 ? 128'h00000000000000000000000000000000 258 | : 0; 259 | endmodule 260 | --------------------------------------------------------------------------------