gateware

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit cbce52a426cc940ccc8a22ea740db1da623842d9
parent 3135f6941fddc27cbc35533a6c74ca7eb03211b4
Author: Brian Swetland <swetland@frotz.net>
Date:   Thu, 16 Jan 2020 17:51:00 -0800

display: new vga/hdmi display and associated projects

- choice between 40 and 80 columns (and 1.5KB/2.5KB vram)
- choice between 1/2 and 1/4 ascii (and 4KB/2KB prom)
- video ram wraps at column boundaries now (old display
  used 64x30 to store 40x30 cells)
- tidier timing generator

Diffstat:
Ahdl/display/display.sv | 222+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahdl/display/display_timing.sv | 205+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahdl/display/fontdata-8x16x128.hex | 2048+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahdl/display/fontdata-8x16x256.hex | 4096+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahdl/display/fontdata-8x16x64.hex | 1024+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahdl/display/vram-40x30.hex | 1536+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahdl/icebreaker_hdmi111.sv | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mhdl/lattice/pll_12_25.v | 4+++-
Aproject/display.def | 6++++++
Aproject/icebreaker-hdmi111.def | 9+++++++++
10 files changed, 9234 insertions(+), 1 deletion(-)

diff --git a/hdl/display/display.sv b/hdl/display/display.sv @@ -0,0 +1,222 @@ +// Copyright 2020, Brian Swetland <swetland@frotz.net> +// Licensed under the Apache License, Version 2.0. + +`default_nettype none + +module display #( + parameter BPP = 2, + + // WIDE=0 selects 80x30, 2.5KB VRAM + // WIDE=1 selects 40x30, 1.5KB VRAM + parameter WIDE = 0, + + // MINIFONT=0 selects half-ascii (0 through 127) 4KB PROM + // MINIFONT=1 selects quarter-ascii (uppercase only) 2KB PROM + // (0..31 map to 32..63, 96..127 map to 64..95) + parameter MINIFONT = 0, + + // horizontal timing (all values -1) + parameter HZNT_FRONT = 15, + parameter HZNT_SYNC = 95, + parameter HZNT_BACK = 47, + parameter HZNT_ACTIVE = 639, + + // vertical timing (all values -1) + parameter VERT_FRONT = 11, + parameter VERT_SYNC = 1, + parameter VERT_BACK = 29, + parameter VERT_ACTIVE = 479 + )( + input wire clk, + + output wire [BPP-1:0]red, + output wire [BPP-1:0]grn, + output wire [BPP-1:0]blu, + output wire hsync, + output wire vsync, + output wire active, + output wire frame, + + input wire wclk, + input wire [11:0]waddr, + input wire [7:0]wdata, + input wire we +); + +localparam PWIDTH = WIDE ? 16 : 8; +localparam PCOUNT = WIDE ? 15 : 7; +localparam VRAMSZ = WIDE ? 1536 : 2560; +localparam VRAMAW = WIDE ? 11 : 12; + +localparam PROMSZ = MINIFONT ? 1024 : 2048; +localparam PROMAW = MINIFONT ? 10 : 11; + +wire hs; +wire vs; +wire start_frame; +wire start_line; +wire pxl_accept; +wire [9:0]pxl_x; +wire [9:0]pxl_y; + +assign hsync = hs; +assign vsync = vs; +assign active = pxl_accept; +assign frame = start_frame; + +display_timing #( + .HZNT_FRONT(HZNT_FRONT), + .HZNT_SYNC(HZNT_SYNC), + .HZNT_BACK(HZNT_BACK), + .HZNT_ACTIVE(HZNT_ACTIVE), + .VERT_FRONT(VERT_FRONT), + .VERT_SYNC(VERT_SYNC), + .VERT_BACK(VERT_BACK), + .VERT_ACTIVE(VERT_ACTIVE) + ) timing ( + .clk(clk), + .hsync(hs), + .vsync(vs), + .start_frame(start_frame), + .start_line(start_line), + .pxl_accept(pxl_accept), + .pxl_x(pxl_x), + .pxl_y(pxl_y) +); + +// VIDEO RAM +// +reg [7:0] video_ram[0:VRAMSZ-1]; + +`ifdef HEX_PATHS +initial $readmemh("hdl/display/vram-40x30.hex", video_ram); +`else +initial $readmemh("vram-40x30.hex", video_ram); +`endif + +wire re; +wire [11:0] raddr; +reg [7:0] vdata; + +always_ff @(posedge wclk) begin + if (we) + video_ram[waddr[VRAMAW-1:0]] <= wdata; +end + +always_ff @(posedge clk) begin + if (re) + vdata <= video_ram[raddr[VRAMAW-1:0]]; +end + +// PATTERN ROM +// +reg [7:0] pattern_rom [0:PROMSZ-1]; + +`ifdef HEX_PATHS +generate +if (MINIFONT) initial $readmemh("hdl/display/fontdata-8x16x64.hex", pattern_rom); +else initial $readmemh("hdl/display/fontdata-8x16x128.hex", pattern_rom); +endgenerate +`else +generate +if (MINIFONT) initial $readmemh("fontdata-8x16x64.hex", pattern_rom); +else initial $readmemh("fontdata-8x16x128.hex", pattern_rom); +endgenerate +`endif + +reg [7:0]character_id; + +wire [PROMAW-1:0] prom_addr; + +// generate pattern rom address based on character id +// and the low bits of the display line +generate +if (MINIFONT) assign prom_addr = { character_id[6], character_id[4:0], pxl_y[3:0] }; +else assign prom_addr = { character_id[6:0], pxl_y[3:0] }; +endgenerate + +reg [7:0]prom_data; + +always_ff @(posedge clk) begin + prom_data <= pattern_rom[prom_addr]; +end + +reg [PWIDTH-1:0]pattern; +reg [PWIDTH-1:0]pattern_next; +reg [3:0]pattern_count; +reg [3:0]pattern_count_next; +reg [3:0]pattern_count_sub1; +reg pattern_count_done; + +assign { pattern_count_done, pattern_count_sub1 } = { 1'b0, pattern_count } - 5'd1; + +reg load_character_addr = 1'b0; +reg load_character_addr_next; + +reg [11:0]vram_raddr; +reg [11:0]vram_raddr_next; +reg [11:0]vram_saddr; +reg [11:0]vram_saddr_next; +wire [11:0]vram_raddr_add1 = vram_raddr + 12'd1; + +assign raddr = vram_raddr; +assign re = load_character_addr; + +reg [PWIDTH-1:0]pattern_expand; +generate + if (WIDE) assign pattern_expand = { + prom_data[7], prom_data[7], prom_data[6], prom_data[6], + prom_data[5], prom_data[5], prom_data[4], prom_data[4], + prom_data[3], prom_data[3], prom_data[2], prom_data[2], + prom_data[1], prom_data[1], prom_data[0], prom_data[0] }; + else assign pattern_expand = prom_data; +endgenerate + +always_comb begin + vram_raddr_next = vram_raddr; + vram_saddr_next = vram_saddr; + load_character_addr_next = 1'b0; + pattern_next = pattern; + pattern_count_next = pattern_count; + + if (start_frame) begin + vram_raddr_next = 12'd0; + end + if (start_line) begin + load_character_addr_next = 1'b1; + // if we're at the first line of a character, save + // the vram address, otherwise rewind it back to the + // last start of line + if (pxl_y[3:0] == 4'b0000) begin + vram_saddr_next = vram_raddr; + end else begin + vram_raddr_next = vram_saddr; + end + end + if (pxl_accept) begin + if (pattern_count_done) begin + pattern_next = pattern_expand; + pattern_count_next = PCOUNT; + load_character_addr_next = 1'b1; + vram_raddr_next = vram_raddr_add1; + end else begin + pattern_next = { pattern[PWIDTH-2:0], 1'b0 }; + pattern_count_next = pattern_count_sub1; + end + end +end + +always_ff @(posedge clk) begin + pattern <= pattern_next; + pattern_count <= pattern_count_next; + load_character_addr = load_character_addr_next; + vram_raddr <= vram_raddr_next; + vram_saddr <= vram_saddr_next; + character_id <= vdata; +end + +assign red = active ? { BPP {pattern[PWIDTH-1]} } : {BPP{1'b0}}; +assign grn = active ? { BPP {pattern[PWIDTH-1]} } : {BPP{1'b0}}; +assign blu = active ? { BPP {1'b1} } : {BPP{1'b0}}; + +endmodule diff --git a/hdl/display/display_timing.sv b/hdl/display/display_timing.sv @@ -0,0 +1,205 @@ +// Copyright 2020, Brian Swetland <swetland@frotz.net> +// Licensed under the Apache License, Version 2.0. + +`default_nettype none + +module display_timing #( + // horizontal timing (all values -1) + parameter HZNT_FRONT = 15, + parameter HZNT_SYNC = 95, + parameter HZNT_BACK = 47, + parameter HZNT_ACTIVE = 639, + + // vertical timing (all values -1) + parameter VERT_FRONT = 11, + parameter VERT_SYNC = 1, + parameter VERT_BACK = 29, + parameter VERT_ACTIVE = 479 +)( + input wire clk, + + output wire hsync, + output wire vsync, + output wire start_frame, + output wire start_line, + output wire pxl_accept, + output wire [9:0] pxl_x, + output wire [9:0] pxl_y +); + +localparam HS_FRONT = 2'd0; +localparam HS_SYNC = 2'd1; +localparam HS_BACK = 2'd2; +localparam HS_ACTIVE = 2'd3; + +localparam VS_FRONT = 2'd0; +localparam VS_SYNC = 2'd1; +localparam VS_BACK = 2'd2; +localparam VS_ACTIVE = 2'd3; + +reg [1:0] v_state = VS_FRONT; +reg [1:0] v_state_next; +reg v_sync = 1'b1; +reg v_sync_next; +reg v_active = 1'b0; +reg v_active_next; +reg [9:0] v_count = 10'b0; +reg [9:0] v_count_next; +wire [9:0] v_count_add1; +reg [7:0] v_countdown = VERT_FRONT; +reg [7:0] v_countdown_next; +wire [7:0] v_countdown_sub1; +wire v_countdown_done; + +reg [1:0] h_state = HS_FRONT; +reg [1:0] h_state_next; +reg h_sync = 1'b1; +reg h_sync_next; +reg h_active = 1'b0; +reg h_active_next; +reg [9:0] h_count = 10'b0; +reg [9:0] h_count_next; +wire [9:0] h_count_add1; +reg [7:0] h_countdown = HZNT_FRONT; +reg [7:0] h_countdown_next; +wire [7:0] h_countdown_sub1; +wire h_countdown_done; + +reg new_line = 1'b0; +reg new_frame = 1'b0; +reg new_line_next; +reg new_frame_next; + +assign v_count_add1 = v_count + 9'd1; +assign h_count_add1 = h_count + 9'd1; + +assign { h_countdown_done, h_countdown_sub1 } = { 1'b0, h_countdown } - 9'd1; +assign { v_countdown_done, v_countdown_sub1 } = { 1'b0, v_countdown } - 9'd1; + +// outputs +assign hsync = h_sync; +assign vsync = v_sync; +assign start_frame = new_frame; +assign start_line = new_line; +assign pxl_accept = h_active & v_active; +assign pxl_x = h_count; +assign pxl_y = v_count; + +always_comb begin + h_state_next = h_state; + h_count_next = h_count; + h_countdown_next = h_countdown; + h_active_next = h_active; + h_sync_next = h_sync; + new_line_next = 1'b0; + + case (h_state) + HS_FRONT: begin + if (h_countdown_done) begin + h_state_next = HS_SYNC; + h_countdown_next = HZNT_SYNC; + h_sync_next = 1'b0; + end else begin + h_countdown_next = h_countdown_sub1; + end + end + HS_SYNC: begin + if (h_countdown_done) begin + h_state_next = HS_BACK; + h_countdown_next = HZNT_BACK; + h_sync_next = 1'b1; + end else begin + h_countdown_next = h_countdown_sub1; + end + end + HS_BACK: begin + if (h_countdown_done) begin + h_state_next = HS_ACTIVE; + h_countdown_next = HZNT_FRONT; + h_active_next = 1'b1; + end else begin + h_countdown_next = h_countdown_sub1; + end + end + HS_ACTIVE: begin + if (h_count == HZNT_ACTIVE) begin + h_state_next = HS_FRONT; + h_count_next = 0; + new_line_next = 1'b1; + h_active_next = 1'b0; + end else begin + h_count_next = h_count_add1; + end + end + endcase +end + +always_comb begin + v_state_next = v_state; + v_count_next = v_count; + v_countdown_next = v_countdown; + v_active_next = v_active; + v_sync_next = v_sync; + new_frame_next = 1'b0; + + case (v_state) + VS_FRONT: begin + if (v_countdown_done) begin + v_state_next = VS_SYNC; + v_countdown_next = VERT_SYNC; + v_sync_next = 1'b0; + end else begin + v_countdown_next = v_countdown_sub1; + end + end + VS_SYNC: begin + if (v_countdown_done) begin + v_state_next = VS_BACK; + v_countdown_next = VERT_BACK; + v_sync_next = 1'b1; + end else begin + v_countdown_next = v_countdown_sub1; + end + end + VS_BACK: begin + if (v_countdown_done) begin + v_state_next = VS_ACTIVE; + v_countdown_next = VERT_FRONT; + v_active_next = 1'b1; + end else begin + v_countdown_next = v_countdown_sub1; + end + end + VS_ACTIVE: begin + if (v_count == VERT_ACTIVE) begin + v_state_next = VS_FRONT; + v_count_next = 0; + v_active_next = 1'b0; + new_frame_next = 1'b1; + end else begin + v_count_next = v_count_add1; + end + end + endcase +end + +always_ff @(posedge clk) begin + h_state <= h_state_next; + h_sync <= h_sync_next; + h_count <= h_count_next; + h_countdown <= h_countdown_next; + h_active <= h_active_next; + + new_line <= new_line_next; + new_frame <= new_frame_next & new_line_next; + + if (new_line_next) begin + v_state <= v_state_next; + v_sync <= v_sync_next; + v_count <= v_count_next; + v_countdown <= v_countdown_next; + v_active <= v_active_next; + end +end + +endmodule diff --git a/hdl/display/fontdata-8x16x128.hex b/hdl/display/fontdata-8x16x128.hex @@ -0,0 +1,2048 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +81 +a5 +81 +81 +bd +99 +81 +81 +7e +00 +00 +00 +00 +00 +00 +7e +ff +db +ff +ff +c3 +e7 +ff +ff +7e +00 +00 +00 +00 +00 +00 +00 +00 +6c +ee +fe +fe +fe +7c +38 +10 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +7c +fe +fe +7c +38 +10 +00 +00 +00 +00 +00 +00 +00 +18 +3c +3c +5a +ff +ff +5a +18 +3c +00 +00 +00 +00 +00 +00 +00 +10 +38 +7c +fe +fe +ee +54 +10 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +3c +3c +18 +00 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +ff +e7 +c3 +c3 +e7 +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +00 +3c +66 +42 +42 +66 +3c +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +c3 +99 +bd +bd +99 +c3 +ff +ff +ff +ff +ff +00 +00 +1e +06 +0a +7a +cc +84 +84 +cc +78 +00 +00 +00 +00 +00 +00 +00 +3c +66 +42 +42 +66 +3c +18 +7e +18 +18 +00 +00 +00 +00 +00 +08 +0c +0a +0a +0a +08 +08 +08 +78 +f8 +70 +00 +00 +00 +00 +00 +10 +18 +14 +12 +1a +16 +12 +72 +f2 +62 +0e +1e +0c +00 +00 +00 +00 +00 +10 +92 +7c +6c +c6 +6c +7c +92 +10 +00 +00 +00 +00 +00 +00 +80 +c0 +e0 +f8 +fe +f8 +e0 +c0 +80 +00 +00 +00 +00 +00 +00 +00 +02 +06 +0e +3e +fe +3e +0e +06 +02 +00 +00 +00 +00 +00 +00 +00 +10 +38 +7c +d6 +10 +10 +10 +d6 +7c +38 +10 +00 +00 +00 +00 +00 +66 +66 +66 +66 +66 +66 +66 +00 +66 +66 +00 +00 +00 +00 +00 +00 +7f +db +db +db +db +7b +1b +1b +1b +1b +00 +00 +00 +00 +00 +7c +c6 +60 +38 +6c +c6 +c6 +6c +38 +0c +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +fe +fe +fe +00 +00 +00 +00 +00 +00 +10 +38 +7c +d6 +10 +10 +d6 +7c +38 +10 +fe +00 +00 +00 +00 +00 +10 +38 +7c +d6 +10 +10 +10 +10 +10 +10 +00 +00 +00 +00 +00 +00 +10 +10 +10 +10 +10 +10 +d6 +7c +38 +10 +00 +00 +00 +00 +00 +00 +00 +00 +10 +18 +0c +fe +0c +18 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +30 +60 +fe +60 +30 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +c0 +c0 +c0 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +42 +ff +42 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +38 +38 +7c +7c +fe +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +fe +7c +7c +38 +38 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +78 +78 +78 +30 +30 +30 +00 +30 +30 +00 +00 +00 +00 +00 +66 +66 +22 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +6c +fe +6c +6c +fe +6c +6c +00 +00 +00 +00 +00 +00 +10 +10 +7c +d6 +d6 +70 +38 +1c +d6 +d6 +7c +10 +10 +00 +00 +00 +00 +60 +92 +96 +6c +18 +30 +6c +d2 +92 +0c +00 +00 +00 +00 +00 +00 +38 +6c +6c +38 +30 +76 +dc +cc +cc +76 +00 +00 +00 +00 +00 +18 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +18 +30 +30 +30 +30 +30 +30 +18 +0c +00 +00 +00 +00 +00 +00 +30 +18 +0c +0c +0c +0c +0c +0c +18 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +3c +ff +3c +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +7e +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +00 +00 +02 +06 +0c +18 +30 +60 +c0 +80 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +ce +de +f6 +e6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +18 +38 +78 +18 +18 +18 +18 +18 +18 +7e +00 +00 +00 +00 +00 +00 +7c +c6 +86 +06 +0c +18 +30 +60 +c0 +fe +00 +00 +00 +00 +00 +00 +7c +c6 +06 +06 +3c +06 +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +0c +1c +3c +6c +cc +cc +fe +0c +0c +1e +00 +00 +00 +00 +00 +00 +fe +c0 +c0 +c0 +fc +06 +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c0 +c0 +fc +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fe +c6 +86 +06 +0c +0c +18 +18 +30 +30 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +7c +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +7e +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +18 +18 +08 +10 +00 +00 +00 +00 +00 +00 +06 +0c +18 +30 +60 +30 +18 +0c +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +00 +00 +7e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +30 +18 +0c +06 +0c +18 +30 +60 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +06 +0c +18 +18 +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +3c +42 +9d +a5 +a5 +ad +b6 +40 +3c +00 +00 +00 +00 +00 +00 +38 +6c +c6 +c6 +c6 +fe +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +7c +66 +66 +66 +66 +fc +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +c0 +c0 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +66 +66 +66 +66 +fc +00 +00 +00 +00 +00 +00 +fe +66 +62 +68 +78 +78 +68 +62 +66 +fe +00 +00 +00 +00 +00 +00 +fe +66 +62 +68 +78 +78 +68 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +ce +c6 +c6 +c6 +7e +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +fe +c6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +3c +18 +18 +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +1e +0c +0c +0c +0c +0c +cc +cc +cc +78 +00 +00 +00 +00 +00 +00 +e6 +66 +66 +66 +7c +78 +6c +66 +66 +e6 +00 +00 +00 +00 +00 +00 +f0 +60 +60 +60 +60 +60 +60 +62 +66 +fe +00 +00 +00 +00 +00 +00 +82 +c6 +ee +fe +fe +d6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +86 +c6 +e6 +f6 +fe +de +ce +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +7c +60 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +d6 +de +7c +06 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +7c +6c +6c +66 +e6 +00 +00 +00 +00 +00 +00 +7c +c6 +c2 +60 +38 +0c +06 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7e +7e +5a +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +6c +38 +10 +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +d6 +fe +ee +c6 +82 +00 +00 +00 +00 +00 +00 +c6 +c6 +6c +7c +38 +38 +7c +6c +c6 +c6 +00 +00 +00 +00 +00 +00 +66 +66 +66 +66 +3c +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +fe +c6 +86 +0c +18 +30 +60 +c2 +c6 +fe +00 +00 +00 +00 +00 +00 +3c +30 +30 +30 +30 +30 +30 +30 +30 +3c +00 +00 +00 +00 +00 +00 +00 +80 +c0 +60 +30 +18 +0c +06 +02 +00 +00 +00 +00 +00 +00 +00 +3c +0c +0c +0c +0c +0c +0c +0c +0c +3c +00 +00 +00 +00 +10 +38 +6c +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +00 +00 +00 +18 +18 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +e0 +60 +60 +7c +66 +66 +66 +66 +66 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c0 +c0 +c0 +c6 +7c +00 +00 +00 +00 +00 +00 +1c +0c +0c +7c +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +fe +c0 +c6 +7c +00 +00 +00 +00 +00 +00 +1c +36 +30 +78 +30 +30 +30 +30 +30 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +cc +cc +cc +cc +cc +7c +0c +cc +78 +00 +00 +00 +e0 +60 +60 +6c +76 +66 +66 +66 +66 +e6 +00 +00 +00 +00 +00 +00 +18 +18 +00 +38 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +0c +0c +00 +1c +0c +0c +0c +0c +0c +0c +cc +cc +78 +00 +00 +00 +e0 +60 +60 +66 +6c +78 +78 +6c +66 +e6 +00 +00 +00 +00 +00 +00 +38 +18 +18 +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +fe +d6 +d6 +d6 +d6 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +66 +66 +66 +66 +66 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +66 +66 +66 +66 +66 +7c +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +cc +cc +cc +cc +cc +7c +0c +0c +1e +00 +00 +00 +00 +00 +00 +de +76 +60 +60 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +60 +38 +0c +c6 +7c +00 +00 +00 +00 +00 +00 +10 +30 +30 +fc +30 +30 +30 +30 +34 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +cc +cc +cc +cc +78 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +d6 +d6 +d6 +d6 +fe +6c +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +c6 +6c +38 +6c +c6 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +7e +06 +0c +f8 +00 +00 +00 +00 +00 +00 +fe +8c +18 +30 +60 +c2 +fe +00 +00 +00 +00 +00 +00 +0e +18 +18 +18 +70 +18 +18 +18 +18 +0e +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +00 +00 +18 +18 +18 +18 +00 +00 +00 +00 +00 +00 +70 +18 +18 +18 +0e +18 +18 +18 +18 +70 +00 +00 +00 +00 +00 +00 +76 +dc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +6c +c6 +c6 +c6 +fe +00 +00 +00 +00 +00 diff --git a/hdl/display/fontdata-8x16x256.hex b/hdl/display/fontdata-8x16x256.hex @@ -0,0 +1,4096 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +81 +a5 +81 +81 +bd +99 +81 +81 +7e +00 +00 +00 +00 +00 +00 +7e +ff +db +ff +ff +c3 +e7 +ff +ff +7e +00 +00 +00 +00 +00 +00 +00 +00 +6c +ee +fe +fe +fe +7c +38 +10 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +7c +fe +fe +7c +38 +10 +00 +00 +00 +00 +00 +00 +00 +18 +3c +3c +5a +ff +ff +5a +18 +3c +00 +00 +00 +00 +00 +00 +00 +10 +38 +7c +fe +fe +ee +54 +10 +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +3c +3c +18 +00 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +ff +e7 +c3 +c3 +e7 +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +00 +3c +66 +42 +42 +66 +3c +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +c3 +99 +bd +bd +99 +c3 +ff +ff +ff +ff +ff +00 +00 +1e +06 +0a +7a +cc +84 +84 +cc +78 +00 +00 +00 +00 +00 +00 +00 +3c +66 +42 +42 +66 +3c +18 +7e +18 +18 +00 +00 +00 +00 +00 +08 +0c +0a +0a +0a +08 +08 +08 +78 +f8 +70 +00 +00 +00 +00 +00 +10 +18 +14 +12 +1a +16 +12 +72 +f2 +62 +0e +1e +0c +00 +00 +00 +00 +00 +10 +92 +7c +6c +c6 +6c +7c +92 +10 +00 +00 +00 +00 +00 +00 +80 +c0 +e0 +f8 +fe +f8 +e0 +c0 +80 +00 +00 +00 +00 +00 +00 +00 +02 +06 +0e +3e +fe +3e +0e +06 +02 +00 +00 +00 +00 +00 +00 +00 +10 +38 +7c +d6 +10 +10 +10 +d6 +7c +38 +10 +00 +00 +00 +00 +00 +66 +66 +66 +66 +66 +66 +66 +00 +66 +66 +00 +00 +00 +00 +00 +00 +7f +db +db +db +db +7b +1b +1b +1b +1b +00 +00 +00 +00 +00 +7c +c6 +60 +38 +6c +c6 +c6 +6c +38 +0c +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +fe +fe +fe +00 +00 +00 +00 +00 +00 +10 +38 +7c +d6 +10 +10 +d6 +7c +38 +10 +fe +00 +00 +00 +00 +00 +10 +38 +7c +d6 +10 +10 +10 +10 +10 +10 +00 +00 +00 +00 +00 +00 +10 +10 +10 +10 +10 +10 +d6 +7c +38 +10 +00 +00 +00 +00 +00 +00 +00 +00 +10 +18 +0c +fe +0c +18 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +30 +60 +fe +60 +30 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c0 +c0 +c0 +c0 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +24 +42 +ff +42 +24 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +10 +38 +38 +7c +7c +fe +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +fe +7c +7c +38 +38 +10 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +78 +78 +78 +30 +30 +30 +00 +30 +30 +00 +00 +00 +00 +00 +66 +66 +22 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +6c +fe +6c +6c +fe +6c +6c +00 +00 +00 +00 +00 +00 +10 +10 +7c +d6 +d6 +70 +38 +1c +d6 +d6 +7c +10 +10 +00 +00 +00 +00 +60 +92 +96 +6c +18 +30 +6c +d2 +92 +0c +00 +00 +00 +00 +00 +00 +38 +6c +6c +38 +30 +76 +dc +cc +cc +76 +00 +00 +00 +00 +00 +18 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +18 +30 +30 +30 +30 +30 +30 +18 +0c +00 +00 +00 +00 +00 +00 +30 +18 +0c +0c +0c +0c +0c +0c +18 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +3c +ff +3c +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +7e +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +00 +00 +02 +06 +0c +18 +30 +60 +c0 +80 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +ce +de +f6 +e6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +18 +38 +78 +18 +18 +18 +18 +18 +18 +7e +00 +00 +00 +00 +00 +00 +7c +c6 +86 +06 +0c +18 +30 +60 +c0 +fe +00 +00 +00 +00 +00 +00 +7c +c6 +06 +06 +3c +06 +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +0c +1c +3c +6c +cc +cc +fe +0c +0c +1e +00 +00 +00 +00 +00 +00 +fe +c0 +c0 +c0 +fc +06 +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c0 +c0 +fc +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fe +c6 +86 +06 +0c +0c +18 +18 +30 +30 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +7c +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +7e +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +18 +18 +08 +10 +00 +00 +00 +00 +00 +00 +06 +0c +18 +30 +60 +30 +18 +0c +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +00 +00 +7e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +30 +18 +0c +06 +0c +18 +30 +60 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +06 +0c +18 +18 +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +3c +42 +9d +a5 +a5 +ad +b6 +40 +3c +00 +00 +00 +00 +00 +00 +38 +6c +c6 +c6 +c6 +fe +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +7c +66 +66 +66 +66 +fc +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +c0 +c0 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +66 +66 +66 +66 +fc +00 +00 +00 +00 +00 +00 +fe +66 +62 +68 +78 +78 +68 +62 +66 +fe +00 +00 +00 +00 +00 +00 +fe +66 +62 +68 +78 +78 +68 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +ce +c6 +c6 +c6 +7e +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +fe +c6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +3c +18 +18 +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +1e +0c +0c +0c +0c +0c +cc +cc +cc +78 +00 +00 +00 +00 +00 +00 +e6 +66 +66 +66 +7c +78 +6c +66 +66 +e6 +00 +00 +00 +00 +00 +00 +f0 +60 +60 +60 +60 +60 +60 +62 +66 +fe +00 +00 +00 +00 +00 +00 +82 +c6 +ee +fe +fe +d6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +86 +c6 +e6 +f6 +fe +de +ce +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +7c +60 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +d6 +de +7c +06 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +7c +6c +6c +66 +e6 +00 +00 +00 +00 +00 +00 +7c +c6 +c2 +60 +38 +0c +06 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7e +7e +5a +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +6c +38 +10 +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +d6 +fe +ee +c6 +82 +00 +00 +00 +00 +00 +00 +c6 +c6 +6c +7c +38 +38 +7c +6c +c6 +c6 +00 +00 +00 +00 +00 +00 +66 +66 +66 +66 +3c +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +fe +c6 +86 +0c +18 +30 +60 +c2 +c6 +fe +00 +00 +00 +00 +00 +00 +3c +30 +30 +30 +30 +30 +30 +30 +30 +3c +00 +00 +00 +00 +00 +00 +00 +80 +c0 +60 +30 +18 +0c +06 +02 +00 +00 +00 +00 +00 +00 +00 +3c +0c +0c +0c +0c +0c +0c +0c +0c +3c +00 +00 +00 +00 +10 +38 +6c +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +00 +00 +00 +18 +18 +10 +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +e0 +60 +60 +7c +66 +66 +66 +66 +66 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c0 +c0 +c0 +c6 +7c +00 +00 +00 +00 +00 +00 +1c +0c +0c +7c +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +fe +c0 +c6 +7c +00 +00 +00 +00 +00 +00 +1c +36 +30 +78 +30 +30 +30 +30 +30 +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +cc +cc +cc +cc +cc +7c +0c +cc +78 +00 +00 +00 +e0 +60 +60 +6c +76 +66 +66 +66 +66 +e6 +00 +00 +00 +00 +00 +00 +18 +18 +00 +38 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +0c +0c +00 +1c +0c +0c +0c +0c +0c +0c +cc +cc +78 +00 +00 +00 +e0 +60 +60 +66 +6c +78 +78 +6c +66 +e6 +00 +00 +00 +00 +00 +00 +38 +18 +18 +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +00 +00 +00 +ec +fe +d6 +d6 +d6 +d6 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +66 +66 +66 +66 +66 +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +dc +66 +66 +66 +66 +66 +7c +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +cc +cc +cc +cc +cc +7c +0c +0c +1e +00 +00 +00 +00 +00 +00 +de +76 +60 +60 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +60 +38 +0c +c6 +7c +00 +00 +00 +00 +00 +00 +10 +30 +30 +fc +30 +30 +30 +30 +34 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +cc +cc +cc +cc +78 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +d6 +d6 +d6 +d6 +fe +6c +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +c6 +6c +38 +6c +c6 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +7e +06 +0c +f8 +00 +00 +00 +00 +00 +00 +fe +8c +18 +30 +60 +c2 +fe +00 +00 +00 +00 +00 +00 +0e +18 +18 +18 +70 +18 +18 +18 +18 +0e +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +00 +00 +18 +18 +18 +18 +00 +00 +00 +00 +00 +00 +70 +18 +18 +18 +0e +18 +18 +18 +18 +70 +00 +00 +00 +00 +00 +00 +76 +dc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +10 +38 +6c +c6 +c6 +c6 +fe +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +c0 +c0 +c6 +c6 +7c +10 +08 +70 +00 +00 +00 +cc +cc +00 +cc +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +06 +0c +10 +00 +7c +c6 +c6 +fe +c0 +c6 +7c +00 +00 +00 +00 +00 +30 +78 +cc +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +cc +cc +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +c0 +60 +10 +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +30 +48 +30 +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c0 +c0 +c0 +c6 +7c +10 +08 +70 +00 +00 +18 +3c +66 +00 +7c +c6 +c6 +fe +c0 +c6 +7c +00 +00 +00 +00 +00 +00 +c6 +c6 +00 +7c +c6 +c6 +fe +c0 +c6 +7c +00 +00 +00 +00 +00 +c0 +60 +10 +00 +7c +c6 +c6 +fe +c0 +c6 +7c +00 +00 +00 +00 +00 +00 +66 +66 +00 +38 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +18 +3c +66 +00 +38 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +c0 +60 +10 +00 +38 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +c6 +c6 +00 +38 +6c +c6 +c6 +fe +c6 +c6 +c6 +c6 +00 +00 +00 +00 +38 +44 +38 +38 +6c +c6 +c6 +fe +c6 +c6 +c6 +c6 +00 +00 +00 +00 +06 +0c +10 +fe +66 +62 +68 +78 +68 +62 +66 +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +7c +12 +72 +9e +90 +92 +7c +00 +00 +00 +00 +00 +00 +3e +6a +c8 +c8 +cc +fc +c8 +c8 +ca +ce +00 +00 +00 +00 +00 +18 +3c +66 +00 +7c +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +c6 +c6 +00 +7c +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +c0 +60 +10 +00 +7c +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +30 +78 +cc +00 +cc +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +c0 +60 +10 +00 +cc +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +c6 +c6 +00 +c6 +c6 +c6 +c6 +c6 +c6 +7e +06 +0c +78 +00 +c6 +c6 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +c6 +c6 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +10 +10 +7c +d6 +d0 +d0 +d6 +7c +10 +10 +00 +00 +00 +00 +00 +00 +38 +6c +60 +f0 +60 +60 +60 +60 +f2 +dc +00 +00 +00 +00 +00 +00 +66 +66 +66 +3c +18 +7e +18 +7e +18 +18 +00 +00 +00 +00 +00 +00 +f8 +cc +cc +f8 +c4 +cc +de +cc +cc +c6 +00 +00 +00 +00 +00 +00 +0e +1b +18 +18 +7e +18 +18 +18 +18 +18 +18 +d8 +70 +00 +00 +06 +0c +10 +00 +78 +0c +7c +cc +cc +cc +76 +00 +00 +00 +00 +00 +06 +0c +10 +00 +38 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +06 +0c +10 +00 +7c +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +06 +0c +10 +00 +cc +cc +cc +cc +cc +cc +76 +00 +00 +00 +00 +00 +00 +76 +dc +00 +dc +66 +66 +66 +66 +66 +66 +00 +00 +00 +00 +76 +dc +00 +86 +c6 +e6 +f6 +fe +de +ce +c6 +c6 +00 +00 +00 +00 +00 +70 +18 +78 +d8 +6c +00 +fc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +78 +cc +cc +78 +00 +fc +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +00 +30 +30 +60 +c0 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +c0 +c0 +c0 +c0 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +06 +06 +06 +06 +00 +00 +00 +00 +00 +60 +e0 +64 +6c +78 +30 +60 +dc +b6 +0c +18 +3e +00 +00 +00 +00 +60 +e0 +64 +6c +78 +30 +6c +dc +ac +3e +0c +0c +00 +00 +00 +00 +00 +30 +30 +00 +30 +30 +30 +78 +78 +78 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +36 +6c +d8 +6c +36 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +d8 +6c +36 +6c +d8 +00 +00 +00 +00 +00 +00 +00 +55 +00 +55 +00 +55 +00 +55 +00 +55 +00 +55 +00 +55 +00 +55 +aa +55 +aa +55 +aa +55 +aa +55 +aa +55 +aa +55 +aa +55 +aa +55 +ff +55 +ff +55 +ff +55 +ff +55 +ff +55 +ff +55 +ff +55 +ff +55 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +f8 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +f8 +18 +f8 +18 +18 +18 +18 +18 +18 +18 +36 +36 +36 +36 +36 +36 +36 +36 +f6 +36 +36 +36 +36 +36 +36 +36 +00 +00 +00 +00 +00 +00 +00 +00 +fe +36 +36 +36 +36 +36 +36 +36 +00 +00 +00 +00 +00 +00 +f8 +18 +f8 +18 +18 +18 +18 +18 +18 +18 +36 +36 +36 +36 +36 +36 +f6 +06 +f6 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +00 +00 +00 +00 +00 +00 +fe +06 +f6 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +f6 +06 +fe +00 +00 +00 +00 +00 +00 +00 +36 +36 +36 +36 +36 +36 +36 +36 +fe +00 +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +18 +18 +f8 +18 +f8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +f8 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +1f +00 +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +18 +18 +18 +18 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +1f +18 +18 +18 +18 +18 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +ff +00 +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +18 +18 +18 +18 +ff +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +1f +18 +1f +18 +18 +18 +18 +18 +18 +18 +36 +36 +36 +36 +36 +36 +36 +36 +37 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +37 +30 +3f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +3f +30 +37 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +f7 +00 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +00 +f7 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +37 +30 +37 +36 +36 +36 +36 +36 +36 +36 +00 +00 +00 +00 +00 +00 +ff +00 +ff +00 +00 +00 +00 +00 +00 +00 +36 +36 +36 +36 +36 +36 +f7 +00 +f7 +36 +36 +36 +36 +36 +36 +36 +18 +18 +18 +18 +18 +18 +ff +00 +ff +00 +00 +00 +00 +00 +00 +00 +36 +36 +36 +36 +36 +36 +36 +36 +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +00 +ff +18 +18 +18 +18 +18 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +ff +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +3f +00 +00 +00 +00 +00 +00 +00 +18 +18 +18 +18 +18 +18 +1f +18 +1f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +18 +1f +18 +18 +18 +18 +18 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +3f +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +36 +ff +36 +36 +36 +36 +36 +36 +36 +18 +18 +18 +18 +18 +18 +ff +18 +ff +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +f8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1f +18 +18 +18 +18 +18 +18 +18 +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +ff +ff +ff +ff +ff +ff +ff +ff +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +f0 +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +0f +ff +ff +ff +ff +ff +ff +ff +ff +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +74 +dc +c8 +c8 +c8 +dc +76 +00 +00 +00 +00 +00 +00 +78 +cc +cc +d8 +cc +c6 +c6 +c6 +dc +c0 +40 +00 +00 +00 +00 +00 +fe +62 +60 +60 +60 +60 +60 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +00 +00 +02 +7e +ec +6c +6c +6c +6c +48 +00 +00 +00 +00 +00 +00 +fe +c2 +60 +30 +18 +30 +60 +c0 +c2 +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +d0 +c8 +c8 +c8 +c8 +70 +00 +00 +00 +00 +00 +00 +00 +00 +00 +cc +cc +cc +cc +cc +cc +f8 +80 +80 +00 +00 +00 +00 +00 +00 +00 +7e +d8 +18 +18 +18 +18 +10 +00 +00 +00 +00 +00 +00 +38 +10 +7c +d6 +d6 +d6 +d6 +7c +10 +38 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +fe +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +6c +28 +28 +ee +00 +00 +00 +00 +00 +00 +3c +62 +30 +18 +7c +cc +cc +cc +cc +78 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6e +db +db +db +76 +00 +00 +00 +00 +00 +00 +00 +00 +00 +02 +06 +7c +ce +de +d6 +f6 +e6 +7c +c0 +80 +00 +00 +00 +00 +00 +00 +00 +3c +60 +c0 +f8 +c0 +60 +3c +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +00 +00 +fe +00 +00 +fe +00 +00 +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +7e +18 +18 +00 +00 +ff +00 +00 +00 +00 +00 +00 +00 +30 +18 +0c +06 +0c +18 +30 +00 +7e +00 +00 +00 +00 +00 +00 +00 +0c +18 +30 +60 +30 +18 +0c +00 +7e +00 +00 +00 +00 +00 +00 +0e +1b +1b +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +d8 +d8 +d8 +70 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +7e +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +76 +dc +00 +76 +dc +00 +00 +00 +00 +00 +00 +00 +38 +6c +6c +38 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +00 +00 +00 +00 +00 +00 +00 +00 +0f +0c +0c +0c +0c +0c +ec +6c +6c +3c +1c +00 +00 +00 +00 +00 +d8 +6c +6c +6c +6c +6c +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +98 +18 +30 +60 +f8 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +7e +7e +7e +7e +7e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 diff --git a/hdl/display/fontdata-8x16x64.hex b/hdl/display/fontdata-8x16x64.hex @@ -0,0 +1,1024 @@ +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +78 +78 +78 +30 +30 +30 +00 +30 +30 +00 +00 +00 +00 +00 +66 +66 +22 +22 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +6c +6c +fe +6c +6c +fe +6c +6c +00 +00 +00 +00 +00 +00 +10 +10 +7c +d6 +d6 +70 +38 +1c +d6 +d6 +7c +10 +10 +00 +00 +00 +00 +60 +92 +96 +6c +18 +30 +6c +d2 +92 +0c +00 +00 +00 +00 +00 +00 +38 +6c +6c +38 +30 +76 +dc +cc +cc +76 +00 +00 +00 +00 +00 +18 +18 +08 +10 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +0c +18 +30 +30 +30 +30 +30 +30 +18 +0c +00 +00 +00 +00 +00 +00 +30 +18 +0c +0c +0c +0c +0c +0c +18 +30 +00 +00 +00 +00 +00 +00 +00 +00 +00 +66 +3c +ff +3c +66 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +7e +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +10 +20 +00 +00 +00 +00 +00 +00 +00 +00 +00 +fe +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +30 +30 +00 +00 +00 +00 +00 +00 +00 +02 +06 +0c +18 +30 +60 +c0 +80 +00 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +ce +de +f6 +e6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +18 +38 +78 +18 +18 +18 +18 +18 +18 +7e +00 +00 +00 +00 +00 +00 +7c +c6 +86 +06 +0c +18 +30 +60 +c0 +fe +00 +00 +00 +00 +00 +00 +7c +c6 +06 +06 +3c +06 +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +0c +1c +3c +6c +cc +cc +fe +0c +0c +1e +00 +00 +00 +00 +00 +00 +fe +c0 +c0 +c0 +fc +06 +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c0 +c0 +fc +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fe +c6 +86 +06 +0c +0c +18 +18 +30 +30 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +7c +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +7e +06 +06 +c6 +7c +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +00 +00 +18 +18 +00 +00 +00 +18 +18 +08 +10 +00 +00 +00 +00 +00 +00 +06 +0c +18 +30 +60 +30 +18 +0c +06 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7e +00 +00 +7e +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +60 +30 +18 +0c +06 +0c +18 +30 +60 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +06 +0c +18 +18 +00 +18 +18 +00 +00 +00 +00 +00 +00 +00 +3c +42 +9d +a5 +a5 +ad +b6 +40 +3c +00 +00 +00 +00 +00 +00 +38 +6c +c6 +c6 +c6 +fe +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +7c +66 +66 +66 +66 +fc +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +c0 +c0 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +66 +66 +66 +66 +fc +00 +00 +00 +00 +00 +00 +fe +66 +62 +68 +78 +78 +68 +62 +66 +fe +00 +00 +00 +00 +00 +00 +fe +66 +62 +68 +78 +78 +68 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c0 +c0 +ce +c6 +c6 +c6 +7e +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +fe +c6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +3c +18 +18 +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +1e +0c +0c +0c +0c +0c +cc +cc +cc +78 +00 +00 +00 +00 +00 +00 +e6 +66 +66 +66 +7c +78 +6c +66 +66 +e6 +00 +00 +00 +00 +00 +00 +f0 +60 +60 +60 +60 +60 +60 +62 +66 +fe +00 +00 +00 +00 +00 +00 +82 +c6 +ee +fe +fe +d6 +c6 +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +86 +c6 +e6 +f6 +fe +de +ce +c6 +c6 +c6 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +7c +60 +60 +60 +f0 +00 +00 +00 +00 +00 +00 +7c +c6 +c6 +c6 +c6 +c6 +c6 +d6 +de +7c +06 +00 +00 +00 +00 +00 +fc +66 +66 +66 +66 +7c +6c +6c +66 +e6 +00 +00 +00 +00 +00 +00 +7c +c6 +c2 +60 +38 +0c +06 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +7e +7e +5a +18 +18 +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +7c +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +c6 +c6 +6c +38 +10 +00 +00 +00 +00 +00 +00 +c6 +c6 +c6 +c6 +c6 +d6 +fe +ee +c6 +82 +00 +00 +00 +00 +00 +00 +c6 +c6 +6c +7c +38 +38 +7c +6c +c6 +c6 +00 +00 +00 +00 +00 +00 +66 +66 +66 +66 +3c +18 +18 +18 +18 +3c +00 +00 +00 +00 +00 +00 +fe +c6 +86 +0c +18 +30 +60 +c2 +c6 +fe +00 +00 +00 +00 +00 +00 +3c +30 +30 +30 +30 +30 +30 +30 +30 +3c +00 +00 +00 +00 +00 +00 +00 +80 +c0 +60 +30 +18 +0c +06 +02 +00 +00 +00 +00 +00 +00 +00 +3c +0c +0c +0c +0c +0c +0c +0c +0c +3c +00 +00 +00 +00 +10 +38 +6c +c6 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +ff +00 +00 diff --git a/hdl/display/vram-40x30.hex b/hdl/display/vram-40x30.hex @@ -0,0 +1,1536 @@ +48 +65 +6c +6c +6f +2c +20 +44 +69 +73 +70 +6c +61 +79 +20 +57 +6f +72 +6c +64 +21 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +1a +1b +1c +1d +1e +1f +00 +00 +00 +00 +00 +00 +00 +00 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +2a +2b +2c +2d +2e +2f +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +3a +3b +3c +3d +3e +3f +00 +00 +00 +00 +00 +00 +00 +00 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +4a +4b +4c +4d +4e +4f +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +5a +5b +5c +5d +5e +5f +00 +00 +00 +00 +00 +00 +00 +00 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +6a +6b +6c +6d +6e +6f +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +7a +7b +7c +7d +7e +7f +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +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/hdl/icebreaker_hdmi111.sv b/hdl/icebreaker_hdmi111.sv @@ -0,0 +1,85 @@ +// Copyright 2018, Brian Swetland <swetland@frotz.net> +// Licensed under the Apache License, Version 2.0. + +`default_nettype none + +module top( + input clk12m_in, + output hdmi_red, + output hdmi_grn, + output hdmi_blu, + output hdmi_hsync, + output hdmi_vsync, + output hdmi_de, + output hdmi_clk, + input uart_rx, + output uart_tx, + output led_red, + output led_grn +); + +wire clk12m; +wire clk25m; + +pll_12_25 pll0 ( + .clk12m_in(clk12m_in), + .clk12m_out(clk12m), + .clk25m_out(clk25m), + .lock(), + .reset(1'b1) +); + +`ifdef verilator +assign hdmi_clk = clk25m; +`else +SB_IO #( + .PIN_TYPE(6'b010000), // DDR OUTPUT + .PULLUP(1'b0), + .NEG_TRIGGER(1'b0), + .IO_STANDARD("SB_LVCMOS") + ) hdmi_clk_io ( + .PACKAGE_PIN(hdmi_clk), + .LATCH_INPUT_VALUE(), + .CLOCK_ENABLE(), // per docs, leave discon for always enable + .INPUT_CLK(), + .OUTPUT_CLK(clk25m), + .D_OUT_0(1'b1), + .D_OUT_1(1'b0), + .D_IN_0(), + .D_IN_1() + ); +`endif + +wire [15:0]dbg_wdata; +wire [15:0]dbg_waddr; +wire dbg_we; + +display #( + .BPP(1), + ) display0 ( + .clk(clk25m), + .red(hdmi_red), + .grn(hdmi_grn), + .blu(hdmi_blu), + .hsync(hdmi_hsync), + .vsync(hdmi_vsync), + .active(hdmi_de), + .frame(), + .wclk(clk25m), + .waddr(dbg_waddr[11:0]), + .wdata(dbg_wdata[7:0]), + .we(dbg_we) +); + +uart_debug_ifc uart( + .sys_clk(clk12m), + .sys_wr(dbg_we), + .sys_waddr(dbg_waddr), + .sys_wdata(dbg_wdata), + .uart_rx(uart_rx), + .uart_tx(uart_tx), + .led_red(led_red), + .led_grn(led_grn) + ); + +endmodule diff --git a/hdl/lattice/pll_12_25.v b/hdl/lattice/pll_12_25.v @@ -38,7 +38,9 @@ defparam pll_inst.SHIFTREG_DIV_MODE = 2'b00; defparam pll_inst.PLLOUT_SELECT_PORTB = "GENCLK"; defparam pll_inst.ENABLE_ICEGATE_PORTA = 1'b0; defparam pll_inst.ENABLE_ICEGATE_PORTB = 1'b0; - +`else +assign clk12m_out = clk12m_in; +assign clk25m_out = clk12m_in; `endif endmodule diff --git a/project/display.def b/project/display.def @@ -0,0 +1,6 @@ + +PROJECT_TYPE := verilator-sim + +PROJECT_SRCS := hdl/testdisplay.sv hdl/display/display.sv hdl/display/display_timing.sv + +PROJECT_VOPTS := -CFLAGS -DVGA diff --git a/project/icebreaker-hdmi111.def b/project/icebreaker-hdmi111.def @@ -0,0 +1,9 @@ + +PROJECT_TYPE := nextpnr-ice40 + +PROJECT_SRCS := hdl/icebreaker_hdmi111.sv hdl/board_icebreaker_hdmi111.pcf +PROJECT_SRCS += hdl/lattice/pll_12_25.v +PROJECT_SRCS += hdl/uart_debug_ifc.sv hdl/uart_rx.sv hdl/crc8_serial.sv +PROJECT_SRCS += hdl/display/display.sv hdl/display/display_timing.sv + +PROJECT_NEXTPNR_OPTS := --package sg48 --up5k