Browse Source

Clean up, split Xilinx into top-level

jamesbowman 9 years ago
parent
commit
4dbdd62075
2 changed files with 4423 additions and 835 deletions
  1. 1 0
      synth/go
  2. 4422 835
      verilog/top.v

+ 1 - 0
synth/go

@@ -1,2 +1,3 @@
+# python gen437.py ; exit
 make &&
 impact -batch send.impact

+ 4422 - 835
verilog/top.v

@@ -1,887 +1,4474 @@
-`define YES
-
-module lfsre(
-    input clk,
-    output reg [16:0] lfsr);
-wire d0;
+module top(
+  input clka,
+  output [2:0] vga_red,
+  output [2:0] vga_green,
+  output [2:0] vga_blue,
+  output vga_hsync_n,
+  output vga_vsync_n,
 
-xnor(d0,lfsr[16],lfsr[13]);
+  input SCK,  // arduino 13
+  input MOSI, // arduino 11
+  output MISO, // arduino 12
+  input SSEL, // arduino 9
+  input AUX,  // arduino 2
+  output AUDIOL,
+  output AUDIOR,
 
-always @(posedge clk) begin
-    lfsr <= {lfsr[15:0],d0};
-end
-endmodule
+  output flashMOSI,
+  input  flashMISO,
+  output flashSCK,
+  output flashSSEL
+  );
 
-module oldram256x1s(
-  input d,
-  input we,
-  input wclk,
-  input [7:0] a,
-  output o);
+  wire ck_fb;
+  wire clk;
+  DCM #(
+     .CLKFX_MULTIPLY(13),
+     .CLKFX_DIVIDE(5),
+     .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis
+     .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
+     .STARTUP_WAIT("TRUE")    // Delay configuration DONE until DCM LOCK, TRUE/FALSE
+  ) DCM_inst (
+     .CLK0(ck_fb),    
+     .CLKFX(clk), 
+     .CLKFB(ck_fb),    // DCM clock feedback
+     .CLKIN(clka),     // Clock input (from IBUFG, BUFG or DCM)
+     .RST(0)
+  );
 
-  wire sel0 = (a[7:6] == 0);
-  wire o0;
-  RAM64X1S r0(.O(o0), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE(sel0 & we));
+  textmode tm(.clk(clk), 
+              .vga_red(vga_red),
+              .vga_green(vga_green),
+              .vga_blue(vga_blue),
+              .vga_hsync_n(vga_hsync_n),
+              .vga_vsync_n(vga_vsync_n));
 
-  wire sel1 = (a[7:6] == 1);
-  wire o1;
-  RAM64X1S r1(.O(o1), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE(sel1 & we));
+  assign AUDIOL = 0;
+  assign AUDIOR = 0;
 
-  wire sel2 = (a[7:6] == 2);
-  wire o2;
-  RAM64X1S r2(.O(o2), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE(sel2 & we));
+  assign flashMOSI = MOSI;
+  assign flashSCK = SCK;
+  assign flashSSEL = AUX;
 
-  wire sel3 = (a[7:6] == 3);
-  wire o3;
-  RAM64X1S r3(.O(o3), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE(sel3 & we));
+  assign MISO = (SSEL == 0) ? 1'b0 : flashMISO;
 
-  assign o = (a[7] == 0) ? ((a[6] == 0) ? o0 : o1) : ((a[6] == 0) ? o2 : o3);
 endmodule
 
-module ring64(
+module textmode(
   input clk,
-  input i,
-  output o);
-
-  wire o0, o1, o2;
-  SRL16E ring0( .CLK(clk), .CE(1), .D(i),  .A0(1), .A1(1), .A2(1), .A3(1), .Q(o0));
-  SRL16E ring1( .CLK(clk), .CE(1), .D(o0), .A0(1), .A1(1), .A2(1), .A3(1), .Q(o1));
-  SRL16E ring2( .CLK(clk), .CE(1), .D(o1), .A0(1), .A1(1), .A2(1), .A3(1), .Q(o2));
-  SRL16E ring3( .CLK(clk), .CE(1), .D(o2), .A0(1), .A1(1), .A2(1), .A3(1), .Q(o));
-endmodule
+  output [2:0] vga_red,
+  output [2:0] vga_green,
+  output [2:0] vga_blue,
+  output reg vga_hsync_n,
+  output reg vga_vsync_n);
 
-module ram256x1s(
-  input d,
-  input we,
-  input wclk,
-  input [7:0] a,
-  output o);
-
-  wire [1:0] rsel = a[7:6];
-  wire [3:0] oo;
-  genvar i;
-  generate 
-    for (i = 0; i < 4; i=i+1) begin : ramx
-    RAM64X1S r0(.O(oo[i]), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE((rsel == i) & we));
-    end
-  endgenerate
-
-  assign o = oo[rsel];
-endmodule
+  // http://tinyvga.com/vga-timing/1024x768@60Hz
 
-module ram448x1s(
-  input d,
-  input we,
-  input wclk,
-  input [8:0] a,
-  output o);
-
-  wire [2:0] rsel = a[8:6];
-  wire [7:0] oo;
-  genvar i;
-  generate 
-    for (i = 0; i < 7; i=i+1) begin : ramx
-      RAM64X1S r0(.O(oo[i]), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE((rsel == i) & we));
-    end
-  endgenerate
-
-  assign o = oo[rsel];
-endmodule
+  // hcounter:
+  //  0   -1023   visible area
+  //  1024-1047   front porch
+  //  1048-1183   sync pulse
+  //  1184-1343   back porch
 
-module ram400x1s(
-  input d,
-  input we,
-  input wclk,
-  input [8:0] a,
-  output o);
-
-  wire [2:0] rsel = a[8:6];
-  wire [6:0] oo;
-  genvar i;
-  generate 
-    for (i = 0; i < 6; i=i+1) begin : ramx
-      RAM64X1S r0(.O(oo[i]), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d), .WCLK(wclk), .WE((rsel == i) & we));
-    end
-  endgenerate
-  RAM16X1S r6(.O(oo[6]), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .D(d), .WCLK(wclk), .WE((rsel == 6) & we));
-
-  assign o = oo[rsel];
-endmodule
+  reg [10:0] hcounter;
+  wire [10:0] hcounterN = (hcounter == 11'd1343) ? 11'd0 : (hcounter + 11'd1);
 
-module ram256x8s(
-  input [7:0] d,
-  input we,
-  input wclk,
-  input [7:0] a,
-  output [7:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      ram256x1s ramx(
-        .d(d[i]),
-        .we(we),
-        .wclk(wclk),
-        .a(a),
-        .o(o[i]));
-    end
-  endgenerate
-endmodule
+  // vcounter:
+  //  0  -767     visble area
+  //  768-770     front porch
+  //  771-776     sync pulse
+  //  777-805     back porch
 
-module ram32x8s(
-  input [7:0] d,
-  input we,
-  input wclk,
-  input [4:0] a,
-  output [7:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      RAM32X1S r0(.O(o[i]), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .D(d[i]), .WCLK(wclk), .WE(we));
-    end
-  endgenerate
-endmodule
+  reg [9:0] vcounter;
+  reg [9:0] vcounterN;
+  always @*
+    if (hcounterN != 11'd0)
+      vcounterN = vcounter;
+    else if (vcounter != 10'd805)
+      vcounterN = vcounter + 1;
+    else
+      vcounterN = 10'd0;
 
-module ram64x8s(
-  input [7:0] d,
-  input we,
-  input wclk,
-  input [5:0] a,
-  output [7:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      RAM64X1S r0(.O(o[i]), .A0(a[0]), .A1(a[1]), .A2(a[2]), .A3(a[3]), .A4(a[4]), .A5(a[5]), .D(d[i]), .WCLK(wclk), .WE(we));
-    end
-  endgenerate
-endmodule
+  wire visible = (hcounter < 1024) & (vcounter < 768);
 
-module mRAM32X1D(
-  input D,
-  input WE,
-  input WCLK,
-  input A0,     // port A
-  input A1,
-  input A2,
-  input A3,
-  input A4,
-  input DPRA0,  // port B
-  input DPRA1,
-  input DPRA2,
-  input DPRA3,
-  input DPRA4,
-  output DPO,   // port A out
-  output SPO);  // port B out
-
-  parameter INIT = 32'b0;
-  wire hDPO;
-  wire lDPO;
-  wire hSPO;
-  wire lSPO;
-  RAM16X1D
-    #( .INIT(INIT[15:0]) ) 
-    lo(
-    .D(D),
-    .WE(WE & !A4),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPO(lDPO),
-    .SPO(lSPO));
-  RAM16X1D
-    #( .INIT(INIT[31:16]) ) 
-  hi(
-    .D(D),
-    .WE(WE & A4),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPO(hDPO),
-    .SPO(hSPO));
-  assign DPO = DPRA4 ? hDPO : lDPO;
-  assign SPO = A4 ? hSPO : lSPO;
-endmodule
+  wire pix;
+  fontrom fr(.ch(hcounterN[10:3] + vcounterN[9:4]), .row(vcounterN[3:0]), .col(hcounterN[2:0]), .pix(pix));
 
-module mRAM64X1D(
-  input D,
-  input WE,
-  input WCLK,
-  input A0,     // port A
-  input A1,
-  input A2,
-  input A3,
-  input A4,
-  input A5,
-  input DPRA0,  // port B
-  input DPRA1,
-  input DPRA2,
-  input DPRA3,
-  input DPRA4,
-  input DPRA5,
-  output DPO,   // port A out
-  output SPO);  // port B out
-
-  parameter INIT = 64'b0;
-  wire hDPO;
-  wire lDPO;
-  wire hSPO;
-  wire lSPO;
-  mRAM32X1D
-    #( .INIT(INIT[31:0]) ) 
-    lo(
-    .D(D),
-    .WE(WE & !A5),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .A4(A4),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPRA4(DPRA4),
-    .DPO(lDPO),
-    .SPO(lSPO));
-  mRAM32X1D
-    #( .INIT(INIT[63:32]) ) 
-  hi(
-    .D(D),
-    .WE(WE & A5),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .A4(A4),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPRA4(DPRA4),
-    .DPO(hDPO),
-    .SPO(hSPO));
-  assign DPO = DPRA5 ? hDPO : lDPO;
-  assign SPO = A5 ? hSPO : lSPO;
-endmodule
+  always @(posedge clk) begin
+    hcounter <= hcounterN;
+    vcounter <= vcounterN;
+    vga_hsync_n <= !((1048 <= hcounter) & (hcounter < 1184));
+    vga_vsync_n <= !((771 <= vcounter) & (vcounter < 777));
+  end
+
+  assign vga_red = visible ? {pix, pix, pix} : 3'b000;
+  assign vga_green = visible ? {pix, pix, pix} : 3'b000;
+  assign vga_blue = visible ? {pix, pix, pix} : 3'b000;
 
-module mRAM128X1D(
-  input D,
-  input WE,
-  input WCLK,
-  input A0,     // port A
-  input A1,
-  input A2,
-  input A3,
-  input A4,
-  input A5,
-  input A6,
-  input DPRA0,  // port B
-  input DPRA1,
-  input DPRA2,
-  input DPRA3,
-  input DPRA4,
-  input DPRA5,
-  input DPRA6,
-  output DPO,   // port A out
-  output SPO);  // port B out
-  parameter INIT = 128'b0;
-
-  wire hDPO;
-  wire lDPO;
-  wire hSPO;
-  wire lSPO;
-  mRAM64X1D
-    #( .INIT(INIT[63:0]) ) 
-    lo(
-    .D(D),
-    .WE(WE & !A6),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .A4(A4),
-    .A5(A5),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPRA4(DPRA4),
-    .DPRA5(DPRA5),
-    .DPO(lDPO),
-    .SPO(lSPO));
-  mRAM64X1D
-    #( .INIT(INIT[127:64]) ) 
-    hi(
-    .D(D),
-    .WE(WE & A6),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .A4(A4),
-    .A5(A5),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPRA4(DPRA4),
-    .DPRA5(DPRA5),
-    .DPO(hDPO),
-    .SPO(hSPO));
-  assign DPO = DPRA6 ? hDPO : lDPO;
-  assign SPO = A6 ? hSPO : lSPO;
 endmodule
 
+module fontrom(
+  input [7:0] ch,
+  input [3:0] row,
+  input [2:0] col,
+  output pix);
 
-module mRAM256X1D(
-  input D,
-  input WE,
-  input WCLK,
-  input A0,     // port A
-  input A1,
-  input A2,
-  input A3,
-  input A4,
-  input A5,
-  input A6,
-  input A7,
-  input DPRA0,  // port B
-  input DPRA1,
-  input DPRA2,
-  input DPRA3,
-  input DPRA4,
-  input DPRA5,
-  input DPRA6,
-  input DPRA7,
-  output DPO,   // port A out
-  output SPO);  // port B out
-
-  wire hDPO;
-  wire lDPO;
-  wire hSPO;
-  wire lSPO;
-  mRAM128X1D
-    lo(
-    .D(D),
-    .WE(WE & !A7),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .A4(A4),
-    .A5(A5),
-    .A6(A6),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPRA4(DPRA4),
-    .DPRA5(DPRA5),
-    .DPRA6(DPRA6),
-    .DPO(lDPO),
-    .SPO(lSPO));
-  mRAM128X1D
-  hi(
-    .D(D),
-    .WE(WE & A7),
-    .WCLK(WCLK),
-    .A0(A0),
-    .A1(A1),
-    .A2(A2),
-    .A3(A3),
-    .A4(A4),
-    .A5(A5),
-    .A6(A6),
-    .DPRA0(DPRA0),
-    .DPRA1(DPRA1),
-    .DPRA2(DPRA2),
-    .DPRA3(DPRA3),
-    .DPRA4(DPRA4),
-    .DPRA5(DPRA5),
-    .DPRA6(DPRA6),
-    .DPO(hDPO),
-    .SPO(hSPO));
-  assign DPO = DPRA7 ? hDPO : lDPO;
-  assign SPO = A7 ? hSPO : lSPO;
-endmodule
+  reg [7:0] pattern;
+  assign pix = pattern[~col];
+  always @*
+  case ({ch, row})
+    { 8'h00, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h00, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h00, 4'ha }: pattern = 8'b00000000; 
+    { 8'h00, 4'hb }: pattern = 8'b00000000; 
+    { 8'h00, 4'hc }: pattern = 8'b00000000; 
+    { 8'h00, 4'hd }: pattern = 8'b00000000; 
+    { 8'h00, 4'he }: pattern = 8'b00000000; 
+    { 8'h00, 4'hf }: pattern = 8'b00000000; 
 
-module ram32x8d(
-  input [7:0] ad,
-  input wea,
-  input wclk,
-  input [4:0] a,
-  input [4:0] b,
-  output [7:0] ao,
-  output [7:0] bo
-  );
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      mRAM32X1D ramx(
-        .D(ad[i]),
-        .WE(wea),
-        .WCLK(wclk),
-        .A0(a[0]),
-        .A1(a[1]),
-        .A2(a[2]),
-        .A3(a[3]),
-        .A4(a[4]),
-        .DPRA0(b[0]),
-        .DPRA1(b[1]),
-        .DPRA2(b[2]),
-        .DPRA3(b[3]),
-        .DPRA4(b[4]),
-        .SPO(ao[i]),
-        .DPO(bo[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h01, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h01, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h01, 4'h2 }: pattern = 8'b01111110; 
+    { 8'h01, 4'h3 }: pattern = 8'b10000001; 
+    { 8'h01, 4'h4 }: pattern = 8'b10100101; 
+    { 8'h01, 4'h5 }: pattern = 8'b10000001; 
+    { 8'h01, 4'h6 }: pattern = 8'b10000001; 
+    { 8'h01, 4'h7 }: pattern = 8'b10111101; 
+    { 8'h01, 4'h8 }: pattern = 8'b10011001; 
+    { 8'h01, 4'h9 }: pattern = 8'b10000001; 
+    { 8'h01, 4'ha }: pattern = 8'b10000001; 
+    { 8'h01, 4'hb }: pattern = 8'b01111110; 
+    { 8'h01, 4'hc }: pattern = 8'b00000000; 
+    { 8'h01, 4'hd }: pattern = 8'b00000000; 
+    { 8'h01, 4'he }: pattern = 8'b00000000; 
+    { 8'h01, 4'hf }: pattern = 8'b00000000; 
 
-module ram64x8d(
-  input [7:0] ad,
-  input wea,
-  input wclk,
-  input [5:0] a,
-  input [5:0] b,
-  output [7:0] ao,
-  output [7:0] bo
-  );
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      mRAM64X1D ramx(
-        .D(ad[i]),
-        .WE(wea),
-        .WCLK(wclk),
-        .A0(a[0]),
-        .A1(a[1]),
-        .A2(a[2]),
-        .A3(a[3]),
-        .A4(a[4]),
-        .A5(a[5]),
-        .DPRA0(b[0]),
-        .DPRA1(b[1]),
-        .DPRA2(b[2]),
-        .DPRA3(b[3]),
-        .DPRA4(b[4]),
-        .DPRA5(b[5]),
-        .SPO(ao[i]),
-        .DPO(bo[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h02, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h02, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h02, 4'h2 }: pattern = 8'b01111110; 
+    { 8'h02, 4'h3 }: pattern = 8'b11111111; 
+    { 8'h02, 4'h4 }: pattern = 8'b11011011; 
+    { 8'h02, 4'h5 }: pattern = 8'b11111111; 
+    { 8'h02, 4'h6 }: pattern = 8'b11111111; 
+    { 8'h02, 4'h7 }: pattern = 8'b11000011; 
+    { 8'h02, 4'h8 }: pattern = 8'b11100111; 
+    { 8'h02, 4'h9 }: pattern = 8'b11111111; 
+    { 8'h02, 4'ha }: pattern = 8'b11111111; 
+    { 8'h02, 4'hb }: pattern = 8'b01111110; 
+    { 8'h02, 4'hc }: pattern = 8'b00000000; 
+    { 8'h02, 4'hd }: pattern = 8'b00000000; 
+    { 8'h02, 4'he }: pattern = 8'b00000000; 
+    { 8'h02, 4'hf }: pattern = 8'b00000000; 
 
-// Same but latched read port, for CPU
-module ram32x8rd(
-  input wclk,
-  input [15:0] ad,
-  input wea,
-  input [4:0] a,
-  input [4:0] b,
-  output reg [15:0] ao,
-  output reg [15:0] bo
-  );
-  wire [15:0] _ao;
-  wire [15:0] _bo;
-  always @(posedge wclk)
-  begin
-    ao <= _ao;
-    bo <= _bo;
-  end
-  genvar i;
-  generate 
-    for (i = 0; i < 16; i=i+1) begin : ramx
-      mRAM32X1D ramx(
-        .D(ad[i]),
-        .WE(wea),
-        .WCLK(wclk),
-        .A0(a[0]),
-        .A1(a[1]),
-        .A2(a[2]),
-        .A3(a[3]),
-        .A4(a[4]),
-        .DPRA0(b[0]),
-        .DPRA1(b[1]),
-        .DPRA2(b[2]),
-        .DPRA3(b[3]),
-        .DPRA4(b[4]),
-        .SPO(_ao[i]),
-        .DPO(_bo[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h03, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h03, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h03, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h03, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h03, 4'h4 }: pattern = 8'b01101100; 
+    { 8'h03, 4'h5 }: pattern = 8'b11111110; 
+    { 8'h03, 4'h6 }: pattern = 8'b11111110; 
+    { 8'h03, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h03, 4'h8 }: pattern = 8'b11111110; 
+    { 8'h03, 4'h9 }: pattern = 8'b01111100; 
+    { 8'h03, 4'ha }: pattern = 8'b00111000; 
+    { 8'h03, 4'hb }: pattern = 8'b00010000; 
+    { 8'h03, 4'hc }: pattern = 8'b00000000; 
+    { 8'h03, 4'hd }: pattern = 8'b00000000; 
+    { 8'h03, 4'he }: pattern = 8'b00000000; 
+    { 8'h03, 4'hf }: pattern = 8'b00000000; 
 
-module ram128x8rd(
-  input wclk,
-  input [15:0] ad,
-  input wea,
-  input [6:0] a,
-  input [6:0] b,
-  output reg [15:0] ao,
-  output reg [15:0] bo
-  );
-  wire [15:0] _ao;
-  wire [15:0] _bo;
-  always @(posedge wclk)
-  begin
-    ao <= _ao;
-    bo <= _bo;
-  end
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      mRAM128X1D ramx(
-        .D(ad[i]),
-        .WE(wea),
-        .WCLK(wclk),
-        .A0(a[0]),
-        .A1(a[1]),
-        .A2(a[2]),
-        .A3(a[3]),
-        .A4(a[4]),
-        .A5(a[5]),
-        .A6(a[6]),
-        .DPRA0(b[0]),
-        .DPRA1(b[1]),
-        .DPRA2(b[2]),
-        .DPRA3(b[3]),
-        .DPRA4(b[4]),
-        .DPRA5(b[5]),
-        .DPRA6(b[6]),
-        .SPO(_ao[i]),
-        .DPO(_bo[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h04, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h04, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h04, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h04, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h04, 4'h4 }: pattern = 8'b00010000; 
+    { 8'h04, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h04, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h04, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h04, 4'h8 }: pattern = 8'b01111100; 
+    { 8'h04, 4'h9 }: pattern = 8'b00111000; 
+    { 8'h04, 4'ha }: pattern = 8'b00010000; 
+    { 8'h04, 4'hb }: pattern = 8'b00000000; 
+    { 8'h04, 4'hc }: pattern = 8'b00000000; 
+    { 8'h04, 4'hd }: pattern = 8'b00000000; 
+    { 8'h04, 4'he }: pattern = 8'b00000000; 
+    { 8'h04, 4'hf }: pattern = 8'b00000000; 
 
-module ram256x8rd(
-  input wclk,
-  input [7:0] ad,
-  input wea,
-  input [7:0] a,
-  input [7:0] b,
-  output reg [7:0] ao,
-  output reg [7:0] bo
-  );
-  wire [7:0] _ao;
-  wire [7:0] _bo;
-  always @(posedge wclk)
-  begin
-    ao <= _ao;
-    bo <= _bo;
-  end
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      mRAM256X1D ramx(
-        .D(ad[i]),
-        .WE(wea),
-        .WCLK(wclk),
-        .A0(a[0]),
-        .A1(a[1]),
-        .A2(a[2]),
-        .A3(a[3]),
-        .A4(a[4]),
-        .A5(a[5]),
-        .A6(a[6]),
-        .A7(a[7]),
-        .DPRA0(b[0]),
-        .DPRA1(b[1]),
-        .DPRA2(b[2]),
-        .DPRA3(b[3]),
-        .DPRA4(b[4]),
-        .DPRA5(b[5]),
-        .DPRA6(b[6]),
-        .DPRA7(b[7]),
-        .SPO(_ao[i]),
-        .DPO(_bo[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h05, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h05, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h05, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h05, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h05, 4'h4 }: pattern = 8'b00111100; 
+    { 8'h05, 4'h5 }: pattern = 8'b00111100; 
+    { 8'h05, 4'h6 }: pattern = 8'b11100111; 
+    { 8'h05, 4'h7 }: pattern = 8'b11100111; 
+    { 8'h05, 4'h8 }: pattern = 8'b11100111; 
+    { 8'h05, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h05, 4'ha }: pattern = 8'b00011000; 
+    { 8'h05, 4'hb }: pattern = 8'b00111100; 
+    { 8'h05, 4'hc }: pattern = 8'b00000000; 
+    { 8'h05, 4'hd }: pattern = 8'b00000000; 
+    { 8'h05, 4'he }: pattern = 8'b00000000; 
+    { 8'h05, 4'hf }: pattern = 8'b00000000; 
 
-module ram448x9s(
-  input [8:0] d,
-  input we,
-  input wclk,
-  input [8:0] a,
-  output [8:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 9; i=i+1) begin : ramx
-      ram448x1s ramx(
-        .d(d[i]),
-        .we(we),
-        .wclk(wclk),
-        .a(a),
-        .o(o[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h06, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h06, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h06, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h06, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h06, 4'h4 }: pattern = 8'b00111100; 
+    { 8'h06, 4'h5 }: pattern = 8'b01111110; 
+    { 8'h06, 4'h6 }: pattern = 8'b11111111; 
+    { 8'h06, 4'h7 }: pattern = 8'b11111111; 
+    { 8'h06, 4'h8 }: pattern = 8'b01111110; 
+    { 8'h06, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h06, 4'ha }: pattern = 8'b00011000; 
+    { 8'h06, 4'hb }: pattern = 8'b00111100; 
+    { 8'h06, 4'hc }: pattern = 8'b00000000; 
+    { 8'h06, 4'hd }: pattern = 8'b00000000; 
+    { 8'h06, 4'he }: pattern = 8'b00000000; 
+    { 8'h06, 4'hf }: pattern = 8'b00000000; 
 
-module ram400x9s(
-  input [8:0] d,
-  input we,
-  input wclk,
-  input [8:0] a,
-  output [8:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 9; i=i+1) begin : ramx
-      ram400x1s ramx(
-        .d(d[i]),
-        .we(we),
-        .wclk(wclk),
-        .a(a),
-        .o(o[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h07, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h07, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h07, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h07, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h07, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h07, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h07, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h07, 4'h7 }: pattern = 8'b00111100; 
+    { 8'h07, 4'h8 }: pattern = 8'b00111100; 
+    { 8'h07, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h07, 4'ha }: pattern = 8'b00000000; 
+    { 8'h07, 4'hb }: pattern = 8'b00000000; 
+    { 8'h07, 4'hc }: pattern = 8'b00000000; 
+    { 8'h07, 4'hd }: pattern = 8'b00000000; 
+    { 8'h07, 4'he }: pattern = 8'b00000000; 
+    { 8'h07, 4'hf }: pattern = 8'b00000000; 
 
-module ram400x8s(
-  input [7:0] d,
-  input we,
-  input wclk,
-  input [8:0] a,
-  output [7:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 8; i=i+1) begin : ramx
-      ram400x1s ramx(
-        .d(d[i]),
-        .we(we),
-        .wclk(wclk),
-        .a(a),
-        .o(o[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h08, 4'h0 }: pattern = 8'b11111111; 
+    { 8'h08, 4'h1 }: pattern = 8'b11111111; 
+    { 8'h08, 4'h2 }: pattern = 8'b11111111; 
+    { 8'h08, 4'h3 }: pattern = 8'b11111111; 
+    { 8'h08, 4'h4 }: pattern = 8'b11111111; 
+    { 8'h08, 4'h5 }: pattern = 8'b11111111; 
+    { 8'h08, 4'h6 }: pattern = 8'b11100111; 
+    { 8'h08, 4'h7 }: pattern = 8'b11000011; 
+    { 8'h08, 4'h8 }: pattern = 8'b11000011; 
+    { 8'h08, 4'h9 }: pattern = 8'b11100111; 
+    { 8'h08, 4'ha }: pattern = 8'b11111111; 
+    { 8'h08, 4'hb }: pattern = 8'b11111111; 
+    { 8'h08, 4'hc }: pattern = 8'b11111111; 
+    { 8'h08, 4'hd }: pattern = 8'b11111111; 
+    { 8'h08, 4'he }: pattern = 8'b11111111; 
+    { 8'h08, 4'hf }: pattern = 8'b11111111; 
 
-module ram400x7s(
-  input [6:0] d,
-  input we,
-  input wclk,
-  input [8:0] a,
-  output [6:0] o);
-  genvar i;
-  generate 
-    for (i = 0; i < 7; i=i+1) begin : ramx
-      ram400x1s ramx(
-        .d(d[i]),
-        .we(we),
-        .wclk(wclk),
-        .a(a),
-        .o(o[i]));
-    end
-  endgenerate
-endmodule
+    { 8'h09, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h09, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h09, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h09, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h09, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h09, 4'h5 }: pattern = 8'b00111100; 
+    { 8'h09, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h09, 4'h7 }: pattern = 8'b01000010; 
+    { 8'h09, 4'h8 }: pattern = 8'b01000010; 
+    { 8'h09, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h09, 4'ha }: pattern = 8'b00111100; 
+    { 8'h09, 4'hb }: pattern = 8'b00000000; 
+    { 8'h09, 4'hc }: pattern = 8'b00000000; 
+    { 8'h09, 4'hd }: pattern = 8'b00000000; 
+    { 8'h09, 4'he }: pattern = 8'b00000000; 
+    { 8'h09, 4'hf }: pattern = 8'b00000000; 
 
-// SPI can be many things, so to be clear, this implementation:
-//   MSB first
-//   CPOL 0, leading edge when SCK rises
-//   CPHA 0, sample on leading, setup on trailing
+    { 8'h0a, 4'h0 }: pattern = 8'b11111111; 
+    { 8'h0a, 4'h1 }: pattern = 8'b11111111; 
+    { 8'h0a, 4'h2 }: pattern = 8'b11111111; 
+    { 8'h0a, 4'h3 }: pattern = 8'b11111111; 
+    { 8'h0a, 4'h4 }: pattern = 8'b11111111; 
+    { 8'h0a, 4'h5 }: pattern = 8'b11000011; 
+    { 8'h0a, 4'h6 }: pattern = 8'b10011001; 
+    { 8'h0a, 4'h7 }: pattern = 8'b10111101; 
+    { 8'h0a, 4'h8 }: pattern = 8'b10111101; 
+    { 8'h0a, 4'h9 }: pattern = 8'b10011001; 
+    { 8'h0a, 4'ha }: pattern = 8'b11000011; 
+    { 8'h0a, 4'hb }: pattern = 8'b11111111; 
+    { 8'h0a, 4'hc }: pattern = 8'b11111111; 
+    { 8'h0a, 4'hd }: pattern = 8'b11111111; 
+    { 8'h0a, 4'he }: pattern = 8'b11111111; 
+    { 8'h0a, 4'hf }: pattern = 8'b11111111; 
 
-module SPI_memory(
-  input clk,
-  input SCK, input MOSI, output MISO, input SSEL,
-  output wire [15:0] raddr,   // read address
-  output reg [15:0] waddr,    // write address
-  output reg [7:0] data_w,
-  input [7:0] data_r,
-  output reg we,
-  output reg re,
-  output mem_clk
-);
-  reg [15:0] paddr;
-  reg [4:0] count;
-  wire [4:0] _count = (count == 23) ? 16 : (count + 1);
-
-  assign mem_clk = clk;
-
-  // sync SCK to the FPGA clock using a 3-bits shift register
-  reg [2:0] SCKr;  always @(posedge clk) SCKr <= {SCKr[1:0], SCK};
-  wire SCK_risingedge = (SCKr[2:1]==2'b01);  // now we can detect SCK rising edges
-  wire SCK_fallingedge = (SCKr[2:1]==2'b10);  // and falling edges
-
-  // same thing for SSEL
-  reg [2:0] SSELr;  always @(posedge clk) SSELr <= {SSELr[1:0], SSEL};
-  wire SSEL_active = ~SSELr[1];  // SSEL is active low
-  wire SSEL_startmessage = (SSELr[2:1]==2'b10);  // message starts at falling edge
-  wire SSEL_endmessage = (SSELr[2:1]==2'b01);  // message stops at rising edge
-
-// and for MOSI
-  reg [1:0] MOSIr;  always @(posedge clk) MOSIr <= {MOSIr[0], MOSI};
-  wire MOSI_data = MOSIr[1];
-
-  assign raddr = (count[4] == 0) ? {paddr[14:0], MOSI_data} : paddr;
-
-  always @(posedge clk)
-  begin
-    if (~SSEL_active) begin
-      count <= 0;
-      re <= 0;
-      we <= 0;
-    end else
-      if (SCK_risingedge) begin
-        if (count[4] == 0) begin
-          we <= 0;
-          paddr <= raddr;
-          re <= (count == 15);
-        end else begin
-          data_w <= {data_w[6:0], MOSI_data};
-          if (count == 23) begin
-            we <= paddr[15];
-            re <= !paddr[15];
-            waddr <= paddr;
-            paddr <= paddr + 1;
-          end else begin
-            we <= 0;
-            re <= 0;
-          end
-        end
-        count <= _count;
-      end
-      if (SCK_fallingedge) begin
-        re <= 0;
-        we <= 0;
-      end
-  end
+    { 8'h0b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h0b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h0b, 4'h2 }: pattern = 8'b00011110; 
+    { 8'h0b, 4'h3 }: pattern = 8'b00001110; 
+    { 8'h0b, 4'h4 }: pattern = 8'b00011010; 
+    { 8'h0b, 4'h5 }: pattern = 8'b00110010; 
+    { 8'h0b, 4'h6 }: pattern = 8'b01111000; 
+    { 8'h0b, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h0b, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h0b, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h0b, 4'ha }: pattern = 8'b11001100; 
+    { 8'h0b, 4'hb }: pattern = 8'b01111000; 
+    { 8'h0b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h0b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h0b, 4'he }: pattern = 8'b00000000; 
+    { 8'h0b, 4'hf }: pattern = 8'b00000000; 
 
-  reg readbit;
-  always @*
-  begin
-    case (count[2:0])
-    3'd0: readbit <= data_r[7];
-    3'd1: readbit <= data_r[6];
-    3'd2: readbit <= data_r[5];
-    3'd3: readbit <= data_r[4];
-    3'd4: readbit <= data_r[3];
-    3'd5: readbit <= data_r[2];
-    3'd6: readbit <= data_r[1];
-    3'd7: readbit <= data_r[0];
-    endcase
-  end
-  assign MISO = readbit;
+    { 8'h0c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h0c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h0c, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h0c, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h0c, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h0c, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h0c, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h0c, 4'h7 }: pattern = 8'b00111100; 
+    { 8'h0c, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h0c, 4'h9 }: pattern = 8'b01111110; 
+    { 8'h0c, 4'ha }: pattern = 8'b00011000; 
+    { 8'h0c, 4'hb }: pattern = 8'b00011000; 
+    { 8'h0c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h0c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h0c, 4'he }: pattern = 8'b00000000; 
+    { 8'h0c, 4'hf }: pattern = 8'b00000000; 
 
-endmodule
+    { 8'h0d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h0d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h0d, 4'h2 }: pattern = 8'b00111111; 
+    { 8'h0d, 4'h3 }: pattern = 8'b00110011; 
+    { 8'h0d, 4'h4 }: pattern = 8'b00111111; 
+    { 8'h0d, 4'h5 }: pattern = 8'b00110000; 
+    { 8'h0d, 4'h6 }: pattern = 8'b00110000; 
+    { 8'h0d, 4'h7 }: pattern = 8'b00110000; 
+    { 8'h0d, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h0d, 4'h9 }: pattern = 8'b01110000; 
+    { 8'h0d, 4'ha }: pattern = 8'b11110000; 
+    { 8'h0d, 4'hb }: pattern = 8'b11100000; 
+    { 8'h0d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h0d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h0d, 4'he }: pattern = 8'b00000000; 
+    { 8'h0d, 4'hf }: pattern = 8'b00000000; 
 
-// This is a Delta-Sigma Digital to Analog Converter
-`define MSBI 12 // Most significant Bit of DAC input, 12 means 13-bit
-
-module dac(DACout, DACin, Clk, Reset);
-output DACout;         // This is the average output that feeds low pass filter
-reg DACout;            // for optimum performance, ensure that this ff is in IOB
-input [`MSBI:0] DACin; // DAC input (excess 2**MSBI)
-input Clk;
-input Reset;
-reg [`MSBI+2:0] DeltaAdder; // Output of Delta adder
-reg [`MSBI+2:0] SigmaAdder; // Output of Sigma adder
-reg [`MSBI+2:0] SigmaLatch; // Latches output of Sigma adder
-reg [`MSBI+2:0] DeltaB; // B input of Delta adder
-
-always @(SigmaLatch) DeltaB = {SigmaLatch[`MSBI+2], SigmaLatch[`MSBI+2]} << (`MSBI+1);
-always @(DACin or DeltaB) DeltaAdder = DACin + DeltaB;
-always @(DeltaAdder or SigmaLatch) SigmaAdder = DeltaAdder + SigmaLatch;
-always @(posedge Clk or posedge Reset)
-begin
-  if (Reset) begin
-    SigmaLatch <= #1 1'b1 << (`MSBI+1);
-    DACout <= #1 1'b0;
-  end else begin
-    SigmaLatch <= #1 SigmaAdder;
-    DACout <= #1 SigmaLatch[`MSBI+2];
-  end
-end
-endmodule
+    { 8'h0e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h0e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h0e, 4'h2 }: pattern = 8'b01111111; 
+    { 8'h0e, 4'h3 }: pattern = 8'b01100011; 
+    { 8'h0e, 4'h4 }: pattern = 8'b01111111; 
+    { 8'h0e, 4'h5 }: pattern = 8'b01100011; 
+    { 8'h0e, 4'h6 }: pattern = 8'b01100011; 
+    { 8'h0e, 4'h7 }: pattern = 8'b01100011; 
+    { 8'h0e, 4'h8 }: pattern = 8'b01100011; 
+    { 8'h0e, 4'h9 }: pattern = 8'b01100111; 
+    { 8'h0e, 4'ha }: pattern = 8'b11100111; 
+    { 8'h0e, 4'hb }: pattern = 8'b11100110; 
+    { 8'h0e, 4'hc }: pattern = 8'b11000000; 
+    { 8'h0e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h0e, 4'he }: pattern = 8'b00000000; 
+    { 8'h0e, 4'hf }: pattern = 8'b00000000; 
 
