test noise out of band

This commit is contained in:
Ramón Martínez
2021-05-23 19:39:10 +02:00
parent 03fcd99c3a
commit 3503cd0d11
10 changed files with 852 additions and 1074 deletions

View File

@@ -202,9 +202,9 @@ assign {DDRAM_CLK, DDRAM_BURSTCNT, DDRAM_ADDR, DDRAM_DIN, DDRAM_BE, DDRAM_RD, DD
assign VGA_F1 = 0;
assign VGA_SCALER = 0;
assign LED_DISK = 0;
assign LED_DISK = ioctl_download;
assign LED_POWER = 0;
assign LED_USER = ioctl_download;
assign LED_USER = 0;
assign BUTTONS = 0;
assign VIDEO_ARX = (!status[19:18]) ? (status[14] ? 12'd5 : 12'd4) : (status[19:18] - 1'd1);
@@ -303,16 +303,21 @@ wire clock_locked;
wire clk_2m5;
wire clk_sys;
// pll pll
// (
// .refclk(CLK_50M),
// .rst(0),
// //.outclk_0(clk_sys_o2),
// .outclk_0(clk_sys),
// .outclk_1(clk_sys_vp),
// .outclk_2(clk_2m5),
// .locked(clock_locked)
// );
////////////The Voice /////////////////////////////////////////////////
wire clk_250k;
pll_thevoice pll_thevoice
(
.inclk0(CLK_50M),
.c0 (clk_250k),
.c1 (clk_2m5)
);
////////////////////////////////////////////////////////////////////////
wire [63:0] reconfig_to_pll;
wire [63:0] reconfig_from_pll;
@@ -321,7 +326,7 @@ pll pll
(
.refclk(CLK_50M),
.rst(0),
.outclk_0(clk_2m5),
.outclk_0(),
.outclk_1(clk_sys),
.reconfig_to_pll(reconfig_to_pll),
.reconfig_from_pll(reconfig_from_pll),
@@ -459,6 +464,8 @@ vp_console vp
.clk_i (clk_sys),
.clk_cpu_en_i (clk_cpu_en),
.clk_vdc_en_i (clk_vdc_en),
.clk_250k (clk_250k),
.clk_2m5 (clk_2m5),
.res_n_i (~reset & joy_reset), // low to reset
@@ -472,7 +479,7 @@ vp_console vp
.cart_bs0_o (cart_bank_0), // Bank switch 0
.cart_bs1_o (cart_bank_1), // Bank Switch 1
.cart_psen_n_o (cart_rd_n), // Program Store Enable (read)
.cart_t0_i (kb_read_ack || !ldq), // KB/Voice ack
.cart_t0_i (),
.cart_t0_o (),
.cart_t0_dir_o (),
// Char Rom data
@@ -503,8 +510,13 @@ vp_console vp
// Sound
.snd_o (),
.snd_vec_o (snd)
);
.snd_vec_o (snd),
//The voice
.voice_enable (VOICE),
.noise_voice_o (noise_voice),
.snd_voice_o (voice_out)
);
////////////////////////////////////////////////////////////////////////
rom rom
@@ -572,18 +584,18 @@ always @(*)
//////////////////////////// SOUND ////////////////////////////////////
wire [3:0] snd;
wire signed [15:0] voice_out;
wire signed [15:0] noise_voice;
wire cart_wr_n;
wire [7:0] cart_di;
// The Voice info:
// $80 to $FF voice writes
// Voice bank select:
// $E4 internal voice rom bank
// $E8, $E9, and $EA external rom banks
// T0_i high if SP0256 command buffer full
wire signed [14:0] sound_s = {1'b0,snd,snd,snd,2'b0};
//wire signed [14:0] voice_s = VOICE ? {voice_out[9],voice_out[9:1],4'b0} : 14'b0;
wire signed [15:0] voice_s = VOICE ? {1'b0,voice_out[11:0],voice_out[15:10]} : 16'b0;
assign AUDIO_L = VOICE ? {4'b0,snd,snd,4'b0} + voice_out * 2 :{2'b0, snd, snd,6'b0};//{audio, 6'd0};
assign AUDIO_R = AUDIO_L;
//assign AUDIO_L = sound_s + voice_s;
assign AUDIO_L = {voice_out[11:0],noise_voice[15:12]};
assign AUDIO_R = snd;
assign AUDIO_S = 1;
assign AUDIO_MIX = 0;
@@ -810,39 +822,6 @@ wire [1:0] joy_action = {~joya[4], ~joyb[4]};
wire joy_reset = ~joya[5] & ~joyb[5];
////////////The Voice /////////////////////////////////////////////////
reg signed [9:0] voice_out;
wire ldq;
sp0256 sp0256 (
.clk_2m5 (clk_2m5),
.reset (rst_a_n),
.lrq (ldq),
.data_in (rom_addr[6:0]),
.ald (ald),
.audio_out (voice_out)
);
wire ald = !rom_addr[7] | cart_wr_n | cart_cs;
wire rst_a_n;
ls74 ls74
(
.d (cart_di[5]),
.clr (VOICE? 1'b1: 1'b0),
.q (rst_a_n),
.pre (1'b1),
.clk (ald)
);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LUT using calibrated palette

View File

@@ -1,34 +0,0 @@
--
-- 74LS74
--
library ieee;
use ieee.std_logic_1164.all;
ENTITY ls74 IS
PORT(d,
clr,
pre,
clk : IN std_logic;
q : OUT std_logic);
END ls74;
ARCHITECTURE behav OF ls74 IS
BEGIN
PROCESS(clk, clr, pre)
BEGIN
IF clr = '0' THEN
q <= '0' AFTER 25 ns;
ELSIF pre = '0' THEN
q <= '1' AFTER 13 ns;
ELSIF clk'EVENT AND clk = '1' THEN
IF d = '1' THEN
q <= '1' AFTER 13 ns;
ELSE
q <= '0' AFTER 25 ns;
END IF;
END IF;
END PROCESS;
END behav;

View File

@@ -1,66 +0,0 @@
//============================================================================
// Audio compressor (signed samples)
//
// Copyright (C) 2018 Sorgelig
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//============================================================================
module compressor
(
input clk,
input [9:0] din,
output [8:0] dout
);
always @(posedge clk) dout <= {din[9], din[9] ? ~tbl[~din[8:0]] : tbl[din[8:0]]};
wire [7:0] tbl[0:511] =
'{
8'h00, 8'h01, 8'h02, 8'h03, 8'h04, 8'h06, 8'h07, 8'h08, 8'h09, 8'h0B, 8'h0C, 8'h0D, 8'h0E, 8'h0F, 8'h11, 8'h12,
8'h13, 8'h14, 8'h16, 8'h17, 8'h18, 8'h19, 8'h1B, 8'h1C, 8'h1D, 8'h1E, 8'h1F, 8'h21, 8'h22, 8'h23, 8'h24, 8'h25,
8'h27, 8'h28, 8'h29, 8'h2A, 8'h2C, 8'h2D, 8'h2E, 8'h2F, 8'h30, 8'h32, 8'h33, 8'h34, 8'h35, 8'h36, 8'h37, 8'h39,
8'h3A, 8'h3B, 8'h3C, 8'h3D, 8'h3F, 8'h40, 8'h41, 8'h42, 8'h43, 8'h44, 8'h46, 8'h47, 8'h48, 8'h49, 8'h4A, 8'h4B,
8'h4D, 8'h4E, 8'h4F, 8'h50, 8'h51, 8'h52, 8'h53, 8'h55, 8'h56, 8'h57, 8'h58, 8'h59, 8'h5A, 8'h5B, 8'h5C, 8'h5E,
8'h5F, 8'h60, 8'h61, 8'h62, 8'h63, 8'h64, 8'h65, 8'h66, 8'h67, 8'h69, 8'h6A, 8'h6B, 8'h6C, 8'h6D, 8'h6E, 8'h6F,
8'h70, 8'h71, 8'h72, 8'h73, 8'h74, 8'h75, 8'h76, 8'h77, 8'h78, 8'h79, 8'h7A, 8'h7B, 8'h7C, 8'h7D, 8'h7E, 8'h7F,
8'h80, 8'h81, 8'h82, 8'h83, 8'h84, 8'h85, 8'h86, 8'h87, 8'h88, 8'h89, 8'h8A, 8'h8B, 8'h8C, 8'h8D, 8'h8E, 8'h8F,
8'h90, 8'h91, 8'h92, 8'h93, 8'h94, 8'h95, 8'h96, 8'h96, 8'h97, 8'h98, 8'h99, 8'h9A, 8'h9B, 8'h9C, 8'h9D, 8'h9E,
8'h9E, 8'h9F, 8'hA0, 8'hA1, 8'hA2, 8'hA3, 8'hA4, 8'hA4, 8'hA5, 8'hA6, 8'hA7, 8'hA8, 8'hA9, 8'hA9, 8'hAA, 8'hAB,
8'hAC, 8'hAD, 8'hAD, 8'hAE, 8'hAF, 8'hB0, 8'hB1, 8'hB1, 8'hB2, 8'hB3, 8'hB4, 8'hB4, 8'hB5, 8'hB6, 8'hB7, 8'hB7,
8'hB8, 8'hB9, 8'hB9, 8'hBA, 8'hBB, 8'hBC, 8'hBC, 8'hBD, 8'hBE, 8'hBE, 8'hBF, 8'hC0, 8'hC0, 8'hC1, 8'hC2, 8'hC2,
8'hC3, 8'hC4, 8'hC4, 8'hC5, 8'hC6, 8'hC6, 8'hC7, 8'hC8, 8'hC8, 8'hC9, 8'hC9, 8'hCA, 8'hCB, 8'hCB, 8'hCC, 8'hCC,
8'hCD, 8'hCE, 8'hCE, 8'hCF, 8'hCF, 8'hD0, 8'hD0, 8'hD1, 8'hD2, 8'hD2, 8'hD3, 8'hD3, 8'hD4, 8'hD4, 8'hD5, 8'hD5,
8'hD6, 8'hD6, 8'hD7, 8'hD7, 8'hD8, 8'hD8, 8'hD9, 8'hD9, 8'hDA, 8'hDA, 8'hDB, 8'hDB, 8'hDC, 8'hDC, 8'hDD, 8'hDD,
8'hDE, 8'hDE, 8'hDE, 8'hDF, 8'hDF, 8'hE0, 8'hE0, 8'hE1, 8'hE1, 8'hE1, 8'hE2, 8'hE2, 8'hE3, 8'hE3, 8'hE3, 8'hE4,
8'hE4, 8'hE5, 8'hE5, 8'hE5, 8'hE6, 8'hE6, 8'hE6, 8'hE7, 8'hE7, 8'hE7, 8'hE8, 8'hE8, 8'hE9, 8'hE9, 8'hE9, 8'hEA,
8'hEA, 8'hEA, 8'hEA, 8'hEB, 8'hEB, 8'hEB, 8'hEC, 8'hEC, 8'hEC, 8'hED, 8'hED, 8'hED, 8'hEE, 8'hEE, 8'hEE, 8'hEE,
8'hEF, 8'hEF, 8'hEF, 8'hEF, 8'hF0, 8'hF0, 8'hF0, 8'hF0, 8'hF1, 8'hF1, 8'hF1, 8'hF1, 8'hF2, 8'hF2, 8'hF2, 8'hF2,
8'hF3, 8'hF3, 8'hF3, 8'hF3, 8'hF3, 8'hF4, 8'hF4, 8'hF4, 8'hF4, 8'hF4, 8'hF5, 8'hF5, 8'hF5, 8'hF5, 8'hF5, 8'hF6,
8'hF6, 8'hF6, 8'hF6, 8'hF6, 8'hF6, 8'hF7, 8'hF7, 8'hF7, 8'hF7, 8'hF7, 8'hF7, 8'hF8, 8'hF8, 8'hF8, 8'hF8, 8'hF8,
8'hF8, 8'hF8, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hFA, 8'hFA, 8'hFA, 8'hFA, 8'hFA, 8'hFA,
8'hFA, 8'hFA, 8'hFA, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFC, 8'hFC,
8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFD, 8'hFD, 8'hFD,
8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD,
8'hFD, 8'hFD, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFF
};
endmodule

View File

@@ -1,66 +0,0 @@
//============================================================================
// Audio compressor (signed samples)
//
// Copyright (C) 2018 Sorgelig
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//============================================================================
module compressor
(
input wire clk,
input wire [9:0] din,
output reg [8:0] dout
);
always @(posedge clk) dout <= {din[9], din[9] ? ~tbl[~din[8:0]] : tbl[din[8:0]]};
wire [7:0] tbl[0:511] =
{
8'h00, 8'h01, 8'h02, 8'h03, 8'h04, 8'h06, 8'h07, 8'h08, 8'h09, 8'h0B, 8'h0C, 8'h0D, 8'h0E, 8'h0F, 8'h11, 8'h12,
8'h13, 8'h14, 8'h16, 8'h17, 8'h18, 8'h19, 8'h1B, 8'h1C, 8'h1D, 8'h1E, 8'h1F, 8'h21, 8'h22, 8'h23, 8'h24, 8'h25,
8'h27, 8'h28, 8'h29, 8'h2A, 8'h2C, 8'h2D, 8'h2E, 8'h2F, 8'h30, 8'h32, 8'h33, 8'h34, 8'h35, 8'h36, 8'h37, 8'h39,
8'h3A, 8'h3B, 8'h3C, 8'h3D, 8'h3F, 8'h40, 8'h41, 8'h42, 8'h43, 8'h44, 8'h46, 8'h47, 8'h48, 8'h49, 8'h4A, 8'h4B,
8'h4D, 8'h4E, 8'h4F, 8'h50, 8'h51, 8'h52, 8'h53, 8'h55, 8'h56, 8'h57, 8'h58, 8'h59, 8'h5A, 8'h5B, 8'h5C, 8'h5E,
8'h5F, 8'h60, 8'h61, 8'h62, 8'h63, 8'h64, 8'h65, 8'h66, 8'h67, 8'h69, 8'h6A, 8'h6B, 8'h6C, 8'h6D, 8'h6E, 8'h6F,
8'h70, 8'h71, 8'h72, 8'h73, 8'h74, 8'h75, 8'h76, 8'h77, 8'h78, 8'h79, 8'h7A, 8'h7B, 8'h7C, 8'h7D, 8'h7E, 8'h7F,
8'h80, 8'h81, 8'h82, 8'h83, 8'h84, 8'h85, 8'h86, 8'h87, 8'h88, 8'h89, 8'h8A, 8'h8B, 8'h8C, 8'h8D, 8'h8E, 8'h8F,
8'h90, 8'h91, 8'h92, 8'h93, 8'h94, 8'h95, 8'h96, 8'h96, 8'h97, 8'h98, 8'h99, 8'h9A, 8'h9B, 8'h9C, 8'h9D, 8'h9E,
8'h9E, 8'h9F, 8'hA0, 8'hA1, 8'hA2, 8'hA3, 8'hA4, 8'hA4, 8'hA5, 8'hA6, 8'hA7, 8'hA8, 8'hA9, 8'hA9, 8'hAA, 8'hAB,
8'hAC, 8'hAD, 8'hAD, 8'hAE, 8'hAF, 8'hB0, 8'hB1, 8'hB1, 8'hB2, 8'hB3, 8'hB4, 8'hB4, 8'hB5, 8'hB6, 8'hB7, 8'hB7,
8'hB8, 8'hB9, 8'hB9, 8'hBA, 8'hBB, 8'hBC, 8'hBC, 8'hBD, 8'hBE, 8'hBE, 8'hBF, 8'hC0, 8'hC0, 8'hC1, 8'hC2, 8'hC2,
8'hC3, 8'hC4, 8'hC4, 8'hC5, 8'hC6, 8'hC6, 8'hC7, 8'hC8, 8'hC8, 8'hC9, 8'hC9, 8'hCA, 8'hCB, 8'hCB, 8'hCC, 8'hCC,
8'hCD, 8'hCE, 8'hCE, 8'hCF, 8'hCF, 8'hD0, 8'hD0, 8'hD1, 8'hD2, 8'hD2, 8'hD3, 8'hD3, 8'hD4, 8'hD4, 8'hD5, 8'hD5,
8'hD6, 8'hD6, 8'hD7, 8'hD7, 8'hD8, 8'hD8, 8'hD9, 8'hD9, 8'hDA, 8'hDA, 8'hDB, 8'hDB, 8'hDC, 8'hDC, 8'hDD, 8'hDD,
8'hDE, 8'hDE, 8'hDE, 8'hDF, 8'hDF, 8'hE0, 8'hE0, 8'hE1, 8'hE1, 8'hE1, 8'hE2, 8'hE2, 8'hE3, 8'hE3, 8'hE3, 8'hE4,
8'hE4, 8'hE5, 8'hE5, 8'hE5, 8'hE6, 8'hE6, 8'hE6, 8'hE7, 8'hE7, 8'hE7, 8'hE8, 8'hE8, 8'hE9, 8'hE9, 8'hE9, 8'hEA,
8'hEA, 8'hEA, 8'hEA, 8'hEB, 8'hEB, 8'hEB, 8'hEC, 8'hEC, 8'hEC, 8'hED, 8'hED, 8'hED, 8'hEE, 8'hEE, 8'hEE, 8'hEE,
8'hEF, 8'hEF, 8'hEF, 8'hEF, 8'hF0, 8'hF0, 8'hF0, 8'hF0, 8'hF1, 8'hF1, 8'hF1, 8'hF1, 8'hF2, 8'hF2, 8'hF2, 8'hF2,
8'hF3, 8'hF3, 8'hF3, 8'hF3, 8'hF3, 8'hF4, 8'hF4, 8'hF4, 8'hF4, 8'hF4, 8'hF5, 8'hF5, 8'hF5, 8'hF5, 8'hF5, 8'hF6,
8'hF6, 8'hF6, 8'hF6, 8'hF6, 8'hF6, 8'hF7, 8'hF7, 8'hF7, 8'hF7, 8'hF7, 8'hF7, 8'hF8, 8'hF8, 8'hF8, 8'hF8, 8'hF8,
8'hF8, 8'hF8, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hF9, 8'hFA, 8'hFA, 8'hFA, 8'hFA, 8'hFA, 8'hFA,
8'hFA, 8'hFA, 8'hFA, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFB, 8'hFC, 8'hFC,
8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFC, 8'hFD, 8'hFD, 8'hFD,
8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD, 8'hFD,
8'hFD, 8'hFD, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE,
8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFE, 8'hFF
};
endmodule

167
rtl/sp0256/fifo.vhd Normal file
View File

@@ -0,0 +1,167 @@
--
-- TBBlue / ZX Spectrum Next project
--
-- FIFO - Victor Trucco
--
-- All rights reserved
--
-- Rev 01 by Oduvaldo Pavan Junior
-- When HEAD hit top of memory, this is not buffer full
-- Buffer Full is when HEAD meet TAIL after a byte is pushed
-- This was causing false Buffer Full reporting when head hit top of memory
-- but TAIL was not in the bottom of memory
-- Changed signal name from loop_s to full_s in order to identify it better
--
-- Now it works more like a real FIFO, you don't need to read data up to the
-- top so it is free again. If there is one byte free, you can push again even
-- if not all bytes have been pushed.
--
-- Redistribution and use in source and synthezised forms, with or without
-- modification, are permitted provided that the following conditions are met:
--
-- Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
-- Redistributions in synthesized form must reproduce the above copyright
-- notice, this list of conditions and the following disclaimer in the
-- documentation and/or other materials provided with the distribution.
--
-- Neither the name of the author nor the names of other contributors may
-- be used to endorse or promote products derived from this software without
-- specific prior written permission.
--
-- THIS CODE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- POSSIBILITY OF SUCH DAMAGE.
--
-- You are responsible for any legal issues arising from your use of this code.
--
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
entity FIFO is
Generic
(
constant DATA_WIDTH : positive := 8;
constant FIFO_DEPTH : positive := 512
);
Port
(
clock_i : in STD_LOGIC;
reset_i : in STD_LOGIC;
-- input
fifo_we_i : in STD_LOGIC;
fifo_data_i : in STD_LOGIC_VECTOR (DATA_WIDTH - 1 downto 0);
-- output
fifo_read_i : in STD_LOGIC;
fifo_data_o : out STD_LOGIC_VECTOR (DATA_WIDTH - 1 downto 0) := (others=>'0');
-- flags
fifo_empty_o : out STD_LOGIC;
fifo_full_o : out STD_LOGIC
);
end FIFO;
architecture Behavioral of FIFO is
type fifo_mem_t is array (0 to FIFO_DEPTH - 1) of STD_LOGIC_VECTOR (DATA_WIDTH - 1 downto 0);
signal memory : fifo_mem_t;
signal head_s : natural range 0 to FIFO_DEPTH - 1;
signal tail_s : natural range 0 to FIFO_DEPTH - 1;
signal full_s : boolean := false;
signal read_edge : std_logic_vector(1 downto 0) :="00";
signal write_edge : std_logic_vector(1 downto 0) :="00";
begin
-- Memory Pointer Process
fifo_proc : process (clock_i)
begin
if rising_edge(clock_i) then
if reset_i = '1' then
head_s <= 0;
tail_s <= 0;
full_s <= false;
fifo_full_o <= '0';
fifo_empty_o <= '1';
memory(0) <= (others=>'0');
else
read_edge <= read_edge(0) & fifo_read_i;
if (read_edge = "01") then
--if (fifo_read_i = '1') then
if ((full_s = true) or (head_s /= tail_s)) then
-- Update data output
fifo_data_o <= memory(tail_s);
-- Update tail_s pointer as needed
if (tail_s = FIFO_DEPTH - 1) then
tail_s <= 0;
else
tail_s <= tail_s + 1;
end if;
full_s <= false;
end if;
end if;
write_edge <= write_edge(0) & fifo_we_i;
if (write_edge = "01") then
--if (fifo_we_i = '1') then
if (full_s = false) then
-- Write Data to memory
memory(head_s) <= fifo_data_i;
-- Increment head pointer as needed
if (head_s = FIFO_DEPTH - 1) then
head_s <= 0;
else
head_s <= head_s + 1;
end if;
-- Full?
if ( ((tail_s /= 0) and (head_s = tail_s -1)) or
((tail_s = 0) and (head_s = FIFO_DEPTH - 1)) )then
full_s <= true;
end if;
end if;
end if;
-- Update empty and full flags
if (full_s = true) then
fifo_full_o <= '1';
else
fifo_full_o <= '0';
end if;
if ( (head_s = tail_s) and (full_s = false) ) then
fifo_empty_o <= '1';
else
fifo_empty_o <= '0';
end if;
end if;
end if;
end process;
end Behavioral;

383
rtl/sp0256/pll_thevoice.vhd Normal file
View File

@@ -0,0 +1,383 @@
-- megafunction wizard: %ALTPLL%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altpll
-- ============================================================
-- File Name: pll_thevoice.vhd
-- Megafunction Name(s):
-- altpll
--
-- Simulation Library Files(s):
-- altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 17.0.2 Build 602 07/19/2017 SJ Lite Edition
-- ************************************************************
--Copyright (C) 2017 Intel Corporation. All rights reserved.
--Your use of Intel Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Intel Program License
--Subscription Agreement, the Intel Quartus Prime License Agreement,
--the Intel MegaCore Function License Agreement, or other
--applicable license agreement, including, without limitation,
--that your use is for the sole purpose of programming logic
--devices manufactured by Intel and sold by Intel or its
--authorized distributors. Please refer to the applicable
--agreement for further details.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.all;
ENTITY pll_thevoice IS
PORT
(
inclk0 : IN STD_LOGIC := '0';
c0 : OUT STD_LOGIC ;
c1 : OUT STD_LOGIC
);
END pll_thevoice;
ARCHITECTURE SYN OF pll_thevoice IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0);
SIGNAL sub_wire1 : STD_LOGIC ;
SIGNAL sub_wire2 : STD_LOGIC ;
SIGNAL sub_wire3 : STD_LOGIC ;
SIGNAL sub_wire4 : STD_LOGIC_VECTOR (1 DOWNTO 0);
SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0);
SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0);
COMPONENT altpll
GENERIC (
bandwidth_type : STRING;
clk0_divide_by : NATURAL;
clk0_duty_cycle : NATURAL;
clk0_multiply_by : NATURAL;
clk0_phase_shift : STRING;
clk1_divide_by : NATURAL;
clk1_duty_cycle : NATURAL;
clk1_multiply_by : NATURAL;
clk1_phase_shift : STRING;
compensate_clock : STRING;
inclk0_input_frequency : NATURAL;
intended_device_family : STRING;
lpm_hint : STRING;
lpm_type : STRING;
operation_mode : STRING;
pll_type : STRING;
port_activeclock : STRING;
port_areset : STRING;
port_clkbad0 : STRING;
port_clkbad1 : STRING;
port_clkloss : STRING;
port_clkswitch : STRING;
port_configupdate : STRING;
port_fbin : STRING;
port_inclk0 : STRING;
port_inclk1 : STRING;
port_locked : STRING;
port_pfdena : STRING;
port_phasecounterselect : STRING;
port_phasedone : STRING;
port_phasestep : STRING;
port_phaseupdown : STRING;
port_pllena : STRING;
port_scanaclr : STRING;
port_scanclk : STRING;
port_scanclkena : STRING;
port_scandata : STRING;
port_scandataout : STRING;
port_scandone : STRING;
port_scanread : STRING;
port_scanwrite : STRING;
port_clk0 : STRING;
port_clk1 : STRING;
port_clk2 : STRING;
port_clk3 : STRING;
port_clk4 : STRING;
port_clk5 : STRING;
port_clkena0 : STRING;
port_clkena1 : STRING;
port_clkena2 : STRING;
port_clkena3 : STRING;
port_clkena4 : STRING;
port_clkena5 : STRING;
port_extclk0 : STRING;
port_extclk1 : STRING;
port_extclk2 : STRING;
port_extclk3 : STRING;
width_clock : NATURAL
);
PORT (
inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0)
);
END COMPONENT;
BEGIN
sub_wire5_bv(0 DOWNTO 0) <= "0";
sub_wire5 <= To_stdlogicvector(sub_wire5_bv);
sub_wire2 <= sub_wire0(1);
sub_wire1 <= sub_wire0(0);
c0 <= sub_wire1;
c1 <= sub_wire2;
sub_wire3 <= inclk0;
sub_wire4 <= sub_wire5(0 DOWNTO 0) & sub_wire3;
altpll_component : altpll
GENERIC MAP (
bandwidth_type => "AUTO",
clk0_divide_by => 200,
clk0_duty_cycle => 50,
clk0_multiply_by => 1,
clk0_phase_shift => "0",
clk1_divide_by => 20,
clk1_duty_cycle => 50,
clk1_multiply_by => 1,
clk1_phase_shift => "0",
compensate_clock => "CLK0",
inclk0_input_frequency => 20000,
intended_device_family => "Cyclone IV E",
lpm_hint => "CBX_MODULE_PREFIX=pll_thevoice",
lpm_type => "altpll",
operation_mode => "NORMAL",
pll_type => "AUTO",
port_activeclock => "PORT_UNUSED",
port_areset => "PORT_UNUSED",
port_clkbad0 => "PORT_UNUSED",
port_clkbad1 => "PORT_UNUSED",
port_clkloss => "PORT_UNUSED",
port_clkswitch => "PORT_UNUSED",
port_configupdate => "PORT_UNUSED",
port_fbin => "PORT_UNUSED",
port_inclk0 => "PORT_USED",
port_inclk1 => "PORT_UNUSED",
port_locked => "PORT_UNUSED",
port_pfdena => "PORT_UNUSED",
port_phasecounterselect => "PORT_UNUSED",
port_phasedone => "PORT_UNUSED",
port_phasestep => "PORT_UNUSED",
port_phaseupdown => "PORT_UNUSED",
port_pllena => "PORT_UNUSED",
port_scanaclr => "PORT_UNUSED",
port_scanclk => "PORT_UNUSED",
port_scanclkena => "PORT_UNUSED",
port_scandata => "PORT_UNUSED",
port_scandataout => "PORT_UNUSED",
port_scandone => "PORT_UNUSED",
port_scanread => "PORT_UNUSED",
port_scanwrite => "PORT_UNUSED",
port_clk0 => "PORT_USED",
port_clk1 => "PORT_USED",
port_clk2 => "PORT_UNUSED",
port_clk3 => "PORT_UNUSED",
port_clk4 => "PORT_UNUSED",
port_clk5 => "PORT_UNUSED",
port_clkena0 => "PORT_UNUSED",
port_clkena1 => "PORT_UNUSED",
port_clkena2 => "PORT_UNUSED",
port_clkena3 => "PORT_UNUSED",
port_clkena4 => "PORT_UNUSED",
port_clkena5 => "PORT_UNUSED",
port_extclk0 => "PORT_UNUSED",
port_extclk1 => "PORT_UNUSED",
port_extclk2 => "PORT_UNUSED",
port_extclk3 => "PORT_UNUSED",
width_clock => 5
)
PORT MAP (
inclk => sub_wire4,
clk => sub_wire0
);
END SYN;
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1"
-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0"
-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0"
-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8"
-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1"
-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1"
-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000"
-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "0.250000"
-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "2.500000"
-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0"
-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0"
-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000"
-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000"
-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0"
-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available"
-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps"
-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any"
-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0"
-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1"
-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1"
-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "0.25000000"
-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "2.50000000"
-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1"
-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1"
-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz"
-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1"
-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0"
-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000"
-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0"
-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps"
-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0"
-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0"
-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0"
-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0"
-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll_thevoice.mif"
-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1"
-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0"
-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
-- Retrieval info: PRIVATE: SPREAD_USE STRING "0"
-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1"
-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: USE_CLK0 STRING "1"
-- Retrieval info: PRIVATE: USE_CLK1 STRING "1"
-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0"
-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0"
-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO"
-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "200"
-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1"
-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "20"
-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50"
-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "1"
-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0"
-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO"
-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED"
-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED"
-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED"
-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED"
-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5"
-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]"
-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]"
-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0"
-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1"
-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0"
-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1
-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_thevoice.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_thevoice.ppf TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_thevoice.inc FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_thevoice.cmp TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_thevoice.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_thevoice_inst.vhd FALSE
-- Retrieval info: LIB_FILE: altera_mf
-- Retrieval info: CBX_MODULE_PREFIX: ON

