1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-04-10 06:27:16 +00:00

Merge pull request #116 from gyurco/master

Some updates
This commit is contained in:
Marcel
2021-04-07 15:43:54 +02:00
committed by GitHub
48 changed files with 898 additions and 3567 deletions

View File

@@ -27,4 +27,4 @@ DATE = "14:59:16 November 16, 2017"
# Revisions
PROJECT_REVISION = "Centipede"
PROJECT_REVISION = "Centiped"

View File

@@ -145,21 +145,17 @@ set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name ENABLE_SIGNALTAP OFF
set_global_assignment -name USE_SIGNALTAP_FILE output_files/cent.stp
set_global_assignment -name SYSTEMVERILOG_FILE rtl/Centipede_MiST.sv
set_global_assignment -name VERILOG_FILE rtl/centipede.v
set_global_assignment -name VERILOG_FILE rtl/pf_ram.v
set_global_assignment -name VHDL_FILE rtl/roms/F7.vhd
set_global_assignment -name VHDL_FILE rtl/roms/HJ7.vhd
set_global_assignment -name VHDL_FILE rtl/roms/PROG.vhd
set_global_assignment -name VHDL_FILE rtl/roms/P4.vhd
set_global_assignment -name VHDL_FILE rtl/spram.vhd
set_global_assignment -name VHDL_FILE rtl/dpram.vhd
set_global_assignment -name VHDL_FILE rtl/pll.vhd
set_global_assignment -name SYSTEMVERILOG_FILE rtl/POKEY.sv
set_global_assignment -name SYSTEMVERILOG_FILE rtl/matoro.sv
set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip
set_global_assignment -name SYSTEMVERILOG_FILE ../../../common/Sound/Pokey/POKEY.sv
set_global_assignment -name SYSTEMVERILOG_FILE ../../../common/Sound/Pokey/matoro.sv
set_global_assignment -name QIP_FILE ../../../common/CPU/T65/T65.qip
set_global_assignment -name ENABLE_SIGNALTAP OFF
set_global_assignment -name USE_SIGNALTAP_FILE output_files/cent.stp
set_global_assignment -name SIGNALTAP_FILE output_files/cent.stp
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

View File

@@ -72,12 +72,12 @@ create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_port
# Set Input Delay
#**************************************************************
set_input_delay -add_delay -clock_fall -clock [get_clocks {CLOCK_27}] 1.000 [get_ports {CLOCK_27}]
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {CONF_DATA0}]
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DI}]
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SCK}]
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}]
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}]
set_input_delay -add_delay -clock [get_clocks {CLOCK_27}] 1.000 [get_ports {CLOCK_27}]
set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {CONF_DATA0}]
set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DI}]
set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SCK}]
set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}]
set_input_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}]
#**************************************************************
# Set Output Delay

View File

@@ -1,15 +1,28 @@
Arcade: Centipede port to MiST by Gehstock
24 November 2018
--
--
Only controls and OSD are rotated on Video output.
Millipede added by Gyorgy Szombathelyi
Keyboard inputs :
April 2021
ESC : Coin/Start Player
--
SPACE : Fire or Fire Button
--
ARROW KEYS : Movements
--
--
-- Usage:
-- - Create ROM and ARC files from the MRA files using the MRA utility.
-- Example: mra -A -z /path/to/mame/roms Centipede.mra
-- - Copy the ROM files to the root of the SD Card
-- - Copy the RBF and ARC files to the same folder on the SD Card
--
-- MRA utility: https://github.com/sebdel/mra-tools-c/
--
-- Only controls and OSD are rotated on Video output.
-- Keyboard inputs :
-- ESC : Coin/Start Player
--
-- CTRL : Fire or Fire Button
--
-- ARROW KEYS : Movements

View File

@@ -0,0 +1,38 @@
<misterromdescription>
<name>Centipede (revision 4)</name>
<mameversion>0220</mameversion>
<setname>centiped</setname>
<mratimestamp>20200430141713</mratimestamp>
<year>1980</year>
<manufacturer>Atari</manufacturer>
<category>Maze / Bugs</category>
<category>Maze / Centipede</category>
<category>Maze / Spiders</category>
<rbf>centiped</rbf>
<switches base="8">
<dip bits="0,1" name="Language" ids="English,German,French,Spanish"/>
<dip bits="2,3" name="Lives" ids="2,3,4,5"/>
<dip bits="4,5" name="Bonus Life" ids="10000,12000,15000,20000"/>
<dip bits="6" name="Difficulty" ids="Hard,Easy"/>
<dip bits="7" name="Credit minimum" ids="1,2"/>
</switches>
<rom index="0" zip="centiped.zip" md5="661b779be0bde8e7ed5ed6318fe7ca0a">
<!-- CPU ROM -->
<part crc="c4d995eb" name="136001-407.d1"/>
<part crc="bcdebe1b" name="136001-408.e1"/>
<part crc="66d7b04a" name="136001-409.fh1"/>
<part crc="33ce4640" name="136001-410.j1"/>
<part crc="c4d995eb" name="136001-407.d1"/>
<part crc="bcdebe1b" name="136001-408.e1"/>
<part crc="66d7b04a" name="136001-409.fh1"/>
<part crc="33ce4640" name="136001-410.j1"/>
<!-- GFX -->
<part crc="880acfb9" name="136001-211.f7"/>
<part crc="b1397029" name="136001-212.hj7"/>
<!-- LUT -->
<part crc="6fa3093a" name="136001-213.p4"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,37 @@
<misterromdescription>
<name>Centipede (revision 3)</name>
<mameversion>0218</mameversion>
<setname>centiped3</setname>
<mratimestamp>20200225084106</mratimestamp>
<year>1980</year>
<manufacturer>Atari</manufacturer>
<category>Maze / Bugs</category>
<category>Maze / Centipede</category>
<category>Maze / Spiders</category>
<rbf>centiped</rbf>
<switches base="8">
<dip bits="0,1" name="Language" ids="English,German,French,Spanish"/>
<dip bits="2,3" name="Lives" ids="2,3,4,5"/>
<dip bits="4,5" name="Bonus Life" ids="10000,12000,15000,20000"/>
<dip bits="6" name="Difficulty" ids="Hard,Easy"/>
<dip bits="7" name="Credit minimum" ids="1,2"/>
</switches>
<rom index="0" zip="centiped.zip|centiped3.zip" md5="aea9553e49f86567338a9aab170d2360">
<!-- CPU ROM -->
<part crc="5ab0d9de" name="136001-307.d1"/>
<part crc="4c07fd3e" name="136001-308.e1"/>
<part crc="ff69b424" name="136001-309.fh1"/>
<part crc="44e40fa4" name="136001-310.j1"/>
<part crc="5ab0d9de" name="136001-307.d1"/>
<part crc="4c07fd3e" name="136001-308.e1"/>
<part crc="ff69b424" name="136001-309.fh1"/>
<part crc="44e40fa4" name="136001-310.j1"/>
<!-- GFX -->
<part crc="880acfb9" name="136001-211.f7"/>
<part crc="b1397029" name="136001-212.hj7"/>
<!-- LUT -->
<part crc="6fa3093a" name="136001-213.p4"/>
</rom>
</misterromdescription>

View File

@@ -0,0 +1,33 @@
<misterromdescription>
<name>Millipede</name>
<mameversion>0218</mameversion>
<setname>milliped</setname>
<mratimestamp>20200225084106</mratimestamp>
<year>1980</year>
<manufacturer>Atari</manufacturer>
<category>Maze / Bugs</category>
<category>Maze / Centipede</category>
<category>Maze / Spiders</category>
<rbf>centiped</rbf>
<switches base="8" default="30">
<dip bits="0,1" name="Language" ids="English,German,French,Spanish"/>
<dip bits="2,3" name="Bonus" ids="0,0 1x,0 1x 2x,0 1x 2x 3x"/>
<dip bits="6" name="Credit minimum" ids="1,2"/>
<dip bits="7" name="Coin Counters" ids="1,2"/>
</switches>
<rom index="1"><part>1</part></rom>
<rom index="0" zip="milliped.zip" md5="608bf068509574138b195201b359c025">
<!-- CPU ROM -->
<part name="136013-104.mn1"/>
<part name="136013-103.l1"/>
<part name="136013-102.jk1"/>
<part name="136013-101.h1"/>
<!-- GFX -->
<part name="136013-107.r5"/>
<part name="136013-106.p5"/>
<!-- LUT -->
<part name="136001-213.e7"/>
</rom>
</misterromdescription>