-module top(
-  input clka,
-  output [2:0] vga_red,
-  output [2:0] vga_green,
-  output [2:0] vga_blue,
-  output reg vga_hsync_n,
-  output reg vga_vsync_n,
+    { 8'h0f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h0f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h0f, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h0f, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h0f, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h0f, 4'h5 }: pattern = 8'b11011011; 
+    { 8'h0f, 4'h6 }: pattern = 8'b00111100; 
+    { 8'h0f, 4'h7 }: pattern = 8'b11100111; 
+    { 8'h0f, 4'h8 }: pattern = 8'b00111100; 
+    { 8'h0f, 4'h9 }: pattern = 8'b11011011; 
+    { 8'h0f, 4'ha }: pattern = 8'b00011000; 
+    { 8'h0f, 4'hb }: pattern = 8'b00011000; 
+    { 8'h0f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h0f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h0f, 4'he }: pattern = 8'b00000000; 
+    { 8'h0f, 4'hf }: pattern = 8'b00000000; 
 
-  input SCK,  // arduino 13
-  input MOSI, // arduino 11
-  inout MISO, // arduino 12
-  input SSEL, // arduino 9
-  inout AUX,  // arduino 2
-  output AUDIOL,
-  output AUDIOR,
+    { 8'h10, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h10, 4'h1 }: pattern = 8'b10000000; 
+    { 8'h10, 4'h2 }: pattern = 8'b11000000; 
+    { 8'h10, 4'h3 }: pattern = 8'b11100000; 
+    { 8'h10, 4'h4 }: pattern = 8'b11110000; 
+    { 8'h10, 4'h5 }: pattern = 8'b11111000; 
+    { 8'h10, 4'h6 }: pattern = 8'b11111110; 
+    { 8'h10, 4'h7 }: pattern = 8'b11111000; 
+    { 8'h10, 4'h8 }: pattern = 8'b11110000; 
+    { 8'h10, 4'h9 }: pattern = 8'b11100000; 
+    { 8'h10, 4'ha }: pattern = 8'b11000000; 
+    { 8'h10, 4'hb }: pattern = 8'b10000000; 
+    { 8'h10, 4'hc }: pattern = 8'b00000000; 
+    { 8'h10, 4'hd }: pattern = 8'b00000000; 
+    { 8'h10, 4'he }: pattern = 8'b00000000; 
+    { 8'h10, 4'hf }: pattern = 8'b00000000; 
 
-  output flashMOSI,
-  input  flashMISO,
-  output flashSCK,
-  output flashSSEL
+    { 8'h11, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h11, 4'h1 }: pattern = 8'b00000010; 
+    { 8'h11, 4'h2 }: pattern = 8'b00000110; 
+    { 8'h11, 4'h3 }: pattern = 8'b00001110; 
+    { 8'h11, 4'h4 }: pattern = 8'b00011110; 
+    { 8'h11, 4'h5 }: pattern = 8'b00111110; 
+    { 8'h11, 4'h6 }: pattern = 8'b11111110; 
+    { 8'h11, 4'h7 }: pattern = 8'b00111110; 
+    { 8'h11, 4'h8 }: pattern = 8'b00011110; 
+    { 8'h11, 4'h9 }: pattern = 8'b00001110; 
+    { 8'h11, 4'ha }: pattern = 8'b00000110; 
+    { 8'h11, 4'hb }: pattern = 8'b00000010; 
+    { 8'h11, 4'hc }: pattern = 8'b00000000; 
+    { 8'h11, 4'hd }: pattern = 8'b00000000; 
+    { 8'h11, 4'he }: pattern = 8'b00000000; 
+    { 8'h11, 4'hf }: pattern = 8'b00000000; 
 
-  );
+    { 8'h12, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h12, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h12, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h12, 4'h3 }: pattern = 8'b00111100; 
+    { 8'h12, 4'h4 }: pattern = 8'b01111110; 
+    { 8'h12, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h12, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h12, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h12, 4'h8 }: pattern = 8'b01111110; 
+    { 8'h12, 4'h9 }: pattern = 8'b00111100; 
+    { 8'h12, 4'ha }: pattern = 8'b00011000; 
+    { 8'h12, 4'hb }: pattern = 8'b00000000; 
+    { 8'h12, 4'hc }: pattern = 8'b00000000; 
+    { 8'h12, 4'hd }: pattern = 8'b00000000; 
+    { 8'h12, 4'he }: pattern = 8'b00000000; 
+    { 8'h12, 4'hf }: pattern = 8'b00000000; 
 