View File

@@ -9,15 +9,14 @@
---------------------------------------------------------------------------------
-- sp0256 (player) releases
--
--
-- rev 1.1-rw - 28/01/2021
-- changed signals to be the same that the real thing and clock to 2.5Mhz
-- rev 0.0 - 14/04/2018
-- play only sp0256-al2 (cmd 00-3F, 12 bits rom address)
--
-- rev 1.0 - 23/07/2018
-- extend to play sp0256b_019 + spr128_003 (cmd 00-7F, 14 bits rom address)
--
-- rev 0.0 - 14/04/2018
-- play only sp0256-al2 (cmd 00-3F, 12 bits rom address)
-- rev 2.0 - 26/07/2019 - by Victor Trucco
-- sound banks handling
--
---------------------------------------------------------------------------------
--
@@ -119,28 +118,31 @@ use ieee.numeric_std.all;
entity sp0256 is
port
(
clk_2m5 : in std_logic;
reset : in std_logic;
clock_250k : in std_logic;
clock_2m5 : in std_logic;
reset : in std_logic;
lrq : out std_logic;
data_in : in std_logic_vector(6 downto 0);
ald : in std_logic;
input_rdy : out std_logic;
allophone : in std_logic_vector(6 downto 0);
trig_allophone : in std_logic;
audio_out : out signed(9 downto 0)
noise_out : out signed(15 downto 0);
audio_out : out signed(15 downto 0)
);
end sp0256;
architecture syn of sp0256 is
signal clk_2m5_n : std_logic;
signal rom_addr : std_logic_vector(13 downto 0);
signal rom_do : std_logic_vector( 7 downto 0);
signal bank : std_logic_vector( 1 downto 0);
signal clock_250k_n : std_logic;
signal rom_addr : std_logic_vector(13 downto 0);
signal rom_do : std_logic_vector( 7 downto 0);
signal bank : std_logic_vector( 1 downto 0);
signal stage : integer range 0 to 249; -- stage counter 0-24;
signal stage : integer range 0 to 24; -- stage counter 0-24;
signal stage_t : integer;
signal stage_r : integer;
signal allophone : std_logic_vector(6 downto 0);
signal allo_entry : std_logic_vector(8 downto 0);
signal allo_addr_lsb, allo_addr_msb : std_logic_vector(7 downto 0);
signal allo_nb_line : std_logic_vector(7 downto 0);
@@ -152,11 +154,10 @@ architecture syn of sp0256 is
signal sum_in1,sum_out_ul : signed(15 downto 0);
signal sum_out : signed(15 downto 0);
signal divider : std_logic;
signal audio : signed(9 downto 0);
signal audio_int : signed(8 downto 0);
signal audio : signed(15 downto 0);
signal is_noise : std_logic;
signal noise_rng : std_logic_vector(15 downto 0) := X"0001";
signal noise_rng : std_logic_vector(16 downto 0) := "00000000000000001";
signal f0_z1,f0_z2 : signed(15 downto 0);
signal f1_z1,f1_z2 : signed(15 downto 0);
@@ -165,9 +166,9 @@ architecture syn of sp0256 is
signal f4_z1,f4_z2 : signed(15 downto 0);
signal f5_z1,f5_z2 : signed(15 downto 0);
signal lrq_in : std_logic;
signal input_rdy_in : std_logic;
signal sound_on : std_logic := '0';
signal ald_r : std_logic;
signal trig_allophone_r : std_logic;
signal line_cnt, rpt_cnt, per_cnt : std_logic_vector(7 downto 0);
signal coeff_idx : std_logic_vector(6 downto 0);
@@ -191,73 +192,62 @@ architecture syn of sp0256 is
496, 497, 498, 499, 500, 501, 502, 503,
504, 505, 506, 507, 508, 509, 510, 511);
component compressor is port
(
clk : in std_logic;
din : in signed(9 downto 0);
dout : out signed(8 downto 0)
);
end component;
begin
lrq <= lrq_in;
clk_2m5_n <= not clk_2m5;
stage <= stage_t / 10;
input_rdy <= input_rdy_in;
clock_250k_n <= not clock_250k;
-- stage counter : Fs=250k/25 = 10kHz
process (clk_2m5, reset)
process (clock_250k, reset)
begin
if reset='0' then
stage_t <= 0;
if reset='1' then
stage <= 0;
else
if rising_edge(clk_2m5) then
if stage_t >= 249 then
stage_t <= 0;
if rising_edge(clock_250k) then
if stage >= 61 then
stage <= 0;
else
stage_t <= stage_t + 1;
stage <= stage + 1;
end if;
end if;
end if;
end process;
process (clk_2m5, reset)
process (clock_250k, reset)
begin
if reset='0' then
lrq_in <= '1';
if reset='1' then
input_rdy_in <= '1';
sound_on <= '0';
noise_rng <= X"0001";
noise_rng <= "00000000000000001";
bank <= "00";
else
if rising_edge(clk_2m5) then
if rising_edge(clock_250k) then
ald_r <= ald;
if (ald_r = '1' and ald = '0') then
lrq_in <= '0';
allophone <= data_in;
trig_allophone_r <= trig_allophone;
if trig_allophone_r = '0' and trig_allophone = '1' then -- detect rising edge (trig_allophone)
input_rdy_in <= '0';
end if;
stage_r <= stage;
if stage /= stage_r then
if sound_on = '0' then
if stage = 0 and lrq_in = '0' then
if allophone = "1100100" then bank <= "00";
if stage = 0 and input_rdy_in = '0' then
-- filter the bankswitch commands
if allophone = "1100100" then bank <= "00";
elsif allophone = "1101000" then bank <= "01";
elsif allophone = "1101001" then bank <= "10";
elsif allophone = "1101010" then bank <= "11";
elsif allophone <= "1011111" or allophone >= "1110000" then --filter the playable sounds
allo_entry <= allophone*"11";
rom_addr <= "00000"&(allophone*"11");
line_cnt <= (others => '0');
rpt_cnt <= (others => '0');
per_cnt <= (others => '0');
sound_on <= '1';
allo_entry <= allophone*"11"; -- alophone times 3
rom_addr <= "00000"&(allophone*"11");
line_cnt <= (others => '0');
rpt_cnt <= (others => '0');
per_cnt <= (others => '0');
sound_on <= '1';
end if;
lrq_in <= '1';
input_rdy_in <= '1';
end if;
else -- sound is on
@@ -265,13 +255,13 @@ process (clk_2m5, reset)
case stage is
when 0 =>
rom_addr <= "00000"&allo_entry;
when 1 =>
when 3 =>
allo_addr_msb <= rom_do;
rom_addr <= rom_addr + '1';
when 2 =>
when 6 =>
allo_addr_lsb <= rom_do;
rom_addr <= rom_addr + '1';
when 3 =>
when 9 =>
if rom_do = X"00" then
line_cnt <= (others => '0');
sound_on <= '0';
@@ -279,20 +269,21 @@ process (clk_2m5, reset)
allo_nb_line <= rom_do - '1';
rom_addr <= ((allo_addr_msb(1 downto 0) & allo_addr_lsb )+line_cnt) & X"0";
end if;
when 4 =>
when 12 =>
line_rpt <= rom_do - '1';
rom_addr <= rom_addr + '1';
when 5 =>
when 15 =>
line_amp_msb <= rom_do;
rom_addr <= rom_addr + '1';
when 6 =>
when 18 =>
if per_cnt = X"00" then
amp <= signed(line_amp_msb & rom_do);
else
if is_noise = '1' then
if noise_rng(0) = '1' then
amp <= -amp;
--amp <= '1' & (not amp(14 downto 0)) ;
noise_out <= signed('1' & noise_rng (15 downto 1));
end if;
else
amp <= (others => '0');
@@ -310,7 +301,7 @@ process (clk_2m5, reset)
rom_addr <= rom_addr + '1';
when 7 =>
when 21 =>
if rom_do = X"00" then
line_per <= X"40";
is_noise <= '1';
@@ -322,90 +313,94 @@ process (clk_2m5, reset)
filter <= f0_z1;
divider <= '0';
rom_addr <= rom_addr + '1';
when 8 =>
when 24 =>
sum_in1 <= sum_out;
filter <= f0_z2;
divider <= '1';
rom_addr <= rom_addr + '1';
when 9 =>
when 27 =>
f0_z1 <= sum_out;
f0_z2 <= f0_z1;
sum_in1 <= sum_out;
filter <= f1_z1;
divider <= '0';
rom_addr <= rom_addr + '1';
when 10 =>
when 30 =>
sum_in1 <= sum_out;
filter <= f1_z2;
divider <= '1';
rom_addr <= rom_addr + '1';
when 11 =>
when 33 =>
f1_z1 <= sum_out;
f1_z2 <= f1_z1;
sum_in1 <= sum_out;
filter <= f2_z1;
divider <= '0';
rom_addr <= rom_addr + '1';
when 12 =>
when 36 =>
sum_in1 <= sum_out;
filter <= f2_z2;
divider <= '1';
rom_addr <= rom_addr + '1';
when 13 =>
when 39 =>
f2_z1 <= sum_out;
f2_z2 <= f2_z1;
sum_in1 <= sum_out;
filter <= f3_z1;
divider <= '0';
rom_addr <= rom_addr + '1';
when 14 =>
when 42 =>
sum_in1 <= sum_out;
filter <= f3_z2;
divider <= '1';
rom_addr <= rom_addr + '1';
when 15 =>
when 45 =>
f3_z1 <= sum_out;
f3_z2 <= f3_z1;
sum_in1 <= sum_out;
filter <= f4_z1;
divider <= '0';
rom_addr <= rom_addr + '1';
when 16 =>
when 48 =>
sum_in1 <= sum_out;
filter <= f4_z2;
divider <= '1';
rom_addr <= rom_addr + '1';
when 17 =>
when 51 =>
f4_z1 <= sum_out;
f4_z2 <= f4_z1;
sum_in1 <= sum_out;
filter <= f5_z1;
divider <= '0';
rom_addr <= rom_addr + '1';
when 18 =>
when 54 =>
sum_in1 <= sum_out;
filter <= f5_z2;
divider <= '1';
rom_addr <= rom_addr + '1';
when 19 =>
when 57 =>
f5_z1 <= sum_out;
f5_z2 <= f5_z1;
if sum_out > 510*16 then
audio <= to_signed(511,10);
elsif sum_out < -510*16 then
audio <= to_signed(-512,10);
else
audio <= sum_out(13 downto 4);
end if;
when 20 =>
-- if sum_out > 510*16 then
-- audio <= to_signed(1023,16);
-- elsif sum_out < -510*16 then
-- audio <= to_signed(0,16);
-- else
-- audio <= (sum_out/16)+X"0200";
-- end if;
audio <= sum_out;
when 60 =>
if per_cnt >= line_per then
per_cnt <= (others => '0');
if rpt_cnt >= line_rpt then
@@ -424,32 +419,21 @@ process (clk_2m5, reset)
per_cnt <= per_cnt + '1';
end if;
if noise_rng(0) = '1' then
noise_rng <= ('0' & noise_rng(15 downto 1) ) xor X"4001";
else
noise_rng <= '0' & noise_rng(15 downto 1);
end if;
noise_rng <= noise_rng(15 downto 0) & (noise_rng(16) xor noise_rng(2));
when others => null;
end case;
end if;
end if;
end if;
end if;
end process;
compr: compressor
port map
(
clk => clk_2m5,
din => audio,
dout => audio_int
);
--audio_out <= std_logic_vector(unsigned(audio(9 downto 0)));
audio_out <= audio_int(8) & audio_int;
audio_out <= audio;
-- filter computation
coeff_idx <= rom_do(6 downto 0) when rom_do(7)='0' else
@@ -466,12 +450,15 @@ sum_out_ul <= sum_in1 + sum_in2(15 downto 0);
sum_out <= to_signed( 32767,16) when sum_out_ul > 32767 else
to_signed(-32768,16) when sum_out_ul < -32768 else
sum_out_ul;
sp256_003 : ENTITY work.sp256_003
port map(
clock => clk_2m5_n,
clock => clock_2m5,
clken => clock_250k_n,
address => bank & rom_addr,
q => rom_do
);
end syn;