View File

@@ -40,16 +40,13 @@ module Centipede_MiST
`include "rtl\build_id.v"
localparam CONF_STR = {
"Centipede;;",
"CENTIPED;;",
"O2,Rotate Controls,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
"O7,Test,Off,On;",
"O89,Language,English,German,French,Spanish;",
"OAB,Lives,2,3,4,5;",
"OCD,Bonus Life,10000,12000,15000,20000;",
"OE,Difficulty,Hard,Easy;",
"OF,Credit minimum,1,2;",
"DIP;",
"R64,Save highscores;",
"T0,Reset;",
"V,v1.50.",`BUILD_DATE
};
@@ -60,11 +57,13 @@ wire blend = status[5];
wire joyswap = status[6];
wire service = status[7];
wire milliped = core_mod[0];
wire [15:0] dipsw;
assign dipsw[ 7:0] = status[15:8];
assign dipsw[15:8] = 8'h01;
assign LED = 1;
assign LED = ~(ioctl_downl | ioctl_upl);
assign AUDIO_R = AUDIO_L;
wire clk_24, clk_12, clk_100mhz;
@@ -76,29 +75,55 @@ pll pll(
.c2(clk_12),
.c4(clk_100mhz)
);
wire [31:0] status;
wire [1:0] buttons;
wire [1:0] switches;
wire [7:0] joystick_0;
wire [7:0] joystick_1;
wire scandoublerD;
wire [7:0] core_mod;
wire ypbpr;
wire no_csync;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
wire [7:0] RGB;
wire [7:0] RGB;
wire hs, vs, vb, hb;
reg blankn;
wire blankn = ~(hb | vb);
wire [3:0] audio;
always @(posedge clk_12) blankn <= ~(hb | vb);
wire ioctl_downl;
wire ioctl_upl;
wire [7:0] ioctl_index;
wire ioctl_wr;
wire [24:0] ioctl_addr;
wire [7:0] ioctl_dout;
wire [7:0] ioctl_din;
data_io data_io(
.clk_sys ( clk_12 ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS2 ( SPI_SS2 ),
.SPI_DI ( SPI_DI ),
.SPI_DO ( SPI_DO ),
.ioctl_download( ioctl_downl ),
.ioctl_upload ( ioctl_upl ),
.ioctl_index ( ioctl_index ),
.ioctl_wr ( ioctl_wr ),
.ioctl_addr ( ioctl_addr ),
.ioctl_dout ( ioctl_dout ),
.ioctl_din ( ioctl_din )
);
reg reset;
always @(posedge clk_12) reset <= status[0] | buttons[1] | ioctl_downl;
centipede centipede(
.clk_100mhz(clk_100mhz),
.clk_12mhz(clk_12),
.reset(status[0] | buttons[1]),
.reset(reset),
.milli(milliped),
.playerinput_i(~{ 1'b0, 1'b0, m_coin1, service, 1'b0, 1'b0, m_two_players, m_one_player, m_fireB, m_fireA }),
.trakball_i(),
.joystick_i(~{m_right , m_left, m_down, m_up, m_right , m_left, m_down, m_up}),
@@ -109,17 +134,26 @@ centipede centipede(
.vsync_o(vs),
.hblank_o(hb),
.vblank_o(vb),
.audio_o(audio)
.audio_o(audio),
// ROM download
.dl_addr(ioctl_addr[14:0]),
.dl_data(ioctl_dout),
.dl_we(ioctl_wr && ioctl_index == 0),
// High score table save-load
.hsram_addr(ioctl_addr[5:0]),
.hsram_dout(ioctl_din),
.hsram_din(ioctl_dout),
.hsram_we(ioctl_wr && ioctl_index == 8'hff)
);
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.clk_sys ( clk_24 ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS3 ( SPI_SS3 ),
.SPI_DI ( SPI_DI ),
.R (blankn ? RGB[2:0] : 0),
.G (blankn ? RGB[5:3] : 0),
.B (blankn ? RGB[7:6] : 0),
.R (blankn ? RGB[2:0] : 0),
.G (blankn ? RGB[5:3] : 0),
.B (blankn ? RGB[7:6] : 0),
.HSync ( hs ),
.VSync ( vs ),
.VGA_R ( VGA_R ),
@@ -127,14 +161,15 @@ mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.scanlines ( scanlines ),
.rotate ( { 1'b0, rotate } ),
.ce_divider ( 1'b1 ),
.blend ( blend ),
.scandoubler_disable(scandoublerD ),
.no_csync ( no_csync ),
.ypbpr ( ypbpr )
);
);
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
@@ -146,17 +181,18 @@ user_io(
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.core_mod (core_mod ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
);
dac #(
.C_bits(15))
dac (
@@ -165,7 +201,7 @@ dac (
.dac_i({2{audio,audio}}),
.dac_o(AUDIO_L)
);
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
@@ -178,12 +214,12 @@ arcade_inputs inputs (
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
.orientation ( 2'b01 ),
.orientation ( 2'b01 ),
.joyswap ( joyswap ),
.oneplayer ( 1'b1 ),
.oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
);
);
endmodule

View File

@@ -18,7 +18,9 @@ entity dpram is
data_a_i : in std_logic_vector(data_width_g-1 downto 0);
data_a_o : out std_logic_vector(data_width_g-1 downto 0);
clk_b_i : in std_logic;
we_b_i : in std_logic := '0';
addr_b_i : in std_logic_vector(addr_width_g-1 downto 0);
data_b_i : in std_logic_vector(data_width_g-1 downto 0);
data_b_o : out std_logic_vector(data_width_g-1 downto 0)
);
end entity;
@@ -52,6 +54,9 @@ begin
begin
if rising_edge(clk_b_i) then
read_addr_v := unsigned(addr_b_i);
if we_b_i = '1' then
ram_q(to_integer(read_addr_v)) <= data_b_i;
end if;
data_b_o <= ram_q(to_integer(read_addr_v));
end if;
end process mem_b;

View File

@@ -27,12 +27,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram0(
.clk_a_i(clk_a & ~ce_a[0]),
.clk_a_i(clk_a),
.we_i(~we_a[0]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a0),
.clk_b_i(clk_b & ~ce_b[0]),
.clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b0)
);
@@ -41,12 +41,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram1(
.clk_a_i(clk_a & ~ce_a[1]),
.clk_a_i(clk_a),
.we_i(~we_a[1]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a1),
.clk_b_i(clk_b & ~ce_b[1]),
.clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b1)
);
@@ -55,12 +55,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram2(
.clk_a_i(clk_a & ~ce_a[2]),
.clk_a_i(clk_a),
.we_i(~we_a[2]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a2),
.clk_b_i(clk_b & ~ce_b[2]),
.clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b2)
);
@@ -69,12 +69,12 @@ dpram #(
.addr_width_g(8),
.data_width_g(8))
ram3(
.clk_a_i(clk_a & ~ce_a[3]),
.clk_a_i(clk_a),
.we_i(~we_a[3]),
.addr_a_i(addr_a),
.data_a_i(din_a),
.data_a_o(d_a3),
.clk_b_i(clk_b & ~ce_b[3]),
.clk_b_i(clk_b),
.addr_b_i(addr_b),
.data_b_o(d_b3)
);

View File

@@ -1,150 +0,0 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity F7 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of F7 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"FF",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"7E",X"7E",X"BD",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"FF",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"99",X"18",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"0A",X"4C",X"3E",X"3E",X"FE",X"7C",X"B8",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"0A",X"4C",X"3E",X"3E",X"FE",X"7C",X"B8",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"10",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"10",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"10",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"10",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"18",X"30",X"F2",X"FF",X"F2",X"30",X"18",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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"44",X"22",X"11",X"22",X"44",X"68",X"A0",X"3C",X"A0",X"68",X"44",X"22",X"11",X"22",X"44",X"00",
X"90",X"48",X"24",X"24",X"44",X"68",X"E0",X"3C",X"A0",X"68",X"44",X"24",X"24",X"48",X"90",X"00",
X"90",X"48",X"24",X"24",X"44",X"68",X"A0",X"3C",X"A0",X"68",X"44",X"24",X"24",X"48",X"90",X"00",
X"10",X"88",X"44",X"33",X"44",X"68",X"E0",X"3C",X"A0",X"68",X"44",X"33",X"44",X"88",X"10",X"00",
X"00",X"00",X"00",X"18",X"18",X"98",X"7F",X"8F",X"7F",X"1E",X"7C",X"B8",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"18",X"18",X"18",X"6F",X"9F",X"2F",X"5E",X"BC",X"78",X"00",X"00",X"00",X"00",
X"22",X"55",X"BE",X"74",X"02",X"61",X"C2",X"74",X"36",X"43",X"E0",X"40",X"36",X"7D",X"AE",X"44",
X"14",X"94",X"42",X"F1",X"42",X"94",X"34",X"3C",X"3C",X"34",X"94",X"42",X"F1",X"42",X"94",X"14",
X"00",X"24",X"4A",X"34",X"34",X"0C",X"3E",X"75",X"6D",X"2A",X"1C",X"34",X"34",X"4A",X"24",X"00",
X"00",X"00",X"00",X"00",X"10",X"00",X"3C",X"1C",X"1C",X"1E",X"00",X"04",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"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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"80",X"98",X"50",X"34",X"3C",X"3C",X"3C",X"3F",X"3E",X"3C",X"7C",X"BC",X"3C",X"7C",X"B8",X"98",
X"00",X"86",X"FC",X"05",X"0F",X"0F",X"0F",X"7F",X"8F",X"8F",X"0F",X"1F",X"EF",X"8F",X"0E",X"06",
X"01",X"06",X"0D",X"08",X"08",X"7C",X"FF",X"FC",X"F8",X"C8",X"CD",X"C6",X"C1",X"CC",X"E4",X"7C",
X"01",X"06",X"0D",X"08",X"7C",X"FF",X"FC",X"C8",X"CD",X"C6",X"E1",X"60",X"30",X"18",X"44",X"3C",
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"00",X"00",X"00",
X"00",X"00",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"A8",X"A8",X"00",X"00",
X"00",X"00",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"88",X"F8",X"00",X"E8",X"A8",X"F8",X"00",X"00",
X"00",X"00",X"00",X"00",X"08",X"B1",X"42",X"81",X"02",X"00",X"29",X"50",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"59",X"96",X"01",X"83",X"82",X"84",X"EA",X"31",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"7C",X"FE",X"7F",X"3E",X"7F",X"FE",X"7C",X"7E",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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"42",X"81",X"81",X"81",X"81",X"42",X"3C",
X"3C",X"42",X"81",X"81",X"81",X"81",X"42",X"3C",X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"30",X"F2",X"FF",X"F2",X"30",X"18",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"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"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"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"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"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"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
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"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"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"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"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"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"00",X"00",
X"0C",X"06",X"0F",X"03",X"0F",X"07",X"0E",X"0C",X"1C",X"0E",X"3F",X"0F",X"1F",X"0F",X"1E",X"0C",
X"1C",X"0E",X"3F",X"7F",X"3F",X"3F",X"1E",X"1C",X"1C",X"1E",X"FF",X"FF",X"FF",X"FF",X"1E",X"1C",
X"00",X"04",X"0E",X"02",X"0E",X"06",X"0C",X"00",X"00",X"0C",X"0E",X"0E",X"0E",X"0E",X"0C",X"00",
X"00",X"0C",X"0E",X"6E",X"2E",X"0E",X"0C",X"00",X"00",X"0C",X"0E",X"6E",X"6E",X"0E",X"0C",X"00",
X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"7E",X"FF",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"18",X"18",X"7E",X"FF",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"18",X"99",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"18",X"99",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"08",X"4D",X"3E",X"3E",X"FE",X"7C",X"38",X"40",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"08",X"4D",X"3E",X"3E",X"FE",X"7C",X"38",X"40",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"04",X"18",X"9C",X"FE",X"FE",X"9C",X"18",X"04",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"40",X"18",X"9C",X"FE",X"FE",X"9C",X"18",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"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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"44",X"22",X"22",X"22",X"44",X"68",X"A0",X"3C",X"E0",X"68",X"44",X"22",X"22",X"22",X"44",X"00",
X"40",X"20",X"90",X"88",X"68",X"68",X"E0",X"3C",X"E0",X"68",X"68",X"88",X"90",X"20",X"40",X"00",
X"44",X"22",X"22",X"22",X"44",X"68",X"A0",X"3C",X"E0",X"68",X"44",X"22",X"22",X"22",X"44",X"00",
X"20",X"10",X"88",X"64",X"47",X"68",X"E0",X"3C",X"E0",X"68",X"47",X"64",X"88",X"10",X"20",X"00",
X"00",X"00",X"00",X"18",X"18",X"D8",X"2F",X"9F",X"4F",X"3E",X"BC",X"78",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"18",X"18",X"18",X"7F",X"8F",X"3F",X"DE",X"3C",X"F8",X"00",X"00",X"00",X"00",
X"34",X"42",X"E9",X"42",X"34",X"1C",X"36",X"43",X"E9",X"42",X"34",X"34",X"42",X"E9",X"42",X"34",
X"28",X"66",X"DA",X"5D",X"BE",X"4C",X"7B",X"36",X"36",X"7B",X"4E",X"BE",X"1D",X"DA",X"66",X"14",
X"00",X"00",X"08",X"10",X"1C",X"3E",X"31",X"74",X"2E",X"1C",X"7C",X"38",X"08",X"10",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"30",X"38",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"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"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"00",X"8C",X"68",X"1A",X"1E",X"1E",X"1E",X"1F",X"7E",X"9E",X"9E",X"1E",X"FE",X"9E",X"9C",X"8C",
X"80",X"B0",X"A0",X"68",X"78",X"78",X"78",X"7E",X"7A",X"7A",X"FC",X"78",X"78",X"F8",X"F8",X"B0",
X"01",X"06",X"0D",X"18",X"10",X"7C",X"FF",X"FC",X"D0",X"D8",X"CD",X"C6",X"E1",X"7C",X"04",X"0C",
X"01",X"06",X"0D",X"08",X"7C",X"FF",X"FC",X"C8",X"CD",X"C6",X"C1",X"CC",X"D2",X"C4",X"CC",X"78",
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"00",X"00",X"00",
X"00",X"00",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"88",X"F8",X"00",X"F8",X"A8",X"B8",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"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"14",X"E5",X"02",X"A2",X"85",X"20",X"63",X"04",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"36",X"DD",X"CF",X"67",X"46",X"FF",X"6E",X"A8",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"20",X"7E",X"FE",X"6C",X"3E",X"7C",X"78",X"A0",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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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

@@ -1,150 +0,0 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity HJ7 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of HJ7 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"0C",X"0C",X"00",X"0C",X"0C",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"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"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"04",X"86",X"70",X"80",X"70",X"00",X"40",X"80",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"04",X"06",X"60",X"90",X"20",X"40",X"80",X"40",X"00",X"00",X"00",X"00",
X"22",X"77",X"EA",X"7C",X"3E",X"7F",X"BE",X"7C",X"3E",X"7F",X"BE",X"7C",X"1E",X"7F",X"EA",X"44",
X"5C",X"EC",X"7E",X"FF",X"7E",X"EC",X"5E",X"3B",X"3B",X"5E",X"EC",X"7E",X"FF",X"7E",X"EC",X"5C",
X"00",X"24",X"76",X"2C",X"3C",X"14",X"2E",X"5F",X"73",X"3E",X"04",X"3C",X"2C",X"76",X"24",X"00",
X"00",X"00",X"00",X"00",X"18",X"08",X"2C",X"12",X"24",X"1A",X"01",X"0C",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"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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"18",X"1C",X"1C",X"0C",X"3C",X"3C",X"18",X"2C",X"18",X"34",X"2C",X"1C",X"3C",X"38",X"18",
X"00",X"06",X"07",X"07",X"0F",X"0F",X"0F",X"04",X"0D",X"0B",X"07",X"0F",X"0F",X"0F",X"0E",X"06",
X"00",X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",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"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"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"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"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"4A",X"00",X"42",X"01",X"80",X"02",X"89",X"52",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"9D",X"B4",X"49",X"A6",X"C2",X"A1",X"6A",X"45",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"FE",X"7F",X"E7",X"67",X"FE",X"7F",X"2A",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"F8",X"FC",X"26",X"22",X"26",X"FC",X"F8",X"00",
X"FE",X"FE",X"92",X"92",X"92",X"FE",X"6C",X"00",X"38",X"7C",X"C6",X"82",X"82",X"C6",X"44",X"00",
X"FE",X"FE",X"82",X"82",X"C6",X"7C",X"38",X"00",X"FE",X"FE",X"92",X"92",X"92",X"82",X"80",X"00",
X"FE",X"FE",X"12",X"12",X"12",X"12",X"02",X"00",X"38",X"7C",X"C6",X"82",X"92",X"F2",X"F2",X"00",
X"FE",X"FE",X"10",X"10",X"10",X"FE",X"FE",X"00",X"82",X"82",X"FE",X"FE",X"82",X"82",X"00",X"00",
X"40",X"C0",X"80",X"80",X"80",X"FE",X"7E",X"00",X"FE",X"FE",X"30",X"78",X"EC",X"C6",X"82",X"00",
X"FE",X"FE",X"80",X"80",X"80",X"80",X"80",X"00",X"FE",X"FE",X"1C",X"38",X"1C",X"FE",X"FE",X"00",
X"FE",X"FE",X"1C",X"38",X"70",X"FE",X"FE",X"00",X"7C",X"FE",X"82",X"82",X"82",X"FE",X"7C",X"00",
X"FE",X"FE",X"22",X"22",X"22",X"3E",X"1C",X"00",X"7C",X"FE",X"82",X"A2",X"E2",X"7E",X"BC",X"00",
X"FE",X"FE",X"22",X"62",X"F2",X"DE",X"8C",X"00",X"4C",X"DE",X"92",X"92",X"96",X"F4",X"60",X"00",
X"02",X"02",X"FE",X"FE",X"02",X"02",X"00",X"00",X"7E",X"FE",X"80",X"80",X"80",X"FE",X"7E",X"00",
X"1E",X"3E",X"70",X"E0",X"70",X"3E",X"1E",X"00",X"FE",X"FE",X"70",X"38",X"70",X"FE",X"FE",X"00",
X"C6",X"EE",X"7C",X"38",X"7C",X"EE",X"C6",X"00",X"0E",X"1E",X"F0",X"F0",X"1E",X"0E",X"00",X"00",
X"C2",X"E2",X"F2",X"BA",X"9E",X"8E",X"86",X"00",X"3C",X"42",X"BD",X"C3",X"C3",X"A5",X"42",X"3C",
X"3C",X"42",X"FD",X"93",X"93",X"8D",X"42",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"2E",X"10",X"08",X"94",X"CA",X"A8",X"90",X"00",X"18",X"3C",X"FE",X"FF",X"FE",X"3C",X"18",X"00",
X"38",X"7C",X"C2",X"82",X"86",X"7C",X"38",X"00",X"80",X"84",X"FE",X"FE",X"80",X"80",X"00",X"00",
X"C4",X"E6",X"F2",X"B2",X"BA",X"9E",X"8C",X"00",X"40",X"C2",X"92",X"9A",X"9E",X"F6",X"62",X"00",
X"30",X"38",X"2C",X"26",X"FE",X"FE",X"20",X"00",X"4E",X"CE",X"8A",X"8A",X"8A",X"FA",X"70",X"00",
X"78",X"FC",X"96",X"92",X"92",X"F2",X"60",X"00",X"06",X"06",X"E2",X"F2",X"1A",X"0E",X"06",X"00",
X"6C",X"9E",X"9A",X"B2",X"B2",X"EC",X"60",X"00",X"0C",X"9E",X"92",X"92",X"D2",X"7E",X"3C",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"00",X"00",X"00",X"00",
X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
X"00",X"00",X"00",X"66",X"66",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"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"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"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"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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"04",X"0E",X"02",X"0E",X"06",X"0C",X"00",X"00",X"0C",X"0E",X"0E",X"0E",X"0E",X"0C",X"00",
X"00",X"0C",X"0E",X"6E",X"2E",X"0E",X"0C",X"00",X"00",X"0C",X"0E",X"6E",X"6E",X"0E",X"0C",X"00",
X"0C",X"02",X"01",X"01",X"01",X"01",X"02",X"0C",X"1C",X"02",X"31",X"01",X"11",X"01",X"12",X"0C",
X"1C",X"02",X"31",X"11",X"11",X"31",X"12",X"1C",X"1C",X"12",X"F1",X"91",X"91",X"F1",X"12",X"1C",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"3C",X"7E",X"7E",X"7E",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"38",X"7C",X"FE",X"FE",X"FE",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"78",X"FC",X"FE",X"FE",X"FC",X"78",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"FC",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"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"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"70",X"F8",X"FC",X"F8",X"70",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"04",X"C6",X"20",X"90",X"40",X"20",X"80",X"40",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"04",X"06",X"70",X"80",X"30",X"C0",X"00",X"C0",X"00",X"00",X"00",X"00",
X"3C",X"7E",X"F7",X"7E",X"3C",X"1C",X"3E",X"7F",X"F7",X"7E",X"3C",X"3C",X"7E",X"F7",X"7E",X"3C",
X"28",X"7E",X"FE",X"37",X"EA",X"74",X"5F",X"6E",X"6E",X"5F",X"74",X"EA",X"37",X"FE",X"7E",X"14",
X"00",X"00",X"18",X"18",X"34",X"52",X"34",X"4A",X"52",X"2C",X"4A",X"2C",X"18",X"18",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"10",X"38",X"30",X"28",X"10",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"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"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"0C",X"0E",X"06",X"1E",X"1E",X"1E",X"08",X"0C",X"1A",X"16",X"0E",X"1E",X"1E",X"1C",X"0C",
X"00",X"30",X"38",X"38",X"58",X"78",X"58",X"50",X"58",X"38",X"78",X"70",X"68",X"18",X"78",X"30",
X"00",X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"02",X"03",X"00",X"03",X"02",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"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"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"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"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"54",X"CB",X"50",X"A2",X"05",X"B2",X"4B",X"10",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"7E",X"7D",X"E6",X"63",X"67",X"FB",X"6E",X"2A",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"18",X"BC",X"7F",X"EF",X"7E",X"FD",X"14",X"A0",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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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

@@ -1,38 +0,0 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity P4 is
port (
clk : in std_logic;
addr : in std_logic_vector(7 downto 0);
data : out std_logic_vector(3 downto 0)
);
end entity;
architecture prom of P4 is
type rom is array(0 to 255) of std_logic_vector(3 downto 0);
signal rom_data: rom := (
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0010","0010","0010","0010","0010","0010",
"0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","0010","1010",
"1010","1010","1010","1010","1010","1110","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000","0000",
"1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010",
"1010","1010","1011","1011","1011","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010","1010");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

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

View File

@@ -218,23 +218,12 @@ set_global_assignment -name USE_SIGNALTAP_FILE output_files/tet.stp
set_global_assignment -name SYSTEMVERILOG_FILE rtl/Tetris_MiST.sv
set_global_assignment -name VERILOG_FILE rtl/FPGA_ATetris.v
set_global_assignment -name VERILOG_FILE rtl/ATARI_SLAPSTIK1.v
set_global_assignment -name VHDL_FILE rtl/Pokey/syncreset_enable_divider.vhd
set_global_assignment -name VHDL_FILE rtl/Pokey/synchronizer.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_poly_17_9.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_poly_5.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_poly_4.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_noise_filter.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_keyboard_scanner.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey_countdown_timer.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/pokey.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/latch_delay_line.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/delay_line.vhdl
set_global_assignment -name VHDL_FILE rtl/Pokey/complete_address_decoder.vhdl
set_global_assignment -name VHDL_FILE rtl/dpram.vhd
set_global_assignment -name VERILOG_FILE rtl/hvgen.v
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
set_global_assignment -name VHDL_FILE rtl/pll_mist.vhd
set_global_assignment -name VHDL_FILE rtl/spram.vhd
set_global_assignment -name QIP_FILE ../../common/Sound/Pokey/Pokey.qip
set_global_assignment -name QIP_FILE ../../common/CPU/T65/T65.qip
set_global_assignment -name QIP_FILE ../../common/mist/mist.qip
set_global_assignment -name SIGNALTAP_FILE output_files/tet.stp

View File

@@ -24,7 +24,13 @@ module FPGA_ATetris
input [7:0] PRDT,
output [15:0] CRAD,
input [15:0] CRDT
input [15:0] CRDT,
input NVRAM_CLK,
input [8:0] NVRAM_A,
input [7:0] NVRAM_D,
input NVRAM_WE,
output [7:0] NVRAM_Q
);
// INP = {`SELFT,`COIN2,`COIN1,`P2LF,`P2RG,`P2DW,`P2RO,`P1LF,`P1RG,`P1DW,`P1RO};
@@ -66,7 +72,7 @@ ATETRIS_ROMAXS romaxs(RST,MCLK,CPUCE,CPUAD,PRAD,PRDV);
// RAMs
wire [7:0] RMDT;
wire RMDV;
ATETRIS_RAMS rams(MCLK,CPUAD,CPUWR,CPUDO,RMDT,RMDV);
ATETRIS_RAMS rams(MCLK,CPUAD,CPUWR,CPUDO,RMDT,RMDV,NVRAM_CLK,NVRAM_A,NVRAM_D,NVRAM_WE,NVRAM_Q);
// Video
@@ -164,7 +170,13 @@ module ATETRIS_RAMS
input CPUWR,
input [7:0] CPUDO,
output [7:0] RMDT,
output RMDV
output RMDV,
input NVRAM_CLK,
input [8:0] NVRAM_A,
input [7:0] NVRAM_D,
input NVRAM_WE,
output [7:0] NVRAM_Q
);
// WorkRAM
@@ -188,16 +200,24 @@ wire NVDV = (CPUAD[15:10]==6'b0010_01); // $24xx-$27xx
wire [7:0] NVDT;
//RAM_B #(9,255) nvram(DEVCL,CPUAD,NVDV,CPUWR,CPUDO,NVDT);
spram#(
.init_file("nvinit.hex"),
.widthad_a(9),
.width_a(8))
dpram#(
.init_file("rtl/nvinit.mif"),
.data_width_g(8),
.addr_width_g(9))
nvram(
.address(CPUAD),
.clock(MCLK),
.data(CPUDO),
.wren(CPUWR & NVDV),
.q(NVDT)
// CPU side
.clk_a_i(MCLK),
.en_a_i(1'b1),
.addr_a_i(CPUAD),
.data_a_i(CPUDO),
.we_i(CPUWR & NVDV),
.data_a_o(NVDT),
// IO Controller side
.clk_b_i(NVRAM_CLK),
.addr_b_i(NVRAM_A),
.data_b_o(NVRAM_Q),
.data_b_i(NVRAM_D),
.we_b_i(NVRAM_WE)
);
DSEL4x8 dsel(RMDV,RMDT,
@@ -253,7 +273,7 @@ reg [8:0] pVPT;
always @(posedge MCLK) begin
if (tWDTR) WDT <= 0;
else if (pVPT!=VP) begin
if (VP==0) WDT <= (WDT==8) ? 14 : (WDT+1);
if (VP==0) WDT <= (WDT==8) ? 4'd14 : (WDT+1);
pVPT <= VP;
end
end

View File

@@ -1,81 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY syncreset_enable_divider IS
generic(COUNT : natural := 1; RESETCOUNT : natural := 0);
PORT
(
CLK : IN STD_LOGIC;
SYNCRESET : in std_logic;
RESET_N : IN STD_LOGIC;
ENABLE_IN : IN STD_LOGIC;
ENABLE_OUT : OUT STD_LOGIC
);
END syncreset_enable_divider;
ARCHITECTURE vhdl OF syncreset_enable_divider IS
function log2c(n : integer) return integer is
variable m,p : integer;
begin
m := 0;
p := 1;
while p<n loop
m:=m+1;
p:=p*2;
end loop;
return m;
end log2c;
constant WIDTH : natural := log2c(COUNT);
signal count_reg : std_logic_vector(WIDTH-1 downto 0); -- width should depend on count
signal count_next : std_logic_vector(WIDTH-1 downto 0);
signal enabled_out_next : std_logic;
signal enabled_out_reg : std_logic;
BEGIN
-- register
process(clk,reset_n)
begin
if (reset_n = '0') then
count_reg <= (others=>'0');
enabled_out_reg <= '0';
elsif (clk'event and clk='1') then
count_reg <= count_next;
enabled_out_reg <= enabled_out_next;
end if;
end process;
-- Maintain a count in order to calculate a clock circa 1.79 (in this case 25/14) -> 64KHz -> /28
process(count_reg,enable_in,enabled_out_reg,syncreset)
begin
count_next <= count_reg;
enabled_out_next <= enabled_out_reg;
if (enable_in = '1') then
count_next <= std_logic_vector(unsigned(count_reg) + 1);
enabled_out_next <= '0';
if (unsigned(count_reg) = to_unsigned(COUNT-1,WIDTH)) then
count_next <= std_logic_vector(to_unsigned(0,WIDTH));
enabled_out_next <= '1';
end if;
end if;
if (syncreset='1') then
count_next <= std_logic_vector(to_unsigned(resetcount,width));
end if;
end process;
-- output
enable_out <= enabled_out_reg and enable_in;
END vhdl;

View File

@@ -32,11 +32,12 @@ module Tetris_MiST(
`include "rtl/build_id.v"
localparam CONF_STR = {
"TETRIS;ROM;",
"TETRIS;;",
"O2,Service,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
"O6,Joystick Swap,Off,On;",
"R512,Save NVRAM;",
"T0,Reset;",
"V,v1.0.",`BUILD_DATE
};
@@ -46,7 +47,7 @@ wire joyswap = status[6];
wire rotate = 0;
wire blend = status[5];
assign LED = ~ioctl_downl;
assign LED = ~(ioctl_downl | ioctl_upl);
assign SDRAM_CLK = clk_sd;
assign SDRAM_CKE = 1;
assign AUDIO_R = AUDIO_L;
@@ -100,21 +101,26 @@ wire [15:0] rom_do;
wire [15:0] gfx_addr;
wire [15:0] gfx_do;
wire ioctl_downl;
wire ioctl_upl;
wire [7:0] ioctl_index;
wire ioctl_wr;
wire [24:0] ioctl_addr;
wire [7:0] ioctl_dout;
wire [7:0] ioctl_din;
data_io data_io(
.clk_sys ( clk_sd ),
.clk_sys ( clk_sd ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS2 ( SPI_SS2 ),
.SPI_DI ( SPI_DI ),
.SPI_DO ( SPI_DO ),
.ioctl_download( ioctl_downl ),
.ioctl_upload ( ioctl_upl ),
.ioctl_index ( ioctl_index ),
.ioctl_wr ( ioctl_wr ),
.ioctl_addr ( ioctl_addr ),
.ioctl_dout ( ioctl_dout )
.ioctl_dout ( ioctl_dout ),
.ioctl_din ( ioctl_din )
);
reg port1_req, port2_req;
@@ -154,7 +160,7 @@ always @(posedge clk_sd) begin
ioctl_wr_last <= ioctl_wr;
if (ioctl_downl) begin
if (~ioctl_wr_last && ioctl_wr) begin
if (~ioctl_wr_last && ioctl_wr && ioctl_index == 0) begin
port1_req <= ~port1_req;
port2_req <= ~port2_req;
end
@@ -196,7 +202,13 @@ FPGA_ATetris FPGA_ATetris(
.PRDT(rom_addr[0] ? rom_do[15:8] : rom_do[7:0]),
.CRAD(gfx_addr),
.CRDT(gfx_do)
.CRDT(gfx_do),
.NVRAM_CLK(clk_sd),
.NVRAM_A(ioctl_addr[8:0]),
.NVRAM_D(ioctl_dout),
.NVRAM_Q(ioctl_din),
.NVRAM_WE(ioctl_wr && ioctl_index == 8'hff)
);
wire PCLK;

View File

@@ -8,8 +8,9 @@ use ieee.std_logic_1164.all;
entity dpram is
generic (
addr_width_g : integer := 8;
data_width_g : integer := 8
addr_width_g : integer := 8;
data_width_g : integer := 8;
init_file : string := ""
);
port (
clk_a_i : in std_logic;
@@ -20,7 +21,9 @@ port (
data_a_o : out std_logic_vector(data_width_g-1 downto 0);
clk_b_i : in std_logic;
addr_b_i : in std_logic_vector(addr_width_g-1 downto 0);
data_b_o : out std_logic_vector(data_width_g-1 downto 0)
data_b_o : out std_logic_vector(data_width_g-1 downto 0);
we_b_i : in std_logic := '0';
data_b_i : in std_logic_vector(data_width_g-1 downto 0) := (others => '0')
);
end dpram;
@@ -33,6 +36,8 @@ architecture rtl of dpram is
type ram_t is array (natural range 2**addr_width_g-1 downto 0) of std_logic_vector(data_width_g-1 downto 0);
signal ram_q : ram_t;
attribute ram_init_file : string;
attribute ram_init_file of ram_q : signal is init_file;
begin
@@ -51,7 +56,10 @@ begin
mem_b: process (clk_b_i)
begin
if rising_edge(clk_b_i) then
data_b_o <= ram_q(to_integer(unsigned(addr_b_i)));
if we_b_i = '1' then
ram_q(to_integer(unsigned(addr_b_i))) <= data_b_i;
end if;
data_b_o <= ram_q(to_integer(unsigned(addr_b_i)));
end if;
end process mem_b;

View File

@@ -0,0 +1,32 @@
-- http://srecord.sourceforge.net/
--
-- Generated automatically by srec_cat -o --mif
--
DEPTH = 512;
WIDTH = 8;
ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;
CONTENT BEGIN
0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0018: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0048: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0078: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0090: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
00A8: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
00C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
00D8: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
00F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0108: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0120: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0138: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0150: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0168: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0180: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
0198: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
01B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
01C8: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
01E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;
01F8: FF FF FF FF FF FF FF FF;
END;

View File

@@ -1,52 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY complete_address_decoder IS
generic (width : natural := 1);
PORT
(
addr_in : in std_logic_vector(width-1 downto 0);
addr_decoded : out std_logic_vector((2**width)-1 downto 0)
);
END complete_address_decoder;
--ARCHITECTURE vhdl OF complete_address_decoder IS
--BEGIN
-- comp_gen:
-- for i in 0 to ((2**width)-1) generate
-- addr_decoded(i) <= '1' when i=to_integer(unsigned(addr_in)) else '0';
-- end generate;
--end vhdl;
architecture tree of complete_address_decoder is
constant STAGE : natural:=width;
type std_logic_2d is array (natural range <>,natural range <>) of std_logic;
signal p: std_logic_2d(stage downto 0,2**stage-1 downto 0);
signal a: std_logic_vector(width-1 downto 0) ;
begin
a<=addr_in;
process(a,p)
begin
p(stage,0) <= '1';
for s in stage downto 1 loop
for r in 0 to (2**(stage-s)-1) loop
p(s-1,2*r) <= (not a(s-1)) and p(s,r);
p(s-1,2*r+1) <= a(s-1) and p(s,r);
end loop;
end loop;
for i in 0 to (2**stage-1) loop
addr_decoded(i) <= p(0,i);
end loop;
end process;
end tree;

View File

@@ -1,57 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY delay_line IS
generic(COUNT : natural := 1);
PORT
(
CLK : IN STD_LOGIC;
SYNC_RESET : IN STD_LOGIC;
DATA_IN : IN STD_LOGIC;
ENABLE : IN STD_LOGIC; -- i.e. shift on this clock
RESET_N : IN STD_LOGIC;
DATA_OUT : OUT STD_LOGIC
);
END delay_line;
ARCHITECTURE vhdl OF delay_line IS
signal shift_reg : std_logic_vector(COUNT-1 downto 0);
signal shift_next : std_logic_vector(COUNT-1 downto 0);
BEGIN
-- register
process(clk,reset_n)
begin
if (reset_N = '0') then
shift_reg <= (others=>'0');
elsif (clk'event and clk='1') then
shift_reg <= shift_next;
end if;
end process;
-- shift on enable
process(shift_reg,enable,data_in,sync_reset)
begin
shift_next <= shift_reg;
if (enable = '1') then
shift_next <= data_in&shift_reg(COUNT-1 downto 1);
end if;
if (sync_reset = '1') then
shift_next <= (others=>'0');
end if;
end process;
-- output
data_out <= shift_reg(0) and enable;
END vhdl;

View File

@@ -1,66 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY latch_delay_line IS
generic(COUNT : natural := 1);
PORT
(
CLK : IN STD_LOGIC;
SYNC_RESET : IN STD_LOGIC;
DATA_IN : IN STD_LOGIC;
ENABLE : IN STD_LOGIC; -- i.e. shift on this clock
RESET_N : IN STD_LOGIC;
DATA_OUT : OUT STD_LOGIC
);
END latch_delay_line;
ARCHITECTURE vhdl OF latch_delay_line IS
signal shift_reg : std_logic_vector(COUNT-1 downto 0);
signal shift_next : std_logic_vector(COUNT-1 downto 0);
signal data_in_reg : std_logic;
signal data_in_next : std_logic;
BEGIN
-- register
process(clk,reset_n)
begin
if (reset_N = '0') then
shift_reg <= (others=>'0');
data_in_reg <= '0';
elsif (clk'event and clk='1') then
shift_reg <= shift_next;
data_in_reg <= data_in_next;
end if;
end process;
-- shift on enable
process(shift_reg,enable,data_in,data_in_reg,sync_reset)
begin
shift_next <= shift_reg;
data_in_next <= data_in or data_in_reg;
if (enable = '1') then
shift_next <= (data_in or data_in_reg)&shift_reg(COUNT-1 downto 1);
data_in_next <= '0';
end if;
if (sync_reset = '1') then
shift_next <= (others=>'0');
data_in_next <= '0';
end if;
end process;
-- output
data_out <= shift_reg(0) and enable;
END vhdl;

File diff suppressed because it is too large Load Diff

View File

@@ -1,102 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY pokey_countdown_timer IS
generic(UNDERFLOW_DELAY : natural := 3);
PORT
(
CLK : IN STD_LOGIC;
ENABLE : IN STD_LOGIC;
ENABLE_UNDERFLOW : IN STD_LOGIC;
RESET_N : IN STD_LOGIC;
WR_EN : IN STD_LOGIC;
DATA_IN : IN STD_LOGIC_VECTOR(7 downto 0);
DATA_OUT : OUT STD_LOGIC
);
END pokey_countdown_timer;
ARCHITECTURE vhdl OF pokey_countdown_timer IS
component delay_line IS
generic(COUNT : natural := 1);
PORT
(
CLK : IN STD_LOGIC;
SYNC_RESET : IN STD_LOGIC;
DATA_IN : IN STD_LOGIC;
ENABLE : IN STD_LOGIC;
RESET_N : IN STD_LOGIC;
DATA_OUT : OUT STD_LOGIC
);
END component;
function To_Std_Logic(L: BOOLEAN) return std_ulogic is
begin
if L then
return('1');
else
return('0');
end if;
end function To_Std_Logic;
signal count_reg : std_logic_vector(7 downto 0);
signal count_next: std_logic_vector(7 downto 0);
signal underflow : std_logic;
signal count_command : std_logic_vector(1 downto 0);
signal underflow_command: std_logic_vector(1 downto 0);
BEGIN
-- Instantiate delay (provides output)
underflow0_delay : delay_line
generic map (COUNT=>UNDERFLOW_DELAY)
port map(clk=>clk,sync_reset=>wr_en,data_in=>underflow,enable=>ENABLE_UNDERFLOW,reset_n=>reset_n,data_out=>data_out);
-- register
process(clk,reset_n)
begin
if (reset_N = '0') then
count_reg <= (others=>'0');
elsif (clk'event and clk='1') then
count_reg <= count_next;
end if;
end process;
-- count down on enable
process(count_reg,enable,wr_en,count_command,data_in)
begin
count_command <= enable&wr_en;
case count_command is
when "10" =>
count_next <= std_logic_vector(unsigned(count_reg) -1);
when "01"|"11" =>
count_next <= data_in;
when others =>
count_next <= count_reg;
end case;
end process;
-- underflow
process(count_reg,enable,underflow_command)
begin
underflow_command <= enable & To_Std_Logic(count_reg = X"00");
case underflow_command is
when "11" =>
underflow <= '1';
when others =>
underflow <= '0';
end case;
end process;
END vhdl;

View File

@@ -1,202 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity pokey_keyboard_scanner is
port
(
clk : in std_logic;
reset_n : in std_logic;
enable : in std_logic; -- typically hsync or equiv timing
keyboard_response : in std_logic_vector(1 downto 0);
debounce_disable : in std_logic;
scan_enable : in std_logic;
keyboard_scan : out std_logic_vector(5 downto 0);
key_held : out std_logic;
shift_held : out std_logic;
keycode : out std_logic_vector(7 downto 0);
other_key_irq : out std_logic;
break_irq : out std_logic
);
end pokey_keyboard_scanner;
architecture vhdl of pokey_keyboard_scanner is
signal bincnt_next : std_logic_vector(5 downto 0);
signal bincnt_reg : std_logic_vector(5 downto 0);
signal break_pressed_next : std_logic;
signal break_pressed_reg : std_logic;
signal shift_pressed_next : std_logic;
signal shift_pressed_reg : std_logic;
signal control_pressed_next : std_logic;
signal control_pressed_reg : std_logic;
signal compare_latch_next : std_logic_vector(5 downto 0);
signal compare_latch_reg : std_logic_vector(5 downto 0);
signal keycode_latch_next : std_logic_vector(7 downto 0);
signal keycode_latch_reg : std_logic_vector(7 downto 0);
signal irq_next : std_logic;
signal irq_reg : std_logic;
signal break_irq_next : std_logic;
signal break_irq_reg : std_logic;
signal key_held_next : std_logic;
signal key_held_reg : std_logic;
signal my_key : std_logic;
signal state_next : std_logic_vector(1 downto 0);
signal state_reg : std_logic_vector(1 downto 0);
constant state_wait_key : std_logic_vector(1 downto 0) := "00";
constant state_key_bounce : std_logic_vector(1 downto 0) := "01";
constant state_valid_key : std_logic_vector(1 downto 0) := "10";
constant state_key_debounce : std_logic_vector(1 downto 0) := "11";
begin
-- register
process(clk,reset_n)
begin
if (reset_n = '0') then
bincnt_reg <= (others=>'0');
break_pressed_reg <= '0';
shift_pressed_reg <= '0';
control_pressed_reg <= '0';
compare_latch_reg <= (others=>'0');
keycode_latch_reg <= (others=>'1');
key_held_reg <= '0';
state_reg <= state_wait_key;
irq_reg <= '0';
break_irq_reg <= '0';
elsif (clk'event and clk = '1') then
bincnt_reg <= bincnt_next;
state_reg <= state_next;
break_pressed_reg <= break_pressed_next;
shift_pressed_reg <= shift_pressed_next;
control_pressed_reg <= control_pressed_next;
compare_latch_reg <= compare_latch_next;
keycode_latch_reg <= keycode_latch_next;
key_held_reg <= key_held_next;
state_reg <= state_next;
irq_reg <= irq_next;
break_irq_reg <= break_irq_next;
end if;
end process;
process (enable, keyboard_response, scan_enable, key_held_reg, my_key, state_reg,bincnt_reg, compare_latch_reg, break_pressed_next, break_pressed_reg, shift_pressed_reg, break_irq_reg, control_pressed_reg, keycode_latch_reg, debounce_disable)
begin
bincnt_next <= bincnt_reg;
state_next <= state_reg;
compare_latch_next <= compare_latch_reg;
irq_next <= '0';
break_irq_next <= '0';
break_pressed_next <= break_pressed_reg;
shift_pressed_next <= shift_pressed_reg;
control_pressed_next <= control_pressed_reg;
keycode_latch_next <= keycode_latch_reg;
key_held_next <= key_held_reg;
my_key <= '0';
if (bincnt_reg = compare_latch_reg or debounce_disable='1') then
my_key <= '1';
end if;
if (enable = '1' and scan_enable='1') then
bincnt_next <= std_logic_vector(unsigned(bincnt_reg) + 1); -- check another key
key_held_next<= '0';
case state_reg is
when state_wait_key =>
if (keyboard_response(0) = '0') then -- detected key press
if (debounce_disable = '1') then
keycode_latch_next <= control_pressed_reg&shift_pressed_reg&bincnt_reg;
irq_next <= '1';
key_held_next<= '1';
else
state_next <= state_key_bounce;
compare_latch_next <= bincnt_reg;
end if;
end if;
when state_key_bounce =>
if (keyboard_response(0) = '0') then -- detected key press
if (my_key = '1') then -- same key
keycode_latch_next <= control_pressed_reg&shift_pressed_reg&compare_latch_reg;
irq_next <= '1';
key_held_next<= '1';
state_next <= state_valid_key;
else -- different key (multiple keys pressed)
state_next <= state_wait_key;
end if;
else -- key not pressed
if (my_key = '1') then -- same key, no longer pressed
state_next <= state_wait_key;
end if;
end if;
when state_valid_key =>
key_held_next<= '1';
if (my_key = '1') then -- only response to my key
if (keyboard_response(0) = '1') then -- no longer pressed
state_next <= state_key_debounce;
end if;
end if;
when state_key_debounce =>
key_held_next<= '1';
if (my_key = '1') then
if (keyboard_response(0) = '1') then -- no longer pressed
key_held_next<= '0';
state_next <= state_wait_key;
else
state_next <= state_valid_key;
end if;
end if;
when others=>
state_next <= state_wait_key;
end case;
if (bincnt_reg(3 downto 0) = "0000") then
case bincnt_reg(5 downto 4) is
when "11" =>
break_pressed_next <= not(keyboard_response(1)); --0x30
when "01" =>
shift_pressed_next <= not(keyboard_response(1)); --0x10
when "00" =>
control_pressed_next <= not(keyboard_response(1)); -- 0x00
when others =>
--
end case;
end if;
end if;
if (break_pressed_next='1' and break_pressed_reg='0') then
break_irq_next <= '1';
end if;
end process;
-- outputs
keyboard_scan <= not(bincnt_reg);
key_held <= key_held_reg;
shift_held <= shift_pressed_reg;
keycode <= keycode_latch_reg;
other_key_irq <= irq_reg;
break_irq <= break_irq_reg;
end vhdl;

View File

@@ -1,79 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY pokey_noise_filter IS
PORT
(
CLK : IN STD_LOGIC;
RESET_N : IN STD_LOGIC;
NOISE_SELECT : IN STD_LOGIC_VECTOR(2 downto 0);
PULSE_IN : IN STD_LOGIC;
NOISE_4 : IN STD_LOGIC;
NOISE_5 : IN STD_LOGIC;
NOISE_LARGE : IN STD_LOGIC;
SYNC_RESET : IN STD_LOGIC;
PULSE_OUT : OUT STD_LOGIC
);
END pokey_noise_filter;
ARCHITECTURE vhdl OF pokey_noise_filter IS
-- signal pulse_noise_a : std_logic;
-- signal pulse_noise_b : std_logic;
signal audclk : std_logic;
signal out_next : std_logic;
signal out_reg : std_logic;
BEGIN
process(clk,reset_n)
begin
if (reset_n='0') then
out_reg <= '0';
elsif (clk'event and clk='1') then
out_reg <= out_next;
end if;
end process;
pulse_out <= out_reg;
process(pulse_in, noise_4, noise_5, noise_large, noise_select, audclk, out_reg, sync_reset)
begin
audclk <= pulse_in;
out_next <= out_reg;
if (NOISE_SELECT(2) = '0') then
audclk <= pulse_in and noise_5;
end if;
if (audclk = '1') then
if (NOISE_SELECT(0) = '1') then
-- toggle
out_next <= not(out_reg);
else
-- sample
if (NOISE_SELECT(1) = '1') then
out_next <= noise_4;
else
out_next <= noise_large;
end if;
end if;
end if;
if (sync_reset = '1') then
out_next <= '0';
end if;
end process;
end vhdl;

View File

@@ -1,77 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY pokey_poly_17_9 IS
PORT
(
CLK : IN STD_LOGIC;
RESET_N : IN STD_LOGIC;
ENABLE : IN STD_LOGIC;
SELECT_9_17 : IN STD_LOGIC; -- 9 high, 17 low
INIT : IN STD_LOGIC;
BIT_OUT : OUT STD_LOGIC;
RAND_OUT : OUT std_logic_vector(7 downto 0)
);
END pokey_poly_17_9;
ARCHITECTURE vhdl OF pokey_poly_17_9 IS
signal shift_reg: std_logic_vector(16 downto 0);
signal shift_next: std_logic_vector(16 downto 0);
signal cycle_delay_reg : std_logic;
signal cycle_delay_next : std_logic;
signal select_9_17_del_reg : std_logic;
signal select_9_17_del_next : std_logic;
signal feedback : std_logic;
BEGIN
-- register
process(clk,reset_n)
begin
if (reset_n = '0') then
shift_reg <= "01010101010101010";
cycle_delay_reg <= '0';
select_9_17_del_reg <= '0';
elsif (clk'event and clk='1') then
shift_reg <= shift_next;
cycle_delay_reg <= cycle_delay_next;
select_9_17_del_reg <= select_9_17_del_next;
end if;
end process;
-- next state (as pokey decap)
feedback <= shift_reg(13) xnor shift_reg(8);
process(enable,shift_reg,feedback,select_9_17,select_9_17_del_reg,init,cycle_delay_reg)
begin
shift_next <= shift_reg;
cycle_delay_next <= cycle_delay_reg;
select_9_17_del_next <= select_9_17_del_reg;
if (enable = '1') then
select_9_17_del_next <= select_9_17;
shift_next(15 downto 8) <= shift_reg(16 downto 9);
shift_next(7) <= feedback;
shift_next(6 downto 0) <= shift_reg(7 downto 1);
shift_next(16) <= ((feedback and select_9_17_del_reg) or (shift_reg(0) and not(select_9_17))) and not(init);
cycle_delay_next <= shift_reg(9);
end if;
end process;
-- output
bit_out <= cycle_delay_reg; -- from pokey schematics
RAND_OUT(7 downto 0) <= not(shift_reg(15 downto 8));
END vhdl;

View File

@@ -1,50 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY pokey_poly_4 IS
PORT
(
CLK : IN STD_LOGIC;
RESET_N : IN STD_LOGIC;
ENABLE : IN STD_LOGIC;
INIT : IN STD_LOGIC;
BIT_OUT : OUT STD_LOGIC
);
END pokey_poly_4;
ARCHITECTURE vhdl OF pokey_poly_4 IS
signal shift_reg: std_logic_vector(3 downto 0);
signal shift_next: std_logic_vector(3 downto 0);
BEGIN
-- register
process(clk, reset_n)
begin
if (reset_n = '0') then
shift_reg <= "1010";
elsif (clk'event and clk='1') then
shift_reg <= shift_next;
end if;
end process;
-- next state
process(shift_reg,enable,init)
begin
shift_next <= shift_reg;
if (enable = '1') then
shift_next <= ((shift_reg(1) xnor shift_reg(0)) and not(init))&shift_reg(3 downto 1);
end if;
end process;
-- output
bit_out <= shift_reg(0);
END vhdl;

View File

@@ -1,50 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY pokey_poly_5 IS
PORT
(
CLK : IN STD_LOGIC;
RESET_N : IN STD_LOGIC;
ENABLE : IN STD_LOGIC;
INIT : IN STD_LOGIC;
BIT_OUT : OUT STD_LOGIC
);
END pokey_poly_5;
ARCHITECTURE vhdl OF pokey_poly_5 IS
signal shift_reg: std_logic_vector(4 downto 0);
signal shift_next: std_logic_vector(4 downto 0);
BEGIN
-- register
process(clk,reset_n)
begin
if (reset_n = '0') then
shift_reg <= "01010";
elsif (clk'event and clk='1') then
shift_reg <= shift_next;
end if;
end process;
-- next state
process(shift_reg,enable,init)
begin
shift_next <= shift_reg;
if (enable = '1') then
shift_next <= ((shift_reg(2) xnor shift_reg(0)) and not(init))&shift_reg(4 downto 1);
end if;
end process;
-- output
bit_out <= shift_reg(0);
END vhdl;

View File

@@ -1,39 +0,0 @@
---------------------------------------------------------------------------
-- (c) 2013 mark watson
-- I am happy for anyone to use this for non-commercial use.
-- If my vhdl files are used commercially or otherwise sold,
-- please contact me for explicit permission at scrameta (gmail).
-- This applies for source and binary form and derived works.
---------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY synchronizer IS
PORT
(
CLK : IN STD_LOGIC;
RAW : IN STD_LOGIC;
SYNC : OUT STD_LOGIC
);
END synchronizer;
ARCHITECTURE vhdl OF synchronizer IS
signal ff_next : std_logic_vector(2 downto 0);
signal ff_reg : std_logic_vector(2 downto 0);
begin
-- register
process(clk)
begin
if (clk'event and clk='1') then
ff_reg <= ff_next;
end if;
end process;
ff_next <= RAW&ff_reg(2 downto 1);
SYNC <= ff_reg(0);
end vhdl;

View File

@@ -367,6 +367,7 @@ ARCHITECTURE vhdl OF pokey IS
signal serout_enable : std_logic;
signal serout_enable_delayed : std_logic;
signal serin_enable : std_logic;
signal serin_enable_delayed : std_logic;
signal async_serial_reset : std_logic;
signal waiting_for_start_bit : std_logic;
@@ -1000,6 +1001,10 @@ BEGIN
serout_clock_delay : delay_line
generic map (count=>2)
port map (clk=>clk, sync_reset=>serout_sync_reset,data_in=>serout_enable, enable=>enable_179, reset_n=>reset_n, data_out=>serout_enable_delayed);
serin_clock_delay : delay_line
generic map (count=>5)
port map (clk=>clk, sync_reset=>serout_sync_reset,data_in=>serin_enable, enable=>enable_179, reset_n=>reset_n, data_out=>serin_enable_delayed);
process(serout_enable_delayed, skctl_reg, serout_active_reg, serout_clock_last_reg,serout_clock_reg, serout_holding_load, serout_holding_reg, serout_holding_full_reg, serout_shift_reg, serout_bitcount_reg, serial_out_reg, twotone_reg, audf0_pulse, audf1_pulse, serial_reset)
@@ -1089,7 +1094,7 @@ BEGIN
sio_in_next <= sio_in1_reg and sio_in2_reg and sio_in3_reg;
waiting_for_start_bit <= '1' when serin_bitcount_reg = X"9" else '0';
process(serin_enable,serin_clock_last_reg,serin_clock_reg, sio_in_reg, serin_reg,serin_shift_reg, serin_bitcount_reg, serial_ip_overrun_reg, serial_ip_framing_reg, skrest_write, irqst_reg, skctl_reg, waiting_for_start_bit, serial_reset)
process(serin_enable_delayed,serin_clock_last_reg,serin_clock_reg, sio_in_reg, serin_reg,serin_shift_reg, serin_bitcount_reg, serial_ip_overrun_reg, serial_ip_framing_reg, skrest_write, irqst_reg, skctl_reg, waiting_for_start_bit, serial_reset)
begin
serin_clock_next <= serin_clock_reg;
serin_clock_last_next <= serin_clock_reg;
@@ -1105,7 +1110,7 @@ BEGIN
async_serial_reset <= '0';
-- generate clock from enable signals
if (serin_enable = '1') then
if (serin_enable_delayed = '1') then
serin_clock_next <= not(serin_clock_reg);
end if;

View File

@@ -112,10 +112,10 @@ always @(posedge clk) begin
'h06: btn_two_players <= key_pressed; // F2
'h04: btn_three_players <= key_pressed; // F3
'h0C: btn_four_players <= key_pressed; // F4
'h12: btn_fireD <= key_pressed; // l-shift
'h14: btn_fireC <= key_pressed; // ctrl
'h14: btn_fireA <= key_pressed; // ctrl
'h11: btn_fireB <= key_pressed; // alt
'h29: btn_fireA <= key_pressed; // Space
'h29: btn_fireC <= key_pressed; // Space
'h12: btn_fireD <= key_pressed; // l-shift
'h1A: btn_fireE <= key_pressed; // Z
'h22: btn_fireF <= key_pressed; // X
'h21: btn_fireG <= key_pressed; // C