-  wire mem_clk;
-  wire [7:0] host_mem_data_wr;
-  reg [7:0] mem_data_rd;
-  reg [7:0] latched_mem_data_rd;
-  wire [14:0] mem_w_addr;   // Combined write address
-  wire [14:0] mem_r_addr;   // Combined read address
-  wire [14:0] host_mem_w_addr;
-  wire [14:0] host_mem_r_addr;
-  wire host_mem_wr;
-  wire mem_rd;
+    { 8'h13, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h13, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h13, 4'h2 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h13, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h13, 4'ha }: pattern = 8'b01100110; 
+    { 8'h13, 4'hb }: pattern = 8'b01100110; 
+    { 8'h13, 4'hc }: pattern = 8'b00000000; 
+    { 8'h13, 4'hd }: pattern = 8'b00000000; 
+    { 8'h13, 4'he }: pattern = 8'b00000000; 
+    { 8'h13, 4'hf }: pattern = 8'b00000000; 
 
-  wire clk;
-  ck_div #(.DIV_BY(5), .MULT_BY(13)) ck_gen(.ck_in(clka), .ck_out(clk));
+    { 8'h14, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h14, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h14, 4'h2 }: pattern = 8'b01111111; 
+    { 8'h14, 4'h3 }: pattern = 8'b11011011; 
+    { 8'h14, 4'h4 }: pattern = 8'b11011011; 
+    { 8'h14, 4'h5 }: pattern = 8'b11011011; 
+    { 8'h14, 4'h6 }: pattern = 8'b01111011; 
+    { 8'h14, 4'h7 }: pattern = 8'b00011011; 
+    { 8'h14, 4'h8 }: pattern = 8'b00011011; 
+    { 8'h14, 4'h9 }: pattern = 8'b00011011; 
+    { 8'h14, 4'ha }: pattern = 8'b00011011; 
+    { 8'h14, 4'hb }: pattern = 8'b00011011; 
+    { 8'h14, 4'hc }: pattern = 8'b00000000; 
+    { 8'h14, 4'hd }: pattern = 8'b00000000; 
+    { 8'h14, 4'he }: pattern = 8'b00000000; 
+    { 8'h14, 4'hf }: pattern = 8'b00000000; 
 
-  assign AUDIOL = 0;
-  assign AUDIOR = 0;
+    { 8'h15, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h15, 4'h1 }: pattern = 8'b01111100; 
+    { 8'h15, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h15, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h15, 4'h4 }: pattern = 8'b00111000; 
+    { 8'h15, 4'h5 }: pattern = 8'b01101100; 
+    { 8'h15, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h15, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h15, 4'h8 }: pattern = 8'b01101100; 
+    { 8'h15, 4'h9 }: pattern = 8'b00111000; 
+    { 8'h15, 4'ha }: pattern = 8'b00001100; 
+    { 8'h15, 4'hb }: pattern = 8'b11000110; 
+    { 8'h15, 4'hc }: pattern = 8'b01111100; 
+    { 8'h15, 4'hd }: pattern = 8'b00000000; 
+    { 8'h15, 4'he }: pattern = 8'b00000000; 
+    { 8'h15, 4'hf }: pattern = 8'b00000000; 
 
-  assign flashMOSI = 0;
-  assign flashSCK = 0;
-  assign flashSSEL = 0;
+    { 8'h16, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h16, 4'h8 }: pattern = 8'b11111110; 
+    { 8'h16, 4'h9 }: pattern = 8'b11111110; 
+    { 8'h16, 4'ha }: pattern = 8'b11111110; 
+    { 8'h16, 4'hb }: pattern = 8'b11111110; 
+    { 8'h16, 4'hc }: pattern = 8'b00000000; 
+    { 8'h16, 4'hd }: pattern = 8'b00000000; 
+    { 8'h16, 4'he }: pattern = 8'b00000000; 
+    { 8'h16, 4'hf }: pattern = 8'b00000000; 
 
-  // http://tinyvga.com/vga-timing/1024x768@60Hz
+    { 8'h17, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h17, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h17, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h17, 4'h3 }: pattern = 8'b00111100; 
+    { 8'h17, 4'h4 }: pattern = 8'b01111110; 
+    { 8'h17, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h17, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h17, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h17, 4'h8 }: pattern = 8'b01111110; 
+    { 8'h17, 4'h9 }: pattern = 8'b00111100; 
+    { 8'h17, 4'ha }: pattern = 8'b00011000; 
+    { 8'h17, 4'hb }: pattern = 8'b01111110; 
+    { 8'h17, 4'hc }: pattern = 8'b00000000; 
+    { 8'h17, 4'hd }: pattern = 8'b00000000; 
+    { 8'h17, 4'he }: pattern = 8'b00000000; 
+    { 8'h17, 4'hf }: pattern = 8'b00000000; 
 
-  // hcounter:
-  //  0   -1023   visible area
-  //  1024-1047   front porch
-  //  1048-1183   sync pulse
-  //  1184-1343   back porch
+    { 8'h18, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h18, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h18, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h18, 4'h3 }: pattern = 8'b00111100; 
+    { 8'h18, 4'h4 }: pattern = 8'b01111110; 
+    { 8'h18, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h18, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h18, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h18, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h18, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h18, 4'ha }: pattern = 8'b00011000; 
+    { 8'h18, 4'hb }: pattern = 8'b00011000; 
+    { 8'h18, 4'hc }: pattern = 8'b00000000; 
+    { 8'h18, 4'hd }: pattern = 8'b00000000; 
+    { 8'h18, 4'he }: pattern = 8'b00000000; 
+    { 8'h18, 4'hf }: pattern = 8'b00000000; 
 
-  reg [10:0] hcounter;
-  wire [10:0] hcounterN = (hcounter == 11'd1343) ? 11'd0 : (hcounter + 11'd1);
+    { 8'h19, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h19, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h19, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h19, 4'h9 }: pattern = 8'b01111110; 
+    { 8'h19, 4'ha }: pattern = 8'b00111100; 
+    { 8'h19, 4'hb }: pattern = 8'b00011000; 
+    { 8'h19, 4'hc }: pattern = 8'b00000000; 
+    { 8'h19, 4'hd }: pattern = 8'b00000000; 
+    { 8'h19, 4'he }: pattern = 8'b00000000; 
+    { 8'h19, 4'hf }: pattern = 8'b00000000; 
 
-  // vcounter:
-  //  0  -767     visble area
-  //  768-770     front porch
-  //  771-776     sync pulse
-  //  777-805     back porch
+    { 8'h1a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h1a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h1a, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h1a, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h1a, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h1a, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h1a, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h1a, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h1a, 4'h8 }: pattern = 8'b00001100; 
+    { 8'h1a, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h1a, 4'ha }: pattern = 8'b00000000; 
+    { 8'h1a, 4'hb }: pattern = 8'b00000000; 
+    { 8'h1a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h1a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h1a, 4'he }: pattern = 8'b00000000; 
+    { 8'h1a, 4'hf }: pattern = 8'b00000000; 
 
-  reg [9:0] vcounter;
-  wire [9:0] vcounterN = (hcounterN != 11'd0) ? vcounter : ((vcounter == 10'd805) ? 10'd0 : (vcounter + 10'd1));
+    { 8'h1b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h1b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h1b, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h1b, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h1b, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h1b, 4'h5 }: pattern = 8'b00110000; 
+    { 8'h1b, 4'h6 }: pattern = 8'b01100000; 
+    { 8'h1b, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h1b, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h1b, 4'h9 }: pattern = 8'b00110000; 
+    { 8'h1b, 4'ha }: pattern = 8'b00000000; 
+    { 8'h1b, 4'hb }: pattern = 8'b00000000; 
+    { 8'h1b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h1b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h1b, 4'he }: pattern = 8'b00000000; 
+    { 8'h1b, 4'hf }: pattern = 8'b00000000; 
 
-  always @(posedge clk) begin
-    hcounter <= hcounterN;
-    vcounter <= vcounterN;
-    vga_hsync_n <= !((1048 <= hcounter) & (hcounter < 1184));
-    vga_vsync_n <= !((771 <= vcounter) & (vcounter < 777));
-  end
+    { 8'h1c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h1c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h1c, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h1c, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h1c, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h1c, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h1c, 4'h6 }: pattern = 8'b11000000; 
+    { 8'h1c, 4'h7 }: pattern = 8'b11000000; 
+    { 8'h1c, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h1c, 4'h9 }: pattern = 8'b11111110; 
+    { 8'h1c, 4'ha }: pattern = 8'b00000000; 
+    { 8'h1c, 4'hb }: pattern = 8'b00000000; 
+    { 8'h1c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h1c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h1c, 4'he }: pattern = 8'b00000000; 
+    { 8'h1c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h1d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h1d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h1d, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h1d, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h1d, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h1d, 4'h5 }: pattern = 8'b00101000; 
+    { 8'h1d, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h1d, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h1d, 4'h8 }: pattern = 8'b01101100; 
+    { 8'h1d, 4'h9 }: pattern = 8'b00101000; 
+    { 8'h1d, 4'ha }: pattern = 8'b00000000; 
+    { 8'h1d, 4'hb }: pattern = 8'b00000000; 
+    { 8'h1d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h1d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h1d, 4'he }: pattern = 8'b00000000; 
+    { 8'h1d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h1e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h1e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h1e, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h1e, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h1e, 4'h4 }: pattern = 8'b00010000; 
+    { 8'h1e, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h1e, 4'h6 }: pattern = 8'b00111000; 
+    { 8'h1e, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h1e, 4'h8 }: pattern = 8'b01111100; 
+    { 8'h1e, 4'h9 }: pattern = 8'b11111110; 
+    { 8'h1e, 4'ha }: pattern = 8'b11111110; 
+    { 8'h1e, 4'hb }: pattern = 8'b00000000; 
+    { 8'h1e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h1e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h1e, 4'he }: pattern = 8'b00000000; 
+    { 8'h1e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h1f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h1f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h1f, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h1f, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h1f, 4'h4 }: pattern = 8'b11111110; 
+    { 8'h1f, 4'h5 }: pattern = 8'b11111110; 
+    { 8'h1f, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h1f, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h1f, 4'h8 }: pattern = 8'b00111000; 
+    { 8'h1f, 4'h9 }: pattern = 8'b00111000; 
+    { 8'h1f, 4'ha }: pattern = 8'b00010000; 
+    { 8'h1f, 4'hb }: pattern = 8'b00000000; 
+    { 8'h1f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h1f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h1f, 4'he }: pattern = 8'b00000000; 
+    { 8'h1f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h20, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h20, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h20, 4'ha }: pattern = 8'b00000000; 
+    { 8'h20, 4'hb }: pattern = 8'b00000000; 
+    { 8'h20, 4'hc }: pattern = 8'b00000000; 
+    { 8'h20, 4'hd }: pattern = 8'b00000000; 
+    { 8'h20, 4'he }: pattern = 8'b00000000; 
+    { 8'h20, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h21, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h21, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h21, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h21, 4'h3 }: pattern = 8'b00111100; 
+    { 8'h21, 4'h4 }: pattern = 8'b00111100; 
+    { 8'h21, 4'h5 }: pattern = 8'b00111100; 
+    { 8'h21, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h21, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h21, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h21, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h21, 4'ha }: pattern = 8'b00011000; 
+    { 8'h21, 4'hb }: pattern = 8'b00011000; 
+    { 8'h21, 4'hc }: pattern = 8'b00000000; 
+    { 8'h21, 4'hd }: pattern = 8'b00000000; 
+    { 8'h21, 4'he }: pattern = 8'b00000000; 
+    { 8'h21, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h22, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h22, 4'h1 }: pattern = 8'b01100110; 
+    { 8'h22, 4'h2 }: pattern = 8'b01100110; 
+    { 8'h22, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h22, 4'h4 }: pattern = 8'b00100100; 
+    { 8'h22, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h22, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h22, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h22, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h22, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h22, 4'ha }: pattern = 8'b00000000; 
+    { 8'h22, 4'hb }: pattern = 8'b00000000; 
+    { 8'h22, 4'hc }: pattern = 8'b00000000; 
+    { 8'h22, 4'hd }: pattern = 8'b00000000; 
+    { 8'h22, 4'he }: pattern = 8'b00000000; 
+    { 8'h22, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h23, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h23, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h23, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h23, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h23, 4'h4 }: pattern = 8'b01101100; 
+    { 8'h23, 4'h5 }: pattern = 8'b11111110; 
+    { 8'h23, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h23, 4'h7 }: pattern = 8'b01101100; 
+    { 8'h23, 4'h8 }: pattern = 8'b01101100; 
+    { 8'h23, 4'h9 }: pattern = 8'b11111110; 
+    { 8'h23, 4'ha }: pattern = 8'b01101100; 
+    { 8'h23, 4'hb }: pattern = 8'b01101100; 
+    { 8'h23, 4'hc }: pattern = 8'b00000000; 
+    { 8'h23, 4'hd }: pattern = 8'b00000000; 
+    { 8'h23, 4'he }: pattern = 8'b00000000; 
+    { 8'h23, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h24, 4'h0 }: pattern = 8'b00011000; 
+    { 8'h24, 4'h1 }: pattern = 8'b00011000; 
+    { 8'h24, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h24, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h24, 4'h4 }: pattern = 8'b11000010; 
+    { 8'h24, 4'h5 }: pattern = 8'b11000000; 
+    { 8'h24, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h24, 4'h7 }: pattern = 8'b00000110; 
+    { 8'h24, 4'h8 }: pattern = 8'b00000110; 
+    { 8'h24, 4'h9 }: pattern = 8'b10000110; 
+    { 8'h24, 4'ha }: pattern = 8'b11000110; 
+    { 8'h24, 4'hb }: pattern = 8'b01111100; 
+    { 8'h24, 4'hc }: pattern = 8'b00011000; 
+    { 8'h24, 4'hd }: pattern = 8'b00011000; 
+    { 8'h24, 4'he }: pattern = 8'b00000000; 
+    { 8'h24, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h25, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h25, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h25, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h25, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h25, 4'h4 }: pattern = 8'b11000010; 
+    { 8'h25, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h25, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h25, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h25, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h25, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h25, 4'ha }: pattern = 8'b11000110; 
+    { 8'h25, 4'hb }: pattern = 8'b10000110; 
+    { 8'h25, 4'hc }: pattern = 8'b00000000; 
+    { 8'h25, 4'hd }: pattern = 8'b00000000; 
+    { 8'h25, 4'he }: pattern = 8'b00000000; 
+    { 8'h25, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h26, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h26, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h26, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h26, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h26, 4'h4 }: pattern = 8'b01101100; 
+    { 8'h26, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h26, 4'h6 }: pattern = 8'b01110110; 
+    { 8'h26, 4'h7 }: pattern = 8'b11011100; 
+    { 8'h26, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h26, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h26, 4'ha }: pattern = 8'b11001100; 
+    { 8'h26, 4'hb }: pattern = 8'b01110110; 
+    { 8'h26, 4'hc }: pattern = 8'b00000000; 
+    { 8'h26, 4'hd }: pattern = 8'b00000000; 
+    { 8'h26, 4'he }: pattern = 8'b00000000; 
+    { 8'h26, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h27, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h27, 4'h1 }: pattern = 8'b00110000; 
+    { 8'h27, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h27, 4'h3 }: pattern = 8'b00110000; 
+    { 8'h27, 4'h4 }: pattern = 8'b01100000; 
+    { 8'h27, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h27, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h27, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h27, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h27, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h27, 4'ha }: pattern = 8'b00000000; 
+    { 8'h27, 4'hb }: pattern = 8'b00000000; 
+    { 8'h27, 4'hc }: pattern = 8'b00000000; 
+    { 8'h27, 4'hd }: pattern = 8'b00000000; 
+    { 8'h27, 4'he }: pattern = 8'b00000000; 
+    { 8'h27, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h28, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h28, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h28, 4'h2 }: pattern = 8'b00001100; 
+    { 8'h28, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h28, 4'h4 }: pattern = 8'b00110000; 
+    { 8'h28, 4'h5 }: pattern = 8'b00110000; 
+    { 8'h28, 4'h6 }: pattern = 8'b00110000; 
+    { 8'h28, 4'h7 }: pattern = 8'b00110000; 
+    { 8'h28, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h28, 4'h9 }: pattern = 8'b00110000; 
+    { 8'h28, 4'ha }: pattern = 8'b00011000; 
+    { 8'h28, 4'hb }: pattern = 8'b00001100; 
+    { 8'h28, 4'hc }: pattern = 8'b00000000; 
+    { 8'h28, 4'hd }: pattern = 8'b00000000; 
+    { 8'h28, 4'he }: pattern = 8'b00000000; 
+    { 8'h28, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h29, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h29, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h29, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h29, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h29, 4'h4 }: pattern = 8'b00001100; 
+    { 8'h29, 4'h5 }: pattern = 8'b00001100; 
+    { 8'h29, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h29, 4'h7 }: pattern = 8'b00001100; 
+    { 8'h29, 4'h8 }: pattern = 8'b00001100; 
+    { 8'h29, 4'h9 }: pattern = 8'b00001100; 
+    { 8'h29, 4'ha }: pattern = 8'b00011000; 
+    { 8'h29, 4'hb }: pattern = 8'b00110000; 
+    { 8'h29, 4'hc }: pattern = 8'b00000000; 
+    { 8'h29, 4'hd }: pattern = 8'b00000000; 
+    { 8'h29, 4'he }: pattern = 8'b00000000; 
+    { 8'h29, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h2a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h2a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h2a, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h2a, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h2a, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h2a, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h2a, 4'h6 }: pattern = 8'b00111100; 
+    { 8'h2a, 4'h7 }: pattern = 8'b11111111; 
+    { 8'h2a, 4'h8 }: pattern = 8'b00111100; 
+    { 8'h2a, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h2a, 4'ha }: pattern = 8'b00000000; 
+    { 8'h2a, 4'hb }: pattern = 8'b00000000; 
+    { 8'h2a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h2a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h2a, 4'he }: pattern = 8'b00000000; 
+    { 8'h2a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h2b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h2b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h2b, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h2b, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h2b, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h2b, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h2b, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h2b, 4'h7 }: pattern = 8'b01111110; 
+    { 8'h2b, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h2b, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h2b, 4'ha }: pattern = 8'b00000000; 
+    { 8'h2b, 4'hb }: pattern = 8'b00000000; 
+    { 8'h2b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h2b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h2b, 4'he }: pattern = 8'b00000000; 
+    { 8'h2b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h2c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h2c, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h2c, 4'ha }: pattern = 8'b00011000; 
+    { 8'h2c, 4'hb }: pattern = 8'b00011000; 
+    { 8'h2c, 4'hc }: pattern = 8'b00110000; 
+    { 8'h2c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h2c, 4'he }: pattern = 8'b00000000; 
+    { 8'h2c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h2d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h2d, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h2d, 4'ha }: pattern = 8'b00000000; 
+    { 8'h2d, 4'hb }: pattern = 8'b00000000; 
+    { 8'h2d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h2d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h2d, 4'he }: pattern = 8'b00000000; 
+    { 8'h2d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h2e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h2e, 4'ha }: pattern = 8'b00011000; 
+    { 8'h2e, 4'hb }: pattern = 8'b00011000; 
+    { 8'h2e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h2e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h2e, 4'he }: pattern = 8'b00000000; 
+    { 8'h2e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h2f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h2f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h2f, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h2f, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h2f, 4'h4 }: pattern = 8'b00000010; 
+    { 8'h2f, 4'h5 }: pattern = 8'b00000110; 
+    { 8'h2f, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h2f, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h2f, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h2f, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h2f, 4'ha }: pattern = 8'b11000000; 
+    { 8'h2f, 4'hb }: pattern = 8'b10000000; 
+    { 8'h2f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h2f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h2f, 4'he }: pattern = 8'b00000000; 
+    { 8'h2f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h30, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h30, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h30, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h30, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h30, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h30, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h30, 4'h6 }: pattern = 8'b11010110; 
+    { 8'h30, 4'h7 }: pattern = 8'b11010110; 
+    { 8'h30, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h30, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h30, 4'ha }: pattern = 8'b01101100; 
+    { 8'h30, 4'hb }: pattern = 8'b00111000; 
+    { 8'h30, 4'hc }: pattern = 8'b00000000; 
+    { 8'h30, 4'hd }: pattern = 8'b00000000; 
+    { 8'h30, 4'he }: pattern = 8'b00000000; 
+    { 8'h30, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h31, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h31, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h31, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h31, 4'h3 }: pattern = 8'b00111000; 
+    { 8'h31, 4'h4 }: pattern = 8'b01111000; 
+    { 8'h31, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h31, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h31, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h31, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h31, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h31, 4'ha }: pattern = 8'b00011000; 
+    { 8'h31, 4'hb }: pattern = 8'b01111110; 
+    { 8'h31, 4'hc }: pattern = 8'b00000000; 
+    { 8'h31, 4'hd }: pattern = 8'b00000000; 
+    { 8'h31, 4'he }: pattern = 8'b00000000; 
+    { 8'h31, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h32, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h32, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h32, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h32, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h32, 4'h4 }: pattern = 8'b00000110; 
+    { 8'h32, 4'h5 }: pattern = 8'b00001100; 
+    { 8'h32, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h32, 4'h7 }: pattern = 8'b00110000; 
+    { 8'h32, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h32, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h32, 4'ha }: pattern = 8'b11000110; 
+    { 8'h32, 4'hb }: pattern = 8'b11111110; 
+    { 8'h32, 4'hc }: pattern = 8'b00000000; 
+    { 8'h32, 4'hd }: pattern = 8'b00000000; 
+    { 8'h32, 4'he }: pattern = 8'b00000000; 
+    { 8'h32, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h33, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h33, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h33, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h33, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h33, 4'h4 }: pattern = 8'b00000110; 
+    { 8'h33, 4'h5 }: pattern = 8'b00000110; 
+    { 8'h33, 4'h6 }: pattern = 8'b00111100; 
+    { 8'h33, 4'h7 }: pattern = 8'b00000110; 
+    { 8'h33, 4'h8 }: pattern = 8'b00000110; 
+    { 8'h33, 4'h9 }: pattern = 8'b00000110; 
+    { 8'h33, 4'ha }: pattern = 8'b11000110; 
+    { 8'h33, 4'hb }: pattern = 8'b01111100; 
+    { 8'h33, 4'hc }: pattern = 8'b00000000; 
+    { 8'h33, 4'hd }: pattern = 8'b00000000; 
+    { 8'h33, 4'he }: pattern = 8'b00000000; 
+    { 8'h33, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h34, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h34, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h34, 4'h2 }: pattern = 8'b00001100; 
+    { 8'h34, 4'h3 }: pattern = 8'b00011100; 
+    { 8'h34, 4'h4 }: pattern = 8'b00111100; 
+    { 8'h34, 4'h5 }: pattern = 8'b01101100; 
+    { 8'h34, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h34, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h34, 4'h8 }: pattern = 8'b00001100; 
+    { 8'h34, 4'h9 }: pattern = 8'b00001100; 
+    { 8'h34, 4'ha }: pattern = 8'b00001100; 
+    { 8'h34, 4'hb }: pattern = 8'b00011110; 
+    { 8'h34, 4'hc }: pattern = 8'b00000000; 
+    { 8'h34, 4'hd }: pattern = 8'b00000000; 
+    { 8'h34, 4'he }: pattern = 8'b00000000; 
+    { 8'h34, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h35, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h35, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h35, 4'h2 }: pattern = 8'b11111110; 
+    { 8'h35, 4'h3 }: pattern = 8'b11000000; 
+    { 8'h35, 4'h4 }: pattern = 8'b11000000; 
+    { 8'h35, 4'h5 }: pattern = 8'b11000000; 
+    { 8'h35, 4'h6 }: pattern = 8'b11111100; 
+    { 8'h35, 4'h7 }: pattern = 8'b00000110; 
+    { 8'h35, 4'h8 }: pattern = 8'b00000110; 
+    { 8'h35, 4'h9 }: pattern = 8'b00000110; 
+    { 8'h35, 4'ha }: pattern = 8'b11000110; 
+    { 8'h35, 4'hb }: pattern = 8'b01111100; 
+    { 8'h35, 4'hc }: pattern = 8'b00000000; 
+    { 8'h35, 4'hd }: pattern = 8'b00000000; 
+    { 8'h35, 4'he }: pattern = 8'b00000000; 
+    { 8'h35, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h36, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h36, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h36, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h36, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h36, 4'h4 }: pattern = 8'b11000000; 
+    { 8'h36, 4'h5 }: pattern = 8'b11000000; 
+    { 8'h36, 4'h6 }: pattern = 8'b11111100; 
+    { 8'h36, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h36, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h36, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h36, 4'ha }: pattern = 8'b11000110; 
+    { 8'h36, 4'hb }: pattern = 8'b01111100; 
+    { 8'h36, 4'hc }: pattern = 8'b00000000; 
+    { 8'h36, 4'hd }: pattern = 8'b00000000; 
+    { 8'h36, 4'he }: pattern = 8'b00000000; 
+    { 8'h36, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h37, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h37, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h37, 4'h2 }: pattern = 8'b11111110; 
+    { 8'h37, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h37, 4'h4 }: pattern = 8'b00000110; 
+    { 8'h37, 4'h5 }: pattern = 8'b00000110; 
+    { 8'h37, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h37, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h37, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h37, 4'h9 }: pattern = 8'b00110000; 
+    { 8'h37, 4'ha }: pattern = 8'b00110000; 
+    { 8'h37, 4'hb }: pattern = 8'b00110000; 
+    { 8'h37, 4'hc }: pattern = 8'b00000000; 
+    { 8'h37, 4'hd }: pattern = 8'b00000000; 
+    { 8'h37, 4'he }: pattern = 8'b00000000; 
+    { 8'h37, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h38, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h38, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h38, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h38, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h38, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h38, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h38, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h38, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h38, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h38, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h38, 4'ha }: pattern = 8'b11000110; 
+    { 8'h38, 4'hb }: pattern = 8'b01111100; 
+    { 8'h38, 4'hc }: pattern = 8'b00000000; 
+    { 8'h38, 4'hd }: pattern = 8'b00000000; 
+    { 8'h38, 4'he }: pattern = 8'b00000000; 
+    { 8'h38, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h39, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h39, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h39, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h39, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h39, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h39, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h39, 4'h6 }: pattern = 8'b01111110; 
+    { 8'h39, 4'h7 }: pattern = 8'b00000110; 
+    { 8'h39, 4'h8 }: pattern = 8'b00000110; 
+    { 8'h39, 4'h9 }: pattern = 8'b00000110; 
+    { 8'h39, 4'ha }: pattern = 8'b00001100; 
+    { 8'h39, 4'hb }: pattern = 8'b01111000; 
+    { 8'h39, 4'hc }: pattern = 8'b00000000; 
+    { 8'h39, 4'hd }: pattern = 8'b00000000; 
+    { 8'h39, 4'he }: pattern = 8'b00000000; 
+    { 8'h39, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h3a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h3a, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h3a, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h3a, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h3a, 4'ha }: pattern = 8'b00011000; 
+    { 8'h3a, 4'hb }: pattern = 8'b00000000; 
+    { 8'h3a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h3a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h3a, 4'he }: pattern = 8'b00000000; 
+    { 8'h3a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h3b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h3b, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h3b, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h3b, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h3b, 4'ha }: pattern = 8'b00011000; 
+    { 8'h3b, 4'hb }: pattern = 8'b00110000; 
+    { 8'h3b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h3b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h3b, 4'he }: pattern = 8'b00000000; 
+    { 8'h3b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h3c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h3c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h3c, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h3c, 4'h3 }: pattern = 8'b00000110; 
+    { 8'h3c, 4'h4 }: pattern = 8'b00001100; 
+    { 8'h3c, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h3c, 4'h6 }: pattern = 8'b00110000; 
+    { 8'h3c, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h3c, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h3c, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h3c, 4'ha }: pattern = 8'b00001100; 
+    { 8'h3c, 4'hb }: pattern = 8'b00000110; 
+    { 8'h3c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h3c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h3c, 4'he }: pattern = 8'b00000000; 
+    { 8'h3c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h3d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h5 }: pattern = 8'b01111110; 
+    { 8'h3d, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'h8 }: pattern = 8'b01111110; 
+    { 8'h3d, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h3d, 4'ha }: pattern = 8'b00000000; 
+    { 8'h3d, 4'hb }: pattern = 8'b00000000; 
+    { 8'h3d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h3d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h3d, 4'he }: pattern = 8'b00000000; 
+    { 8'h3d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h3e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h3e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h3e, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h3e, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h3e, 4'h4 }: pattern = 8'b00110000; 
+    { 8'h3e, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h3e, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h3e, 4'h7 }: pattern = 8'b00000110; 
+    { 8'h3e, 4'h8 }: pattern = 8'b00001100; 
+    { 8'h3e, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h3e, 4'ha }: pattern = 8'b00110000; 
+    { 8'h3e, 4'hb }: pattern = 8'b01100000; 
+    { 8'h3e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h3e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h3e, 4'he }: pattern = 8'b00000000; 
+    { 8'h3e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h3f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h3f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h3f, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h3f, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h3f, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h3f, 4'h5 }: pattern = 8'b00001100; 
+    { 8'h3f, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h3f, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h3f, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h3f, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h3f, 4'ha }: pattern = 8'b00011000; 
+    { 8'h3f, 4'hb }: pattern = 8'b00011000; 
+    { 8'h3f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h3f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h3f, 4'he }: pattern = 8'b00000000; 
+    { 8'h3f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h40, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h40, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h40, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h40, 4'h3 }: pattern = 8'b01111100; 
+    { 8'h40, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h40, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h40, 4'h6 }: pattern = 8'b11011110; 
+    { 8'h40, 4'h7 }: pattern = 8'b11011110; 
+    { 8'h40, 4'h8 }: pattern = 8'b11011110; 
+    { 8'h40, 4'h9 }: pattern = 8'b11011100; 
+    { 8'h40, 4'ha }: pattern = 8'b11000000; 
+    { 8'h40, 4'hb }: pattern = 8'b01111100; 
+    { 8'h40, 4'hc }: pattern = 8'b00000000; 
+    { 8'h40, 4'hd }: pattern = 8'b00000000; 
+    { 8'h40, 4'he }: pattern = 8'b00000000; 
+    { 8'h40, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h41, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h41, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h41, 4'h2 }: pattern = 8'b00010000; 
+    { 8'h41, 4'h3 }: pattern = 8'b00111000; 
+    { 8'h41, 4'h4 }: pattern = 8'b01101100; 
+    { 8'h41, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h41, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h41, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h41, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h41, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h41, 4'ha }: pattern = 8'b11000110; 
+    { 8'h41, 4'hb }: pattern = 8'b11000110; 
+    { 8'h41, 4'hc }: pattern = 8'b00000000; 
+    { 8'h41, 4'hd }: pattern = 8'b00000000; 
+    { 8'h41, 4'he }: pattern = 8'b00000000; 
+    { 8'h41, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h42, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h42, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h42, 4'h2 }: pattern = 8'b11111100; 
+    { 8'h42, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h42, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h42, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h42, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h42, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h42, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h42, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h42, 4'ha }: pattern = 8'b01100110; 
+    { 8'h42, 4'hb }: pattern = 8'b11111100; 
+    { 8'h42, 4'hc }: pattern = 8'b00000000; 
+    { 8'h42, 4'hd }: pattern = 8'b00000000; 
+    { 8'h42, 4'he }: pattern = 8'b00000000; 
+    { 8'h42, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h43, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h43, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h43, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h43, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h43, 4'h4 }: pattern = 8'b11000010; 
+    { 8'h43, 4'h5 }: pattern = 8'b11000000; 
+    { 8'h43, 4'h6 }: pattern = 8'b11000000; 
+    { 8'h43, 4'h7 }: pattern = 8'b11000000; 
+    { 8'h43, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h43, 4'h9 }: pattern = 8'b11000010; 
+    { 8'h43, 4'ha }: pattern = 8'b01100110; 
+    { 8'h43, 4'hb }: pattern = 8'b00111100; 
+    { 8'h43, 4'hc }: pattern = 8'b00000000; 
+    { 8'h43, 4'hd }: pattern = 8'b00000000; 
+    { 8'h43, 4'he }: pattern = 8'b00000000; 
+    { 8'h43, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h44, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h44, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h44, 4'h2 }: pattern = 8'b11111000; 
+    { 8'h44, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h44, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h44, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h44, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h44, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h44, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h44, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h44, 4'ha }: pattern = 8'b01101100; 
+    { 8'h44, 4'hb }: pattern = 8'b11111000; 
+    { 8'h44, 4'hc }: pattern = 8'b00000000; 
+    { 8'h44, 4'hd }: pattern = 8'b00000000; 
+    { 8'h44, 4'he }: pattern = 8'b00000000; 
+    { 8'h44, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h45, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h45, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h45, 4'h2 }: pattern = 8'b11111110; 
+    { 8'h45, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h45, 4'h4 }: pattern = 8'b01100010; 
+    { 8'h45, 4'h5 }: pattern = 8'b01101000; 
+    { 8'h45, 4'h6 }: pattern = 8'b01111000; 
+    { 8'h45, 4'h7 }: pattern = 8'b01101000; 
+    { 8'h45, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h45, 4'h9 }: pattern = 8'b01100010; 
+    { 8'h45, 4'ha }: pattern = 8'b01100110; 
+    { 8'h45, 4'hb }: pattern = 8'b11111110; 
+    { 8'h45, 4'hc }: pattern = 8'b00000000; 
+    { 8'h45, 4'hd }: pattern = 8'b00000000; 
+    { 8'h45, 4'he }: pattern = 8'b00000000; 
+    { 8'h45, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h46, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h46, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h46, 4'h2 }: pattern = 8'b11111110; 
+    { 8'h46, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h46, 4'h4 }: pattern = 8'b01100010; 
+    { 8'h46, 4'h5 }: pattern = 8'b01101000; 
+    { 8'h46, 4'h6 }: pattern = 8'b01111000; 
+    { 8'h46, 4'h7 }: pattern = 8'b01101000; 
+    { 8'h46, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h46, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h46, 4'ha }: pattern = 8'b01100000; 
+    { 8'h46, 4'hb }: pattern = 8'b11110000; 
+    { 8'h46, 4'hc }: pattern = 8'b00000000; 
+    { 8'h46, 4'hd }: pattern = 8'b00000000; 
+    { 8'h46, 4'he }: pattern = 8'b00000000; 
+    { 8'h46, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h47, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h47, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h47, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h47, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h47, 4'h4 }: pattern = 8'b11000010; 
+    { 8'h47, 4'h5 }: pattern = 8'b11000000; 
+    { 8'h47, 4'h6 }: pattern = 8'b11000000; 
+    { 8'h47, 4'h7 }: pattern = 8'b11011110; 
+    { 8'h47, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h47, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h47, 4'ha }: pattern = 8'b01100110; 
+    { 8'h47, 4'hb }: pattern = 8'b00111010; 
+    { 8'h47, 4'hc }: pattern = 8'b00000000; 
+    { 8'h47, 4'hd }: pattern = 8'b00000000; 
+    { 8'h47, 4'he }: pattern = 8'b00000000; 
+    { 8'h47, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h48, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h48, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h48, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h48, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h48, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h48, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h48, 4'h6 }: pattern = 8'b11111110; 
+    { 8'h48, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h48, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h48, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h48, 4'ha }: pattern = 8'b11000110; 
+    { 8'h48, 4'hb }: pattern = 8'b11000110; 
+    { 8'h48, 4'hc }: pattern = 8'b00000000; 
+    { 8'h48, 4'hd }: pattern = 8'b00000000; 
+    { 8'h48, 4'he }: pattern = 8'b00000000; 
+    { 8'h48, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h49, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h49, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h49, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h49, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h49, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h49, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h49, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h49, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h49, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h49, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h49, 4'ha }: pattern = 8'b00011000; 
+    { 8'h49, 4'hb }: pattern = 8'b00111100; 
+    { 8'h49, 4'hc }: pattern = 8'b00000000; 
+    { 8'h49, 4'hd }: pattern = 8'b00000000; 
+    { 8'h49, 4'he }: pattern = 8'b00000000; 
+    { 8'h49, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h4a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h4a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h4a, 4'h2 }: pattern = 8'b00011110; 
+    { 8'h4a, 4'h3 }: pattern = 8'b00001100; 
+    { 8'h4a, 4'h4 }: pattern = 8'b00001100; 
+    { 8'h4a, 4'h5 }: pattern = 8'b00001100; 
+    { 8'h4a, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h4a, 4'h7 }: pattern = 8'b00001100; 
+    { 8'h4a, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h4a, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h4a, 4'ha }: pattern = 8'b11001100; 
+    { 8'h4a, 4'hb }: pattern = 8'b01111000; 
+    { 8'h4a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h4a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h4a, 4'he }: pattern = 8'b00000000; 
+    { 8'h4a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h4b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h4b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h4b, 4'h2 }: pattern = 8'b11100110; 
+    { 8'h4b, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h4b, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h4b, 4'h5 }: pattern = 8'b01101100; 
+    { 8'h4b, 4'h6 }: pattern = 8'b01111000; 
+    { 8'h4b, 4'h7 }: pattern = 8'b01111000; 
+    { 8'h4b, 4'h8 }: pattern = 8'b01101100; 
+    { 8'h4b, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h4b, 4'ha }: pattern = 8'b01100110; 
+    { 8'h4b, 4'hb }: pattern = 8'b11100110; 
+    { 8'h4b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h4b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h4b, 4'he }: pattern = 8'b00000000; 
+    { 8'h4b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h4c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h4c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h4c, 4'h2 }: pattern = 8'b11110000; 
+    { 8'h4c, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h4c, 4'h4 }: pattern = 8'b01100000; 
+    { 8'h4c, 4'h5 }: pattern = 8'b01100000; 
+    { 8'h4c, 4'h6 }: pattern = 8'b01100000; 
+    { 8'h4c, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h4c, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h4c, 4'h9 }: pattern = 8'b01100010; 
+    { 8'h4c, 4'ha }: pattern = 8'b01100110; 
+    { 8'h4c, 4'hb }: pattern = 8'b11111110; 
+    { 8'h4c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h4c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h4c, 4'he }: pattern = 8'b00000000; 
+    { 8'h4c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h4d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h4d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h4d, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h4d, 4'h3 }: pattern = 8'b11101110; 
+    { 8'h4d, 4'h4 }: pattern = 8'b11111110; 
+    { 8'h4d, 4'h5 }: pattern = 8'b11111110; 
+    { 8'h4d, 4'h6 }: pattern = 8'b11010110; 
+    { 8'h4d, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h4d, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h4d, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h4d, 4'ha }: pattern = 8'b11000110; 
+    { 8'h4d, 4'hb }: pattern = 8'b11000110; 
+    { 8'h4d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h4d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h4d, 4'he }: pattern = 8'b00000000; 
+    { 8'h4d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h4e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h4e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h4e, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h4e, 4'h3 }: pattern = 8'b11100110; 
+    { 8'h4e, 4'h4 }: pattern = 8'b11110110; 
+    { 8'h4e, 4'h5 }: pattern = 8'b11111110; 
+    { 8'h4e, 4'h6 }: pattern = 8'b11011110; 
+    { 8'h4e, 4'h7 }: pattern = 8'b11001110; 
+    { 8'h4e, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h4e, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h4e, 4'ha }: pattern = 8'b11000110; 
+    { 8'h4e, 4'hb }: pattern = 8'b11000110; 
+    { 8'h4e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h4e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h4e, 4'he }: pattern = 8'b00000000; 
+    { 8'h4e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h4f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h4f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h4f, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h4f, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h4f, 4'ha }: pattern = 8'b11000110; 
+    { 8'h4f, 4'hb }: pattern = 8'b01111100; 
+    { 8'h4f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h4f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h4f, 4'he }: pattern = 8'b00000000; 
+    { 8'h4f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h50, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h50, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h50, 4'h2 }: pattern = 8'b11111100; 
+    { 8'h50, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h50, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h50, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h50, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h50, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h50, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h50, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h50, 4'ha }: pattern = 8'b01100000; 
+    { 8'h50, 4'hb }: pattern = 8'b11110000; 
+    { 8'h50, 4'hc }: pattern = 8'b00000000; 
+    { 8'h50, 4'hd }: pattern = 8'b00000000; 
+    { 8'h50, 4'he }: pattern = 8'b00000000; 
+    { 8'h50, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h51, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h51, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h51, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h51, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h51, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h51, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h51, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h51, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h51, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h51, 4'h9 }: pattern = 8'b11010110; 
+    { 8'h51, 4'ha }: pattern = 8'b11011110; 
+    { 8'h51, 4'hb }: pattern = 8'b01111100; 
+    { 8'h51, 4'hc }: pattern = 8'b00001100; 
+    { 8'h51, 4'hd }: pattern = 8'b00001110; 
+    { 8'h51, 4'he }: pattern = 8'b00000000; 
+    { 8'h51, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h52, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h52, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h52, 4'h2 }: pattern = 8'b11111100; 
+    { 8'h52, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h52, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h52, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h52, 4'h6 }: pattern = 8'b01111100; 
+    { 8'h52, 4'h7 }: pattern = 8'b01101100; 
+    { 8'h52, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h52, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h52, 4'ha }: pattern = 8'b01100110; 
+    { 8'h52, 4'hb }: pattern = 8'b11100110; 
+    { 8'h52, 4'hc }: pattern = 8'b00000000; 
+    { 8'h52, 4'hd }: pattern = 8'b00000000; 
+    { 8'h52, 4'he }: pattern = 8'b00000000; 
+    { 8'h52, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h53, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h53, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h53, 4'h2 }: pattern = 8'b01111100; 
+    { 8'h53, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h53, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h53, 4'h5 }: pattern = 8'b01100000; 
+    { 8'h53, 4'h6 }: pattern = 8'b00111000; 
+    { 8'h53, 4'h7 }: pattern = 8'b00001100; 
+    { 8'h53, 4'h8 }: pattern = 8'b00000110; 
+    { 8'h53, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h53, 4'ha }: pattern = 8'b11000110; 
+    { 8'h53, 4'hb }: pattern = 8'b01111100; 
+    { 8'h53, 4'hc }: pattern = 8'b00000000; 
+    { 8'h53, 4'hd }: pattern = 8'b00000000; 
+    { 8'h53, 4'he }: pattern = 8'b00000000; 
+    { 8'h53, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h54, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h54, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h54, 4'h2 }: pattern = 8'b01111110; 
+    { 8'h54, 4'h3 }: pattern = 8'b01111110; 
+    { 8'h54, 4'h4 }: pattern = 8'b01011010; 
+    { 8'h54, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h54, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h54, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h54, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h54, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h54, 4'ha }: pattern = 8'b00011000; 
+    { 8'h54, 4'hb }: pattern = 8'b00111100; 
+    { 8'h54, 4'hc }: pattern = 8'b00000000; 
+    { 8'h54, 4'hd }: pattern = 8'b00000000; 
+    { 8'h54, 4'he }: pattern = 8'b00000000; 
+    { 8'h54, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h55, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h55, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h55, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h55, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h55, 4'ha }: pattern = 8'b11000110; 
+    { 8'h55, 4'hb }: pattern = 8'b01111100; 
+    { 8'h55, 4'hc }: pattern = 8'b00000000; 
+    { 8'h55, 4'hd }: pattern = 8'b00000000; 
+    { 8'h55, 4'he }: pattern = 8'b00000000; 
+    { 8'h55, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h56, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h56, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h56, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h56, 4'h9 }: pattern = 8'b01101100; 
+    { 8'h56, 4'ha }: pattern = 8'b00111000; 
+    { 8'h56, 4'hb }: pattern = 8'b00010000; 
+    { 8'h56, 4'hc }: pattern = 8'b00000000; 
+    { 8'h56, 4'hd }: pattern = 8'b00000000; 
+    { 8'h56, 4'he }: pattern = 8'b00000000; 
+    { 8'h56, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h57, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h57, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h57, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h57, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h57, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h57, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h57, 4'h6 }: pattern = 8'b11010110; 
+    { 8'h57, 4'h7 }: pattern = 8'b11010110; 
+    { 8'h57, 4'h8 }: pattern = 8'b11010110; 
+    { 8'h57, 4'h9 }: pattern = 8'b11111110; 
+    { 8'h57, 4'ha }: pattern = 8'b11101110; 
+    { 8'h57, 4'hb }: pattern = 8'b01101100; 
+    { 8'h57, 4'hc }: pattern = 8'b00000000; 
+    { 8'h57, 4'hd }: pattern = 8'b00000000; 
+    { 8'h57, 4'he }: pattern = 8'b00000000; 
+    { 8'h57, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h58, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h58, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h58, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h58, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h58, 4'h4 }: pattern = 8'b01101100; 
+    { 8'h58, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h58, 4'h6 }: pattern = 8'b00111000; 
+    { 8'h58, 4'h7 }: pattern = 8'b00111000; 
+    { 8'h58, 4'h8 }: pattern = 8'b01111100; 
+    { 8'h58, 4'h9 }: pattern = 8'b01101100; 
+    { 8'h58, 4'ha }: pattern = 8'b11000110; 
+    { 8'h58, 4'hb }: pattern = 8'b11000110; 
+    { 8'h58, 4'hc }: pattern = 8'b00000000; 
+    { 8'h58, 4'hd }: pattern = 8'b00000000; 
+    { 8'h58, 4'he }: pattern = 8'b00000000; 
+    { 8'h58, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h59, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h59, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h59, 4'h2 }: pattern = 8'b01100110; 
+    { 8'h59, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h59, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h59, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h59, 4'h6 }: pattern = 8'b00111100; 
+    { 8'h59, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h59, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h59, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h59, 4'ha }: pattern = 8'b00011000; 
+    { 8'h59, 4'hb }: pattern = 8'b00111100; 
+    { 8'h59, 4'hc }: pattern = 8'b00000000; 
+    { 8'h59, 4'hd }: pattern = 8'b00000000; 
+    { 8'h59, 4'he }: pattern = 8'b00000000; 
+    { 8'h59, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h5a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h5a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h5a, 4'h2 }: pattern = 8'b11111110; 
+    { 8'h5a, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h5a, 4'h4 }: pattern = 8'b10000110; 
+    { 8'h5a, 4'h5 }: pattern = 8'b00001100; 
+    { 8'h5a, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h5a, 4'h7 }: pattern = 8'b00110000; 
+    { 8'h5a, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h5a, 4'h9 }: pattern = 8'b11000010; 
+    { 8'h5a, 4'ha }: pattern = 8'b11000110; 
+    { 8'h5a, 4'hb }: pattern = 8'b11111110; 
+    { 8'h5a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h5a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h5a, 4'he }: pattern = 8'b00000000; 
+    { 8'h5a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h5b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h5b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h5b, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h5b, 4'h3 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'h4 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'h5 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'h6 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'h7 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'h9 }: pattern = 8'b00110000; 
+    { 8'h5b, 4'ha }: pattern = 8'b00110000; 
+    { 8'h5b, 4'hb }: pattern = 8'b00111100; 
+    { 8'h5b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h5b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h5b, 4'he }: pattern = 8'b00000000; 
+    { 8'h5b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h5c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h5c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h5c, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h5c, 4'h3 }: pattern = 8'b10000000; 
+    { 8'h5c, 4'h4 }: pattern = 8'b11000000; 
+    { 8'h5c, 4'h5 }: pattern = 8'b11100000; 
+    { 8'h5c, 4'h6 }: pattern = 8'b01110000; 
+    { 8'h5c, 4'h7 }: pattern = 8'b00111000; 
+    { 8'h5c, 4'h8 }: pattern = 8'b00011100; 
+    { 8'h5c, 4'h9 }: pattern = 8'b00001110; 
+    { 8'h5c, 4'ha }: pattern = 8'b00000110; 
+    { 8'h5c, 4'hb }: pattern = 8'b00000010; 
+    { 8'h5c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h5c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h5c, 4'he }: pattern = 8'b00000000; 
+    { 8'h5c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h5d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h5d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h5d, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h5d, 4'h3 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'h4 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'h5 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'h7 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'h8 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'h9 }: pattern = 8'b00001100; 
+    { 8'h5d, 4'ha }: pattern = 8'b00001100; 
+    { 8'h5d, 4'hb }: pattern = 8'b00111100; 
+    { 8'h5d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h5d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h5d, 4'he }: pattern = 8'b00000000; 
+    { 8'h5d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h5e, 4'h0 }: pattern = 8'b00010000; 
+    { 8'h5e, 4'h1 }: pattern = 8'b00111000; 
+    { 8'h5e, 4'h2 }: pattern = 8'b01101100; 
+    { 8'h5e, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h5e, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h5e, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h5e, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h5e, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h5e, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h5e, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h5e, 4'ha }: pattern = 8'b00000000; 
+    { 8'h5e, 4'hb }: pattern = 8'b00000000; 
+    { 8'h5e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h5e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h5e, 4'he }: pattern = 8'b00000000; 
+    { 8'h5e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h5f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h5f, 4'ha }: pattern = 8'b00000000; 
+    { 8'h5f, 4'hb }: pattern = 8'b00000000; 
+    { 8'h5f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h5f, 4'hd }: pattern = 8'b11111111; 
+    { 8'h5f, 4'he }: pattern = 8'b00000000; 
+    { 8'h5f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h60, 4'h0 }: pattern = 8'b00110000; 
+    { 8'h60, 4'h1 }: pattern = 8'b00110000; 
+    { 8'h60, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h60, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h60, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h60, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h60, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h60, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h60, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h60, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h60, 4'ha }: pattern = 8'b00000000; 
+    { 8'h60, 4'hb }: pattern = 8'b00000000; 
+    { 8'h60, 4'hc }: pattern = 8'b00000000; 
+    { 8'h60, 4'hd }: pattern = 8'b00000000; 
+    { 8'h60, 4'he }: pattern = 8'b00000000; 
+    { 8'h60, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h61, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h61, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h61, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h61, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h61, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h61, 4'h5 }: pattern = 8'b01111000; 
+    { 8'h61, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h61, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h61, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h61, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h61, 4'ha }: pattern = 8'b11001100; 
+    { 8'h61, 4'hb }: pattern = 8'b01110110; 
+    { 8'h61, 4'hc }: pattern = 8'b00000000; 
+    { 8'h61, 4'hd }: pattern = 8'b00000000; 
+    { 8'h61, 4'he }: pattern = 8'b00000000; 
+    { 8'h61, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h62, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h62, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h62, 4'h2 }: pattern = 8'b11100000; 
+    { 8'h62, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h62, 4'h4 }: pattern = 8'b01100000; 
+    { 8'h62, 4'h5 }: pattern = 8'b01111000; 
+    { 8'h62, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h62, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h62, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h62, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h62, 4'ha }: pattern = 8'b01100110; 
+    { 8'h62, 4'hb }: pattern = 8'b01111100; 
+    { 8'h62, 4'hc }: pattern = 8'b00000000; 
+    { 8'h62, 4'hd }: pattern = 8'b00000000; 
+    { 8'h62, 4'he }: pattern = 8'b00000000; 
+    { 8'h62, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h63, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h63, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h63, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h63, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h63, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h63, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h63, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h63, 4'h7 }: pattern = 8'b11000000; 
+    { 8'h63, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h63, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h63, 4'ha }: pattern = 8'b11000110; 
+    { 8'h63, 4'hb }: pattern = 8'b01111100; 
+    { 8'h63, 4'hc }: pattern = 8'b00000000; 
+    { 8'h63, 4'hd }: pattern = 8'b00000000; 
+    { 8'h63, 4'he }: pattern = 8'b00000000; 
+    { 8'h63, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h64, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h64, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h64, 4'h2 }: pattern = 8'b00011100; 
+    { 8'h64, 4'h3 }: pattern = 8'b00001100; 
+    { 8'h64, 4'h4 }: pattern = 8'b00001100; 
+    { 8'h64, 4'h5 }: pattern = 8'b00111100; 
+    { 8'h64, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h64, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h64, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h64, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h64, 4'ha }: pattern = 8'b11001100; 
+    { 8'h64, 4'hb }: pattern = 8'b01110110; 
+    { 8'h64, 4'hc }: pattern = 8'b00000000; 
+    { 8'h64, 4'hd }: pattern = 8'b00000000; 
+    { 8'h64, 4'he }: pattern = 8'b00000000; 
+    { 8'h64, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h65, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h65, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h65, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h65, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h65, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h65, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h65, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h65, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h65, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h65, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h65, 4'ha }: pattern = 8'b11000110; 
+    { 8'h65, 4'hb }: pattern = 8'b01111100; 
+    { 8'h65, 4'hc }: pattern = 8'b00000000; 
+    { 8'h65, 4'hd }: pattern = 8'b00000000; 
+    { 8'h65, 4'he }: pattern = 8'b00000000; 
+    { 8'h65, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h66, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h66, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h66, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h66, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h66, 4'h4 }: pattern = 8'b01100100; 
+    { 8'h66, 4'h5 }: pattern = 8'b01100000; 
+    { 8'h66, 4'h6 }: pattern = 8'b11110000; 
+    { 8'h66, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h66, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h66, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h66, 4'ha }: pattern = 8'b01100000; 
+    { 8'h66, 4'hb }: pattern = 8'b11110000; 
+    { 8'h66, 4'hc }: pattern = 8'b00000000; 
+    { 8'h66, 4'hd }: pattern = 8'b00000000; 
+    { 8'h66, 4'he }: pattern = 8'b00000000; 
+    { 8'h66, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h67, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h67, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h67, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h67, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h67, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h67, 4'h5 }: pattern = 8'b01110110; 
+    { 8'h67, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h67, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h67, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h67, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h67, 4'ha }: pattern = 8'b11001100; 
+    { 8'h67, 4'hb }: pattern = 8'b01111100; 
+    { 8'h67, 4'hc }: pattern = 8'b00001100; 
+    { 8'h67, 4'hd }: pattern = 8'b11001100; 
+    { 8'h67, 4'he }: pattern = 8'b01111000; 
+    { 8'h67, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h68, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h68, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h68, 4'h2 }: pattern = 8'b11100000; 
+    { 8'h68, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h68, 4'h4 }: pattern = 8'b01100000; 
+    { 8'h68, 4'h5 }: pattern = 8'b01101100; 
+    { 8'h68, 4'h6 }: pattern = 8'b01110110; 
+    { 8'h68, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h68, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h68, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h68, 4'ha }: pattern = 8'b01100110; 
+    { 8'h68, 4'hb }: pattern = 8'b11100110; 
+    { 8'h68, 4'hc }: pattern = 8'b00000000; 
+    { 8'h68, 4'hd }: pattern = 8'b00000000; 
+    { 8'h68, 4'he }: pattern = 8'b00000000; 
+    { 8'h68, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h69, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h69, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h69, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h69, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h69, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h69, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h69, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h69, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h69, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h69, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h69, 4'ha }: pattern = 8'b00011000; 
+    { 8'h69, 4'hb }: pattern = 8'b00111100; 
+    { 8'h69, 4'hc }: pattern = 8'b00000000; 
+    { 8'h69, 4'hd }: pattern = 8'b00000000; 
+    { 8'h69, 4'he }: pattern = 8'b00000000; 
+    { 8'h69, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h6a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h6a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h6a, 4'h2 }: pattern = 8'b00000110; 
+    { 8'h6a, 4'h3 }: pattern = 8'b00000110; 
+    { 8'h6a, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h6a, 4'h5 }: pattern = 8'b00001110; 
+    { 8'h6a, 4'h6 }: pattern = 8'b00000110; 
+    { 8'h6a, 4'h7 }: pattern = 8'b00000110; 
+    { 8'h6a, 4'h8 }: pattern = 8'b00000110; 
+    { 8'h6a, 4'h9 }: pattern = 8'b00000110; 
+    { 8'h6a, 4'ha }: pattern = 8'b00000110; 
+    { 8'h6a, 4'hb }: pattern = 8'b00000110; 
+    { 8'h6a, 4'hc }: pattern = 8'b01100110; 
+    { 8'h6a, 4'hd }: pattern = 8'b01100110; 
+    { 8'h6a, 4'he }: pattern = 8'b00111100; 
+    { 8'h6a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h6b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h6b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h6b, 4'h2 }: pattern = 8'b11100000; 
+    { 8'h6b, 4'h3 }: pattern = 8'b01100000; 
+    { 8'h6b, 4'h4 }: pattern = 8'b01100000; 
+    { 8'h6b, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h6b, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h6b, 4'h7 }: pattern = 8'b01111000; 
+    { 8'h6b, 4'h8 }: pattern = 8'b01111000; 
+    { 8'h6b, 4'h9 }: pattern = 8'b01101100; 
+    { 8'h6b, 4'ha }: pattern = 8'b01100110; 
+    { 8'h6b, 4'hb }: pattern = 8'b11100110; 
+    { 8'h6b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h6b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h6b, 4'he }: pattern = 8'b00000000; 
+    { 8'h6b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h6c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h6c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h6c, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h6c, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h6c, 4'ha }: pattern = 8'b00011000; 
+    { 8'h6c, 4'hb }: pattern = 8'b00111100; 
+    { 8'h6c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h6c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h6c, 4'he }: pattern = 8'b00000000; 
+    { 8'h6c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h6d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h6d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h6d, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h6d, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h6d, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h6d, 4'h5 }: pattern = 8'b11101100; 
+    { 8'h6d, 4'h6 }: pattern = 8'b11111110; 
+    { 8'h6d, 4'h7 }: pattern = 8'b11010110; 
+    { 8'h6d, 4'h8 }: pattern = 8'b11010110; 
+    { 8'h6d, 4'h9 }: pattern = 8'b11010110; 
+    { 8'h6d, 4'ha }: pattern = 8'b11010110; 
+    { 8'h6d, 4'hb }: pattern = 8'b11000110; 
+    { 8'h6d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h6d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h6d, 4'he }: pattern = 8'b00000000; 
+    { 8'h6d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h6e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h6e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h6e, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h6e, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h6e, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h6e, 4'h5 }: pattern = 8'b11011100; 
+    { 8'h6e, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h6e, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h6e, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h6e, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h6e, 4'ha }: pattern = 8'b01100110; 
+    { 8'h6e, 4'hb }: pattern = 8'b01100110; 
+    { 8'h6e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h6e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h6e, 4'he }: pattern = 8'b00000000; 
+    { 8'h6e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h6f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h6f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h6f, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h6f, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h6f, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h6f, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h6f, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h6f, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h6f, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h6f, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h6f, 4'ha }: pattern = 8'b11000110; 
+    { 8'h6f, 4'hb }: pattern = 8'b01111100; 
+    { 8'h6f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h6f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h6f, 4'he }: pattern = 8'b00000000; 
+    { 8'h6f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h70, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h70, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h70, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h70, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h70, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h70, 4'h5 }: pattern = 8'b11011100; 
+    { 8'h70, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h70, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h70, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h70, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h70, 4'ha }: pattern = 8'b01100110; 
+    { 8'h70, 4'hb }: pattern = 8'b01111100; 
+    { 8'h70, 4'hc }: pattern = 8'b01100000; 
+    { 8'h70, 4'hd }: pattern = 8'b01100000; 
+    { 8'h70, 4'he }: pattern = 8'b11110000; 
+    { 8'h70, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h71, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h71, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h71, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h71, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h71, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h71, 4'h5 }: pattern = 8'b01110110; 
+    { 8'h71, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h71, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h71, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h71, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h71, 4'ha }: pattern = 8'b11001100; 
+    { 8'h71, 4'hb }: pattern = 8'b01111100; 
+    { 8'h71, 4'hc }: pattern = 8'b00001100; 
+    { 8'h71, 4'hd }: pattern = 8'b00001100; 
+    { 8'h71, 4'he }: pattern = 8'b00011110; 
+    { 8'h71, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h72, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h72, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h72, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h72, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h72, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h72, 4'h5 }: pattern = 8'b11011100; 
+    { 8'h72, 4'h6 }: pattern = 8'b01110110; 
+    { 8'h72, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h72, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h72, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h72, 4'ha }: pattern = 8'b01100000; 
+    { 8'h72, 4'hb }: pattern = 8'b11110000; 
+    { 8'h72, 4'hc }: pattern = 8'b00000000; 
+    { 8'h72, 4'hd }: pattern = 8'b00000000; 
+    { 8'h72, 4'he }: pattern = 8'b00000000; 
+    { 8'h72, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h73, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h73, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h73, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h73, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h73, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h73, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h73, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h73, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h73, 4'h8 }: pattern = 8'b00111000; 
+    { 8'h73, 4'h9 }: pattern = 8'b00001100; 
+    { 8'h73, 4'ha }: pattern = 8'b11000110; 
+    { 8'h73, 4'hb }: pattern = 8'b01111100; 
+    { 8'h73, 4'hc }: pattern = 8'b00000000; 
+    { 8'h73, 4'hd }: pattern = 8'b00000000; 
+    { 8'h73, 4'he }: pattern = 8'b00000000; 
+    { 8'h73, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h74, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h74, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h74, 4'h2 }: pattern = 8'b00010000; 
+    { 8'h74, 4'h3 }: pattern = 8'b00110000; 
+    { 8'h74, 4'h4 }: pattern = 8'b00110000; 
+    { 8'h74, 4'h5 }: pattern = 8'b11111100; 
+    { 8'h74, 4'h6 }: pattern = 8'b00110000; 
+    { 8'h74, 4'h7 }: pattern = 8'b00110000; 
+    { 8'h74, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h74, 4'h9 }: pattern = 8'b00110000; 
+    { 8'h74, 4'ha }: pattern = 8'b00110110; 
+    { 8'h74, 4'hb }: pattern = 8'b00011100; 
+    { 8'h74, 4'hc }: pattern = 8'b00000000; 
+    { 8'h74, 4'hd }: pattern = 8'b00000000; 
+    { 8'h74, 4'he }: pattern = 8'b00000000; 
+    { 8'h74, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h75, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h75, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h75, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h75, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h75, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h75, 4'h5 }: pattern = 8'b11001100; 
+    { 8'h75, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h75, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h75, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h75, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h75, 4'ha }: pattern = 8'b11001100; 
+    { 8'h75, 4'hb }: pattern = 8'b01110110; 
+    { 8'h75, 4'hc }: pattern = 8'b00000000; 
+    { 8'h75, 4'hd }: pattern = 8'b00000000; 
+    { 8'h75, 4'he }: pattern = 8'b00000000; 
+    { 8'h75, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h76, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h76, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h76, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h76, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h76, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h76, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h76, 4'h6 }: pattern = 8'b01100110; 
+    { 8'h76, 4'h7 }: pattern = 8'b01100110; 
+    { 8'h76, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h76, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h76, 4'ha }: pattern = 8'b00111100; 
+    { 8'h76, 4'hb }: pattern = 8'b00011000; 
+    { 8'h76, 4'hc }: pattern = 8'b00000000; 
+    { 8'h76, 4'hd }: pattern = 8'b00000000; 
+    { 8'h76, 4'he }: pattern = 8'b00000000; 
+    { 8'h76, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h77, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h77, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h77, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h77, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h77, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h77, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h77, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h77, 4'h7 }: pattern = 8'b11010110; 
+    { 8'h77, 4'h8 }: pattern = 8'b11010110; 
+    { 8'h77, 4'h9 }: pattern = 8'b11010110; 
+    { 8'h77, 4'ha }: pattern = 8'b11111110; 
+    { 8'h77, 4'hb }: pattern = 8'b01101100; 
+    { 8'h77, 4'hc }: pattern = 8'b00000000; 
+    { 8'h77, 4'hd }: pattern = 8'b00000000; 
+    { 8'h77, 4'he }: pattern = 8'b00000000; 
+    { 8'h77, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h78, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h78, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h78, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h78, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h78, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h78, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h78, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h78, 4'h7 }: pattern = 8'b00111000; 
+    { 8'h78, 4'h8 }: pattern = 8'b00111000; 
+    { 8'h78, 4'h9 }: pattern = 8'b00111000; 
+    { 8'h78, 4'ha }: pattern = 8'b01101100; 
+    { 8'h78, 4'hb }: pattern = 8'b11000110; 
+    { 8'h78, 4'hc }: pattern = 8'b00000000; 
+    { 8'h78, 4'hd }: pattern = 8'b00000000; 
+    { 8'h78, 4'he }: pattern = 8'b00000000; 
+    { 8'h78, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h79, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h79, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h79, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h79, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h79, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h79, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h79, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h79, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h79, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h79, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h79, 4'ha }: pattern = 8'b11000110; 
+    { 8'h79, 4'hb }: pattern = 8'b01111110; 
+    { 8'h79, 4'hc }: pattern = 8'b00000110; 
+    { 8'h79, 4'hd }: pattern = 8'b00001100; 
+    { 8'h79, 4'he }: pattern = 8'b11111000; 
+    { 8'h79, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h7a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h7a, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h7a, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h7a, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h7a, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h7a, 4'h5 }: pattern = 8'b11111110; 
+    { 8'h7a, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h7a, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h7a, 4'h8 }: pattern = 8'b00110000; 
+    { 8'h7a, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h7a, 4'ha }: pattern = 8'b11000110; 
+    { 8'h7a, 4'hb }: pattern = 8'b11111110; 
+    { 8'h7a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h7a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h7a, 4'he }: pattern = 8'b00000000; 
+    { 8'h7a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h7b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h7b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h7b, 4'h2 }: pattern = 8'b00001110; 
+    { 8'h7b, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h7b, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h7b, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h7b, 4'h6 }: pattern = 8'b01110000; 
+    { 8'h7b, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h7b, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h7b, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h7b, 4'ha }: pattern = 8'b00011000; 
+    { 8'h7b, 4'hb }: pattern = 8'b00001110; 
+    { 8'h7b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h7b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h7b, 4'he }: pattern = 8'b00000000; 
+    { 8'h7b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h7c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h7c, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h7c, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h7c, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h7c, 4'ha }: pattern = 8'b00011000; 
+    { 8'h7c, 4'hb }: pattern = 8'b00011000; 
+    { 8'h7c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h7c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h7c, 4'he }: pattern = 8'b00000000; 
+    { 8'h7c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h7d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h7d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h7d, 4'h2 }: pattern = 8'b01110000; 
+    { 8'h7d, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h7d, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h7d, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h7d, 4'h6 }: pattern = 8'b00001110; 
+    { 8'h7d, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h7d, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h7d, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h7d, 4'ha }: pattern = 8'b00011000; 
+    { 8'h7d, 4'hb }: pattern = 8'b01110000; 
+    { 8'h7d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h7d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h7d, 4'he }: pattern = 8'b00000000; 
+    { 8'h7d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h7e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h2 }: pattern = 8'b01110110; 
+    { 8'h7e, 4'h3 }: pattern = 8'b11011100; 
+    { 8'h7e, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h5 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h6 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h7 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h8 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'h9 }: pattern = 8'b00000000; 
+    { 8'h7e, 4'ha }: pattern = 8'b00000000; 
+    { 8'h7e, 4'hb }: pattern = 8'b00000000; 
+    { 8'h7e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h7e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h7e, 4'he }: pattern = 8'b00000000; 
+    { 8'h7e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h7f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h7f, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h7f, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h7f, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h7f, 4'h4 }: pattern = 8'b00010000; 
+    { 8'h7f, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h7f, 4'h6 }: pattern = 8'b01101100; 
+    { 8'h7f, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h7f, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h7f, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h7f, 4'ha }: pattern = 8'b11111110; 
+    { 8'h7f, 4'hb }: pattern = 8'b00000000; 
+    { 8'h7f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h7f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h7f, 4'he }: pattern = 8'b00000000; 
+    { 8'h7f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h80, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h80, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h80, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h80, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h80, 4'h4 }: pattern = 8'b11000010; 
+    { 8'h80, 4'h5 }: pattern = 8'b11000000; 
+    { 8'h80, 4'h6 }: pattern = 8'b11000000; 
+    { 8'h80, 4'h7 }: pattern = 8'b11000000; 
+    { 8'h80, 4'h8 }: pattern = 8'b11000010; 
+    { 8'h80, 4'h9 }: pattern = 8'b01100110; 
+    { 8'h80, 4'ha }: pattern = 8'b00111100; 
+    { 8'h80, 4'hb }: pattern = 8'b00001100; 
+    { 8'h80, 4'hc }: pattern = 8'b00000110; 
+    { 8'h80, 4'hd }: pattern = 8'b01111100; 
+    { 8'h80, 4'he }: pattern = 8'b00000000; 
+    { 8'h80, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h81, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h81, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h81, 4'h2 }: pattern = 8'b11001100; 
+    { 8'h81, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h81, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h81, 4'h5 }: pattern = 8'b11001100; 
+    { 8'h81, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h81, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h81, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h81, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h81, 4'ha }: pattern = 8'b11001100; 
+    { 8'h81, 4'hb }: pattern = 8'b01110110; 
+    { 8'h81, 4'hc }: pattern = 8'b00000000; 
+    { 8'h81, 4'hd }: pattern = 8'b00000000; 
+    { 8'h81, 4'he }: pattern = 8'b00000000; 
+    { 8'h81, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h82, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h82, 4'h1 }: pattern = 8'b00001100; 
+    { 8'h82, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h82, 4'h3 }: pattern = 8'b00110000; 
+    { 8'h82, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h82, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h82, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h82, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h82, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h82, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h82, 4'ha }: pattern = 8'b11000110; 
+    { 8'h82, 4'hb }: pattern = 8'b01111100; 
+    { 8'h82, 4'hc }: pattern = 8'b00000000; 
+    { 8'h82, 4'hd }: pattern = 8'b00000000; 
+    { 8'h82, 4'he }: pattern = 8'b00000000; 
+    { 8'h82, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h83, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h83, 4'h1 }: pattern = 8'b00010000; 
+    { 8'h83, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h83, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h83, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h83, 4'h5 }: pattern = 8'b01111000; 
+    { 8'h83, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h83, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h83, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h83, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h83, 4'ha }: pattern = 8'b11001100; 
+    { 8'h83, 4'hb }: pattern = 8'b01110110; 
+    { 8'h83, 4'hc }: pattern = 8'b00000000; 
+    { 8'h83, 4'hd }: pattern = 8'b00000000; 
+    { 8'h83, 4'he }: pattern = 8'b00000000; 
+    { 8'h83, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h84, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h84, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h84, 4'h2 }: pattern = 8'b11001100; 
+    { 8'h84, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h84, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h84, 4'h5 }: pattern = 8'b01111000; 
+    { 8'h84, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h84, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h84, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h84, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h84, 4'ha }: pattern = 8'b11001100; 
+    { 8'h84, 4'hb }: pattern = 8'b01110110; 
+    { 8'h84, 4'hc }: pattern = 8'b00000000; 
+    { 8'h84, 4'hd }: pattern = 8'b00000000; 
+    { 8'h84, 4'he }: pattern = 8'b00000000; 
+    { 8'h84, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h85, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h85, 4'h1 }: pattern = 8'b01100000; 
+    { 8'h85, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h85, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h85, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h85, 4'h5 }: pattern = 8'b01111000; 
+    { 8'h85, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h85, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h85, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h85, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h85, 4'ha }: pattern = 8'b11001100; 
+    { 8'h85, 4'hb }: pattern = 8'b01110110; 
+    { 8'h85, 4'hc }: pattern = 8'b00000000; 
+    { 8'h85, 4'hd }: pattern = 8'b00000000; 
+    { 8'h85, 4'he }: pattern = 8'b00000000; 
+    { 8'h85, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h86, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h86, 4'h1 }: pattern = 8'b00111000; 
+    { 8'h86, 4'h2 }: pattern = 8'b01101100; 
+    { 8'h86, 4'h3 }: pattern = 8'b00111000; 
+    { 8'h86, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h86, 4'h5 }: pattern = 8'b01111000; 
+    { 8'h86, 4'h6 }: pattern = 8'b00001100; 
+    { 8'h86, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h86, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h86, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h86, 4'ha }: pattern = 8'b11001100; 
+    { 8'h86, 4'hb }: pattern = 8'b01110110; 
+    { 8'h86, 4'hc }: pattern = 8'b00000000; 
+    { 8'h86, 4'hd }: pattern = 8'b00000000; 
+    { 8'h86, 4'he }: pattern = 8'b00000000; 
+    { 8'h86, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h87, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h87, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h87, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h87, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h87, 4'h4 }: pattern = 8'b00111100; 
+    { 8'h87, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h87, 4'h6 }: pattern = 8'b01100000; 
+    { 8'h87, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h87, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h87, 4'h9 }: pattern = 8'b00111100; 
+    { 8'h87, 4'ha }: pattern = 8'b00001100; 
+    { 8'h87, 4'hb }: pattern = 8'b00000110; 
+    { 8'h87, 4'hc }: pattern = 8'b00111100; 
+    { 8'h87, 4'hd }: pattern = 8'b00000000; 
+    { 8'h87, 4'he }: pattern = 8'b00000000; 
+    { 8'h87, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h88, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h88, 4'h1 }: pattern = 8'b00010000; 
+    { 8'h88, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h88, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h88, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h88, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h88, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h88, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h88, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h88, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h88, 4'ha }: pattern = 8'b11000110; 
+    { 8'h88, 4'hb }: pattern = 8'b01111100; 
+    { 8'h88, 4'hc }: pattern = 8'b00000000; 
+    { 8'h88, 4'hd }: pattern = 8'b00000000; 
+    { 8'h88, 4'he }: pattern = 8'b00000000; 
+    { 8'h88, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h89, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h89, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h89, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h89, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h89, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h89, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h89, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h89, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h89, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h89, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h89, 4'ha }: pattern = 8'b11000110; 
+    { 8'h89, 4'hb }: pattern = 8'b01111100; 
+    { 8'h89, 4'hc }: pattern = 8'b00000000; 
+    { 8'h89, 4'hd }: pattern = 8'b00000000; 
+    { 8'h89, 4'he }: pattern = 8'b00000000; 
+    { 8'h89, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h8a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h8a, 4'h1 }: pattern = 8'b01100000; 
+    { 8'h8a, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h8a, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h8a, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h8a, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h8a, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h8a, 4'h7 }: pattern = 8'b11111110; 
+    { 8'h8a, 4'h8 }: pattern = 8'b11000000; 
+    { 8'h8a, 4'h9 }: pattern = 8'b11000000; 
+    { 8'h8a, 4'ha }: pattern = 8'b11000110; 
+    { 8'h8a, 4'hb }: pattern = 8'b01111100; 
+    { 8'h8a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h8a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h8a, 4'he }: pattern = 8'b00000000; 
+    { 8'h8a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h8b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h8b, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h8b, 4'h2 }: pattern = 8'b01100110; 
+    { 8'h8b, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h8b, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h8b, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h8b, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h8b, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h8b, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h8b, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h8b, 4'ha }: pattern = 8'b00011000; 
+    { 8'h8b, 4'hb }: pattern = 8'b00111100; 
+    { 8'h8b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h8b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h8b, 4'he }: pattern = 8'b00000000; 
+    { 8'h8b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h8c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h8c, 4'h1 }: pattern = 8'b00011000; 
+    { 8'h8c, 4'h2 }: pattern = 8'b00111100; 
+    { 8'h8c, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h8c, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h8c, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h8c, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h8c, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h8c, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h8c, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h8c, 4'ha }: pattern = 8'b00011000; 
+    { 8'h8c, 4'hb }: pattern = 8'b00111100; 
+    { 8'h8c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h8c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h8c, 4'he }: pattern = 8'b00000000; 
+    { 8'h8c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h8d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h8d, 4'h1 }: pattern = 8'b01100000; 
+    { 8'h8d, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h8d, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h8d, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h8d, 4'h5 }: pattern = 8'b00111000; 
+    { 8'h8d, 4'h6 }: pattern = 8'b00011000; 
+    { 8'h8d, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h8d, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h8d, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h8d, 4'ha }: pattern = 8'b00011000; 
+    { 8'h8d, 4'hb }: pattern = 8'b00111100; 
+    { 8'h8d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h8d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h8d, 4'he }: pattern = 8'b00000000; 
+    { 8'h8d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h8e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h8e, 4'h1 }: pattern = 8'b11000110; 
+    { 8'h8e, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h8e, 4'h3 }: pattern = 8'b00010000; 
+    { 8'h8e, 4'h4 }: pattern = 8'b00111000; 
+    { 8'h8e, 4'h5 }: pattern = 8'b01101100; 
+    { 8'h8e, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h8e, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h8e, 4'h8 }: pattern = 8'b11111110; 
+    { 8'h8e, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h8e, 4'ha }: pattern = 8'b11000110; 
+    { 8'h8e, 4'hb }: pattern = 8'b11000110; 
+    { 8'h8e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h8e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h8e, 4'he }: pattern = 8'b00000000; 
+    { 8'h8e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h8f, 4'h0 }: pattern = 8'b00111000; 
+    { 8'h8f, 4'h1 }: pattern = 8'b01101100; 
+    { 8'h8f, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h8f, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h8f, 4'h4 }: pattern = 8'b00111000; 
+    { 8'h8f, 4'h5 }: pattern = 8'b01101100; 
+    { 8'h8f, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h8f, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h8f, 4'h8 }: pattern = 8'b11111110; 
+    { 8'h8f, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h8f, 4'ha }: pattern = 8'b11000110; 
+    { 8'h8f, 4'hb }: pattern = 8'b11000110; 
+    { 8'h8f, 4'hc }: pattern = 8'b00000000; 
+    { 8'h8f, 4'hd }: pattern = 8'b00000000; 
+    { 8'h8f, 4'he }: pattern = 8'b00000000; 
+    { 8'h8f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h90, 4'h0 }: pattern = 8'b00011000; 
+    { 8'h90, 4'h1 }: pattern = 8'b00110000; 
+    { 8'h90, 4'h2 }: pattern = 8'b01100000; 
+    { 8'h90, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h90, 4'h4 }: pattern = 8'b11111110; 
+    { 8'h90, 4'h5 }: pattern = 8'b01100110; 
+    { 8'h90, 4'h6 }: pattern = 8'b01100000; 
+    { 8'h90, 4'h7 }: pattern = 8'b01111100; 
+    { 8'h90, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h90, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h90, 4'ha }: pattern = 8'b01100110; 
+    { 8'h90, 4'hb }: pattern = 8'b11111110; 
+    { 8'h90, 4'hc }: pattern = 8'b00000000; 
+    { 8'h90, 4'hd }: pattern = 8'b00000000; 
+    { 8'h90, 4'he }: pattern = 8'b00000000; 
+    { 8'h90, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h91, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h91, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h91, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h91, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h91, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h91, 4'h5 }: pattern = 8'b11001100; 
+    { 8'h91, 4'h6 }: pattern = 8'b01110110; 
+    { 8'h91, 4'h7 }: pattern = 8'b00110110; 
+    { 8'h91, 4'h8 }: pattern = 8'b01111110; 
+    { 8'h91, 4'h9 }: pattern = 8'b11011000; 
+    { 8'h91, 4'ha }: pattern = 8'b11011000; 
+    { 8'h91, 4'hb }: pattern = 8'b01101110; 
+    { 8'h91, 4'hc }: pattern = 8'b00000000; 
+    { 8'h91, 4'hd }: pattern = 8'b00000000; 
+    { 8'h91, 4'he }: pattern = 8'b00000000; 
+    { 8'h91, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h92, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h92, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h92, 4'h2 }: pattern = 8'b00111110; 
+    { 8'h92, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h92, 4'h4 }: pattern = 8'b11001100; 
+    { 8'h92, 4'h5 }: pattern = 8'b11001100; 
+    { 8'h92, 4'h6 }: pattern = 8'b11111110; 
+    { 8'h92, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h92, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h92, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h92, 4'ha }: pattern = 8'b11001100; 
+    { 8'h92, 4'hb }: pattern = 8'b11001110; 
+    { 8'h92, 4'hc }: pattern = 8'b00000000; 
+    { 8'h92, 4'hd }: pattern = 8'b00000000; 
+    { 8'h92, 4'he }: pattern = 8'b00000000; 
+    { 8'h92, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h93, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h93, 4'h1 }: pattern = 8'b00010000; 
+    { 8'h93, 4'h2 }: pattern = 8'b00111000; 
+    { 8'h93, 4'h3 }: pattern = 8'b01101100; 
+    { 8'h93, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h93, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h93, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h93, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h93, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h93, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h93, 4'ha }: pattern = 8'b11000110; 
+    { 8'h93, 4'hb }: pattern = 8'b01111100; 
+    { 8'h93, 4'hc }: pattern = 8'b00000000; 
+    { 8'h93, 4'hd }: pattern = 8'b00000000; 
+    { 8'h93, 4'he }: pattern = 8'b00000000; 
+    { 8'h93, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h94, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h94, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h94, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h94, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h94, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h94, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h94, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h94, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h94, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h94, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h94, 4'ha }: pattern = 8'b11000110; 
+    { 8'h94, 4'hb }: pattern = 8'b01111100; 
+    { 8'h94, 4'hc }: pattern = 8'b00000000; 
+    { 8'h94, 4'hd }: pattern = 8'b00000000; 
+    { 8'h94, 4'he }: pattern = 8'b00000000; 
+    { 8'h94, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h95, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h95, 4'h1 }: pattern = 8'b01100000; 
+    { 8'h95, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h95, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h95, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h95, 4'h5 }: pattern = 8'b01111100; 
+    { 8'h95, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h95, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h95, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h95, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h95, 4'ha }: pattern = 8'b11000110; 
+    { 8'h95, 4'hb }: pattern = 8'b01111100; 
+    { 8'h95, 4'hc }: pattern = 8'b00000000; 
+    { 8'h95, 4'hd }: pattern = 8'b00000000; 
+    { 8'h95, 4'he }: pattern = 8'b00000000; 
+    { 8'h95, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h96, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h96, 4'h1 }: pattern = 8'b00110000; 
+    { 8'h96, 4'h2 }: pattern = 8'b01111000; 
+    { 8'h96, 4'h3 }: pattern = 8'b11001100; 
+    { 8'h96, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h96, 4'h5 }: pattern = 8'b11001100; 
+    { 8'h96, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h96, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h96, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h96, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h96, 4'ha }: pattern = 8'b11001100; 
+    { 8'h96, 4'hb }: pattern = 8'b01110110; 
+    { 8'h96, 4'hc }: pattern = 8'b00000000; 
+    { 8'h96, 4'hd }: pattern = 8'b00000000; 
+    { 8'h96, 4'he }: pattern = 8'b00000000; 
+    { 8'h96, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h97, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h97, 4'h1 }: pattern = 8'b01100000; 
+    { 8'h97, 4'h2 }: pattern = 8'b00110000; 
+    { 8'h97, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h97, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h97, 4'h5 }: pattern = 8'b11001100; 
+    { 8'h97, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h97, 4'h7 }: pattern = 8'b11001100; 
+    { 8'h97, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h97, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h97, 4'ha }: pattern = 8'b11001100; 
+    { 8'h97, 4'hb }: pattern = 8'b01110110; 
+    { 8'h97, 4'hc }: pattern = 8'b00000000; 
+    { 8'h97, 4'hd }: pattern = 8'b00000000; 
+    { 8'h97, 4'he }: pattern = 8'b00000000; 
+    { 8'h97, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h98, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h98, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h98, 4'h2 }: pattern = 8'b11000110; 
+    { 8'h98, 4'h3 }: pattern = 8'b00000000; 
+    { 8'h98, 4'h4 }: pattern = 8'b00000000; 
+    { 8'h98, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h98, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h98, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h98, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h98, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h98, 4'ha }: pattern = 8'b11000110; 
+    { 8'h98, 4'hb }: pattern = 8'b01111110; 
+    { 8'h98, 4'hc }: pattern = 8'b00000110; 
+    { 8'h98, 4'hd }: pattern = 8'b00001100; 
+    { 8'h98, 4'he }: pattern = 8'b01111000; 
+    { 8'h98, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h99, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h99, 4'h1 }: pattern = 8'b11000110; 
+    { 8'h99, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h99, 4'h3 }: pattern = 8'b01111100; 
+    { 8'h99, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h99, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h99, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h99, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h99, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h99, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h99, 4'ha }: pattern = 8'b11000110; 
+    { 8'h99, 4'hb }: pattern = 8'b01111100; 
+    { 8'h99, 4'hc }: pattern = 8'b00000000; 
+    { 8'h99, 4'hd }: pattern = 8'b00000000; 
+    { 8'h99, 4'he }: pattern = 8'b00000000; 
+    { 8'h99, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h9a, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h9a, 4'h1 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h2 }: pattern = 8'b00000000; 
+    { 8'h9a, 4'h3 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h4 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h5 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h6 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h7 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h8 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'h9 }: pattern = 8'b11000110; 
+    { 8'h9a, 4'ha }: pattern = 8'b11000110; 
+    { 8'h9a, 4'hb }: pattern = 8'b01111100; 
+    { 8'h9a, 4'hc }: pattern = 8'b00000000; 
+    { 8'h9a, 4'hd }: pattern = 8'b00000000; 
+    { 8'h9a, 4'he }: pattern = 8'b00000000; 
+    { 8'h9a, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h9b, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h9b, 4'h1 }: pattern = 8'b00011000; 
+    { 8'h9b, 4'h2 }: pattern = 8'b00011000; 
+    { 8'h9b, 4'h3 }: pattern = 8'b00111100; 
+    { 8'h9b, 4'h4 }: pattern = 8'b01100110; 
+    { 8'h9b, 4'h5 }: pattern = 8'b01100000; 
+    { 8'h9b, 4'h6 }: pattern = 8'b01100000; 
+    { 8'h9b, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h9b, 4'h8 }: pattern = 8'b01100110; 
+    { 8'h9b, 4'h9 }: pattern = 8'b00111100; 
+    { 8'h9b, 4'ha }: pattern = 8'b00011000; 
+    { 8'h9b, 4'hb }: pattern = 8'b00011000; 
+    { 8'h9b, 4'hc }: pattern = 8'b00000000; 
+    { 8'h9b, 4'hd }: pattern = 8'b00000000; 
+    { 8'h9b, 4'he }: pattern = 8'b00000000; 
+    { 8'h9b, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h9c, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h9c, 4'h1 }: pattern = 8'b00111000; 
+    { 8'h9c, 4'h2 }: pattern = 8'b01101100; 
+    { 8'h9c, 4'h3 }: pattern = 8'b01100100; 
+    { 8'h9c, 4'h4 }: pattern = 8'b01100000; 
+    { 8'h9c, 4'h5 }: pattern = 8'b11110000; 
+    { 8'h9c, 4'h6 }: pattern = 8'b01100000; 
+    { 8'h9c, 4'h7 }: pattern = 8'b01100000; 
+    { 8'h9c, 4'h8 }: pattern = 8'b01100000; 
+    { 8'h9c, 4'h9 }: pattern = 8'b01100000; 
+    { 8'h9c, 4'ha }: pattern = 8'b11100110; 
+    { 8'h9c, 4'hb }: pattern = 8'b11111100; 
+    { 8'h9c, 4'hc }: pattern = 8'b00000000; 
+    { 8'h9c, 4'hd }: pattern = 8'b00000000; 
+    { 8'h9c, 4'he }: pattern = 8'b00000000; 
+    { 8'h9c, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h9d, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h9d, 4'h1 }: pattern = 8'b00000000; 
+    { 8'h9d, 4'h2 }: pattern = 8'b01100110; 
+    { 8'h9d, 4'h3 }: pattern = 8'b01100110; 
+    { 8'h9d, 4'h4 }: pattern = 8'b00111100; 
+    { 8'h9d, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h9d, 4'h6 }: pattern = 8'b01111110; 
+    { 8'h9d, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h9d, 4'h8 }: pattern = 8'b01111110; 
+    { 8'h9d, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h9d, 4'ha }: pattern = 8'b00011000; 
+    { 8'h9d, 4'hb }: pattern = 8'b00011000; 
+    { 8'h9d, 4'hc }: pattern = 8'b00000000; 
+    { 8'h9d, 4'hd }: pattern = 8'b00000000; 
+    { 8'h9d, 4'he }: pattern = 8'b00000000; 
+    { 8'h9d, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h9e, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h9e, 4'h1 }: pattern = 8'b11111000; 
+    { 8'h9e, 4'h2 }: pattern = 8'b11001100; 
+    { 8'h9e, 4'h3 }: pattern = 8'b11001100; 
+    { 8'h9e, 4'h4 }: pattern = 8'b11111000; 
+    { 8'h9e, 4'h5 }: pattern = 8'b11000100; 
+    { 8'h9e, 4'h6 }: pattern = 8'b11001100; 
+    { 8'h9e, 4'h7 }: pattern = 8'b11011110; 
+    { 8'h9e, 4'h8 }: pattern = 8'b11001100; 
+    { 8'h9e, 4'h9 }: pattern = 8'b11001100; 
+    { 8'h9e, 4'ha }: pattern = 8'b11001100; 
+    { 8'h9e, 4'hb }: pattern = 8'b11000110; 
+    { 8'h9e, 4'hc }: pattern = 8'b00000000; 
+    { 8'h9e, 4'hd }: pattern = 8'b00000000; 
+    { 8'h9e, 4'he }: pattern = 8'b00000000; 
+    { 8'h9e, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'h9f, 4'h0 }: pattern = 8'b00000000; 
+    { 8'h9f, 4'h1 }: pattern = 8'b00001110; 
+    { 8'h9f, 4'h2 }: pattern = 8'b00011011; 
+    { 8'h9f, 4'h3 }: pattern = 8'b00011000; 
+    { 8'h9f, 4'h4 }: pattern = 8'b00011000; 
+    { 8'h9f, 4'h5 }: pattern = 8'b00011000; 
+    { 8'h9f, 4'h6 }: pattern = 8'b01111110; 
+    { 8'h9f, 4'h7 }: pattern = 8'b00011000; 
+    { 8'h9f, 4'h8 }: pattern = 8'b00011000; 
+    { 8'h9f, 4'h9 }: pattern = 8'b00011000; 
+    { 8'h9f, 4'ha }: pattern = 8'b00011000; 
+    { 8'h9f, 4'hb }: pattern = 8'b00011000; 
+    { 8'h9f, 4'hc }: pattern = 8'b11011000; 
+    { 8'h9f, 4'hd }: pattern = 8'b01110000; 
+    { 8'h9f, 4'he }: pattern = 8'b00000000; 
+    { 8'h9f, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha0, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha0, 4'h1 }: pattern = 8'b00011000; 
+    { 8'ha0, 4'h2 }: pattern = 8'b00110000; 
+    { 8'ha0, 4'h3 }: pattern = 8'b01100000; 
+    { 8'ha0, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha0, 4'h5 }: pattern = 8'b01111000; 
+    { 8'ha0, 4'h6 }: pattern = 8'b00001100; 
+    { 8'ha0, 4'h7 }: pattern = 8'b01111100; 
+    { 8'ha0, 4'h8 }: pattern = 8'b11001100; 
+    { 8'ha0, 4'h9 }: pattern = 8'b11001100; 
+    { 8'ha0, 4'ha }: pattern = 8'b11001100; 
+    { 8'ha0, 4'hb }: pattern = 8'b01110110; 
+    { 8'ha0, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha0, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha0, 4'he }: pattern = 8'b00000000; 
+    { 8'ha0, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha1, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha1, 4'h1 }: pattern = 8'b00001100; 
+    { 8'ha1, 4'h2 }: pattern = 8'b00011000; 
+    { 8'ha1, 4'h3 }: pattern = 8'b00110000; 
+    { 8'ha1, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha1, 4'h5 }: pattern = 8'b00111000; 
+    { 8'ha1, 4'h6 }: pattern = 8'b00011000; 
+    { 8'ha1, 4'h7 }: pattern = 8'b00011000; 
+    { 8'ha1, 4'h8 }: pattern = 8'b00011000; 
+    { 8'ha1, 4'h9 }: pattern = 8'b00011000; 
+    { 8'ha1, 4'ha }: pattern = 8'b00011000; 
+    { 8'ha1, 4'hb }: pattern = 8'b00111100; 
+    { 8'ha1, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha1, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha1, 4'he }: pattern = 8'b00000000; 
+    { 8'ha1, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha2, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha2, 4'h1 }: pattern = 8'b00011000; 
+    { 8'ha2, 4'h2 }: pattern = 8'b00110000; 
+    { 8'ha2, 4'h3 }: pattern = 8'b01100000; 
+    { 8'ha2, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha2, 4'h5 }: pattern = 8'b01111100; 
+    { 8'ha2, 4'h6 }: pattern = 8'b11000110; 
+    { 8'ha2, 4'h7 }: pattern = 8'b11000110; 
+    { 8'ha2, 4'h8 }: pattern = 8'b11000110; 
+    { 8'ha2, 4'h9 }: pattern = 8'b11000110; 
+    { 8'ha2, 4'ha }: pattern = 8'b11000110; 
+    { 8'ha2, 4'hb }: pattern = 8'b01111100; 
+    { 8'ha2, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha2, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha2, 4'he }: pattern = 8'b00000000; 
+    { 8'ha2, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha3, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha3, 4'h1 }: pattern = 8'b00011000; 
+    { 8'ha3, 4'h2 }: pattern = 8'b00110000; 
+    { 8'ha3, 4'h3 }: pattern = 8'b01100000; 
+    { 8'ha3, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha3, 4'h5 }: pattern = 8'b11001100; 
+    { 8'ha3, 4'h6 }: pattern = 8'b11001100; 
+    { 8'ha3, 4'h7 }: pattern = 8'b11001100; 
+    { 8'ha3, 4'h8 }: pattern = 8'b11001100; 
+    { 8'ha3, 4'h9 }: pattern = 8'b11001100; 
+    { 8'ha3, 4'ha }: pattern = 8'b11001100; 
+    { 8'ha3, 4'hb }: pattern = 8'b01110110; 
+    { 8'ha3, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha3, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha3, 4'he }: pattern = 8'b00000000; 
+    { 8'ha3, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha4, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha4, 4'h1 }: pattern = 8'b00000000; 
+    { 8'ha4, 4'h2 }: pattern = 8'b01110110; 
+    { 8'ha4, 4'h3 }: pattern = 8'b11011100; 
+    { 8'ha4, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha4, 4'h5 }: pattern = 8'b11011100; 
+    { 8'ha4, 4'h6 }: pattern = 8'b01100110; 
+    { 8'ha4, 4'h7 }: pattern = 8'b01100110; 
+    { 8'ha4, 4'h8 }: pattern = 8'b01100110; 
+    { 8'ha4, 4'h9 }: pattern = 8'b01100110; 
+    { 8'ha4, 4'ha }: pattern = 8'b01100110; 
+    { 8'ha4, 4'hb }: pattern = 8'b01100110; 
+    { 8'ha4, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha4, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha4, 4'he }: pattern = 8'b00000000; 
+    { 8'ha4, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha5, 4'h0 }: pattern = 8'b01110110; 
+    { 8'ha5, 4'h1 }: pattern = 8'b11011100; 
+    { 8'ha5, 4'h2 }: pattern = 8'b00000000; 
+    { 8'ha5, 4'h3 }: pattern = 8'b11000110; 
+    { 8'ha5, 4'h4 }: pattern = 8'b11100110; 
+    { 8'ha5, 4'h5 }: pattern = 8'b11110110; 
+    { 8'ha5, 4'h6 }: pattern = 8'b11111110; 
+    { 8'ha5, 4'h7 }: pattern = 8'b11011110; 
+    { 8'ha5, 4'h8 }: pattern = 8'b11001110; 
+    { 8'ha5, 4'h9 }: pattern = 8'b11000110; 
+    { 8'ha5, 4'ha }: pattern = 8'b11000110; 
+    { 8'ha5, 4'hb }: pattern = 8'b11000110; 
+    { 8'ha5, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha5, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha5, 4'he }: pattern = 8'b00000000; 
+    { 8'ha5, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha6, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha6, 4'h1 }: pattern = 8'b00111100; 
+    { 8'ha6, 4'h2 }: pattern = 8'b01101100; 
+    { 8'ha6, 4'h3 }: pattern = 8'b01101100; 
+    { 8'ha6, 4'h4 }: pattern = 8'b00111110; 
+    { 8'ha6, 4'h5 }: pattern = 8'b00000000; 
+    { 8'ha6, 4'h6 }: pattern = 8'b01111110; 
+    { 8'ha6, 4'h7 }: pattern = 8'b00000000; 
+    { 8'ha6, 4'h8 }: pattern = 8'b00000000; 
+    { 8'ha6, 4'h9 }: pattern = 8'b00000000; 
+    { 8'ha6, 4'ha }: pattern = 8'b00000000; 
+    { 8'ha6, 4'hb }: pattern = 8'b00000000; 
+    { 8'ha6, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha6, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha6, 4'he }: pattern = 8'b00000000; 
+    { 8'ha6, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha7, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha7, 4'h1 }: pattern = 8'b00111000; 
+    { 8'ha7, 4'h2 }: pattern = 8'b01101100; 
+    { 8'ha7, 4'h3 }: pattern = 8'b01101100; 
+    { 8'ha7, 4'h4 }: pattern = 8'b00111000; 
+    { 8'ha7, 4'h5 }: pattern = 8'b00000000; 
+    { 8'ha7, 4'h6 }: pattern = 8'b01111100; 
+    { 8'ha7, 4'h7 }: pattern = 8'b00000000; 
+    { 8'ha7, 4'h8 }: pattern = 8'b00000000; 
+    { 8'ha7, 4'h9 }: pattern = 8'b00000000; 
+    { 8'ha7, 4'ha }: pattern = 8'b00000000; 
+    { 8'ha7, 4'hb }: pattern = 8'b00000000; 
+    { 8'ha7, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha7, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha7, 4'he }: pattern = 8'b00000000; 
+    { 8'ha7, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha8, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha8, 4'h1 }: pattern = 8'b00000000; 
+    { 8'ha8, 4'h2 }: pattern = 8'b00110000; 
+    { 8'ha8, 4'h3 }: pattern = 8'b00110000; 
+    { 8'ha8, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha8, 4'h5 }: pattern = 8'b00110000; 
+    { 8'ha8, 4'h6 }: pattern = 8'b00110000; 
+    { 8'ha8, 4'h7 }: pattern = 8'b01100000; 
+    { 8'ha8, 4'h8 }: pattern = 8'b11000000; 
+    { 8'ha8, 4'h9 }: pattern = 8'b11000110; 
+    { 8'ha8, 4'ha }: pattern = 8'b11000110; 
+    { 8'ha8, 4'hb }: pattern = 8'b01111100; 
+    { 8'ha8, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha8, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha8, 4'he }: pattern = 8'b00000000; 
+    { 8'ha8, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'ha9, 4'h0 }: pattern = 8'b00000000; 
+    { 8'ha9, 4'h1 }: pattern = 8'b00000000; 
+    { 8'ha9, 4'h2 }: pattern = 8'b00000000; 
+    { 8'ha9, 4'h3 }: pattern = 8'b00000000; 
+    { 8'ha9, 4'h4 }: pattern = 8'b00000000; 
+    { 8'ha9, 4'h5 }: pattern = 8'b00000000; 
+    { 8'ha9, 4'h6 }: pattern = 8'b11111110; 
+    { 8'ha9, 4'h7 }: pattern = 8'b11000000; 
+    { 8'ha9, 4'h8 }: pattern = 8'b11000000; 
+    { 8'ha9, 4'h9 }: pattern = 8'b11000000; 
+    { 8'ha9, 4'ha }: pattern = 8'b11000000; 
+    { 8'ha9, 4'hb }: pattern = 8'b00000000; 
+    { 8'ha9, 4'hc }: pattern = 8'b00000000; 
+    { 8'ha9, 4'hd }: pattern = 8'b00000000; 
+    { 8'ha9, 4'he }: pattern = 8'b00000000; 
+    { 8'ha9, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'haa, 4'h0 }: pattern = 8'b00000000; 
+    { 8'haa, 4'h1 }: pattern = 8'b00000000; 
+    { 8'haa, 4'h2 }: pattern = 8'b00000000; 
+    { 8'haa, 4'h3 }: pattern = 8'b00000000; 
+    { 8'haa, 4'h4 }: pattern = 8'b00000000; 
+    { 8'haa, 4'h5 }: pattern = 8'b00000000; 
+    { 8'haa, 4'h6 }: pattern = 8'b11111110; 
+    { 8'haa, 4'h7 }: pattern = 8'b00000110; 
+    { 8'haa, 4'h8 }: pattern = 8'b00000110; 
+    { 8'haa, 4'h9 }: pattern = 8'b00000110; 
+    { 8'haa, 4'ha }: pattern = 8'b00000110; 
+    { 8'haa, 4'hb }: pattern = 8'b00000000; 
+    { 8'haa, 4'hc }: pattern = 8'b00000000; 
+    { 8'haa, 4'hd }: pattern = 8'b00000000; 
+    { 8'haa, 4'he }: pattern = 8'b00000000; 
+    { 8'haa, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hab, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hab, 4'h1 }: pattern = 8'b11000000; 
+    { 8'hab, 4'h2 }: pattern = 8'b11000000; 
+    { 8'hab, 4'h3 }: pattern = 8'b11000010; 
+    { 8'hab, 4'h4 }: pattern = 8'b11000110; 
+    { 8'hab, 4'h5 }: pattern = 8'b11001100; 
+    { 8'hab, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hab, 4'h7 }: pattern = 8'b00110000; 
+    { 8'hab, 4'h8 }: pattern = 8'b01100000; 
+    { 8'hab, 4'h9 }: pattern = 8'b11011100; 
+    { 8'hab, 4'ha }: pattern = 8'b10000110; 
+    { 8'hab, 4'hb }: pattern = 8'b00001100; 
+    { 8'hab, 4'hc }: pattern = 8'b00011000; 
+    { 8'hab, 4'hd }: pattern = 8'b00111110; 
+    { 8'hab, 4'he }: pattern = 8'b00000000; 
+    { 8'hab, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hac, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hac, 4'h1 }: pattern = 8'b11000000; 
+    { 8'hac, 4'h2 }: pattern = 8'b11000000; 
+    { 8'hac, 4'h3 }: pattern = 8'b11000010; 
+    { 8'hac, 4'h4 }: pattern = 8'b11000110; 
+    { 8'hac, 4'h5 }: pattern = 8'b11001100; 
+    { 8'hac, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hac, 4'h7 }: pattern = 8'b00110000; 
+    { 8'hac, 4'h8 }: pattern = 8'b01100110; 
+    { 8'hac, 4'h9 }: pattern = 8'b11001110; 
+    { 8'hac, 4'ha }: pattern = 8'b10011110; 
+    { 8'hac, 4'hb }: pattern = 8'b00111110; 
+    { 8'hac, 4'hc }: pattern = 8'b00000110; 
+    { 8'hac, 4'hd }: pattern = 8'b00000110; 
+    { 8'hac, 4'he }: pattern = 8'b00000000; 
+    { 8'hac, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'had, 4'h0 }: pattern = 8'b00000000; 
+    { 8'had, 4'h1 }: pattern = 8'b00000000; 
+    { 8'had, 4'h2 }: pattern = 8'b00011000; 
+    { 8'had, 4'h3 }: pattern = 8'b00011000; 
+    { 8'had, 4'h4 }: pattern = 8'b00000000; 
+    { 8'had, 4'h5 }: pattern = 8'b00011000; 
+    { 8'had, 4'h6 }: pattern = 8'b00011000; 
+    { 8'had, 4'h7 }: pattern = 8'b00011000; 
+    { 8'had, 4'h8 }: pattern = 8'b00111100; 
+    { 8'had, 4'h9 }: pattern = 8'b00111100; 
+    { 8'had, 4'ha }: pattern = 8'b00111100; 
+    { 8'had, 4'hb }: pattern = 8'b00011000; 
+    { 8'had, 4'hc }: pattern = 8'b00000000; 
+    { 8'had, 4'hd }: pattern = 8'b00000000; 
+    { 8'had, 4'he }: pattern = 8'b00000000; 
+    { 8'had, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hae, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hae, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hae, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hae, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hae, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hae, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hae, 4'h6 }: pattern = 8'b01101100; 
+    { 8'hae, 4'h7 }: pattern = 8'b11011000; 
+    { 8'hae, 4'h8 }: pattern = 8'b01101100; 
+    { 8'hae, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hae, 4'ha }: pattern = 8'b00000000; 
+    { 8'hae, 4'hb }: pattern = 8'b00000000; 
+    { 8'hae, 4'hc }: pattern = 8'b00000000; 
+    { 8'hae, 4'hd }: pattern = 8'b00000000; 
+    { 8'hae, 4'he }: pattern = 8'b00000000; 
+    { 8'hae, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'haf, 4'h0 }: pattern = 8'b00000000; 
+    { 8'haf, 4'h1 }: pattern = 8'b00000000; 
+    { 8'haf, 4'h2 }: pattern = 8'b00000000; 
+    { 8'haf, 4'h3 }: pattern = 8'b00000000; 
+    { 8'haf, 4'h4 }: pattern = 8'b00000000; 
+    { 8'haf, 4'h5 }: pattern = 8'b11011000; 
+    { 8'haf, 4'h6 }: pattern = 8'b01101100; 
+    { 8'haf, 4'h7 }: pattern = 8'b00110110; 
+    { 8'haf, 4'h8 }: pattern = 8'b01101100; 
+    { 8'haf, 4'h9 }: pattern = 8'b11011000; 
+    { 8'haf, 4'ha }: pattern = 8'b00000000; 
+    { 8'haf, 4'hb }: pattern = 8'b00000000; 
+    { 8'haf, 4'hc }: pattern = 8'b00000000; 
+    { 8'haf, 4'hd }: pattern = 8'b00000000; 
+    { 8'haf, 4'he }: pattern = 8'b00000000; 
+    { 8'haf, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hb0, 4'h0 }: pattern = 8'b00010001; 
+    { 8'hb0, 4'h1 }: pattern = 8'b01000100; 
+    { 8'hb0, 4'h2 }: pattern = 8'b00010001; 
+    { 8'hb0, 4'h3 }: pattern = 8'b01000100; 
+    { 8'hb0, 4'h4 }: pattern = 8'b00010001; 
+    { 8'hb0, 4'h5 }: pattern = 8'b01000100; 
+    { 8'hb0, 4'h6 }: pattern = 8'b00010001; 
+    { 8'hb0, 4'h7 }: pattern = 8'b01000100; 
+    { 8'hb0, 4'h8 }: pattern = 8'b00010001; 
+    { 8'hb0, 4'h9 }: pattern = 8'b01000100; 
+    { 8'hb0, 4'ha }: pattern = 8'b00010001; 
+    { 8'hb0, 4'hb }: pattern = 8'b01000100; 
+    { 8'hb0, 4'hc }: pattern = 8'b00010001; 
+    { 8'hb0, 4'hd }: pattern = 8'b01000100; 
+    { 8'hb0, 4'he }: pattern = 8'b00010001; 
+    { 8'hb0, 4'hf }: pattern = 8'b01000100; 
+
+    { 8'hb1, 4'h0 }: pattern = 8'b01010101; 
+    { 8'hb1, 4'h1 }: pattern = 8'b10101010; 
+    { 8'hb1, 4'h2 }: pattern = 8'b01010101; 
+    { 8'hb1, 4'h3 }: pattern = 8'b10101010; 
+    { 8'hb1, 4'h4 }: pattern = 8'b01010101; 
+    { 8'hb1, 4'h5 }: pattern = 8'b10101010; 
+    { 8'hb1, 4'h6 }: pattern = 8'b01010101; 
+    { 8'hb1, 4'h7 }: pattern = 8'b10101010; 
+    { 8'hb1, 4'h8 }: pattern = 8'b01010101; 
+    { 8'hb1, 4'h9 }: pattern = 8'b10101010; 
+    { 8'hb1, 4'ha }: pattern = 8'b01010101; 
+    { 8'hb1, 4'hb }: pattern = 8'b10101010; 
+    { 8'hb1, 4'hc }: pattern = 8'b01010101; 
+    { 8'hb1, 4'hd }: pattern = 8'b10101010; 
+    { 8'hb1, 4'he }: pattern = 8'b01010101; 
+    { 8'hb1, 4'hf }: pattern = 8'b10101010; 
+
+    { 8'hb2, 4'h0 }: pattern = 8'b11011101; 
+    { 8'hb2, 4'h1 }: pattern = 8'b01110111; 
+    { 8'hb2, 4'h2 }: pattern = 8'b11011101; 
+    { 8'hb2, 4'h3 }: pattern = 8'b01110111; 
+    { 8'hb2, 4'h4 }: pattern = 8'b11011101; 
+    { 8'hb2, 4'h5 }: pattern = 8'b01110111; 
+    { 8'hb2, 4'h6 }: pattern = 8'b11011101; 
+    { 8'hb2, 4'h7 }: pattern = 8'b01110111; 
+    { 8'hb2, 4'h8 }: pattern = 8'b11011101; 
+    { 8'hb2, 4'h9 }: pattern = 8'b01110111; 
+    { 8'hb2, 4'ha }: pattern = 8'b11011101; 
+    { 8'hb2, 4'hb }: pattern = 8'b01110111; 
+    { 8'hb2, 4'hc }: pattern = 8'b11011101; 
+    { 8'hb2, 4'hd }: pattern = 8'b01110111; 
+    { 8'hb2, 4'he }: pattern = 8'b11011101; 
+    { 8'hb2, 4'hf }: pattern = 8'b01110111; 
+
+    { 8'hb3, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h7 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hb3, 4'ha }: pattern = 8'b00011000; 
+    { 8'hb3, 4'hb }: pattern = 8'b00011000; 
+    { 8'hb3, 4'hc }: pattern = 8'b00011000; 
+    { 8'hb3, 4'hd }: pattern = 8'b00011000; 
+    { 8'hb3, 4'he }: pattern = 8'b00011000; 
+    { 8'hb3, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hb4, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h7 }: pattern = 8'b11111000; 
+    { 8'hb4, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hb4, 4'ha }: pattern = 8'b00011000; 
+    { 8'hb4, 4'hb }: pattern = 8'b00011000; 
+    { 8'hb4, 4'hc }: pattern = 8'b00011000; 
+    { 8'hb4, 4'hd }: pattern = 8'b00011000; 
+    { 8'hb4, 4'he }: pattern = 8'b00011000; 
+    { 8'hb4, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hb5, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h5 }: pattern = 8'b11111000; 
+    { 8'hb5, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h7 }: pattern = 8'b11111000; 
+    { 8'hb5, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hb5, 4'ha }: pattern = 8'b00011000; 
+    { 8'hb5, 4'hb }: pattern = 8'b00011000; 
+    { 8'hb5, 4'hc }: pattern = 8'b00011000; 
+    { 8'hb5, 4'hd }: pattern = 8'b00011000; 
+    { 8'hb5, 4'he }: pattern = 8'b00011000; 
+    { 8'hb5, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hb6, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h7 }: pattern = 8'b11110110; 
+    { 8'hb6, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hb6, 4'ha }: pattern = 8'b00110110; 
+    { 8'hb6, 4'hb }: pattern = 8'b00110110; 
+    { 8'hb6, 4'hc }: pattern = 8'b00110110; 
+    { 8'hb6, 4'hd }: pattern = 8'b00110110; 
+    { 8'hb6, 4'he }: pattern = 8'b00110110; 
+    { 8'hb6, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hb7, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hb7, 4'h7 }: pattern = 8'b11111110; 
+    { 8'hb7, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hb7, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hb7, 4'ha }: pattern = 8'b00110110; 
+    { 8'hb7, 4'hb }: pattern = 8'b00110110; 
+    { 8'hb7, 4'hc }: pattern = 8'b00110110; 
+    { 8'hb7, 4'hd }: pattern = 8'b00110110; 
+    { 8'hb7, 4'he }: pattern = 8'b00110110; 
+    { 8'hb7, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hb8, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hb8, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hb8, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hb8, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hb8, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hb8, 4'h5 }: pattern = 8'b11111000; 
+    { 8'hb8, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hb8, 4'h7 }: pattern = 8'b11111000; 
+    { 8'hb8, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hb8, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hb8, 4'ha }: pattern = 8'b00011000; 
+    { 8'hb8, 4'hb }: pattern = 8'b00011000; 
+    { 8'hb8, 4'hc }: pattern = 8'b00011000; 
+    { 8'hb8, 4'hd }: pattern = 8'b00011000; 
+    { 8'hb8, 4'he }: pattern = 8'b00011000; 
+    { 8'hb8, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hb9, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'h5 }: pattern = 8'b11110110; 
+    { 8'hb9, 4'h6 }: pattern = 8'b00000110; 
+    { 8'hb9, 4'h7 }: pattern = 8'b11110110; 
+    { 8'hb9, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hb9, 4'ha }: pattern = 8'b00110110; 
+    { 8'hb9, 4'hb }: pattern = 8'b00110110; 
+    { 8'hb9, 4'hc }: pattern = 8'b00110110; 
+    { 8'hb9, 4'hd }: pattern = 8'b00110110; 
+    { 8'hb9, 4'he }: pattern = 8'b00110110; 
+    { 8'hb9, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hba, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h7 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hba, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hba, 4'ha }: pattern = 8'b00110110; 
+    { 8'hba, 4'hb }: pattern = 8'b00110110; 
+    { 8'hba, 4'hc }: pattern = 8'b00110110; 
+    { 8'hba, 4'hd }: pattern = 8'b00110110; 
+    { 8'hba, 4'he }: pattern = 8'b00110110; 
+    { 8'hba, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hbb, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hbb, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hbb, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hbb, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hbb, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hbb, 4'h5 }: pattern = 8'b11111110; 
+    { 8'hbb, 4'h6 }: pattern = 8'b00000110; 
+    { 8'hbb, 4'h7 }: pattern = 8'b11110110; 
+    { 8'hbb, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hbb, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hbb, 4'ha }: pattern = 8'b00110110; 
+    { 8'hbb, 4'hb }: pattern = 8'b00110110; 
+    { 8'hbb, 4'hc }: pattern = 8'b00110110; 
+    { 8'hbb, 4'hd }: pattern = 8'b00110110; 
+    { 8'hbb, 4'he }: pattern = 8'b00110110; 
+    { 8'hbb, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hbc, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hbc, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hbc, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hbc, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hbc, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hbc, 4'h5 }: pattern = 8'b11110110; 
+    { 8'hbc, 4'h6 }: pattern = 8'b00000110; 
+    { 8'hbc, 4'h7 }: pattern = 8'b11111110; 
+    { 8'hbc, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hbc, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hbc, 4'ha }: pattern = 8'b00000000; 
+    { 8'hbc, 4'hb }: pattern = 8'b00000000; 
+    { 8'hbc, 4'hc }: pattern = 8'b00000000; 
+    { 8'hbc, 4'hd }: pattern = 8'b00000000; 
+    { 8'hbc, 4'he }: pattern = 8'b00000000; 
+    { 8'hbc, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hbd, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hbd, 4'h7 }: pattern = 8'b11111110; 
+    { 8'hbd, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hbd, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hbd, 4'ha }: pattern = 8'b00000000; 
+    { 8'hbd, 4'hb }: pattern = 8'b00000000; 
+    { 8'hbd, 4'hc }: pattern = 8'b00000000; 
+    { 8'hbd, 4'hd }: pattern = 8'b00000000; 
+    { 8'hbd, 4'he }: pattern = 8'b00000000; 
+    { 8'hbd, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hbe, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hbe, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hbe, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hbe, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hbe, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hbe, 4'h5 }: pattern = 8'b11111000; 
+    { 8'hbe, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hbe, 4'h7 }: pattern = 8'b11111000; 
+    { 8'hbe, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hbe, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hbe, 4'ha }: pattern = 8'b00000000; 
+    { 8'hbe, 4'hb }: pattern = 8'b00000000; 
+    { 8'hbe, 4'hc }: pattern = 8'b00000000; 
+    { 8'hbe, 4'hd }: pattern = 8'b00000000; 
+    { 8'hbe, 4'he }: pattern = 8'b00000000; 
+    { 8'hbe, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hbf, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hbf, 4'h7 }: pattern = 8'b11111000; 
+    { 8'hbf, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hbf, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hbf, 4'ha }: pattern = 8'b00011000; 
+    { 8'hbf, 4'hb }: pattern = 8'b00011000; 
+    { 8'hbf, 4'hc }: pattern = 8'b00011000; 
+    { 8'hbf, 4'hd }: pattern = 8'b00011000; 
+    { 8'hbf, 4'he }: pattern = 8'b00011000; 
+    { 8'hbf, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hc0, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hc0, 4'h7 }: pattern = 8'b00011111; 
+    { 8'hc0, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hc0, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hc0, 4'ha }: pattern = 8'b00000000; 
+    { 8'hc0, 4'hb }: pattern = 8'b00000000; 
+    { 8'hc0, 4'hc }: pattern = 8'b00000000; 
+    { 8'hc0, 4'hd }: pattern = 8'b00000000; 
+    { 8'hc0, 4'he }: pattern = 8'b00000000; 
+    { 8'hc0, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hc1, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hc1, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hc1, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hc1, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hc1, 4'ha }: pattern = 8'b00000000; 
+    { 8'hc1, 4'hb }: pattern = 8'b00000000; 
+    { 8'hc1, 4'hc }: pattern = 8'b00000000; 
+    { 8'hc1, 4'hd }: pattern = 8'b00000000; 
+    { 8'hc1, 4'he }: pattern = 8'b00000000; 
+    { 8'hc1, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hc2, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hc2, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hc2, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hc2, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hc2, 4'ha }: pattern = 8'b00011000; 
+    { 8'hc2, 4'hb }: pattern = 8'b00011000; 
+    { 8'hc2, 4'hc }: pattern = 8'b00011000; 
+    { 8'hc2, 4'hd }: pattern = 8'b00011000; 
+    { 8'hc2, 4'he }: pattern = 8'b00011000; 
+    { 8'hc2, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hc3, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h7 }: pattern = 8'b00011111; 
+    { 8'hc3, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hc3, 4'ha }: pattern = 8'b00011000; 
+    { 8'hc3, 4'hb }: pattern = 8'b00011000; 
+    { 8'hc3, 4'hc }: pattern = 8'b00011000; 
+    { 8'hc3, 4'hd }: pattern = 8'b00011000; 
+    { 8'hc3, 4'he }: pattern = 8'b00011000; 
+    { 8'hc3, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hc4, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hc4, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hc4, 4'ha }: pattern = 8'b00000000; 
+    { 8'hc4, 4'hb }: pattern = 8'b00000000; 
+    { 8'hc4, 4'hc }: pattern = 8'b00000000; 
+    { 8'hc4, 4'hd }: pattern = 8'b00000000; 
+    { 8'hc4, 4'he }: pattern = 8'b00000000; 
+    { 8'hc4, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hc5, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hc5, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hc5, 4'ha }: pattern = 8'b00011000; 
+    { 8'hc5, 4'hb }: pattern = 8'b00011000; 
+    { 8'hc5, 4'hc }: pattern = 8'b00011000; 
+    { 8'hc5, 4'hd }: pattern = 8'b00011000; 
+    { 8'hc5, 4'he }: pattern = 8'b00011000; 
+    { 8'hc5, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hc6, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h5 }: pattern = 8'b00011111; 
+    { 8'hc6, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h7 }: pattern = 8'b00011111; 
+    { 8'hc6, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hc6, 4'ha }: pattern = 8'b00011000; 
+    { 8'hc6, 4'hb }: pattern = 8'b00011000; 
+    { 8'hc6, 4'hc }: pattern = 8'b00011000; 
+    { 8'hc6, 4'hd }: pattern = 8'b00011000; 
+    { 8'hc6, 4'he }: pattern = 8'b00011000; 
+    { 8'hc6, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hc7, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h7 }: pattern = 8'b00110111; 
+    { 8'hc7, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hc7, 4'ha }: pattern = 8'b00110110; 
+    { 8'hc7, 4'hb }: pattern = 8'b00110110; 
+    { 8'hc7, 4'hc }: pattern = 8'b00110110; 
+    { 8'hc7, 4'hd }: pattern = 8'b00110110; 
+    { 8'hc7, 4'he }: pattern = 8'b00110110; 
+    { 8'hc7, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hc8, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hc8, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hc8, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hc8, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hc8, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hc8, 4'h5 }: pattern = 8'b00110111; 
+    { 8'hc8, 4'h6 }: pattern = 8'b00110000; 
+    { 8'hc8, 4'h7 }: pattern = 8'b00111111; 
+    { 8'hc8, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hc8, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hc8, 4'ha }: pattern = 8'b00000000; 
+    { 8'hc8, 4'hb }: pattern = 8'b00000000; 
+    { 8'hc8, 4'hc }: pattern = 8'b00000000; 
+    { 8'hc8, 4'hd }: pattern = 8'b00000000; 
+    { 8'hc8, 4'he }: pattern = 8'b00000000; 
+    { 8'hc8, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hc9, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hc9, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hc9, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hc9, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hc9, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hc9, 4'h5 }: pattern = 8'b00111111; 
+    { 8'hc9, 4'h6 }: pattern = 8'b00110000; 
+    { 8'hc9, 4'h7 }: pattern = 8'b00110111; 
+    { 8'hc9, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hc9, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hc9, 4'ha }: pattern = 8'b00110110; 
+    { 8'hc9, 4'hb }: pattern = 8'b00110110; 
+    { 8'hc9, 4'hc }: pattern = 8'b00110110; 
+    { 8'hc9, 4'hd }: pattern = 8'b00110110; 
+    { 8'hc9, 4'he }: pattern = 8'b00110110; 
+    { 8'hc9, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hca, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hca, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hca, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hca, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hca, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hca, 4'h5 }: pattern = 8'b11110111; 
+    { 8'hca, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hca, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hca, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hca, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hca, 4'ha }: pattern = 8'b00000000; 
+    { 8'hca, 4'hb }: pattern = 8'b00000000; 
+    { 8'hca, 4'hc }: pattern = 8'b00000000; 
+    { 8'hca, 4'hd }: pattern = 8'b00000000; 
+    { 8'hca, 4'he }: pattern = 8'b00000000; 
+    { 8'hca, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hcb, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hcb, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hcb, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hcb, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hcb, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hcb, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hcb, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hcb, 4'h7 }: pattern = 8'b11110111; 
+    { 8'hcb, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hcb, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hcb, 4'ha }: pattern = 8'b00110110; 
+    { 8'hcb, 4'hb }: pattern = 8'b00110110; 
+    { 8'hcb, 4'hc }: pattern = 8'b00110110; 
+    { 8'hcb, 4'hd }: pattern = 8'b00110110; 
+    { 8'hcb, 4'he }: pattern = 8'b00110110; 
+    { 8'hcb, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hcc, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'h5 }: pattern = 8'b00110111; 
+    { 8'hcc, 4'h6 }: pattern = 8'b00110000; 
+    { 8'hcc, 4'h7 }: pattern = 8'b00110111; 
+    { 8'hcc, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hcc, 4'ha }: pattern = 8'b00110110; 
+    { 8'hcc, 4'hb }: pattern = 8'b00110110; 
+    { 8'hcc, 4'hc }: pattern = 8'b00110110; 
+    { 8'hcc, 4'hd }: pattern = 8'b00110110; 
+    { 8'hcc, 4'he }: pattern = 8'b00110110; 
+    { 8'hcc, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hcd, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hcd, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hcd, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hcd, 4'ha }: pattern = 8'b00000000; 
+    { 8'hcd, 4'hb }: pattern = 8'b00000000; 
+    { 8'hcd, 4'hc }: pattern = 8'b00000000; 
+    { 8'hcd, 4'hd }: pattern = 8'b00000000; 
+    { 8'hcd, 4'he }: pattern = 8'b00000000; 
+    { 8'hcd, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hce, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hce, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hce, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hce, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hce, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hce, 4'h5 }: pattern = 8'b11110111; 
+    { 8'hce, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hce, 4'h7 }: pattern = 8'b11110111; 
+    { 8'hce, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hce, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hce, 4'ha }: pattern = 8'b00110110; 
+    { 8'hce, 4'hb }: pattern = 8'b00110110; 
+    { 8'hce, 4'hc }: pattern = 8'b00110110; 
+    { 8'hce, 4'hd }: pattern = 8'b00110110; 
+    { 8'hce, 4'he }: pattern = 8'b00110110; 
+    { 8'hce, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hcf, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hcf, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hcf, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hcf, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hcf, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hcf, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hcf, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hcf, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hcf, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hcf, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hcf, 4'ha }: pattern = 8'b00000000; 
+    { 8'hcf, 4'hb }: pattern = 8'b00000000; 
+    { 8'hcf, 4'hc }: pattern = 8'b00000000; 
+    { 8'hcf, 4'hd }: pattern = 8'b00000000; 
+    { 8'hcf, 4'he }: pattern = 8'b00000000; 
+    { 8'hcf, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hd0, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hd0, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hd0, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hd0, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hd0, 4'ha }: pattern = 8'b00000000; 
+    { 8'hd0, 4'hb }: pattern = 8'b00000000; 
+    { 8'hd0, 4'hc }: pattern = 8'b00000000; 
+    { 8'hd0, 4'hd }: pattern = 8'b00000000; 
+    { 8'hd0, 4'he }: pattern = 8'b00000000; 
+    { 8'hd0, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hd1, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hd1, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hd1, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hd1, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hd1, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hd1, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hd1, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hd1, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hd1, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hd1, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hd1, 4'ha }: pattern = 8'b00011000; 
+    { 8'hd1, 4'hb }: pattern = 8'b00011000; 
+    { 8'hd1, 4'hc }: pattern = 8'b00011000; 
+    { 8'hd1, 4'hd }: pattern = 8'b00011000; 
+    { 8'hd1, 4'he }: pattern = 8'b00011000; 
+    { 8'hd1, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hd2, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hd2, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hd2, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hd2, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hd2, 4'ha }: pattern = 8'b00110110; 
+    { 8'hd2, 4'hb }: pattern = 8'b00110110; 
+    { 8'hd2, 4'hc }: pattern = 8'b00110110; 
+    { 8'hd2, 4'hd }: pattern = 8'b00110110; 
+    { 8'hd2, 4'he }: pattern = 8'b00110110; 
+    { 8'hd2, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hd3, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hd3, 4'h7 }: pattern = 8'b00111111; 
+    { 8'hd3, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hd3, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hd3, 4'ha }: pattern = 8'b00000000; 
+    { 8'hd3, 4'hb }: pattern = 8'b00000000; 
+    { 8'hd3, 4'hc }: pattern = 8'b00000000; 
+    { 8'hd3, 4'hd }: pattern = 8'b00000000; 
+    { 8'hd3, 4'he }: pattern = 8'b00000000; 
+    { 8'hd3, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hd4, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hd4, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hd4, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hd4, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hd4, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hd4, 4'h5 }: pattern = 8'b00011111; 
+    { 8'hd4, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hd4, 4'h7 }: pattern = 8'b00011111; 
+    { 8'hd4, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hd4, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hd4, 4'ha }: pattern = 8'b00000000; 
+    { 8'hd4, 4'hb }: pattern = 8'b00000000; 
+    { 8'hd4, 4'hc }: pattern = 8'b00000000; 
+    { 8'hd4, 4'hd }: pattern = 8'b00000000; 
+    { 8'hd4, 4'he }: pattern = 8'b00000000; 
+    { 8'hd4, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hd5, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hd5, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hd5, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hd5, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hd5, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hd5, 4'h5 }: pattern = 8'b00011111; 
+    { 8'hd5, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hd5, 4'h7 }: pattern = 8'b00011111; 
+    { 8'hd5, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hd5, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hd5, 4'ha }: pattern = 8'b00011000; 
+    { 8'hd5, 4'hb }: pattern = 8'b00011000; 
+    { 8'hd5, 4'hc }: pattern = 8'b00011000; 
+    { 8'hd5, 4'hd }: pattern = 8'b00011000; 
+    { 8'hd5, 4'he }: pattern = 8'b00011000; 
+    { 8'hd5, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hd6, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hd6, 4'h7 }: pattern = 8'b00111111; 
+    { 8'hd6, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hd6, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hd6, 4'ha }: pattern = 8'b00110110; 
+    { 8'hd6, 4'hb }: pattern = 8'b00110110; 
+    { 8'hd6, 4'hc }: pattern = 8'b00110110; 
+    { 8'hd6, 4'hd }: pattern = 8'b00110110; 
+    { 8'hd6, 4'he }: pattern = 8'b00110110; 
+    { 8'hd6, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hd7, 4'h0 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h1 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h2 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h3 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h4 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h5 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h6 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hd7, 4'h8 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'h9 }: pattern = 8'b00110110; 
+    { 8'hd7, 4'ha }: pattern = 8'b00110110; 
+    { 8'hd7, 4'hb }: pattern = 8'b00110110; 
+    { 8'hd7, 4'hc }: pattern = 8'b00110110; 
+    { 8'hd7, 4'hd }: pattern = 8'b00110110; 
+    { 8'hd7, 4'he }: pattern = 8'b00110110; 
+    { 8'hd7, 4'hf }: pattern = 8'b00110110; 
+
+    { 8'hd8, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hd8, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hd8, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hd8, 4'ha }: pattern = 8'b00011000; 
+    { 8'hd8, 4'hb }: pattern = 8'b00011000; 
+    { 8'hd8, 4'hc }: pattern = 8'b00011000; 
+    { 8'hd8, 4'hd }: pattern = 8'b00011000; 
+    { 8'hd8, 4'he }: pattern = 8'b00011000; 
+    { 8'hd8, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hd9, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hd9, 4'h7 }: pattern = 8'b11111000; 
+    { 8'hd9, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hd9, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hd9, 4'ha }: pattern = 8'b00000000; 
+    { 8'hd9, 4'hb }: pattern = 8'b00000000; 
+    { 8'hd9, 4'hc }: pattern = 8'b00000000; 
+    { 8'hd9, 4'hd }: pattern = 8'b00000000; 
+    { 8'hd9, 4'he }: pattern = 8'b00000000; 
+    { 8'hd9, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hda, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hda, 4'h7 }: pattern = 8'b00011111; 
+    { 8'hda, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hda, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hda, 4'ha }: pattern = 8'b00011000; 
+    { 8'hda, 4'hb }: pattern = 8'b00011000; 
+    { 8'hda, 4'hc }: pattern = 8'b00011000; 
+    { 8'hda, 4'hd }: pattern = 8'b00011000; 
+    { 8'hda, 4'he }: pattern = 8'b00011000; 
+    { 8'hda, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hdb, 4'h0 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h1 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h2 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h3 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h4 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h6 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h8 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'h9 }: pattern = 8'b11111111; 
+    { 8'hdb, 4'ha }: pattern = 8'b11111111; 
+    { 8'hdb, 4'hb }: pattern = 8'b11111111; 
+    { 8'hdb, 4'hc }: pattern = 8'b11111111; 
+    { 8'hdb, 4'hd }: pattern = 8'b11111111; 
+    { 8'hdb, 4'he }: pattern = 8'b11111111; 
+    { 8'hdb, 4'hf }: pattern = 8'b11111111; 
+
+    { 8'hdc, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hdc, 4'h7 }: pattern = 8'b11111111; 
+    { 8'hdc, 4'h8 }: pattern = 8'b11111111; 
+    { 8'hdc, 4'h9 }: pattern = 8'b11111111; 
+    { 8'hdc, 4'ha }: pattern = 8'b11111111; 
+    { 8'hdc, 4'hb }: pattern = 8'b11111111; 
+    { 8'hdc, 4'hc }: pattern = 8'b11111111; 
+    { 8'hdc, 4'hd }: pattern = 8'b11111111; 
+    { 8'hdc, 4'he }: pattern = 8'b11111111; 
+    { 8'hdc, 4'hf }: pattern = 8'b11111111; 
+
+    { 8'hdd, 4'h0 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h1 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h2 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h3 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h4 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h5 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h6 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h7 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h8 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'h9 }: pattern = 8'b11110000; 
+    { 8'hdd, 4'ha }: pattern = 8'b11110000; 
+    { 8'hdd, 4'hb }: pattern = 8'b11110000; 
+    { 8'hdd, 4'hc }: pattern = 8'b11110000; 
+    { 8'hdd, 4'hd }: pattern = 8'b11110000; 
+    { 8'hdd, 4'he }: pattern = 8'b11110000; 
+    { 8'hdd, 4'hf }: pattern = 8'b11110000; 
+
+    { 8'hde, 4'h0 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h1 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h2 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h3 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h4 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h5 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h6 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h7 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h8 }: pattern = 8'b00001111; 
+    { 8'hde, 4'h9 }: pattern = 8'b00001111; 
+    { 8'hde, 4'ha }: pattern = 8'b00001111; 
+    { 8'hde, 4'hb }: pattern = 8'b00001111; 
+    { 8'hde, 4'hc }: pattern = 8'b00001111; 
+    { 8'hde, 4'hd }: pattern = 8'b00001111; 
+    { 8'hde, 4'he }: pattern = 8'b00001111; 
+    { 8'hde, 4'hf }: pattern = 8'b00001111; 
+
+    { 8'hdf, 4'h0 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h1 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h2 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h3 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h4 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h5 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h6 }: pattern = 8'b11111111; 
+    { 8'hdf, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hdf, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hdf, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hdf, 4'ha }: pattern = 8'b00000000; 
+    { 8'hdf, 4'hb }: pattern = 8'b00000000; 
+    { 8'hdf, 4'hc }: pattern = 8'b00000000; 
+    { 8'hdf, 4'hd }: pattern = 8'b00000000; 
+    { 8'hdf, 4'he }: pattern = 8'b00000000; 
+    { 8'hdf, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he0, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he0, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he0, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he0, 4'h3 }: pattern = 8'b00000000; 
+    { 8'he0, 4'h4 }: pattern = 8'b00000000; 
+    { 8'he0, 4'h5 }: pattern = 8'b01110110; 
+    { 8'he0, 4'h6 }: pattern = 8'b11011100; 
+    { 8'he0, 4'h7 }: pattern = 8'b11011000; 
+    { 8'he0, 4'h8 }: pattern = 8'b11011000; 
+    { 8'he0, 4'h9 }: pattern = 8'b11011000; 
+    { 8'he0, 4'ha }: pattern = 8'b11011100; 
+    { 8'he0, 4'hb }: pattern = 8'b01110110; 
+    { 8'he0, 4'hc }: pattern = 8'b00000000; 
+    { 8'he0, 4'hd }: pattern = 8'b00000000; 
+    { 8'he0, 4'he }: pattern = 8'b00000000; 
+    { 8'he0, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he1, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he1, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he1, 4'h2 }: pattern = 8'b01111000; 
+    { 8'he1, 4'h3 }: pattern = 8'b11001100; 
+    { 8'he1, 4'h4 }: pattern = 8'b11001100; 
+    { 8'he1, 4'h5 }: pattern = 8'b11001100; 
+    { 8'he1, 4'h6 }: pattern = 8'b11011000; 
+    { 8'he1, 4'h7 }: pattern = 8'b11001100; 
+    { 8'he1, 4'h8 }: pattern = 8'b11000110; 
+    { 8'he1, 4'h9 }: pattern = 8'b11000110; 
+    { 8'he1, 4'ha }: pattern = 8'b11000110; 
+    { 8'he1, 4'hb }: pattern = 8'b11001100; 
+    { 8'he1, 4'hc }: pattern = 8'b00000000; 
+    { 8'he1, 4'hd }: pattern = 8'b00000000; 
+    { 8'he1, 4'he }: pattern = 8'b00000000; 
+    { 8'he1, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he2, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he2, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he2, 4'h2 }: pattern = 8'b11111110; 
+    { 8'he2, 4'h3 }: pattern = 8'b11000110; 
+    { 8'he2, 4'h4 }: pattern = 8'b11000110; 
+    { 8'he2, 4'h5 }: pattern = 8'b11000000; 
+    { 8'he2, 4'h6 }: pattern = 8'b11000000; 
+    { 8'he2, 4'h7 }: pattern = 8'b11000000; 
+    { 8'he2, 4'h8 }: pattern = 8'b11000000; 
+    { 8'he2, 4'h9 }: pattern = 8'b11000000; 
+    { 8'he2, 4'ha }: pattern = 8'b11000000; 
+    { 8'he2, 4'hb }: pattern = 8'b11000000; 
+    { 8'he2, 4'hc }: pattern = 8'b00000000; 
+    { 8'he2, 4'hd }: pattern = 8'b00000000; 
+    { 8'he2, 4'he }: pattern = 8'b00000000; 
+    { 8'he2, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he3, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he3, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he3, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he3, 4'h3 }: pattern = 8'b00000000; 
+    { 8'he3, 4'h4 }: pattern = 8'b11111110; 
+    { 8'he3, 4'h5 }: pattern = 8'b01101100; 
+    { 8'he3, 4'h6 }: pattern = 8'b01101100; 
+    { 8'he3, 4'h7 }: pattern = 8'b01101100; 
+    { 8'he3, 4'h8 }: pattern = 8'b01101100; 
+    { 8'he3, 4'h9 }: pattern = 8'b01101100; 
+    { 8'he3, 4'ha }: pattern = 8'b01101100; 
+    { 8'he3, 4'hb }: pattern = 8'b01101100; 
+    { 8'he3, 4'hc }: pattern = 8'b00000000; 
+    { 8'he3, 4'hd }: pattern = 8'b00000000; 
+    { 8'he3, 4'he }: pattern = 8'b00000000; 
+    { 8'he3, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he4, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he4, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he4, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he4, 4'h3 }: pattern = 8'b11111110; 
+    { 8'he4, 4'h4 }: pattern = 8'b11000110; 
+    { 8'he4, 4'h5 }: pattern = 8'b01100000; 
+    { 8'he4, 4'h6 }: pattern = 8'b00110000; 
+    { 8'he4, 4'h7 }: pattern = 8'b00011000; 
+    { 8'he4, 4'h8 }: pattern = 8'b00110000; 
+    { 8'he4, 4'h9 }: pattern = 8'b01100000; 
+    { 8'he4, 4'ha }: pattern = 8'b11000110; 
+    { 8'he4, 4'hb }: pattern = 8'b11111110; 
+    { 8'he4, 4'hc }: pattern = 8'b00000000; 
+    { 8'he4, 4'hd }: pattern = 8'b00000000; 
+    { 8'he4, 4'he }: pattern = 8'b00000000; 
+    { 8'he4, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he5, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he5, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he5, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he5, 4'h3 }: pattern = 8'b00000000; 
+    { 8'he5, 4'h4 }: pattern = 8'b00000000; 
+    { 8'he5, 4'h5 }: pattern = 8'b01111110; 
+    { 8'he5, 4'h6 }: pattern = 8'b11011000; 
+    { 8'he5, 4'h7 }: pattern = 8'b11011000; 
+    { 8'he5, 4'h8 }: pattern = 8'b11011000; 
+    { 8'he5, 4'h9 }: pattern = 8'b11011000; 
+    { 8'he5, 4'ha }: pattern = 8'b11011000; 
+    { 8'he5, 4'hb }: pattern = 8'b01110000; 
+    { 8'he5, 4'hc }: pattern = 8'b00000000; 
+    { 8'he5, 4'hd }: pattern = 8'b00000000; 
+    { 8'he5, 4'he }: pattern = 8'b00000000; 
+    { 8'he5, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he6, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he6, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he6, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he6, 4'h3 }: pattern = 8'b00000000; 
+    { 8'he6, 4'h4 }: pattern = 8'b01100110; 
+    { 8'he6, 4'h5 }: pattern = 8'b01100110; 
+    { 8'he6, 4'h6 }: pattern = 8'b01100110; 
+    { 8'he6, 4'h7 }: pattern = 8'b01100110; 
+    { 8'he6, 4'h8 }: pattern = 8'b01100110; 
+    { 8'he6, 4'h9 }: pattern = 8'b01111100; 
+    { 8'he6, 4'ha }: pattern = 8'b01100000; 
+    { 8'he6, 4'hb }: pattern = 8'b01100000; 
+    { 8'he6, 4'hc }: pattern = 8'b11000000; 
+    { 8'he6, 4'hd }: pattern = 8'b00000000; 
+    { 8'he6, 4'he }: pattern = 8'b00000000; 
+    { 8'he6, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he7, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he7, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he7, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he7, 4'h3 }: pattern = 8'b00000000; 
+    { 8'he7, 4'h4 }: pattern = 8'b01110110; 
+    { 8'he7, 4'h5 }: pattern = 8'b11011100; 
+    { 8'he7, 4'h6 }: pattern = 8'b00011000; 
+    { 8'he7, 4'h7 }: pattern = 8'b00011000; 
+    { 8'he7, 4'h8 }: pattern = 8'b00011000; 
+    { 8'he7, 4'h9 }: pattern = 8'b00011000; 
+    { 8'he7, 4'ha }: pattern = 8'b00011000; 
+    { 8'he7, 4'hb }: pattern = 8'b00011000; 
+    { 8'he7, 4'hc }: pattern = 8'b00000000; 
+    { 8'he7, 4'hd }: pattern = 8'b00000000; 
+    { 8'he7, 4'he }: pattern = 8'b00000000; 
+    { 8'he7, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he8, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he8, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he8, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he8, 4'h3 }: pattern = 8'b01111110; 
+    { 8'he8, 4'h4 }: pattern = 8'b00011000; 
+    { 8'he8, 4'h5 }: pattern = 8'b00111100; 
+    { 8'he8, 4'h6 }: pattern = 8'b01100110; 
+    { 8'he8, 4'h7 }: pattern = 8'b01100110; 
+    { 8'he8, 4'h8 }: pattern = 8'b01100110; 
+    { 8'he8, 4'h9 }: pattern = 8'b00111100; 
+    { 8'he8, 4'ha }: pattern = 8'b00011000; 
+    { 8'he8, 4'hb }: pattern = 8'b01111110; 
+    { 8'he8, 4'hc }: pattern = 8'b00000000; 
+    { 8'he8, 4'hd }: pattern = 8'b00000000; 
+    { 8'he8, 4'he }: pattern = 8'b00000000; 
+    { 8'he8, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'he9, 4'h0 }: pattern = 8'b00000000; 
+    { 8'he9, 4'h1 }: pattern = 8'b00000000; 
+    { 8'he9, 4'h2 }: pattern = 8'b00000000; 
+    { 8'he9, 4'h3 }: pattern = 8'b00111000; 
+    { 8'he9, 4'h4 }: pattern = 8'b01101100; 
+    { 8'he9, 4'h5 }: pattern = 8'b11000110; 
+    { 8'he9, 4'h6 }: pattern = 8'b11000110; 
+    { 8'he9, 4'h7 }: pattern = 8'b11111110; 
+    { 8'he9, 4'h8 }: pattern = 8'b11000110; 
+    { 8'he9, 4'h9 }: pattern = 8'b11000110; 
+    { 8'he9, 4'ha }: pattern = 8'b01101100; 
+    { 8'he9, 4'hb }: pattern = 8'b00111000; 
+    { 8'he9, 4'hc }: pattern = 8'b00000000; 
+    { 8'he9, 4'hd }: pattern = 8'b00000000; 
+    { 8'he9, 4'he }: pattern = 8'b00000000; 
+    { 8'he9, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hea, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hea, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hea, 4'h2 }: pattern = 8'b00111000; 
+    { 8'hea, 4'h3 }: pattern = 8'b01101100; 
+    { 8'hea, 4'h4 }: pattern = 8'b11000110; 
+    { 8'hea, 4'h5 }: pattern = 8'b11000110; 
+    { 8'hea, 4'h6 }: pattern = 8'b11000110; 
+    { 8'hea, 4'h7 }: pattern = 8'b01101100; 
+    { 8'hea, 4'h8 }: pattern = 8'b01101100; 
+    { 8'hea, 4'h9 }: pattern = 8'b01101100; 
+    { 8'hea, 4'ha }: pattern = 8'b01101100; 
+    { 8'hea, 4'hb }: pattern = 8'b11101110; 
+    { 8'hea, 4'hc }: pattern = 8'b00000000; 
+    { 8'hea, 4'hd }: pattern = 8'b00000000; 
+    { 8'hea, 4'he }: pattern = 8'b00000000; 
+    { 8'hea, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'heb, 4'h0 }: pattern = 8'b00000000; 
+    { 8'heb, 4'h1 }: pattern = 8'b00000000; 
+    { 8'heb, 4'h2 }: pattern = 8'b00011110; 
+    { 8'heb, 4'h3 }: pattern = 8'b00110000; 
+    { 8'heb, 4'h4 }: pattern = 8'b00011000; 
+    { 8'heb, 4'h5 }: pattern = 8'b00001100; 
+    { 8'heb, 4'h6 }: pattern = 8'b00111110; 
+    { 8'heb, 4'h7 }: pattern = 8'b01100110; 
+    { 8'heb, 4'h8 }: pattern = 8'b01100110; 
+    { 8'heb, 4'h9 }: pattern = 8'b01100110; 
+    { 8'heb, 4'ha }: pattern = 8'b01100110; 
+    { 8'heb, 4'hb }: pattern = 8'b00111100; 
+    { 8'heb, 4'hc }: pattern = 8'b00000000; 
+    { 8'heb, 4'hd }: pattern = 8'b00000000; 
+    { 8'heb, 4'he }: pattern = 8'b00000000; 
+    { 8'heb, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hec, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hec, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hec, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hec, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hec, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hec, 4'h5 }: pattern = 8'b01111110; 
+    { 8'hec, 4'h6 }: pattern = 8'b11011011; 
+    { 8'hec, 4'h7 }: pattern = 8'b11011011; 
+    { 8'hec, 4'h8 }: pattern = 8'b11011011; 
+    { 8'hec, 4'h9 }: pattern = 8'b01111110; 
+    { 8'hec, 4'ha }: pattern = 8'b00000000; 
+    { 8'hec, 4'hb }: pattern = 8'b00000000; 
+    { 8'hec, 4'hc }: pattern = 8'b00000000; 
+    { 8'hec, 4'hd }: pattern = 8'b00000000; 
+    { 8'hec, 4'he }: pattern = 8'b00000000; 
+    { 8'hec, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hed, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hed, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hed, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hed, 4'h3 }: pattern = 8'b00000011; 
+    { 8'hed, 4'h4 }: pattern = 8'b00000110; 
+    { 8'hed, 4'h5 }: pattern = 8'b01111110; 
+    { 8'hed, 4'h6 }: pattern = 8'b11011011; 
+    { 8'hed, 4'h7 }: pattern = 8'b11011011; 
+    { 8'hed, 4'h8 }: pattern = 8'b11110011; 
+    { 8'hed, 4'h9 }: pattern = 8'b01111110; 
+    { 8'hed, 4'ha }: pattern = 8'b01100000; 
+    { 8'hed, 4'hb }: pattern = 8'b11000000; 
+    { 8'hed, 4'hc }: pattern = 8'b00000000; 
+    { 8'hed, 4'hd }: pattern = 8'b00000000; 
+    { 8'hed, 4'he }: pattern = 8'b00000000; 
+    { 8'hed, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hee, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hee, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hee, 4'h2 }: pattern = 8'b00011100; 
+    { 8'hee, 4'h3 }: pattern = 8'b00110000; 
+    { 8'hee, 4'h4 }: pattern = 8'b01100000; 
+    { 8'hee, 4'h5 }: pattern = 8'b01100000; 
+    { 8'hee, 4'h6 }: pattern = 8'b01111100; 
+    { 8'hee, 4'h7 }: pattern = 8'b01100000; 
+    { 8'hee, 4'h8 }: pattern = 8'b01100000; 
+    { 8'hee, 4'h9 }: pattern = 8'b01100000; 
+    { 8'hee, 4'ha }: pattern = 8'b00110000; 
+    { 8'hee, 4'hb }: pattern = 8'b00011100; 
+    { 8'hee, 4'hc }: pattern = 8'b00000000; 
+    { 8'hee, 4'hd }: pattern = 8'b00000000; 
+    { 8'hee, 4'he }: pattern = 8'b00000000; 
+    { 8'hee, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hef, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hef, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hef, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hef, 4'h3 }: pattern = 8'b01111100; 
+    { 8'hef, 4'h4 }: pattern = 8'b11000110; 
+    { 8'hef, 4'h5 }: pattern = 8'b11000110; 
+    { 8'hef, 4'h6 }: pattern = 8'b11000110; 
+    { 8'hef, 4'h7 }: pattern = 8'b11000110; 
+    { 8'hef, 4'h8 }: pattern = 8'b11000110; 
+    { 8'hef, 4'h9 }: pattern = 8'b11000110; 
+    { 8'hef, 4'ha }: pattern = 8'b11000110; 
+    { 8'hef, 4'hb }: pattern = 8'b11000110; 
+    { 8'hef, 4'hc }: pattern = 8'b00000000; 
+    { 8'hef, 4'hd }: pattern = 8'b00000000; 
+    { 8'hef, 4'he }: pattern = 8'b00000000; 
+    { 8'hef, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf0, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h4 }: pattern = 8'b11111110; 
+    { 8'hf0, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h7 }: pattern = 8'b11111110; 
+    { 8'hf0, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hf0, 4'ha }: pattern = 8'b11111110; 
+    { 8'hf0, 4'hb }: pattern = 8'b00000000; 
+    { 8'hf0, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf0, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf0, 4'he }: pattern = 8'b00000000; 
+    { 8'hf0, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf1, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf1, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf1, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf1, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hf1, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hf1, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hf1, 4'h6 }: pattern = 8'b01111110; 
+    { 8'hf1, 4'h7 }: pattern = 8'b00011000; 
+    { 8'hf1, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hf1, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hf1, 4'ha }: pattern = 8'b00000000; 
+    { 8'hf1, 4'hb }: pattern = 8'b11111111; 
+    { 8'hf1, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf1, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf1, 4'he }: pattern = 8'b00000000; 
+    { 8'hf1, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf2, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf2, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf2, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf2, 4'h3 }: pattern = 8'b00110000; 
+    { 8'hf2, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hf2, 4'h5 }: pattern = 8'b00001100; 
+    { 8'hf2, 4'h6 }: pattern = 8'b00000110; 
+    { 8'hf2, 4'h7 }: pattern = 8'b00001100; 
+    { 8'hf2, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hf2, 4'h9 }: pattern = 8'b00110000; 
+    { 8'hf2, 4'ha }: pattern = 8'b00000000; 
+    { 8'hf2, 4'hb }: pattern = 8'b01111110; 
+    { 8'hf2, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf2, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf2, 4'he }: pattern = 8'b00000000; 
+    { 8'hf2, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf3, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf3, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf3, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf3, 4'h3 }: pattern = 8'b00001100; 
+    { 8'hf3, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hf3, 4'h5 }: pattern = 8'b00110000; 
+    { 8'hf3, 4'h6 }: pattern = 8'b01100000; 
+    { 8'hf3, 4'h7 }: pattern = 8'b00110000; 
+    { 8'hf3, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hf3, 4'h9 }: pattern = 8'b00001100; 
+    { 8'hf3, 4'ha }: pattern = 8'b00000000; 
+    { 8'hf3, 4'hb }: pattern = 8'b01111110; 
+    { 8'hf3, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf3, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf3, 4'he }: pattern = 8'b00000000; 
+    { 8'hf3, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf4, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf4, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf4, 4'h2 }: pattern = 8'b00001110; 
+    { 8'hf4, 4'h3 }: pattern = 8'b00011011; 
+    { 8'hf4, 4'h4 }: pattern = 8'b00011011; 
+    { 8'hf4, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hf4, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hf4, 4'h7 }: pattern = 8'b00011000; 
+    { 8'hf4, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hf4, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hf4, 4'ha }: pattern = 8'b00011000; 
+    { 8'hf4, 4'hb }: pattern = 8'b00011000; 
+    { 8'hf4, 4'hc }: pattern = 8'b00011000; 
+    { 8'hf4, 4'hd }: pattern = 8'b00011000; 
+    { 8'hf4, 4'he }: pattern = 8'b00011000; 
+    { 8'hf4, 4'hf }: pattern = 8'b00011000; 
+
+    { 8'hf5, 4'h0 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h1 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h2 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h3 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h6 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h7 }: pattern = 8'b00011000; 
+    { 8'hf5, 4'h8 }: pattern = 8'b11011000; 
+    { 8'hf5, 4'h9 }: pattern = 8'b11011000; 
+    { 8'hf5, 4'ha }: pattern = 8'b11011000; 
+    { 8'hf5, 4'hb }: pattern = 8'b01110000; 
+    { 8'hf5, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf5, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf5, 4'he }: pattern = 8'b00000000; 
+    { 8'hf5, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf6, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf6, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf6, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf6, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hf6, 4'h4 }: pattern = 8'b00011000; 
+    { 8'hf6, 4'h5 }: pattern = 8'b00011000; 
+    { 8'hf6, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hf6, 4'h7 }: pattern = 8'b01111110; 
+    { 8'hf6, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hf6, 4'h9 }: pattern = 8'b00011000; 
+    { 8'hf6, 4'ha }: pattern = 8'b00011000; 
+    { 8'hf6, 4'hb }: pattern = 8'b00000000; 
+    { 8'hf6, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf6, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf6, 4'he }: pattern = 8'b00000000; 
+    { 8'hf6, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf7, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf7, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf7, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf7, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hf7, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hf7, 4'h5 }: pattern = 8'b01110110; 
+    { 8'hf7, 4'h6 }: pattern = 8'b11011100; 
+    { 8'hf7, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hf7, 4'h8 }: pattern = 8'b01110110; 
+    { 8'hf7, 4'h9 }: pattern = 8'b11011100; 
+    { 8'hf7, 4'ha }: pattern = 8'b00000000; 
+    { 8'hf7, 4'hb }: pattern = 8'b00000000; 
+    { 8'hf7, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf7, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf7, 4'he }: pattern = 8'b00000000; 
+    { 8'hf7, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf8, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf8, 4'h1 }: pattern = 8'b00111000; 
+    { 8'hf8, 4'h2 }: pattern = 8'b01101100; 
+    { 8'hf8, 4'h3 }: pattern = 8'b01101100; 
+    { 8'hf8, 4'h4 }: pattern = 8'b00111000; 
+    { 8'hf8, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hf8, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hf8, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hf8, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hf8, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hf8, 4'ha }: pattern = 8'b00000000; 
+    { 8'hf8, 4'hb }: pattern = 8'b00000000; 
+    { 8'hf8, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf8, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf8, 4'he }: pattern = 8'b00000000; 
+    { 8'hf8, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hf9, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'h7 }: pattern = 8'b00011000; 
+    { 8'hf9, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hf9, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hf9, 4'ha }: pattern = 8'b00000000; 
+    { 8'hf9, 4'hb }: pattern = 8'b00000000; 
+    { 8'hf9, 4'hc }: pattern = 8'b00000000; 
+    { 8'hf9, 4'hd }: pattern = 8'b00000000; 
+    { 8'hf9, 4'he }: pattern = 8'b00000000; 
+    { 8'hf9, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hfa, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'h8 }: pattern = 8'b00011000; 
+    { 8'hfa, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hfa, 4'ha }: pattern = 8'b00000000; 
+    { 8'hfa, 4'hb }: pattern = 8'b00000000; 
+    { 8'hfa, 4'hc }: pattern = 8'b00000000; 
+    { 8'hfa, 4'hd }: pattern = 8'b00000000; 
+    { 8'hfa, 4'he }: pattern = 8'b00000000; 
+    { 8'hfa, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hfb, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hfb, 4'h1 }: pattern = 8'b00001111; 
+    { 8'hfb, 4'h2 }: pattern = 8'b00001100; 
+    { 8'hfb, 4'h3 }: pattern = 8'b00001100; 
+    { 8'hfb, 4'h4 }: pattern = 8'b00001100; 
+    { 8'hfb, 4'h5 }: pattern = 8'b00001100; 
+    { 8'hfb, 4'h6 }: pattern = 8'b00001100; 
+    { 8'hfb, 4'h7 }: pattern = 8'b11101100; 
+    { 8'hfb, 4'h8 }: pattern = 8'b01101100; 
+    { 8'hfb, 4'h9 }: pattern = 8'b01101100; 
+    { 8'hfb, 4'ha }: pattern = 8'b00111100; 
+    { 8'hfb, 4'hb }: pattern = 8'b00011100; 
+    { 8'hfb, 4'hc }: pattern = 8'b00000000; 
+    { 8'hfb, 4'hd }: pattern = 8'b00000000; 
+    { 8'hfb, 4'he }: pattern = 8'b00000000; 
+    { 8'hfb, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hfc, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hfc, 4'h1 }: pattern = 8'b11011000; 
+    { 8'hfc, 4'h2 }: pattern = 8'b01101100; 
+    { 8'hfc, 4'h3 }: pattern = 8'b01101100; 
+    { 8'hfc, 4'h4 }: pattern = 8'b01101100; 
+    { 8'hfc, 4'h5 }: pattern = 8'b01101100; 
+    { 8'hfc, 4'h6 }: pattern = 8'b01101100; 
+    { 8'hfc, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hfc, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hfc, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hfc, 4'ha }: pattern = 8'b00000000; 
+    { 8'hfc, 4'hb }: pattern = 8'b00000000; 
+    { 8'hfc, 4'hc }: pattern = 8'b00000000; 
+    { 8'hfc, 4'hd }: pattern = 8'b00000000; 
+    { 8'hfc, 4'he }: pattern = 8'b00000000; 
+    { 8'hfc, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hfd, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hfd, 4'h1 }: pattern = 8'b01110000; 
+    { 8'hfd, 4'h2 }: pattern = 8'b11011000; 
+    { 8'hfd, 4'h3 }: pattern = 8'b00110000; 
+    { 8'hfd, 4'h4 }: pattern = 8'b01100000; 
+    { 8'hfd, 4'h5 }: pattern = 8'b11001000; 
+    { 8'hfd, 4'h6 }: pattern = 8'b11111000; 
+    { 8'hfd, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hfd, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hfd, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hfd, 4'ha }: pattern = 8'b00000000; 
+    { 8'hfd, 4'hb }: pattern = 8'b00000000; 
+    { 8'hfd, 4'hc }: pattern = 8'b00000000; 
+    { 8'hfd, 4'hd }: pattern = 8'b00000000; 
+    { 8'hfd, 4'he }: pattern = 8'b00000000; 
+    { 8'hfd, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hfe, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hfe, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hfe, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hfe, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hfe, 4'h4 }: pattern = 8'b01111100; 
+    { 8'hfe, 4'h5 }: pattern = 8'b01111100; 
+    { 8'hfe, 4'h6 }: pattern = 8'b01111100; 
+    { 8'hfe, 4'h7 }: pattern = 8'b01111100; 
+    { 8'hfe, 4'h8 }: pattern = 8'b01111100; 
+    { 8'hfe, 4'h9 }: pattern = 8'b01111100; 
+    { 8'hfe, 4'ha }: pattern = 8'b01111100; 
+    { 8'hfe, 4'hb }: pattern = 8'b00000000; 
+    { 8'hfe, 4'hc }: pattern = 8'b00000000; 
+    { 8'hfe, 4'hd }: pattern = 8'b00000000; 
+    { 8'hfe, 4'he }: pattern = 8'b00000000; 
+    { 8'hfe, 4'hf }: pattern = 8'b00000000; 
+
+    { 8'hff, 4'h0 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h1 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h2 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h3 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h4 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h5 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h6 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h7 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h8 }: pattern = 8'b00000000; 
+    { 8'hff, 4'h9 }: pattern = 8'b00000000; 
+    { 8'hff, 4'ha }: pattern = 8'b00000000; 
+    { 8'hff, 4'hb }: pattern = 8'b00000000; 
+    { 8'hff, 4'hc }: pattern = 8'b00000000; 
+    { 8'hff, 4'hd }: pattern = 8'b00000000; 
+    { 8'hff, 4'he }: pattern = 8'b00000000; 
+    { 8'hff, 4'hf }: pattern = 8'b00000000; 
+  endcase
+
+endmodule
 
-  assign vga_red = 3'b000;
-  assign vga_green = 3'b000;
-  assign vga_blue = 3'b000;
-    
-endmodule // top