View File

@@ -1,728 +0,0 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity sp0256_003_decoded is
port (
clk : in std_logic;
addr : in std_logic_vector(13 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of sp0256_003_decoded is
type rom is array(0 to 11295) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"00",X"18",X"01",X"00",X"19",X"01",X"00",X"1A",X"01",X"00",X"1B",X"01",X"00",X"1C",X"01",X"00",
X"1D",X"0A",X"00",X"27",X"0A",X"00",X"31",X"01",X"00",X"32",X"03",X"00",X"35",X"03",X"00",X"38",
X"03",X"00",X"3B",X"03",X"00",X"3E",X"01",X"00",X"3F",X"04",X"00",X"43",X"06",X"00",X"49",X"01",
X"00",X"4A",X"04",X"00",X"4E",X"03",X"00",X"51",X"02",X"00",X"53",X"06",X"00",X"59",X"08",X"00",
X"61",X"02",X"00",X"63",X"03",X"00",X"66",X"01",X"00",X"67",X"03",X"00",X"6A",X"06",X"00",X"70",
X"01",X"00",X"71",X"03",X"00",X"74",X"02",X"00",X"76",X"01",X"00",X"77",X"01",X"00",X"78",X"03",
X"00",X"7B",X"05",X"00",X"80",X"03",X"00",X"83",X"02",X"00",X"85",X"03",X"00",X"88",X"03",X"00",
X"8B",X"03",X"00",X"8E",X"02",X"00",X"90",X"03",X"00",X"93",X"01",X"00",X"94",X"03",X"00",X"97",
X"04",X"00",X"9B",X"03",X"00",X"9E",X"04",X"00",X"A2",X"03",X"00",X"A5",X"04",X"00",X"A9",X"0D",
X"00",X"B6",X"04",X"00",X"BA",X"04",X"00",X"BE",X"03",X"00",X"C1",X"09",X"00",X"CA",X"0A",X"00",
X"D4",X"07",X"00",X"DB",X"02",X"00",X"DD",X"01",X"00",X"DE",X"06",X"00",X"E4",X"03",X"00",X"E7",
X"09",X"00",X"F0",X"09",X"00",X"F9",X"08",X"01",X"01",X"02",X"01",X"03",X"03",X"01",X"06",X"03",
X"01",X"09",X"13",X"01",X"1C",X"16",X"01",X"32",X"12",X"01",X"44",X"1B",X"01",X"5F",X"19",X"01",
X"78",X"1A",X"01",X"92",X"13",X"01",X"A5",X"0E",X"01",X"B3",X"16",X"01",X"C9",X"18",X"01",X"E1",
X"1D",X"01",X"FE",X"01",X"01",X"FF",X"01",X"02",X"00",X"01",X"02",X"01",X"01",X"02",X"02",X"01",
X"02",X"03",X"01",X"02",X"04",X"01",X"02",X"05",X"01",X"02",X"06",X"01",X"02",X"07",X"01",X"02",
X"08",X"01",X"02",X"09",X"01",X"02",X"0A",X"01",X"02",X"0B",X"01",X"02",X"0C",X"01",X"02",X"0D",
X"01",X"02",X"0E",X"01",X"02",X"0F",X"01",X"02",X"10",X"01",X"02",X"11",X"01",X"02",X"12",X"01",
X"02",X"13",X"01",X"02",X"14",X"01",X"02",X"15",X"01",X"02",X"16",X"01",X"02",X"17",X"00",X"02",
X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",
X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",
X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"00",X"02",X"17",X"0A",X"02",X"21",X"0C",X"02",
X"2D",X"11",X"02",X"3E",X"10",X"02",X"4E",X"12",X"02",X"60",X"18",X"02",X"78",X"0F",X"02",X"87",
X"1F",X"02",X"A6",X"18",X"02",X"BE",X"01",X"02",X"BF",X"01",X"02",X"C0",X"01",X"02",X"C1",X"01",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"07",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"0F",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"1F",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"01",X"40",X"5B",X"A0",X"60",X"B8",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"03",X"00",X"C0",X"5B",X"A0",X"60",X"B0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"02",X"00",X"50",X"5B",X"A0",X"60",X"A8",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"02",X"00",X"80",X"5B",X"A0",X"60",X"B0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"03",X"00",X"70",X"5B",X"A0",X"60",X"B0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"03",X"00",X"A0",X"5B",X"A0",X"60",X"B8",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"04",X"01",X"C0",X"5B",X"A8",X"60",X"C0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"03",X"02",X"80",X"5B",X"A8",X"60",X"D0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"04",X"02",X"80",X"5B",X"A8",X"60",X"E0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"09",X"01",X"00",X"5B",X"A0",X"60",X"E8",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"01",X"03",X"00",X"5B",X"B0",X"70",X"C8",X"70",X"F8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"01",X"02",X"80",X"5B",X"C8",X"70",X"B0",X"70",X"F8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"02",X"03",X"00",X"5B",X"C8",X"70",X"B0",X"70",X"F8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"02",X"02",X"80",X"5B",X"B0",X"70",X"C8",X"70",X"F8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"02",X"02",X"00",X"5B",X"C8",X"70",X"F8",X"70",X"B8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"03",X"02",X"80",X"5B",X"B0",X"70",X"D0",X"70",X"F8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"03",X"03",X"80",X"5B",X"B0",X"70",X"F8",X"70",X"E0",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"02",X"03",X"00",X"5B",X"A8",X"70",X"E0",X"70",X"F8",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"03",X"02",X"80",X"5B",X"A0",X"70",X"E8",X"70",X"00",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"03",X"01",X"00",X"5B",X"A0",X"70",X"F0",X"70",X"00",X"60",X"18",X"50",X"3C",X"44",X"00",X"00",
X"07",X"06",X"00",X"5B",X"00",X"50",X"28",X"50",X"40",X"50",X"F8",X"10",X"E8",X"58",X"AA",X"64",
X"05",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"40",X"FC",X"04",X"CB",X"68",
X"07",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"18",X"20",X"40",X"C5",X"62",
X"0F",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"40",X"F4",X"2C",X"BF",X"3B",
X"07",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"50",X"F8",X"44",X"CF",X"3A",
X"05",X"00",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"20",X"18",X"42",X"FA",X"30",
X"04",X"01",X"C0",X"5B",X"18",X"60",X"30",X"50",X"38",X"20",X"00",X"10",X"00",X"60",X"E6",X"38",
X"05",X"01",X"40",X"5B",X"18",X"50",X"28",X"40",X"40",X"30",X"FC",X"68",X"E8",X"52",X"DD",X"16",
X"04",X"00",X"E0",X"5B",X"00",X"30",X"18",X"20",X"38",X"40",X"FC",X"60",X"E0",X"2A",X"A1",X"54",
X"03",X"01",X"40",X"5B",X"08",X"30",X"20",X"30",X"20",X"10",X"FC",X"68",X"E8",X"1C",X"A2",X"50",
X"05",X"01",X"80",X"5B",X"08",X"30",X"20",X"40",X"20",X"10",X"FC",X"68",X"E0",X"24",X"9B",X"5B",
X"06",X"06",X"00",X"5B",X"00",X"50",X"10",X"20",X"30",X"50",X"E8",X"60",X"34",X"1E",X"A0",X"6E",
X"06",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"A0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"34",X"28",X"1C",X"4E",X"F4",X"21",
X"04",X"00",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"20",X"1C",X"44",X"EA",X"53",
X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"18",X"1C",X"46",X"E7",X"5A",
X"06",X"00",X"1C",X"5B",X"98",X"60",X"C0",X"60",X"E0",X"50",X"0C",X"40",X"20",X"3C",X"32",X"2B",
X"03",X"00",X"50",X"5B",X"98",X"60",X"C0",X"60",X"E8",X"50",X"0C",X"40",X"20",X"3C",X"32",X"2B",
X"01",X"00",X"C0",X"5B",X"98",X"60",X"C0",X"60",X"E8",X"50",X"0C",X"40",X"20",X"3C",X"32",X"2B",
X"02",X"02",X"80",X"5B",X"A0",X"60",X"C0",X"60",X"F0",X"50",X"0C",X"40",X"20",X"3C",X"32",X"2B",
X"02",X"01",X"C0",X"5B",X"A0",X"60",X"B8",X"60",X"F0",X"50",X"0C",X"40",X"20",X"3C",X"32",X"2B",
X"02",X"02",X"00",X"5B",X"A0",X"60",X"B8",X"60",X"F0",X"50",X"0C",X"40",X"20",X"3C",X"32",X"2B",
X"07",X"06",X"00",X"5B",X"F0",X"50",X"18",X"20",X"28",X"60",X"D0",X"60",X"28",X"18",X"A8",X"61",
X"05",X"00",X"A0",X"5B",X"F0",X"50",X"C0",X"30",X"E0",X"20",X"00",X"10",X"20",X"44",X"00",X"00",
X"04",X"00",X"C0",X"5B",X"F0",X"50",X"C0",X"30",X"E0",X"20",X"00",X"10",X"20",X"44",X"00",X"00",
X"04",X"00",X"E0",X"5B",X"F0",X"50",X"E0",X"30",X"C8",X"20",X"00",X"10",X"20",X"44",X"00",X"00",
X"03",X"01",X"40",X"5B",X"F0",X"50",X"E0",X"30",X"C8",X"20",X"00",X"10",X"20",X"44",X"00",X"00",
X"06",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"48",X"10",X"40",X"DF",X"3F",
X"04",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"18",X"28",X"40",X"E8",X"3F",
X"0E",X"00",X"A0",X"5B",X"08",X"30",X"18",X"30",X"38",X"40",X"EC",X"30",X"D4",X"2E",X"CB",X"20",
X"04",X"02",X"80",X"5B",X"00",X"60",X"18",X"50",X"38",X"50",X"F4",X"08",X"DC",X"5E",X"A1",X"5C",
X"04",X"06",X"00",X"5B",X"08",X"00",X"28",X"40",X"38",X"40",X"04",X"60",X"F0",X"66",X"A1",X"5A",
X"03",X"06",X"00",X"5B",X"28",X"40",X"38",X"40",X"08",X"00",X"04",X"50",X"F4",X"62",X"A4",X"57",
X"03",X"06",X"00",X"5B",X"08",X"10",X"28",X"50",X"38",X"40",X"04",X"48",X"F4",X"64",X"9A",X"62",
X"03",X"06",X"00",X"5B",X"08",X"20",X"28",X"50",X"38",X"40",X"04",X"38",X"F8",X"60",X"96",X"66",
X"05",X"04",X"00",X"5B",X"08",X"30",X"28",X"50",X"38",X"50",X"FC",X"20",X"F8",X"62",X"92",X"6E",
X"04",X"01",X"40",X"5B",X"08",X"40",X"28",X"40",X"38",X"40",X"F8",X"60",X"F4",X"0C",X"90",X"71",
X"03",X"03",X"00",X"5B",X"A0",X"70",X"E8",X"60",X"00",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"01",X"03",X"00",X"5B",X"A0",X"70",X"F0",X"60",X"00",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"03",X"02",X"80",X"5B",X"A0",X"70",X"F0",X"60",X"00",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"01",X"01",X"C0",X"5B",X"98",X"70",X"F8",X"60",X"F8",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"06",X"01",X"C0",X"5B",X"98",X"70",X"F8",X"60",X"00",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"01",X"01",X"C0",X"5B",X"98",X"70",X"F8",X"60",X"00",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"07",X"00",X"A0",X"5B",X"90",X"70",X"F8",X"60",X"00",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"02",X"00",X"70",X"5B",X"90",X"70",X"F8",X"60",X"F8",X"20",X"04",X"30",X"28",X"52",X"00",X"00",
X"04",X"02",X"80",X"5B",X"90",X"70",X"E0",X"70",X"00",X"60",X"10",X"10",X"1C",X"56",X"3A",X"49",
X"02",X"02",X"00",X"5B",X"98",X"70",X"E0",X"70",X"00",X"60",X"10",X"10",X"1C",X"56",X"3A",X"49",
X"04",X"05",X"00",X"5B",X"98",X"60",X"F0",X"60",X"D8",X"60",X"1C",X"58",X"24",X"4E",X"39",X"2C",
X"02",X"05",X"00",X"5B",X"D0",X"60",X"F0",X"60",X"A0",X"60",X"1C",X"58",X"24",X"4E",X"39",X"2C",
X"03",X"04",X"00",X"5B",X"F0",X"60",X"C8",X"60",X"A0",X"60",X"1C",X"58",X"24",X"4E",X"39",X"2C",
X"09",X"04",X"00",X"5B",X"20",X"50",X"18",X"20",X"40",X"30",X"F8",X"60",X"C0",X"60",X"B2",X"5A",
X"04",X"05",X"00",X"5B",X"C8",X"60",X"B8",X"60",X"F8",X"60",X"14",X"28",X"1C",X"36",X"44",X"41",
X"02",X"05",X"00",X"5B",X"C8",X"60",X"B8",X"60",X"F8",X"60",X"14",X"28",X"1C",X"36",X"44",X"41",
X"03",X"05",X"00",X"5B",X"B8",X"60",X"C8",X"60",X"F8",X"60",X"14",X"28",X"1C",X"36",X"44",X"41",
X"03",X"01",X"C0",X"5B",X"10",X"50",X"28",X"40",X"30",X"30",X"08",X"30",X"F0",X"64",X"8E",X"70",
X"03",X"01",X"80",X"5B",X"10",X"50",X"28",X"50",X"38",X"30",X"04",X"28",X"F4",X"5E",X"8C",X"76",
X"04",X"02",X"80",X"5B",X"08",X"30",X"28",X"40",X"30",X"20",X"08",X"40",X"F4",X"5C",X"90",X"70",
X"02",X"04",X"00",X"5B",X"10",X"30",X"20",X"50",X"38",X"40",X"00",X"38",X"F0",X"5A",X"95",X"69",
X"02",X"07",X"00",X"5B",X"20",X"40",X"28",X"40",X"18",X"10",X"00",X"48",X"F0",X"60",X"98",X"69",
X"02",X"06",X"00",X"5B",X"18",X"30",X"28",X"40",X"20",X"10",X"00",X"48",X"F0",X"5E",X"9C",X"68",
X"0A",X"03",X"00",X"5B",X"F8",X"40",X"20",X"50",X"30",X"50",X"F0",X"20",X"DC",X"4C",X"AE",X"66",
X"07",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"28",X"08",X"4E",X"EB",X"0C",
X"07",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"34",X"38",X"0C",X"3E",X"F1",X"1A",
X"02",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"E8",X"F2",X"03",X"3F",
X"03",X"00",X"04",X"5B",X"F8",X"30",X"18",X"40",X"40",X"30",X"E4",X"20",X"18",X"04",X"88",X"76",
X"01",X"03",X"00",X"5B",X"20",X"50",X"18",X"10",X"30",X"40",X"F8",X"78",X"E0",X"74",X"98",X"6C",
X"16",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"10",X"24",X"E5",X"3B",
X"09",X"02",X"80",X"5B",X"F8",X"70",X"20",X"50",X"28",X"50",X"C0",X"68",X"18",X"06",X"A4",X"5E",
X"09",X"02",X"80",X"5B",X"F0",X"60",X"18",X"60",X"20",X"40",X"D8",X"60",X"20",X"0C",X"9D",X"61",
X"05",X"03",X"00",X"5B",X"18",X"50",X"20",X"50",X"38",X"30",X"F0",X"60",X"D0",X"66",X"A6",X"53",
X"08",X"02",X"00",X"5B",X"18",X"60",X"28",X"50",X"40",X"40",X"F0",X"60",X"C8",X"62",X"9D",X"61",
X"09",X"01",X"C0",X"5B",X"B8",X"60",X"D0",X"60",X"F8",X"50",X"0C",X"20",X"20",X"44",X"00",X"00",
X"06",X"01",X"00",X"5B",X"B0",X"60",X"C8",X"60",X"F8",X"50",X"0C",X"20",X"20",X"44",X"00",X"00",
X"04",X"00",X"A0",X"5B",X"B0",X"60",X"C0",X"60",X"F8",X"50",X"0C",X"20",X"20",X"44",X"00",X"00",
X"05",X"00",X"80",X"5B",X"A8",X"60",X"C0",X"60",X"00",X"50",X"0C",X"20",X"20",X"44",X"00",X"00",
X"08",X"00",X"28",X"5B",X"A0",X"60",X"B8",X"60",X"00",X"50",X"0C",X"20",X"20",X"44",X"00",X"00",
X"09",X"00",X"18",X"5B",X"00",X"40",X"20",X"30",X"38",X"30",X"E4",X"28",X"08",X"F8",X"91",X"65",
X"01",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"20",X"14",X"30",X"E6",X"27",
X"05",X"08",X"00",X"5B",X"20",X"60",X"28",X"30",X"40",X"30",X"FC",X"58",X"E4",X"70",X"A7",X"4B",
X"07",X"00",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"40",X"F4",X"4C",X"E7",X"23",
X"05",X"01",X"80",X"5B",X"F8",X"70",X"30",X"60",X"30",X"30",X"E8",X"60",X"08",X"FC",X"AC",X"48",
X"07",X"00",X"20",X"5B",X"08",X"30",X"28",X"50",X"50",X"40",X"F0",X"48",X"C8",X"68",X"A8",X"47",
X"07",X"00",X"E0",X"5B",X"10",X"40",X"28",X"40",X"50",X"50",X"F0",X"40",X"D0",X"1A",X"DE",X"3A",
X"02",X"01",X"40",X"5B",X"F0",X"60",X"18",X"40",X"20",X"40",X"D0",X"68",X"2C",X"18",X"C7",X"25",
X"03",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"14",X"30",X"FC",X"F0",X"FB",X"41",
X"03",X"07",X"00",X"5B",X"10",X"40",X"20",X"60",X"38",X"30",X"F8",X"30",X"F4",X"5E",X"A1",X"5C",
X"04",X"00",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"10",X"20",X"4E",X"FA",X"53",
X"0A",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"20",X"18",X"44",X"FC",X"5A",
X"06",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"20",X"14",X"40",X"FB",X"5D",
X"08",X"01",X"40",X"5B",X"C0",X"30",X"E0",X"40",X"F8",X"60",X"14",X"58",X"24",X"48",X"00",X"00",
X"0C",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"42",X"FE",X"3F",
X"02",X"00",X"38",X"5B",X"08",X"40",X"20",X"30",X"38",X"30",X"DC",X"48",X"BC",X"58",X"A4",X"54",
X"04",X"00",X"60",X"5B",X"D0",X"60",X"10",X"70",X"20",X"30",X"BC",X"60",X"1C",X"08",X"A1",X"5D",
X"04",X"00",X"A0",X"5B",X"D0",X"50",X"10",X"60",X"18",X"50",X"BC",X"60",X"20",X"0E",X"A3",X"5C",
X"13",X"00",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"38",X"04",X"28",X"E3",X"27",
X"14",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"00",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"34",X"30",X"04",X"12",X"DE",X"56",
X"01",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"28",X"F4",X"1E",X"DC",X"49",
X"08",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"A0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"62",X"E2",X"37",
X"01",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"20",X"10",X"36",X"F9",X"44",
X"0A",X"00",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"28",X"0C",X"44",X"E7",X"1B",
X"07",X"04",X"00",X"5B",X"20",X"50",X"40",X"60",X"58",X"50",X"00",X"58",X"DC",X"54",X"A7",X"4D",
X"0A",X"00",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"44",X"58",X"EC",X"00",X"21",X"30",
X"05",X"05",X"00",X"5B",X"20",X"50",X"40",X"50",X"48",X"40",X"00",X"40",X"DC",X"60",X"B9",X"37",
X"04",X"03",X"80",X"5B",X"D8",X"40",X"B8",X"40",X"F8",X"40",X"04",X"58",X"2C",X"3C",X"55",X"5A",
X"03",X"02",X"00",X"5B",X"F0",X"40",X"B0",X"40",X"D8",X"40",X"04",X"58",X"2C",X"3C",X"55",X"5A",
X"05",X"01",X"C0",X"5B",X"B0",X"40",X"F0",X"40",X"D8",X"40",X"04",X"58",X"2C",X"3C",X"55",X"5A",
X"07",X"01",X"40",X"5B",X"F0",X"40",X"B0",X"40",X"D0",X"40",X"04",X"58",X"2C",X"3C",X"55",X"5A",
X"04",X"00",X"C0",X"5B",X"98",X"60",X"C8",X"60",X"08",X"40",X"18",X"30",X"28",X"44",X"2E",X"25",
X"04",X"02",X"80",X"5B",X"A0",X"60",X"C8",X"60",X"08",X"40",X"18",X"30",X"28",X"44",X"2E",X"25",
X"04",X"02",X"00",X"5B",X"A0",X"60",X"C0",X"60",X"00",X"40",X"18",X"30",X"28",X"44",X"2E",X"25",
X"04",X"00",X"10",X"5B",X"A0",X"60",X"B0",X"50",X"20",X"40",X"F8",X"18",X"1C",X"52",X"00",X"00",
X"03",X"00",X"14",X"5B",X"A0",X"60",X"B0",X"50",X"18",X"40",X"F8",X"18",X"1C",X"52",X"00",X"00",
X"05",X"00",X"1C",X"5B",X"A0",X"60",X"B0",X"50",X"20",X"40",X"F8",X"18",X"1C",X"52",X"00",X"00",
X"04",X"00",X"28",X"5B",X"A0",X"60",X"B0",X"50",X"18",X"40",X"F8",X"18",X"1C",X"52",X"00",X"00",
X"04",X"02",X"80",X"5B",X"A0",X"60",X"E8",X"60",X"F8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"02",X"80",X"5B",X"A0",X"60",X"E8",X"60",X"F8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"03",X"01",X"C0",X"5B",X"A0",X"60",X"E8",X"60",X"F0",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"02",X"80",X"5B",X"A0",X"60",X"E0",X"60",X"F0",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"03",X"00",X"5B",X"A8",X"60",X"E0",X"60",X"F0",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"03",X"02",X"80",X"5B",X"A8",X"60",X"D8",X"60",X"E8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"03",X"02",X"00",X"5B",X"A8",X"60",X"D8",X"60",X"E8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"01",X"C0",X"5B",X"A8",X"60",X"D8",X"60",X"E8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"00",X"E0",X"5B",X"A8",X"60",X"D0",X"60",X"E0",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"00",X"80",X"5B",X"A0",X"60",X"D0",X"60",X"E0",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"00",X"C0",X"5B",X"A8",X"60",X"D0",X"60",X"E8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"00",X"70",X"5B",X"A8",X"60",X"D0",X"60",X"E8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"02",X"00",X"50",X"5B",X"A8",X"60",X"D8",X"60",X"E8",X"60",X"00",X"10",X"1C",X"52",X"42",X"59",
X"07",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"FC",X"1C",X"D2",X"28",
X"0C",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"38",X"04",X"18",X"B4",X"55",
X"02",X"00",X"C0",X"5B",X"F8",X"40",X"30",X"70",X"20",X"20",X"C4",X"38",X"10",X"FC",X"A3",X"5D",
X"02",X"01",X"40",X"5B",X"F8",X"60",X"28",X"50",X"28",X"50",X"B0",X"68",X"1C",X"06",X"A3",X"58",
X"03",X"01",X"C0",X"5B",X"10",X"50",X"28",X"40",X"30",X"30",X"08",X"30",X"F0",X"64",X"8E",X"70",
X"03",X"01",X"80",X"5B",X"10",X"50",X"28",X"50",X"38",X"30",X"04",X"28",X"F4",X"5E",X"8C",X"76",
X"04",X"02",X"80",X"5B",X"08",X"30",X"28",X"40",X"30",X"20",X"08",X"40",X"F4",X"5C",X"90",X"70",
X"02",X"04",X"00",X"5B",X"10",X"30",X"20",X"50",X"38",X"40",X"00",X"38",X"F0",X"5A",X"95",X"69",
X"06",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"40",X"08",X"4E",X"E4",X"19",
X"0E",X"00",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"34",X"50",X"10",X"66",X"F6",X"49",
X"01",X"02",X"80",X"5B",X"18",X"40",X"20",X"40",X"30",X"20",X"E4",X"60",X"CC",X"68",X"A5",X"5F",
X"02",X"02",X"80",X"5B",X"18",X"40",X"20",X"40",X"28",X"10",X"E4",X"58",X"D0",X"60",X"A5",X"5F",
X"01",X"02",X"80",X"5B",X"E0",X"60",X"18",X"40",X"20",X"40",X"D0",X"60",X"24",X"12",X"A8",X"5B",
X"01",X"02",X"00",X"5B",X"E0",X"60",X"18",X"50",X"28",X"40",X"D0",X"60",X"20",X"0A",X"A3",X"63",
X"01",X"01",X"C0",X"5B",X"E0",X"60",X"18",X"60",X"28",X"40",X"D0",X"68",X"20",X"0A",X"A5",X"61",
X"02",X"01",X"C0",X"5B",X"E0",X"60",X"18",X"50",X"28",X"40",X"D0",X"60",X"24",X"12",X"A2",X"69",
X"01",X"01",X"40",X"5B",X"E0",X"60",X"18",X"60",X"28",X"40",X"D4",X"68",X"1C",X"0A",X"A0",X"6E",
X"02",X"00",X"E0",X"5B",X"18",X"60",X"20",X"20",X"20",X"10",X"E0",X"60",X"D4",X"68",X"A0",X"6E",
X"01",X"00",X"E0",X"5B",X"18",X"60",X"18",X"20",X"30",X"20",X"E4",X"60",X"D4",X"6A",X"A3",X"63",
X"02",X"02",X"80",X"5B",X"18",X"40",X"20",X"40",X"30",X"20",X"E4",X"60",X"CC",X"68",X"A5",X"5F",
X"03",X"02",X"80",X"5B",X"18",X"40",X"20",X"40",X"28",X"10",X"E4",X"58",X"D0",X"60",X"A5",X"5F",
X"01",X"02",X"00",X"5B",X"E0",X"60",X"18",X"40",X"28",X"40",X"D0",X"60",X"24",X"10",X"A9",X"59",
X"03",X"02",X"00",X"5B",X"E0",X"60",X"18",X"40",X"20",X"40",X"D0",X"60",X"24",X"12",X"A8",X"5B",
X"01",X"01",X"C0",X"5B",X"E0",X"60",X"18",X"50",X"28",X"40",X"D0",X"60",X"20",X"0A",X"A3",X"63",
X"03",X"01",X"C0",X"5B",X"E0",X"60",X"18",X"60",X"28",X"40",X"D0",X"68",X"20",X"0A",X"A5",X"61",
X"02",X"01",X"C0",X"5B",X"E0",X"60",X"18",X"50",X"28",X"40",X"D0",X"60",X"24",X"12",X"A2",X"69",
X"04",X"01",X"40",X"5B",X"E0",X"60",X"18",X"60",X"28",X"40",X"D4",X"68",X"1C",X"0A",X"A0",X"6E",
X"03",X"00",X"C0",X"5B",X"18",X"60",X"20",X"20",X"20",X"10",X"E0",X"60",X"D4",X"68",X"A0",X"6E",
X"04",X"00",X"E0",X"5B",X"18",X"60",X"18",X"20",X"30",X"20",X"E4",X"60",X"D4",X"6A",X"A3",X"63",
X"03",X"02",X"80",X"5B",X"A8",X"60",X"C0",X"60",X"F8",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"01",X"02",X"80",X"5B",X"A8",X"60",X"C0",X"60",X"00",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"03",X"02",X"00",X"5B",X"A8",X"60",X"C0",X"60",X"00",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"02",X"01",X"C0",X"5B",X"A8",X"60",X"C0",X"60",X"00",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"05",X"00",X"C0",X"5B",X"A0",X"60",X"B8",X"60",X"00",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"02",X"00",X"C0",X"5B",X"A0",X"60",X"B8",X"60",X"00",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"06",X"00",X"70",X"5B",X"A0",X"60",X"B8",X"60",X"00",X"60",X"40",X"60",X"24",X"60",X"00",X"00",
X"13",X"00",X"A0",X"5B",X"08",X"30",X"18",X"30",X"38",X"40",X"EC",X"30",X"D4",X"2E",X"CB",X"20",
X"04",X"02",X"80",X"5B",X"00",X"60",X"18",X"50",X"38",X"50",X"F4",X"08",X"DC",X"5E",X"A1",X"5C",
X"0B",X"00",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"48",X"40",X"20",X"38",X"E3",X"29",
X"04",X"00",X"A0",X"5B",X"00",X"30",X"18",X"20",X"38",X"40",X"FC",X"60",X"E0",X"2A",X"A1",X"54",
X"03",X"00",X"C0",X"5B",X"08",X"30",X"20",X"30",X"20",X"10",X"FC",X"68",X"E8",X"1C",X"A2",X"50",
X"02",X"00",X"C0",X"5B",X"08",X"30",X"20",X"40",X"20",X"10",X"FC",X"68",X"E0",X"24",X"9B",X"5B",
X"04",X"06",X"00",X"5B",X"10",X"40",X"18",X"40",X"30",X"30",X"F8",X"68",X"DC",X"62",X"A8",X"50",
X"01",X"06",X"00",X"5B",X"10",X"20",X"18",X"40",X"30",X"40",X"F8",X"68",X"D4",X"6E",X"AC",X"55",
X"03",X"06",X"00",X"5B",X"20",X"50",X"18",X"10",X"30",X"40",X"F8",X"70",X"D0",X"6A",X"AC",X"58",
X"12",X"00",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"00",X"1E",X"C1",X"48",
X"02",X"00",X"C0",X"5B",X"F8",X"50",X"20",X"60",X"40",X"60",X"C4",X"48",X"EC",X"FE",X"BA",X"43",
X"02",X"00",X"A0",X"5B",X"F8",X"40",X"18",X"60",X"40",X"60",X"C0",X"68",X"E8",X"00",X"A9",X"5E",
X"02",X"00",X"60",X"5B",X"A0",X"60",X"A8",X"60",X"F8",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"02",X"00",X"40",X"5B",X"A0",X"60",X"A8",X"60",X"F0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"02",X"00",X"50",X"5B",X"A0",X"60",X"A8",X"60",X"F0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"05",X"00",X"E0",X"5B",X"A0",X"60",X"B0",X"60",X"F0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"04",X"01",X"40",X"5B",X"A0",X"60",X"C0",X"60",X"E8",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"06",X"01",X"C0",X"5B",X"A8",X"60",X"C8",X"60",X"E0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"03",X"01",X"C0",X"5B",X"A8",X"60",X"D0",X"60",X"E0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"03",X"00",X"E0",X"5B",X"A0",X"60",X"D0",X"60",X"E0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"02",X"00",X"60",X"5B",X"A0",X"60",X"D0",X"60",X"E0",X"60",X"10",X"20",X"20",X"60",X"37",X"57",
X"02",X"01",X"00",X"5B",X"18",X"60",X"28",X"40",X"10",X"00",X"F0",X"48",X"BC",X"64",X"AC",X"59",
X"02",X"01",X"40",X"5B",X"10",X"60",X"20",X"40",X"18",X"10",X"F0",X"48",X"BC",X"62",X"AF",X"56",
X"02",X"01",X"80",X"5B",X"10",X"50",X"20",X"30",X"20",X"10",X"EC",X"48",X"C0",X"5E",X"B0",X"56",
X"03",X"01",X"40",X"5B",X"F0",X"50",X"10",X"60",X"20",X"50",X"C0",X"60",X"10",X"02",X"B6",X"51",
X"02",X"01",X"40",X"5B",X"E8",X"60",X"18",X"60",X"28",X"50",X"C4",X"60",X"04",X"00",X"B8",X"4A",
X"04",X"01",X"40",X"5B",X"18",X"60",X"10",X"00",X"20",X"30",X"E8",X"58",X"C8",X"62",X"B5",X"54",
X"03",X"00",X"E0",X"5B",X"00",X"00",X"18",X"60",X"30",X"50",X"E4",X"60",X"CC",X"58",X"B5",X"56",
X"04",X"00",X"C0",X"5B",X"00",X"00",X"18",X"60",X"28",X"40",X"E4",X"60",X"D0",X"5C",X"B2",X"59",
X"03",X"00",X"80",X"5B",X"E8",X"60",X"10",X"60",X"20",X"20",X"CC",X"60",X"04",X"FC",X"B2",X"55",
X"03",X"03",X"80",X"5B",X"90",X"70",X"F0",X"50",X"00",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"03",X"04",X"00",X"5B",X"90",X"70",X"F8",X"50",X"00",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"03",X"05",X"00",X"5B",X"90",X"70",X"F8",X"50",X"00",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"03",X"02",X"80",X"5B",X"90",X"70",X"F0",X"50",X"00",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"03",X"02",X"80",X"5B",X"98",X"70",X"E8",X"50",X"F8",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"05",X"01",X"80",X"5B",X"A0",X"70",X"E0",X"50",X"F0",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"05",X"01",X"80",X"5B",X"A0",X"70",X"D8",X"50",X"F0",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"06",X"01",X"40",X"5B",X"A0",X"70",X"D8",X"50",X"F0",X"30",X"04",X"18",X"28",X"4E",X"39",X"41",
X"03",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"01",X"C0",X"5B",X"08",X"40",X"20",X"40",X"38",X"50",X"E4",X"48",X"DC",X"44",X"BD",X"3D",
X"06",X"03",X"00",X"5B",X"18",X"40",X"28",X"50",X"20",X"20",X"FC",X"68",X"C4",X"60",X"A3",X"64",
X"03",X"01",X"80",X"5B",X"10",X"10",X"28",X"60",X"38",X"40",X"FC",X"60",X"C0",X"62",X"A3",X"60",
X"08",X"01",X"00",X"5B",X"28",X"60",X"18",X"10",X"30",X"30",X"00",X"60",X"C0",X"60",X"A0",X"68",
X"05",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"FC",X"20",X"DE",X"48",
X"02",X"04",X"00",X"5B",X"20",X"50",X"30",X"40",X"18",X"10",X"F8",X"68",X"E0",X"6C",X"98",X"6C",
X"04",X"07",X"00",X"3D",X"08",X"30",X"10",X"20",X"38",X"50",X"F0",X"48",X"E4",X"1C",X"A9",X"63",
X"03",X"06",X"00",X"38",X"10",X"40",X"18",X"20",X"38",X"50",X"F0",X"50",X"D8",X"22",X"A9",X"5D",
X"04",X"06",X"00",X"2F",X"10",X"20",X"18",X"30",X"40",X"60",X"F0",X"48",X"DC",X"1A",X"AC",X"5F",
X"04",X"06",X"00",X"2C",X"00",X"10",X"18",X"50",X"40",X"60",X"EC",X"50",X"B0",X"56",X"E5",X"0D",
X"04",X"07",X"00",X"2A",X"10",X"20",X"18",X"60",X"38",X"50",X"E8",X"58",X"DC",X"1A",X"B9",X"44",
X"05",X"02",X"00",X"2C",X"08",X"40",X"20",X"40",X"38",X"50",X"E0",X"60",X"E4",X"0C",X"AF",X"42",
X"04",X"04",X"00",X"2A",X"08",X"40",X"10",X"30",X"30",X"40",X"E0",X"68",X"E4",X"02",X"B1",X"54",
X"06",X"06",X"00",X"2B",X"08",X"50",X"18",X"40",X"38",X"40",X"E0",X"60",X"E0",X"08",X"B3",X"54",
X"05",X"06",X"00",X"2D",X"08",X"50",X"20",X"50",X"38",X"40",X"DC",X"60",X"DC",X"10",X"B1",X"53",
X"04",X"03",X"80",X"34",X"00",X"20",X"18",X"30",X"30",X"50",X"DC",X"48",X"E4",X"0A",X"B4",X"43",
X"06",X"01",X"C0",X"41",X"F8",X"60",X"20",X"60",X"38",X"60",X"F8",X"08",X"D8",X"5C",X"A3",X"50",
X"04",X"01",X"00",X"62",X"18",X"60",X"10",X"10",X"38",X"70",X"F4",X"70",X"D4",X"5A",X"9C",X"5A",
X"03",X"03",X"80",X"6E",X"00",X"60",X"18",X"60",X"38",X"50",X"E4",X"60",X"F0",X"04",X"AA",X"50",
X"02",X"02",X"80",X"6F",X"00",X"50",X"20",X"50",X"30",X"40",X"EC",X"60",X"EC",X"00",X"AC",X"4E",
X"03",X"01",X"C0",X"67",X"08",X"50",X"20",X"50",X"40",X"50",X"F0",X"58",X"E8",X"06",X"A7",X"57",
X"02",X"01",X"40",X"81",X"08",X"50",X"20",X"40",X"40",X"60",X"F4",X"68",X"EC",X"0A",X"9F",X"60",
X"03",X"00",X"E0",X"83",X"08",X"60",X"28",X"50",X"40",X"60",X"F8",X"70",X"E8",X"0A",X"9D",X"60",
X"02",X"00",X"E0",X"88",X"08",X"40",X"20",X"40",X"40",X"60",X"F8",X"58",X"F0",X"0C",X"92",X"73",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"03",X"00",X"47",X"00",X"00",X"20",X"60",X"38",X"70",X"04",X"60",X"BC",X"6E",X"A5",X"76",
X"04",X"04",X"00",X"45",X"00",X"60",X"20",X"60",X"40",X"70",X"FC",X"08",X"BC",X"68",X"AA",X"65",
X"04",X"03",X"80",X"3F",X"00",X"00",X"20",X"60",X"40",X"70",X"00",X"60",X"BC",X"68",X"A6",X"75",
X"06",X"05",X"00",X"39",X"00",X"00",X"20",X"60",X"40",X"70",X"00",X"60",X"C0",X"5A",X"AB",X"67",
X"05",X"03",X"80",X"38",X"00",X"50",X"20",X"60",X"40",X"60",X"FC",X"00",X"BC",X"62",X"AD",X"60",
X"05",X"02",X"00",X"35",X"F8",X"60",X"20",X"60",X"40",X"60",X"F4",X"00",X"BC",X"62",X"AC",X"60",
X"06",X"01",X"C0",X"31",X"00",X"60",X"20",X"60",X"48",X"60",X"F8",X"00",X"BC",X"5E",X"A8",X"66",
X"05",X"01",X"80",X"31",X"00",X"60",X"20",X"60",X"40",X"50",X"F4",X"00",X"BC",X"58",X"AB",X"5A",
X"05",X"01",X"40",X"33",X"08",X"60",X"20",X"50",X"40",X"40",X"C0",X"58",X"F0",X"06",X"A9",X"57",
X"0C",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"05",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"40",X"14",X"3C",X"BE",X"6C",
X"06",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"50",X"0C",X"28",X"CB",X"44",
X"04",X"02",X"00",X"4B",X"10",X"30",X"28",X"60",X"38",X"60",X"F4",X"48",X"C4",X"56",X"A3",X"59",
X"04",X"05",X"00",X"57",X"08",X"10",X"20",X"50",X"30",X"50",X"F4",X"50",X"E0",X"66",X"9B",X"70",
X"04",X"05",X"00",X"5D",X"10",X"20",X"18",X"50",X"30",X"50",X"F0",X"48",X"E4",X"58",X"97",X"74",
X"04",X"05",X"00",X"61",X"18",X"50",X"18",X"20",X"30",X"60",X"F0",X"50",X"E8",X"5C",X"95",X"75",
X"03",X"05",X"00",X"63",X"18",X"50",X"18",X"20",X"30",X"50",X"F0",X"60",X"E4",X"5E",X"97",X"72",
X"04",X"05",X"00",X"65",X"18",X"40",X"20",X"40",X"38",X"50",X"EC",X"60",X"E0",X"6A",X"9B",X"6D",
X"03",X"03",X"80",X"67",X"20",X"60",X"30",X"50",X"18",X"10",X"E8",X"58",X"DC",X"60",X"9F",X"6E",
X"03",X"03",X"80",X"64",X"20",X"50",X"10",X"10",X"30",X"50",X"E8",X"58",X"DC",X"64",X"A0",X"6C",
X"03",X"02",X"00",X"61",X"08",X"10",X"20",X"50",X"40",X"60",X"E8",X"50",X"DC",X"58",X"A3",X"62",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"40",X"08",X"4A",X"C9",X"48",
X"05",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"50",X"E0",X"10",X"01",X"19",
X"04",X"01",X"00",X"35",X"08",X"50",X"28",X"70",X"40",X"70",X"F0",X"08",X"C0",X"70",X"9B",X"68",
X"03",X"02",X"00",X"31",X"10",X"70",X"20",X"50",X"38",X"70",X"04",X"10",X"C0",X"74",X"99",X"6B",
X"04",X"05",X"00",X"31",X"10",X"60",X"28",X"60",X"38",X"70",X"E0",X"48",X"E0",X"28",X"9F",X"67",
X"04",X"06",X"00",X"32",X"08",X"60",X"28",X"40",X"38",X"50",X"E0",X"70",X"E4",X"18",X"A0",X"64",
X"06",X"06",X"00",X"38",X"00",X"60",X"28",X"40",X"38",X"60",X"F0",X"58",X"E8",X"18",X"9A",X"67",
X"02",X"05",X"00",X"47",X"00",X"50",X"20",X"30",X"38",X"60",X"F8",X"58",X"F0",X"0A",X"96",X"69",
X"04",X"03",X"80",X"60",X"00",X"50",X"20",X"50",X"38",X"60",X"F8",X"58",X"F4",X"0A",X"94",X"6B",
X"02",X"01",X"C0",X"7A",X"08",X"50",X"20",X"50",X"38",X"60",X"F8",X"58",X"EC",X"04",X"91",X"70",
X"03",X"01",X"C0",X"8E",X"00",X"50",X"20",X"60",X"40",X"60",X"F8",X"60",X"F4",X"0C",X"91",X"6D",
X"02",X"01",X"40",X"93",X"00",X"50",X"20",X"50",X"40",X"60",X"F4",X"58",X"F4",X"08",X"8E",X"77",
X"02",X"00",X"C0",X"94",X"00",X"60",X"20",X"30",X"40",X"60",X"EC",X"58",X"F0",X"06",X"90",X"73",
X"03",X"00",X"C0",X"9D",X"00",X"60",X"38",X"60",X"30",X"40",X"E4",X"68",X"F8",X"FA",X"96",X"69",
X"06",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"60",X"10",X"FC",X"E7",X"24",
X"04",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"38",X"24",X"3A",X"E2",X"30",
X"07",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"48",X"1C",X"16",X"DF",X"2F",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"01",X"C0",X"5B",X"08",X"50",X"20",X"60",X"38",X"60",X"F4",X"58",X"F4",X"18",X"8C",X"7F",
X"03",X"07",X"00",X"4A",X"00",X"40",X"20",X"50",X"38",X"50",X"F8",X"18",X"F0",X"58",X"95",X"78",
X"05",X"06",X"00",X"4C",X"00",X"40",X"20",X"40",X"38",X"50",X"F8",X"10",X"EC",X"52",X"A1",X"68",
X"04",X"06",X"00",X"42",X"00",X"50",X"18",X"40",X"38",X"50",X"E8",X"50",X"F0",X"10",X"A4",X"74",
X"05",X"06",X"00",X"3B",X"00",X"50",X"18",X"30",X"40",X"60",X"F4",X"10",X"E8",X"58",X"A8",X"73",
X"04",X"06",X"00",X"3A",X"00",X"50",X"18",X"20",X"40",X"60",X"E8",X"58",X"F4",X"0C",X"A9",X"6D",
X"04",X"07",X"00",X"39",X"00",X"50",X"20",X"20",X"40",X"60",X"E8",X"50",X"E8",X"16",X"A8",X"60",
X"03",X"03",X"80",X"3D",X"00",X"50",X"20",X"20",X"40",X"60",X"E4",X"60",X"E8",X"0C",X"B5",X"44",
X"06",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"40",X"F0",X"24",X"DB",X"23",
X"2A",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"05",X"01",X"80",X"5C",X"00",X"00",X"10",X"50",X"30",X"70",X"04",X"68",X"BC",X"6A",X"A5",X"6E",
X"04",X"02",X"80",X"58",X"10",X"60",X"08",X"00",X"28",X"70",X"04",X"70",X"B8",X"72",X"A5",X"6D",
X"04",X"03",X"00",X"55",X"08",X"70",X"10",X"50",X"28",X"60",X"B8",X"70",X"0C",X"02",X"A5",X"6F",
X"03",X"03",X"00",X"55",X"10",X"60",X"08",X"00",X"28",X"60",X"04",X"68",X"B8",X"6C",X"A7",X"6E",
X"04",X"03",X"80",X"5A",X"10",X"50",X"28",X"60",X"08",X"00",X"04",X"68",X"BC",X"66",X"A7",X"70",
X"04",X"04",X"00",X"5D",X"08",X"70",X"10",X"50",X"28",X"60",X"BC",X"70",X"0C",X"02",X"A7",X"6E",
X"03",X"03",X"00",X"63",X"10",X"50",X"28",X"60",X"08",X"00",X"04",X"70",X"C0",X"5C",X"A7",X"74",
X"04",X"03",X"00",X"68",X"00",X"60",X"10",X"50",X"28",X"60",X"BC",X"70",X"0C",X"02",X"AC",X"65",
X"03",X"02",X"80",X"72",X"08",X"40",X"08",X"00",X"28",X"40",X"04",X"58",X"C0",X"6E",X"AD",X"68",
X"02",X"01",X"00",X"7A",X"00",X"60",X"18",X"30",X"30",X"40",X"C0",X"78",X"F0",X"04",X"AD",X"6F",
X"03",X"00",X"C0",X"7F",X"00",X"60",X"18",X"20",X"38",X"70",X"C0",X"70",X"F4",X"FC",X"AF",X"66",
X"02",X"00",X"C0",X"88",X"00",X"50",X"28",X"50",X"30",X"50",X"F0",X"08",X"C4",X"62",X"AC",X"6D",
X"04",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"58",X"E4",X"1C",X"C4",X"4F",
X"06",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"40",X"F8",X"24",X"C9",X"25",
X"08",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"38",X"04",X"1E",X"DC",X"3D",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"03",X"80",X"4B",X"18",X"60",X"18",X"10",X"30",X"50",X"08",X"60",X"B4",X"60",X"A0",X"6C",
X"05",X"02",X"80",X"44",X"20",X"70",X"30",X"60",X"10",X"00",X"08",X"60",X"B0",X"62",X"99",X"71",
X"04",X"01",X"80",X"41",X"08",X"60",X"20",X"70",X"38",X"50",X"A8",X"68",X"04",X"00",X"A1",X"5B",
X"0C",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"48",X"F0",X"2A",X"CC",X"2D",
X"04",X"03",X"80",X"33",X"00",X"50",X"20",X"60",X"38",X"70",X"F0",X"10",X"DC",X"6C",X"96",X"75",
X"04",X"03",X"80",X"33",X"00",X"60",X"28",X"60",X"38",X"70",X"F4",X"08",X"DC",X"72",X"98",X"6F",
X"04",X"02",X"00",X"33",X"00",X"60",X"28",X"60",X"38",X"60",X"DC",X"68",X"9C",X"60",X"F5",X"02",
X"11",X"00",X"E0",X"35",X"00",X"50",X"20",X"30",X"40",X"70",X"F4",X"28",X"D0",X"58",X"9F",X"58",
X"07",X"01",X"80",X"34",X"00",X"50",X"28",X"50",X"38",X"60",X"F4",X"38",X"D0",X"42",X"A1",X"56",
X"09",X"01",X"40",X"34",X"08",X"60",X"30",X"50",X"40",X"60",X"F0",X"38",X"D4",X"30",X"A3",X"52",
X"16",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"38",X"F8",X"20",X"C9",X"36",
X"03",X"07",X"00",X"46",X"08",X"10",X"20",X"60",X"28",X"50",X"00",X"60",X"BC",X"6E",X"A5",X"6D",
X"05",X"06",X"00",X"45",X"00",X"60",X"20",X"60",X"28",X"60",X"00",X"08",X"C4",X"60",X"AC",X"68",
X"03",X"06",X"00",X"4A",X"00",X"60",X"20",X"50",X"28",X"60",X"F4",X"10",X"C8",X"5C",X"B3",X"67",
X"04",X"06",X"00",X"4C",X"00",X"60",X"20",X"50",X"28",X"60",X"F0",X"10",X"CC",X"62",X"B6",X"61",
X"03",X"07",X"00",X"55",X"F8",X"50",X"20",X"50",X"30",X"50",X"F4",X"10",X"D8",X"60",X"B0",X"6C",
X"04",X"05",X"00",X"67",X"00",X"00",X"18",X"50",X"28",X"40",X"F8",X"50",X"E4",X"58",X"A7",X"67",
X"03",X"05",X"00",X"75",X"10",X"50",X"20",X"40",X"30",X"40",X"F4",X"48",X"E4",X"60",X"9E",X"6F",
X"03",X"02",X"80",X"79",X"08",X"20",X"18",X"50",X"38",X"50",X"EC",X"50",X"E4",X"5E",X"9E",X"6A",
X"03",X"01",X"C0",X"7C",X"08",X"10",X"10",X"50",X"38",X"50",X"E8",X"60",X"DC",X"68",X"A0",X"6D",
X"04",X"01",X"C0",X"81",X"10",X"50",X"10",X"10",X"40",X"60",X"E4",X"68",X"D4",X"68",X"A2",X"70",
X"03",X"01",X"C0",X"86",X"10",X"20",X"10",X"40",X"38",X"60",X"E4",X"60",X"D4",X"66",X"A2",X"71",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"A0",X"56",X"08",X"60",X"20",X"70",X"28",X"40",X"AC",X"78",X"0C",X"FC",X"9A",X"6C",
X"03",X"03",X"80",X"47",X"08",X"10",X"20",X"60",X"38",X"60",X"04",X"58",X"BC",X"6E",X"A4",X"75",
X"04",X"07",X"00",X"3E",X"08",X"00",X"20",X"60",X"40",X"70",X"FC",X"60",X"C8",X"74",X"A8",X"73",
X"03",X"06",X"00",X"38",X"F8",X"50",X"20",X"50",X"40",X"60",X"D8",X"60",X"F8",X"00",X"AC",X"64",
X"03",X"06",X"00",X"35",X"00",X"50",X"20",X"40",X"40",X"50",X"F0",X"10",X"E0",X"5E",X"A8",X"5E",
X"02",X"02",X"00",X"5A",X"F8",X"30",X"20",X"50",X"38",X"50",X"E0",X"58",X"08",X"FC",X"A9",X"4C",
X"05",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"40",X"14",X"40",X"E9",X"24",
X"05",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"50",X"14",X"42",X"EE",X"19",
X"03",X"02",X"80",X"4C",X"08",X"50",X"20",X"50",X"40",X"40",X"EC",X"50",X"EC",X"0E",X"A3",X"5C",
X"02",X"05",X"00",X"2F",X"00",X"50",X"18",X"60",X"40",X"50",X"EC",X"58",X"EC",X"0E",X"A5",X"5F",
X"05",X"05",X"00",X"2E",X"00",X"50",X"20",X"50",X"40",X"50",X"E8",X"48",X"E4",X"16",X"AB",X"5A",
X"05",X"04",X"00",X"2D",X"00",X"40",X"20",X"50",X"40",X"50",X"E4",X"48",X"E8",X"1C",X"AF",X"62",
X"06",X"03",X"80",X"2D",X"F8",X"50",X"20",X"40",X"40",X"50",X"DC",X"50",X"F0",X"0A",X"BA",X"5D",
X"05",X"03",X"00",X"30",X"F8",X"40",X"20",X"40",X"40",X"50",X"DC",X"50",X"F0",X"04",X"BB",X"67",
X"05",X"02",X"80",X"30",X"F8",X"50",X"20",X"50",X"40",X"50",X"F4",X"08",X"D0",X"5E",X"B7",X"65",
X"05",X"03",X"80",X"38",X"F8",X"50",X"20",X"50",X"40",X"60",X"F8",X"08",X"CC",X"5C",X"B3",X"64",
X"03",X"02",X"80",X"55",X"F8",X"60",X"20",X"60",X"40",X"60",X"C8",X"60",X"B0",X"60",X"F8",X"01",
X"03",X"00",X"E0",X"69",X"00",X"50",X"20",X"60",X"40",X"50",X"C4",X"60",X"F0",X"02",X"AA",X"64",
X"02",X"00",X"70",X"77",X"00",X"40",X"20",X"50",X"38",X"40",X"C0",X"68",X"F8",X"FE",X"A7",X"5F",
X"02",X"00",X"80",X"85",X"F8",X"60",X"18",X"60",X"38",X"50",X"C4",X"68",X"0C",X"FE",X"A3",X"62",
X"0E",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"10",X"14",X"14",X"BC",X"41",
X"01",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"F8",X"1C",X"DF",X"13",
X"02",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"38",X"F4",X"28",X"E7",X"11",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"07",X"00",X"C0",X"3C",X"F0",X"60",X"18",X"60",X"30",X"50",X"D4",X"50",X"0C",X"F8",X"9B",X"5C",
X"07",X"00",X"A0",X"3B",X"E8",X"60",X"18",X"70",X"38",X"50",X"D0",X"48",X"04",X"FA",X"A0",X"56",
X"05",X"01",X"80",X"3C",X"F8",X"10",X"18",X"50",X"38",X"50",X"EC",X"50",X"C8",X"42",X"AB",X"4C",
X"05",X"01",X"00",X"38",X"E8",X"60",X"18",X"60",X"40",X"60",X"C8",X"58",X"E8",X"04",X"AA",X"55",
X"06",X"01",X"C0",X"37",X"E8",X"50",X"18",X"60",X"40",X"60",X"D0",X"50",X"EC",X"02",X"A9",X"5A",
X"06",X"04",X"00",X"37",X"E8",X"50",X"18",X"60",X"40",X"60",X"F4",X"08",X"D4",X"56",X"A7",X"5C",
X"07",X"05",X"00",X"37",X"E8",X"40",X"20",X"70",X"40",X"60",X"D8",X"58",X"F4",X"00",X"A8",X"59",
X"05",X"03",X"80",X"39",X"E8",X"50",X"18",X"60",X"40",X"60",X"DC",X"50",X"F0",X"FE",X"AD",X"48",
X"05",X"02",X"00",X"3B",X"F0",X"40",X"10",X"50",X"40",X"60",X"DC",X"58",X"EC",X"02",X"B1",X"3F",
X"03",X"02",X"80",X"3E",X"00",X"10",X"18",X"50",X"38",X"60",X"FC",X"40",X"DC",X"56",X"A8",X"45",
X"08",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"58",X"1C",X"32",X"EA",X"1F",
X"06",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"2C",X"32",X"E7",X"20",
X"08",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"48",X"EC",X"00",X"12",X"17",
X"04",X"02",X"00",X"60",X"00",X"60",X"20",X"60",X"38",X"50",X"E0",X"68",X"F8",X"04",X"95",X"74",
X"04",X"03",X"80",X"79",X"00",X"50",X"18",X"60",X"38",X"50",X"FC",X"08",X"E4",X"60",X"9F",X"69",
X"03",X"03",X"00",X"81",X"00",X"40",X"18",X"60",X"30",X"40",X"F8",X"10",X"E8",X"5C",X"9F",X"67",
X"04",X"02",X"80",X"85",X"00",X"50",X"20",X"60",X"38",X"50",X"EC",X"60",X"F4",X"08",X"9A",X"6E",
X"03",X"01",X"40",X"81",X"00",X"40",X"20",X"60",X"38",X"60",X"F0",X"60",X"F4",X"04",X"A2",X"58",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"06",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"38",X"E4",X"08",X"FB",X"44",
X"07",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"38",X"E0",X"08",X"FD",X"49",
X"05",X"08",X"00",X"30",X"08",X"50",X"20",X"40",X"40",X"60",X"EC",X"58",X"DC",X"1E",X"A7",X"5D",
X"04",X"08",X"00",X"2C",X"08",X"50",X"20",X"40",X"40",X"50",X"F0",X"48",X"E0",X"1C",X"A8",X"5D",
X"05",X"08",X"00",X"2B",X"00",X"50",X"28",X"50",X"40",X"60",X"EC",X"48",X"E8",X"18",X"A7",X"5E",
X"06",X"06",X"00",X"2B",X"00",X"50",X"20",X"40",X"38",X"50",X"F0",X"18",X"E8",X"56",X"A8",X"5D",
X"03",X"06",X"00",X"2D",X"00",X"50",X"20",X"40",X"38",X"60",X"F0",X"18",X"E4",X"4C",X"A3",X"5F",
X"03",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"30",X"F8",X"42",X"DD",X"6C",
X"05",X"06",X"00",X"41",X"00",X"50",X"18",X"40",X"30",X"60",X"F8",X"10",X"E8",X"62",X"9F",X"6F",
X"05",X"04",X"00",X"75",X"00",X"50",X"20",X"50",X"30",X"40",X"FC",X"08",X"E8",X"62",X"9F",X"6F",
X"07",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"F8",X"1C",X"DF",X"13",
X"02",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"38",X"F4",X"28",X"E7",X"11",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"A0",X"7C",X"08",X"70",X"20",X"60",X"38",X"60",X"FC",X"18",X"EC",X"6A",X"8E",X"71",
X"02",X"01",X"C0",X"73",X"08",X"40",X"18",X"40",X"38",X"50",X"F4",X"48",X"DC",X"58",X"97",X"6D",
X"02",X"01",X"C0",X"72",X"10",X"30",X"18",X"20",X"28",X"30",X"F4",X"38",X"D8",X"5C",X"99",X"6D",
X"03",X"00",X"E0",X"79",X"18",X"40",X"28",X"30",X"10",X"10",X"F4",X"50",X"CC",X"54",X"9F",X"5E",
X"0E",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"E0",X"53",X"10",X"50",X"08",X"00",X"38",X"60",X"00",X"58",X"C0",X"76",X"91",X"74",
X"02",X"01",X"00",X"4D",X"08",X"60",X"18",X"60",X"38",X"60",X"FC",X"00",X"C0",X"72",X"9A",X"64",
X"03",X"03",X"80",X"45",X"08",X"10",X"20",X"50",X"30",X"60",X"04",X"60",X"C4",X"76",X"9A",X"71",
X"04",X"03",X"80",X"3D",X"08",X"00",X"20",X"60",X"30",X"60",X"04",X"68",X"C8",X"72",X"9E",X"71",
X"04",X"03",X"00",X"39",X"00",X"00",X"18",X"60",X"30",X"60",X"00",X"60",X"C8",X"5E",X"A0",X"65",
X"03",X"03",X"00",X"36",X"08",X"00",X"18",X"60",X"30",X"60",X"00",X"60",X"C4",X"64",X"9F",X"64",
X"06",X"01",X"C0",X"35",X"18",X"60",X"28",X"50",X"08",X"00",X"00",X"58",X"B8",X"72",X"9C",X"68",
X"04",X"01",X"C0",X"39",X"00",X"60",X"20",X"60",X"30",X"60",X"00",X"00",X"B8",X"70",X"9C",X"65",
X"05",X"03",X"80",X"47",X"00",X"60",X"20",X"60",X"30",X"60",X"00",X"08",X"C4",X"60",X"9C",X"6C",
X"03",X"06",X"00",X"50",X"F8",X"60",X"20",X"60",X"38",X"60",X"FC",X"08",X"D8",X"64",X"9D",X"75",
X"04",X"07",X"00",X"53",X"F8",X"60",X"20",X"60",X"38",X"60",X"F8",X"08",X"DC",X"6A",X"9E",X"74",
X"02",X"07",X"00",X"4F",X"F8",X"60",X"20",X"60",X"38",X"60",X"FC",X"08",X"E0",X"6A",X"9F",X"71",
X"04",X"01",X"C0",X"43",X"F8",X"60",X"28",X"50",X"38",X"60",X"E0",X"60",X"F8",X"F6",X"9E",X"69",
X"0E",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"40",X"F8",X"18",X"E0",X"29",
X"03",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"34",X"48",X"F8",X"36",X"E7",X"0B",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"01",X"80",X"4E",X"00",X"50",X"28",X"50",X"38",X"60",X"E4",X"60",X"F0",X"0A",X"91",X"77",
X"03",X"04",X"00",X"51",X"F8",X"50",X"20",X"40",X"38",X"60",X"FC",X"18",X"E0",X"5E",X"8E",X"7B",
X"04",X"02",X"80",X"54",X"F8",X"50",X"20",X"50",X"38",X"70",X"F8",X"08",X"D0",X"5E",X"91",X"79",
X"03",X"01",X"C0",X"51",X"00",X"60",X"28",X"60",X"40",X"70",X"C0",X"68",X"F4",X"00",X"95",X"73",
X"03",X"01",X"40",X"4F",X"00",X"70",X"28",X"50",X"38",X"60",X"B8",X"78",X"F0",X"02",X"9A",X"6D",
X"03",X"01",X"80",X"34",X"00",X"60",X"30",X"70",X"38",X"60",X"F4",X"08",X"BC",X"72",X"9B",X"6E",
X"03",X"02",X"80",X"2C",X"00",X"60",X"30",X"70",X"40",X"70",X"F0",X"10",X"C4",X"6E",X"96",X"7A",
X"04",X"05",X"00",X"2F",X"00",X"60",X"28",X"60",X"40",X"70",X"F8",X"08",X"C8",X"64",X"9A",X"71",
X"04",X"07",X"00",X"32",X"00",X"60",X"28",X"50",X"38",X"60",X"F4",X"10",X"D4",X"64",X"A1",X"60",
X"03",X"03",X"80",X"3E",X"F8",X"60",X"20",X"30",X"30",X"50",X"F8",X"08",X"E0",X"5C",X"A3",X"5C",
X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"14",X"18",X"D8",X"0E",X"E9",X"39",
X"04",X"06",X"00",X"4F",X"F8",X"70",X"28",X"50",X"40",X"60",X"E4",X"60",X"F0",X"14",X"98",X"75",
X"03",X"06",X"00",X"66",X"F8",X"60",X"28",X"60",X"38",X"50",X"FC",X"08",X"E8",X"5E",X"9C",X"6B",
X"03",X"03",X"80",X"6F",X"F8",X"60",X"28",X"50",X"30",X"50",X"FC",X"00",X"EC",X"5C",X"99",X"69",
X"17",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"02",X"80",X"74",X"08",X"40",X"18",X"50",X"30",X"50",X"FC",X"18",X"F0",X"64",X"8F",X"7A",
X"03",X"05",X"00",X"74",X"00",X"50",X"18",X"60",X"30",X"50",X"00",X"10",X"EC",X"60",X"97",X"75",
X"04",X"06",X"00",X"6E",X"00",X"50",X"18",X"60",X"28",X"40",X"FC",X"08",X"E8",X"60",X"A1",X"6A",
X"04",X"05",X"00",X"74",X"00",X"50",X"18",X"60",X"28",X"40",X"F4",X"08",X"E8",X"5C",X"A3",X"68",
X"03",X"06",X"00",X"75",X"00",X"50",X"18",X"60",X"28",X"40",X"F8",X"10",X"E4",X"5C",X"A3",X"6A",
X"03",X"06",X"00",X"7B",X"00",X"50",X"18",X"50",X"30",X"40",X"FC",X"10",X"E4",X"60",X"A5",X"66",
X"03",X"04",X"00",X"89",X"00",X"00",X"18",X"40",X"28",X"40",X"FC",X"58",X"E0",X"66",X"A6",X"67",
X"03",X"00",X"C0",X"A2",X"F8",X"60",X"28",X"60",X"28",X"20",X"D8",X"60",X"F4",X"06",X"AA",X"53",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"07",X"00",X"5D",X"00",X"50",X"18",X"60",X"38",X"60",X"F8",X"20",X"EC",X"4A",X"95",X"72",
X"03",X"06",X"00",X"6D",X"00",X"60",X"18",X"60",X"38",X"60",X"00",X"10",X"EC",X"58",X"97",X"70",
X"03",X"04",X"00",X"72",X"00",X"60",X"18",X"40",X"30",X"50",X"E4",X"60",X"F4",X"06",X"A1",X"5F",
X"03",X"01",X"40",X"7D",X"00",X"50",X"28",X"50",X"38",X"50",X"E0",X"58",X"E4",X"10",X"A9",X"4C",
X"03",X"00",X"70",X"81",X"00",X"10",X"10",X"30",X"38",X"60",X"F8",X"50",X"D8",X"52",X"A1",X"52",
X"03",X"00",X"40",X"89",X"F8",X"40",X"10",X"30",X"38",X"50",X"D0",X"48",X"04",X"F2",X"A5",X"4E",
X"0F",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"50",X"E8",X"36",X"CC",X"4F",
X"07",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"48",X"F0",X"3A",X"D3",X"4B",
X"08",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"48",X"F0",X"32",X"D7",X"3F",
X"08",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"48",X"F0",X"30",X"D7",X"4A",
X"09",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"48",X"F0",X"2E",X"D0",X"44",
X"05",X"00",X"C0",X"36",X"E8",X"30",X"18",X"30",X"30",X"40",X"C8",X"58",X"F8",X"00",X"AC",X"49",
X"05",X"00",X"C0",X"35",X"E8",X"40",X"18",X"40",X"30",X"40",X"CC",X"50",X"EC",X"FE",X"A7",X"59",
X"04",X"01",X"40",X"30",X"F0",X"40",X"18",X"30",X"38",X"60",X"D8",X"70",X"E0",X"08",X"A5",X"6B",
X"06",X"03",X"80",X"2E",X"F8",X"40",X"20",X"40",X"40",X"60",X"DC",X"60",X"E0",X"0C",X"AB",X"5E",
X"08",X"07",X"00",X"30",X"00",X"60",X"10",X"10",X"40",X"70",X"E4",X"50",X"E4",X"10",X"B5",X"53",
X"04",X"03",X"00",X"42",X"00",X"30",X"10",X"30",X"40",X"60",X"E0",X"48",X"E0",X"0C",X"B9",X"41",
X"02",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"07",X"00",X"4E",X"00",X"60",X"28",X"30",X"38",X"60",X"F0",X"28",X"DC",X"4E",X"A5",X"60",
X"02",X"05",X"00",X"70",X"00",X"40",X"10",X"20",X"38",X"40",X"F4",X"08",X"DC",X"58",X"AC",X"55",
X"03",X"03",X"00",X"7E",X"F8",X"50",X"18",X"50",X"40",X"50",X"F8",X"08",X"CC",X"48",X"AC",X"50",
X"0B",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"01",X"C0",X"7D",X"00",X"60",X"18",X"70",X"48",X"70",X"FC",X"08",X"C0",X"66",X"9F",X"69",
X"03",X"02",X"00",X"91",X"00",X"60",X"18",X"70",X"48",X"70",X"FC",X"08",X"BC",X"66",X"A3",X"64",
X"03",X"01",X"80",X"9C",X"00",X"60",X"18",X"60",X"40",X"60",X"F8",X"00",X"BC",X"60",X"A5",X"64",
X"02",X"01",X"00",X"A5",X"00",X"70",X"18",X"60",X"40",X"60",X"BC",X"60",X"F8",X"00",X"A7",X"5E",
X"03",X"01",X"00",X"B1",X"08",X"70",X"20",X"70",X"40",X"60",X"BC",X"70",X"F4",X"02",X"A6",X"5E",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"05",X"00",X"36",X"08",X"40",X"28",X"60",X"38",X"50",X"F4",X"58",X"F0",X"14",X"8E",X"7E",
X"03",X"07",X"00",X"3A",X"08",X"50",X"28",X"60",X"38",X"50",X"F4",X"60",X"EC",X"10",X"93",X"73",
X"05",X"06",X"00",X"39",X"00",X"50",X"28",X"50",X"38",X"50",X"F0",X"60",X"EC",X"0C",X"9C",X"67",
X"03",X"07",X"00",X"3B",X"08",X"50",X"28",X"40",X"38",X"60",X"EC",X"60",X"E8",X"12",X"9F",X"72",
X"03",X"06",X"00",X"3A",X"08",X"50",X"28",X"40",X"40",X"60",X"EC",X"58",X"E4",X"1C",X"A0",X"71",
X"03",X"02",X"80",X"71",X"00",X"40",X"28",X"30",X"38",X"40",X"E8",X"68",X"E8",X"14",X"A1",X"70",
X"1A",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"50",X"08",X"40",X"CF",X"35",
X"03",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"58",X"1C",X"2E",X"E5",X"47",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"38",X"0C",X"42",X"E3",X"12",
X"02",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"38",X"04",X"34",X"CD",X"24",
X"03",X"05",X"00",X"47",X"10",X"50",X"20",X"50",X"30",X"60",X"F4",X"70",X"E8",X"1C",X"98",X"6E",
X"04",X"06",X"00",X"3D",X"08",X"50",X"20",X"40",X"38",X"60",X"F0",X"60",X"E8",X"1A",X"9E",X"6D",
X"05",X"06",X"00",X"32",X"00",X"50",X"20",X"40",X"38",X"50",X"F0",X"58",X"E4",X"1C",X"A4",X"6A",
X"05",X"06",X"00",X"33",X"00",X"50",X"20",X"30",X"38",X"40",X"EC",X"50",X"E4",X"14",X"AA",X"61",
X"03",X"06",X"00",X"39",X"00",X"50",X"18",X"20",X"40",X"50",X"E8",X"50",X"F0",X"0E",X"AB",X"66",
X"03",X"01",X"40",X"47",X"00",X"40",X"18",X"20",X"40",X"50",X"E8",X"50",X"AC",X"60",X"DE",X"12",
X"1A",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"60",X"00",X"34",X"D0",X"24",
X"03",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"40",X"F0",X"FA",X"FC",X"43",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"05",X"05",X"00",X"49",X"08",X"40",X"10",X"30",X"30",X"50",X"F4",X"50",X"E4",X"16",X"9A",X"75",
X"05",X"06",X"00",X"3D",X"00",X"30",X"10",X"50",X"40",X"50",X"F0",X"50",X"E8",X"0A",X"A1",X"6B",
X"05",X"04",X"00",X"35",X"10",X"40",X"18",X"20",X"40",X"60",X"E8",X"58",X"A8",X"5E",X"D7",X"19",
X"05",X"01",X"C0",X"30",X"00",X"20",X"18",X"60",X"40",X"50",X"E4",X"50",X"DC",X"0E",X"AB",X"55",
X"03",X"01",X"40",X"35",X"F8",X"40",X"20",X"60",X"48",X"70",X"DC",X"50",X"E8",X"00",X"AA",X"46",
X"0A",X"00",X"E0",X"2F",X"F8",X"40",X"18",X"60",X"48",X"60",X"E0",X"40",X"F4",X"02",X"93",X"65",
X"08",X"00",X"A0",X"32",X"F0",X"40",X"18",X"60",X"30",X"40",X"DC",X"50",X"04",X"FC",X"8D",X"6E",
X"06",X"00",X"50",X"34",X"F8",X"30",X"20",X"30",X"38",X"40",X"E4",X"38",X"F8",X"02",X"8B",X"71",
X"06",X"00",X"70",X"35",X"08",X"10",X"20",X"40",X"38",X"50",X"F4",X"50",X"E8",X"1A",X"90",X"67",
X"0B",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"07",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"38",X"00",X"42",X"DD",X"1F",
X"06",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"14",X"40",X"E4",X"00",X"E7",X"42",
X"05",X"03",X"00",X"8E",X"18",X"60",X"30",X"50",X"10",X"00",X"F0",X"58",X"E0",X"64",X"99",X"70",
X"03",X"02",X"80",X"8A",X"18",X"60",X"08",X"00",X"28",X"50",X"EC",X"60",X"DC",X"66",X"9C",X"6B",
X"04",X"02",X"80",X"B1",X"00",X"10",X"18",X"50",X"30",X"30",X"F0",X"58",X"DC",X"64",X"A2",X"6D",
X"02",X"02",X"80",X"C7",X"00",X"00",X"18",X"60",X"28",X"30",X"F0",X"50",X"E0",X"5C",X"A2",X"6E",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"06",X"02",X"00",X"2D",X"08",X"70",X"20",X"50",X"40",X"50",X"C0",X"58",X"F0",X"04",X"AD",X"5B",
X"07",X"03",X"00",X"2C",X"08",X"60",X"20",X"60",X"40",X"50",X"F8",X"08",X"BC",X"78",X"A8",X"5C",
X"05",X"02",X"80",X"2A",X"08",X"70",X"20",X"60",X"38",X"60",X"BC",X"78",X"A4",X"66",X"F6",X"01",
X"05",X"01",X"C0",X"27",X"00",X"60",X"20",X"60",X"38",X"60",X"C0",X"60",X"F4",X"00",X"A0",X"74",
X"06",X"01",X"80",X"26",X"08",X"70",X"18",X"60",X"38",X"60",X"BC",X"60",X"F0",X"00",X"A0",X"76",
X"08",X"01",X"80",X"26",X"00",X"60",X"18",X"50",X"30",X"40",X"BC",X"60",X"F4",X"00",X"9F",X"78",
X"08",X"02",X"00",X"29",X"00",X"60",X"18",X"60",X"30",X"30",X"BC",X"70",X"04",X"FC",X"9B",X"77",
X"06",X"01",X"80",X"2D",X"00",X"50",X"18",X"50",X"28",X"20",X"B4",X"78",X"0C",X"FC",X"9B",X"71",
X"03",X"01",X"00",X"39",X"00",X"50",X"18",X"50",X"30",X"50",X"B4",X"60",X"F8",X"FC",X"9C",X"6D",
X"03",X"00",X"E0",X"3E",X"00",X"40",X"18",X"50",X"30",X"50",X"B0",X"68",X"F8",X"00",X"99",X"73",
X"03",X"01",X"40",X"50",X"00",X"60",X"18",X"50",X"28",X"50",X"B0",X"70",X"00",X"FE",X"99",X"6E",
X"04",X"01",X"40",X"68",X"00",X"60",X"18",X"50",X"28",X"60",X"B0",X"70",X"0C",X"00",X"9A",X"69",
X"03",X"00",X"C0",X"6D",X"00",X"60",X"18",X"60",X"20",X"40",X"B4",X"60",X"04",X"FC",X"9E",X"64",
X"03",X"00",X"A0",X"70",X"08",X"60",X"20",X"50",X"30",X"40",X"B0",X"60",X"08",X"00",X"9C",X"65",
X"03",X"00",X"40",X"7D",X"08",X"50",X"28",X"30",X"18",X"10",X"AC",X"70",X"10",X"02",X"9C",X"61",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"02",X"80",X"54",X"10",X"20",X"18",X"50",X"30",X"60",X"00",X"70",X"BC",X"76",X"A3",X"6C",
X"04",X"02",X"80",X"51",X"08",X"10",X"18",X"60",X"30",X"60",X"04",X"68",X"BC",X"62",X"A0",X"72",
X"03",X"03",X"00",X"4B",X"00",X"00",X"20",X"60",X"30",X"60",X"04",X"68",X"B8",X"6C",X"A0",X"71",
X"05",X"02",X"80",X"43",X"00",X"70",X"20",X"60",X"28",X"40",X"B4",X"68",X"08",X"FC",X"A2",X"61",
X"04",X"02",X"00",X"41",X"00",X"00",X"20",X"70",X"40",X"50",X"04",X"60",X"B4",X"62",X"9E",X"6C",
X"04",X"01",X"C0",X"3F",X"00",X"60",X"20",X"60",X"40",X"50",X"FC",X"00",X"B4",X"6C",X"9B",X"71",
X"04",X"02",X"00",X"3C",X"00",X"00",X"18",X"60",X"38",X"40",X"00",X"60",X"B4",X"6C",X"9B",X"6F",
X"05",X"01",X"80",X"3E",X"18",X"50",X"00",X"00",X"28",X"40",X"00",X"50",X"B0",X"72",X"97",X"74",
X"05",X"01",X"C0",X"41",X"00",X"00",X"18",X"70",X"30",X"60",X"00",X"58",X"B0",X"70",X"98",X"72",
X"03",X"02",X"00",X"4A",X"18",X"70",X"30",X"50",X"08",X"00",X"00",X"50",X"B0",X"74",X"9B",X"67",
X"03",X"01",X"C0",X"5A",X"18",X"60",X"10",X"00",X"28",X"50",X"FC",X"58",X"B0",X"6A",X"97",X"70",
X"03",X"00",X"E0",X"63",X"00",X"00",X"18",X"60",X"38",X"60",X"00",X"48",X"AC",X"74",X"9E",X"62",
X"03",X"00",X"A0",X"69",X"08",X"40",X"18",X"50",X"38",X"50",X"B4",X"68",X"F4",X"00",X"A3",X"5B",
X"04",X"00",X"70",X"74",X"00",X"50",X"20",X"50",X"40",X"60",X"FC",X"00",X"B0",X"78",X"9D",X"64",
X"03",X"00",X"80",X"83",X"00",X"60",X"20",X"50",X"40",X"70",X"B4",X"70",X"04",X"FE",X"9C",X"6A",
X"02",X"00",X"38",X"88",X"00",X"50",X"20",X"60",X"40",X"60",X"B0",X"70",X"04",X"FE",X"A5",X"4B",
X"04",X"00",X"38",X"80",X"08",X"40",X"20",X"40",X"38",X"50",X"B4",X"78",X"FC",X"FA",X"B5",X"39",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"07",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"58",X"20",X"36",X"E5",X"20",
X"05",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"50",X"1C",X"36",X"ED",X"20",
X"08",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"60",X"18",X"26",X"F4",X"20",
X"06",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"50",X"1C",X"26",X"ED",X"2A",
X"03",X"00",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"60",X"18",X"42",X"E0",X"3E",
X"0A",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"50",X"FC",X"10",X"D0",X"5E",
X"02",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"03",X"00",X"34",X"F8",X"50",X"20",X"70",X"30",X"60",X"F8",X"08",X"C4",X"5A",X"95",X"78",
X"06",X"04",X"00",X"2D",X"F8",X"50",X"20",X"60",X"28",X"40",X"F8",X"18",X"BC",X"70",X"9F",X"6D",
X"03",X"02",X"80",X"29",X"00",X"60",X"20",X"50",X"30",X"40",X"F4",X"08",X"C0",X"64",X"9C",X"7A",
X"05",X"01",X"40",X"26",X"00",X"60",X"20",X"70",X"38",X"50",X"C8",X"48",X"EC",X"00",X"9F",X"79",
X"06",X"00",X"A0",X"24",X"00",X"40",X"20",X"70",X"38",X"50",X"C0",X"48",X"EC",X"02",X"A5",X"6B",
X"09",X"00",X"70",X"20",X"00",X"40",X"20",X"70",X"38",X"40",X"C4",X"40",X"E8",X"FE",X"A5",X"6F",
X"06",X"00",X"A0",X"23",X"00",X"40",X"20",X"60",X"38",X"40",X"B0",X"78",X"F8",X"FE",X"9F",X"79",
X"04",X"00",X"E0",X"29",X"00",X"60",X"20",X"60",X"38",X"60",X"B4",X"68",X"F4",X"02",X"A4",X"61",
X"06",X"01",X"40",X"32",X"00",X"60",X"20",X"60",X"40",X"60",X"FC",X"00",X"B4",X"68",X"A5",X"5F",
X"05",X"01",X"40",X"3E",X"F8",X"60",X"20",X"60",X"38",X"60",X"B8",X"68",X"F4",X"02",X"A4",X"68",
X"04",X"02",X"80",X"58",X"08",X"00",X"20",X"60",X"38",X"60",X"F0",X"58",X"C0",X"66",X"A5",X"69",
X"03",X"01",X"00",X"65",X"E8",X"60",X"20",X"60",X"30",X"50",X"C4",X"60",X"FC",X"00",X"A7",X"69",
X"03",X"01",X"40",X"6E",X"E8",X"60",X"20",X"60",X"28",X"40",X"CC",X"58",X"04",X"FC",X"A9",X"62",
X"03",X"01",X"00",X"77",X"E8",X"50",X"20",X"60",X"28",X"30",X"D4",X"58",X"04",X"FE",X"A8",X"65",
X"05",X"00",X"C0",X"76",X"E8",X"50",X"20",X"60",X"28",X"20",X"D8",X"58",X"00",X"FC",X"A7",X"69",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"02",X"80",X"45",X"00",X"60",X"20",X"40",X"30",X"50",X"00",X"18",X"BC",X"60",X"A1",X"65",
X"03",X"06",X"00",X"4B",X"08",X"60",X"28",X"60",X"38",X"60",X"00",X"00",X"CC",X"6E",X"9D",X"6A",
X"05",X"06",X"00",X"3E",X"08",X"60",X"28",X"50",X"38",X"50",X"EC",X"10",X"D4",X"5C",X"AF",X"63",
X"05",X"06",X"00",X"38",X"00",X"50",X"20",X"30",X"38",X"40",X"EC",X"10",X"DC",X"50",X"B6",X"5D",
X"06",X"06",X"00",X"37",X"00",X"50",X"20",X"30",X"38",X"40",X"E0",X"50",X"E4",X"16",X"BC",X"58",
X"03",X"06",X"00",X"3E",X"00",X"50",X"20",X"30",X"38",X"50",X"E4",X"50",X"E4",X"16",X"B9",X"5B",
X"04",X"04",X"00",X"4A",X"00",X"40",X"20",X"30",X"38",X"40",X"E4",X"48",X"B8",X"60",X"DF",X"11",
X"05",X"02",X"00",X"6D",X"00",X"50",X"28",X"40",X"38",X"40",X"E4",X"60",X"E0",X"0C",X"BB",X"5A",
X"05",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"38",X"F0",X"42",X"C6",X"40",
X"05",X"00",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C",X"40",X"F0",X"3E",X"C0",X"41",
X"07",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"34",X"30",X"20",X"3A",X"EA",X"28",
X"0C",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"F8",X"34",X"D1",X"27",
X"02",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"58",X"F0",X"FA",X"F5",X"24",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"04",X"00",X"80",X"5E",X"10",X"60",X"20",X"60",X"38",X"50",X"F0",X"60",X"F8",X"04",X"8F",X"74",
X"03",X"01",X"80",X"4A",X"08",X"40",X"20",X"60",X"38",X"60",X"04",X"18",X"F0",X"60",X"8C",X"77",
X"04",X"03",X"00",X"3C",X"00",X"50",X"20",X"60",X"40",X"60",X"00",X"08",X"F0",X"60",X"93",X"6B",
X"03",X"03",X"80",X"36",X"00",X"10",X"28",X"60",X"40",X"60",X"FC",X"50",X"E8",X"58",X"97",X"65",
X"05",X"01",X"80",X"30",X"00",X"50",X"28",X"60",X"38",X"60",X"F8",X"10",X"D8",X"52",X"9D",X"5C",
X"06",X"00",X"C0",X"2A",X"00",X"50",X"28",X"70",X"38",X"60",X"CC",X"58",X"EC",X"08",X"A7",X"4B",
X"06",X"00",X"70",X"2B",X"00",X"60",X"28",X"50",X"38",X"60",X"BC",X"78",X"F0",X"06",X"A3",X"52",
X"06",X"00",X"38",X"27",X"08",X"60",X"30",X"60",X"30",X"30",X"C0",X"48",X"EC",X"02",X"A2",X"55",
X"06",X"00",X"50",X"29",X"08",X"60",X"30",X"70",X"38",X"50",X"EC",X"08",X"B8",X"52",X"AF",X"42",
X"04",X"00",X"60",X"2A",X"08",X"70",X"30",X"60",X"28",X"30",X"CC",X"78",X"E8",X"0A",X"9A",X"72",
X"04",X"01",X"00",X"45",X"08",X"70",X"28",X"50",X"30",X"30",X"E0",X"68",X"EC",X"0A",X"A2",X"69",
X"06",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"05",X"01",X"C0",X"51",X"10",X"60",X"20",X"30",X"40",X"60",X"EC",X"50",X"A8",X"6C",X"DF",X"13",
X"04",X"05",X"00",X"3B",X"08",X"50",X"10",X"20",X"40",X"60",X"EC",X"48",X"E4",X"12",X"AD",X"67",
X"07",X"05",X"00",X"33",X"08",X"50",X"18",X"30",X"40",X"50",X"E8",X"50",X"B4",X"60",X"E0",X"14",
X"06",X"02",X"80",X"2D",X"08",X"40",X"18",X"20",X"38",X"60",X"E0",X"50",X"DC",X"1E",X"AE",X"5D",
X"07",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"40",X"EC",X"22",X"DB",X"19",
X"19",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"05",X"01",X"80",X"43",X"08",X"60",X"20",X"70",X"40",X"40",X"C4",X"60",X"F0",X"04",X"A4",X"77",
X"03",X"03",X"80",X"3A",X"08",X"70",X"20",X"60",X"48",X"50",X"C0",X"60",X"F4",X"00",X"A8",X"61",
X"04",X"02",X"00",X"35",X"08",X"60",X"20",X"70",X"48",X"50",X"F4",X"00",X"BC",X"74",X"A4",X"6F",
X"04",X"01",X"C0",X"30",X"08",X"60",X"20",X"70",X"50",X"50",X"C4",X"60",X"E8",X"04",X"A6",X"6F",
X"07",X"00",X"E0",X"2C",X"08",X"40",X"18",X"50",X"38",X"30",X"C0",X"60",X"E4",X"06",X"AB",X"61",
X"06",X"01",X"00",X"2A",X"10",X"70",X"20",X"70",X"40",X"40",X"BC",X"60",X"E4",X"02",X"AA",X"5E",
X"07",X"01",X"00",X"2E",X"08",X"60",X"20",X"70",X"38",X"50",X"C0",X"50",X"E4",X"04",X"A6",X"66",
X"03",X"01",X"40",X"3C",X"08",X"60",X"20",X"70",X"38",X"50",X"B8",X"68",X"F0",X"00",X"A1",X"66",
X"05",X"00",X"A0",X"55",X"08",X"60",X"20",X"60",X"40",X"50",X"B4",X"70",X"EC",X"02",X"9F",X"63",
X"03",X"00",X"70",X"76",X"08",X"60",X"20",X"60",X"38",X"50",X"B0",X"68",X"F8",X"00",X"9C",X"66",
X"04",X"00",X"40",X"87",X"20",X"60",X"30",X"30",X"08",X"00",X"08",X"50",X"AC",X"76",X"93",X"75",
X"02",X"00",X"38",X"99",X"08",X"50",X"20",X"50",X"30",X"20",X"FC",X"00",X"B4",X"64",X"9B",X"6A",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"00",X"40",X"8C",X"00",X"60",X"30",X"50",X"30",X"20",X"F8",X"40",X"B8",X"36",X"CF",X"32",
X"02",X"00",X"60",X"8A",X"00",X"60",X"28",X"50",X"40",X"60",X"F0",X"28",X"CC",X"1C",X"C0",X"49",
X"03",X"00",X"38",X"80",X"00",X"40",X"28",X"50",X"40",X"70",X"F8",X"18",X"C4",X"22",X"B9",X"5E",
X"02",X"01",X"C0",X"70",X"10",X"70",X"18",X"30",X"28",X"70",X"F8",X"00",X"BC",X"7A",X"AB",X"62",
X"03",X"03",X"80",X"57",X"10",X"60",X"20",X"50",X"40",X"60",X"C4",X"68",X"B0",X"5C",X"F0",X"04",
X"02",X"06",X"00",X"45",X"10",X"50",X"20",X"50",X"40",X"40",X"F4",X"18",X"C4",X"62",X"B5",X"55",
X"05",X"07",X"00",X"35",X"10",X"60",X"20",X"40",X"38",X"40",X"E4",X"20",X"D0",X"52",X"BE",X"44",
X"05",X"06",X"00",X"2F",X"10",X"50",X"18",X"30",X"38",X"50",X"DC",X"58",X"E0",X"18",X"BB",X"52",
X"08",X"04",X"00",X"2E",X"18",X"50",X"10",X"20",X"38",X"50",X"DC",X"60",X"E0",X"12",X"BB",X"46",
X"01",X"01",X"40",X"2F",X"00",X"10",X"18",X"60",X"40",X"50",X"DC",X"50",X"B0",X"4A",X"EB",X"07",
X"0B",X"00",X"80",X"2E",X"F0",X"30",X"18",X"60",X"30",X"50",X"DC",X"40",X"F8",X"F0",X"AD",X"44",
X"03",X"00",X"C0",X"31",X"F8",X"30",X"18",X"50",X"38",X"60",X"D8",X"48",X"04",X"FE",X"A3",X"51",
X"0A",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"70",X"00",X"1A",X"E3",X"0E",
X"04",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"58",X"18",X"36",X"E6",X"1C",
X"09",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"48",X"1C",X"3E",X"E4",X"20",
X"04",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"06",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"38",X"10",X"56",X"D9",X"26",
X"02",X"05",X"00",X"48",X"08",X"50",X"20",X"40",X"30",X"40",X"EC",X"38",X"D8",X"5E",X"97",X"75",
X"06",X"05",X"00",X"5E",X"18",X"50",X"28",X"50",X"20",X"20",X"E4",X"50",X"D4",X"66",X"9B",X"73",
X"02",X"04",X"00",X"74",X"18",X"40",X"20",X"30",X"28",X"40",X"E4",X"50",X"D8",X"58",X"A0",X"6E",
X"04",X"02",X"80",X"8B",X"18",X"40",X"18",X"20",X"38",X"50",X"E4",X"58",X"D8",X"64",X"A0",X"6D",
X"02",X"01",X"40",X"97",X"08",X"10",X"20",X"50",X"40",X"60",X"E4",X"60",X"D4",X"5E",X"A0",X"70",
X"03",X"01",X"40",X"A2",X"08",X"10",X"20",X"50",X"40",X"60",X"E8",X"60",X"D4",X"66",X"A0",X"74",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -44,6 +44,7 @@ ENTITY sp256_003 IS
PORT
(
address : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
clken : IN STD_LOGIC := '1';
clock : IN STD_LOGIC := '1';
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
@@ -60,8 +61,8 @@ BEGIN
altsyncram_component : altsyncram
GENERIC MAP (
address_aclr_a => "NONE",
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
clock_enable_input_a => "NORMAL",
clock_enable_output_a => "NORMAL",
init_file => "sp256_003.hex",
intended_device_family => "Cyclone V",
lpm_hint => "ENABLE_RUNTIME_MOD=NO",
@@ -77,6 +78,7 @@ BEGIN
PORT MAP (
address_a => address,
clock0 => clock,
clocken0 => clken,
q_a => sub_wire0
);
@@ -94,9 +96,9 @@ END SYN;
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "1"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "1"
-- Retrieval info: PRIVATE: Clken NUMERIC "1"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
@@ -117,8 +119,8 @@ END SYN;
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "NORMAL"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "NORMAL"
-- Retrieval info: CONSTANT: INIT_FILE STRING "sp256_003.hex"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone V"
-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
@@ -131,10 +133,12 @@ END SYN;
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 16 0 INPUT NODEFVAL "address[15..0]"
-- Retrieval info: USED_PORT: clken 0 0 0 0 INPUT VCC "clken"
-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
-- Retrieval info: CONNECT: @address_a 0 0 16 0 address 0 0 16 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
-- Retrieval info: CONNECT: @clocken0 0 0 0 0 clken 0 0 0 0
-- Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0
-- Retrieval info: GEN_FILE: TYPE_NORMAL sp256_003.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL sp256_003.inc FALSE

View File

@@ -55,6 +55,8 @@
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity vp_console is
port (
@@ -63,6 +65,8 @@ entity vp_console is
clk_i : in std_logic;
clk_cpu_en_i : in std_logic;
clk_vdc_en_i : in std_logic;
clk_250k : in std_logic;
clk_2m5 : in std_logic;
res_n_i : in std_logic;
-- Cartridge Interface ----------------------------------------------------
cart_cs_o : out std_logic;
@@ -103,7 +107,14 @@ entity vp_console is
vbl_o : out std_logic;
-- Sound Interface --------------------------------------------------------
snd_o : out std_logic;
snd_vec_o : out std_logic_vector(3 downto 0)
snd_vec_o : out std_logic_vector(3 downto 0);
---------------------------------------------------------------------------
--- The voice -------------------------------------------------------------
---------------------------------------------------------------------------
snd_voice_o : out signed(15 downto 0);
noise_voice_o : out signed(15 downto 0);
voice_enable : in std_logic
);
end vp_console;
@@ -214,6 +225,29 @@ architecture struct of vp_console is
signal vdd_s,
gnd_s : std_logic;
-- The Voice
signal sp0256_ldq : std_logic;
signal sp0256_load : std_logic;
signal sp0256_fifo_we : std_logic;
signal sp0256_p14 : std_logic;
signal sp0256_wr : std_logic := '1';
signal sp0256_rst : std_logic := '1';
signal sp0256_ff : std_logic := '1';
signal sp0256_ff_n : std_logic := '1';
signal cart_do_s : std_logic_vector(7 downto 0);
signal sp0256_di : std_logic_vector(6 downto 0);
signal sp0256_do : std_logic_vector(6 downto 0);
signal cpu_t0_s : std_logic := '0';
signal SP0256_trig : std_logic := '0';
signal SP0256_trig_ff : std_logic := '0';
signal fifo_empty_s : std_logic;
signal stage : integer := 1;
signal cart_cs_s : std_logic;
signal cart_wr_n_s : std_logic;
begin
vdd_s <= '1';
@@ -232,7 +266,7 @@ begin
xtal_i => clk_i,
xtal_en_i => clk_cpu_en_i,
reset_n_i => res_n_i,
t0_i => cart_t0_i,
t0_i => not fifo_empty_s, --cart_t0_i,
t0_o => cart_t0_o,
t0_dir_o => cart_t0_dir_o,
int_n_i => int_n_s,
@@ -278,9 +312,9 @@ begin
p14_i => p1_from_cpu_s(4),
p16_i => p1_from_cpu_s(6),
a_low_o => a_low_s,
cart_cs_o => cart_cs_o,
cart_cs_o => cart_cs_s,
cart_cs_n_o => cart_cs_n_o,
cart_wr_n_o => cart_wr_n_o,
cart_wr_n_o => cart_wr_n_s,
ram_cs_o => ram_cs_s,
ram_cs_n_o => ram_cs_n_s,
ram_wr_n_o => ram_wr_n_s,
@@ -296,6 +330,8 @@ begin
);
--
cart_d_o <= db_from_cpu_s;
cart_cs_o <= cart_cs_s;
cart_wr_n_o <= cart_wr_n_s;
-----------------------------------------------------------------------------
@@ -435,4 +471,120 @@ begin
others => '1');
end generate;
-----------------------------------------------------------------------------
-- The Voice Module
-- Victor Trucco - 07/2019
-----------------------------------------------------------------------------
sp0256_ff_n <= not sp0256_ff;
process (sp0256_ff)
begin
if rising_edge(sp0256_ff) then
sp0256_rst <= db_from_cpu_s(5);
sp0256_di <= a_s(6 downto 0);
end if;
end process;
process (clk_i)
begin
if rising_edge(clk_i) then
if a_s(7) = '1' and cart_wr_n_s = '0' and cart_cs_s = '0' and res_n_i = '1' and voice_enable = '1' then
sp0256_ff <= '0';
else
sp0256_ff <= '1';
end if;
sp0256_fifo_we <= sp0256_ff;
if fifo_empty_s = '1' then
sp0256_load <= '0';
else
sp0256_load <= sp0256_ldq;
end if;
case (stage) is
when 1 =>
sp0256_trig <= '0';
if fifo_empty_s = '0' and sp0256_ldq = '1' then -- tem algo para tocar and SP free?
stage <= 2;
end if;
when 2 =>
sp0256_trig <= '1';
stage <= 3;
when 3 =>
if sp0256_ldq = '0' then
sp0256_trig <= '0';
stage <= 1;
end if;
when others => stage <= 1;
end case;
sp0256_trig_ff <= sp0256_trig;
end if;
end process;
sp0256 : entity work.sp0256
port map
(
clock_250k => clk_250k,
clock_2m5 => clk_2m5,
reset => not sp0256_rst, --reseta em '1'!
input_rdy => sp0256_ldq, -- load request, is high when new allophone can be loaded
-- IC LOAD REQUEST. LRQ is a logic 1
--output whenever the input buffer is
--full. When LRQ goes to a logic 0, the input
--port may be loaded by placing the 8
--address bits on A1-A8 and pulsing the
--ALD output.
allophone => sp0256_do,
trig_allophone => sp0256_trig_ff, -- input: positive pulse to trigger
-- IC ADDRESS LOAD. A negative pulse on
-- this input loads the 8 address bits into
-- the input port. The negative edge of this
-- pulse causes LRQ to go high.
audio_out => snd_voice_o,
noise_out => noise_voice_o
);
fifo : entity work.fifo
generic map
(
DATA_WIDTH => 7,
FIFO_DEPTH => 64
)
port map
(
clock_i => clk_i,
reset_i => not sp0256_rst, --not reset_n_s,
-- input
fifo_we_i => sp0256_fifo_we,
fifo_data_i => sp0256_di,
-- output
fifo_read_i => sp0256_load,
fifo_data_o => sp0256_do,
-- flags
fifo_empty_o => fifo_empty_s,
fifo_full_o => open
);
end struct;