From fc4d8c32a71c2c722b8d40c24ce2071875a0d423 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Fri, 6 Aug 2021 16:39:25 +0200 Subject: [PATCH] Galaga: add changes by blackwine --- .../Galaga_MiST/Galaga_MiST.qsf | 14 +- ...ga (Midway set 1 with fast shoot hack).mra | 81 ++ .../meta/Galaga (Midway, Set 1).mra | 85 ++ .../meta/Galaga (Namco rev. B).mra | 88 ++ .../Galaga_MiST/meta/Galaga (Namco).mra | 83 ++ .../Galaga_MiST/meta/Gatsbee.mra | 87 ++ .../Galaga Hardware/Galaga_MiST/rtl/dpram.vhd | 75 ++ .../Galaga_MiST/rtl/galaga.vhd | 1072 ++++++++++------- .../Galaga_MiST/rtl/galaga_mist.sv | 231 ++-- .../Galaga_MiST/rtl/gen_video.vhd | 139 +-- .../Galaga Hardware/Galaga_MiST/rtl/mb88.vhd | 297 ++--- .../Galaga_MiST/rtl/roms/bg_graphx.vhd | 278 ----- .../Galaga_MiST/rtl/roms/cs54xx_prog.vhd | 86 -- .../Galaga_MiST/rtl/roms/galaga_cpu1.vhd | 1046 ---------------- .../Galaga_MiST/rtl/roms/galaga_cpu2.vhd | 278 ----- .../Galaga_MiST/rtl/roms/galaga_cpu3.vhd | 278 ----- .../Galaga_MiST/rtl/roms/sp_graphx.vhd | 534 -------- .../Galaga_MiST/rtl/sound_lpf.vhd | 120 ++ .../Galaga_MiST/rtl/sound_machine.vhd | 65 +- 19 files changed, 1646 insertions(+), 3291 deletions(-) create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway set 1 with fast shoot hack).mra create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway, Set 1).mra create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco rev. B).mra create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco).mra create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Gatsbee.mra create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/bg_graphx.vhd delete mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/cs54xx_prog.vhd delete mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu1.vhd delete mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu2.vhd delete mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu3.vhd delete mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/sp_graphx.vhd create mode 100644 Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_lpf.vhd diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/Galaga_MiST.qsf b/Arcade_MiST/Galaga Hardware/Galaga_MiST/Galaga_MiST.qsf index 15c896f9..77edfea1 100644 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/Galaga_MiST.qsf +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/Galaga_MiST.qsf @@ -41,7 +41,7 @@ # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_CREATION_TIME_DATE "23:59:05 MARCH 16, 2017" -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 +set_global_assignment -name LAST_QUARTUS_VERSION "13.1 SP4.26" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" @@ -201,23 +201,19 @@ set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON set_global_assignment -name SYSTEMVERILOG_FILE rtl/galaga_mist.sv set_global_assignment -name VHDL_FILE rtl/galaga.vhd set_global_assignment -name VHDL_FILE rtl/gen_video.vhd +set_global_assignment -name VHDL_FILE rtl/dpram.vhd set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd set_global_assignment -name VHDL_FILE rtl/galaga_video.vhd set_global_assignment -name VHDL_FILE rtl/stars_machine.vhd set_global_assignment -name VHDL_FILE rtl/stars.vhd set_global_assignment -name VHDL_FILE rtl/sound_machine.vhd set_global_assignment -name VHDL_FILE rtl/mb88.vhd -set_global_assignment -name VHDL_FILE rtl/roms/sp_palette.vhd -set_global_assignment -name VHDL_FILE rtl/roms/sp_graphx.vhd +set_global_assignment -name VHDL_FILE rtl/sound_lpf.vhd set_global_assignment -name VHDL_FILE rtl/roms/sound_seq.vhd set_global_assignment -name VHDL_FILE rtl/roms/sound_samples.vhd -set_global_assignment -name VHDL_FILE rtl/roms/rgb.vhd -set_global_assignment -name VHDL_FILE rtl/roms/galaga_cpu3.vhd -set_global_assignment -name VHDL_FILE rtl/roms/galaga_cpu2.vhd -set_global_assignment -name VHDL_FILE rtl/roms/galaga_cpu1.vhd set_global_assignment -name VHDL_FILE rtl/roms/bg_palette.vhd -set_global_assignment -name VHDL_FILE rtl/roms/bg_graphx.vhd -set_global_assignment -name VHDL_FILE rtl/roms/cs54xx_prog.vhd +set_global_assignment -name VHDL_FILE rtl/roms/sp_palette.vhd +set_global_assignment -name VHDL_FILE rtl/roms/rgb.vhd set_global_assignment -name VERILOG_FILE rtl/pll.v set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway set 1 with fast shoot hack).mra b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway set 1 with fast shoot hack).mra new file mode 100644 index 00000000..953b4946 --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway set 1 with fast shoot hack).mra @@ -0,0 +1,81 @@ + + Galaga (Midway set 1 with fast shoot) + + no + no + Fast Shoot, Set 1 + Galaga + + Galaxian + 1981 + Namco + Midway + Shooter - Gallery + + galagamf + galaga + 0218 + galaga + + + 15kHz + vertical (cw) + yes + + 2 (alternating) + 2-way horizontal + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 2A 88 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 8A 20 2D 00 18 00 + 00 00 83 ED 06 00 24 00 + + + + + + 20210730102726 + diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway, Set 1).mra b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway, Set 1).mra new file mode 100644 index 00000000..983b8382 --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Midway, Set 1).mra @@ -0,0 +1,85 @@ + + Galaga (Midway set 1) + + no + no + Midway, Set 1 + + + Galaxian + 1981 + Namco + Midway + Shooter - Gallery + + galagamw + galaga + 0229 + galaga + + + 15kHz + vertical (cw) + yes + + 2 (alternating) + 2-way horizontal + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 2A 88 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 8A 20 2D 00 18 00 + 00 00 83 ED 06 00 24 00 + + + + + + 20210730104618 + diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco rev. B).mra b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco rev. B).mra new file mode 100644 index 00000000..bcc65d18 --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco rev. B).mra @@ -0,0 +1,88 @@ + + Galaga (Namco rev. B) + + no + no + Namco + Galaga + + Galaxian + 1981 + Namco + Shooter - Gallery + + galaga + galaga + 0229 + galaga + + + 15kHz + vertical (cw) + yes + + 2 (alternating) + 2-way horizontal + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 2A 88 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 8A 20 2D 00 18 00 + 00 00 83 ED 06 00 24 00 + + + + + + 20210730103523 + diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco).mra b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco).mra new file mode 100644 index 00000000..b7222101 --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Galaga (Namco).mra @@ -0,0 +1,83 @@ + + Galaga (Namco) + + no + no + Namco + Galaga + + Galaxian + 1981 + Namco + Shooter - Gallery + + galagao + galaga + 0229 + galaga + + + 15kHz + vertical (cw) + yes + + 2 (alternating) + 2-way horizontal + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11 2A 88 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 8A 20 2D 00 18 00 + 00 00 83 ED 06 00 24 00 + + + + + + 20210730103520 + diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Gatsbee.mra b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Gatsbee.mra new file mode 100644 index 00000000..122339e7 --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/meta/Gatsbee.mra @@ -0,0 +1,87 @@ + + Gatsbee + + 1984 + yes + Galaga + Galaxian + hack (Uchida) + Shooter - Gallery + + gatsbee + galaga + 0220 + galaga + + + 15kHz + vertical (cw) + yes + + 2 (alternating) + 4-way horizontal + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 00 32 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 8A 20 2D 00 0E 00 + 00 00 83 ED 06 00 24 00 + + + + + + 20210730104830 + diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/dpram.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/dpram.vhd new file mode 100644 index 00000000..fec08f5f --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/dpram.vhd @@ -0,0 +1,75 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +entity dpram is + generic ( + addr_width_g : integer := 8; + data_width_g : integer := 8 + ); + PORT + ( + address_a : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); + clock_a : IN STD_LOGIC := '1'; + clock_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) := (others => '0'); + enable_a : IN STD_LOGIC := '1'; + enable_b : IN STD_LOGIC := '1'; + wren_a : IN STD_LOGIC := '0'; + wren_b : IN STD_LOGIC := '0'; + q_a : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) + ); +END dpram; + + +ARCHITECTURE SYN OF dpram IS +BEGIN + altsyncram_component : altsyncram + GENERIC MAP ( + address_reg_b => "CLOCK1", + clock_enable_input_a => "NORMAL", + clock_enable_input_b => "NORMAL", + clock_enable_output_a => "BYPASS", + clock_enable_output_b => "BYPASS", + indata_reg_b => "CLOCK1", + intended_device_family => "Cyclone V", + lpm_type => "altsyncram", + numwords_a => 2**addr_width_g, + numwords_b => 2**addr_width_g, + operation_mode => "BIDIR_DUAL_PORT", + outdata_aclr_a => "NONE", + outdata_aclr_b => "NONE", + outdata_reg_a => "UNREGISTERED", + outdata_reg_b => "UNREGISTERED", + power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", + read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", + widthad_a => addr_width_g, + widthad_b => addr_width_g, + width_a => data_width_g, + width_b => data_width_g, + width_byteena_a => 1, + width_byteena_b => 1, + wrcontrol_wraddress_reg_b => "CLOCK1" + ) + PORT MAP ( + address_a => address_a, + address_b => address_b, + clock0 => clock_a, + clock1 => clock_b, + clocken0 => enable_a, + clocken1 => enable_b, + data_a => data_a, + data_b => data_b, + wren_a => wren_a, + wren_b => wren_b, + q_a => q_a, + q_b => q_b + ); + +END SYN; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga.vhd index a848b22e..5009d175 100644 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga.vhd +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga.vhd @@ -3,7 +3,7 @@ -- http://darfpga.blogspot.fr --------------------------------------------------------------------------------- -- gen_ram.vhd & io_ps2_keyboard --------------------------------- +-------------------------------- -- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com) -- http://www.syntiac.com/fpga64.html --------------------------------------------------------------------------------- @@ -20,7 +20,7 @@ -- Galaga releases -- -- Release 0.3 - 06/05/2018 - Dar --- add mb88 explosion sound ship +-- add mb88 explosion sound ship -- -- Release 0.2 - 06/11/2017 - Dar -- fixes twice bullets on single shot => add edge detection en fire @@ -35,13 +35,13 @@ -- TV 15KHz mode only (atm) -- Coctail mode ok -- Sound ok --- Starfield from MAME information +-- Starfield from MAME information -- Use with MAME roms from galagamw.zip -- -- Use make_galaga_proms.bat to build vhd file from binaries --- galaga_cpu1.vhd : 3200a.bin, 3300b.bin, 3400c.bin,3500d.bin, +-- galaga_cpu1.vhd : 3200a.bin, 3300b.bin, 3400c.bin,3500d.bin, -- galaga_cpu2.vhd : 3600e.bin -- galaga_cpu3.vhd : 3700g.bin -- bg_graphx.vhd : 2600j.bin @@ -56,18 +56,18 @@ -- -- 3xZ80 CPU accessing each own program rom and shared ram/devices -- --- One char tile map 32x28 (called background/bg although being front of other layers) +-- One char tile map 32x28 (called background/bg although being front of other layers) -- 3 colors/64sets among 16 colors --- 1Ko ram, 4Ko rom graphics, 4pixels of 2bits/byte +-- 1Ko ram, 4Ko rom graphics, 4pixels of 2bits/byte -- full emulation in vhdl -- --- 64 sprites with priorities, flip H/V, 2x size H/V, +-- 64 sprites with priorities, flip H/V, 2x size H/V, -- 3 colors/64sets among 16 colors (different of char colors). -- 8Ko rom graphics, 4pixels of 2bits/byte -- full emulation in vhdl (improved capabilities : more sprites/scanline) -- --- Namco 05XX Starfield --- 4 sets, 63 stars/set, 2 set displayed at one time for blinking +-- Namco 05XX Starfield +-- 4 sets, 63 stars/set, 2 set displayed at one time for blinking -- 6bits colors: 2red/2green/2blue -- full emulation in vhdl (from MAME information) -- @@ -75,13 +75,13 @@ -- 8bits 3red/3green/2blue -- full emulation in vhdl -- --- Namco 06XX for 51/54XX control +-- Namco 06XX for 51/54XX control -- simplified emulation in vhdl -- --- Namco 51XX for coin/credit management +-- Namco 51XX for coin/credit management -- simplified emulation in vhdl : 1coin/1credit, 1 or 2 players start -- --- Namco 54XX for sound effects +-- Namco 54XX for sound effects -- m88 ok -- -- Namco sound waveform and frequency synthetizer @@ -91,10 +91,10 @@ -- full emulation in vhdl from what I think they should do. -- -- Working ram : 3x1Kx8bits shared --- Sprites ram : 1 scan line delay flip/flop 512x4bits +-- Sprites ram : 1 scan line delay flip/flop 512x4bits -- Sound registers ram : 2x16x4bits -- Sound sequencer rom : 256x4bits (3 sequential 4 bits adders) --- Sound wavetable rom : 256x4bits 8 waveform of 32 samples of 4bits/level +-- Sound wavetable rom : 256x4bits 8 waveform of 32 samples of 4bits/level --------------------------------------------------------------------------------- library ieee; @@ -104,31 +104,58 @@ use ieee.numeric_std.all; entity galaga is port( - clock_18 : in std_logic; - reset : in std_logic; - video_r : out std_logic_vector(2 downto 0); - video_g : out std_logic_vector(2 downto 0); - video_b : out std_logic_vector(1 downto 0); - video_clk : out std_logic; - video_csync : out std_logic; - video_hb : out std_logic; - video_vb : out std_logic; - video_hs : out std_logic; - video_vs : out std_logic; - audio : out std_logic_vector(9 downto 0); + clock_18 : in std_logic; + reset : in std_logic; + video_r : out std_logic_vector(2 downto 0); + video_g : out std_logic_vector(2 downto 0); + video_b : out std_logic_vector(1 downto 0); + video_csync : out std_logic; + video_ce : out std_logic; + video_hs : out std_logic; + video_vs : out std_logic; - b_test : in std_logic; - b_svce : in std_logic; - coin : in std_logic; - start1 : in std_logic; - left1 : in std_logic; - right1 : in std_logic; - fire1 : in std_logic; - start2 : in std_logic; - left2 : in std_logic; - right2 : in std_logic; - fire2 : in std_logic - ); + blank_h : out std_logic; + blank_v : out std_logic; + + audio : out std_logic_vector(15 downto 0); + + service : in std_logic; + self_test : in std_logic; + + coin1 : in std_logic; + start1 : in std_logic; + up1 : in std_logic; + down1 : in std_logic; + left1 : in std_logic; + right1 : in std_logic; + fire1 : in std_logic; + + coin2 : in std_logic; + start2 : in std_logic; + up2 : in std_logic; + down2 : in std_logic; + left2 : in std_logic; + right2 : in std_logic; + fire2 : in std_logic; + + dip_switch_a : in std_logic_vector (7 downto 0); + dip_switch_b : in std_logic_vector (7 downto 0); + + dn_addr : in std_logic_vector(15 downto 0); + dn_data : in std_logic_vector(7 downto 0); + dn_wr : in std_logic; + + flip_screen : in std_logic := '0'; + h_offset : in signed(3 downto 0); + v_offset : in signed(3 downto 0); + + pause : in std_logic; + + hs_address : in std_logic_vector(15 downto 0); + hs_data_out : out std_logic_vector(7 downto 0); + hs_data_in : in std_logic_vector(7 downto 0); + hs_write : in std_logic +); end galaga; architecture struct of galaga is @@ -138,6 +165,7 @@ architecture struct of galaga is signal hcnt : std_logic_vector(8 downto 0); signal vcnt : std_logic_vector(8 downto 0); + signal vblank : std_logic; signal ena_vidgen : std_logic; signal ena_snd_machine : std_logic; signal cpu1_ena : std_logic; @@ -160,7 +188,7 @@ architecture struct of galaga is signal cpu2_mreq_n : std_logic; signal cpu2_irq_n : std_logic; signal cpu2_m1_n : std_logic; - + signal cpu3_addr : std_logic_vector(15 downto 0); signal cpu3_di : std_logic_vector( 7 downto 0); signal cpu3_do : std_logic_vector( 7 downto 0); @@ -175,7 +203,7 @@ architecture struct of galaga is signal cpu1_rom_do : std_logic_vector( 7 downto 0); signal cpu2_rom_do : std_logic_vector( 7 downto 0); signal cpu3_rom_do : std_logic_vector( 7 downto 0); - + signal bgram_do : std_logic_vector( 7 downto 0); signal bgram_we : std_logic; signal wram1_do : std_logic_vector( 7 downto 0); @@ -193,67 +221,75 @@ architecture struct of galaga is signal mux_cpu_mreq : std_logic; signal latch_we : std_logic; signal io_we : std_logic; + signal bgrom_we : std_logic; + signal bg_bank : std_logic; - signal cs06XX_control : std_logic_vector( 7 downto 0); - signal cs06XX_do : std_logic_vector( 7 downto 0); - signal cs06XX_di : std_logic_vector( 7 downto 0); + signal cs06XX_control : std_logic_vector( 7 downto 0); + signal cs06XX_do : std_logic_vector( 7 downto 0); + signal cs06XX_di : std_logic_vector( 7 downto 0); + signal cs06XX_nmi_state_next : std_logic; + signal cs06XX_nmi_stretch : std_logic; + signal cs06XX_nmi_cnt : std_logic_vector( 8 downto 0); + + signal cs51xx_rom_addr : std_logic_vector(10 downto 0); + signal cs51xx_rom_do : std_logic_vector( 7 downto 0); + signal cs51xx_irq_n : std_logic := '1'; + signal cs51xx_ol_port_out: std_logic_vector( 3 downto 0); + signal cs51xx_oh_port_out: std_logic_vector( 3 downto 0); + signal cs51xx_k_port_in : std_logic_vector( 3 downto 0); + signal cs51XX_do : std_logic_vector( 7 downto 0); + + signal cs5Xxx_ena : std_logic; + signal cs5Xxx_rw : std_logic; + + signal change_next : std_logic; + + signal cs54XX_do : std_logic_vector( 7 downto 0); - signal cs51XX_data_cnt : std_logic_vector( 1 downto 0) := "00"; - signal cs51XX_coin_mode_cnt : std_logic_vector( 2 downto 0) := "000"; - signal cs51XX_switch_mode : std_logic := '0'; - signal cs51XX_credit_mode : std_logic := '1'; - signal cs51XX_do : std_logic_vector( 7 downto 0); - signal cs51XX_switch_mode_do : std_logic_vector( 7 downto 0); - signal cs51XX_non_switch_mode_do : std_logic_vector( 7 downto 0); - signal change_next : std_logic; - signal credit_bcd_0 : std_logic_vector( 3 downto 0); - signal credit_bcd_1 : std_logic_vector( 3 downto 0); - --- signal cs54xx_cmd : std_logic_vector( 3 downto 0); - signal cs54xx_do : std_logic_vector( 7 downto 0); - signal cs54xx_ena : std_logic; - signal cs54xx_ena_div : std_logic_vector(2 downto 0) := "000"; - signal cs5Xxx_rw : std_logic; - - signal cs54xx_rom_addr : std_logic_vector(10 downto 0); - signal cs54xx_rom_do : std_logic_vector( 7 downto 0); - - signal cs54xx_irq_n : std_logic := '1'; - signal cs54xx_irq_cnt : std_logic_vector( 3 downto 0); - signal cs54xx_k_port_in : std_logic_vector( 3 downto 0); - signal cs54xx_r0_port_in : std_logic_vector( 3 downto 0); - signal cs54xx_audio_1 : std_logic_vector( 3 downto 0); - signal cs54xx_audio_2 : std_logic_vector( 3 downto 0); - signal cs54xx_audio_3 : std_logic_vector( 3 downto 0); + signal cs54xx_ena_div : std_logic_vector(3 downto 0) := "0000"; + + signal cs54xx_rom_addr : std_logic_vector(10 downto 0); + signal cs54xx_rom_do : std_logic_vector( 7 downto 0); + + signal cs54xx_irq_n : std_logic := '1'; + signal cs54xx_irq_cnt : std_logic_vector( 3 downto 0); + signal cs54xx_k_port_in : std_logic_vector( 3 downto 0); + signal cs54xx_r0_port_in : std_logic_vector( 3 downto 0); + signal cs54xx_audio_1 : std_logic_vector( 3 downto 0); + signal cs54xx_audio_2 : std_logic_vector( 3 downto 0); + signal cs54xx_audio_3 : std_logic_vector( 3 downto 0); + + signal cs54xx_audio_1_lpf: std_logic_vector(15 downto 0); + signal cs54xx_audio_2_lpf: std_logic_vector(15 downto 0); + signal cs54xx_audio_3_lpf: std_logic_vector(15 downto 0); signal cs05XX_ctrl : std_logic_vector( 5 downto 0); - - signal dip_switch_a : std_logic_vector (7 downto 0); - signal dip_switch_b : std_logic_vector (7 downto 0); + signal dip_switch_do : std_logic_vector (1 downto 0); - + signal bgtile_num : std_logic_vector( 7 downto 0); signal bgtile_num_r : std_logic_vector( 7 downto 0); signal bgtile_color : std_logic_vector( 7 downto 0); signal bgtile_color_r : std_logic_vector( 7 downto 0); - signal bggraphx_addr : std_logic_vector(11 downto 0); + signal bggraphx_addr : std_logic_vector(12 downto 0); signal bggraphx_do : std_logic_vector( 7 downto 0); signal bgpalette_addr : std_logic_vector( 7 downto 0); - signal bgpalette_do : std_logic_vector( 7 downto 0); + signal bgpalette_do : std_logic_vector( 7 downto 0); signal bgbits : std_logic_vector( 3 downto 0); signal rgb_palette_addr : std_logic_vector( 4 downto 0); - signal rgb_palette_do : std_logic_vector( 7 downto 0); - + signal rgb_palette_do : std_logic_vector( 7 downto 0); + signal sprite_num : std_logic_vector(5 downto 0); - signal sprite_state : std_logic_vector(2 downto 0); + signal sprite_state : std_logic_vector(2 downto 0); signal sprite_line : std_logic_vector(7 downto 0); signal sptile_num : std_logic_vector(7 downto 0); signal sptile_color : std_logic_vector(7 downto 0); signal spdata : std_logic_vector(3 downto 0); signal spvcnt : std_logic_vector(4 downto 0); signal sphcnt : std_logic_vector(4 downto 0); + signal sphcnt_s : std_logic_vector(4 downto 0); signal spram_wr_addr : std_logic_vector(8 downto 0); signal spram_rd_addr : std_logic_vector(8 downto 0); signal spram_we : std_logic; @@ -261,7 +297,7 @@ architecture struct of galaga is signal spgraphx_addr : std_logic_vector(12 downto 0); signal spgraphx_do : std_logic_vector(7 downto 0); signal sppalette_addr : std_logic_vector(7 downto 0); - signal sppalette_do : std_logic_vector(7 downto 0); + signal sppalette_do : std_logic_vector(7 downto 0); signal spbits_wr : std_logic_vector(3 downto 0); signal spbits_rd : std_logic_vector(3 downto 0); signal spflip_V ,spflip_H : std_logic; @@ -269,8 +305,9 @@ architecture struct of galaga is signal spflip_3V,spflip_3H : std_logic_vector(2 downto 0); signal spflips : std_logic_vector(12 downto 0); - signal flip_h : std_logic; - + signal flip_h : std_logic; + signal flip_hs : std_logic; + signal spram1_addr : std_logic_vector(8 downto 0); signal spram1_di : std_logic_vector(3 downto 0); signal spram1_do : std_logic_vector(3 downto 0); @@ -279,10 +316,10 @@ architecture struct of galaga is signal spram2_di : std_logic_vector(3 downto 0); signal spram2_do : std_logic_vector(3 downto 0); signal spram2_we : std_logic; - + signal stars_hcnt : std_logic_vector( 8 downto 0); signal stars_vcnt : std_logic_vector( 8 downto 0); - signal stars_offset : std_logic_vector( 7 downto 0); + signal stars_offset : std_logic_vector( 7 downto 0); signal stars_set0_addr : std_logic_vector( 6 downto 0); signal stars_set0_data : std_logic_vector(15 downto 0); signal star_color_set0 : std_logic_vector( 5 downto 0); @@ -296,7 +333,7 @@ architecture struct of galaga is signal stars_set3_data : std_logic_vector(15 downto 0); signal star_color_set3 : std_logic_vector( 5 downto 0); signal star_color : std_logic_vector( 5 downto 0); - + signal irq1_clr_n : std_logic; signal irq2_clr_n : std_logic; signal nmion_n : std_logic; @@ -309,105 +346,137 @@ architecture struct of galaga is signal coin_r : std_logic; signal start1_r : std_logic; signal start2_r : std_logic; - + signal fire1_r : std_logic; signal fire2_r : std_logic; signal fire1_mem : std_logic; signal fire2_mem : std_logic; - + signal rom1_cs : std_logic; + signal rom2_cs : std_logic; + signal rom3_cs : std_logic; + signal roms_cs : std_logic; + signal romb_cs : std_logic; + signal rom51_cs : std_logic; + signal rom54_cs : std_logic; + + signal ce : std_logic; + + signal hs_cs_bgram : std_logic; + signal hs_cs_spram : std_logic; + signal hs_data_out_bgram : std_logic_vector(7 downto 0); + signal hs_data_out_spram : std_logic_vector(7 downto 0); begin clock_18n <= not clock_18; reset_n <= not reset; -dip_switch_a <= "11110111"; -- cab:7 / na:6 / test:5 / freeze:4 / demo sound:3 / na:2 / difficulty:1-0 -dip_switch_b <= "10010111"; --lives:7-6/ bonus:5-3 / coinage:2-0 -dip_switch_do <= dip_switch_a(to_integer(unsigned(mux_addr(3 downto 0)))) & - dip_switch_b(to_integer(unsigned(mux_addr(3 downto 0)))); +blank_v <= vblank; -audio <= ("00" & cs54xx_audio_1 & "0000" ) + ("00" & cs54xx_audio_2 & "0000" )+ ('0'&snd_audio(9 downto 1)); ---audio <= ("00" & cs54xx_audio_1 & "00000" ) + ('0'&snd_audio); ---audio <= ('0'&snd_audio); +dip_switch_do <= dip_switch_a(to_integer(unsigned(mux_addr(3 downto 0)))) & + dip_switch_b(to_integer(unsigned(mux_addr(3 downto 0)))); + +-- simplified audio signal mixing +audio <= ("00" & cs54xx_audio_1_lpf(15 downto 2)) + + ("00" & cs54xx_audio_2_lpf(15 downto 2)) + + ("00" & cs54xx_audio_3_lpf(15 downto 2)) + + ("0" & snd_audio & "00000"); -- make access slots from 18MHz -- 6MHz for pixel clock and sound machine -- 3MHz for cpu, background and sprite machine -- slots | 0 | 1 | 2 | 3 | 4 | 5 | --- wram access | cpu1 | cpu2 | cpu3 | bgram | spram | n.u. | --- sound access | cpu1 | cpu2 | cpu3 | sndram | n.u. | sndram| +-- wram access | cpu1 | cpu2 | cpu3 | bgram | spram | n.u. | +-- sound access | cpu1 | cpu2 | cpu3 | sndram | n.u. | sndram| -- enable signals are one slot early process (clock_18) begin - if rising_edge(clock_18) then - ena_vidgen <= '0'; - ena_snd_machine <= '0'; - cpu1_ena <= '0'; - cpu2_ena <= '0'; - cpu3_ena <= '0'; - cs54xx_ena <= '0'; - - if slot = "101" then - slot <= (others => '0'); - cs54xx_ena_div <= cs54xx_ena_div +'1'; - else - slot <= std_logic_vector(unsigned(slot) + 1); - end if; - - if slot = "101" or slot = "010" then ena_vidgen <= '1'; end if; - if slot = "010" or slot = "100" then ena_snd_machine <= '1'; end if; - if slot = "101" then cpu1_ena <= '1'; end if; - if slot = "000" then cpu2_ena <= '1'; end if; - if slot = "001" then cpu3_ena <= '1'; end if; - - if slot = "000" and cs54xx_ena_div = "000" then cs54xx_ena <= '1'; end if; - - end if; + if rising_edge(clock_18) then + ena_vidgen <= '0'; + ena_snd_machine <= '0'; + cpu1_ena <= '0'; + cpu2_ena <= '0'; + cpu3_ena <= '0'; + cs5Xxx_ena <= '0'; + cs54xx_ena <= '0'; + + if slot = "101" then + slot <= (others => '0'); + cs54xx_ena_div <= cs54xx_ena_div +'1'; + else + slot <= std_logic_vector(unsigned(slot) + 1); + end if; + + if slot = "101" or slot = "010" then ena_vidgen <= '1'; end if; + if slot = "010" or slot = "100" then ena_snd_machine <= '1'; end if; + if slot = "101" then cpu1_ena <= '1'; end if; + if slot = "000" then cpu2_ena <= '1'; end if; + if slot = "001" then cpu3_ena <= '1'; end if; + + if slot = "000" then + cs5Xxx_ena <= '1'; + if cs54xx_ena_div = "1100" then + cs54xx_ena_div <= "0000"; + cs54xx_ena <= '1'; + end if; + end if; + end if; end process; +ce <= '1' when slot = "011" or slot = "000" else '0'; +video_ce <= ce; + --- SPRITES MACHINE --- ----------------------- - + -- 0x8B80 - 0x8BFF : 64 sprites tile num, tile color -- 0x9380 - 0x93FF : 64 sprites pos v, pos h lsb -- 0x9B80 - 0x9BFF : 64 sprites 2xH, 2xV, flip H, flip V sprite_addr <= X"03"&'1' & sprite_num & sprite_state(0); -sprite_line <= wram2_do + vcnt(7 downto 0); +sprite_line <= wram2_do + vcnt(7 downto 0) when flip_screen = '0' + else wram2_do - vcnt(7 downto 0) - 3; process (clock_18, slot) begin - if rising_edge(clock_18) then + if rising_edge(clock_18) then if hcnt = std_logic_vector(to_unsigned(191,9)) then sprite_num <= "000000"; sprite_state <= "000"; spram_rd_addr<= "111101111"; end if; - + if slot = "100" and sprite_state = "000" then sptile_num <= wram1_do; spdata <= wram3_do(3 downto 0); spvcnt <= sprite_line(4 downto 0); - if sprite_line(7 downto 4) = "1111" or -- size V x 1 + if sprite_line(7 downto 4) = "1111" or -- size V x 1 (sprite_line(7 downto 5) = "111" and wram3_do(3)='1' )then -- size V x 2 -- fixed Dar : 04/11/2017 --- (sprite_line(7 downto 5) = "111" and wram3_do(2)='1' )then -- size V x 2 sprite_state <= "001"; else if sprite_num = "111111" then sprite_state <= "111"; else - sprite_num <= sprite_num + "000001"; + sprite_num <= sprite_num + "000001"; sprite_state <= "000"; - end if; - end if; + end if; + end if; end if; - + if slot = "100" and sprite_state = "001" then sptile_color <= wram1_do; - spram_wr_addr <= wram3_do(0) & wram2_do; + if flip_screen = '0' then + spram_wr_addr <= wram3_do(0) & wram2_do; -- pos h + else + if spdata(2) = '0' then + spram_wr_addr <= 349 - (wram3_do(0) & wram2_do); -- pos h inverted for size H x 1 + else + spram_wr_addr <= 333 - (wram3_do(0) & wram2_do); -- pos h inverted for size H x 2 + end if; + end if; sphcnt <= "00000"; sprite_state <= "010"; end if; @@ -415,24 +484,22 @@ begin if sprite_state = "010" then sphcnt <= sphcnt + "00001"; sprite_state <= "011"; - end if; + end if; if sprite_state = "011" then sphcnt <= sphcnt + "00001"; spram_wr_addr <= spram_wr_addr + "000000001"; - if (sphcnt = "01111" and spdata(2) = '0' ) or -- size H x 1 -- fixed Dar : 04/11/2017 - (sphcnt = "11111" and spdata(2) = '1' ) then -- size H x 2 -- fixed Dar : 04/11/2017 --- if (sphcnt = "01111" and spdata(3) = '0' ) or -- size H x 1 --- (sphcnt = "11111" and spdata(3) = '1' ) then -- size H x 2 + if (sphcnt = "01111" and spdata(2) = '0' ) or -- size H x 1 -- fixed Dar : 04/11/2017 + (sphcnt = "11111" and spdata(2) = '1' ) then -- size H x 2 -- fixed Dar : 04/11/2017 if sprite_num = "111111" then sprite_state <= "111"; else - sprite_num <= sprite_num + "000001"; + sprite_num <= sprite_num + "000001"; sprite_state <= "000"; - end if; + end if; end if; - end if; - + end if; + if slot = "000" or slot = "011" then if vcnt(0) = '1' then spbits_rd <= spram2_do; @@ -440,12 +507,12 @@ begin spbits_rd <= spram1_do; end if; end if; - + spram_clr <= '0'; if slot = "001" or slot = "100" then spram_clr <= '1'; end if; - + if slot = "010" or slot = "101" then spram_rd_addr <= spram_rd_addr + "000000001"; end if; @@ -460,42 +527,46 @@ spram2_addr <= spram_wr_addr when vcnt(0) = '0' else spram_rd_addr; spram1_di <= spbits_wr when vcnt(0) = '1' else "1111"; spram2_di <= spbits_wr when vcnt(0) = '0' else "1111"; - -spram1_we <= spram_we when vcnt(0) = '1' else spram_clr; -spram2_we <= spram_we when vcnt(0) = '0' else spram_clr; -spflip_H <= spdata(0) xor flip_h; spflip_2H <= spflip_H & spflip_H; +spram1_we <= spram_we when vcnt(0) = '1' else spram_clr; +spram2_we <= spram_we when vcnt(0) = '0' else spram_clr; + +flip_hs <= flip_h xor flip_screen; +spflip_H <= spdata(0) xor flip_hs; spflip_2H <= spflip_H & spflip_H; spflip_V <= spdata(1); spflip_2V <= spflip_V & spflip_V; with spdata(3 downto 2) select -spflips <= "0000000" & spflip_V & spflip_2H & spflip_V & spflip_2V when "00", - "000000" & spflip_H & spflip_V & spflip_2H & spflip_V & spflip_2V when "01", - "00000" & spflip_V & '0' & spflip_V & spflip_2H & spflip_V & spflip_2V when "10", - "00000" & spflip_V & spflip_H & spflip_V & spflip_2H & spflip_V & spflip_2V when others; + spflips <= "0000000" & spflip_V & spflip_2H & spflip_V & spflip_2V when "00", + "000000" & spflip_H & spflip_V & spflip_2H & spflip_V & spflip_2V when "01", + "00000" & spflip_V & '0' & spflip_V & spflip_2H & spflip_V & spflip_2V when "10", + "00000" & spflip_V & spflip_H & spflip_V & spflip_2H & spflip_V & spflip_2V when others; + +-- correct sprite h counter in not flipped screen mode +sphcnt_s <= sphcnt + not(flip_screen); with spdata(3 downto 2) select -spgraphx_addr <= (sptile_num(6 downto 0) & spvcnt(3) & sphcnt(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when "00", - (sptile_num(6 downto 1) & sphcnt(4) & spvcnt(3) & sphcnt(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when "01", - (sptile_num(6 downto 2) & spvcnt(4) & sptile_num(0) & spvcnt(3) & sphcnt(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when "10", - (sptile_num(6 downto 2) & spvcnt(4) & sphcnt(4) & spvcnt(3) & sphcnt(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when others; + spgraphx_addr <= (sptile_num(6 downto 0) & spvcnt(3) & sphcnt_s(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when "00", + (sptile_num(6 downto 1) & sphcnt_s(4) & spvcnt(3) & sphcnt_s(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when "01", + (sptile_num(6 downto 2) & spvcnt(4) & sptile_num(0) & spvcnt(3) & sphcnt_s(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when "10", + (sptile_num(6 downto 2) & spvcnt(4) & sphcnt_s(4) & spvcnt(3) & sphcnt_s(3 downto 2) & spvcnt(2 downto 0) ) xor spflips when others; sppalette_addr <= sptile_color(5 downto 0) & - spgraphx_do(to_integer(unsigned('1' & ((not sphcnt(1 downto 0)) xor spflip_2H )))) & - spgraphx_do(to_integer(unsigned('0' & ((not sphcnt(1 downto 0)) xor spflip_2H )))); + spgraphx_do(to_integer(unsigned('1' & ((not sphcnt_s(1 downto 0)) xor spflip_2H )))) & + spgraphx_do(to_integer(unsigned('0' & ((not sphcnt_s(1 downto 0)) xor spflip_2H )))); spbits_wr <= sppalette_do(3 downto 0); --- BACKGROUND TILES MACHINE --- -----------------------_-------- - + -- 0x8000-0x83FF : tile num -- 0x8400-0x87FF : tile color -bgtile_addr <= "10000" & hcnt(1) & vcnt(7 downto 3) & hcnt(7 downto 3) when (hcnt(8)='1' and flip_h='0') else - "10000" & hcnt(1) & hcnt(4) & hcnt(4) & hcnt(4) & hcnt(4) & hcnt(3) & vcnt(7 downto 3) when (hcnt(8)='0' and flip_h='0') else - "10000" & hcnt(1) & not( vcnt(7 downto 3) & hcnt(7 downto 3)) when (hcnt(8)='1' and flip_h='1') else - "10000" & hcnt(1) & not( hcnt(4) & hcnt(4) & hcnt(4) & hcnt(4) & hcnt(3) & vcnt(7 downto 3)); - +bgtile_addr <= "10000" & hcnt(1) & (vcnt(7 downto 3)) & hcnt(7 downto 3) when (hcnt(8)='1' and flip_hs='0') else + "10000" & hcnt(1) & hcnt(4) & hcnt(4) & hcnt(4) & hcnt(4) & hcnt(3) & vcnt(7 downto 3) when (hcnt(8)='0' and flip_hs='0') else + "10000" & hcnt(1) & not(vcnt(7 downto 3) & hcnt(7 downto 3)) when (hcnt(8)='1' and flip_hs='1') else + "10000" & hcnt(1) & not(hcnt(4) & hcnt(4) & hcnt(4) & hcnt(4) & hcnt(3) & vcnt(7 downto 3)); + -- Attention : slot et hcnt ne sont pas entierement synchronisés -- slot |0 |1 | 2 |3 |4 |5 | ... @@ -503,7 +574,7 @@ bgtile_addr <= "10000" & hcnt(1) & vcnt(7 downto 3) & hcnt(7 downto 3) process (clock_18, slot) begin - if rising_edge(clock_18) then + if rising_edge(clock_18) then if slot = "011" and hcnt(2 downto 1) = "00" then bgtile_num <= bgram_do; end if; @@ -517,16 +588,16 @@ begin end if; end process; -bggraphx_addr <= '1' & bgtile_num_r(6 downto 0) & not hcnt(2) & vcnt(2 downto 0) when flip_h='0' else - '1' & bgtile_num_r(6 downto 0) & hcnt(2) & not vcnt(2 downto 0); +bggraphx_addr <= bg_bank & '1' & bgtile_num_r(6 downto 0) & not hcnt(2) & vcnt(2 downto 0) when flip_hs='0' else + bg_bank & '1' & bgtile_num_r(6 downto 0) & hcnt(2) & not vcnt(2 downto 0); bgpalette_addr <= bgtile_color_r(5 downto 0) & - bggraphx_do(to_integer(unsigned('1' & (hcnt(1 downto 0)) xor (flip_h & flip_h)))) & - bggraphx_do(to_integer(unsigned('0' & (hcnt(1 downto 0)) xor (flip_h & flip_h)))); + bggraphx_do(to_integer(unsigned('1' & (hcnt(1 downto 0)) xor (flip_hs & flip_hs)))) & + bggraphx_do(to_integer(unsigned('0' & (hcnt(1 downto 0)) xor (flip_hs & flip_hs)))); bgbits <= bgpalette_do(3 downto 0); ---- STARS MACHINE --- +--- STARS MACHINE --- --------------------- stars_data : entity work.stars @@ -592,25 +663,27 @@ port map( process (clock_18) subtype speed is integer range -3 to 3; - type speed_array is array(0 to 7) of speed; - variable speeds : speed_array := ( -1, -2, -3, 0, 3, 2, 1, 0 ); + type speed_array is array(0 to 7) of speed; + constant speeds : speed_array := ( -1, -2, -3, 0, 3, 2, 1, 0 ); begin - if rising_edge(clock_18) then + if rising_edge(clock_18) then if ena_vidgen = '1' then if hcnt = std_logic_vector(to_unsigned(256+8,9)) then - stars_hcnt <= "000000000"; + stars_hcnt <= flip_screen & "00000000"; stars_vcnt <= stars_vcnt + "000000001"; if vcnt = std_logic_vector(to_unsigned(128+6,9)) then stars_vcnt <= "000000000"; - stars_offset <= stars_offset + - std_logic_vector(to_signed(speeds(to_integer(unsigned(cs05XX_ctrl(2 downto 0)))),8)); + if pause = '0' then + stars_offset <= stars_offset + + std_logic_vector(to_signed(speeds(to_integer(unsigned(cs05XX_ctrl(2 downto 0)))),8)); + end if; end if; else - stars_hcnt <= stars_hcnt + "000000001"; - end if; - end if; - + stars_hcnt <= stars_hcnt + "000000001" - ("" & flip_screen & "0"); + end if; + end if; + star_color <= "000000"; if cs05XX_ctrl(5) = '1' then if cs05XX_ctrl(4 downto 3) = "00" then star_color <= star_color_set0 or star_color_set2; end if; @@ -620,8 +693,8 @@ begin end if; end if; -end process; - +end process; + --- VIDEO MUX --- ----------------- @@ -629,16 +702,18 @@ rgb_palette_addr <= ('0' & spbits_rd) when bgbits = "1111" else ('1' & bgbits); process (clock_18, rgb_palette_addr) begin - if rising_edge(clock_18)then - if rgb_palette_addr(3 downto 0) = "1111" then + if rising_edge(clock_18) then + if ce = '1' then + if rgb_palette_addr(3 downto 0) = "1111" then video_r <= star_color(1 downto 0) & "0"; video_g <= star_color(3 downto 2) & "0"; - video_b <= star_color(5 downto 4); + video_b <= star_color(5 downto 4); else video_r <= rgb_palette_do(2 downto 0); video_g <= rgb_palette_do(5 downto 3); - video_b <= rgb_palette_do(7 downto 6); + video_b <= rgb_palette_do(7 downto 6); end if; + end if; end if; end process; @@ -648,14 +723,14 @@ end process; sound_machine : entity work.sound_machine port map( -clock_18 => clock_18, -ena => ena_snd_machine, -hcnt => hcnt(5 downto 0), -cpu_addr => mux_addr(3 downto 0), -cpu_do => mux_cpu_do(3 downto 0), -ram_0_we => snd_ram_0_we, -ram_1_we => snd_ram_1_we, -audio => snd_audio + clock_18 => clock_18, + ena => ena_snd_machine and not pause, + hcnt => hcnt(5 downto 0), + cpu_addr => mux_addr(3 downto 0), + cpu_do => mux_cpu_do(3 downto 0), + ram_0_we => snd_ram_0_we, + ram_1_we => snd_ram_1_we, + audio => snd_audio ); --- CPUS ------------- @@ -671,18 +746,19 @@ mux_addr <= cpu1_addr when "000", with slot select mux_cpu_do <= cpu1_do when "000", - cpu2_do when "001", - cpu3_do when "010", - X"00" when others; + cpu2_do when "001", + cpu3_do when "010", + X"00" when others; mux_cpu_we <= (not cpu1_wr_n and cpu1_ena)or - (not cpu2_wr_n and cpu2_ena)or - (not cpu3_wr_n and cpu3_ena); + (not cpu2_wr_n and cpu2_ena)or + (not cpu3_wr_n and cpu3_ena); mux_cpu_mreq <= (not cpu1_mreq_n and cpu1_ena) or - (not cpu2_mreq_n and cpu2_ena) or - (not cpu3_mreq_n and cpu3_ena); - + (not cpu2_mreq_n and cpu2_ena) or + (not cpu3_mreq_n and cpu3_ena); + +bgrom_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 14) = "00" else '0'; latch_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 11) = "01101" else '0'; io_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 11) = "01110" else '0'; bgram_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 11) = "10000" else '0'; @@ -694,8 +770,7 @@ port_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 11) = "10100" else snd_ram_0_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 11) = "01101" and mux_addr(5 downto 4) = "00" else '0'; snd_ram_1_we <= '1' when mux_cpu_we = '1' and mux_addr(15 downto 11) = "01101" and mux_addr(5 downto 4) = "01" else '0'; -process (reset, clock_18n, io_we) - variable cs06XX_nmi_cnt : natural range 0 to 1000; +process (reset, clock_18n, io_we) begin if reset='1' then irq1_clr_n <= '0'; @@ -704,277 +779,205 @@ begin reset_cpu_n <= '0'; cpu1_irq_n <= '1'; cpu2_irq_n <= '1'; - cs51XX_coin_mode_cnt <= "000"; - cs51XX_data_cnt <= "00"; - cs51XX_switch_mode <= '0'; - cs51XX_credit_mode <= '1'; - cs05XX_ctrl <= "000000"; flip_h <= '0'; + cs51xx_irq_n <= '1'; + cs51xx_k_port_in <= X"0"; + cs05XX_ctrl <= "000000"; cs54xx_irq_n <= '1'; cs54xx_irq_cnt <= X"0"; - - else - if rising_edge(clock_18n) then - if latch_we ='1' and mux_addr(5 downto 4) = "10" then + + else + if rising_edge(clock_18n) then + if latch_we ='1' and mux_addr(5 downto 4) = "10" then if mux_addr(2 downto 0) = "000" then irq1_clr_n <= mux_cpu_do(0); end if; if mux_addr(2 downto 0) = "001" then irq2_clr_n <= mux_cpu_do(0); end if; if mux_addr(2 downto 0) = "010" then nmion_n <= mux_cpu_do(0); end if; if mux_addr(2 downto 0) = "011" then reset_cpu_n <= mux_cpu_do(0); end if; end if; - - if port_we ='1' then + + if bgrom_we ='1' and mux_addr(2 downto 0) = "000" then + bg_bank <= mux_cpu_do(0); + end if; + + if port_we ='1' then if mux_addr(2 downto 0) < "110" then cs05XX_ctrl(to_integer(unsigned(mux_addr(2 downto 0)))) <= mux_cpu_do(0); end if; if mux_addr(2 downto 0) = "111" then flip_h <= mux_cpu_do(0); end if; end if; - if irq1_clr_n = '0' then - cpu1_irq_n <= '1'; + if irq1_clr_n = '0' then + cpu1_irq_n <= '1'; elsif vcnt = std_logic_vector(to_unsigned(240,9)) then cpu1_irq_n <= '0'; end if; - if irq2_clr_n = '0' then - cpu2_irq_n <= '1'; + if irq2_clr_n = '0' then + cpu2_irq_n <= '1'; elsif vcnt = std_logic_vector(to_unsigned(240,9)) then cpu2_irq_n <= '0'; end if; - - if cs54xx_irq_cnt = X"0" then - cs54xx_irq_n <= '1'; - else - if cs54xx_ena = '1' then - cs54xx_irq_cnt <= cs54xx_irq_cnt - '1'; - end if; - end if; - + -- write to cs06XX - if io_we = '1' then + if io_we = '1' then -- write to data register (0x7000) - if mux_addr(8) = '0' then + if mux_addr(8) = '0' then -- write data to device#4 (cs54XX) if cs06XX_control(3 downto 0) = "1000" then -- write data for k and r#0 port and launch irq to advice cs50xx cs54xx_k_port_in <= mux_cpu_do(7 downto 4); cs54xx_r0_port_in <= mux_cpu_do(3 downto 0); cs54xx_irq_n <= '0'; - cs54xx_irq_cnt <= X"7"; - end if; + -- cs54xx_irq_cnt <= X"7"; + end if; -- write data to device#1 (cs51XX) if cs06XX_control(3 downto 0) = "0001" then - -- when not in coin mode - if cs51XX_coin_mode_cnt = "000" then - -- if data = 1 enter coin mode for next 4 write operations - if mux_cpu_do(2 downto 0) = "001" then - cs51XX_coin_mode_cnt <= "100"; - end if; - -- if data = 2 enter credit mode - if mux_cpu_do(2 downto 0) = "010" then - cs51XX_switch_mode <= '0'; - cs51XX_credit_mode <= '1'; - cs51XX_data_cnt <= "00"; - end if; - -- if data = 5 enter switch mode - if mux_cpu_do(2 downto 0) = "101" then - cs51XX_switch_mode <= '1'; - cs51XX_credit_mode <= '0'; - cs51XX_data_cnt <= "00"; - end if; - -- when in coin mode - else - -- written coin/credit data are ignored atm - -- only count down to exit coin_mode (request 4 write operations) - cs51XX_coin_mode_cnt <= cs51XX_coin_mode_cnt - "001"; - end if; + cs51xx_irq_n <= '0'; + cs51xx_k_port_in <= mux_cpu_do(3 downto 0); end if; end if; - - -- write to control register (0x7100) + + -- write to control register (0x7100) + -- data(3..0) select custom chip 50xx/51xx/54xx + -- data (4) read/write mode for custom chip (1 = read mode) if mux_addr(8) = '1' then cs06XX_control <= mux_cpu_do; - -- start/stop nmi timer - if mux_cpu_do(3 downto 0) = "0000" then - cs06XX_nmi_cnt := 0; + -- start/stop nmi timer (stop if no chip selected) + if mux_cpu_do(7 downto 5) = "000" then + cs06XX_nmi_cnt <= (others => '0'); cpu1_nmi_n <= '1'; + cs51xx_irq_n <= '1'; + cs54xx_irq_n <= '1'; else - cs06XX_nmi_cnt := 1; + cs06XX_nmi_cnt <= (others => '0'); + cpu1_nmi_n <= '1'; + cs06XX_nmi_stretch <= mux_cpu_do(4); + cs06XX_nmi_state_next <= '1'; end if; end if; - end if; - + end if; + -- generate periodic nmi when timer is on - if cs06XX_nmi_cnt >= 1 then + if cs06XX_control(7 downto 5) /= "000" then if cpu1_ena = '1' then -- to get 333ns tick - -- 600 * 333ns = 200µs - if cs06XX_nmi_cnt < 600 then - cs06XX_nmi_cnt := cs06XX_nmi_cnt + 1; - cpu1_nmi_n <= '1'; + + if cs06XX_nmi_cnt = 0 then + cs06XX_nmi_cnt <= cs06XX_control(7 downto 5) & "000000"; --64 * cs06XX_control(7 downto 5); + + if cs06XX_nmi_state_next = '1' then + cs5Xxx_rw <= cs06XX_control(4); + end if; + + if cs06XX_nmi_state_next = '1' and cs06XX_nmi_stretch = '0' then + cpu1_nmi_n <= '0'; + else + cpu1_nmi_n <= '1'; + end if; + + if cs06XX_nmi_state_next = '0' or cs06XX_nmi_stretch = '1' then + cs51xx_irq_n <= not (cs06XX_control(0) and cs06XX_nmi_state_next); + -- cs50xx_irq_n <= not (cs06XX_control(2) and cs06XX_nmi_state_next); + cs54xx_irq_n <= not (cs06XX_control(3) and cs06XX_nmi_state_next); + end if; + + cs06XX_nmi_state_next <= not cs06xx_nmi_state_next; + cs06XX_nmi_stretch <= '0'; else - cs06XX_nmi_cnt := 1; - cpu1_nmi_n <= '0'; - end if; + cs06XX_nmi_cnt <= cs06XX_nmi_cnt - 1; + end if; end if; end if; - - -- manage cs06XX data read + + -- manage cs06XX data read (0x7000) change_next <= '0'; if mux_cpu_mreq = '1' and mux_cpu_we ='0' and mux_addr(15 downto 11) = "01110" then if mux_addr(8) = '0' then change_next <= '1'; end if; end if ; - -- cycle data_cnt at each read and clear firex_mem in switch mode + -- cycle data_cnt at each read if change_next = '1' then - if cs06XX_control(3 downto 0) = "0001" then - - if cs51XX_data_cnt = "10" then cs51XX_data_cnt <= "00"; - else cs51XX_data_cnt <= cs51XX_data_cnt + "01"; end if; - - if cs51XX_data_cnt = "10" then - fire1_mem <= '0'; - fire2_mem <= '0'; - end if; - - end if; - end if; - -- manage fire button rising edge detection - fire1_r <= fire1; - fire2_r <= fire2; - if fire1_r ='0' and fire1 ='1' then fire1_mem <= '1'; end if; - if fire2_r ='0' and fire2 ='1' then fire2_mem <= '1'; end if; - - -- manage credit count (bcd) - -- increase at each coin up to 99 - coin_r <= coin; - start1_r <= start1; - start2_r <= start2; - if coin = '1' and coin_r = '0' then - if credit_bcd_0 = "1001" then - if credit_bcd_1 /= "1001" then - credit_bcd_1 <= credit_bcd_1 + "0001"; - credit_bcd_0 <= "0000"; - end if; - else - credit_bcd_0 <= credit_bcd_0 + "0001"; - end if; - end if; - - -- decrease only when in credit mode - if cs51XX_credit_mode = '1' then - if (start1 = '1' and start1_r = '0') then - cs51XX_credit_mode <= '0'; - if credit_bcd_0 = "0000" then - if credit_bcd_1 /= "0000" then - credit_bcd_1 <= credit_bcd_1 - "0001"; - credit_bcd_0 <= "1001"; - end if; - else - credit_bcd_0 <= credit_bcd_0 - "0001"; - end if; - end if; - - if (start2 = '1' and start2_r = '0') then - if credit_bcd_0 = "0000" or credit_bcd_0 = "0001" then - if credit_bcd_1 /= "0000" then - cs51XX_credit_mode <= '0'; - credit_bcd_1 <= credit_bcd_1 - "0001"; - if credit_bcd_0 = "0000" then - credit_bcd_0 <= "1000"; - else - credit_bcd_0 <= "1001"; - end if; - end if; - else - cs51XX_credit_mode <= '0'; - credit_bcd_0 <= credit_bcd_0 - "0010"; - end if; + if cs06XX_control(4 downto 0) = "10001" then + cs51xx_irq_n <= '0'; end if; end if; - + end if; end if; end process; -with cs51XX_data_cnt select -cs51XX_switch_mode_do <= not (left2 & '0' & right2 & '0' & left1 & '0' & right1 & '0' ) when "00", - not (b_test & b_svce & '0' & coin & start2 & start1 & fire2_mem & fire1_mem) when "01", - X"00" when others; - -with cs51XX_data_cnt select -cs51XX_non_switch_mode_do <= credit_bcd_1 & credit_bcd_0 when "00", -- credits (cpu spy this) - not ("110" & fire1_mem & left1 & '0' & right1 & '0' ) when "01", - not ("110" & fire2_mem & left2 & '0' & right2 & '0' ) when "10", - X"00" when "11"; -- N.U. - -cs51XX_do <= cs51XX_switch_mode_do when cs51XX_switch_mode = '1' else cs51XX_non_switch_mode_do; +cs51XX_do <= cs51xx_oh_port_out & cs51xx_ol_port_out; cs54XX_do <= X"FF"; -- no data from CS54XX with cs06XX_control(3 downto 0) select cs06XX_di <= cs51XX_do when "0001", - cs54XX_do when "1000", - X"00" when others; + cs54XX_do when "1000", + X"00" when others; cs06XX_do <= cs06XX_di when mux_addr(8)= '0' else cs06XX_control; -process (clock_18, nmion_n, ena_vidgen) +process (clock_18, nmion_n) begin if nmion_n = '1' then - elsif rising_edge(clock_18) and ena_vidgen = '1' then + elsif rising_edge(clock_18) then + if ena_vidgen = '1' then if hcnt = "100000000" then if vcnt = "001000000" or vcnt = "011000000" then cpu3_nmi_n <= '0'; end if; if vcnt = "001000001" or vcnt = "011000001" then cpu3_nmi_n <= '1'; end if; end if; + end if; end if; end process; with cpu1_addr(15 downto 11) select -cpu1_di <= cpu1_rom_do when "00000", - cpu1_rom_do when "00001", - cpu1_rom_do when "00010", - cpu1_rom_do when "00011", - cpu1_rom_do when "00100", - cpu1_rom_do when "00101", - cpu1_rom_do when "00110", - cpu1_rom_do when "00111", - "000000" & dip_switch_do when "01101", - cs06XX_do when "01110", - bgram_do when "10000", - wram1_do when "10001", - wram2_do when "10010", - wram3_do when "10011", - X"00" when others; +cpu1_di <= cpu1_rom_do when "00000", + cpu1_rom_do when "00001", + cpu1_rom_do when "00010", + cpu1_rom_do when "00011", + cpu1_rom_do when "00100", + cpu1_rom_do when "00101", + cpu1_rom_do when "00110", + cpu1_rom_do when "00111", + "000000" & dip_switch_do when "01101", + cs06XX_do when "01110", + bgram_do when "10000", + wram1_do when "10001", + wram2_do when "10010", + wram3_do when "10011", + X"00" when others; with cpu2_addr(15 downto 11) select -cpu2_di <= cpu2_rom_do when "00000", - cpu2_rom_do when "00001", - "000000" & dip_switch_do when "01101", - cs06XX_do when "01110", - bgram_do when "10000", - wram1_do when "10001", - wram2_do when "10010", - wram3_do when "10011", - X"00" when others; +cpu2_di <= cpu2_rom_do when "00000", + cpu2_rom_do when "00001", + "000000" & dip_switch_do when "01101", + cs06XX_do when "01110", + bgram_do when "10000", + wram1_do when "10001", + wram2_do when "10010", + wram3_do when "10011", + X"00" when others; with cpu3_addr(15 downto 11) select -cpu3_di <= cpu3_rom_do when "00000", - cpu3_rom_do when "00001", - "000000" & dip_switch_do when "01101", - cs06XX_do when "01110", - bgram_do when "10000", - wram1_do when "10001", - wram2_do when "10010", - wram3_do when "10011", - X"00" when others; +cpu3_di <= cpu3_rom_do when "00000", + cpu3_rom_do when "00001", + "000000" & dip_switch_do when "01101", + cs06XX_do when "01110", + bgram_do when "10000", + wram1_do when "10001", + wram2_do when "10010", + wram3_do when "10011", + X"00" when others; -- video address/sync generator gen_video : entity work.gen_video port map( -clk => clock_18, -enable => ena_vidgen, -hcnt => hcnt, -vcnt => vcnt, -hsync => video_hs, -vsync => video_vs, -csync => video_csync, -hblank => video_hb, -vblank => video_vb + clk => clock_18, + enable => ena_vidgen, + hcnt => hcnt, + vcnt => vcnt, + hsync => video_hs, + vsync => video_vs, + csync => video_csync, + hblank => blank_h, + vblank => vblank, + h_offset => h_offset, + v_offset => v_offset ); -- microprocessor Z80 - 1 @@ -984,11 +987,11 @@ port map( RESET_n => reset_n, CLK_n => clock_18, CLKEN => cpu1_ena, - WAIT_n => '1', + WAIT_n => not pause, INT_n => cpu1_irq_n, NMI_n => cpu1_nmi_n, BUSRQ_n => '1', - M1_n => cpu1_m1_n, + --M1_n => cpu1_m1_n, MREQ_n => cpu1_mreq_n, IORQ_n => open, RD_n => open, @@ -1009,11 +1012,11 @@ port map( RESET_n => reset_cpu_n, CLK_n => clock_18, CLKEN => cpu2_ena, - WAIT_n => '1', + WAIT_n => not pause, INT_n => cpu2_irq_n, NMI_n => '1', --cpu_int_n, BUSRQ_n => '1', - M1_n => cpu2_m1_n, + --M1_n => cpu2_m1_n, MREQ_n => cpu2_mreq_n, IORQ_n => open, RD_n => open, @@ -1034,11 +1037,11 @@ port map( RESET_n => reset_cpu_n, CLK_n => clock_18, CLKEN => cpu3_ena, - WAIT_n => '1', + WAIT_n => not pause, INT_n => '1', NMI_n => cpu3_nmi_n, BUSRQ_n => '1', - M1_n => cpu3_m1_n, + --M1_n => cpu3_m1_n, MREQ_n => cpu3_mreq_n, IORQ_n => open, RD_n => open, @@ -1051,6 +1054,56 @@ port map( DO => cpu3_do ); +-- mb88 - cs51xx (42 pins IC, 1024 bytes rom) +mb88_51xx : entity work.mb88 +port map( + reset_n => reset_cpu_n, --reset_n, + clock => clock_18, + ena => cs5Xxx_ena, + + -- in upright mode P2 controls are shared with P1 (i.e. both are read from r0 port) + -- up/down controls for Gatsbee hack. Strangely enough, in coctail mode they are reversed. + r0_port_in => not (left1 & up1 & right1 & down1), -- pin 22,23,24,25 + r1_port_in => not (left2 & down2 & right2 & up2), -- pin 26,27,28,29 + r2_port_in => not (start2 & start1 & fire2 & fire1), -- pin 30,31,32,33 + r3_port_in => not (self_test & service & coin2 & coin1), -- pin 34,35,36,37 + r0_port_out => open, + r1_port_out => open, + r2_port_out => open, + r3_port_out => open, + k_port_in => cs5Xxx_rw & cs51xx_k_port_in(2 downto 0), -- pin 38,39,40,41 + ol_port_out => cs51xx_ol_port_out, -- pin 13,14,15,16 + oh_port_out => cs51xx_oh_port_out, -- pin 17,18,19,20 + p_port_out => open, -- pin 9,10,11,12 + + stby_n => '0', + tc_n => not vblank, -- pin 8 + irq_n => cs51xx_irq_n, -- pin 4 + sc_in_n => '0', -- pin 7 + si_n => '0', -- pin 6 + sc_out_n => open, -- pin 7 + so_n => open, -- pin 5 + to_n => open, -- pin 7 + + rom_addr => cs51xx_rom_addr, + rom_data => cs51xx_rom_do +); + +-- cs51xx program ROM +cs51xx_prog : work.dpram generic map (10,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and rom51_cs, + address_a => dn_addr(9 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => cs51xx_rom_addr(9 downto 0), + q_b => cs51xx_rom_do +); + + -- mb88 - cs54xx (28 pins IC, 1024 bytes rom) mb88_54xx : entity work.mb88 port map( @@ -1063,12 +1116,12 @@ port map( r2_port_in => X"0", r3_port_in => X"0", r0_port_out => open, - r1_port_out => cs54xx_audio_3, -- pin 17,18,19,20 (resistor divider ) + r1_port_out => cs54xx_audio_3, -- pin 17,18,19,20 r2_port_out => open, r3_port_out => open, k_port_in => cs54xx_k_port_in, -- pin 24,25,26,27 - ol_port_out => cs54xx_audio_1, -- pin 4, 5, 6, 7 (resistor divider 150K/22K) - oh_port_out => cs54xx_audio_2, -- pin 8, 9,10,11 (resistor divider 47K/10K) + ol_port_out => cs54xx_audio_1, -- pin 4, 5, 6, 7 + oh_port_out => cs54xx_audio_2, -- pin 8, 9,10,11 p_port_out => open, stby_n => '0', @@ -1076,51 +1129,141 @@ port map( irq_n => cs54xx_irq_n, sc_in_n => '0', si_n => '0', - sc_out_n => open, - so_n => open, - to_n => open, - + sc_out_n => open, -- pin 7 + so_n => open, -- pin 5 + to_n => open, -- pin 7 + + rom_addr => cs54xx_rom_addr, rom_data => cs54xx_rom_do ); -- cs54xx program ROM -cs54xx_prog : entity work.cs54xx_prog +cs54xx_prog : work.dpram generic map (10,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and rom54_cs, + address_a => dn_addr(9 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => cs54xx_rom_addr(9 downto 0), + q_b => cs54xx_rom_do +); + +-- Audio low pass filters. Sample rate of 46 875 Mhz has enough resolution for 0.001 MF capacitance + +-- cs54xx audio1 low pass filter +cs54xx_lpf1 : entity work.lpf port map( - clk => clock_18n, - addr => cs54xx_rom_addr(9 downto 0), - data => cs54xx_rom_do - ); + clock => clock_18, + reset => reset, + div => 384, -- 18 MHz/384 = 46875 Hz + audio_in => ("00"&cs54xx_audio_1&"0000"), + gain_in => 1, + r1 => 150000, + r2 => 22000, + dt_over_c3 => 2133, -- 1/46875Hz/0.01e-6F + dt_over_c4 => 2133, -- 1/46875Hz/0.01e-6F + r5 => 470000, + audio_out => cs54xx_audio_1_lpf +); + +-- cs54xx audio2 low pass filter +cs54xx_lpf2 : entity work.lpf +port map( + clock => clock_18, + reset => reset, + div => 384, + audio_in => ("00"&cs54xx_audio_2&"0000"), + gain_in => 1, + r1 => 47000, + r2 => 10000, + dt_over_c3 => 2133, -- 1/46875Hz/0.01e-6F + dt_over_c4 => 2133, -- 1/46875Hz/0.01e-6F + r5 => 150000, + audio_out => cs54xx_audio_2_lpf +); + +-- cs54xx audio3 low pass filter +cs54xx_lpf3 : entity work.lpf +port map( + clock => clock_18, + reset => reset, + div => 384, + audio_in => ("00"&cs54xx_audio_3&"0000"), + gain_in => 1, + r1 => 100000, + r2 => 22000, + dt_over_c3 => 21333, -- 1/46875Hz/0.001e-6F + dt_over_c4 => 21333, -- 1/46875Hz/0.001e-6F + r5 => 220000, + audio_out => cs54xx_audio_3_lpf +); + +rom1_cs <= '1' when dn_addr(15 downto 14) = "00" else '0'; +rom2_cs <= '1' when dn_addr(15 downto 12) = "0100" else '0'; +rom3_cs <= '1' when dn_addr(15 downto 12) = "0101" else '0'; +roms_cs <= '1' when dn_addr(15 downto 13) = "011" else '0'; +romb_cs <= '1' when dn_addr(15 downto 13) = "100" else '0'; +rom51_cs <= '1' when dn_addr(15 downto 10) = "101000" else '0'; +rom54_cs <= '1' when dn_addr(15 downto 10) = "101001" else '0'; -- cpu1 program ROM -rom_cpu1 : entity work.galaga_cpu1 -port map( - clk => clock_18n, - addr => mux_addr(13 downto 0), - data => cpu1_rom_do +rom_cpu1 : work.dpram generic map (14,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and rom1_cs, + address_a => dn_addr(13 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => mux_addr(13 downto 0), + q_b => cpu1_rom_do ); -- cpu2 program ROM -rom_cpu2 : entity work.galaga_cpu2 -port map( - clk => clock_18n, - addr => mux_addr(11 downto 0), - data => cpu2_rom_do +rom_cpu2 : work.dpram generic map (12,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and rom2_cs, + address_a => dn_addr(11 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => mux_addr(11 downto 0), + q_b => cpu2_rom_do ); -- cpu3 program ROM -rom_cpu3 : entity work.galaga_cpu3 -port map( - clk => clock_18n, - addr => mux_addr(11 downto 0), - data => cpu3_rom_do +rom_cpu3 : work.dpram generic map (12,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and rom3_cs, + address_a => dn_addr(11 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => mux_addr(11 downto 0), + q_b => cpu3_rom_do ); + -- background graphics ROM -bg_graphics : entity work.bg_graphx -port map( - clk => clock_18n, - addr => bggraphx_addr(11 downto 0), - data => bggraphx_do +bg_graphics : work.dpram generic map (13,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and romb_cs, + address_a => dn_addr(12 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => bggraphx_addr(12 downto 0), + q_b => bggraphx_do ); -- background palette ROM @@ -1131,25 +1274,42 @@ port map( data => bgpalette_do ); +-- Highscore mux setup +hs_cs_bgram <= '1' when hs_address(15 downto 11) = "10000" else '0'; +hs_cs_spram <= '1' when hs_address(15 downto 11) = "10001" else '0'; +hs_data_out <= hs_data_out_bgram when hs_cs_bgram = '1' else hs_data_out_spram; + -- background char RAM 0x8000-0x87FF -bgram : entity work.gen_ram -generic map( dWidth => 8, aWidth => 11) +bgram : entity work.dpram +generic map(11,8) port map( - clk => clock_18n, - we => bgram_we, - addr => mux_addr(10 downto 0), - d => mux_cpu_do, - q => bgram_do + clock_a => clock_18n, + wren_a => bgram_we, + address_a => mux_addr(10 downto 0), + data_a => mux_cpu_do, + q_a => bgram_do, + + clock_b => clock_18, + wren_b => hs_write and hs_cs_bgram, + address_b => hs_address(10 downto 0), + data_b => hs_data_in, + q_b => hs_data_out_bgram ); -- working/sprite register RAM1 0x8800-0x8BFF / 0x8C00-0x8FFF -wram1 : entity work.gen_ram -generic map( dWidth => 8, aWidth => 10) +wram1 : entity work.dpram +generic map(10,8) port map( - clk => clock_18n, - we => wram1_we, - addr => mux_addr(9 downto 0), - d => mux_cpu_do, - q => wram1_do + clock_a => clock_18n, + wren_a => wram1_we, + address_a => mux_addr(9 downto 0), + data_a => mux_cpu_do, + q_a => wram1_do, + + clock_b => clock_18, + wren_b => hs_write and hs_cs_spram, + address_b => hs_address(9 downto 0), + data_b => hs_data_in, + q_b => hs_data_out_spram ); -- working/sprite register RAM2 0x9000-0x93FF / 0x9400-0x97FF wram2 : entity work.gen_ram @@ -1195,11 +1355,17 @@ port map( ); -- sprite graphics ROM -sp_graphics : entity work.sp_graphx -port map( - clk => clock_18n, - addr => spgraphx_addr, - data => spgraphx_do +sp_graphics : work.dpram generic map (13,8) +port map +( + clock_a => clock_18, + wren_a => dn_wr and roms_cs, + address_a => dn_addr(12 downto 0), + data_a => dn_data, + + clock_b => clock_18n, + address_b => spgraphx_addr, + q_b => spgraphx_do ); -- sprite palette ROM @@ -1218,4 +1384,4 @@ port map( data => rgb_palette_do ); -end struct; \ No newline at end of file +end struct; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga_mist.sv b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga_mist.sv index 8a1bd536..8367b183 100644 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga_mist.sv +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/galaga_mist.sv @@ -20,14 +20,28 @@ module galaga_mist `include "rtl\build_id.v" localparam CONF_STR = { - "Galaga;;", + "GALAGA;;", "O2,Rotate Controls,Off,On;", "O34,Scanlines,Off,25%,50%,75%;", "O5,Blend,Off,On;", - "T6,Reset;", + "O6,Flip screen,Off,On;", + "O7,Self-test mode,Off,On;", + "T1,Service trigger,Off,On;", + "DIP;", + "T0,Reset;", "V,v1.21.",`BUILD_DATE }; +wire rotate = status[2]; +wire [1:0] scanlines = status[4:3]; +wire blend = status[5]; +wire flip = status[6]; +wire selftest = status[7]; +wire service = status[1]; + +wire [7:0] dipa = ~status[15:8]; +wire [7:0] dipb = ~status[23:16]; + assign LED = 1; assign AUDIO_R = AUDIO_L; @@ -40,63 +54,14 @@ pll pll( wire [31:0] status; wire [1:0] buttons; wire [1:0] switches; -wire [9:0] kbjoy; wire [7:0] joystick_0; wire [7:0] joystick_1; wire scandoublerD; wire ypbpr; -wire [10:0] ps2_key; -wire [9:0] audio; -wire hs, vs; -wire blankn = ~(hb | vb); -wire hb, vb; -wire [2:0] r,g; -wire [1:0] b; - -galaga galaga( - .clock_18(clk_18), - .reset(status[0] | status[6] | buttons[1]), - .video_r(r), - .video_g(g), - .video_b(b), - .video_hb(hb), - .video_vb(vb), - .video_hs(hs), - .video_vs(vs), - .audio(audio), - .coin(btn_coin), - .start1(btn_one_player), - .left1(m_left), - .right1(m_right), - .fire1(m_fire), - .start2(btn_two_players), - .left2(m_left), - .right2(m_right), - .fire2(m_fire) - ); - -mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video( - .clk_sys(clk_18), - .SPI_SCK(SPI_SCK), - .SPI_SS3(SPI_SS3), - .SPI_DI(SPI_DI), - .R(blankn ? r : 0), - .G(blankn ? g : 0), - .B(blankn ? {b[0], b} : 0), - .HSync(hs), - .VSync(vs), - .VGA_R(VGA_R), - .VGA_G(VGA_G), - .VGA_B(VGA_B), - .VGA_VS(VGA_VS), - .VGA_HS(VGA_HS), - .ce_divider(1'b1), - .blend(status[5]), - .rotate({1'b1,status[2]}), - .scanlines(scandoublerD ? 2'b00 : status[4:3]), - .scandoubler_disable(scandoublerD), - .ypbpr(ypbpr) - ); +wire no_csync; +wire key_strobe; +wire key_pressed; +wire [7:0] key_code; user_io #( .STRLEN(($size(CONF_STR)>>3))) @@ -110,6 +75,7 @@ user_io( .buttons (buttons ), .switches (switches ), .scandoubler_disable (scandoublerD ), + .no_csync (no_csync ), .ypbpr (ypbpr ), .key_strobe (key_strobe ), .key_pressed (key_pressed ), @@ -119,8 +85,106 @@ user_io( .status (status ) ); +wire ioctl_downl; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; + +data_io data_io( + .clk_sys ( clk_18 ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS2 ( SPI_SS2 ), + .SPI_DI ( SPI_DI ), + .ioctl_download( ioctl_downl ), + .ioctl_index ( ioctl_index ), + .ioctl_wr ( ioctl_wr ), + .ioctl_addr ( ioctl_addr ), + .ioctl_dout ( ioctl_dout ) +); + +wire [15:0] audio; +wire hs, vs; +wire blankn = ~(hb | vb); +wire hb, vb; +wire [2:0] r,g; +wire [1:0] b; +reg service_trg; +reg reset; + +always @(posedge clk_18) begin + reg serviceD; + reg [19:0] service_cnt = 0; + + serviceD <= service; + if (~serviceD & service) service_cnt <= 24'hFFFFF; + else if (|service_cnt) service_cnt <= service_cnt - 1'd1; + + service_trg <= |service_cnt; + + reset <= status[0] | buttons[1] | ioctl_downl; +end + +galaga galaga( + .clock_18(clk_18), + .reset(reset), + .flip_screen(flip), + .video_r(r), + .video_g(g), + .video_b(b), + .blank_h(hb), + .blank_v(vb), + .video_hs(hs), + .video_vs(vs), + .audio(audio), + .coin1(m_coin1), + .start1(m_one_player), + .left1(m_left), + .right1(m_right), + .fire1(m_fireA), + .start2(m_two_players), + .left2(m_left2), + .right2(m_right2), + .fire2(m_fire2A), + + .dip_switch_a(dipa), + .dip_switch_b(dipb), + + .service(service_trg), + .self_test(selftest), + .pause(1'b0), + + .dn_addr(ioctl_addr), + .dn_data(ioctl_dout), + .dn_wr(ioctl_wr) + ); + +mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video( + .clk_sys(clk_18), + .SPI_SCK(SPI_SCK), + .SPI_SS3(SPI_SS3), + .SPI_DI(SPI_DI), + .R(blankn ? r : 0), + .G(blankn ? g : 0), + .B(blankn ? {b, b[1]} : 0), + .HSync(hs), + .VSync(vs), + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .ce_divider(1'b1), + .no_csync(no_csync), + .blend(blend), + .rotate({~flip,rotate}), + .scanlines(scanlines), + .scandoubler_disable(scandoublerD), + .ypbpr(ypbpr) + ); + dac #( - .C_bits(10)) + .C_bits(16)) dac( .clk_i(clk_18), .res_n_i(1), @@ -128,44 +192,25 @@ dac( .dac_o(AUDIO_L) ); -// Rotated Normal -wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3]; -wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2]; -wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1]; -wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0]; -wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4]; -wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5]; +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; -reg btn_one_player = 0; -reg btn_two_players = 0; -reg btn_left = 0; -reg btn_right = 0; -reg btn_down = 0; -reg btn_up = 0; -reg btn_fire1 = 0; -reg btn_fire2 = 0; -reg btn_fire3 = 0; -reg btn_coin = 0; -wire key_pressed; -wire [7:0] key_code; -wire key_strobe; - -always @(posedge clk_18) begin - if(key_strobe) begin - case(key_code) - 'h75: btn_up <= key_pressed; // up - 'h72: btn_down <= key_pressed; // down - 'h6B: btn_left <= key_pressed; // left - 'h74: btn_right <= key_pressed; // right - 'h76: btn_coin <= key_pressed; // ESC - 'h05: btn_one_player <= key_pressed; // F1 - 'h06: btn_two_players <= key_pressed; // F2 - 'h14: btn_fire3 <= key_pressed; // ctrl - 'h11: btn_fire2 <= key_pressed; // alt - 'h29: btn_fire1 <= key_pressed; // Space - endcase - end -end +arcade_inputs inputs ( + .clk ( clk_18 ), + .key_strobe ( key_strobe ), + .key_pressed ( key_pressed ), + .key_code ( key_code ), + .joystick_0 ( joystick_0 ), + .joystick_1 ( joystick_1 ), + .rotate ( rotate ), + .orientation ( {~flip, 1'b1} ), + .joyswap ( 1'b0 ), + .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 \ No newline at end of file diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/gen_video.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/gen_video.vhd index c5dee924..d1b9dce8 100644 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/gen_video.vhd +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/gen_video.vhd @@ -3,33 +3,39 @@ -- http://darfpga.blogspot.fr --------------------------------------------------------------------------------- library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.ALL; +use ieee.std_logic_1164.all, + ieee.std_logic_1164.all, + ieee.std_logic_unsigned.all, + ieee.numeric_std.all; + entity gen_video is port( -clk : in std_logic; -enable : in std_logic; -hcnt : out std_logic_vector(8 downto 0); -vcnt : out std_logic_vector(8 downto 0); -hsync : out std_logic; -vsync : out std_logic; -csync : out std_logic; -- composite sync for TV -hblank : out std_logic; -vblank : out std_logic + clk : in std_logic; + enable : in std_logic; + hcnt : out std_logic_vector(8 downto 0); + vcnt : out std_logic_vector(8 downto 0); + hsync : out std_logic; + vsync : out std_logic; + csync : out std_logic; -- composite sync for TV + hblank : out std_logic; + vblank : out std_logic; + h_offset: in signed(3 downto 0); + v_offset: in signed(3 downto 0) ); end gen_video; architecture struct of gen_video is signal hclkReg : unsigned (1 DOWNTO 0); ---signal hblank : std_logic; ---signal vblank : std_logic; signal hcntReg : unsigned (8 DOWNTO 0) := to_unsigned(000,9); signal vcntReg : unsigned (8 DOWNTO 0) := to_unsigned(015,9); signal hsync0 : std_logic; -signal hsync1 : std_logic; -signal hsync2 : std_logic; +signal hsync1 : std_logic; +signal hsync2 : std_logic; +signal hsync_base : integer; +signal vsync_base : integer; begin hcnt <= std_logic_vector(hcntReg); @@ -44,72 +50,71 @@ hsync <= hsync0; -- Compteur vertical : 263-000+1=264 lignes (33 tiles) -- 000 à 015 : 16 lignes debut de trame (2 tiles) -- 016 à 239 : 224 lignes centrales (28 tiles affichées) --- 240 à 263 : 24 lignes fin de trame (3 tiles +-- 240 à 263 : 24 lignes fin de trame (3 tiles) -- Synchro horizontale : hcnt=[176 à 204] (29 pixels) -- Synchro verticale : vcnt=[260 à 003] ( 8 lignes) -process(clk, enable) +process(clk) begin + if rising_edge(clk) then + if enable = '1' then -- clk & ena at 6MHz -if rising_edge(clk) and enable = '1' then -- clk & ena at 6MHz + if hcntReg = 511 then + hcntReg <= to_unsigned (128,9); + else + hcntReg <= hcntReg + 1; + end if; - if hcntReg = 511 then - hcntReg <= to_unsigned (128,9); - else - hcntReg <= hcntReg + 1; - end if; + if hcntReg = 191 then + if vcntReg = 263 then + vcntReg <= to_unsigned(0,9); + else + vcntReg <= vcntReg + 1; + end if; + end if; - if hcntReg = 191 then - if vcntReg = 263 then - vcntReg <= to_unsigned(0,9); - else - vcntReg <= vcntReg + 1; - end if; - end if; + hsync_base <= 175 + to_integer(resize(h_offset, 9)); + if hcntReg = (hsync_base+ 0-8+8) then hsync0 <= '0'; -- 1 + elsif hcntReg = (hsync_base+29-8+8) then hsync0 <= '1'; + end if; - if hcntReg = (175+ 0-8+8) then hsync0 <= '0'; -- 1 - elsif hcntReg = (175+29-8+8) then hsync0 <= '1'; - end if; + if hcntReg = (hsync_base-8+8) then hsync1 <= '0'; + elsif hcntReg = (hsync_base+13-8+8) then hsync1 <= '1'; -- 11 + elsif hcntReg = (hsync_base +192-8+8) then hsync1 <= '0'; + elsif hcntReg = (hsync_base+13+192-8+8) then hsync1 <= '1'; -- 11 + end if; - if hcntReg = (175-8+8) then hsync1 <= '0'; - elsif hcntReg = (175+13-8+8) then hsync1 <= '1'; -- 11 - elsif hcntReg = (175 +192-8+8) then hsync1 <= '0'; - elsif hcntReg = (175+13+192-8+8) then hsync1 <= '1'; -- 11 - end if; + if hcntReg = (hsync_base-8+8) then hsync2 <= '0'; + elsif hcntReg = (hsync_base-28-8+8) then hsync2 <= '1'; + end if; - if hcntReg = (175-8+8) then hsync2 <= '0'; - elsif hcntReg = (175-28-8+8) then hsync2 <= '1'; - end if; + vsync_base <= 250+to_integer(resize(v_offset, 9)); + if vcntReg = (vsync_base+ 2-1+2) mod 264 then csync <= hsync1; + elsif vcntReg = (vsync_base+ 3-1+2) mod 264 then csync <= hsync1; + elsif vcntReg = (vsync_base+ 4-1+2) mod 264 then csync <= hsync1; -- and hsync2; + elsif vcntReg = (vsync_base+ 5-1+2) mod 264 then csync <= hsync2; -- not(hsync1); + elsif vcntReg = (vsync_base+ 6-1+2) mod 264 then csync <= hsync2; -- not(hsync1); + elsif vcntReg = (vsync_base+ 7-1+2) mod 264 then csync <= hsync2; -- not(hsync1) or not(hsync2); + elsif vcntReg = (vsync_base+ 8-1+2) mod 264 then csync <= hsync1; + elsif vcntReg = (vsync_base+ 9-1+2) mod 264 then csync <= hsync1; + elsif vcntReg = (vsync_base+10-1+2) mod 264 then csync <= hsync1; + else csync <= hsync0; + end if; - if vcntReg = 252-1 then csync <= hsync1; - elsif vcntReg = 253-1 then csync <= hsync1; - elsif vcntReg = 254-1 then csync <= hsync1; -- and hsync2; - elsif vcntReg = 255-1 then csync <= hsync2; -- not(hsync1); - elsif vcntReg = 256-1 then csync <= hsync2; -- not(hsync1); - elsif vcntReg = 257-1 then csync <= hsync2; -- not(hsync1) or not(hsync2); - elsif vcntReg = 258-1 then csync <= hsync1; - elsif vcntReg = 259-1 then csync <= hsync1; - elsif vcntReg = 260-1 then csync <= hsync1; - else csync <= hsync0; - end if; + if vcntReg = (vsync_base+10) mod 264 then vsync <= '1'; + elsif vcntReg = (vsync_base+17) mod 264 then vsync <= '0'; + end if; - if vcntReg = 260 then vsync <= '0'; - elsif vcntReg = 003 then vsync <= '1'; - end if; - - if hcntReg = (127+16+8) then hblank <= '1'; - elsif hcntReg = (255-17+8+1) then hblank <= '0'; - end if; - - if vcntReg = (240+1-1) then vblank <= '1'; - elsif vcntReg = (015+1) then vblank <= '0'; - end if; - - -- blankn <= not (hblank or vblank); - -end if; + if hcntReg = (127+16+9) then hblank <= '1'; + elsif hcntReg = (255-17+9+1) then hblank <= '0'; + end if; + if vcntReg = (240+1-1) then vblank <= '1'; + elsif vcntReg = (015+1) then vblank <= '0'; + end if; + end if; + end if; end process; -end architecture; \ No newline at end of file +end architecture; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/mb88.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/mb88.vhd index a85b39f7..a8193285 100644 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/mb88.vhd +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/mb88.vhd @@ -4,13 +4,13 @@ --------------------------------------------------------------------------------- -- -- Version 0.3 -- 28/02/2017 -- --- fixed instruction JMP (0xC0..0xFF) let r_pa be incremented when r_pc = 0x3F +-- fixed instruction JMP (0xC0..0xFF) let r_pa be incremented when r_pc = 0x3F -- -- Version 0.2 -- 26/02/2017 -- -- corrected r_stf for tstR instruction (0x24) -- corrected r_stf for tbit instruction (0x38-0x3B) -- --- Version 0.1 -- 25/02/2017 -- +-- Version 0.1 -- 25/02/2017 -- -- outO instruction write to ol,oh depending on r_cf --------------------------------------------------------------------------------- -- Educational use only @@ -19,7 +19,7 @@ -- Use at your own risk --------------------------------------------------------------------------------- --- Todo : Timer, Serial +-- Todo : Timer, Serial -- Features : @@ -57,10 +57,10 @@ port( sc_out_n : out std_logic; so_n : out std_logic; to_n : out std_logic; - + rom_addr : out std_logic_vector(10 downto 0); rom_data : in std_logic_vector( 7 downto 0) - + ); end mb88; @@ -68,36 +68,39 @@ architecture struct of mb88 is signal reset : std_logic; signal clock_n : std_logic; - - signal ram_addr : std_logic_vector(6 downto 0); + + signal ram_addr : std_logic_vector(6 downto 0); signal ram_we : std_logic; signal ram_di : std_logic_vector(3 downto 0); signal ram_do : std_logic_vector(3 downto 0); - - signal r_pc : std_logic_vector(5 downto 0) := (others=>'0'); - signal r_pa : std_logic_vector(4 downto 0) := (others=>'0'); - signal r_si : std_logic_vector(1 downto 0) := (others=>'0'); - signal r_a : std_logic_vector(3 downto 0) := (others=>'0'); - signal r_x : std_logic_vector(3 downto 0) := (others=>'0'); - signal r_y : std_logic_vector(3 downto 0) := (others=>'0'); - signal r_stf : std_logic := '1'; - signal r_zf : std_logic := '0'; - signal r_cf : std_logic := '0'; - signal r_vf : std_logic := '0'; - signal r_sf : std_logic := '0'; - signal r_nf : std_logic := '0'; - signal r_pio : std_logic_vector(7 downto 0) := (others=>'0'); - signal r_th : std_logic_vector(3 downto 0) := (others=>'0'); - signal r_tl : std_logic_vector(3 downto 0) := (others=>'0'); - signal r_tp : std_logic_vector(5 downto 0) := (others=>'0'); - signal r_ctr : std_logic_vector(5 downto 0) := (others=>'0'); + signal r_pc : std_logic_vector(5 downto 0) := (others=>'0'); + signal r_pa : std_logic_vector(4 downto 0) := (others=>'0'); + signal r_si : std_logic_vector(1 downto 0) := (others=>'0'); + signal r_a : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_x : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_y : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_stf : std_logic := '1'; + signal r_zf : std_logic := '0'; + signal r_cf : std_logic := '0'; + signal r_vf : std_logic := '0'; + signal r_sf : std_logic := '0'; + signal r_nf : std_logic := '0'; - signal r_sb : std_logic_vector(3 downto 0) := (others=>'0'); - signal r_sbcnt : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_pio : std_logic_vector(7 downto 0) := (others=>'0'); + signal r_th : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_tl : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_tp : std_logic_vector(5 downto 0) := (others=>'0'); + signal r_ctr : std_logic_vector(5 downto 0) := (others=>'0'); - signal interrupt_pending : std_logic := '0'; - signal irq_n_r : std_logic := '0'; + signal r_sb : std_logic_vector(3 downto 0) := (others=>'0'); + signal r_sbcnt : std_logic_vector(3 downto 0) := (others=>'0'); + + signal interrupt_pending : std_logic := '0'; + signal timer_interrupt_pending : std_logic := '0'; + signal irq_n_r : std_logic := '0'; + + signal tc_n_r : std_logic := '0'; subtype stack_size is integer range 0 to 3; type stack_def is array(stack_size) of std_logic_vector(15 downto 0); @@ -107,8 +110,8 @@ architecture struct of mb88 is type ram_def is array(ram_size) of std_logic_vector(3 downto 0); signal ram : ram_def := (others=>(others=>'0')); - signal single_byte_op : std_logic := '1'; - signal op_code : std_logic_vector(7 downto 0) := X"00"; + signal single_byte_op : std_logic := '1'; + signal op_code : std_logic_vector(7 downto 0) := X"00"; signal a_p1 : std_logic_vector(3 downto 0); signal a_p1_z : std_logic; @@ -183,12 +186,12 @@ architecture struct of mb88 is signal m_set_bit : std_logic_vector(3 downto 0); signal m_clr_bit : std_logic_vector(3 downto 0); signal m_tst_bit : std_logic; - + signal mem : std_logic_vector(3 downto 0); signal mem_z : std_logic; signal imm_x7_z : std_logic; signal imm_xF_z : std_logic; - + begin clock_n <= not clock; @@ -201,7 +204,7 @@ ram_addr <= X"0" & rom_data(2 downto 0) when ((rom_data >= X"50") and (rom_data ram_we <= '1' when(( (rom_data = X"1D") or (rom_data = X"1A") or (rom_data = X"0A") or (rom_data = X"0B") or (rom_data = X"2A") or - (rom_data = X"19") or (rom_data = X"09") or + (rom_data = X"19") or (rom_data = X"09") or ((rom_data >= X"30") and (rom_data <= X"37") ) or ((rom_data >= X"50") and (rom_data <= X"57") ) ) and (single_byte_op = '1')and ena = '1') @@ -209,20 +212,20 @@ ram_we <= '1' when(( (rom_data = X"1D") or (rom_data = X"1A") or with rom_data select ram_di <= r_a when X"1D", r_a when X"1A", - r_a when X"0A", r_a when X"0B", + r_a when X"0A", r_a when X"0B", r_sb when X"2A", m_m1 when X"19", m_p1 when X"09", - m_set_bit when X"30", m_clr_bit when X"34", - m_set_bit when X"31", m_clr_bit when X"35", + m_set_bit when X"30", m_clr_bit when X"34", + m_set_bit when X"31", m_clr_bit when X"35", m_set_bit when X"32", m_clr_bit when X"36", m_set_bit when X"33", m_clr_bit when X"37", - r_a when X"50", r_y when X"54", - r_a when X"51", r_y when X"55", - r_a when X"52", r_y when X"56", - r_a when X"53", r_y when X"57", + r_a when X"50", r_y when X"54", + r_a when X"51", r_y when X"55", + r_a when X"52", r_y when X"56", + r_a when X"53", r_y when X"57", X"A" when others; - + a_p1 <= r_a + X"1"; a_p1_z <= '1' when a_p1 = X"0" else '0'; a_p1_c <= '1' when a_p1 = X"0" else '0'; @@ -247,39 +250,39 @@ m_m1 <= ram_do - X"1"; --m_m1_z <= '1' when m_m1 = X"0" else '0'; --m_m1_c <= '1' when m_m1 = X"F" else '0'; -with rom_data(2 downto 0) select +with rom_data(2 downto 0) select m_set_bit <= ram_do or X"1" when "000", ram_do or X"2" when "001", ram_do or X"4" when "010", ram_do or X"8" when others; -with rom_data(2 downto 0) select +with rom_data(2 downto 0) select m_clr_bit <= ram_do and not X"1" when "000", ram_do and not X"2" when "001", ram_do and not X"4" when "010", ram_do and not X"8" when others; - + m_tst_bit <= ram_do(to_integer(unsigned(rom_data(1 downto 0)))); rola <= r_a(2 downto 0) & r_cf; -rola_z <= '1' when rola = X"0" else '0'; +rola_z <= '1' when rola = X"0" else '0'; rora <= r_cf & r_a(3 downto 1); -rora_z <= '1' when rora = X"0" else '0'; +rora_z <= '1' when rora = X"0" else '0'; nega <= not(r_a) + X"1"; -nega_z <= '1' when nega = X"0" else '0'; +nega_z <= '1' when nega = X"0" else '0'; adc <= ('0'&ram_do) + ('0'&r_a) + ("0000"&r_cf); -adc_z <= '1' when adc(3 downto 0) = X"0" else '0'; +adc_z <= '1' when adc(3 downto 0) = X"0" else '0'; adc_c <= '1' when adc(4) = '1' else '0'; sbc <= ('0'&ram_do) - ('0'&r_a) - ("0000"&r_cf); -sbc_z <= '1' when sbc(3 downto 0) = X"0" else '0'; +sbc_z <= '1' when sbc(3 downto 0) = X"0" else '0'; sbc_c <= '1' when sbc(4) = '1' else '0'; cma <= ('0'&ram_do) - ('0'&r_a); -cma_z <= '1' when cma(3 downto 0) = X"0" else '0'; +cma_z <= '1' when cma(3 downto 0) = X"0" else '0'; cma_c <= '1' when cma(4) = '1' else '0'; a_pim <= ('0'&rom_data(3 downto 0)) + ('0'&r_a); @@ -295,25 +298,25 @@ im_ma_z <= '1' when im_ma(3 downto 0) = X"0" else '0'; im_ma_c <= '1' when im_ma(4) = '1' else '0'; a_and_m <= r_a and ram_do; -a_and_m_z <= '1' when a_and_m = X"0" else '0'; - +a_and_m_z <= '1' when a_and_m = X"0" else '0'; + a_or_m <= r_a or ram_do; -a_or_m_z <= '1' when a_or_m = X"0" else '0'; +a_or_m_z <= '1' when a_or_m = X"0" else '0'; a_xor_m <= r_a xor ram_do; a_xor_m_z <= '1' when a_xor_m = X"0" else '0'; do_da <= '1' when (r_a > X"9") or (r_cf = '1') else '0'; -daa <= r_a + X"6"; +daa <= r_a + X"6"; daa_z <= '1' when daa = X"0" else '0'; daa_c <= '1' when r_a > X"9" else '0'; -das <= r_a + X"A"; +das <= r_a + X"A"; das_z <= '1' when das = X"0" else '0'; das_c <= '1' when r_a > X"5" else '0'; -dca <= r_a + X"F"; +dca <= r_a + X"F"; dca_z <= '1' when dca = X"0" else '0'; dca_c <= '1' when dca = X"F" else '0'; @@ -333,9 +336,9 @@ sel_bit_y <= "0001" when "00", "0010" when "01", "0100" when "10", "1000" when others; - -imm_x7_z <= '1' when rom_data(2 downto 0) = "000" else '0'; -imm_xF_z <= '1' when rom_data(3 downto 0) = "0000" else '0'; + +imm_x7_z <= '1' when rom_data(2 downto 0) = "000" else '0'; +imm_xF_z <= '1' when rom_data(3 downto 0) = "0000" else '0'; process (clock_n) -- register data before memory value update at middle cycle begin @@ -347,34 +350,33 @@ begin if m_m1 = X"0" then m_m1_z <= '1'; else m_m1_z <= '0'; end if; if m_m1 = X"F" then m_m1_c <= '1'; else m_m1_c <= '0'; end if; end if; -end process; +end process; process (clock) begin if rising_edge(clock) then -- mem <= ram_do; -- if ram_do = X"0" then mem_z <= '1'; else mem_z <= '0'; end if; - irq_n_r <= irq_n; r_nf <= not irq_n; - if irq_n = '0' and irq_n_r = '1' and r_pio(2) = '1' then - interrupt_pending <= '1'; + if irq_n = '0' and irq_n_r = '1' and r_pio(2) = '1' then + interrupt_pending <= '1'; end if; - + if reset = '1' then r_pc <= (others=>'0'); r_pa <= (others=>'0'); r_si <= (others=>'0'); - r_a <= (others=>'0'); - r_x <= (others=>'0'); + r_a <= (others=>'0'); + r_x <= (others=>'0'); r_y <= (others=>'0'); - r_stf <= '1'; - r_zf <= '0'; - r_cf <= '0'; - r_vf <= '0'; - r_sf <= '0'; - r_nf <= '0'; - r_pio <= (others=>'0'); + r_stf <= '1'; + r_zf <= '0'; + r_cf <= '0'; + r_vf <= '0'; + r_sf <= '0'; + r_nf <= '0'; + r_pio <= (others=>'0'); r_th <= (others=>'0'); r_tl <= (others=>'0'); r_tp <= (others=>'0'); @@ -382,28 +384,49 @@ begin r_sb <= (others=>'0'); r_sbcnt <= (others=>'0'); interrupt_pending <= '0'; + timer_interrupt_pending <= '0'; stack <= (others=>(others=>'0')); single_byte_op <= '1'; else - if ena = '1' then - + tc_n_r <= tc_n; + if (tc_n = '0' and tc_n_r = '1' and r_pio(6) = '1') or + (ena = '1' and r_pio(7) = '1') + then + r_tl <= r_tl + 1; + if r_tl = X"F" then + r_th <= r_th + 1; + if r_th = X"F" then + if r_pio(1) = '1' then + timer_interrupt_pending <= '1'; + end if; + r_vf <= '1'; + end if; + end if; + end if; + + if ena = '1' then + op_code <= rom_data; single_byte_op <= '1'; - if r_pc = "111111" then + if r_pc = "111111" then r_pc <= "000000"; r_pa <= r_pa + "0001"; - else + else r_pc <= r_pc + "000001"; end if; - + if single_byte_op = '1' then - if interrupt_pending = '1' then + if interrupt_pending = '1' or timer_interrupt_pending = '1' then stack(to_integer(unsigned(r_si)))(13 downto 0) <= (r_cf & r_zf & r_stf & r_pa & r_pc); r_pc <= "000010"; r_pa <= "00000"; r_si <= r_si + "01"; - interrupt_pending <= '0'; + if interrupt_pending = '1' then + interrupt_pending <= '0'; + elsif timer_interrupt_pending = '1' then + timer_interrupt_pending <= '0'; + end if; else -- no irq case rom_data is when X"00" => r_stf <='1'; -- nop @@ -419,24 +442,24 @@ begin when X"04" => r_stf <='1'; r_y <= r_a; -- tay Y <- A when X"05" => r_stf <='1'; r_th <= r_a; -- tath TH <- A when X"06" => r_stf <='1'; r_tl <= r_a; -- tatl TL <- A - when X"07" => r_stf <='1'; r_sb <= r_a; -- tas SB <- A + when X"07" => r_stf <='1'; r_sb <= r_a; -- tas SB <- A when X"08" => r_stf <= not y_p1_c; r_y <= y_p1; r_zf <= y_p1_z; -- icy Y <- Y+1 - when X"09" => r_stf <= not m_p1_c; r_zf <= m_p1_z; -- icm M[X,Y] <- M[X,Y]+1 + when X"09" => r_stf <= not m_p1_c; r_zf <= m_p1_z; -- icm M[X,Y] <- M[X,Y]+1 when X"0A" => r_stf <= not y_p1_c; r_y <= y_p1; r_zf <= y_p1_z; -- stic M[X,Y] <- A; Y <- Y+1 when X"0B" => r_stf <='1'; r_a <= mem; r_zf <= mem_z; -- x A <- M[X,Y]; M[X,Y] <- A - when X"0C" => r_stf <= not r_a(3); r_a <= rola; r_zf <= rola_z; r_cf <= r_a(3); -- rol - when X"0D" => r_stf <='1'; r_a <= mem; r_zf <= mem_z; -- l A <- M[X,Y]; - when X"0E" => r_stf <= not adc_c; r_a <= adc(3 downto 0); r_zf <= adc_z; r_cf <= adc_c; -- adc A <- M[X,Y]+A+CF; - when X"0F" => r_stf <= not a_and_m_z; r_a <= a_and_m; r_zf <= a_and_m_z; -- and A <- A & M[X,Y]; - when X"10" => - if do_da = '1' then r_stf <= not daa_c; r_a <= daa; r_cf <= daa_c; -- daa A <- A + 6 ; si A>9 or CF + when X"0C" => r_stf <= not r_a(3); r_a <= rola; r_zf <= rola_z; r_cf <= r_a(3); -- rol + when X"0D" => r_stf <='1'; r_a <= mem; r_zf <= mem_z; -- l A <- M[X,Y]; + when X"0E" => r_stf <= not adc_c; r_a <= adc(3 downto 0); r_zf <= adc_z; r_cf <= adc_c; -- adc A <- M[X,Y]+A+CF; + when X"0F" => r_stf <= not a_and_m_z; r_a <= a_and_m; r_zf <= a_and_m_z; -- and A <- A & M[X,Y]; + when X"10" => + if do_da = '1' then r_stf <= not daa_c; r_a <= daa; r_cf <= daa_c; -- daa A <- A + 6 ; si A>9 or CF else r_stf <= '1'; r_cf <= '0'; end if; - when X"11" => - if do_da = '1' then r_stf <= not das_c; r_a <= das; r_cf <= das_c; -- das A <- A + 10; si A>9 or CF + when X"11" => + if do_da = '1' then r_stf <= not das_c; r_a <= das; r_cf <= das_c; -- das A <- A + 10; si A>9 or CF else r_stf <= '1'; r_cf <= '0'; end if; - when X"12" => r_stf <='1'; r_a <= k_port_in; r_zf <= k_port_in_z; -- inK A <- K - when X"13" => r_stf <='1'; -- inR A <- R(Y) - if r_y = X"0" then r_a <= r0_port_in; r_zf <= r0_port_in_z; end if; + when X"12" => r_stf <='1'; r_a <= k_port_in; r_zf <= k_port_in_z; -- inK A <- K + when X"13" => r_stf <='1'; -- inR A <- R(Y) + if r_y = X"0" then r_a <= r0_port_in; r_zf <= r0_port_in_z; end if; if r_y = X"1" then r_a <= r1_port_in; r_zf <= r1_port_in_z; end if; if r_y = X"2" then r_a <= r2_port_in; r_zf <= r2_port_in_z; end if; if r_y = X"3" then r_a <= r3_port_in; r_zf <= r3_port_in_z; end if; @@ -444,25 +467,25 @@ begin when X"15" => r_stf <='1'; r_a <= r_th; r_zf <= th_z; -- ttha A <- TH when X"16" => r_stf <='1'; r_a <= r_tl; r_zf <= tl_z; -- ttla A <- TH when X"17" => r_stf <='1'; r_a <= r_sb; r_zf <= sb_z; -- tsa A <- SB - when X"18" => r_stf <= not y_m1_c; r_y <= y_m1; -- dcy Y <- Y-1 + when X"18" => r_stf <= not y_m1_c; r_y <= y_m1; -- dcy Y <- Y-1 when X"19" => r_stf <= not m_m1_c; r_zf <= m_m1_z; -- dcm M[X,Y] <- M[X,Y]-1 when X"1A" => r_stf <= not y_m1_c; r_y <= y_m1; r_zf <= y_m1_z; -- stdc M[X,Y] <- A; Y <- Y-1 when X"1B" => r_stf <='1'; r_a <= r_x; r_x <= r_a; r_zf <= x_z; -- xx A <- X, X <- A - when X"1C" => r_stf <= not r_a(0); r_a <= rora; r_zf <= rora_z; r_cf <= r_a(0); -- ror - when X"1D" => r_stf <='1'; -- st M[X,Y] <- A - when X"1E" => r_stf <= not sbc_c; r_a <= sbc(3 downto 0); r_zf <= sbc_z; r_cf <= sbc_c; -- sbc A <- M[X,Y]-A-CF; - when X"1F" => r_stf <= not a_or_m_z; r_a <= a_or_m; r_zf <= a_or_m_z; -- or A <- A | M[X,Y]; + when X"1C" => r_stf <= not r_a(0); r_a <= rora; r_zf <= rora_z; r_cf <= r_a(0); -- ror + when X"1D" => r_stf <='1'; -- st M[X,Y] <- A + when X"1E" => r_stf <= not sbc_c; r_a <= sbc(3 downto 0); r_zf <= sbc_z; r_cf <= sbc_c; -- sbc A <- M[X,Y]-A-CF; + when X"1F" => r_stf <= not a_or_m_z; r_a <= a_or_m; r_zf <= a_or_m_z; -- or A <- A | M[X,Y]; when X"20" => r_stf <='1'; -- setR - if r_y(3 downto 2) = "00" then r0_port_out <= (r0_port_in or sel_bit_y ); end if; - if r_y(3 downto 2) = "01" then r1_port_out <= (r1_port_in or sel_bit_y ); end if; - if r_y(3 downto 2) = "10" then r2_port_out <= (r2_port_in or sel_bit_y ); end if; - if r_y(3 downto 2) = "11" then r3_port_out <= (r3_port_in or sel_bit_y ); end if; + if r_y(3 downto 2) = "00" then r0_port_out <= (r0_port_in or sel_bit_y ); end if; + if r_y(3 downto 2) = "01" then r1_port_out <= (r1_port_in or sel_bit_y ); end if; + if r_y(3 downto 2) = "10" then r2_port_out <= (r2_port_in or sel_bit_y ); end if; + if r_y(3 downto 2) = "11" then r3_port_out <= (r3_port_in or sel_bit_y ); end if; when X"21" => r_stf <='1'; r_cf <= '1'; -- setCF when X"22" => r_stf <='1'; -- clrR - if r_y(3 downto 2) = "00" then r0_port_out <= (r0_port_in and not sel_bit_y ); end if; - if r_y(3 downto 2) = "01" then r1_port_out <= (r1_port_in and not sel_bit_y ); end if; - if r_y(3 downto 2) = "10" then r2_port_out <= (r2_port_in and not sel_bit_y ); end if; - if r_y(3 downto 2) = "11" then r3_port_out <= (r3_port_in and not sel_bit_y ); end if; + if r_y(3 downto 2) = "00" then r0_port_out <= (r0_port_in and not sel_bit_y ); end if; + if r_y(3 downto 2) = "01" then r1_port_out <= (r1_port_in and not sel_bit_y ); end if; + if r_y(3 downto 2) = "10" then r2_port_out <= (r2_port_in and not sel_bit_y ); end if; + if r_y(3 downto 2) = "11" then r3_port_out <= (r3_port_in and not sel_bit_y ); end if; when X"23" => r_stf <='1'; r_cf <= '0'; -- clrCF when X"24" => -- tstR if r_y(3 downto 2) = "00" then r_stf <= not r0_port_in(to_integer(unsigned(r_y(1 downto 0)))); end if; @@ -476,17 +499,17 @@ begin when X"29" => r_stf <= not r_zf; -- tstz (ZF) when X"2A" => r_stf <= '1'; r_zf <= sb_z; -- sts M[X,Y] <- SB when X"2B" => r_stf <= '1'; r_sb <= mem; r_zf <= mem_z; -- ls SB <- M[X,Y] - when X"2C" => r_stf <= '1'; -- rts + when X"2C" => r_stf <= '1'; -- rts r_pa <= stack(to_integer(unsigned(r_si-"01")))(10 downto 6); r_pc <= stack(to_integer(unsigned(r_si-"01")))( 5 downto 0); r_si <= r_si - "01"; when X"2D" => r_stf <= not nega_z; r_a <= nega; -- negA A <- -A when X"2E" => r_stf <= not cma_z; r_zf <= cma_z; r_cf <= cma_c; -- c M[X,Y]-A ?= - when X"2F" => r_stf <= not a_xor_m_z; r_a <= a_xor_m; r_zf <= a_xor_m_z;-- eor A <- A xor M[X,Y]; - when X"30" | X"31" | X"32" | X"33" => r_stf <='1'; -- sbit M[X,Y](op&3) <- 1 + when X"2F" => r_stf <= not a_xor_m_z; r_a <= a_xor_m; r_zf <= a_xor_m_z;-- eor A <- A xor M[X,Y]; + when X"30" | X"31" | X"32" | X"33" => r_stf <='1'; -- sbit M[X,Y](op&3) <- 1 when X"34" | X"35" | X"36" | X"37" => r_stf <='1'; -- rbit M[X,Y](op&3) <- 0 when X"38" | X"39" | X"3A" | X"3B" => r_stf <= not m_tst_bit; -- tbit M[X,Y](op&3) == 1 - when X"3C" => -- rti + when X"3C" => -- rti r_pa <= stack(to_integer(unsigned(r_si-"01")))(10 downto 6); r_pc <= stack(to_integer(unsigned(r_si-"01")))( 5 downto 0); r_stf <= stack(to_integer(unsigned(r_si-"01")))(11); @@ -494,7 +517,7 @@ begin r_cf <= stack(to_integer(unsigned(r_si-"01")))(13); r_si <= r_si - "01"; when X"3D" => single_byte_op <= '0'; -- jpa - when X"3E" => single_byte_op <= '0'; -- en + when X"3E" => single_byte_op <= '0'; -- en when X"3F" => single_byte_op <= '0'; -- dis when X"40" => r_stf <= '1'; r0_port_out <= (r0_port_in or X"1"); -- setd RO(op&3) <- 1 when X"41" => r_stf <= '1'; r0_port_out <= (r0_port_in or X"2"); -- setd RO(op&3) <- 1 @@ -505,39 +528,39 @@ begin when X"46" => r_stf <= '1'; r0_port_out <= (r0_port_in and not X"4"); -- setd RO(op&3) <- 0 when X"47" => r_stf <= '1'; r0_port_out <= (r0_port_in and not X"8"); -- setd RO(op&3) <- 0 when X"48" | X"49" | X"4A" | X"4B" => -- tstd R2(op&3) ?= - r_stf <= not r2_port_in(to_integer(unsigned(rom_data(1 downto 0)))); - when X"4C" | X"4D" | X"4E" | X"4F" => -- tba A(op&3) ?= - r_stf <= not r_a(to_integer(unsigned(rom_data(1 downto 0)))); + r_stf <= not r2_port_in(to_integer(unsigned(rom_data(1 downto 0)))); + when X"4C" | X"4D" | X"4E" | X"4F" => -- tba A(op&3) ?= + r_stf <= not r_a(to_integer(unsigned(rom_data(1 downto 0)))); when X"50" | X"51" | X"52" | X"53" => -- xd A <-> M[0,op&3] - r_stf <= '1'; r_a <= mem; r_zf <= mem_z; + r_stf <= '1'; r_a <= mem; r_zf <= mem_z; when X"54" | X"55" | X"56" | X"57" => -- xyd Y <-> M[0,op&3] - r_stf <= '1'; r_y <= mem; r_zf <= mem_z; + r_stf <= '1'; r_y <= mem; r_zf <= mem_z; when X"58" | X"59" | X"5A" | X"5B" | X"5C" | X"5D" | X"5E" | X"5F" => -- lxi imm (op&7) r_stf <='1'; r_x <= '0' & rom_data(2 downto 0); r_zf <= imm_x7_z; - when X"60" | X"61" | X"62" | X"63" | X"64" | X"65" | X"66" | X"67" => -- call addr - single_byte_op <= '0'; - when X"68" | X"69" | X"6A" | X"6B" | X"6C" | X"6D" | X"6E" | X"6F" => -- jpl addr - single_byte_op <= '0'; - when X"70" | X"71" | X"72" | X"73" | X"74" | X"75" | X"76" | X"77" | + when X"60" | X"61" | X"62" | X"63" | X"64" | X"65" | X"66" | X"67" => -- call addr + single_byte_op <= '0'; + when X"68" | X"69" | X"6A" | X"6B" | X"6C" | X"6D" | X"6E" | X"6F" => -- jpl addr + single_byte_op <= '0'; + when X"70" | X"71" | X"72" | X"73" | X"74" | X"75" | X"76" | X"77" | X"78" | X"79" | X"7A" | X"7B" | X"7C" | X"7D" | X"7E" | X"7F" => -- ai A <- A+imm (op&F) - r_stf <= not a_pim_c; r_a <= a_pim(3 downto 0); r_zf <= a_pim_z; r_cf <= a_pim_c; - when X"80" | X"81" | X"82" | X"83" | X"84" | X"85" | X"86" | X"87" | + r_stf <= not a_pim_c; r_a <= a_pim(3 downto 0); r_zf <= a_pim_z; r_cf <= a_pim_c; + when X"80" | X"81" | X"82" | X"83" | X"84" | X"85" | X"86" | X"87" | X"88" | X"89" | X"8A" | X"8B" | X"8C" | X"8D" | X"8E" | X"8F" => -- lyi Y <- imm (op&F) - r_stf <='1'; r_y <= rom_data(3 downto 0); r_zf <= imm_xF_z; - when X"90" | X"91" | X"92" | X"93" | X"94" | X"95" | X"96" | X"97" | + r_stf <='1'; r_y <= rom_data(3 downto 0); r_zf <= imm_xF_z; + when X"90" | X"91" | X"92" | X"93" | X"94" | X"95" | X"96" | X"97" | X"98" | X"99" | X"9A" | X"9B" | X"9C" | X"9D" | X"9E" | X"9F" => -- li A <- imm (op&F) - r_stf <='1'; r_a <= rom_data(3 downto 0); r_zf <= imm_xF_z; - when X"A0" | X"A1" | X"A2" | X"A3" | X"A4" | X"A5" | X"A6" | X"A7" | + r_stf <='1'; r_a <= rom_data(3 downto 0); r_zf <= imm_xF_z; + when X"A0" | X"A1" | X"A2" | X"A3" | X"A4" | X"A5" | X"A6" | X"A7" | X"A8" | X"A9" | X"AA" | X"AB" | X"AC" | X"AD" | X"AE" | X"AF" => -- cyi imm - Y ?= - r_stf <= not im_my_z; r_zf <= im_my_z; r_cf <= im_my_c; - when X"B0" | X"B1" | X"B2" | X"B3" | X"B4" | X"B5" | X"B6" | X"B7" | + r_stf <= not im_my_z; r_zf <= im_my_z; r_cf <= im_my_c; + when X"B0" | X"B1" | X"B2" | X"B3" | X"B4" | X"B5" | X"B6" | X"B7" | X"B8" | X"B9" | X"BA" | X"BB" | X"BC" | X"BD" | X"BE" | X"BF" => -- ci imm - A ?= - r_stf <= not im_ma_z; r_zf <= im_ma_z; r_cf <= im_ma_c; + r_stf <= not im_ma_z; r_zf <= im_ma_z; r_cf <= im_ma_c; when others => r_stf <='1'; -- jmp addr if ST (op_code C0..FF) if r_stf = '1' then r_pc <= rom_data(5 downto 0); end if; -- (let r_pa be incremented when r_pc = 0x3F) end case; - end if ; - else -- 2 bytes op_code, rom_data = 2nd byte + end if ; + else -- 2 bytes op_code, rom_data = 2nd byte case op_code is when X"3D" => r_stf <='1'; r_pa <= rom_data(4 downto 0); r_pc <= r_a & "00"; -- jpa PA <- data&0x1f; PC <- A*4 when X"3E" => r_stf <='1'; r_pio <= r_pio or rom_data; -- en PIO <- PIO or imm data @@ -548,7 +571,7 @@ begin stack(to_integer(unsigned(r_si)))(10 downto 0) <= (r_pa & r_pc) + '1'; r_pc <= rom_data(5 downto 0); r_pa <= op_code(2 downto 0) & rom_data(7 downto 6); - r_si <= r_si + "01"; + r_si <= r_si + "01"; end if; when X"68" | X"69" | X"6A" | X"6B" | X"6C" | X"6D" | X"6E" | X"6F" => -- jpl if ST r_stf <= '1'; @@ -559,7 +582,7 @@ begin when others => r_stf <='1'; end case; end if; - + end if; end if; end if; @@ -574,7 +597,7 @@ begin end if; end if; end process; - + ram_do <= ram(to_integer(unsigned(ram_addr))); -end struct; \ No newline at end of file +end struct; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/bg_graphx.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/bg_graphx.vhd deleted file mode 100644 index f62270b7..00000000 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/bg_graphx.vhd +++ /dev/null @@ -1,278 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity bg_graphx is -port ( - clk : in std_logic; - addr : in std_logic_vector(11 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of bg_graphx is - type rom is array(0 to 4095) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"88",X"CC",X"22",X"22",X"66",X"CC",X"88",X"00",X"33",X"77",X"CC",X"88",X"88",X"77",X"33",X"00", - X"22",X"22",X"EE",X"EE",X"22",X"22",X"00",X"00",X"00",X"00",X"FF",X"FF",X"44",X"00",X"00",X"00", - X"22",X"22",X"AA",X"AA",X"EE",X"EE",X"66",X"00",X"66",X"FF",X"BB",X"99",X"99",X"CC",X"44",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"66",X"44",X"00",X"88",X"DD",X"FF",X"BB",X"99",X"88",X"00",X"00", - X"88",X"EE",X"EE",X"88",X"88",X"88",X"88",X"00",X"00",X"FF",X"FF",X"CC",X"66",X"33",X"11",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"66",X"44",X"00",X"11",X"BB",X"AA",X"AA",X"AA",X"EE",X"EE",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"EE",X"CC",X"00",X"00",X"99",X"99",X"99",X"DD",X"77",X"33",X"00", - X"00",X"00",X"00",X"EE",X"EE",X"00",X"00",X"00",X"CC",X"EE",X"BB",X"99",X"88",X"CC",X"CC",X"00", - X"CC",X"EE",X"AA",X"AA",X"22",X"22",X"CC",X"00",X"00",X"66",X"99",X"99",X"BB",X"FF",X"66",X"00", - X"88",X"CC",X"66",X"22",X"22",X"22",X"00",X"00",X"77",X"FF",X"99",X"99",X"99",X"FF",X"66",X"00", - X"EE",X"EE",X"88",X"88",X"88",X"EE",X"EE",X"00",X"33",X"77",X"CC",X"88",X"CC",X"77",X"33",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"EE",X"EE",X"00",X"66",X"FF",X"99",X"99",X"99",X"FF",X"FF",X"00", - X"44",X"66",X"22",X"22",X"66",X"CC",X"88",X"00",X"44",X"CC",X"88",X"88",X"CC",X"77",X"33",X"00", - X"88",X"CC",X"66",X"22",X"22",X"EE",X"EE",X"00",X"33",X"77",X"CC",X"88",X"88",X"FF",X"FF",X"00", - X"22",X"22",X"22",X"22",X"EE",X"EE",X"00",X"00",X"88",X"99",X"99",X"99",X"FF",X"FF",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"00",X"88",X"99",X"99",X"99",X"99",X"FF",X"FF",X"00", - X"EE",X"EE",X"22",X"22",X"66",X"CC",X"88",X"00",X"99",X"99",X"99",X"88",X"CC",X"77",X"33",X"00", - X"EE",X"EE",X"00",X"00",X"00",X"EE",X"EE",X"00",X"FF",X"FF",X"11",X"11",X"11",X"FF",X"FF",X"00", - X"22",X"22",X"EE",X"EE",X"22",X"22",X"00",X"00",X"88",X"88",X"FF",X"FF",X"88",X"88",X"00",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"66",X"44",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00", - X"22",X"66",X"EE",X"CC",X"88",X"EE",X"EE",X"00",X"88",X"CC",X"66",X"33",X"11",X"FF",X"FF",X"00", - X"22",X"22",X"22",X"22",X"EE",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00", - X"EE",X"EE",X"00",X"88",X"00",X"EE",X"EE",X"00",X"FF",X"FF",X"77",X"33",X"77",X"FF",X"FF",X"00", - X"EE",X"EE",X"CC",X"88",X"00",X"EE",X"EE",X"00",X"FF",X"FF",X"11",X"33",X"77",X"FF",X"FF",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"EE",X"CC",X"00",X"77",X"FF",X"88",X"88",X"88",X"FF",X"77",X"00", - X"00",X"88",X"88",X"88",X"88",X"EE",X"EE",X"00",X"77",X"FF",X"88",X"88",X"88",X"FF",X"FF",X"00", - X"AA",X"CC",X"EE",X"AA",X"22",X"EE",X"CC",X"00",X"77",X"FF",X"88",X"88",X"88",X"FF",X"77",X"00", - X"22",X"66",X"EE",X"CC",X"88",X"EE",X"EE",X"00",X"77",X"FF",X"99",X"88",X"88",X"FF",X"FF",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"66",X"44",X"00",X"00",X"55",X"DD",X"99",X"99",X"FF",X"66",X"00", - X"00",X"00",X"EE",X"EE",X"00",X"00",X"00",X"00",X"88",X"88",X"FF",X"FF",X"88",X"88",X"00",X"00", - X"CC",X"EE",X"22",X"22",X"22",X"EE",X"CC",X"00",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"00", - X"00",X"88",X"CC",X"EE",X"CC",X"88",X"00",X"00",X"FF",X"FF",X"11",X"00",X"11",X"FF",X"FF",X"00", - X"EE",X"EE",X"CC",X"88",X"CC",X"EE",X"EE",X"00",X"FF",X"FF",X"11",X"33",X"11",X"FF",X"FF",X"00", - X"66",X"EE",X"CC",X"88",X"CC",X"EE",X"66",X"00",X"CC",X"EE",X"77",X"33",X"77",X"EE",X"CC",X"00", - X"00",X"00",X"EE",X"EE",X"00",X"00",X"00",X"00",X"EE",X"FF",X"11",X"11",X"FF",X"EE",X"00",X"00", - X"22",X"22",X"22",X"AA",X"EE",X"EE",X"66",X"00",X"CC",X"EE",X"FF",X"BB",X"99",X"88",X"88",X"00", - X"00",X"00",X"00",X"00",X"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"00",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"11", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"88",X"88",X"88",X"88",X"88",X"88",X"88",X"FF", - X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"88",X"88",X"88",X"88",X"88",X"88",X"88", - X"44",X"AA",X"44",X"00",X"88",X"44",X"22",X"00",X"88",X"44",X"22",X"11",X"44",X"AA",X"44",X"00", - X"00",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"11",X"11",X"11",X"11",X"11",X"11",X"11",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", - X"00",X"00",X"00",X"00",X"00",X"BB",X"00",X"00",X"00",X"00",X"CC",X"EE",X"FF",X"33",X"00",X"00", - X"FF",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"CC",X"22",X"11",X"55",X"55",X"99",X"22",X"CC",X"33",X"44",X"88",X"AA",X"AA",X"99",X"44",X"33", - X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00",X"0C",X"0C",X"0C",X"0C",X"0F",X"0F",X"00",X"00", - X"0B",X"0B",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"0D",X"0D",X"0D",X"01",X"00",X"00",X"07",X"0F", - X"0F",X"00",X"00",X"0F",X"0F",X"0F",X"0B",X"0B",X"0F",X"00",X"00",X"07",X"0F",X"0F",X"0D",X"0D", - X"0F",X"00",X"00",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"0C",X"0C",X"0F",X"0F",X"0C",X"0C",X"0F", - X"03",X"03",X"03",X"0F",X"0E",X"00",X"00",X"0F",X"0C",X"0C",X"0C",X"0F",X"07",X"00",X"00",X"07", - X"03",X"0F",X"0E",X"00",X"00",X"03",X"03",X"03",X"0C",X"0F",X"07",X"00",X"00",X"0C",X"0C",X"0C", - X"00",X"00",X"0E",X"0F",X"03",X"03",X"03",X"03",X"00",X"00",X"07",X"0F",X"0C",X"0C",X"0C",X"0C", - X"00",X"F9",X"F9",X"F9",X"F9",X"F9",X"F9",X"F9",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"88",X"CC",X"6E",X"BF",X"6E",X"CC",X"88",X"00",X"F3",X"E3",X"F3",X"F3",X"F3",X"E3",X"F3", - X"00",X"F0",X"FB",X"FB",X"FA",X"FE",X"FE",X"F0",X"00",X"32",X"32",X"32",X"32",X"32",X"32",X"32", - X"00",X"88",X"4C",X"AE",X"DF",X"AE",X"4C",X"88",X"00",X"F3",X"FB",X"FB",X"FB",X"FB",X"FB",X"F3", - X"0F",X"6F",X"CF",X"8F",X"AF",X"BF",X"FF",X"00",X"23",X"33",X"33",X"33",X"33",X"33",X"33",X"00", - X"7F",X"EE",X"CC",X"88",X"00",X"00",X"00",X"00",X"0F",X"7F",X"0F",X"BF",X"FF",X"EE",X"CC",X"00", - X"00",X"00",X"FF",X"BF",X"AF",X"8F",X"CF",X"6F",X"00",X"00",X"33",X"33",X"33",X"33",X"33",X"33", - X"00",X"00",X"00",X"00",X"00",X"88",X"CC",X"EE",X"00",X"00",X"CC",X"EE",X"FF",X"BF",X"0F",X"7F", - X"0F",X"96",X"3C",X"78",X"78",X"2D",X"87",X"F0",X"87",X"D2",X"F0",X"E1",X"E1",X"F0",X"F0",X"F0", - X"78",X"68",X"48",X"80",X"00",X"00",X"00",X"00",X"5A",X"D2",X"C3",X"96",X"3C",X"68",X"C0",X"80", - X"00",X"F0",X"87",X"2D",X"78",X"78",X"3C",X"96",X"00",X"F0",X"F0",X"F0",X"E1",X"E1",X"F0",X"D2", - X"00",X"00",X"00",X"00",X"00",X"80",X"48",X"68",X"00",X"80",X"C0",X"68",X"3C",X"96",X"C3",X"D2", - X"FF",X"FF",X"DD",X"FF",X"BB",X"FF",X"FF",X"0F",X"7F",X"7F",X"0F",X"0F",X"1F",X"3F",X"1F",X"0F", - X"0F",X"0E",X"8C",X"08",X"00",X"00",X"00",X"00",X"FF",X"77",X"9F",X"0F",X"8F",X"0E",X"CC",X"08", - X"00",X"0F",X"FF",X"FF",X"BB",X"FF",X"DD",X"FF",X"00",X"0F",X"1F",X"3F",X"1F",X"2F",X"2F",X"5D", - X"00",X"00",X"00",X"00",X"00",X"08",X"8C",X"0E",X"00",X"08",X"CC",X"0E",X"8F",X"0F",X"9F",X"77", - X"DF",X"DF",X"F0",X"F0",X"F0",X"F0",X"DF",X"DF",X"EF",X"EF",X"FC",X"FC",X"FC",X"FC",X"EF",X"EF", - X"F7",X"EE",X"CC",X"88",X"00",X"00",X"00",X"00",X"F8",X"F0",X"F1",X"F3",X"F7",X"EE",X"CC",X"88", - X"00",X"DF",X"DF",X"F0",X"F0",X"F0",X"F0",X"DF",X"00",X"EF",X"EF",X"FC",X"FC",X"FC",X"FC",X"EF", - X"00",X"00",X"00",X"00",X"00",X"88",X"CC",X"EE",X"00",X"88",X"CC",X"EE",X"F7",X"F3",X"F1",X"F0", - X"FE",X"FF",X"11",X"00",X"71",X"00",X"10",X"00",X"77",X"11",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"10",X"00",X"71",X"00",X"11",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11", - X"EE",X"88",X"C0",X"C0",X"88",X"CC",X"EE",X"00",X"F7",X"F3",X"FE",X"7F",X"BF",X"11",X"F7",X"00", - X"00",X"00",X"EE",X"CC",X"88",X"C0",X"C0",X"88",X"00",X"00",X"F7",X"11",X"BF",X"7F",X"FE",X"F3", - X"44",X"00",X"00",X"00",X"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"18",X"10",X"20",X"40",X"51",X"91",X"22",X"00",X"00",X"01",X"01",X"0E",X"00",X"10",X"E0", - X"22",X"91",X"51",X"40",X"20",X"10",X"18",X"18",X"E0",X"10",X"00",X"0E",X"01",X"01",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"51",X"91",X"22",X"00",X"00",X"00",X"00",X"00",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"18",X"18",X"18",X"10",X"10",X"20",X"20",X"40",X"44",X"44",X"44",X"89",X"89",X"01",X"02",X"02", - X"40",X"20",X"20",X"10",X"10",X"18",X"18",X"18",X"02",X"02",X"01",X"89",X"89",X"44",X"44",X"44", - X"00",X"00",X"00",X"00",X"00",X"22",X"91",X"51",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04", - X"51",X"51",X"51",X"A2",X"00",X"00",X"00",X"00",X"02",X"02",X"04",X"00",X"00",X"00",X"00",X"00", - X"18",X"18",X"18",X"18",X"18",X"20",X"20",X"20",X"44",X"44",X"44",X"44",X"44",X"45",X"89",X"89", - X"20",X"20",X"20",X"18",X"18",X"18",X"18",X"18",X"89",X"89",X"45",X"44",X"44",X"44",X"44",X"44", - X"00",X"00",X"00",X"00",X"A2",X"51",X"51",X"51",X"00",X"00",X"00",X"00",X"00",X"04",X"02",X"02", - X"20",X"20",X"51",X"51",X"91",X"22",X"00",X"00",X"01",X"02",X"02",X"02",X"04",X"00",X"00",X"00", - X"18",X"18",X"18",X"18",X"18",X"18",X"20",X"20",X"44",X"44",X"44",X"44",X"44",X"44",X"89",X"89", - X"20",X"20",X"18",X"18",X"18",X"18",X"18",X"18",X"89",X"89",X"44",X"44",X"44",X"44",X"44",X"44", - X"00",X"00",X"22",X"91",X"51",X"51",X"20",X"20",X"00",X"00",X"00",X"04",X"02",X"02",X"02",X"01", - X"20",X"20",X"20",X"40",X"40",X"40",X"80",X"00",X"89",X"89",X"01",X"02",X"02",X"04",X"00",X"00", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"20",X"44",X"44",X"44",X"44",X"44",X"44",X"88",X"89", - X"20",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"89",X"88",X"44",X"44",X"44",X"44",X"44",X"44", - X"00",X"80",X"40",X"40",X"40",X"20",X"20",X"20",X"00",X"00",X"04",X"02",X"02",X"01",X"89",X"89", - X"91",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"40",X"40",X"40",X"40",X"89",X"89",X"89",X"89",X"8A",X"8A",X"8A",X"8C", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"28",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"28",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"40",X"40",X"40",X"40",X"20",X"20",X"20",X"20",X"8C",X"8A",X"8A",X"8A",X"89",X"89",X"89",X"89", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"91",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"91",X"91",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"04",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"40",X"40",X"40",X"40",X"80",X"89",X"89",X"89",X"8A",X"8A",X"8A",X"8A",X"8C", - X"18",X"18",X"18",X"18",X"18",X"28",X"28",X"28",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"28",X"28",X"28",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"80",X"40",X"40",X"40",X"40",X"20",X"20",X"20",X"8C",X"8A",X"8A",X"8A",X"8A",X"89",X"89",X"89", - X"00",X"00",X"00",X"00",X"00",X"00",X"91",X"91",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"04", - X"51",X"91",X"A2",X"A2",X"00",X"00",X"00",X"00",X"04",X"04",X"04",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"20",X"40",X"40",X"40",X"89",X"89",X"89",X"89",X"8A",X"8A",X"8A",X"8A", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"88", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"88",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"40",X"40",X"40",X"20",X"20",X"20",X"20",X"20",X"8A",X"8A",X"8A",X"8A",X"89",X"89",X"89",X"89", - X"00",X"00",X"00",X"00",X"A2",X"A2",X"91",X"51",X"00",X"00",X"00",X"00",X"00",X"04",X"04",X"04", - X"51",X"51",X"91",X"A2",X"A2",X"22",X"00",X"00",X"02",X"02",X"02",X"04",X"04",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"20",X"40",X"40",X"40",X"89",X"89",X"89",X"89",X"89",X"89",X"8A",X"8A", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"40",X"40",X"40",X"20",X"20",X"20",X"20",X"20",X"8A",X"8A",X"89",X"89",X"89",X"89",X"89",X"89", - X"00",X"00",X"22",X"A2",X"A2",X"91",X"51",X"51",X"00",X"00",X"00",X"04",X"04",X"02",X"02",X"02", - X"40",X"40",X"40",X"40",X"80",X"80",X"80",X"00",X"02",X"02",X"04",X"04",X"04",X"04",X"00",X"00", - X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"89",X"89",X"89",X"89",X"89",X"8A",X"8A",X"8A", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"44",X"44",X"44",X"44",X"44",X"44",X"44",X"44", - X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"8A",X"8A",X"8A",X"89",X"89",X"89",X"89",X"89", - X"00",X"80",X"80",X"80",X"40",X"40",X"40",X"40",X"00",X"00",X"04",X"04",X"04",X"04",X"02",X"02", - X"11",X"33",X"44",X"44",X"66",X"33",X"11",X"00",X"CC",X"EE",X"33",X"11",X"11",X"EE",X"CC",X"00", - X"44",X"44",X"77",X"77",X"44",X"44",X"00",X"00",X"00",X"00",X"FF",X"FF",X"22",X"00",X"00",X"00", - X"44",X"44",X"55",X"55",X"77",X"77",X"66",X"00",X"66",X"FF",X"DD",X"99",X"99",X"33",X"22",X"00", - X"33",X"77",X"44",X"44",X"44",X"66",X"22",X"00",X"11",X"BB",X"FF",X"DD",X"99",X"11",X"00",X"00", - X"11",X"77",X"77",X"11",X"11",X"11",X"11",X"00",X"00",X"FF",X"FF",X"33",X"66",X"CC",X"88",X"00", - X"33",X"77",X"44",X"44",X"44",X"66",X"22",X"00",X"88",X"DD",X"55",X"55",X"55",X"77",X"77",X"00", - X"33",X"77",X"44",X"44",X"44",X"77",X"33",X"00",X"00",X"99",X"99",X"99",X"BB",X"EE",X"CC",X"00", - X"00",X"00",X"00",X"77",X"77",X"00",X"00",X"00",X"33",X"77",X"DD",X"99",X"11",X"33",X"33",X"00", - X"33",X"77",X"55",X"55",X"44",X"44",X"33",X"00",X"00",X"66",X"99",X"99",X"DD",X"FF",X"66",X"00", - X"11",X"33",X"66",X"44",X"44",X"44",X"00",X"00",X"EE",X"FF",X"99",X"99",X"99",X"FF",X"66",X"00", - X"77",X"77",X"11",X"11",X"11",X"77",X"77",X"00",X"CC",X"EE",X"33",X"11",X"33",X"EE",X"CC",X"00", - X"33",X"77",X"44",X"44",X"44",X"77",X"77",X"00",X"66",X"FF",X"99",X"99",X"99",X"FF",X"FF",X"00", - X"22",X"66",X"44",X"44",X"66",X"33",X"11",X"00",X"22",X"33",X"11",X"11",X"33",X"EE",X"CC",X"00", - X"11",X"33",X"66",X"44",X"44",X"77",X"77",X"00",X"CC",X"EE",X"33",X"11",X"11",X"FF",X"FF",X"00", - X"44",X"44",X"44",X"44",X"77",X"77",X"00",X"00",X"11",X"99",X"99",X"99",X"FF",X"FF",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"77",X"77",X"00",X"11",X"99",X"99",X"99",X"99",X"FF",X"FF",X"00", - X"77",X"77",X"44",X"44",X"66",X"33",X"11",X"00",X"99",X"99",X"99",X"11",X"33",X"EE",X"CC",X"00", - X"77",X"77",X"00",X"00",X"00",X"77",X"77",X"00",X"FF",X"FF",X"88",X"88",X"88",X"FF",X"FF",X"00", - X"44",X"44",X"77",X"77",X"44",X"44",X"00",X"00",X"11",X"11",X"FF",X"FF",X"11",X"11",X"00",X"00", - X"33",X"77",X"44",X"44",X"44",X"66",X"22",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00", - X"44",X"66",X"77",X"33",X"11",X"77",X"77",X"00",X"11",X"33",X"66",X"CC",X"88",X"FF",X"FF",X"00", - X"44",X"44",X"44",X"44",X"77",X"77",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00", - X"77",X"77",X"00",X"11",X"00",X"77",X"77",X"00",X"FF",X"FF",X"EE",X"CC",X"EE",X"FF",X"FF",X"00", - X"77",X"77",X"33",X"11",X"00",X"77",X"77",X"00",X"FF",X"FF",X"88",X"CC",X"EE",X"FF",X"FF",X"00", - X"33",X"77",X"44",X"44",X"44",X"77",X"33",X"00",X"EE",X"FF",X"11",X"11",X"11",X"FF",X"EE",X"00", - X"00",X"11",X"11",X"11",X"11",X"77",X"77",X"00",X"EE",X"FF",X"11",X"11",X"11",X"FF",X"FF",X"00", - X"55",X"33",X"77",X"55",X"44",X"77",X"33",X"00",X"EE",X"FF",X"11",X"11",X"11",X"FF",X"EE",X"00", - X"44",X"66",X"77",X"33",X"11",X"77",X"77",X"00",X"EE",X"FF",X"99",X"11",X"11",X"FF",X"FF",X"00", - X"33",X"77",X"44",X"44",X"44",X"66",X"22",X"00",X"00",X"AA",X"BB",X"99",X"99",X"FF",X"66",X"00", - X"00",X"00",X"77",X"77",X"00",X"00",X"00",X"00",X"11",X"11",X"FF",X"FF",X"11",X"11",X"00",X"00", - X"33",X"77",X"44",X"44",X"44",X"77",X"33",X"00",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"00", - X"00",X"11",X"33",X"77",X"33",X"11",X"00",X"00",X"FF",X"FF",X"88",X"00",X"88",X"FF",X"FF",X"00", - X"77",X"77",X"33",X"11",X"33",X"77",X"77",X"00",X"FF",X"FF",X"88",X"CC",X"88",X"FF",X"FF",X"00", - X"66",X"77",X"33",X"11",X"33",X"77",X"66",X"00",X"33",X"77",X"EE",X"CC",X"EE",X"77",X"33",X"00", - X"00",X"00",X"77",X"77",X"00",X"00",X"00",X"00",X"77",X"FF",X"88",X"88",X"FF",X"77",X"00",X"00", - X"44",X"44",X"44",X"55",X"77",X"77",X"66",X"00",X"33",X"77",X"FF",X"DD",X"99",X"11",X"11",X"00", - X"00",X"00",X"00",X"00",X"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"00",X"00",X"00",X"00",X"00",X"88",X"88",X"88",X"88",X"88",X"88",X"88",X"88", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"FF", - X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"11",X"11",X"11",X"11",X"11",X"11",X"11", - X"22",X"55",X"22",X"00",X"11",X"22",X"44",X"00",X"11",X"22",X"44",X"88",X"22",X"55",X"22",X"00", - X"00",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"88",X"88",X"88",X"88",X"88",X"88",X"88",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", - X"00",X"00",X"00",X"00",X"00",X"DD",X"00",X"00",X"00",X"00",X"33",X"77",X"FF",X"CC",X"00",X"00", - X"FF",X"88",X"88",X"88",X"88",X"88",X"88",X"88",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"33",X"44",X"88",X"AA",X"AA",X"99",X"44",X"33",X"CC",X"22",X"11",X"55",X"55",X"99",X"22",X"CC", - X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00",X"03",X"03",X"03",X"03",X"0F",X"0F",X"00",X"00", - X"0D",X"0D",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"0B",X"0B",X"0B",X"08",X"00",X"00",X"0E",X"0F", - X"0F",X"00",X"00",X"0F",X"0F",X"0F",X"0D",X"0D",X"0F",X"00",X"00",X"0E",X"0F",X"0F",X"0B",X"0B", - X"0F",X"00",X"00",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"03",X"03",X"0F",X"0F",X"03",X"03",X"0F", - X"0C",X"0C",X"0C",X"0F",X"07",X"00",X"00",X"0F",X"03",X"03",X"03",X"0F",X"0E",X"00",X"00",X"0E", - X"0C",X"0F",X"07",X"00",X"00",X"0C",X"0C",X"0C",X"03",X"0F",X"0E",X"00",X"00",X"03",X"03",X"03", - X"00",X"00",X"07",X"0F",X"0C",X"0C",X"0C",X"0C",X"00",X"00",X"0E",X"0F",X"03",X"03",X"03",X"03", - X"00",X"F9",X"F9",X"F9",X"F9",X"F9",X"F9",X"F9",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"11",X"33",X"67",X"DF",X"67",X"33",X"11",X"00",X"FC",X"7C",X"FC",X"FC",X"FC",X"7C",X"FC", - X"00",X"F0",X"FD",X"FD",X"F5",X"F7",X"F7",X"F0",X"00",X"C4",X"C4",X"C4",X"C4",X"C4",X"C4",X"C4", - X"00",X"11",X"23",X"57",X"BF",X"57",X"23",X"11",X"00",X"FC",X"FD",X"FD",X"FD",X"FD",X"FD",X"FC", - X"0F",X"6F",X"3F",X"1F",X"5F",X"DF",X"FF",X"00",X"4C",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"00", - X"EF",X"77",X"33",X"11",X"00",X"00",X"00",X"00",X"0F",X"EF",X"0F",X"DF",X"FF",X"77",X"33",X"00", - X"00",X"00",X"FF",X"DF",X"5F",X"1F",X"3F",X"6F",X"00",X"00",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC", - X"00",X"00",X"00",X"00",X"00",X"11",X"33",X"77",X"00",X"00",X"33",X"77",X"FF",X"DF",X"0F",X"EF", - X"0F",X"96",X"C3",X"E1",X"E1",X"4B",X"1E",X"F0",X"1E",X"B4",X"F0",X"78",X"78",X"F0",X"F0",X"F0", - X"E1",X"61",X"21",X"10",X"00",X"00",X"00",X"00",X"A5",X"B4",X"3C",X"96",X"C3",X"61",X"30",X"10", - X"00",X"F0",X"1E",X"4B",X"E1",X"E1",X"C3",X"96",X"00",X"F0",X"F0",X"F0",X"78",X"78",X"F0",X"B4", - X"00",X"00",X"00",X"00",X"00",X"10",X"21",X"61",X"00",X"10",X"30",X"61",X"C3",X"96",X"3C",X"B4", - X"FF",X"FF",X"BB",X"FF",X"DD",X"FF",X"FF",X"0F",X"EF",X"EF",X"0F",X"0F",X"8F",X"CF",X"8F",X"0F", - X"0F",X"07",X"13",X"01",X"00",X"00",X"00",X"00",X"FF",X"EE",X"9F",X"0F",X"1F",X"07",X"33",X"01", - X"00",X"0F",X"FF",X"FF",X"DD",X"FF",X"BB",X"FF",X"00",X"0F",X"8F",X"CF",X"8F",X"4F",X"4F",X"AB", - X"00",X"00",X"00",X"00",X"00",X"01",X"13",X"07",X"00",X"01",X"33",X"07",X"1F",X"0F",X"9F",X"EE", - X"BF",X"BF",X"F0",X"F0",X"F0",X"F0",X"BF",X"BF",X"7F",X"7F",X"F3",X"F3",X"F3",X"F3",X"7F",X"7F", - X"FE",X"77",X"33",X"11",X"00",X"00",X"00",X"00",X"F1",X"F0",X"F8",X"FC",X"FE",X"77",X"33",X"11", - X"00",X"BF",X"BF",X"F0",X"F0",X"F0",X"F0",X"BF",X"00",X"7F",X"7F",X"F3",X"F3",X"F3",X"F3",X"7F", - X"00",X"00",X"00",X"00",X"00",X"11",X"33",X"77",X"00",X"11",X"33",X"77",X"FE",X"FC",X"F8",X"F0", - X"F7",X"FF",X"88",X"00",X"E8",X"00",X"80",X"00",X"EE",X"88",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"80",X"00",X"E8",X"00",X"88",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88", - X"77",X"11",X"30",X"30",X"11",X"33",X"77",X"00",X"FE",X"FC",X"F7",X"EF",X"DF",X"88",X"FE",X"00", - X"00",X"00",X"77",X"33",X"11",X"30",X"30",X"11",X"00",X"00",X"FE",X"88",X"DF",X"EF",X"F7",X"FC", - X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"81",X"81",X"80",X"40",X"20",X"A8",X"98",X"44",X"00",X"00",X"08",X"08",X"07",X"00",X"80",X"70", - X"44",X"98",X"A8",X"20",X"40",X"80",X"81",X"81",X"70",X"80",X"00",X"07",X"08",X"08",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"A8",X"98",X"44",X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"81",X"81",X"81",X"80",X"80",X"40",X"40",X"20",X"22",X"22",X"22",X"19",X"19",X"08",X"04",X"04", - X"20",X"40",X"40",X"80",X"80",X"81",X"81",X"81",X"04",X"04",X"08",X"19",X"19",X"22",X"22",X"22", - X"00",X"00",X"00",X"00",X"00",X"44",X"98",X"A8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02", - X"A8",X"A8",X"A8",X"54",X"00",X"00",X"00",X"00",X"04",X"04",X"02",X"00",X"00",X"00",X"00",X"00", - X"81",X"81",X"81",X"81",X"81",X"40",X"40",X"40",X"22",X"22",X"22",X"22",X"22",X"2A",X"19",X"19", - X"40",X"40",X"40",X"81",X"81",X"81",X"81",X"81",X"19",X"19",X"2A",X"22",X"22",X"22",X"22",X"22", - X"00",X"00",X"00",X"00",X"54",X"A8",X"A8",X"A8",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"04", - X"40",X"40",X"A8",X"A8",X"98",X"44",X"00",X"00",X"08",X"04",X"04",X"04",X"02",X"00",X"00",X"00", - X"81",X"81",X"81",X"81",X"81",X"81",X"40",X"40",X"22",X"22",X"22",X"22",X"22",X"22",X"19",X"19", - X"40",X"40",X"81",X"81",X"81",X"81",X"81",X"81",X"19",X"19",X"22",X"22",X"22",X"22",X"22",X"22", - X"00",X"00",X"44",X"98",X"A8",X"A8",X"40",X"40",X"00",X"00",X"00",X"02",X"04",X"04",X"04",X"08", - X"40",X"40",X"40",X"20",X"20",X"20",X"10",X"00",X"19",X"19",X"08",X"04",X"04",X"02",X"00",X"00", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"40",X"22",X"22",X"22",X"22",X"22",X"22",X"11",X"19", - X"40",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"19",X"11",X"22",X"22",X"22",X"22",X"22",X"22", - X"00",X"10",X"20",X"20",X"20",X"40",X"40",X"40",X"00",X"00",X"02",X"04",X"04",X"08",X"19",X"19", - X"98",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"40",X"40",X"40",X"40",X"20",X"20",X"20",X"20",X"19",X"19",X"19",X"19",X"15",X"15",X"15",X"13", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"41",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"41",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"20",X"20",X"20",X"20",X"40",X"40",X"40",X"40",X"13",X"15",X"15",X"15",X"19",X"19",X"19",X"19", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"98",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"98",X"98",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", - X"40",X"40",X"40",X"20",X"20",X"20",X"20",X"10",X"19",X"19",X"19",X"15",X"15",X"15",X"15",X"13", - X"81",X"81",X"81",X"81",X"81",X"41",X"41",X"41",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"41",X"41",X"41",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"10",X"20",X"20",X"20",X"20",X"40",X"40",X"40",X"13",X"15",X"15",X"15",X"15",X"19",X"19",X"19", - X"00",X"00",X"00",X"00",X"00",X"00",X"98",X"98",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"02", - X"A8",X"98",X"54",X"54",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00", - X"40",X"40",X"40",X"40",X"40",X"20",X"20",X"20",X"19",X"19",X"19",X"19",X"15",X"15",X"15",X"15", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"11", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"11",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"20",X"20",X"20",X"40",X"40",X"40",X"40",X"40",X"15",X"15",X"15",X"15",X"19",X"19",X"19",X"19", - X"00",X"00",X"00",X"00",X"54",X"54",X"98",X"A8",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02", - X"A8",X"A8",X"98",X"54",X"54",X"44",X"00",X"00",X"04",X"04",X"04",X"02",X"02",X"00",X"00",X"00", - X"40",X"40",X"40",X"40",X"40",X"20",X"20",X"20",X"19",X"19",X"19",X"19",X"19",X"19",X"15",X"15", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"20",X"20",X"20",X"40",X"40",X"40",X"40",X"40",X"15",X"15",X"19",X"19",X"19",X"19",X"19",X"19", - X"00",X"00",X"44",X"54",X"54",X"98",X"A8",X"A8",X"00",X"00",X"00",X"02",X"02",X"04",X"04",X"04", - X"20",X"20",X"20",X"20",X"10",X"10",X"10",X"00",X"04",X"04",X"02",X"02",X"02",X"02",X"00",X"00", - X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"19",X"19",X"19",X"19",X"19",X"15",X"15",X"15", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"81",X"22",X"22",X"22",X"22",X"22",X"22",X"22",X"22", - X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"15",X"15",X"15",X"19",X"19",X"19",X"19",X"19", - X"00",X"10",X"10",X"10",X"20",X"20",X"20",X"20",X"00",X"00",X"02",X"02",X"02",X"02",X"04",X"04"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/cs54xx_prog.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/cs54xx_prog.vhd deleted file mode 100644 index 6bc7f7fd..00000000 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/cs54xx_prog.vhd +++ /dev/null @@ -1,86 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity cs54xx_prog is -port ( - clk : in std_logic; - addr : in std_logic_vector(9 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of cs54xx_prog is - type rom is array(0 to 1023) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"C6",X"C6",X"52",X"12",X"3D",X"06",X"58",X"80",X"90",X"1B",X"0A",X"CA",X"1B",X"71",X"B8",X"C9", - X"3E",X"04",X"59",X"84",X"0D",X"1C",X"18",X"0D",X"1C",X"1A",X"0D",X"1C",X"1A",X"0D",X"1C",X"1A", - X"0D",X"1C",X"1D",X"1C",X"83",X"2F",X"71",X"08",X"0A",X"0D",X"80",X"38",X"F8",X"23",X"01",X"88", - X"20",X"08",X"0D",X"21",X"0E",X"1A",X"68",X"41",X"88",X"22",X"23",X"90",X"01",X"89",X"0D",X"0E", - X"1A",X"0D",X"7F",X"68",X"90",X"58",X"19",X"68",X"90",X"59",X"86",X"19",X"68",X"90",X"08",X"19", - X"68",X"90",X"08",X"19",X"0D",X"B1",X"D8",X"DF",X"B2",X"FF",X"90",X"85",X"1D",X"92",X"E6",X"5B", - X"81",X"0D",X"59",X"85",X"1D",X"91",X"23",X"0C",X"04",X"5B",X"0D",X"B0",X"F5",X"50",X"08",X"0D", - X"B0",X"F8",X"88",X"59",X"D3",X"50",X"08",X"0D",X"59",X"87",X"1A",X"50",X"1D",X"68",X"90",X"85", - X"0D",X"7F",X"68",X"90",X"0D",X"23",X"1C",X"23",X"0E",X"1C",X"1D",X"91",X"88",X"1D",X"68",X"66", - X"89",X"59",X"93",X"0F",X"B1",X"D8",X"8E",X"09",X"8A",X"0D",X"8E",X"38",X"DE",X"90",X"21",X"01", - X"38",X"E5",X"89",X"20",X"E7",X"89",X"22",X"8D",X"0D",X"7F",X"68",X"FC",X"58",X"19",X"68",X"FC", - X"59",X"8B",X"19",X"68",X"FC",X"08",X"19",X"68",X"FC",X"08",X"19",X"0D",X"B1",X"68",X"C0",X"C9", - X"B2",X"68",X"EC",X"90",X"8A",X"1D",X"92",X"68",X"D0",X"5B",X"89",X"0D",X"59",X"8A",X"1D",X"91", - X"23",X"0C",X"78",X"04",X"5B",X"0D",X"B0",X"68",X"E3",X"50",X"08",X"0D",X"B0",X"68",X"E6",X"59", - X"8D",X"68",X"BA",X"50",X"08",X"0D",X"59",X"8C",X"1A",X"50",X"1D",X"FC",X"8A",X"0D",X"7F",X"FC", - X"0D",X"23",X"1C",X"23",X"0E",X"1C",X"1D",X"91",X"8D",X"1D",X"68",X"D0",X"5A",X"8F",X"0D",X"8B", - X"3B",X"C3",X"90",X"81",X"03",X"88",X"0D",X"8A",X"23",X"0E",X"1D",X"89",X"0D",X"8B",X"0E",X"1D", - X"59",X"80",X"38",X"E1",X"5A",X"86",X"0D",X"23",X"8A",X"0E",X"1D",X"87",X"0D",X"8B",X"0E",X"1D", - X"59",X"8F",X"0D",X"7F",X"68",X"12",X"5A",X"8C",X"19",X"68",X"12",X"08",X"19",X"68",X"12",X"08", - X"19",X"68",X"12",X"8F",X"59",X"19",X"0D",X"B0",X"69",X"47",X"5A",X"0D",X"1C",X"23",X"0E",X"1C", - X"1D",X"7F",X"68",X"12",X"91",X"59",X"1D",X"5A",X"84",X"0D",X"8D",X"1D",X"7F",X"D7",X"85",X"0D", - X"8E",X"1D",X"8C",X"90",X"1D",X"68",X"12",X"85",X"0D",X"8E",X"1D",X"B0",X"E3",X"8F",X"1D",X"59", - X"1D",X"68",X"12",X"90",X"8C",X"1D",X"68",X"12",X"1B",X"53",X"54",X"80",X"13",X"5A",X"8F",X"1D", - X"54",X"53",X"1B",X"52",X"3E",X"04",X"3C",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"69",X"C0",X"00",X"00",X"69",X"DC",X"00",X"00",X"6A",X"55",X"00",X"00", - X"6A",X"5D",X"00",X"00",X"69",X"F9",X"00",X"00",X"6A",X"40",X"00",X"00",X"69",X"68",X"00",X"00", - X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00", - X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"52",X"3E",X"04",X"3C", - X"1B",X"53",X"54",X"5B",X"80",X"0D",X"59",X"85",X"1D",X"88",X"93",X"1D",X"5B",X"87",X"0D",X"59", - X"1A",X"5B",X"0D",X"59",X"1D",X"54",X"53",X"1B",X"52",X"3E",X"04",X"3C",X"1B",X"53",X"54",X"5B", - X"88",X"0D",X"59",X"8A",X"1D",X"8D",X"93",X"0A",X"5B",X"0D",X"51",X"08",X"0D",X"59",X"8C",X"1A", - X"51",X"1D",X"53",X"1B",X"52",X"54",X"3E",X"04",X"3C",X"1B",X"53",X"54",X"5A",X"81",X"0D",X"8C", - X"1D",X"82",X"0D",X"8D",X"1D",X"83",X"0D",X"8E",X"1D",X"80",X"0D",X"8F",X"1D",X"92",X"59",X"1D", - X"53",X"1B",X"52",X"54",X"3E",X"04",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"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"1B",X"53",X"54",X"5A",X"89",X"55",X"3F",X"04",X"25",X"CB",X"C8",X"25",X"CB",X"80",X"13",X"55", - X"1A",X"12",X"1A",X"55",X"E5",X"1B",X"53",X"54",X"87",X"55",X"3F",X"04",X"E5",X"1B",X"53",X"5B", - X"54",X"8F",X"55",X"3F",X"04",X"25",X"E8",X"E5",X"25",X"E8",X"80",X"13",X"55",X"1A",X"12",X"1A", - X"14",X"55",X"23",X"0C",X"BE",X"E5",X"53",X"1B",X"52",X"54",X"3E",X"04",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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",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; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu1.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu1.vhd deleted file mode 100644 index 1fe98b38..00000000 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu1.vhd +++ /dev/null @@ -1,1046 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity galaga_cpu1 is -port ( - clk : in std_logic; - addr : in std_logic_vector(13 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of galaga_cpu1 is - type rom is array(0 to 16383) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"3E",X"10",X"32",X"00",X"71",X"C3",X"C4",X"02",X"87",X"30",X"05",X"24",X"C3",X"10",X"00",X"FF", - X"85",X"6F",X"D0",X"24",X"C9",X"FF",X"FF",X"FF",X"77",X"23",X"10",X"FC",X"C9",X"FF",X"FF",X"FF", - X"7B",X"D6",X"20",X"5F",X"D0",X"15",X"C9",X"FF",X"21",X"00",X"91",X"06",X"F0",X"AF",X"DF",X"C9", - X"37",X"08",X"C3",X"B5",X"13",X"FF",X"FF",X"FF",X"C3",X"37",X"02",X"E9",X"21",X"00",X"93",X"06", - X"80",X"AF",X"DF",X"21",X"00",X"9B",X"06",X"80",X"DF",X"21",X"00",X"88",X"3E",X"80",X"06",X"80", - X"DF",X"C9",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"D9",X"ED",X"A0",X"EA",X"8F",X"00",X"F5",X"21",X"00",X"71", - X"36",X"10",X"3A",X"B9",X"9A",X"A7",X"28",X"16",X"AF",X"32",X"B9",X"9A",X"21",X"92",X"00",X"11", - X"00",X"70",X"01",X"04",X"00",X"D9",X"3E",X"A8",X"32",X"00",X"71",X"F1",X"ED",X"45",X"F1",X"D9", - X"ED",X"45",X"10",X"10",X"20",X"20",X"3A",X"08",X"3B",X"08",X"B2",X"17",X"00",X"17",X"86",X"1A", - X"6A",X"08",X"3A",X"08",X"3A",X"08",X"24",X"29",X"EC",X"1D",X"9E",X"2A",X"B9",X"1D",X"EB",X"23", - X"AA",X"1E",X"38",X"1D",X"48",X"09",X"6B",X"1B",X"B2",X"19",X"7C",X"1D",X"3A",X"08",X"8B",X"1F", - X"0A",X"1F",X"3A",X"08",X"D8",X"1D",X"30",X"22",X"D9",X"21",X"3A",X"08",X"3A",X"08",X"F2",X"20", - X"00",X"20",X"3A",X"08",X"8A",X"09",X"11",X"ED",X"83",X"21",X"B9",X"02",X"01",X"05",X"00",X"ED", - X"B0",X"1E",X"CB",X"21",X"EB",X"00",X"0E",X"11",X"ED",X"B0",X"C9",X"0E",X"1B",X"18",X"0C",X"1C", - X"24",X"11",X"10",X"12",X"11",X"24",X"24",X"24",X"24",X"19",X"1E",X"01",X"FF",X"FF",X"FF",X"FF", - X"14",X"06",X"14",X"0C",X"14",X"08",X"14",X"0A",X"1C",X"00",X"1C",X"12",X"1E",X"00",X"1E",X"12", - X"1C",X"02",X"1C",X"10",X"1E",X"02",X"1E",X"10",X"1C",X"04",X"1C",X"0E",X"1E",X"04",X"1E",X"0E", - X"1C",X"06",X"1C",X"0C",X"1E",X"06",X"1E",X"0C",X"1C",X"08",X"1C",X"0A",X"1E",X"08",X"1E",X"0A", - X"16",X"06",X"16",X"0C",X"16",X"08",X"16",X"0A",X"18",X"00",X"18",X"12",X"1A",X"00",X"1A",X"12", - X"18",X"02",X"18",X"10",X"1A",X"02",X"1A",X"10",X"18",X"04",X"18",X"0E",X"1A",X"04",X"1A",X"0E", - X"18",X"06",X"18",X"0C",X"1A",X"06",X"1A",X"0C",X"18",X"08",X"18",X"0A",X"1A",X"08",X"1A",X"0A", - X"21",X"40",X"80",X"11",X"41",X"80",X"01",X"7F",X"03",X"36",X"24",X"ED",X"B0",X"21",X"40",X"84", - X"11",X"41",X"84",X"01",X"7F",X"03",X"36",X"00",X"ED",X"B0",X"3E",X"04",X"06",X"20",X"DF",X"3E", - X"4E",X"06",X"20",X"DF",X"C9",X"21",X"21",X"98",X"34",X"7E",X"3C",X"E6",X"03",X"32",X"25",X"98", - X"28",X"10",X"0E",X"06",X"F7",X"EB",X"3A",X"21",X"98",X"6F",X"26",X"00",X"CD",X"66",X"0A",X"AF", - X"18",X"0A",X"0E",X"07",X"F7",X"3E",X"01",X"32",X"AD",X"9A",X"3E",X"08",X"32",X"A8",X"92",X"3E", - X"03",X"32",X"AE",X"92",X"32",X"0B",X"92",X"3A",X"25",X"98",X"A7",X"08",X"CD",X"7F",X"11",X"3A", - X"AE",X"92",X"A7",X"20",X"FA",X"3E",X"78",X"32",X"AE",X"92",X"CD",X"A4",X"28",X"CD",X"B0",X"25", - X"3E",X"02",X"32",X"AC",X"92",X"AF",X"CD",X"D5",X"12",X"AF",X"06",X"30",X"21",X"00",X"92",X"77", - X"2C",X"2C",X"10",X"FB",X"32",X"09",X"90",X"32",X"10",X"90",X"32",X"04",X"90",X"32",X"88",X"92", - X"32",X"2C",X"98",X"32",X"41",X"98",X"32",X"42",X"98",X"32",X"26",X"98",X"32",X"B0",X"99",X"32", - X"24",X"98",X"3C",X"32",X"2D",X"98",X"32",X"6D",X"98",X"32",X"28",X"98",X"32",X"0B",X"90",X"32", - X"08",X"90",X"32",X"0A",X"90",X"CD",X"00",X"2C",X"21",X"30",X"98",X"11",X"B5",X"01",X"06",X"04", - X"72",X"2C",X"73",X"2C",X"10",X"FA",X"3A",X"05",X"68",X"CB",X"4F",X"C0",X"0E",X"0B",X"21",X"B0", - X"83",X"CD",X"B3",X"13",X"C3",X"85",X"01",X"F5",X"08",X"F5",X"C5",X"D5",X"E5",X"DD",X"E5",X"FD", - X"E5",X"3A",X"04",X"68",X"57",X"3A",X"A0",X"92",X"E6",X"1C",X"4F",X"0F",X"A9",X"E6",X"18",X"4F", - X"3A",X"BE",X"99",X"CB",X"4A",X"20",X"02",X"3E",X"07",X"E6",X"07",X"B1",X"06",X"05",X"21",X"00", - X"A0",X"77",X"2C",X"0F",X"10",X"FB",X"32",X"30",X"68",X"AF",X"32",X"20",X"68",X"CB",X"4A",X"CA", - X"A8",X"02",X"4F",X"21",X"00",X"90",X"79",X"85",X"6F",X"7E",X"A7",X"20",X"03",X"0C",X"18",X"F3", - X"47",X"21",X"96",X"00",X"79",X"CB",X"27",X"85",X"6F",X"5E",X"23",X"56",X"EB",X"C5",X"CD",X"3B", - X"00",X"C1",X"78",X"81",X"4F",X"E6",X"E0",X"28",X"DA",X"21",X"00",X"70",X"11",X"B5",X"99",X"01", - X"03",X"00",X"D9",X"3E",X"71",X"32",X"00",X"71",X"3E",X"01",X"32",X"20",X"68",X"FD",X"E1",X"DD", - X"E1",X"E1",X"D1",X"C1",X"F1",X"08",X"F1",X"FB",X"C9",X"00",X"00",X"00",X"00",X"02",X"24",X"17", - X"0A",X"16",X"0C",X"18",X"ED",X"56",X"AF",X"21",X"E0",X"99",X"06",X"10",X"77",X"23",X"10",X"FC", - X"C3",X"6C",X"33",X"31",X"A0",X"90",X"AF",X"21",X"AC",X"92",X"06",X"04",X"DF",X"21",X"A0",X"9A", - X"06",X"20",X"DF",X"32",X"07",X"A0",X"32",X"15",X"92",X"32",X"B9",X"99",X"3D",X"21",X"CA",X"92", - X"06",X"10",X"DF",X"3E",X"01",X"32",X"20",X"68",X"21",X"C0",X"83",X"06",X"40",X"3E",X"24",X"DF", - X"26",X"80",X"06",X"40",X"DF",X"21",X"00",X"84",X"06",X"40",X"3E",X"03",X"DF",X"CD",X"60",X"01", - X"11",X"20",X"8A",X"3E",X"05",X"06",X"00",X"21",X"B9",X"02",X"0E",X"06",X"ED",X"B0",X"3D",X"20", - X"F6",X"21",X"BF",X"02",X"3E",X"2A",X"06",X"05",X"0E",X"FF",X"ED",X"A0",X"2B",X"12",X"1C",X"ED", - X"A0",X"10",X"F7",X"3E",X"01",X"32",X"01",X"92",X"21",X"05",X"A0",X"36",X"00",X"77",X"CD",X"3C", - X"00",X"CD",X"D6",X"00",X"CD",X"42",X"12",X"EF",X"3E",X"20",X"32",X"1E",X"90",X"3A",X"B5",X"99", - X"32",X"B8",X"99",X"AF",X"32",X"1E",X"90",X"32",X"20",X"90",X"AF",X"32",X"07",X"A0",X"32",X"15", - X"92",X"32",X"12",X"90",X"06",X"80",X"21",X"00",X"92",X"DF",X"3E",X"06",X"32",X"BE",X"99",X"EF", - X"CD",X"3C",X"00",X"CD",X"42",X"12",X"3A",X"B8",X"99",X"A7",X"3E",X"01",X"28",X"02",X"3E",X"02", - X"32",X"01",X"92",X"20",X"18",X"AF",X"32",X"03",X"92",X"3C",X"32",X"02",X"90",X"3A",X"01",X"92", - X"3D",X"28",X"FA",X"CD",X"42",X"12",X"CD",X"60",X"01",X"EF",X"CD",X"3C",X"00",X"AF",X"32",X"0B", - X"92",X"0E",X"13",X"F7",X"0E",X"01",X"F7",X"21",X"52",X"04",X"22",X"80",X"92",X"3A",X"80",X"99", - X"FE",X"FF",X"28",X"24",X"5F",X"0E",X"1B",X"CD",X"3D",X"04",X"3A",X"81",X"99",X"FE",X"FF",X"28", - X"17",X"E6",X"7F",X"5F",X"0E",X"1C",X"CD",X"3D",X"04",X"3A",X"81",X"99",X"CB",X"7F",X"20",X"08", - X"E6",X"7F",X"5F",X"0E",X"1D",X"CD",X"3D",X"04",X"3A",X"01",X"92",X"FE",X"02",X"28",X"F9",X"32", - X"B7",X"9A",X"CD",X"60",X"01",X"CD",X"3C",X"00",X"21",X"05",X"A0",X"36",X"00",X"36",X"01",X"21", - X"20",X"98",X"AF",X"06",X"A0",X"DF",X"32",X"B7",X"9A",X"32",X"B9",X"99",X"3C",X"32",X"AB",X"9A", - X"32",X"12",X"90",X"32",X"F2",X"98",X"CD",X"66",X"04",X"CD",X"7B",X"12",X"0E",X"04",X"F7",X"21", - X"AF",X"92",X"36",X"08",X"7E",X"A7",X"20",X"FC",X"21",X"90",X"92",X"06",X"10",X"DF",X"06",X"30", - X"21",X"B0",X"98",X"DF",X"21",X"B0",X"83",X"0E",X"0B",X"CD",X"B3",X"13",X"3E",X"01",X"32",X"80", - X"98",X"3A",X"80",X"99",X"32",X"3E",X"98",X"32",X"7E",X"98",X"C3",X"22",X"06",X"F7",X"EB",X"7B", - X"C6",X"40",X"5F",X"26",X"00",X"CD",X"66",X"0A",X"EB",X"0E",X"1E",X"CD",X"B3",X"13",X"CD",X"9E", - X"12",X"C9",X"00",X"81",X"19",X"56",X"02",X"81",X"19",X"62",X"04",X"81",X"19",X"6E",X"CD",X"3B", - X"07",X"CD",X"1E",X"08",X"18",X"F8",X"3A",X"00",X"68",X"4F",X"21",X"B3",X"99",X"3A",X"82",X"99", - X"CB",X"46",X"28",X"08",X"CB",X"49",X"20",X"04",X"3C",X"87",X"36",X"00",X"32",X"20",X"98",X"32", - X"60",X"98",X"11",X"F8",X"83",X"21",X"A8",X"04",X"CD",X"99",X"04",X"11",X"E3",X"83",X"21",X"A8", - X"04",X"3A",X"B3",X"99",X"A7",X"20",X"02",X"23",X"23",X"0E",X"07",X"ED",X"B0",X"21",X"AA",X"04", - X"11",X"C3",X"83",X"0E",X"04",X"ED",X"B0",X"C9",X"00",X"00",X"24",X"24",X"24",X"24",X"24",X"24", - X"24",X"E1",X"21",X"AF",X"92",X"36",X"04",X"3A",X"1D",X"90",X"A7",X"28",X"17",X"AF",X"32",X"13", - X"92",X"3C",X"32",X"25",X"90",X"3A",X"A7",X"92",X"A7",X"C2",X"5E",X"04",X"3A",X"1D",X"90",X"A7", - X"20",X"FA",X"18",X"1B",X"7E",X"A7",X"20",X"DF",X"CD",X"3B",X"07",X"3A",X"A7",X"92",X"32",X"43", - X"98",X"4F",X"3A",X"13",X"92",X"B1",X"20",X"0D",X"3A",X"25",X"98",X"A7",X"CA",X"63",X"06",X"CD", - X"85",X"01",X"C3",X"45",X"06",X"21",X"20",X"98",X"7E",X"35",X"A7",X"C2",X"8C",X"05",X"3A",X"B3", - X"99",X"A7",X"28",X"0C",X"21",X"4E",X"82",X"3A",X"40",X"98",X"C6",X"04",X"4F",X"CD",X"B3",X"13", - X"0E",X"02",X"F7",X"CD",X"31",X"13",X"CD",X"31",X"13",X"21",X"18",X"90",X"7E",X"A7",X"20",X"FC", - X"EF",X"CD",X"3C",X"00",X"CD",X"60",X"01",X"0E",X"15",X"F7",X"0E",X"16",X"F7",X"11",X"32",X"81", - X"2A",X"46",X"98",X"CD",X"66",X"0A",X"0E",X"18",X"F7",X"11",X"35",X"81",X"2A",X"44",X"98",X"CD", - X"66",X"0A",X"0E",X"19",X"F7",X"CD",X"85",X"0A",X"EB",X"0E",X"1A",X"CD",X"B3",X"13",X"21",X"AE", - X"92",X"36",X"0E",X"7E",X"A7",X"20",X"FC",X"CD",X"60",X"01",X"CD",X"00",X"30",X"AF",X"32",X"B0", - X"9A",X"21",X"AC",X"9A",X"11",X"B6",X"9A",X"1A",X"46",X"B0",X"28",X"09",X"04",X"05",X"28",X"02", - X"36",X"01",X"76",X"18",X"F2",X"CD",X"60",X"01",X"3A",X"B3",X"99",X"A7",X"CA",X"F1",X"06",X"3A", - X"60",X"98",X"3C",X"CA",X"F1",X"06",X"3A",X"13",X"92",X"3D",X"20",X"15",X"3A",X"B3",X"99",X"A7", - X"CA",X"17",X"06",X"3A",X"60",X"98",X"3C",X"CA",X"25",X"06",X"3A",X"13",X"92",X"3D",X"C2",X"25", - X"06",X"3A",X"A7",X"92",X"A7",X"28",X"06",X"3A",X"87",X"92",X"A7",X"20",X"FA",X"AF",X"32",X"B4", - X"99",X"3C",X"21",X"0E",X"90",X"77",X"7E",X"A7",X"20",X"FC",X"3A",X"A0",X"9A",X"32",X"48",X"98", - X"3A",X"AE",X"92",X"32",X"3F",X"98",X"CD",X"0C",X"11",X"CD",X"00",X"2C",X"3A",X"3F",X"98",X"32", - X"AE",X"92",X"3A",X"48",X"98",X"32",X"A0",X"9A",X"CD",X"7E",X"13",X"3A",X"43",X"98",X"A7",X"28", - X"03",X"CD",X"B0",X"25",X"3A",X"40",X"98",X"4F",X"3A",X"83",X"99",X"A1",X"32",X"07",X"A0",X"32", - X"15",X"92",X"3E",X"3F",X"CD",X"D5",X"12",X"37",X"08",X"CD",X"7F",X"11",X"3A",X"43",X"98",X"A7", - X"28",X"20",X"0E",X"03",X"F7",X"3E",X"80",X"32",X"B4",X"99",X"21",X"0E",X"90",X"3E",X"01",X"77", - X"7E",X"A7",X"20",X"FC",X"C3",X"25",X"06",X"3A",X"43",X"98",X"A7",X"20",X"14",X"CD",X"85",X"01", - X"18",X"0F",X"CD",X"85",X"01",X"3A",X"40",X"98",X"C6",X"04",X"4F",X"21",X"6E",X"82",X"CD",X"B3", - X"13",X"CD",X"3D",X"13",X"3A",X"AE",X"92",X"C6",X"1E",X"FE",X"78",X"38",X"02",X"3E",X"78",X"32", - X"AE",X"92",X"CD",X"31",X"13",X"3E",X"01",X"32",X"15",X"90",X"32",X"25",X"90",X"32",X"42",X"98", - X"0E",X"0B",X"21",X"B0",X"83",X"CD",X"B3",X"13",X"0E",X"0B",X"21",X"AE",X"83",X"CD",X"B3",X"13", - X"C3",X"5E",X"04",X"3A",X"88",X"92",X"5F",X"21",X"AE",X"9A",X"FE",X"28",X"20",X"03",X"21",X"B4", - X"9A",X"36",X"01",X"CD",X"31",X"13",X"0E",X"08",X"F7",X"CD",X"31",X"13",X"6B",X"26",X"00",X"11", - X"10",X"81",X"CD",X"66",X"0A",X"CD",X"31",X"13",X"3A",X"88",X"92",X"FE",X"28",X"28",X"1D",X"0E", - X"09",X"F7",X"CD",X"31",X"13",X"EB",X"3A",X"88",X"92",X"A7",X"28",X"0A",X"6F",X"26",X"00",X"CD", - X"66",X"0A",X"AF",X"12",X"E7",X"AF",X"12",X"3A",X"88",X"92",X"18",X"21",X"06",X"07",X"3A",X"A0", - X"92",X"E6",X"0F",X"20",X"F9",X"0E",X"0B",X"CB",X"40",X"28",X"01",X"0C",X"C5",X"F7",X"C1",X"3A", - X"A0",X"92",X"E6",X"0F",X"28",X"F9",X"10",X"E6",X"0E",X"0D",X"F7",X"3E",X"64",X"21",X"9F",X"92", - X"86",X"77",X"CD",X"3B",X"07",X"CD",X"31",X"13",X"CD",X"31",X"13",X"21",X"B0",X"83",X"0E",X"0B", - X"CD",X"B3",X"13",X"21",X"B3",X"83",X"0E",X"0B",X"CD",X"B3",X"13",X"0E",X"0B",X"F7",X"C3",X"EF", - X"04",X"76",X"F3",X"3A",X"00",X"71",X"FE",X"10",X"20",X"F9",X"21",X"38",X"07",X"11",X"00",X"70", - X"01",X"03",X"00",X"D9",X"3E",X"61",X"32",X"00",X"71",X"76",X"AF",X"CD",X"4F",X"09",X"FB",X"AF", - X"06",X"20",X"21",X"A0",X"9A",X"DF",X"11",X"F9",X"83",X"CD",X"3A",X"0A",X"11",X"E4",X"83",X"CD", - X"3A",X"0A",X"3A",X"B3",X"99",X"3C",X"21",X"E1",X"99",X"86",X"27",X"77",X"D2",X"5A",X"03",X"2B", - X"7E",X"C6",X"01",X"27",X"77",X"C3",X"5A",X"03",X"02",X"02",X"02",X"3A",X"40",X"98",X"A7",X"3E", - X"F9",X"28",X"02",X"3E",X"E4",X"DD",X"6F",X"06",X"10",X"21",X"90",X"92",X"EB",X"21",X"0D",X"08", - X"78",X"D7",X"4E",X"EB",X"7E",X"A7",X"28",X"1D",X"35",X"EB",X"26",X"83",X"DD",X"7D",X"6F",X"79", - X"E6",X"0F",X"CD",X"EB",X"07",X"DD",X"7D",X"3C",X"6F",X"79",X"07",X"07",X"07",X"07",X"E6",X"0F", - X"CD",X"EB",X"07",X"18",X"DE",X"2C",X"10",X"D4",X"DD",X"7D",X"C6",X"04",X"5F",X"21",X"F2",X"83", - X"16",X"83",X"06",X"06",X"1A",X"96",X"C6",X"09",X"FE",X"E5",X"30",X"0F",X"D6",X"0A",X"FE",X"09", - X"38",X"09",X"3C",X"20",X"0C",X"2D",X"1D",X"10",X"EB",X"18",X"06",X"1A",X"77",X"2D",X"1D",X"10", - X"FA",X"DD",X"7D",X"C6",X"04",X"6F",X"7E",X"FE",X"24",X"20",X"01",X"AF",X"E6",X"3F",X"07",X"4F", - X"07",X"07",X"81",X"4F",X"2D",X"7E",X"FE",X"24",X"20",X"01",X"AF",X"81",X"21",X"3E",X"98",X"BE", - X"C0",X"3A",X"81",X"99",X"47",X"E6",X"7F",X"4F",X"7E",X"B9",X"30",X"03",X"79",X"18",X"01",X"80", - X"77",X"32",X"AA",X"9A",X"21",X"20",X"98",X"34",X"CD",X"7E",X"13",X"21",X"EB",X"99",X"7E",X"C6", - X"01",X"27",X"77",X"D0",X"2D",X"7E",X"C6",X"01",X"27",X"77",X"C9",X"A7",X"C8",X"86",X"FE",X"24", - X"38",X"02",X"D6",X"24",X"FE",X"0A",X"30",X"02",X"77",X"C9",X"D6",X"0A",X"77",X"2C",X"7E",X"FE", - X"24",X"20",X"01",X"AF",X"FE",X"09",X"28",X"03",X"3C",X"77",X"C9",X"AF",X"18",X"EE",X"10",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"50",X"08",X"08",X"08",X"05",X"08",X"15",X"00",X"3A",X"08", - X"90",X"47",X"3A",X"A7",X"92",X"B0",X"20",X"06",X"32",X"A0",X"9A",X"C3",X"B1",X"04",X"3A",X"13", - X"92",X"A7",X"C8",X"AF",X"32",X"42",X"98",X"C3",X"B1",X"04",X"C9",X"3E",X"01",X"32",X"D6",X"92", - X"21",X"40",X"8B",X"11",X"C0",X"8B",X"01",X"40",X"00",X"ED",X"B0",X"21",X"40",X"93",X"11",X"C0", - X"93",X"0E",X"40",X"ED",X"B0",X"21",X"40",X"9B",X"11",X"C0",X"9B",X"0E",X"40",X"ED",X"B0",X"AF", - X"32",X"D6",X"92",X"3A",X"D7",X"92",X"3D",X"28",X"FA",X"C9",X"3A",X"AE",X"92",X"47",X"FE",X"3C", - X"30",X"06",X"3A",X"C5",X"99",X"32",X"C4",X"99",X"3A",X"A7",X"92",X"4F",X"3A",X"C0",X"99",X"21", - X"1C",X"09",X"CD",X"D1",X"08",X"32",X"C8",X"92",X"3A",X"AA",X"92",X"A7",X"28",X"0D",X"21",X"C4", - X"92",X"3E",X"02",X"06",X"03",X"DF",X"AF",X"32",X"A0",X"9A",X"C9",X"3A",X"C1",X"99",X"21",X"3C", - X"09",X"CD",X"D1",X"08",X"32",X"C4",X"92",X"3A",X"C2",X"99",X"21",X"E0",X"08",X"CD",X"C0",X"08", - X"32",X"C5",X"92",X"3A",X"C3",X"99",X"21",X"FE",X"08",X"CD",X"C0",X"08",X"32",X"C6",X"92",X"C9", - X"5F",X"CB",X"27",X"83",X"D7",X"78",X"FE",X"28",X"30",X"01",X"23",X"A7",X"20",X"01",X"23",X"7E", - X"C9",X"CB",X"27",X"CF",X"EB",X"61",X"3E",X"0A",X"CD",X"61",X"10",X"EB",X"7A",X"D7",X"7E",X"C9", - X"09",X"07",X"05",X"08",X"06",X"04",X"07",X"05",X"04",X"06",X"04",X"03",X"05",X"03",X"03",X"04", - X"03",X"03",X"04",X"02",X"02",X"03",X"03",X"02",X"03",X"02",X"02",X"02",X"02",X"02",X"06",X"05", - X"04",X"05",X"04",X"03",X"05",X"03",X"03",X"04",X"03",X"02",X"04",X"02",X"02",X"03",X"03",X"02", - X"03",X"02",X"01",X"02",X"02",X"01",X"02",X"01",X"01",X"01",X"01",X"01",X"03",X"03",X"01",X"01", - X"03",X"03",X"03",X"01",X"07",X"03",X"03",X"01",X"07",X"03",X"03",X"03",X"07",X"07",X"03",X"03", - X"0F",X"07",X"03",X"03",X"0F",X"07",X"07",X"03",X"0F",X"07",X"07",X"07",X"06",X"0A",X"0F",X"0F", - X"04",X"08",X"0D",X"0D",X"04",X"06",X"0A",X"0A",X"3A",X"A0",X"92",X"07",X"07",X"07",X"07",X"4F", - X"3A",X"01",X"92",X"FE",X"03",X"C0",X"3A",X"40",X"98",X"47",X"2F",X"A1",X"21",X"81",X"09",X"11", - X"D9",X"83",X"CD",X"72",X"09",X"3A",X"B3",X"99",X"A7",X"C8",X"78",X"A1",X"21",X"84",X"09",X"11", - X"C4",X"83",X"C5",X"E6",X"01",X"28",X"03",X"21",X"87",X"09",X"01",X"03",X"00",X"ED",X"B0",X"C1", - X"C9",X"19",X"1E",X"01",X"19",X"1E",X"02",X"24",X"24",X"24",X"3A",X"B5",X"99",X"FE",X"BB",X"CA", - X"6C",X"33",X"3A",X"01",X"92",X"FE",X"03",X"20",X"19",X"21",X"E9",X"99",X"7E",X"C6",X"01",X"27", - X"FE",X"60",X"20",X"01",X"AF",X"06",X"04",X"3F",X"77",X"2D",X"7E",X"CE",X"00",X"27",X"10",X"F8", - X"18",X"42",X"3A",X"B8",X"99",X"FE",X"A0",X"11",X"3C",X"80",X"28",X"30",X"3A",X"B5",X"99",X"21", - X"E2",X"09",X"01",X"06",X"00",X"ED",X"B8",X"1D",X"4F",X"07",X"07",X"07",X"07",X"E6",X"0F",X"28", - X"02",X"12",X"1D",X"79",X"E6",X"0F",X"12",X"1D",X"3E",X"24",X"12",X"18",X"17",X"1D",X"12",X"0D", - X"0E",X"1B",X"0C",X"22",X"0A",X"15",X"19",X"24",X"0E",X"0E",X"1B",X"0F",X"21",X"EB",X"09",X"01", - X"09",X"00",X"ED",X"B8",X"3A",X"01",X"92",X"A7",X"C8",X"3D",X"20",X"16",X"3A",X"B5",X"99",X"A7", - X"28",X"10",X"3E",X"02",X"32",X"01",X"92",X"AF",X"21",X"A0",X"9A",X"06",X"08",X"DF",X"2C",X"06", - X"0F",X"DF",X"3A",X"B5",X"99",X"4F",X"3A",X"B8",X"99",X"47",X"91",X"C8",X"38",X"0F",X"27",X"3D", - X"32",X"B3",X"99",X"79",X"32",X"B8",X"99",X"3E",X"03",X"32",X"01",X"92",X"C9",X"79",X"32",X"B8", - X"99",X"FE",X"A0",X"C8",X"90",X"27",X"32",X"79",X"9A",X"C9",X"21",X"03",X"91",X"06",X"05",X"1A", - X"1C",X"FE",X"24",X"20",X"01",X"AF",X"ED",X"67",X"CB",X"40",X"20",X"01",X"2D",X"10",X"F0",X"AF", - X"ED",X"67",X"2D",X"36",X"00",X"2E",X"03",X"11",X"E5",X"99",X"06",X"04",X"A7",X"1A",X"8E",X"27", - X"12",X"1D",X"2D",X"10",X"F8",X"C9",X"06",X"01",X"25",X"24",X"20",X"05",X"7D",X"FE",X"0A",X"38", - X"0A",X"3E",X"0A",X"CD",X"61",X"10",X"F5",X"04",X"18",X"EE",X"F1",X"CD",X"81",X"0A",X"10",X"FA", - X"C9",X"12",X"C3",X"20",X"00",X"2A",X"44",X"98",X"ED",X"5B",X"46",X"98",X"7A",X"B3",X"20",X"05", - X"11",X"00",X"00",X"18",X"51",X"CB",X"7A",X"20",X"0A",X"CB",X"7C",X"20",X"06",X"29",X"EB",X"29", - X"EB",X"18",X"F2",X"7A",X"CD",X"61",X"10",X"E5",X"67",X"2E",X"00",X"7A",X"CD",X"61",X"10",X"E3", - X"11",X"B0",X"99",X"06",X"04",X"7C",X"26",X"00",X"EB",X"ED",X"6F",X"CB",X"40",X"28",X"01",X"2C", - X"EB",X"CD",X"19",X"0B",X"08",X"E3",X"CD",X"19",X"0B",X"E3",X"D7",X"08",X"84",X"26",X"00",X"10", - X"E7",X"D1",X"FE",X"05",X"38",X"14",X"ED",X"5B",X"B0",X"99",X"7A",X"C6",X"01",X"27",X"57",X"30", - X"05",X"7B",X"C6",X"01",X"27",X"5F",X"ED",X"53",X"B0",X"99",X"06",X"04",X"0E",X"00",X"21",X"B0", - X"99",X"11",X"38",X"81",X"05",X"20",X"04",X"3E",X"2A",X"12",X"E7",X"04",X"AF",X"ED",X"6F",X"CB", - X"40",X"28",X"01",X"2C",X"A7",X"20",X"04",X"CB",X"41",X"28",X"04",X"CB",X"C1",X"12",X"E7",X"78", - X"FE",X"03",X"20",X"02",X"CB",X"C1",X"10",X"DC",X"C9",X"3E",X"0A",X"CD",X"4E",X"10",X"7C",X"26", - X"00",X"C9",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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"C4", - X"E5",X"ED",X"5F",X"67",X"3A",X"A0",X"92",X"84",X"6F",X"26",X"01",X"7E",X"67",X"ED",X"5F",X"84", - X"E1",X"C9",X"C5",X"D5",X"7B",X"95",X"06",X"00",X"30",X"04",X"CB",X"C0",X"ED",X"44",X"4F",X"7A", - X"94",X"30",X"0A",X"57",X"78",X"EE",X"01",X"F6",X"02",X"47",X"7A",X"ED",X"44",X"B9",X"F5",X"17", - X"A8",X"1F",X"3F",X"CB",X"10",X"F1",X"30",X"03",X"51",X"4F",X"7A",X"61",X"2E",X"00",X"CD",X"61", - X"10",X"7C",X"A8",X"E6",X"01",X"28",X"03",X"7D",X"2F",X"6F",X"60",X"D1",X"C1",X"C9",X"D5",X"EB", - X"21",X"00",X"00",X"CB",X"3F",X"30",X"01",X"19",X"CB",X"23",X"CB",X"12",X"A7",X"20",X"F4",X"D1", - X"C9",X"C5",X"4F",X"AF",X"06",X"11",X"8F",X"38",X"0B",X"B9",X"38",X"01",X"91",X"3F",X"ED",X"6A", - X"10",X"F4",X"C1",X"C9",X"91",X"37",X"C3",X"6E",X"10",X"7D",X"E6",X"80",X"3C",X"08",X"CB",X"BD", - X"C3",X"8A",X"10",X"7D",X"0F",X"0F",X"E6",X"80",X"3C",X"08",X"D5",X"11",X"14",X"00",X"06",X"0C", - X"DD",X"21",X"00",X"91",X"DD",X"CB",X"13",X"46",X"28",X"06",X"DD",X"19",X"10",X"F6",X"D1",X"C9", - X"D1",X"DD",X"73",X"08",X"DD",X"72",X"09",X"DD",X"36",X"0D",X"01",X"DD",X"36",X"04",X"00",X"DD", - X"36",X"05",X"01",X"4D",X"DD",X"71",X"10",X"08",X"57",X"36",X"09",X"DD",X"7D",X"2C",X"77",X"3A", - X"15",X"92",X"5F",X"69",X"26",X"93",X"4E",X"2C",X"46",X"26",X"9B",X"7E",X"0F",X"CB",X"18",X"CB", - X"43",X"20",X"09",X"08",X"78",X"C6",X"50",X"ED",X"44",X"47",X"08",X"3F",X"DD",X"70",X"01",X"1F", - X"E6",X"80",X"DD",X"77",X"00",X"79",X"CB",X"43",X"28",X"03",X"C6",X"0D",X"2F",X"CB",X"3F",X"DD", - X"77",X"03",X"1F",X"E6",X"80",X"DD",X"77",X"02",X"DD",X"72",X"13",X"DD",X"36",X"0E",X"1E",X"3A", - X"0B",X"92",X"A7",X"28",X"03",X"3A",X"C8",X"92",X"DD",X"77",X"0F",X"C9",X"3E",X"1F",X"32",X"00", - X"90",X"32",X"E0",X"98",X"21",X"20",X"98",X"11",X"60",X"98",X"06",X"40",X"4E",X"1A",X"77",X"79", - X"12",X"2C",X"1C",X"10",X"F7",X"21",X"00",X"88",X"11",X"B0",X"98",X"06",X"30",X"7E",X"4F",X"26", - X"8B",X"7E",X"E6",X"7F",X"0D",X"20",X"0B",X"E6",X"78",X"4F",X"2C",X"7E",X"2D",X"E6",X"07",X"B1", - X"F6",X"80",X"EB",X"4E",X"77",X"EB",X"CB",X"79",X"28",X"10",X"79",X"E6",X"78",X"C6",X"06",X"77", - X"2C",X"79",X"E6",X"07",X"77",X"2D",X"3E",X"01",X"18",X"07",X"71",X"26",X"93",X"36",X"00",X"3E", - X"80",X"26",X"88",X"77",X"13",X"2C",X"2C",X"10",X"C4",X"21",X"00",X"90",X"11",X"E0",X"98",X"06", - X"20",X"4E",X"1A",X"77",X"79",X"12",X"2C",X"1C",X"10",X"F7",X"AF",X"32",X"00",X"90",X"C9",X"21", - X"02",X"80",X"06",X"12",X"7E",X"FE",X"4A",X"30",X"02",X"36",X"24",X"2C",X"10",X"F6",X"2E",X"22", - X"06",X"12",X"7E",X"FE",X"4A",X"30",X"02",X"36",X"24",X"2C",X"10",X"F6",X"3A",X"21",X"98",X"06", - X"00",X"21",X"01",X"80",X"FE",X"32",X"38",X"07",X"D6",X"32",X"04",X"2C",X"2C",X"18",X"F5",X"EB", - X"6F",X"26",X"00",X"3E",X"0A",X"CD",X"61",X"10",X"67",X"E5",X"EB",X"FE",X"05",X"38",X"02",X"D6", - X"04",X"4F",X"7B",X"CB",X"47",X"28",X"02",X"3E",X"02",X"81",X"D7",X"04",X"10",X"20",X"C1",X"79", - X"CD",X"F5",X"11",X"78",X"FE",X"05",X"38",X"08",X"16",X"38",X"CD",X"13",X"12",X"78",X"D6",X"05", - X"47",X"04",X"10",X"03",X"C3",X"7E",X"13",X"16",X"36",X"CD",X"13",X"12",X"18",X"F4",X"3E",X"04", - X"CD",X"FB",X"11",X"18",X"D7",X"A7",X"C8",X"FE",X"04",X"28",X"07",X"07",X"07",X"C6",X"36",X"57", - X"18",X"0A",X"16",X"42",X"CD",X"13",X"12",X"CD",X"28",X"12",X"16",X"3A",X"CD",X"13",X"12",X"CD", - X"28",X"12",X"C9",X"08",X"38",X"11",X"08",X"3A",X"A0",X"92",X"C6",X"08",X"5F",X"3A",X"A0",X"92", - X"93",X"20",X"FA",X"08",X"32",X"B5",X"9A",X"08",X"72",X"14",X"CB",X"ED",X"72",X"14",X"CB",X"D4", - X"7A",X"E6",X"0C",X"FE",X"08",X"3E",X"01",X"28",X"01",X"3C",X"77",X"CB",X"AD",X"77",X"CB",X"94", - X"2D",X"C9",X"21",X"5B",X"12",X"11",X"00",X"90",X"01",X"20",X"00",X"C5",X"E5",X"ED",X"B0",X"E1", - X"C1",X"11",X"E0",X"98",X"ED",X"B0",X"AF",X"32",X"00",X"90",X"C9",X"1F",X"01",X"00",X"00",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"00",X"01",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0A",X"21",X"64",X"8B",X"11",X"30", - X"09",X"0E",X"00",X"06",X"0A",X"73",X"26",X"93",X"36",X"00",X"26",X"9B",X"71",X"26",X"8B",X"2C", - X"72",X"2C",X"78",X"FE",X"09",X"20",X"04",X"0E",X"01",X"16",X"0B",X"10",X"E8",X"C9",X"26",X"8B", - X"ED",X"5B",X"80",X"92",X"1A",X"6F",X"13",X"1A",X"4F",X"E6",X"78",X"C6",X"06",X"77",X"2C",X"79", - X"E6",X"07",X"CB",X"79",X"28",X"02",X"F6",X"08",X"77",X"13",X"2D",X"26",X"88",X"36",X"01",X"26", - X"93",X"1A",X"77",X"13",X"2C",X"1A",X"CB",X"27",X"77",X"3E",X"00",X"17",X"26",X"9B",X"77",X"13", - X"ED",X"53",X"80",X"92",X"C9",X"DD",X"6F",X"3A",X"15",X"92",X"4F",X"21",X"00",X"99",X"11",X"21", - X"13",X"06",X"10",X"36",X"00",X"2C",X"1A",X"13",X"77",X"2C",X"10",X"F7",X"21",X"00",X"98",X"11", - X"21",X"13",X"06",X"0A",X"1A",X"13",X"CB",X"41",X"28",X"03",X"C6",X"0D",X"2F",X"77",X"2C",X"2C", - X"10",X"F2",X"06",X"06",X"1A",X"DD",X"85",X"13",X"CB",X"41",X"20",X"03",X"C6",X"4F",X"2F",X"CB", - X"27",X"77",X"2C",X"3E",X"00",X"17",X"77",X"2C",X"10",X"EA",X"3A",X"15",X"92",X"32",X"0F",X"92", - X"C9",X"31",X"41",X"51",X"61",X"71",X"81",X"91",X"A1",X"B1",X"C1",X"92",X"8A",X"82",X"7C",X"76", - X"70",X"E5",X"21",X"AF",X"92",X"36",X"03",X"7E",X"A7",X"20",X"FC",X"E1",X"C9",X"3E",X"01",X"32", - X"14",X"90",X"3A",X"70",X"82",X"FE",X"24",X"20",X"03",X"0E",X"03",X"F7",X"3A",X"87",X"92",X"A7", - X"20",X"FA",X"CD",X"7E",X"13",X"21",X"06",X"09",X"22",X"62",X"8B",X"21",X"62",X"93",X"3A",X"15", - X"92",X"E6",X"01",X"3E",X"29",X"0E",X"01",X"28",X"03",X"C6",X"0E",X"0D",X"36",X"7A",X"2C",X"77", - X"26",X"9B",X"71",X"2D",X"AF",X"77",X"32",X"13",X"92",X"3C",X"32",X"B9",X"99",X"C9",X"3A",X"20", - X"98",X"2F",X"C6",X"09",X"5F",X"16",X"49",X"21",X"1D",X"80",X"CD",X"98",X"13",X"2D",X"CD",X"98", - X"13",X"CB",X"ED",X"2C",X"CD",X"98",X"13",X"2D",X"E5",X"14",X"4A",X"06",X"08",X"78",X"BB",X"20", - X"02",X"0E",X"24",X"7E",X"FE",X"36",X"38",X"04",X"FE",X"4A",X"38",X"01",X"71",X"2D",X"2D",X"10", - X"EC",X"E1",X"C9",X"A7",X"08",X"D5",X"EB",X"79",X"21",X"EF",X"13",X"CF",X"7E",X"23",X"66",X"6F", - X"08",X"30",X"06",X"2B",X"2B",X"5E",X"23",X"56",X"23",X"4E",X"23",X"EB",X"1A",X"FE",X"2F",X"28", - X"1E",X"D6",X"30",X"30",X"04",X"3E",X"24",X"18",X"06",X"FE",X"11",X"38",X"02",X"D6",X"07",X"77", - X"CB",X"D4",X"71",X"CB",X"94",X"13",X"7D",X"D6",X"20",X"6F",X"30",X"E0",X"25",X"18",X"DD",X"D1", - X"C9",X"2F",X"14",X"44",X"14",X"51",X"14",X"5C",X"14",X"66",X"14",X"72",X"14",X"7C",X"14",X"91", - X"14",X"A3",X"14",X"AE",X"14",X"C2",X"14",X"E1",X"14",X"EE",X"14",X"09",X"15",X"13",X"15",X"22", - X"15",X"2F",X"15",X"3C",X"15",X"40",X"15",X"59",X"15",X"5D",X"15",X"6A",X"15",X"81",X"15",X"8F", - X"15",X"A8",X"15",X"BF",X"15",X"C5",X"15",X"D9",X"15",X"ED",X"15",X"FF",X"15",X"EB",X"82",X"00", - X"50",X"55",X"53",X"48",X"20",X"53",X"54",X"41",X"52",X"54",X"20",X"42",X"55",X"54",X"54",X"4F", - X"4E",X"2F",X"70",X"82",X"00",X"47",X"41",X"4D",X"45",X"20",X"4F",X"56",X"45",X"52",X"2F",X"70", - X"82",X"00",X"52",X"45",X"41",X"44",X"59",X"20",X"21",X"2F",X"50",X"82",X"00",X"50",X"4C",X"41", - X"59",X"45",X"52",X"20",X"31",X"2F",X"00",X"50",X"4C",X"41",X"59",X"45",X"52",X"20",X"32",X"2F", - X"70",X"82",X"00",X"53",X"54",X"41",X"47",X"45",X"20",X"2F",X"10",X"83",X"00",X"43",X"48",X"41", - X"4C",X"4C",X"45",X"4E",X"47",X"49",X"4E",X"47",X"20",X"53",X"54",X"41",X"47",X"45",X"2F",X"10", - X"83",X"00",X"4E",X"55",X"4D",X"42",X"45",X"52",X"20",X"4F",X"46",X"20",X"48",X"49",X"54",X"53", - X"2F",X"B3",X"82",X"00",X"42",X"4F",X"4E",X"55",X"53",X"20",X"20",X"2F",X"F1",X"82",X"04",X"46", - X"49",X"47",X"48",X"54",X"45",X"52",X"20",X"43",X"41",X"50",X"54",X"55",X"52",X"45",X"44",X"2F", - X"AD",X"83",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20", - X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"2F",X"6D", - X"82",X"04",X"50",X"45",X"52",X"46",X"45",X"43",X"54",X"20",X"63",X"2F",X"73",X"83",X"05",X"53", - X"50",X"45",X"43",X"49",X"41",X"4C",X"20",X"42",X"4F",X"4E",X"55",X"53",X"20",X"31",X"30",X"30", - X"30",X"30",X"20",X"50",X"54",X"53",X"2F",X"42",X"82",X"00",X"47",X"41",X"4C",X"41",X"47",X"41", - X"2F",X"A5",X"82",X"00",X"5D",X"5D",X"20",X"53",X"43",X"4F",X"52",X"45",X"20",X"5D",X"5D",X"2F", - X"28",X"82",X"00",X"35",X"30",X"20",X"20",X"20",X"20",X"31",X"30",X"30",X"2F",X"2A",X"82",X"00", - X"38",X"30",X"20",X"20",X"20",X"20",X"31",X"36",X"30",X"2F",X"2B",X"82",X"00",X"2F",X"3B",X"83", - X"03",X"65",X"20",X"31",X"39",X"38",X"31",X"20",X"4D",X"49",X"44",X"57",X"41",X"59",X"20",X"4D", - X"46",X"47",X"61",X"43",X"4F",X"61",X"2F",X"5E",X"82",X"04",X"2F",X"8F",X"82",X"04",X"5D",X"52", - X"45",X"53",X"55",X"4C",X"54",X"53",X"5D",X"2F",X"32",X"83",X"05",X"53",X"48",X"4F",X"54",X"53", - X"20",X"46",X"49",X"52",X"45",X"44",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"20", - X"2F",X"05",X"20",X"20",X"4D",X"49",X"53",X"53",X"49",X"4C",X"45",X"53",X"2F",X"35",X"83",X"05", - X"4E",X"55",X"4D",X"42",X"45",X"52",X"20",X"4F",X"46",X"20",X"48",X"49",X"54",X"53",X"20",X"20", - X"20",X"20",X"20",X"20",X"20",X"2F",X"38",X"83",X"03",X"48",X"49",X"54",X"5D",X"4D",X"49",X"53", - X"53",X"20",X"52",X"41",X"54",X"49",X"4F",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"2F",X"03", - X"24",X"60",X"2F",X"2F",X"83",X"05",X"31",X"53",X"54",X"20",X"42",X"4F",X"4E",X"55",X"53",X"20", - X"46",X"4F",X"52",X"20",X"20",X"20",X"2F",X"32",X"83",X"05",X"32",X"4E",X"44",X"20",X"42",X"4F", - X"4E",X"55",X"53",X"20",X"46",X"4F",X"52",X"20",X"20",X"20",X"2F",X"35",X"83",X"05",X"41",X"4E", - X"44",X"20",X"46",X"4F",X"52",X"20",X"45",X"56",X"45",X"52",X"59",X"20",X"20",X"20",X"2F",X"05", - X"30",X"30",X"30",X"30",X"20",X"50",X"54",X"53",X"2F",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"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"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"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"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"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"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"ED",X"5B",X"82",X"92",X"1A",X"07",X"07",X"07",X"E6",X"07",X"21",X"13",X"17",X"CF",X"7E",X"23", - X"66",X"6F",X"E9",X"66",X"17",X"66",X"17",X"1F",X"17",X"66",X"17",X"34",X"17",X"2D",X"17",X"3A", - X"A0",X"92",X"E6",X"0F",X"C0",X"21",X"07",X"92",X"35",X"C0",X"C3",X"66",X"17",X"CD",X"15",X"1F", - X"ED",X"5B",X"82",X"92",X"1A",X"21",X"27",X"98",X"5E",X"CB",X"47",X"20",X"04",X"E6",X"0A",X"18", - X"14",X"3A",X"09",X"92",X"6F",X"26",X"93",X"3A",X"62",X"93",X"96",X"3E",X"0A",X"28",X"06",X"3E", - X"08",X"38",X"02",X"3E",X"02",X"CD",X"98",X"1F",X"3A",X"A0",X"92",X"E6",X"03",X"C0",X"21",X"07", - X"92",X"35",X"C0",X"CD",X"15",X"1F",X"ED",X"5B",X"82",X"92",X"1A",X"E6",X"C0",X"FE",X"80",X"20", - X"01",X"13",X"13",X"1A",X"ED",X"53",X"82",X"92",X"07",X"07",X"07",X"E6",X"07",X"21",X"86",X"17", - X"CF",X"7E",X"23",X"66",X"6F",X"E9",X"94",X"17",X"94",X"17",X"A1",X"17",X"A8",X"17",X"AE",X"17", - X"AE",X"17",X"9C",X"17",X"1A",X"07",X"E6",X"7E",X"32",X"09",X"92",X"C9",X"AF",X"32",X"03",X"90", - X"C9",X"1A",X"E6",X"1F",X"32",X"07",X"92",X"C9",X"1A",X"E6",X"1F",X"4F",X"F7",X"C9",X"13",X"1A", - X"18",X"F2",X"3A",X"01",X"92",X"3D",X"C0",X"3A",X"03",X"92",X"21",X"C3",X"17",X"CF",X"5E",X"23", - X"56",X"EB",X"E9",X"40",X"19",X"48",X"19",X"84",X"19",X"D9",X"18",X"D1",X"18",X"AC",X"18",X"40", - X"19",X"F5",X"17",X"52",X"18",X"D1",X"18",X"08",X"18",X"D1",X"18",X"40",X"18",X"40",X"19",X"E1", - X"17",X"3A",X"AF",X"92",X"A7",X"28",X"05",X"3D",X"CA",X"A7",X"19",X"C9",X"CD",X"14",X"32",X"3E", - X"0A",X"32",X"AF",X"92",X"C9",X"3A",X"A0",X"92",X"E6",X"1F",X"FE",X"1F",X"C0",X"3E",X"01",X"32", - X"05",X"90",X"0E",X"02",X"F7",X"C3",X"A7",X"19",X"CD",X"4C",X"13",X"21",X"1F",X"18",X"22",X"82", - X"92",X"3E",X"01",X"32",X"03",X"90",X"32",X"15",X"90",X"32",X"25",X"90",X"C3",X"A7",X"19",X"08", - X"18",X"8A",X"08",X"88",X"06",X"81",X"28",X"81",X"05",X"54",X"1A",X"88",X"12",X"81",X"0F",X"A2", - X"16",X"AA",X"14",X"88",X"18",X"88",X"10",X"43",X"82",X"10",X"88",X"06",X"A2",X"20",X"56",X"C0", - X"EF",X"CD",X"42",X"12",X"AF",X"32",X"10",X"90",X"32",X"0B",X"92",X"3C",X"32",X"02",X"90",X"C3", - X"A7",X"19",X"AF",X"32",X"2B",X"98",X"3C",X"32",X"B7",X"9A",X"32",X"21",X"98",X"32",X"03",X"90", - X"32",X"15",X"90",X"32",X"25",X"98",X"21",X"87",X"18",X"22",X"82",X"92",X"CD",X"C5",X"01",X"CD", - X"4C",X"13",X"3E",X"01",X"32",X"0B",X"92",X"32",X"42",X"98",X"32",X"2C",X"98",X"3C",X"32",X"C4", - X"99",X"32",X"C5",X"99",X"C3",X"A7",X"19",X"02",X"8A",X"04",X"82",X"07",X"AA",X"28",X"88",X"10", - X"AA",X"38",X"82",X"12",X"AA",X"20",X"88",X"14",X"AA",X"20",X"82",X"06",X"A8",X"0E",X"A2",X"17", - X"88",X"12",X"A2",X"14",X"18",X"88",X"1B",X"81",X"2A",X"5F",X"4C",X"C0",X"3A",X"AE",X"92",X"A7", - X"28",X"09",X"3D",X"CA",X"A7",X"19",X"FE",X"05",X"28",X"0C",X"C9",X"3E",X"34",X"32",X"34",X"92", - X"3E",X"09",X"32",X"AE",X"92",X"C9",X"AF",X"32",X"62",X"93",X"0E",X"13",X"F7",X"0E",X"14",X"F7", - X"C9",X"3A",X"03",X"90",X"A7",X"CA",X"A7",X"19",X"C9",X"06",X"07",X"CD",X"9E",X"12",X"10",X"FB", - X"AF",X"32",X"20",X"98",X"32",X"05",X"90",X"CD",X"4C",X"13",X"21",X"0D",X"FF",X"22",X"C5",X"92", - X"22",X"C4",X"92",X"22",X"C1",X"92",X"22",X"C0",X"92",X"21",X"28",X"19",X"22",X"82",X"92",X"AF", - X"06",X"10",X"21",X"CA",X"92",X"DF",X"32",X"27",X"98",X"32",X"0B",X"92",X"3C",X"32",X"2B",X"98", - X"32",X"10",X"90",X"32",X"0B",X"90",X"32",X"03",X"90",X"3A",X"03",X"68",X"0F",X"E6",X"01",X"32", - X"B7",X"9A",X"CD",X"7B",X"12",X"C3",X"A7",X"19",X"08",X"1B",X"81",X"3D",X"81",X"0A",X"42",X"19", - X"81",X"28",X"81",X"08",X"18",X"81",X"2E",X"81",X"03",X"1A",X"81",X"11",X"81",X"05",X"42",X"C0", - X"CD",X"60",X"01",X"CD",X"3C",X"00",X"18",X"5F",X"21",X"5C",X"19",X"22",X"80",X"92",X"AF",X"32", - X"05",X"92",X"32",X"A8",X"92",X"3E",X"02",X"32",X"AE",X"92",X"18",X"4B",X"08",X"1B",X"44",X"3A", - X"0A",X"12",X"44",X"42",X"0C",X"08",X"7C",X"50",X"34",X"08",X"34",X"5C",X"30",X"08",X"64",X"5C", - X"32",X"08",X"94",X"5C",X"4A",X"12",X"A4",X"64",X"36",X"08",X"C4",X"5C",X"58",X"12",X"B4",X"64", - X"52",X"12",X"D4",X"64",X"3A",X"AE",X"92",X"A7",X"C0",X"3E",X"02",X"32",X"AE",X"92",X"3A",X"05", - X"92",X"FE",X"05",X"28",X"12",X"3C",X"32",X"05",X"92",X"C6",X"0D",X"4F",X"F7",X"3A",X"05",X"92", - X"FE",X"03",X"D8",X"CD",X"9E",X"12",X"C9",X"21",X"03",X"92",X"34",X"7E",X"FE",X"0F",X"C0",X"36", - X"00",X"C9",X"3A",X"8E",X"92",X"A7",X"20",X"1A",X"21",X"AD",X"92",X"B6",X"28",X"28",X"FE",X"04", - X"20",X"05",X"3D",X"77",X"32",X"A9",X"9A",X"3A",X"29",X"98",X"C6",X"0D",X"6F",X"26",X"91",X"36", - X"04",X"C9",X"0E",X"0A",X"F7",X"3E",X"06",X"32",X"AD",X"92",X"3C",X"32",X"63",X"8B",X"AF",X"32", - X"8B",X"92",X"32",X"8E",X"92",X"C9",X"3A",X"D1",X"82",X"FE",X"24",X"28",X"29",X"21",X"62",X"93", - X"3A",X"28",X"98",X"E6",X"07",X"5F",X"54",X"7E",X"12",X"36",X"00",X"2C",X"1C",X"7E",X"12",X"26", - X"9B",X"54",X"ED",X"A8",X"ED",X"A0",X"26",X"8B",X"6B",X"36",X"07",X"2D",X"36",X"07",X"0E",X"0B", - X"21",X"B1",X"83",X"CD",X"B3",X"13",X"3A",X"28",X"98",X"6F",X"E6",X"07",X"5F",X"26",X"88",X"3A", - X"15",X"92",X"4F",X"7E",X"FE",X"09",X"20",X"1D",X"26",X"93",X"54",X"7E",X"12",X"2C",X"1C",X"3E", - X"10",X"CB",X"41",X"28",X"02",X"ED",X"44",X"47",X"86",X"12",X"1F",X"A8",X"07",X"E6",X"01",X"26", - X"9B",X"54",X"AE",X"12",X"C9",X"21",X"8B",X"92",X"7E",X"A7",X"20",X"05",X"16",X"8B",X"3E",X"06", - X"12",X"34",X"FE",X"24",X"28",X"1A",X"06",X"01",X"CB",X"41",X"20",X"02",X"05",X"05",X"6B",X"2C", - X"26",X"93",X"78",X"86",X"77",X"1F",X"A8",X"07",X"D0",X"26",X"9B",X"7E",X"EE",X"01",X"77",X"C9", - X"AF",X"32",X"11",X"90",X"32",X"A9",X"9A",X"16",X"88",X"3C",X"12",X"32",X"28",X"98",X"32",X"B9", - X"99",X"3C",X"32",X"13",X"92",X"C9",X"3A",X"CA",X"99",X"4F",X"3A",X"A7",X"92",X"B9",X"D0",X"3A", - X"41",X"98",X"A7",X"20",X"46",X"21",X"07",X"88",X"01",X"FF",X"14",X"3E",X"01",X"2C",X"ED",X"A1", - X"28",X"0F",X"10",X"F9",X"21",X"3F",X"88",X"06",X"10",X"2C",X"ED",X"A1",X"28",X"03",X"10",X"F9", - X"C9",X"3E",X"C0",X"32",X"41",X"98",X"2D",X"5D",X"16",X"8B",X"1C",X"1A",X"1D",X"4F",X"3A",X"21", - X"98",X"CB",X"3F",X"CB",X"3F",X"6F",X"26",X"00",X"3E",X"03",X"CD",X"61",X"10",X"C6",X"04",X"21", - X"2D",X"98",X"73",X"2C",X"71",X"2C",X"77",X"32",X"B2",X"9A",X"C9",X"3C",X"28",X"1C",X"32",X"41", - X"98",X"08",X"21",X"2D",X"98",X"5E",X"16",X"88",X"1A",X"3D",X"C2",X"5A",X"1B",X"16",X"8B",X"2C", - X"08",X"CB",X"67",X"28",X"01",X"2C",X"7E",X"1C",X"12",X"C9",X"3A",X"15",X"90",X"A7",X"20",X"06", - X"3E",X"E0",X"32",X"41",X"98",X"C9",X"3A",X"2D",X"98",X"6F",X"26",X"88",X"7E",X"3D",X"20",X"4A", - X"26",X"92",X"7E",X"CB",X"7F",X"20",X"43",X"3A",X"2F",X"98",X"D6",X"04",X"21",X"5F",X"1B",X"CF", - X"11",X"B0",X"99",X"3E",X"03",X"12",X"1C",X"ED",X"A0",X"ED",X"A0",X"3A",X"2F",X"98",X"D6",X"04", - X"E6",X"0F",X"4F",X"21",X"65",X"1B",X"CF",X"5E",X"23",X"56",X"26",X"8B",X"3A",X"2D",X"98",X"6F", - X"79",X"07",X"07",X"07",X"C6",X"56",X"4E",X"77",X"79",X"E6",X"F8",X"4F",X"3A",X"2E",X"98",X"E6", - X"07",X"B1",X"32",X"2E",X"98",X"26",X"88",X"CD",X"83",X"10",X"AF",X"32",X"04",X"90",X"C9",X"1E", - X"BD",X"0A",X"B8",X"14",X"BC",X"EA",X"04",X"73",X"04",X"AB",X"04",X"3A",X"0B",X"92",X"A7",X"28", - X"0A",X"3A",X"15",X"90",X"4F",X"3A",X"1D",X"90",X"2F",X"A1",X"C8",X"06",X"04",X"21",X"CA",X"92", - X"7E",X"3C",X"20",X"0D",X"2C",X"2C",X"2C",X"10",X"F7",X"3A",X"A0",X"92",X"E6",X"0F",X"28",X"1E", - X"C9",X"36",X"FF",X"3D",X"16",X"88",X"5F",X"CB",X"BB",X"08",X"1A",X"3D",X"C0",X"2C",X"5E",X"2C", - X"56",X"08",X"6F",X"26",X"88",X"CD",X"79",X"10",X"3E",X"01",X"32",X"B3",X"9A",X"C9",X"21",X"C0", - X"92",X"06",X"03",X"35",X"28",X"04",X"2C",X"10",X"FA",X"C9",X"3A",X"C4",X"99",X"4F",X"3A",X"87", - X"92",X"B9",X"38",X"02",X"34",X"C9",X"CB",X"D5",X"7E",X"CB",X"95",X"77",X"78",X"3D",X"21",X"D7", - X"1B",X"CF",X"7E",X"23",X"66",X"6F",X"E9",X"DD",X"1B",X"FD",X"1B",X"07",X"1C",X"06",X"14",X"21", - X"08",X"88",X"11",X"4F",X"03",X"3A",X"2D",X"98",X"4F",X"7E",X"3D",X"20",X"04",X"79",X"BD",X"20", - X"05",X"2C",X"2C",X"10",X"F4",X"C9",X"32",X"B3",X"9A",X"CD",X"83",X"10",X"C9",X"06",X"10",X"21", - X"40",X"88",X"11",X"A9",X"03",X"18",X"DE",X"3A",X"2B",X"98",X"A7",X"20",X"29",X"21",X"2C",X"98", - X"34",X"CB",X"46",X"20",X"21",X"DD",X"2E",X"02",X"FD",X"21",X"54",X"04",X"11",X"30",X"88",X"06", - X"04",X"1A",X"3D",X"28",X"05",X"1C",X"1C",X"10",X"F8",X"C9",X"3E",X"01",X"32",X"2B",X"98",X"7B", - X"32",X"28",X"98",X"C3",X"B4",X"1C",X"21",X"32",X"1D",X"16",X"88",X"01",X"00",X"06",X"5E",X"23", - X"3A",X"2D",X"98",X"BB",X"28",X"04",X"1A",X"3D",X"D6",X"01",X"CB",X"11",X"10",X"F0",X"DD",X"2E", - X"00",X"06",X"04",X"DD",X"61",X"79",X"E6",X"07",X"FE",X"04",X"28",X"05",X"FE",X"03",X"D4",X"93", - X"1C",X"CB",X"19",X"10",X"F0",X"DD",X"2C",X"DD",X"4C",X"06",X"04",X"79",X"E6",X"07",X"C4",X"93", - X"1C",X"CB",X"19",X"10",X"F6",X"DD",X"2C",X"11",X"30",X"88",X"06",X"04",X"1A",X"3D",X"28",X"26", - X"1C",X"1C",X"10",X"F8",X"21",X"00",X"88",X"06",X"04",X"7E",X"3D",X"CA",X"2B",X"1D",X"2C",X"2C", - X"10",X"F7",X"C9",X"78",X"CB",X"4F",X"28",X"02",X"EE",X"01",X"E6",X"03",X"CB",X"27",X"C6",X"30", - X"5F",X"1A",X"FE",X"01",X"C0",X"E1",X"FD",X"21",X"11",X"04",X"3A",X"0B",X"92",X"A7",X"20",X"04", - X"FD",X"21",X"F1",X"00",X"7B",X"0F",X"0F",X"7B",X"17",X"0F",X"32",X"CA",X"92",X"08",X"FD",X"22", - X"CB",X"92",X"04",X"7B",X"E6",X"07",X"21",X"30",X"98",X"D7",X"DD",X"7D",X"EB",X"21",X"03",X"1D", - X"CF",X"7E",X"12",X"23",X"1C",X"7E",X"12",X"DD",X"7D",X"FE",X"02",X"28",X"0C",X"11",X"CD",X"92", - X"3D",X"28",X"03",X"CD",X"09",X"1D",X"CD",X"09",X"1D",X"3A",X"CA",X"92",X"E6",X"07",X"6F",X"26", - X"88",X"7E",X"3D",X"C0",X"4D",X"21",X"CA",X"92",X"2C",X"2C",X"2C",X"7E",X"3C",X"20",X"F9",X"08", - X"79",X"18",X"19",X"0D",X"BA",X"05",X"B7",X"01",X"B5",X"CB",X"09",X"38",X"06",X"05",X"CB",X"09", - X"38",X"01",X"05",X"78",X"05",X"21",X"32",X"1D",X"D7",X"08",X"7E",X"EB",X"17",X"0F",X"77",X"08", - X"2C",X"FD",X"7D",X"77",X"2C",X"FD",X"7C",X"77",X"2C",X"EB",X"C9",X"11",X"44",X"04",X"CD",X"83", - X"10",X"C9",X"4A",X"52",X"5A",X"58",X"50",X"48",X"21",X"B4",X"99",X"7E",X"E6",X"7F",X"D6",X"7E", - X"28",X"36",X"4E",X"34",X"3A",X"15",X"92",X"CB",X"01",X"A9",X"0F",X"3E",X"01",X"38",X"02",X"ED", - X"44",X"4F",X"21",X"14",X"98",X"06",X"06",X"7E",X"81",X"77",X"1F",X"A9",X"2C",X"07",X"30",X"04", - X"7E",X"EE",X"01",X"77",X"2C",X"10",X"F0",X"3A",X"A0",X"92",X"E6",X"FC",X"3C",X"F5",X"CD",X"EE", - X"23",X"F1",X"C6",X"02",X"CD",X"EE",X"23",X"C9",X"32",X"0E",X"90",X"C9",X"3A",X"15",X"92",X"47", - X"21",X"B9",X"99",X"7E",X"2C",X"A7",X"28",X"26",X"7E",X"A7",X"3E",X"FD",X"20",X"13",X"2C",X"7E", - X"2C",X"BE",X"28",X"01",X"34",X"7E",X"2C",X"86",X"4F",X"E6",X"3F",X"77",X"79",X"07",X"07",X"E6", - X"03",X"CB",X"40",X"20",X"02",X"ED",X"44",X"3D",X"E6",X"07",X"32",X"BE",X"99",X"C9",X"AF",X"77", - X"2C",X"2C",X"77",X"2C",X"77",X"3E",X"07",X"18",X"F1",X"21",X"00",X"92",X"06",X"30",X"CB",X"7E", - X"20",X"05",X"2C",X"2C",X"10",X"F8",X"C9",X"CB",X"BE",X"26",X"88",X"36",X"04",X"2C",X"36",X"40", - X"26",X"8B",X"36",X"0A",X"26",X"92",X"18",X"EB",X"3A",X"A2",X"92",X"E6",X"01",X"C0",X"21",X"AC", - X"92",X"06",X"04",X"7E",X"A7",X"28",X"01",X"35",X"2C",X"10",X"F8",X"C9",X"3A",X"A0",X"92",X"E6", - X"03",X"C0",X"21",X"0F",X"92",X"7E",X"5F",X"16",X"FF",X"CB",X"7F",X"20",X"05",X"14",X"14",X"34", - X"18",X"01",X"35",X"FE",X"1F",X"20",X"02",X"CB",X"FE",X"FE",X"81",X"20",X"02",X"CB",X"BE",X"4E", - X"E6",X"07",X"7A",X"32",X"11",X"92",X"7B",X"20",X"10",X"21",X"6A",X"1E",X"79",X"E6",X"18",X"CF", - X"7B",X"11",X"20",X"99",X"01",X"10",X"00",X"ED",X"B0",X"21",X"15",X"92",X"07",X"AE",X"0F",X"21", - X"20",X"99",X"11",X"00",X"99",X"30",X"05",X"01",X"FF",X"01",X"18",X"03",X"01",X"01",X"FF",X"DD", - X"2E",X"05",X"CD",X"49",X"1E",X"41",X"DD",X"2E",X"0B",X"CB",X"0E",X"30",X"15",X"1A",X"80",X"12", - X"16",X"98",X"1A",X"80",X"12",X"1F",X"A8",X"07",X"30",X"06",X"1C",X"1A",X"EE",X"01",X"12",X"1D", - X"16",X"99",X"1C",X"1C",X"2C",X"DD",X"2D",X"20",X"E0",X"C9",X"FF",X"77",X"55",X"14",X"10",X"10", - X"14",X"55",X"77",X"FF",X"00",X"10",X"14",X"55",X"77",X"FF",X"FF",X"77",X"55",X"51",X"10",X"10", - X"51",X"55",X"77",X"FF",X"00",X"10",X"51",X"55",X"77",X"FF",X"FF",X"77",X"57",X"15",X"10",X"10", - X"15",X"57",X"77",X"FF",X"00",X"10",X"15",X"57",X"77",X"FF",X"FF",X"F7",X"D5",X"91",X"10",X"10", - X"91",X"D5",X"F7",X"FF",X"00",X"10",X"91",X"D5",X"F7",X"FF",X"3A",X"A0",X"92",X"E6",X"01",X"C6", - X"02",X"47",X"3A",X"15",X"92",X"A7",X"78",X"28",X"02",X"ED",X"44",X"DD",X"67",X"2E",X"68",X"11", - X"B0",X"92",X"DD",X"2E",X"08",X"26",X"8B",X"7E",X"FE",X"30",X"20",X"39",X"26",X"93",X"7E",X"A7", - X"28",X"33",X"EB",X"46",X"78",X"E6",X"7E",X"2C",X"86",X"4F",X"E6",X"1F",X"77",X"2C",X"79",X"07", - X"07",X"07",X"E6",X"07",X"CB",X"78",X"28",X"02",X"ED",X"44",X"EB",X"86",X"77",X"2C",X"7E",X"DD", - X"84",X"77",X"1F",X"DD",X"AC",X"07",X"30",X"07",X"26",X"9B",X"CB",X"0E",X"3F",X"CB",X"16",X"2C", - X"DD",X"2D",X"20",X"C1",X"C9",X"2C",X"1C",X"1C",X"18",X"F5",X"3A",X"15",X"92",X"C6",X"B6",X"6F", - X"26",X"99",X"CB",X"66",X"C0",X"21",X"64",X"93",X"11",X"A4",X"92",X"AF",X"BE",X"28",X"05",X"2E", - X"66",X"1C",X"BE",X"C0",X"D5",X"EB",X"21",X"63",X"9B",X"54",X"1C",X"CB",X"56",X"28",X"02",X"D1", - X"C9",X"ED",X"A8",X"26",X"93",X"54",X"ED",X"A0",X"ED",X"A8",X"26",X"9B",X"54",X"46",X"EB",X"3A", - X"27",X"98",X"E6",X"01",X"07",X"07",X"07",X"B0",X"77",X"16",X"8B",X"1A",X"62",X"E6",X"07",X"0E", - X"30",X"FE",X"05",X"30",X"07",X"0C",X"FE",X"02",X"30",X"02",X"0C",X"0C",X"71",X"FE",X"04",X"38", - X"03",X"2F",X"C6",X"47",X"CB",X"27",X"4F",X"78",X"0F",X"0F",X"0F",X"E6",X"60",X"47",X"3A",X"15", - X"92",X"A7",X"78",X"20",X"02",X"EE",X"60",X"B1",X"D1",X"12",X"26",X"88",X"36",X"06",X"3E",X"01", - X"32",X"AF",X"9A",X"2A",X"46",X"98",X"23",X"22",X"46",X"98",X"C9",X"3A",X"27",X"98",X"5F",X"3A", - X"15",X"92",X"C6",X"B6",X"6F",X"26",X"99",X"7E",X"E6",X"0A",X"FE",X"0A",X"28",X"37",X"21",X"15", - X"92",X"CB",X"46",X"28",X"02",X"EE",X"0A",X"21",X"A3",X"92",X"47",X"0E",X"01",X"7E",X"EE",X"01", - X"77",X"20",X"01",X"0C",X"21",X"62",X"93",X"7E",X"A7",X"C8",X"CB",X"48",X"20",X"0F",X"7E",X"FE", - X"D1",X"38",X"03",X"CB",X"43",X"C0",X"FE",X"E1",X"D0",X"81",X"77",X"18",X"0D",X"7E",X"FE",X"12", - X"D8",X"91",X"77",X"18",X"05",X"AF",X"32",X"A3",X"92",X"C9",X"CB",X"43",X"C8",X"C6",X"0F",X"32", - X"60",X"93",X"C9",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"80", - X"3A",X"28",X"98",X"6F",X"26",X"88",X"7E",X"A7",X"C2",X"BF",X"20",X"3A",X"8B",X"92",X"A7",X"CA", - X"C7",X"20",X"3D",X"CA",X"D1",X"20",X"26",X"93",X"7E",X"FE",X"80",X"28",X"09",X"F2",X"23",X"20", - X"34",X"18",X"3B",X"35",X"18",X"38",X"2C",X"3A",X"15",X"92",X"A7",X"20",X"1F",X"7E",X"FE",X"29", - X"20",X"0F",X"26",X"9B",X"7E",X"26",X"93",X"3D",X"20",X"07",X"3E",X"03",X"32",X"8B",X"92",X"18", - X"1D",X"34",X"20",X"1A",X"26",X"9B",X"7E",X"EE",X"01",X"77",X"18",X"12",X"7E",X"FE",X"37",X"20", - X"08",X"26",X"9B",X"7E",X"26",X"93",X"A7",X"28",X"E1",X"35",X"7E",X"3C",X"28",X"E6",X"21",X"62", - X"8B",X"7E",X"D6",X"06",X"4F",X"26",X"93",X"20",X"0C",X"7E",X"FE",X"71",X"28",X"07",X"F2",X"73", - X"20",X"34",X"C9",X"35",X"C9",X"3A",X"8B",X"92",X"FE",X"03",X"C0",X"3A",X"28",X"98",X"6F",X"36", - X"00",X"2C",X"0D",X"0C",X"28",X"09",X"11",X"63",X"93",X"AF",X"32",X"2B",X"98",X"18",X"08",X"3E", - X"01",X"32",X"27",X"98",X"11",X"61",X"93",X"7E",X"12",X"26",X"9B",X"54",X"7E",X"12",X"2D",X"26", - X"88",X"36",X"80",X"26",X"8B",X"6B",X"2D",X"36",X"06",X"2C",X"36",X"09",X"2D",X"26",X"93",X"36", - X"80",X"3E",X"01",X"32",X"14",X"90",X"32",X"15",X"90",X"32",X"25",X"90",X"32",X"B9",X"99",X"AF", - X"32",X"1D",X"90",X"32",X"B1",X"9A",X"C9",X"3C",X"32",X"8B",X"92",X"3E",X"02",X"32",X"AD",X"92", - X"C9",X"26",X"9B",X"3A",X"AD",X"92",X"5F",X"3A",X"87",X"92",X"B3",X"32",X"8D",X"92",X"CD",X"96", - X"21",X"05",X"C0",X"32",X"14",X"90",X"32",X"15",X"90",X"32",X"25",X"90",X"3E",X"02",X"32",X"8B", - X"92",X"C9",X"21",X"62",X"8B",X"7E",X"FE",X"40",X"38",X"08",X"AF",X"32",X"1C",X"90",X"32",X"BA", - X"99",X"C9",X"26",X"9B",X"CD",X"96",X"21",X"CB",X"40",X"20",X"54",X"3A",X"8B",X"92",X"CB",X"7F", - X"20",X"59",X"3A",X"8D",X"92",X"A7",X"C8",X"26",X"93",X"3A",X"28",X"98",X"5F",X"54",X"1A",X"BE", - X"28",X"07",X"F2",X"28",X"21",X"35",X"18",X"01",X"34",X"2C",X"3A",X"15",X"92",X"A7",X"28",X"0B", - X"34",X"7E",X"FE",X"7A",X"28",X"24",X"FE",X"80",X"28",X"16",X"C9",X"35",X"7E",X"3C",X"20",X"08", - X"26",X"9B",X"7E",X"EE",X"01",X"77",X"26",X"93",X"7E",X"FE",X"E6",X"28",X"0D",X"FE",X"E0",X"C0", - X"AF",X"32",X"8D",X"92",X"3E",X"07",X"32",X"63",X"8B",X"C9",X"AF",X"32",X"15",X"90",X"C9",X"3A", - X"15",X"90",X"A7",X"20",X"06",X"3C",X"32",X"0D",X"92",X"18",X"22",X"26",X"93",X"2C",X"3A",X"15", - X"92",X"A7",X"28",X"07",X"7E",X"FE",X"37",X"28",X"12",X"35",X"C9",X"7E",X"FE",X"29",X"28",X"0B", - X"34",X"C0",X"26",X"9B",X"7E",X"EE",X"01",X"77",X"26",X"93",X"C9",X"05",X"C0",X"AF",X"32",X"1C", - X"90",X"3C",X"32",X"25",X"90",X"C9",X"7E",X"4F",X"CB",X"3F",X"A9",X"4F",X"26",X"8B",X"06",X"00", - X"7E",X"E6",X"07",X"FE",X"06",X"20",X"0E",X"0D",X"0C",X"20",X"0A",X"08",X"3A",X"8D",X"92",X"A7", - X"20",X"02",X"04",X"C9",X"08",X"CB",X"41",X"20",X"07",X"FE",X"06",X"28",X"09",X"34",X"18",X"0E", - X"A7",X"28",X"03",X"35",X"18",X"08",X"0D",X"F2",X"B5",X"21",X"0E",X"03",X"18",X"E7",X"79",X"CB", - X"4F",X"28",X"02",X"EE",X"01",X"26",X"9B",X"77",X"C9",X"21",X"28",X"98",X"5E",X"16",X"88",X"1A", - X"FE",X"09",X"20",X"44",X"2C",X"7E",X"DD",X"6F",X"DD",X"26",X"91",X"DD",X"7E",X"0A",X"A7",X"C0", - X"3E",X"0C",X"DD",X"CB",X"05",X"46",X"28",X"02",X"ED",X"44",X"DD",X"77",X"0C",X"DD",X"7E",X"05", - X"0F",X"DD",X"7E",X"04",X"1F",X"D6",X"78",X"FE",X"10",X"D0",X"3A",X"C6",X"99",X"32",X"2A",X"98", - X"AF",X"DD",X"77",X"0C",X"32",X"19",X"90",X"32",X"8B",X"92",X"32",X"0D",X"92",X"3C",X"32",X"18", - X"90",X"32",X"8C",X"92",X"32",X"8D",X"92",X"C9",X"AF",X"32",X"19",X"90",X"32",X"2B",X"98",X"C9", - X"3A",X"A0",X"92",X"4F",X"E6",X"03",X"20",X"2D",X"3A",X"8A",X"92",X"ED",X"44",X"D6",X"18",X"26", - X"21",X"07",X"CB",X"14",X"07",X"CB",X"14",X"E6",X"E0",X"C6",X"15",X"6F",X"79",X"0F",X"0F",X"E6", - X"03",X"20",X"01",X"3C",X"C6",X"17",X"11",X"16",X"00",X"0E",X"06",X"06",X"0A",X"77",X"2C",X"10", - X"FC",X"19",X"0D",X"20",X"F6",X"21",X"8B",X"92",X"CB",X"7E",X"20",X"0C",X"3A",X"28",X"98",X"5F", - X"16",X"88",X"1A",X"FE",X"09",X"C2",X"35",X"23",X"21",X"8C",X"92",X"35",X"C2",X"4B",X"23",X"3A", - X"2A",X"98",X"77",X"21",X"8B",X"92",X"CB",X"7E",X"20",X"2F",X"32",X"A5",X"9A",X"3A",X"29",X"98", - X"C6",X"0D",X"5F",X"16",X"91",X"3E",X"FF",X"12",X"34",X"7E",X"E6",X"0F",X"FE",X"0B",X"28",X"40", - X"CB",X"76",X"20",X"2B",X"F5",X"4F",X"07",X"81",X"21",X"A9",X"23",X"CF",X"F1",X"CD",X"98",X"23", - X"06",X"06",X"7E",X"12",X"23",X"E7",X"10",X"FA",X"C9",X"34",X"7E",X"E6",X"0F",X"FE",X"0B",X"20", - X"12",X"AF",X"32",X"18",X"90",X"32",X"A5",X"9A",X"32",X"A6",X"9A",X"32",X"2B",X"98",X"C9",X"ED", - X"44",X"C6",X"0B",X"CD",X"98",X"23",X"06",X"06",X"0E",X"24",X"79",X"12",X"E7",X"10",X"FB",X"C9", - X"CB",X"76",X"28",X"46",X"3A",X"0D",X"92",X"A7",X"28",X"07",X"CB",X"6E",X"20",X"03",X"36",X"68", - X"C9",X"AF",X"32",X"18",X"90",X"32",X"A5",X"9A",X"32",X"A6",X"9A",X"3A",X"0D",X"92",X"A7",X"3A", - X"29",X"98",X"20",X"0F",X"C6",X"0D",X"5F",X"16",X"91",X"AF",X"32",X"2B",X"98",X"3C",X"32",X"28", - X"98",X"12",X"C9",X"C6",X"08",X"6F",X"26",X"91",X"11",X"6B",X"04",X"73",X"2C",X"72",X"AF",X"32", - X"BA",X"99",X"3C",X"32",X"11",X"90",X"32",X"8E",X"92",X"C9",X"3E",X"40",X"32",X"8C",X"92",X"3E", - X"40",X"32",X"8B",X"92",X"C9",X"3E",X"03",X"32",X"2A",X"98",X"36",X"80",X"AF",X"32",X"8D",X"92", - X"32",X"BA",X"99",X"3C",X"32",X"8C",X"92",X"32",X"14",X"90",X"C9",X"3A",X"8B",X"92",X"FE",X"40", - X"C0",X"3A",X"15",X"92",X"4F",X"3A",X"62",X"93",X"CB",X"41",X"28",X"04",X"C6",X"0E",X"ED",X"44", - X"47",X"3A",X"8A",X"92",X"90",X"C6",X"1B",X"FE",X"36",X"D0",X"3A",X"01",X"92",X"3D",X"28",X"0B", - X"3A",X"14",X"90",X"4F",X"3A",X"13",X"92",X"EE",X"01",X"A1",X"C8",X"AF",X"32",X"14",X"90",X"32", - X"A5",X"9A",X"32",X"25",X"90",X"32",X"13",X"92",X"3C",X"32",X"1C",X"90",X"32",X"A6",X"9A",X"32", - X"BA",X"99",X"3E",X"0A",X"32",X"2A",X"98",X"C9",X"4F",X"3A",X"8A",X"92",X"ED",X"44",X"C6",X"10", - X"16",X"20",X"07",X"CB",X"12",X"07",X"CB",X"12",X"E6",X"E0",X"C6",X"14",X"81",X"5F",X"C9",X"24", - X"4E",X"4F",X"50",X"51",X"24",X"24",X"52",X"53",X"54",X"55",X"24",X"24",X"56",X"57",X"58",X"59", - X"24",X"24",X"5A",X"5B",X"5C",X"5D",X"24",X"24",X"5E",X"5F",X"60",X"61",X"24",X"62",X"63",X"64", - X"65",X"66",X"67",X"68",X"69",X"6A",X"6B",X"6C",X"6D",X"6E",X"6F",X"70",X"71",X"72",X"73",X"74", - X"75",X"76",X"77",X"78",X"79",X"7A",X"7B",X"7C",X"7D",X"7E",X"7F",X"3A",X"A0",X"92",X"CB",X"47", - X"CA",X"A4",X"25",X"E6",X"02",X"5F",X"3A",X"A6",X"92",X"DD",X"6F",X"06",X"20",X"16",X"88",X"1A", - X"CB",X"27",X"38",X"20",X"21",X"0D",X"24",X"D7",X"7E",X"23",X"66",X"6F",X"E9",X"24",X"24",X"96", - X"24",X"6D",X"24",X"5B",X"25",X"C0",X"24",X"43",X"25",X"5B",X"25",X"9E",X"25",X"4A",X"24",X"30", - X"24",X"1D",X"DD",X"2C",X"3E",X"04",X"83",X"5F",X"10",X"D3",X"DD",X"7D",X"32",X"A6",X"92",X"C9", - X"6B",X"26",X"01",X"4E",X"2C",X"6E",X"26",X"99",X"7E",X"08",X"69",X"4E",X"1C",X"1A",X"C6",X"11", - X"6F",X"26",X"91",X"08",X"77",X"2C",X"71",X"C3",X"21",X"24",X"26",X"8B",X"6B",X"1C",X"1A",X"3D", - X"28",X"0D",X"12",X"1D",X"E6",X"03",X"20",X"CC",X"7E",X"C6",X"04",X"77",X"C3",X"24",X"24",X"26", - X"93",X"AF",X"77",X"26",X"9B",X"77",X"1D",X"3E",X"80",X"12",X"C3",X"24",X"24",X"26",X"9B",X"6B", - X"7E",X"E6",X"01",X"26",X"8B",X"20",X"0A",X"7E",X"E6",X"07",X"FE",X"06",X"28",X"13",X"34",X"18", - X"28",X"7E",X"E6",X"07",X"20",X"08",X"26",X"9B",X"CB",X"86",X"26",X"8B",X"18",X"1B",X"35",X"18", - X"18",X"3E",X"01",X"12",X"18",X"13",X"26",X"8B",X"6B",X"3A",X"A2",X"92",X"CB",X"0E",X"0F",X"0F", - X"CB",X"16",X"3A",X"0B",X"92",X"A7",X"CA",X"22",X"24",X"26",X"01",X"4E",X"2C",X"6E",X"26",X"98", - X"7E",X"16",X"93",X"12",X"1C",X"69",X"7E",X"12",X"16",X"9B",X"2C",X"7E",X"12",X"C3",X"21",X"24", - X"6B",X"1C",X"1A",X"FE",X"45",X"28",X"2D",X"3C",X"12",X"1D",X"FE",X"45",X"20",X"02",X"C6",X"03", - X"FE",X"44",X"20",X"1A",X"26",X"93",X"08",X"7E",X"D6",X"08",X"77",X"2C",X"7E",X"D6",X"08",X"77", - X"30",X"06",X"26",X"9B",X"7E",X"EE",X"01",X"77",X"2D",X"26",X"9B",X"36",X"0C",X"08",X"26",X"8B", - X"77",X"C3",X"24",X"24",X"1D",X"26",X"92",X"7E",X"FE",X"01",X"20",X"0F",X"26",X"93",X"36",X"00", - X"26",X"9B",X"36",X"00",X"26",X"88",X"36",X"80",X"C3",X"24",X"24",X"26",X"8B",X"77",X"FE",X"37", - X"38",X"0A",X"0E",X"0D",X"2C",X"FE",X"3A",X"38",X"01",X"0C",X"71",X"2D",X"26",X"93",X"0E",X"08", - X"FE",X"3B",X"30",X"06",X"0E",X"00",X"7E",X"C6",X"08",X"77",X"2C",X"7E",X"C6",X"08",X"77",X"26", - X"9B",X"30",X"04",X"7E",X"EE",X"01",X"77",X"2D",X"71",X"26",X"88",X"36",X"05",X"2C",X"36",X"13", - X"C3",X"24",X"24",X"6B",X"2C",X"62",X"35",X"C2",X"24",X"24",X"2D",X"36",X"80",X"26",X"93",X"36", - X"00",X"26",X"9B",X"36",X"00",X"3E",X"80",X"12",X"C3",X"24",X"24",X"26",X"93",X"6B",X"CB",X"FD", - X"7E",X"FE",X"F4",X"30",X"1A",X"2C",X"4E",X"26",X"9B",X"7E",X"2D",X"0F",X"79",X"1F",X"FE",X"0B", - X"38",X"0D",X"FE",X"A5",X"30",X"09",X"1A",X"FE",X"06",X"C2",X"22",X"24",X"C3",X"24",X"24",X"CB", - X"BD",X"1A",X"FE",X"03",X"28",X"0A",X"3E",X"80",X"12",X"26",X"93",X"36",X"00",X"C3",X"24",X"24", - X"1C",X"1A",X"1D",X"C6",X"13",X"6F",X"26",X"91",X"36",X"00",X"6B",X"C3",X"86",X"25",X"3E",X"03", - X"12",X"C3",X"22",X"24",X"CB",X"4F",X"C8",X"21",X"A6",X"92",X"7E",X"36",X"00",X"2C",X"77",X"C9", - X"21",X"7C",X"28",X"22",X"E0",X"92",X"3A",X"21",X"98",X"4F",X"FE",X"17",X"38",X"04",X"D6",X"04", - X"18",X"F8",X"47",X"3C",X"E6",X"03",X"28",X"19",X"3A",X"84",X"99",X"2E",X"11",X"CD",X"4E",X"10", - X"7D",X"21",X"B6",X"26",X"D7",X"11",X"02",X"27",X"78",X"CB",X"38",X"CB",X"38",X"90",X"3D",X"18", - X"0D",X"21",X"FA",X"26",X"79",X"CB",X"3F",X"CB",X"3F",X"E6",X"07",X"11",X"EC",X"27",X"D7",X"7E", - X"EB",X"D7",X"7E",X"23",X"32",X"E2",X"92",X"7E",X"23",X"32",X"E3",X"92",X"11",X"20",X"89",X"3E", - X"7E",X"12",X"1C",X"7E",X"23",X"FE",X"FF",X"CA",X"8F",X"26",X"4F",X"D5",X"E5",X"21",X"00",X"91", - X"3E",X"FF",X"06",X"10",X"DF",X"79",X"E6",X"0F",X"28",X"2A",X"47",X"CB",X"3F",X"C6",X"04",X"5F", - X"CD",X"00",X"10",X"6F",X"26",X"00",X"7B",X"CD",X"61",X"10",X"CB",X"40",X"28",X"02",X"CB",X"DF", - X"26",X"91",X"6F",X"7E",X"3C",X"20",X"E9",X"78",X"07",X"CB",X"01",X"30",X"02",X"F6",X"40",X"F6", - X"38",X"77",X"10",X"DC",X"21",X"00",X"91",X"ED",X"5B",X"E0",X"92",X"06",X"08",X"7E",X"FE",X"FF", - X"28",X"03",X"23",X"18",X"F8",X"1A",X"77",X"13",X"23",X"78",X"FE",X"05",X"20",X"02",X"2E",X"08", - X"10",X"EB",X"ED",X"53",X"E0",X"92",X"E1",X"D1",X"46",X"23",X"4E",X"23",X"E5",X"21",X"00",X"91", - X"78",X"12",X"7E",X"FE",X"FF",X"28",X"10",X"1C",X"12",X"1C",X"79",X"12",X"1C",X"CB",X"DD",X"7E", - X"12",X"1C",X"CB",X"9D",X"23",X"18",X"E9",X"3E",X"7E",X"12",X"1C",X"E1",X"C3",X"03",X"26",X"1D", - X"3A",X"2B",X"98",X"47",X"3A",X"27",X"98",X"3D",X"A0",X"28",X"17",X"3A",X"25",X"98",X"A7",X"28", - X"11",X"62",X"7B",X"D6",X"04",X"6F",X"7E",X"12",X"1C",X"3E",X"04",X"12",X"1C",X"3E",X"87",X"32", - X"04",X"8B",X"3E",X"7F",X"12",X"C9",X"00",X"12",X"24",X"36",X"00",X"48",X"6C",X"5A",X"48",X"6C", - X"00",X"7E",X"A2",X"90",X"B4",X"D8",X"C6",X"00",X"12",X"48",X"6C",X"5A",X"7E",X"A2",X"00",X"7E", - X"D8",X"C6",X"B4",X"D8",X"C6",X"B4",X"D8",X"C6",X"00",X"12",X"7E",X"A2",X"90",X"7E",X"D8",X"C6", - X"B4",X"D8",X"C6",X"B4",X"D8",X"C6",X"B4",X"D8",X"C6",X"00",X"12",X"48",X"36",X"24",X"48",X"6C", - X"00",X"7E",X"A2",X"90",X"B4",X"D8",X"00",X"B4",X"D8",X"C6",X"00",X"12",X"24",X"36",X"48",X"5A", - X"6C",X"7E",X"14",X"00",X"00",X"00",X"C0",X"00",X"01",X"01",X"00",X"41",X"41",X"00",X"40",X"40", - X"00",X"00",X"00",X"FF",X"14",X"01",X"00",X"42",X"82",X"00",X"03",X"85",X"00",X"43",X"C5",X"00", - X"42",X"C4",X"00",X"02",X"84",X"FF",X"14",X"01",X"82",X"00",X"C0",X"00",X"01",X"01",X"00",X"41", - X"41",X"02",X"40",X"40",X"02",X"00",X"00",X"FF",X"14",X"01",X"82",X"02",X"C2",X"00",X"03",X"85", - X"00",X"43",X"C5",X"02",X"42",X"C4",X"02",X"02",X"84",X"FF",X"14",X"01",X"82",X"00",X"C0",X"00", - X"01",X"C1",X"00",X"41",X"81",X"02",X"40",X"80",X"02",X"40",X"80",X"FF",X"14",X"01",X"82",X"00", - X"C0",X"42",X"01",X"01",X"F2",X"41",X"41",X"02",X"40",X"40",X"02",X"00",X"00",X"FF",X"14",X"01", - X"A4",X"02",X"C2",X"52",X"03",X"85",X"F2",X"43",X"C5",X"02",X"42",X"C4",X"02",X"02",X"84",X"FF", - X"14",X"01",X"82",X"00",X"C0",X"52",X"01",X"C1",X"F2",X"41",X"81",X"02",X"40",X"80",X"02",X"40", - X"80",X"FF",X"14",X"01",X"A4",X"00",X"C0",X"42",X"01",X"01",X"F4",X"41",X"41",X"04",X"40",X"40", - X"04",X"00",X"00",X"FF",X"14",X"01",X"A4",X"02",X"C2",X"52",X"03",X"85",X"F4",X"43",X"C5",X"04", - X"42",X"C4",X"04",X"02",X"84",X"FF",X"14",X"03",X"A4",X"00",X"C0",X"54",X"01",X"C1",X"F4",X"41", - X"81",X"04",X"40",X"80",X"04",X"40",X"80",X"FF",X"14",X"03",X"A4",X"00",X"C0",X"54",X"01",X"01", - X"F4",X"41",X"41",X"04",X"40",X"40",X"04",X"00",X"00",X"FF",X"14",X"03",X"A4",X"02",X"C2",X"54", - X"03",X"85",X"F4",X"43",X"C5",X"04",X"42",X"C4",X"04",X"02",X"84",X"FF",X"FF",X"00",X"00",X"06", - X"C6",X"00",X"07",X"07",X"00",X"47",X"47",X"00",X"46",X"46",X"00",X"06",X"06",X"FF",X"FF",X"00", - X"00",X"08",X"C8",X"00",X"09",X"C9",X"00",X"09",X"C9",X"00",X"48",X"48",X"00",X"08",X"08",X"FF", - X"FF",X"00",X"00",X"0A",X"4A",X"00",X"0B",X"CB",X"00",X"0B",X"CB",X"00",X"0A",X"4A",X"00",X"16", - X"56",X"FF",X"FF",X"00",X"00",X"0C",X"CC",X"00",X"0D",X"0D",X"00",X"4D",X"4D",X"00",X"0C",X"CC", - X"00",X"17",X"D7",X"FF",X"FF",X"00",X"00",X"0E",X"0E",X"00",X"0F",X"0F",X"00",X"4F",X"4F",X"00", - X"0E",X"0E",X"00",X"4E",X"4E",X"FF",X"FF",X"00",X"00",X"10",X"10",X"00",X"11",X"D1",X"00",X"11", - X"D1",X"00",X"50",X"50",X"00",X"10",X"10",X"FF",X"FF",X"00",X"00",X"12",X"12",X"00",X"13",X"13", - X"00",X"53",X"53",X"00",X"52",X"52",X"00",X"12",X"12",X"FF",X"FF",X"00",X"00",X"14",X"D4",X"00", - X"15",X"15",X"00",X"55",X"55",X"00",X"14",X"D4",X"00",X"14",X"D4",X"FF",X"58",X"5A",X"5C",X"5E", - X"28",X"2A",X"2C",X"2E",X"30",X"34",X"36",X"32",X"50",X"52",X"54",X"56",X"42",X"46",X"40",X"44", - X"4A",X"4E",X"48",X"4C",X"1A",X"1E",X"20",X"24",X"22",X"26",X"18",X"1C",X"08",X"0C",X"12",X"16", - X"10",X"14",X"0A",X"0E",X"21",X"20",X"89",X"22",X"22",X"98",X"FD",X"21",X"16",X"29",X"3A",X"25", - X"98",X"A7",X"20",X"27",X"3A",X"21",X"98",X"0F",X"0F",X"4F",X"0F",X"47",X"E6",X"1C",X"78",X"28", - X"02",X"3E",X"03",X"E6",X"03",X"21",X"0E",X"29",X"CF",X"11",X"84",X"92",X"79",X"ED",X"A0",X"ED", - X"A0",X"21",X"1C",X"29",X"E6",X"07",X"D7",X"56",X"5A",X"18",X"03",X"11",X"24",X"36",X"21",X"08", - X"8B",X"DD",X"2E",X"01",X"06",X"14",X"DD",X"62",X"CD",X"F7",X"28",X"06",X"08",X"DD",X"26",X"10", - X"CD",X"F7",X"28",X"06",X"10",X"DD",X"63",X"DD",X"2D",X"20",X"08",X"FD",X"4E",X"00",X"FD",X"23", - X"DD",X"2E",X"08",X"CB",X"01",X"DD",X"7C",X"1F",X"77",X"2C",X"2C",X"10",X"EA",X"C9",X"0A",X"B8", - X"0F",X"B9",X"14",X"BC",X"1E",X"BD",X"A5",X"5A",X"A9",X"0F",X"0A",X"50",X"36",X"24",X"D4",X"BA", - X"E4",X"CC",X"A8",X"F4",X"2A",X"22",X"98",X"7E",X"FE",X"7F",X"CA",X"37",X"2A",X"FE",X"7E",X"20", - X"30",X"3A",X"42",X"98",X"A7",X"C8",X"3A",X"87",X"92",X"A7",X"20",X"1F",X"3A",X"25",X"98",X"47", - X"A7",X"20",X"0F",X"3A",X"AC",X"92",X"FE",X"01",X"20",X"06",X"3E",X"08",X"32",X"A8",X"92",X"C9", - X"A7",X"C0",X"23",X"22",X"22",X"98",X"21",X"26",X"98",X"34",X"C9",X"3E",X"02",X"32",X"AC",X"92", - X"C9",X"4F",X"CB",X"7F",X"20",X"06",X"3A",X"A0",X"92",X"E6",X"07",X"C0",X"CB",X"21",X"06",X"0C", - X"11",X"14",X"00",X"DD",X"21",X"00",X"91",X"DD",X"CB",X"13",X"46",X"28",X"05",X"DD",X"19",X"10", - X"F6",X"C9",X"23",X"7E",X"47",X"E6",X"78",X"FE",X"78",X"78",X"20",X"02",X"CB",X"B7",X"DD",X"77", - X"10",X"23",X"22",X"22",X"98",X"26",X"88",X"6F",X"36",X"07",X"2C",X"DD",X"5D",X"73",X"26",X"93", - X"E6",X"38",X"FE",X"38",X"28",X"1B",X"2D",X"26",X"8B",X"7E",X"57",X"E6",X"78",X"77",X"2C",X"7A", - X"E6",X"07",X"CB",X"7A",X"77",X"3E",X"00",X"28",X"03",X"3A",X"E3",X"92",X"DD",X"77",X"0F",X"18", - X"1E",X"11",X"10",X"02",X"CB",X"70",X"20",X"0D",X"11",X"18",X"03",X"3A",X"26",X"98",X"FE",X"02", - X"20",X"03",X"11",X"08",X"00",X"26",X"8B",X"72",X"2D",X"73",X"2C",X"DD",X"36",X"0F",X"00",X"51", - X"CB",X"B9",X"06",X"08",X"CB",X"49",X"28",X"02",X"06",X"44",X"DD",X"70",X"0E",X"06",X"00",X"21", - X"4A",X"2A",X"09",X"7E",X"23",X"DD",X"77",X"08",X"AF",X"ED",X"6F",X"47",X"7E",X"E6",X"1F",X"DD", - X"77",X"09",X"78",X"E6",X"0E",X"47",X"07",X"80",X"21",X"7A",X"2A",X"D7",X"CB",X"7A",X"28",X"03", - X"23",X"23",X"23",X"7E",X"23",X"DD",X"77",X"01",X"7E",X"23",X"DD",X"77",X"03",X"7E",X"23",X"DD", - X"77",X"05",X"AF",X"DD",X"77",X"00",X"DD",X"77",X"02",X"DD",X"77",X"04",X"3C",X"DD",X"77",X"0D", - X"B2",X"E6",X"81",X"DD",X"77",X"13",X"C9",X"3A",X"87",X"92",X"A7",X"C0",X"32",X"08",X"90",X"3C", - X"32",X"04",X"90",X"32",X"10",X"90",X"32",X"24",X"98",X"C9",X"1D",X"00",X"67",X"20",X"9F",X"40", - X"D4",X"20",X"7B",X"01",X"B0",X"61",X"E8",X"01",X"F5",X"21",X"0B",X"02",X"1B",X"22",X"2B",X"82", - X"41",X"22",X"5D",X"82",X"79",X"22",X"9E",X"02",X"BA",X"22",X"D9",X"02",X"FB",X"22",X"1D",X"03", - X"33",X"23",X"DA",X"0F",X"F0",X"2F",X"2B",X"A2",X"5D",X"A2",X"9B",X"34",X"03",X"9B",X"44",X"03", - X"23",X"00",X"00",X"23",X"78",X"02",X"9B",X"2C",X"03",X"9B",X"4C",X"03",X"2B",X"00",X"00",X"2B", - X"78",X"02",X"9B",X"34",X"03",X"9B",X"34",X"03",X"9B",X"44",X"03",X"9B",X"44",X"03",X"3A",X"A0", - X"92",X"3D",X"E6",X"03",X"C0",X"3A",X"A7",X"92",X"47",X"3A",X"08",X"90",X"B0",X"28",X"48",X"3A", - X"0F",X"92",X"A7",X"0E",X"01",X"28",X"02",X"0D",X"0D",X"2E",X"00",X"06",X"0A",X"26",X"99",X"7E", - X"81",X"77",X"26",X"98",X"7E",X"81",X"77",X"2C",X"2C",X"10",X"F2",X"3A",X"24",X"98",X"A7",X"3A", - X"00",X"99",X"28",X"03",X"A7",X"28",X"11",X"FE",X"20",X"20",X"06",X"3E",X"01",X"32",X"0F",X"92", - X"C9",X"D6",X"E0",X"C0",X"32",X"0F",X"92",X"C9",X"AF",X"32",X"0F",X"92",X"32",X"0A",X"90",X"3C", - X"32",X"A0",X"9A",X"32",X"09",X"90",X"C9",X"32",X"0A",X"90",X"C9",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"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"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"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"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"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"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"3A",X"21",X"98",X"FE",X"1B",X"38",X"04",X"D6",X"04",X"18",X"F8",X"3D",X"6F",X"07",X"07",X"85", - X"5F",X"3A",X"84",X"99",X"21",X"65",X"2C",X"CF",X"7E",X"23",X"66",X"6F",X"7B",X"D7",X"11",X"C0", - X"99",X"06",X"05",X"7E",X"4F",X"07",X"07",X"07",X"07",X"E6",X"0F",X"12",X"1C",X"79",X"E6",X"0F", - X"12",X"1C",X"23",X"10",X"EE",X"3A",X"21",X"98",X"FE",X"03",X"30",X"03",X"AF",X"18",X"07",X"F6", - X"FC",X"3C",X"28",X"02",X"3E",X"0A",X"12",X"01",X"16",X"02",X"ED",X"43",X"C1",X"92",X"ED",X"43", - X"C0",X"92",X"3A",X"21",X"98",X"FE",X"10",X"38",X"02",X"3E",X"10",X"07",X"07",X"E6",X"70",X"C6", - X"40",X"32",X"BB",X"99",X"C9",X"EF",X"2C",X"71",X"2D",X"F3",X"2D",X"6D",X"2C",X"00",X"00",X"22", - X"C6",X"00",X"00",X"11",X"23",X"C7",X"00",X"00",X"00",X"00",X"C0",X"00",X"11",X"12",X"23",X"97", - X"00",X"11",X"23",X"23",X"98",X"00",X"21",X"24",X"33",X"98",X"00",X"00",X"00",X"00",X"90",X"00", - X"22",X"25",X"33",X"99",X"10",X"22",X"36",X"34",X"69",X"10",X"10",X"11",X"23",X"97",X"00",X"00", - X"00",X"00",X"60",X"00",X"32",X"46",X"34",X"67",X"11",X"32",X"67",X"44",X"68",X"11",X"32",X"67", - X"45",X"68",X"11",X"00",X"00",X"00",X"60",X"00",X"42",X"78",X"45",X"69",X"11",X"42",X"78",X"45", - X"69",X"11",X"11",X"22",X"23",X"97",X"11",X"00",X"00",X"00",X"60",X"00",X"52",X"88",X"46",X"3A", - X"11",X"52",X"88",X"56",X"3A",X"11",X"52",X"88",X"56",X"3C",X"11",X"00",X"00",X"00",X"30",X"00", - X"62",X"89",X"57",X"3C",X"11",X"62",X"99",X"57",X"3C",X"11",X"62",X"99",X"57",X"3C",X"11",X"00", - X"00",X"12",X"C6",X"00",X"00",X"11",X"22",X"C6",X"00",X"00",X"00",X"00",X"C0",X"00",X"11",X"12", - X"23",X"97",X"00",X"11",X"12",X"23",X"97",X"00",X"00",X"11",X"23",X"C7",X"00",X"00",X"00",X"00", - X"90",X"00",X"21",X"23",X"33",X"98",X"10",X"21",X"24",X"33",X"98",X"10",X"21",X"25",X"34",X"98", - X"10",X"00",X"00",X"00",X"60",X"00",X"22",X"25",X"34",X"68",X"11",X"32",X"36",X"44",X"68",X"11", - X"11",X"11",X"23",X"67",X"01",X"00",X"00",X"00",X"60",X"00",X"32",X"36",X"45",X"68",X"11",X"32", - X"46",X"45",X"69",X"11",X"32",X"67",X"45",X"69",X"11",X"00",X"00",X"00",X"60",X"00",X"42",X"67", - X"46",X"3A",X"11",X"42",X"78",X"56",X"3A",X"11",X"52",X"78",X"56",X"3A",X"11",X"00",X"00",X"00", - X"30",X"00",X"52",X"88",X"56",X"3C",X"11",X"62",X"99",X"57",X"3C",X"11",X"62",X"99",X"57",X"3C", - X"11",X"00",X"00",X"23",X"C6",X"00",X"10",X"11",X"23",X"97",X"00",X"00",X"00",X"00",X"C0",X"00", - X"11",X"12",X"33",X"98",X"00",X"21",X"23",X"34",X"68",X"00",X"21",X"24",X"34",X"68",X"00",X"00", - X"00",X"00",X"90",X"00",X"32",X"36",X"34",X"67",X"10",X"32",X"46",X"44",X"68",X"10",X"11",X"11", - X"23",X"97",X"10",X"00",X"00",X"00",X"60",X"00",X"42",X"67",X"45",X"68",X"11",X"42",X"67",X"45", - X"69",X"11",X"42",X"78",X"46",X"69",X"11",X"00",X"00",X"00",X"60",X"00",X"52",X"78",X"46",X"3A", - X"11",X"52",X"88",X"56",X"3A",X"11",X"52",X"88",X"56",X"3A",X"11",X"00",X"00",X"00",X"60",X"00", - X"62",X"88",X"56",X"3C",X"11",X"62",X"89",X"57",X"3C",X"11",X"62",X"89",X"57",X"3E",X"11",X"00", - X"00",X"00",X"30",X"00",X"72",X"99",X"57",X"3E",X"11",X"72",X"99",X"68",X"3E",X"11",X"72",X"99", - X"68",X"3E",X"11",X"00",X"00",X"23",X"C6",X"00",X"10",X"11",X"23",X"97",X"00",X"00",X"00",X"00", - X"C0",X"00",X"11",X"12",X"34",X"98",X"00",X"21",X"23",X"34",X"68",X"00",X"21",X"24",X"34",X"68", - X"00",X"00",X"00",X"00",X"90",X"00",X"32",X"36",X"45",X"67",X"11",X"32",X"46",X"46",X"68",X"11", - X"32",X"56",X"46",X"69",X"11",X"00",X"00",X"00",X"60",X"00",X"42",X"67",X"56",X"6A",X"11",X"42", - X"67",X"56",X"6A",X"11",X"42",X"78",X"57",X"6A",X"11",X"00",X"00",X"00",X"60",X"00",X"52",X"78", - X"57",X"3A",X"11",X"52",X"88",X"57",X"3A",X"11",X"52",X"88",X"68",X"3C",X"11",X"00",X"00",X"00", - X"60",X"00",X"62",X"88",X"68",X"3C",X"11",X"62",X"89",X"68",X"3C",X"11",X"62",X"89",X"68",X"3E", - X"11",X"00",X"00",X"00",X"30",X"00",X"72",X"99",X"68",X"3E",X"11",X"72",X"99",X"68",X"3E",X"11", - X"72",X"99",X"68",X"3E",X"11",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"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"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"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"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"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"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"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"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"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"FF",X"FF",X"FF",X"FF",X"50", - X"21",X"FD",X"83",X"3A",X"40",X"98",X"A7",X"28",X"03",X"21",X"E8",X"83",X"22",X"00",X"8A",X"11", - X"3D",X"8A",X"CD",X"F7",X"31",X"D0",X"11",X"37",X"8A",X"CD",X"F7",X"31",X"3E",X"05",X"30",X"27", - X"11",X"31",X"8A",X"CD",X"F7",X"31",X"3E",X"04",X"30",X"1D",X"11",X"2B",X"8A",X"CD",X"F7",X"31", - X"3E",X"03",X"30",X"13",X"11",X"25",X"8A",X"CD",X"F7",X"31",X"3E",X"02",X"30",X"09",X"3E",X"FF", - X"32",X"AC",X"9A",X"3E",X"01",X"18",X"03",X"32",X"B0",X"9A",X"32",X"11",X"8A",X"21",X"A6",X"31", - X"3D",X"CF",X"CD",X"18",X"31",X"3A",X"11",X"8A",X"21",X"A1",X"31",X"3D",X"D7",X"7E",X"21",X"49", - X"8A",X"11",X"4C",X"8A",X"A7",X"28",X"05",X"4F",X"06",X"00",X"ED",X"B8",X"06",X"03",X"3E",X"24", - X"22",X"04",X"8A",X"2C",X"77",X"10",X"FC",X"3E",X"49",X"32",X"10",X"8A",X"21",X"7F",X"32",X"CD", - X"28",X"33",X"CD",X"1B",X"33",X"CD",X"28",X"33",X"11",X"09",X"83",X"2A",X"00",X"8A",X"CD",X"75", - X"32",X"21",X"49",X"81",X"11",X"E0",X"FF",X"36",X"0A",X"19",X"36",X"0A",X"19",X"36",X"0A",X"CD", - X"1D",X"32",X"CD",X"80",X"31",X"3E",X"04",X"32",X"AE",X"92",X"3A",X"AE",X"92",X"A7",X"20",X"FA", - X"3E",X"28",X"32",X"AE",X"92",X"CD",X"1D",X"32",X"CD",X"80",X"31",X"3A",X"A0",X"92",X"4F",X"CD", - X"ED",X"32",X"3A",X"A0",X"92",X"B9",X"28",X"F7",X"4F",X"E6",X"0F",X"CC",X"41",X"31",X"21",X"B6", - X"99",X"3A",X"15",X"92",X"A7",X"28",X"01",X"23",X"CB",X"66",X"CA",X"4C",X"31",X"7E",X"E6",X"0A", - X"21",X"02",X"8A",X"11",X"03",X"8A",X"BE",X"28",X"04",X"77",X"3E",X"FD",X"12",X"1A",X"3C",X"12", - X"E6",X"0F",X"20",X"CB",X"7E",X"FE",X"08",X"28",X"24",X"FE",X"02",X"20",X"C2",X"3E",X"28",X"32", - X"AE",X"92",X"3A",X"10",X"8A",X"6F",X"26",X"81",X"7E",X"3D",X"FE",X"09",X"CC",X"38",X"31",X"FE", - X"29",X"CC",X"3B",X"31",X"77",X"C3",X"BF",X"30",X"7E",X"23",X"66",X"6F",X"E9",X"3A",X"10",X"8A", - X"6F",X"26",X"81",X"3E",X"28",X"32",X"AE",X"92",X"7E",X"3C",X"FE",X"2B",X"CC",X"3E",X"31",X"FE", - X"25",X"CC",X"38",X"31",X"77",X"C3",X"BF",X"30",X"3E",X"2A",X"C9",X"3E",X"24",X"C9",X"3E",X"0A", - X"C9",X"3A",X"10",X"8A",X"6F",X"26",X"85",X"7E",X"EE",X"05",X"77",X"C9",X"3A",X"10",X"8A",X"6F", - X"26",X"85",X"36",X"00",X"26",X"81",X"4E",X"3E",X"28",X"32",X"AE",X"92",X"2A",X"04",X"8A",X"23", - X"71",X"22",X"04",X"8A",X"21",X"10",X"8A",X"7E",X"D6",X"20",X"77",X"D2",X"B5",X"30",X"CD",X"1D", - X"32",X"CD",X"80",X"31",X"3E",X"4C",X"32",X"A0",X"92",X"3A",X"A0",X"92",X"A7",X"20",X"FA",X"C9", - X"3A",X"11",X"8A",X"21",X"97",X"31",X"3D",X"CF",X"7E",X"23",X"66",X"6F",X"06",X"16",X"11",X"E0", - X"FF",X"36",X"05",X"19",X"10",X"FB",X"C9",X"74",X"87",X"76",X"87",X"78",X"87",X"7A",X"87",X"7C", - X"87",X"0C",X"09",X"06",X"03",X"00",X"B0",X"31",X"B4",X"31",X"B8",X"31",X"CE",X"31",X"D9",X"31", - X"3E",X"12",X"18",X"06",X"3E",X"0C",X"18",X"02",X"3E",X"06",X"21",X"37",X"8A",X"11",X"3D",X"8A", - X"01",X"06",X"00",X"ED",X"B8",X"11",X"37",X"8A",X"4F",X"ED",X"B8",X"C3",X"D9",X"31",X"11",X"3D", - X"8A",X"21",X"37",X"8A",X"01",X"06",X"00",X"ED",X"B8",X"3A",X"11",X"8A",X"3D",X"21",X"ED",X"31", - X"CF",X"5E",X"23",X"56",X"2A",X"00",X"8A",X"01",X"06",X"00",X"ED",X"B8",X"C9",X"25",X"8A",X"2B", - X"8A",X"31",X"8A",X"37",X"8A",X"3D",X"8A",X"2A",X"00",X"8A",X"06",X"06",X"1A",X"FE",X"24",X"28", - X"0D",X"7E",X"FE",X"24",X"C8",X"1A",X"BE",X"C0",X"2D",X"1D",X"10",X"F0",X"AF",X"C9",X"BE",X"28", - X"F7",X"AF",X"18",X"F2",X"21",X"45",X"33",X"CD",X"28",X"33",X"CD",X"28",X"33",X"21",X"B4",X"32", - X"CD",X"1B",X"33",X"06",X"01",X"CD",X"31",X"32",X"CD",X"31",X"32",X"CD",X"31",X"32",X"CD",X"31", - X"32",X"78",X"3D",X"87",X"87",X"87",X"21",X"C5",X"32",X"D7",X"5E",X"23",X"56",X"23",X"78",X"12", - X"CD",X"73",X"32",X"CD",X"70",X"32",X"CD",X"70",X"32",X"CD",X"73",X"32",X"CD",X"73",X"32",X"7E", - X"23",X"4E",X"23",X"E5",X"61",X"6F",X"CD",X"75",X"32",X"7B",X"D6",X"C0",X"5F",X"30",X"01",X"15", - X"E1",X"7E",X"23",X"66",X"6F",X"CD",X"70",X"32",X"CD",X"70",X"32",X"CD",X"70",X"32",X"04",X"C9", - X"7E",X"12",X"23",X"E7",X"C9",X"0E",X"06",X"7E",X"12",X"2B",X"E7",X"0D",X"20",X"F9",X"C9",X"24", - X"83",X"15",X"04",X"0E",X"17",X"1D",X"0E",X"1B",X"24",X"22",X"18",X"1E",X"1B",X"24",X"12",X"17", - X"12",X"1D",X"12",X"0A",X"15",X"1C",X"24",X"2C",X"E7",X"82",X"10",X"1C",X"0C",X"18",X"1B",X"0E", - X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"17",X"0A",X"16",X"0E",X"50",X"82",X"05",X"04",X"1D", - X"18",X"19",X"24",X"05",X"92",X"82",X"0E",X"1C",X"0C",X"18",X"1B",X"0E",X"24",X"24",X"24",X"24", - X"24",X"17",X"0A",X"16",X"0E",X"54",X"83",X"1C",X"1D",X"25",X"8A",X"3E",X"8A",X"56",X"83",X"17", - X"0D",X"2B",X"8A",X"41",X"8A",X"58",X"83",X"1B",X"0D",X"31",X"8A",X"44",X"8A",X"5A",X"83",X"1D", - X"11",X"37",X"8A",X"47",X"8A",X"5C",X"83",X"1D",X"11",X"3D",X"8A",X"4A",X"8A",X"3A",X"B5",X"99", - X"FE",X"A0",X"28",X"07",X"47",X"3A",X"B8",X"99",X"B8",X"38",X"05",X"3A",X"AE",X"92",X"A7",X"C0", - X"E1",X"26",X"81",X"3A",X"10",X"8A",X"6F",X"ED",X"5B",X"04",X"8A",X"13",X"ED",X"A0",X"3E",X"DF", - X"25",X"85",X"30",X"01",X"24",X"6F",X"CB",X"44",X"20",X"F2",X"C9",X"5E",X"23",X"56",X"23",X"46", - X"23",X"7E",X"12",X"23",X"E7",X"10",X"FA",X"C9",X"5E",X"23",X"56",X"23",X"46",X"23",X"4E",X"23", - X"EB",X"1A",X"77",X"CB",X"D4",X"71",X"CB",X"94",X"13",X"3E",X"E0",X"25",X"85",X"30",X"01",X"24", - X"6F",X"10",X"EE",X"EB",X"C9",X"25",X"83",X"13",X"02",X"1D",X"11",X"0E",X"24",X"10",X"0A",X"15", - X"0A",X"0C",X"1D",X"12",X"0C",X"24",X"11",X"0E",X"1B",X"18",X"0E",X"1C",X"CC",X"82",X"0C",X"04", - X"26",X"26",X"24",X"0B",X"0E",X"1C",X"1D",X"24",X"05",X"24",X"26",X"26",X"AF",X"32",X"23",X"68", - X"3C",X"32",X"22",X"68",X"F3",X"32",X"30",X"68",X"06",X"0A",X"D9",X"11",X"00",X"80",X"21",X"00", - X"00",X"01",X"00",X"04",X"7D",X"AC",X"2F",X"87",X"87",X"ED",X"6A",X"7D",X"32",X"30",X"68",X"12", - X"13",X"0B",X"78",X"B1",X"20",X"EE",X"11",X"00",X"80",X"21",X"00",X"00",X"01",X"00",X"04",X"7D", - X"AC",X"2F",X"87",X"87",X"ED",X"6A",X"1A",X"AD",X"C2",X"C0",X"34",X"13",X"32",X"30",X"68",X"0B", - X"78",X"B1",X"20",X"EB",X"11",X"00",X"80",X"21",X"55",X"55",X"01",X"00",X"04",X"7D",X"AC",X"2F", - X"87",X"87",X"ED",X"6A",X"7D",X"32",X"30",X"68",X"12",X"13",X"0B",X"78",X"B1",X"20",X"EE",X"11", - X"00",X"80",X"21",X"55",X"55",X"01",X"00",X"04",X"7D",X"AC",X"2F",X"87",X"87",X"ED",X"6A",X"1A", - X"AD",X"C2",X"C0",X"34",X"13",X"32",X"30",X"68",X"0B",X"78",X"B1",X"20",X"EB",X"11",X"00",X"80", - X"21",X"AA",X"AA",X"01",X"00",X"04",X"7D",X"AC",X"2F",X"87",X"87",X"ED",X"6A",X"7D",X"32",X"30", - X"68",X"12",X"13",X"0B",X"78",X"B1",X"20",X"EE",X"11",X"00",X"80",X"21",X"AA",X"AA",X"01",X"00", - X"04",X"7D",X"AC",X"2F",X"87",X"87",X"ED",X"6A",X"1A",X"AD",X"C2",X"C0",X"34",X"13",X"32",X"30", - X"68",X"0B",X"78",X"B1",X"20",X"EB",X"D9",X"05",X"C2",X"7A",X"33",X"31",X"00",X"84",X"11",X"00", - X"84",X"CD",X"7F",X"34",X"11",X"00",X"88",X"CD",X"7F",X"34",X"11",X"00",X"90",X"CD",X"7F",X"34", - X"21",X"E0",X"99",X"11",X"00",X"90",X"01",X"20",X"00",X"ED",X"B0",X"11",X"00",X"98",X"CD",X"7F", - X"34",X"21",X"00",X"90",X"11",X"E0",X"99",X"01",X"20",X"00",X"ED",X"B0",X"31",X"00",X"8B",X"11", - X"00",X"80",X"CD",X"7F",X"34",X"CD",X"58",X"39",X"21",X"81",X"3B",X"CD",X"1B",X"33",X"32",X"30", - X"68",X"CD",X"3C",X"3A",X"3E",X"07",X"32",X"20",X"90",X"CD",X"72",X"39",X"C3",X"50",X"35",X"06", - X"1E",X"21",X"00",X"00",X"C5",X"CD",X"8C",X"34",X"C1",X"10",X"F9",X"C9",X"D5",X"E5",X"01",X"00", - X"04",X"7D",X"AC",X"2F",X"87",X"87",X"ED",X"6A",X"7D",X"32",X"30",X"68",X"12",X"13",X"0B",X"78", - X"B1",X"20",X"EE",X"E1",X"D1",X"D5",X"01",X"00",X"04",X"7D",X"AC",X"2F",X"87",X"87",X"ED",X"6A", - X"1A",X"AD",X"C2",X"C0",X"34",X"13",X"32",X"30",X"68",X"0B",X"78",X"B1",X"20",X"EB",X"D1",X"C9", - X"47",X"7A",X"1F",X"1F",X"E6",X"07",X"FE",X"04",X"38",X"01",X"3D",X"FE",X"05",X"38",X"01",X"3D", - X"5F",X"78",X"16",X"15",X"E6",X"0F",X"20",X"02",X"16",X"11",X"32",X"30",X"68",X"D9",X"21",X"00", - X"80",X"11",X"01",X"80",X"01",X"00",X"04",X"36",X"24",X"ED",X"B0",X"36",X"00",X"01",X"FF",X"03", - X"ED",X"B0",X"32",X"30",X"68",X"D9",X"21",X"E2",X"82",X"36",X"1B",X"3E",X"E0",X"25",X"D7",X"36", - X"0A",X"3E",X"E0",X"25",X"D7",X"36",X"16",X"3E",X"A0",X"25",X"D7",X"73",X"3E",X"E0",X"25",X"D7", - X"72",X"21",X"80",X"93",X"06",X"80",X"36",X"F1",X"23",X"10",X"FB",X"32",X"30",X"68",X"C3",X"1B", - X"35",X"E5",X"EB",X"16",X"10",X"AF",X"47",X"86",X"32",X"30",X"68",X"23",X"10",X"F9",X"15",X"20", - X"F6",X"EB",X"E1",X"B9",X"C8",X"21",X"8B",X"3B",X"CD",X"1B",X"33",X"11",X"44",X"82",X"21",X"02", - X"91",X"AF",X"ED",X"6F",X"12",X"E7",X"AF",X"ED",X"6F",X"12",X"32",X"30",X"68",X"C3",X"4A",X"35", - X"21",X"00",X"91",X"36",X"00",X"23",X"36",X"00",X"23",X"36",X"01",X"AF",X"32",X"70",X"92",X"3C", - X"32",X"23",X"68",X"11",X"00",X"00",X"0E",X"00",X"CD",X"21",X"35",X"34",X"0E",X"00",X"CD",X"21", - X"35",X"34",X"0E",X"00",X"CD",X"21",X"35",X"34",X"0E",X"00",X"CD",X"21",X"35",X"36",X"FF",X"3A", - X"00",X"91",X"32",X"30",X"68",X"A7",X"28",X"F7",X"3C",X"28",X"07",X"3D",X"32",X"02",X"91",X"C3", - X"35",X"35",X"3A",X"01",X"91",X"32",X"30",X"68",X"A7",X"28",X"F7",X"3C",X"28",X"17",X"3D",X"32", - X"02",X"91",X"C3",X"35",X"35",X"05",X"05",X"05",X"05",X"30",X"40",X"00",X"02",X"DF",X"40",X"30", - X"30",X"03",X"DF",X"10",X"20",X"21",X"8B",X"3B",X"CD",X"1B",X"33",X"CD",X"F4",X"37",X"21",X"00", - X"91",X"06",X"03",X"36",X"00",X"23",X"10",X"FB",X"3E",X"20",X"32",X"00",X"90",X"21",X"A5",X"35", - X"11",X"00",X"70",X"01",X"04",X"00",X"D9",X"3E",X"A1",X"32",X"00",X"71",X"32",X"30",X"68",X"CD", - X"EC",X"37",X"AF",X"32",X"30",X"68",X"32",X"A0",X"92",X"3A",X"A0",X"92",X"FE",X"02",X"20",X"F9", - X"21",X"A9",X"35",X"11",X"00",X"70",X"01",X"0C",X"00",X"D9",X"3E",X"A8",X"32",X"00",X"71",X"32", - X"30",X"68",X"CD",X"EC",X"37",X"32",X"30",X"68",X"ED",X"56",X"21",X"20",X"68",X"36",X"00",X"36", - X"01",X"FB",X"CD",X"F2",X"39",X"AF",X"32",X"A0",X"92",X"3A",X"A0",X"92",X"E6",X"08",X"28",X"F9", - X"3A",X"A0",X"92",X"4F",X"3A",X"A0",X"92",X"B9",X"28",X"FA",X"21",X"16",X"91",X"11",X"17",X"91", - X"01",X"07",X"00",X"ED",X"B8",X"EB",X"11",X"B5",X"99",X"1A",X"CB",X"7F",X"C2",X"BA",X"36",X"77", - X"23",X"B6",X"23",X"2F",X"A6",X"23",X"A6",X"77",X"47",X"23",X"13",X"1A",X"77",X"23",X"B6",X"23", - X"2F",X"A6",X"23",X"A6",X"77",X"6F",X"60",X"06",X"10",X"29",X"DC",X"D6",X"39",X"10",X"FA",X"CD", - X"F4",X"37",X"2A",X"72",X"92",X"7C",X"B5",X"28",X"09",X"2B",X"22",X"72",X"92",X"7C",X"B5",X"CC", - X"BB",X"39",X"3A",X"10",X"91",X"1F",X"30",X"07",X"AF",X"32",X"71",X"92",X"C3",X"20",X"36",X"3A", - X"17",X"91",X"E6",X"0F",X"CA",X"20",X"36",X"4F",X"21",X"82",X"37",X"11",X"71",X"92",X"1A",X"D7", - X"7E",X"B9",X"28",X"05",X"AF",X"12",X"C3",X"20",X"36",X"EB",X"34",X"13",X"1A",X"3C",X"C2",X"20", - X"36",X"CD",X"58",X"39",X"CD",X"72",X"39",X"11",X"98",X"37",X"21",X"42",X"80",X"06",X"1C",X"CD", - X"66",X"37",X"10",X"FB",X"3A",X"B5",X"99",X"87",X"30",X"FA",X"AF",X"32",X"A0",X"92",X"3A",X"A0", - X"92",X"FE",X"08",X"38",X"F9",X"3A",X"B5",X"99",X"87",X"D2",X"20",X"36",X"CD",X"72",X"39",X"21", - X"00",X"80",X"06",X"10",X"36",X"28",X"23",X"36",X"27",X"23",X"10",X"F8",X"06",X"10",X"36",X"2D", - X"23",X"36",X"2B",X"23",X"10",X"F8",X"06",X"10",X"36",X"28",X"23",X"36",X"2D",X"23",X"10",X"F8", - X"06",X"10",X"36",X"27",X"23",X"36",X"2B",X"23",X"10",X"F8",X"EB",X"21",X"40",X"80",X"01",X"40", - X"03",X"ED",X"B0",X"21",X"00",X"80",X"01",X"40",X"00",X"ED",X"B0",X"AF",X"32",X"A0",X"92",X"3A", - X"A0",X"92",X"87",X"30",X"FA",X"3A",X"B5",X"99",X"87",X"30",X"FA",X"F3",X"CD",X"EC",X"37",X"3E", - X"FE",X"32",X"A0",X"92",X"3A",X"A0",X"92",X"A7",X"20",X"FA",X"32",X"30",X"68",X"21",X"80",X"92", - X"11",X"00",X"70",X"01",X"08",X"00",X"D9",X"3E",X"E1",X"32",X"00",X"71",X"CD",X"EC",X"37",X"21", - X"00",X"70",X"11",X"88",X"92",X"01",X"03",X"00",X"D9",X"3E",X"B1",X"32",X"00",X"71",X"CD",X"EC", - X"37",X"3A",X"88",X"92",X"FE",X"A1",X"30",X"D5",X"E6",X"0F",X"FE",X"0A",X"30",X"CF",X"FB",X"AF", - X"32",X"10",X"82",X"C3",X"D3",X"02",X"CD",X"74",X"37",X"CD",X"74",X"37",X"CD",X"74",X"37",X"3E", - X"05",X"C3",X"10",X"00",X"1A",X"0E",X"08",X"87",X"30",X"01",X"34",X"23",X"0D",X"20",X"F8",X"13", - X"23",X"C9",X"02",X"02",X"02",X"02",X"02",X"08",X"08",X"08",X"08",X"08",X"08",X"02",X"02",X"02", - X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"FF",X"01",X"3E",X"00",X"7F",X"41",X"00",X"21",X"41", - X"00",X"00",X"41",X"00",X"36",X"3E",X"00",X"49",X"00",X"03",X"49",X"22",X"03",X"49",X"41",X"00", - X"36",X"41",X"3E",X"00",X"3E",X"41",X"3E",X"00",X"41",X"49",X"7F",X"41",X"49",X"20",X"7F",X"49", - X"18",X"00",X"32",X"20",X"40",X"00",X"7F",X"40",X"01",X"00",X"7F",X"7F",X"3F",X"40",X"21",X"44", - X"40",X"00",X"44",X"00",X"3C",X"44",X"01",X"42",X"3F",X"01",X"81",X"00",X"01",X"A5",X"7F",X"01", - X"A5",X"04",X"7F",X"99",X"08",X"00",X"42",X"10",X"00",X"3C",X"7F",X"00",X"3A",X"00",X"71",X"FE", - X"10",X"C8",X"18",X"F8",X"3A",X"07",X"68",X"1F",X"3C",X"E6",X"01",X"32",X"83",X"99",X"21",X"CC", - X"3A",X"CF",X"CD",X"61",X"3A",X"3A",X"B5",X"99",X"0E",X"00",X"E6",X"0C",X"20",X"01",X"0C",X"79", - X"32",X"07",X"A0",X"21",X"01",X"68",X"7E",X"1F",X"E6",X"01",X"4F",X"23",X"7E",X"E6",X"02",X"B1", - X"32",X"84",X"99",X"21",X"68",X"3A",X"D7",X"11",X"2C",X"82",X"ED",X"A0",X"21",X"E4",X"3A",X"CD", - X"1B",X"33",X"21",X"06",X"68",X"7E",X"23",X"4E",X"CB",X"19",X"8F",X"E6",X"03",X"3C",X"32",X"82", - X"99",X"3C",X"32",X"EA",X"82",X"21",X"EB",X"3A",X"CD",X"1B",X"33",X"21",X"C4",X"3A",X"11",X"80", - X"92",X"01",X"08",X"00",X"ED",X"B0",X"21",X"00",X"68",X"06",X"03",X"AF",X"4E",X"CB",X"19",X"8F", - X"23",X"10",X"F9",X"E6",X"07",X"28",X"34",X"3D",X"87",X"87",X"87",X"21",X"6C",X"3A",X"D7",X"11", - X"81",X"92",X"01",X"04",X"00",X"ED",X"B0",X"11",X"E8",X"82",X"ED",X"A0",X"11",X"28",X"82",X"ED", - X"A0",X"11",X"E8",X"81",X"ED",X"A0",X"11",X"E8",X"80",X"ED",X"A0",X"3E",X"24",X"32",X"08",X"82", - X"21",X"F6",X"3A",X"CD",X"1B",X"33",X"CD",X"1B",X"33",X"18",X"10",X"21",X"81",X"92",X"06",X"04", - X"36",X"00",X"23",X"10",X"FB",X"21",X"07",X"3B",X"CD",X"1B",X"33",X"21",X"03",X"68",X"06",X"03", - X"AF",X"4E",X"CB",X"19",X"8F",X"23",X"10",X"F9",X"E6",X"07",X"CA",X"2D",X"39",X"4F",X"3A",X"82", - X"99",X"E6",X"04",X"87",X"81",X"87",X"21",X"A4",X"3A",X"D7",X"11",X"80",X"99",X"ED",X"A0",X"ED", - X"A0",X"2B",X"0E",X"01",X"CD",X"DA",X"38",X"2B",X"0E",X"00",X"7E",X"3C",X"CA",X"3B",X"39",X"79", - X"87",X"E5",X"21",X"1D",X"3B",X"D7",X"7E",X"23",X"66",X"6F",X"C5",X"CD",X"1B",X"33",X"CD",X"1B", - X"33",X"C1",X"E1",X"7E",X"E6",X"7F",X"EB",X"21",X"F0",X"81",X"41",X"10",X"02",X"23",X"23",X"CD", - X"1E",X"39",X"EB",X"0D",X"C0",X"EB",X"1A",X"CB",X"7F",X"C2",X"49",X"39",X"21",X"F4",X"81",X"CD", - X"1E",X"39",X"D5",X"21",X"50",X"3B",X"CD",X"1B",X"33",X"CD",X"1B",X"33",X"E1",X"C9",X"FE",X"0A", - X"06",X"24",X"38",X"04",X"06",X"01",X"D6",X"0A",X"70",X"CB",X"AD",X"77",X"C9",X"21",X"67",X"3B", - X"CD",X"1B",X"33",X"21",X"80",X"99",X"36",X"FF",X"23",X"36",X"FF",X"EB",X"21",X"32",X"83",X"06", - X"16",X"36",X"24",X"3E",X"E0",X"25",X"D7",X"10",X"F8",X"21",X"34",X"83",X"06",X"16",X"36",X"24", - X"3E",X"E0",X"25",X"D7",X"10",X"F8",X"EB",X"C9",X"21",X"00",X"80",X"11",X"01",X"80",X"01",X"00", - X"04",X"36",X"24",X"ED",X"B0",X"36",X"03",X"01",X"FF",X"03",X"ED",X"B0",X"3E",X"07",X"32",X"BE", - X"99",X"C9",X"21",X"80",X"93",X"06",X"80",X"36",X"F1",X"23",X"10",X"FB",X"C9",X"21",X"E0",X"99", - X"11",X"5E",X"83",X"0E",X"02",X"06",X"01",X"CD",X"97",X"39",X"06",X"03",X"CD",X"97",X"39",X"06", - X"02",X"CD",X"97",X"39",X"23",X"06",X"01",X"CD",X"AA",X"39",X"CD",X"A0",X"39",X"10",X"FB",X"C9", - X"3E",X"99",X"96",X"1F",X"1F",X"1F",X"1F",X"CD",X"AE",X"39",X"3E",X"99",X"96",X"23",X"E6",X"0F", - X"12",X"E7",X"0D",X"C0",X"3E",X"2A",X"0E",X"04",X"12",X"E7",X"C9",X"21",X"5E",X"83",X"06",X"17", - X"11",X"E0",X"FF",X"36",X"24",X"19",X"10",X"FB",X"C9",X"E5",X"CD",X"7D",X"39",X"21",X"84",X"03", - X"22",X"72",X"92",X"E1",X"C1",X"C9",X"C5",X"78",X"FE",X"0F",X"28",X"ED",X"FE",X"02",X"28",X"15", - X"FE",X"04",X"20",X"3D",X"3A",X"70",X"92",X"D6",X"01",X"30",X"02",X"3E",X"11",X"32",X"70",X"92", - X"18",X"0A",X"C5",X"18",X"07",X"3A",X"70",X"92",X"3C",X"32",X"70",X"92",X"3A",X"70",X"92",X"FE", - X"12",X"38",X"01",X"AF",X"32",X"70",X"92",X"E5",X"0E",X"00",X"FE",X"0A",X"38",X"03",X"0C",X"D6", - X"0A",X"21",X"2E",X"82",X"71",X"2E",X"0E",X"77",X"21",X"47",X"3A",X"CD",X"1B",X"33",X"E1",X"C1", - X"C9",X"3A",X"70",X"92",X"FE",X"12",X"38",X"01",X"AF",X"32",X"70",X"92",X"EB",X"CD",X"3C",X"3A", - X"21",X"4F",X"3A",X"D7",X"6E",X"26",X"9A",X"36",X"01",X"EB",X"C1",X"C9",X"21",X"A0",X"9A",X"06", - X"40",X"36",X"00",X"23",X"10",X"FB",X"C9",X"EE",X"82",X"05",X"1C",X"18",X"1E",X"17",X"0D",X"A1", - X"A2",X"A3",X"A4",X"A7",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF",X"B0",X"B2",X"B3",X"B4",X"B5",X"B6", - X"B9",X"7E",X"23",X"66",X"6F",X"C3",X"1B",X"33",X"0B",X"0C",X"0D",X"0A",X"04",X"01",X"04",X"01", - X"04",X"1C",X"01",X"24",X"03",X"01",X"03",X"01",X"03",X"1C",X"01",X"24",X"02",X"01",X"02",X"01", - X"02",X"1C",X"01",X"24",X"02",X"03",X"02",X"03",X"02",X"1C",X"03",X"1C",X"01",X"03",X"01",X"03", - X"01",X"24",X"03",X"1C",X"01",X"02",X"01",X"02",X"01",X"24",X"02",X"1C",X"01",X"01",X"01",X"01", - X"01",X"24",X"01",X"24",X"FF",X"FF",X"02",X"06",X"02",X"07",X"02",X"08",X"03",X"0A",X"03",X"0C", - X"02",X"86",X"03",X"88",X"FF",X"FF",X"03",X"0A",X"03",X"0C",X"03",X"0F",X"03",X"8A",X"03",X"8C", - X"03",X"8F",X"03",X"FF",X"01",X"01",X"01",X"01",X"01",X"02",X"03",X"00",X"D0",X"3A",X"DA",X"3A", - X"E6",X"82",X"07",X"1E",X"19",X"1B",X"12",X"10",X"11",X"1D",X"E6",X"82",X"07",X"1D",X"0A",X"0B", - X"15",X"0E",X"24",X"24",X"EC",X"82",X"04",X"1B",X"0A",X"17",X"14",X"AA",X"82",X"08",X"0F",X"12", - X"10",X"11",X"1D",X"0E",X"1B",X"1C",X"C8",X"82",X"05",X"24",X"0C",X"18",X"12",X"17",X"A8",X"81", - X"06",X"0C",X"1B",X"0E",X"0D",X"12",X"1D",X"E8",X"82",X"12",X"0F",X"1B",X"0E",X"0E",X"24",X"19", - X"15",X"0A",X"22",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"21",X"3B",X"39", - X"3B",X"30",X"83",X"0A",X"01",X"1C",X"1D",X"24",X"0B",X"18",X"17",X"1E",X"1C",X"24",X"B0",X"81", - X"08",X"00",X"00",X"00",X"00",X"24",X"19",X"1D",X"1C",X"32",X"83",X"09",X"02",X"17",X"0D",X"24", - X"0B",X"18",X"17",X"1E",X"1C",X"B2",X"81",X"08",X"00",X"00",X"00",X"00",X"24",X"19",X"1D",X"1C", - X"34",X"83",X"09",X"0A",X"17",X"0D",X"24",X"0E",X"1F",X"0E",X"1B",X"22",X"B4",X"81",X"08",X"00", - X"00",X"00",X"00",X"24",X"19",X"1D",X"1C",X"30",X"83",X"16",X"0B",X"18",X"17",X"1E",X"1C",X"24", - X"17",X"18",X"1D",X"11",X"12",X"17",X"10",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"24", - X"24",X"E2",X"82",X"07",X"1B",X"0A",X"16",X"24",X"24",X"18",X"14",X"E4",X"82",X"07",X"1B",X"18", - X"16",X"24",X"24",X"18",X"14",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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"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"D9"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu2.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu2.vhd deleted file mode 100644 index 328166d9..00000000 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu2.vhd +++ /dev/null @@ -1,278 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity galaga_cpu2 is -port ( - clk : in std_logic; - addr : in std_logic_vector(11 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of galaga_cpu2 is - type rom is array(0 to 4095) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"31",X"00",X"91",X"C3",X"7C",X"05",X"FF",X"FF",X"87",X"30",X"05",X"24",X"C3",X"10",X"00",X"FF", - X"85",X"6F",X"D0",X"24",X"C9",X"FF",X"FF",X"FF",X"77",X"23",X"10",X"FC",X"C9",X"23",X"06",X"16", - X"23",X"00",X"19",X"F7",X"4B",X"00",X"23",X"F0",X"02",X"F0",X"5E",X"00",X"23",X"F0",X"24",X"FB", - X"23",X"00",X"FF",X"FF",X"E9",X"FF",X"FF",X"FF",X"C3",X"13",X"05",X"BE",X"05",X"BF",X"05",X"D3", - X"08",X"BE",X"05",X"F5",X"06",X"EE",X"05",X"BE",X"05",X"CA",X"0E",X"23",X"F0",X"26",X"23",X"14", - X"13",X"FE",X"0D",X"0B",X"0A",X"08",X"06",X"04",X"03",X"01",X"23",X"FF",X"FF",X"FF",X"44",X"E4", - X"18",X"FB",X"44",X"00",X"FF",X"FF",X"C9",X"23",X"08",X"08",X"23",X"03",X"1B",X"23",X"08",X"0F", - X"23",X"16",X"15",X"F7",X"84",X"00",X"23",X"16",X"03",X"F0",X"97",X"00",X"23",X"16",X"19",X"FB", - X"23",X"00",X"FF",X"FF",X"23",X"16",X"01",X"FE",X"0D",X"0C",X"0A",X"08",X"06",X"04",X"03",X"01", - X"23",X"FC",X"30",X"23",X"00",X"FF",X"FF",X"44",X"27",X"0E",X"FB",X"44",X"00",X"FF",X"FF",X"33", - X"06",X"18",X"23",X"00",X"18",X"F7",X"B6",X"00",X"23",X"F0",X"08",X"F0",X"CC",X"00",X"23",X"F0", - X"20",X"FB",X"23",X"00",X"FF",X"FF",X"23",X"F0",X"20",X"23",X"10",X"0D",X"FE",X"1A",X"18",X"15", - X"10",X"0C",X"08",X"05",X"03",X"23",X"FE",X"30",X"23",X"00",X"FF",X"FF",X"33",X"E0",X"10",X"FB", - X"44",X"00",X"FF",X"FF",X"23",X"03",X"18",X"33",X"04",X"10",X"23",X"08",X"0A",X"44",X"16",X"12", - X"F7",X"60",X"01",X"44",X"16",X"03",X"F0",X"73",X"01",X"44",X"16",X"1D",X"FB",X"23",X"00",X"FF", - X"FF",X"12",X"18",X"17",X"12",X"00",X"80",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"14",X"06",X"14",X"0C",X"14",X"08",X"14",X"0A",X"1C",X"00",X"1C",X"12",X"1E",X"00",X"1E",X"12", - X"1C",X"02",X"1C",X"10",X"1E",X"02",X"1E",X"10",X"1C",X"04",X"1C",X"0E",X"1E",X"04",X"1E",X"0E", - X"1C",X"06",X"1C",X"0C",X"1E",X"06",X"1E",X"0C",X"1C",X"08",X"1C",X"0A",X"1E",X"08",X"1E",X"0A", - X"16",X"06",X"16",X"0C",X"16",X"08",X"16",X"0A",X"18",X"00",X"18",X"12",X"1A",X"00",X"1A",X"12", - X"18",X"02",X"18",X"10",X"1A",X"02",X"1A",X"10",X"18",X"04",X"18",X"0E",X"1A",X"04",X"1A",X"0E", - X"18",X"06",X"18",X"0C",X"1A",X"06",X"1A",X"0C",X"18",X"08",X"18",X"0A",X"1A",X"08",X"1A",X"0A", - X"44",X"16",X"06",X"FE",X"0C",X"0B",X"0A",X"08",X"06",X"04",X"02",X"01",X"23",X"FE",X"30",X"23", - X"00",X"FF",X"FF",X"66",X"20",X"14",X"FB",X"44",X"00",X"FF",X"FF",X"23",X"06",X"18",X"23",X"00", - X"18",X"F7",X"92",X"01",X"44",X"F0",X"08",X"F0",X"A8",X"01",X"44",X"F0",X"20",X"FB",X"23",X"00", - X"FF",X"FF",X"44",X"F0",X"26",X"23",X"10",X"0B",X"FE",X"22",X"20",X"1E",X"1B",X"18",X"15",X"12", - X"10",X"23",X"FE",X"30",X"23",X"00",X"FF",X"FF",X"66",X"E0",X"10",X"FB",X"44",X"00",X"FF",X"FF", - X"23",X"03",X"20",X"23",X"08",X"0F",X"23",X"16",X"12",X"F7",X"CA",X"01",X"23",X"16",X"03",X"F0", - X"E0",X"01",X"23",X"16",X"1D",X"FB",X"23",X"00",X"FF",X"FF",X"23",X"16",X"01",X"FE",X"0D",X"0C", - X"0B",X"09",X"07",X"05",X"03",X"02",X"23",X"02",X"20",X"23",X"FC",X"12",X"23",X"00",X"FF",X"FF", - X"44",X"20",X"14",X"FB",X"44",X"00",X"FF",X"FF",X"23",X"00",X"10",X"23",X"01",X"40",X"22",X"0C", - X"37",X"23",X"00",X"FF",X"FF",X"23",X"02",X"3A",X"23",X"10",X"09",X"23",X"00",X"18",X"23",X"20", - X"10",X"23",X"00",X"18",X"23",X"20",X"0D",X"23",X"00",X"FF",X"FF",X"23",X"00",X"10",X"23",X"01", - X"30",X"00",X"40",X"08",X"23",X"FF",X"30",X"23",X"00",X"FF",X"FF",X"23",X"00",X"30",X"23",X"05", - X"80",X"23",X"05",X"4C",X"23",X"04",X"01",X"23",X"00",X"50",X"FF",X"23",X"00",X"28",X"23",X"06", - X"1D",X"23",X"00",X"11",X"00",X"40",X"08",X"23",X"00",X"11",X"23",X"FA",X"1D",X"23",X"00",X"50", - X"FF",X"23",X"00",X"21",X"00",X"20",X"10",X"23",X"F8",X"20",X"23",X"FF",X"20",X"23",X"F8",X"1B", - X"23",X"E8",X"0B",X"23",X"00",X"21",X"00",X"20",X"08",X"23",X"00",X"42",X"FF",X"23",X"00",X"08", - X"00",X"20",X"08",X"23",X"F0",X"20",X"23",X"10",X"20",X"23",X"F0",X"40",X"23",X"10",X"20",X"23", - X"F0",X"20",X"00",X"20",X"08",X"23",X"00",X"30",X"FF",X"23",X"10",X"0C",X"23",X"00",X"20",X"23", - X"E8",X"10",X"23",X"F4",X"10",X"23",X"E8",X"10",X"23",X"F4",X"32",X"23",X"E8",X"10",X"23",X"F4", - X"32",X"23",X"E8",X"10",X"23",X"F4",X"10",X"23",X"E8",X"0E",X"23",X"02",X"30",X"FF",X"23",X"F1", - X"08",X"23",X"00",X"10",X"23",X"05",X"3C",X"23",X"07",X"42",X"23",X"0A",X"40",X"23",X"10",X"2D", - X"23",X"20",X"19",X"00",X"FC",X"14",X"23",X"02",X"4A",X"FF",X"23",X"04",X"20",X"23",X"00",X"16", - X"23",X"F0",X"30",X"23",X"00",X"12",X"23",X"10",X"30",X"23",X"00",X"12",X"23",X"10",X"30",X"23", - X"00",X"16",X"23",X"04",X"20",X"23",X"00",X"10",X"FF",X"23",X"00",X"15",X"00",X"20",X"08",X"23", - X"00",X"11",X"00",X"E0",X"08",X"23",X"00",X"18",X"00",X"20",X"08",X"23",X"00",X"13",X"00",X"E0", - X"08",X"23",X"00",X"1F",X"00",X"20",X"08",X"23",X"00",X"30",X"FF",X"23",X"02",X"0E",X"23",X"00", - X"34",X"23",X"12",X"19",X"23",X"00",X"20",X"23",X"E0",X"0E",X"23",X"00",X"12",X"23",X"20",X"0E", - X"23",X"00",X"0C",X"23",X"E0",X"0E",X"23",X"1B",X"08",X"23",X"00",X"10",X"FF",X"23",X"00",X"0D", - X"00",X"C0",X"04",X"23",X"00",X"21",X"00",X"40",X"06",X"23",X"00",X"51",X"00",X"C0",X"06",X"23", - X"00",X"73",X"FF",X"23",X"08",X"20",X"23",X"00",X"16",X"23",X"E0",X"0C",X"23",X"02",X"0B",X"23", - X"11",X"0C",X"23",X"02",X"0B",X"23",X"E0",X"0C",X"23",X"00",X"16",X"23",X"08",X"20",X"FF",X"12", - X"18",X"1E",X"12",X"00",X"34",X"12",X"FB",X"26",X"12",X"00",X"02",X"FC",X"2E",X"12",X"FA",X"3C", - X"FA",X"9E",X"03",X"12",X"F8",X"10",X"12",X"FA",X"5C",X"12",X"00",X"23",X"F8",X"F9",X"EF",X"7C", - X"03",X"F6",X"AB",X"12",X"01",X"28",X"12",X"0A",X"18",X"FD",X"52",X"03",X"F6",X"B0",X"23",X"08", - X"1E",X"23",X"00",X"19",X"23",X"F8",X"16",X"23",X"00",X"02",X"FC",X"30",X"23",X"F7",X"26",X"FA", - X"9E",X"03",X"23",X"F0",X"0A",X"23",X"F5",X"31",X"23",X"00",X"10",X"FD",X"6C",X"03",X"12",X"F8", - X"10",X"12",X"00",X"40",X"FB",X"12",X"00",X"FF",X"FF",X"12",X"18",X"1D",X"12",X"00",X"28",X"12", - X"FA",X"02",X"F3",X"3F",X"3B",X"36",X"32",X"28",X"26",X"24",X"22",X"12",X"04",X"30",X"12",X"FC", - X"30",X"12",X"00",X"18",X"F8",X"F9",X"FA",X"0C",X"04",X"EF",X"D7",X"03",X"F6",X"B0",X"12",X"01", - X"28",X"12",X"0A",X"15",X"FD",X"AC",X"03",X"F6",X"C0",X"23",X"08",X"10",X"23",X"00",X"23",X"23", - X"F8",X"0F",X"23",X"00",X"48",X"F8",X"F9",X"FA",X"0C",X"04",X"F6",X"B0",X"23",X"08",X"20",X"23", - X"00",X"08",X"23",X"F8",X"02",X"F3",X"34",X"31",X"2D",X"29",X"22",X"26",X"1F",X"18",X"23",X"08", - X"18",X"23",X"F8",X"18",X"23",X"00",X"10",X"F8",X"F9",X"FD",X"CC",X"03",X"FB",X"12",X"00",X"FF", - X"FF",X"12",X"18",X"14",X"12",X"03",X"2A",X"12",X"10",X"40",X"12",X"01",X"20",X"12",X"FE",X"71", - X"F9",X"F1",X"FA",X"0C",X"04",X"EF",X"30",X"04",X"F6",X"AB",X"12",X"02",X"20",X"FD",X"14",X"04", - X"F6",X"B0",X"23",X"04",X"1A",X"23",X"03",X"1D",X"23",X"1A",X"25",X"23",X"03",X"10",X"23",X"FD", - X"48",X"FD",X"20",X"04",X"12",X"18",X"14",X"12",X"03",X"2A",X"12",X"10",X"40",X"12",X"01",X"20", - X"12",X"FE",X"78",X"FF",X"12",X"18",X"14",X"F4",X"12",X"00",X"04",X"FC",X"48",X"00",X"FC",X"FF", - X"23",X"00",X"30",X"F8",X"F9",X"FA",X"0C",X"04",X"FD",X"25",X"04",X"12",X"18",X"14",X"FB",X"12", - X"00",X"FF",X"FF",X"12",X"18",X"1E",X"12",X"00",X"08",X"F2",X"99",X"04",X"00",X"00",X"0A",X"F2", - X"99",X"04",X"00",X"00",X"0A",X"12",X"00",X"2C",X"12",X"FB",X"26",X"12",X"00",X"02",X"FC",X"2E", - X"12",X"FA",X"3C",X"FA",X"9E",X"03",X"FD",X"63",X"03",X"12",X"00",X"2C",X"12",X"FB",X"26",X"12", - X"00",X"02",X"FC",X"2E",X"12",X"FA",X"18",X"12",X"00",X"10",X"FF",X"12",X"18",X"13",X"F2",X"C6", - X"04",X"00",X"00",X"08",X"F2",X"CF",X"04",X"00",X"00",X"08",X"12",X"18",X"0B",X"12",X"00",X"34", - X"12",X"FB",X"26",X"FD",X"58",X"03",X"12",X"00",X"10",X"12",X"18",X"0B",X"FD",X"D8",X"04",X"12", - X"00",X"08",X"12",X"18",X"0B",X"12",X"00",X"06",X"12",X"00",X"22",X"12",X"FB",X"26",X"12",X"00", - X"02",X"FC",X"2E",X"12",X"FA",X"18",X"12",X"00",X"20",X"FF",X"12",X"18",X"1E",X"12",X"00",X"14", - X"F2",X"02",X"05",X"12",X"00",X"08",X"F2",X"02",X"05",X"12",X"00",X"18",X"12",X"FB",X"26",X"FD", - X"58",X"03",X"12",X"E2",X"01",X"F3",X"08",X"07",X"06",X"05",X"04",X"03",X"02",X"01",X"F5",X"23", - X"00",X"48",X"FF",X"AF",X"32",X"21",X"68",X"3A",X"04",X"68",X"E6",X"02",X"CA",X"75",X"05",X"3A", - X"A0",X"92",X"3C",X"32",X"A0",X"92",X"2A",X"A1",X"92",X"E6",X"1F",X"3D",X"28",X"08",X"3C",X"20", - X"06",X"7C",X"F6",X"01",X"67",X"2C",X"24",X"22",X"A1",X"92",X"3A",X"C7",X"99",X"5F",X"3A",X"A7", - X"92",X"BB",X"CB",X"10",X"3A",X"15",X"90",X"A0",X"E6",X"01",X"32",X"AA",X"92",X"0E",X"00",X"21", - X"20",X"90",X"79",X"85",X"6F",X"7E",X"A7",X"20",X"03",X"0C",X"18",X"F3",X"47",X"21",X"3B",X"00", - X"79",X"CB",X"27",X"85",X"6F",X"5E",X"23",X"56",X"EB",X"C5",X"CD",X"34",X"00",X"C1",X"78",X"81", - X"4F",X"E6",X"F8",X"28",X"DA",X"3E",X"01",X"32",X"21",X"68",X"FB",X"C9",X"11",X"00",X"91",X"1A", - X"A7",X"20",X"FC",X"67",X"6F",X"01",X"10",X"00",X"86",X"23",X"10",X"FC",X"0D",X"20",X"F9",X"FE", - X"FF",X"28",X"02",X"3E",X"11",X"12",X"1A",X"A7",X"20",X"FC",X"ED",X"56",X"AF",X"32",X"E0",X"89", - X"21",X"B7",X"05",X"11",X"21",X"90",X"01",X"07",X"00",X"ED",X"B0",X"3E",X"01",X"32",X"21",X"68", - X"FB",X"31",X"00",X"91",X"C3",X"B1",X"05",X"01",X"01",X"00",X"01",X"01",X"00",X"0A",X"C9",X"3E", - X"01",X"32",X"D7",X"92",X"21",X"00",X"8B",X"11",X"80",X"8B",X"01",X"40",X"00",X"ED",X"B0",X"21", - X"00",X"93",X"11",X"80",X"93",X"0E",X"40",X"ED",X"B0",X"21",X"00",X"9B",X"11",X"80",X"9B",X"0E", - X"40",X"ED",X"B0",X"AF",X"32",X"D7",X"92",X"3A",X"D6",X"92",X"3D",X"28",X"FA",X"C9",X"3A",X"14", - X"90",X"A7",X"C8",X"32",X"17",X"92",X"3A",X"27",X"98",X"A7",X"28",X"17",X"21",X"60",X"93",X"7E", - X"A7",X"28",X"10",X"CD",X"81",X"06",X"3A",X"BF",X"99",X"A7",X"28",X"07",X"CD",X"49",X"06",X"AF", - X"32",X"2B",X"98",X"21",X"62",X"93",X"7E",X"A7",X"C8",X"CD",X"81",X"06",X"3A",X"BF",X"99",X"A7", - X"C8",X"3A",X"27",X"98",X"A7",X"28",X"12",X"AF",X"32",X"2B",X"98",X"3A",X"60",X"93",X"32",X"62", - X"93",X"3A",X"E2",X"93",X"21",X"E0",X"93",X"18",X"16",X"AF",X"32",X"14",X"90",X"32",X"15",X"90", - X"32",X"25",X"90",X"32",X"B9",X"99",X"32",X"17",X"92",X"EB",X"26",X"93",X"CB",X"FD",X"7E",X"D6", - X"08",X"CB",X"BD",X"77",X"2C",X"7E",X"D6",X"08",X"77",X"26",X"8B",X"36",X"0B",X"2D",X"36",X"20", - X"26",X"88",X"36",X"08",X"2C",X"36",X"0F",X"2D",X"26",X"9B",X"36",X"0C",X"AF",X"32",X"27",X"98", - X"3A",X"01",X"92",X"3D",X"32",X"B9",X"9A",X"3A",X"17",X"92",X"A7",X"C0",X"3C",X"32",X"13",X"92", - X"C9",X"AF",X"32",X"BF",X"99",X"26",X"88",X"7E",X"26",X"93",X"FE",X"08",X"C8",X"7E",X"DD",X"6F", - X"2C",X"46",X"26",X"9B",X"7E",X"0F",X"CB",X"18",X"DD",X"60",X"2D",X"5D",X"3A",X"08",X"90",X"A7", - X"28",X"06",X"2E",X"38",X"06",X"04",X"18",X"04",X"2E",X"00",X"06",X"30",X"CD",X"B7",X"06",X"2E", - X"68",X"06",X"08",X"CD",X"B7",X"06",X"C9",X"26",X"92",X"7E",X"26",X"88",X"B6",X"07",X"38",X"30", - X"7E",X"E6",X"FE",X"FE",X"04",X"28",X"29",X"26",X"93",X"7E",X"A7",X"28",X"23",X"DD",X"95",X"D6", - X"07",X"C6",X"0D",X"30",X"1B",X"2C",X"7E",X"26",X"9B",X"4E",X"2D",X"CB",X"09",X"1F",X"DD",X"94", - X"D6",X"04",X"C6",X"07",X"30",X"0A",X"3E",X"01",X"32",X"BF",X"99",X"B7",X"08",X"C3",X"C2",X"07", - X"2C",X"2C",X"10",X"C3",X"C9",X"11",X"A4",X"92",X"21",X"64",X"93",X"CD",X"04",X"07",X"11",X"A5", - X"92",X"21",X"66",X"93",X"7E",X"A7",X"C8",X"1A",X"47",X"E6",X"07",X"08",X"3E",X"06",X"CB",X"78", - X"28",X"01",X"08",X"CB",X"70",X"28",X"02",X"ED",X"44",X"86",X"77",X"FE",X"F0",X"30",X"44",X"DD", - X"6F",X"2C",X"08",X"CB",X"68",X"28",X"02",X"ED",X"44",X"4F",X"86",X"77",X"1F",X"A9",X"26",X"9B", - X"07",X"30",X"05",X"CB",X"0E",X"3F",X"CB",X"16",X"4E",X"26",X"93",X"7E",X"CB",X"09",X"1F",X"DD", - X"67",X"FE",X"14",X"38",X"1B",X"FE",X"9C",X"30",X"17",X"5D",X"3A",X"1D",X"90",X"A7",X"28",X"07", - X"21",X"08",X"93",X"06",X"2C",X"18",X"05",X"21",X"00",X"93",X"06",X"30",X"CD",X"6A",X"07",X"C9", - X"2D",X"26",X"93",X"36",X"00",X"26",X"9B",X"36",X"00",X"C9",X"26",X"92",X"7E",X"26",X"88",X"B6", - X"07",X"38",X"41",X"7E",X"4F",X"E6",X"FE",X"FE",X"04",X"28",X"39",X"2C",X"26",X"9B",X"56",X"26", - X"93",X"7E",X"CB",X"0A",X"1F",X"2D",X"DD",X"94",X"D6",X"03",X"C6",X"06",X"30",X"26",X"79",X"3D", - X"E6",X"FE",X"08",X"3A",X"27",X"98",X"A7",X"7E",X"20",X"0A",X"DD",X"95",X"D6",X"06",X"C6",X"0B", - X"38",X"17",X"18",X"10",X"DD",X"95",X"D6",X"14",X"C6",X"0B",X"38",X"0D",X"C6",X"04",X"38",X"04", - X"C6",X"0B",X"38",X"05",X"2C",X"2C",X"10",X"B2",X"C9",X"7D",X"2A",X"44",X"98",X"23",X"22",X"44", - X"98",X"6F",X"16",X"93",X"AF",X"12",X"16",X"9B",X"12",X"2C",X"26",X"8B",X"7E",X"4F",X"A7",X"CA", - X"CA",X"08",X"2D",X"FE",X"0B",X"28",X"3E",X"08",X"20",X"44",X"08",X"26",X"92",X"36",X"81",X"3A", - X"28",X"98",X"95",X"20",X"07",X"32",X"2B",X"98",X"3C",X"32",X"28",X"98",X"E5",X"79",X"FE",X"07", - X"20",X"03",X"3D",X"18",X"03",X"3D",X"E6",X"03",X"21",X"A1",X"9A",X"D7",X"36",X"01",X"79",X"FE", - X"07",X"20",X"05",X"21",X"2B",X"98",X"36",X"00",X"21",X"90",X"92",X"D7",X"34",X"08",X"28",X"01", - X"34",X"E1",X"C3",X"B4",X"07",X"26",X"93",X"36",X"00",X"26",X"88",X"36",X"80",X"C9",X"26",X"88", - X"E5",X"08",X"2C",X"7E",X"26",X"91",X"C6",X"13",X"6F",X"36",X"00",X"21",X"88",X"92",X"34",X"21", - X"A8",X"92",X"35",X"E1",X"20",X"13",X"26",X"92",X"3A",X"85",X"92",X"77",X"3A",X"84",X"92",X"67", - X"3A",X"9F",X"92",X"84",X"32",X"9F",X"92",X"18",X"96",X"79",X"FE",X"07",X"20",X"04",X"16",X"B8", - X"18",X"5E",X"3A",X"2D",X"98",X"BD",X"CA",X"B6",X"08",X"7D",X"E6",X"38",X"FE",X"38",X"CA",X"B6", - X"08",X"79",X"FE",X"01",X"C2",X"DB",X"07",X"D5",X"7D",X"E6",X"07",X"5F",X"16",X"88",X"1A",X"FE", - X"09",X"20",X"26",X"E5",X"EB",X"2C",X"7E",X"C6",X"13",X"5F",X"16",X"91",X"AF",X"12",X"26",X"8B", - X"36",X"09",X"2D",X"7D",X"32",X"28",X"98",X"26",X"88",X"AF",X"77",X"32",X"8B",X"92",X"3C",X"32", - X"1D",X"90",X"32",X"8D",X"92",X"32",X"B1",X"9A",X"E1",X"D1",X"E5",X"3E",X"06",X"32",X"AD",X"92", - X"7D",X"E6",X"07",X"21",X"30",X"98",X"D7",X"7E",X"2C",X"56",X"21",X"9F",X"92",X"86",X"77",X"E1", - X"26",X"92",X"72",X"C3",X"DF",X"07",X"E5",X"21",X"B0",X"99",X"35",X"E1",X"C2",X"DB",X"07",X"3A", - X"B2",X"99",X"57",X"3A",X"B1",X"99",X"E5",X"C3",X"AA",X"08",X"3C",X"77",X"32",X"A4",X"9A",X"2D", - X"C3",X"B4",X"07",X"DD",X"21",X"00",X"91",X"3E",X"0C",X"32",X"89",X"92",X"21",X"86",X"92",X"7E", - X"36",X"00",X"23",X"77",X"DD",X"CB",X"13",X"46",X"CA",X"FA",X"0D",X"21",X"86",X"92",X"34",X"DD", - X"6E",X"10",X"26",X"88",X"7E",X"FE",X"03",X"28",X"09",X"FE",X"09",X"28",X"05",X"FE",X"07",X"C2", - X"48",X"0E",X"DD",X"35",X"0D",X"C2",X"00",X"0C",X"DD",X"6E",X"08",X"DD",X"66",X"09",X"7E",X"FE", - X"EF",X"DA",X"D7",X"0B",X"E5",X"2F",X"21",X"20",X"09",X"CF",X"7E",X"23",X"66",X"6F",X"E3",X"C9", - X"48",X"0E",X"11",X"0B",X"41",X"0B",X"49",X"0B",X"9B",X"0A",X"CC",X"0B",X"5A",X"0B",X"82",X"0B", - X"93",X"0B",X"A3",X"0B",X"42",X"09",X"50",X"0A",X"FE",X"09",X"7B",X"09",X"68",X"09",X"55",X"09", - X"4E",X"09",X"DD",X"5E",X"10",X"16",X"88",X"3E",X"03",X"12",X"23",X"C3",X"0E",X"09",X"3A",X"C9", - X"99",X"A7",X"C3",X"59",X"09",X"3A",X"C8",X"99",X"A7",X"28",X"08",X"23",X"7E",X"23",X"66",X"6F", - X"C3",X"87",X"0B",X"23",X"23",X"C3",X"86",X"0B",X"DD",X"5E",X"10",X"16",X"01",X"1A",X"5F",X"16", - X"99",X"1C",X"1A",X"C6",X"20",X"DD",X"77",X"01",X"C3",X"86",X"0B",X"E5",X"DD",X"5E",X"10",X"21", - X"38",X"88",X"06",X"04",X"7E",X"07",X"38",X"07",X"2C",X"2C",X"10",X"F8",X"C3",X"FA",X"09",X"26", - X"8B",X"54",X"1A",X"77",X"2C",X"1C",X"1A",X"77",X"2D",X"7D",X"08",X"21",X"EF",X"91",X"11",X"EC", - X"FF",X"06",X"0C",X"7E",X"E6",X"01",X"28",X"06",X"19",X"10",X"F8",X"C3",X"FA",X"09",X"19",X"23", - X"DD",X"7E",X"00",X"DD",X"5D",X"DD",X"54",X"EB",X"FD",X"6B",X"FD",X"62",X"01",X"06",X"00",X"ED", - X"B0",X"0E",X"06",X"09",X"EB",X"19",X"EB",X"0E",X"04",X"ED",X"B0",X"DD",X"7E",X"13",X"FD",X"77", - X"13",X"E1",X"23",X"7E",X"FD",X"77",X"08",X"23",X"7E",X"FD",X"77",X"09",X"FD",X"36",X"0A",X"01", - X"FD",X"36",X"0B",X"02",X"FD",X"36",X"0D",X"01",X"08",X"FD",X"77",X"10",X"5F",X"16",X"88",X"3E", - X"09",X"12",X"1C",X"FD",X"7D",X"12",X"23",X"C3",X"0E",X"09",X"E1",X"C3",X"9D",X"0B",X"E5",X"EB", - X"3A",X"15",X"92",X"4F",X"3A",X"62",X"93",X"FE",X"1E",X"30",X"02",X"3E",X"1E",X"FE",X"D1",X"38", - X"02",X"3E",X"D1",X"CB",X"41",X"28",X"04",X"C6",X"0E",X"ED",X"44",X"CB",X"3F",X"DD",X"96",X"03", - X"1F",X"DD",X"CB",X"13",X"7E",X"28",X"02",X"ED",X"44",X"C6",X"18",X"F2",X"2F",X"0A",X"AF",X"FE", - X"30",X"38",X"02",X"3E",X"2F",X"67",X"3E",X"06",X"CD",X"A9",X"0E",X"7C",X"3C",X"EB",X"D7",X"7E", - X"DD",X"77",X"0D",X"E1",X"3E",X"09",X"D7",X"DD",X"75",X"08",X"DD",X"74",X"09",X"C3",X"FA",X"0B", - X"E5",X"3A",X"15",X"92",X"4F",X"3A",X"62",X"93",X"C6",X"03",X"E6",X"F8",X"3C",X"FE",X"29",X"30", - X"02",X"3E",X"29",X"FE",X"CA",X"38",X"02",X"3E",X"C9",X"CB",X"41",X"28",X"03",X"C6",X"0D",X"2F", - X"32",X"8A",X"92",X"CB",X"3F",X"5F",X"16",X"48",X"DD",X"66",X"01",X"DD",X"6E",X"03",X"CD",X"5A", - X"0E",X"CB",X"3C",X"CB",X"1D",X"DD",X"75",X"04",X"DD",X"74",X"05",X"AF",X"32",X"8B",X"92",X"3C", - X"32",X"19",X"90",X"DD",X"7D",X"32",X"29",X"98",X"C3",X"0C",X"0B",X"E5",X"DD",X"6E",X"10",X"26", - X"88",X"36",X"09",X"26",X"01",X"4E",X"2C",X"6E",X"26",X"99",X"46",X"2C",X"5E",X"69",X"4E",X"2C", - X"56",X"CB",X"3B",X"D5",X"DD",X"70",X"11",X"DD",X"71",X"12",X"3A",X"15",X"92",X"A7",X"28",X"08", - X"78",X"ED",X"44",X"47",X"79",X"ED",X"44",X"4F",X"DD",X"6E",X"00",X"DD",X"66",X"01",X"51",X"1E", - X"00",X"CB",X"2A",X"CB",X"1B",X"19",X"DD",X"75",X"00",X"DD",X"74",X"01",X"5C",X"DD",X"6E",X"02", - X"DD",X"66",X"03",X"0E",X"00",X"CB",X"28",X"CB",X"19",X"ED",X"42",X"DD",X"75",X"02",X"DD",X"74", - X"03",X"6C",X"63",X"4A",X"D1",X"CD",X"5A",X"0E",X"CB",X"3C",X"CB",X"1D",X"DD",X"75",X"04",X"DD", - X"74",X"05",X"DD",X"72",X"06",X"DD",X"73",X"07",X"DD",X"CB",X"13",X"F6",X"E1",X"23",X"C3",X"0E", - X"09",X"E5",X"EB",X"3A",X"15",X"92",X"0F",X"DD",X"46",X"13",X"A8",X"07",X"3A",X"E2",X"93",X"3C", - X"3D",X"20",X"02",X"3E",X"80",X"38",X"04",X"ED",X"44",X"C6",X"F2",X"C6",X"0E",X"67",X"3E",X"1E", - X"CD",X"A9",X"0E",X"7C",X"EB",X"D7",X"7E",X"DD",X"77",X"0D",X"E1",X"3E",X"09",X"D7",X"C3",X"FA", - X"0B",X"23",X"5E",X"23",X"56",X"EB",X"C3",X"0E",X"09",X"23",X"5E",X"23",X"DD",X"73",X"06",X"DD", - X"36",X"07",X"00",X"DD",X"CB",X"13",X"EE",X"C3",X"FA",X"0B",X"3A",X"15",X"92",X"4F",X"DD",X"5E", - X"10",X"1C",X"16",X"01",X"1A",X"5F",X"16",X"98",X"1A",X"CB",X"41",X"28",X"04",X"C6",X"0E",X"ED", - X"44",X"CB",X"3F",X"DD",X"77",X"03",X"3A",X"AA",X"92",X"A7",X"CA",X"86",X"0B",X"32",X"B3",X"9A", - X"18",X"04",X"DD",X"36",X"01",X"9C",X"23",X"DD",X"75",X"08",X"DD",X"74",X"09",X"DD",X"34",X"0D", - X"C3",X"FA",X"0D",X"DD",X"7E",X"10",X"E6",X"38",X"FE",X"38",X"CA",X"41",X"0B",X"23",X"23",X"23", - X"C3",X"0E",X"09",X"23",X"7E",X"DD",X"CB",X"13",X"7E",X"28",X"04",X"C6",X"80",X"ED",X"44",X"0E", - X"00",X"CB",X"27",X"CB",X"11",X"CB",X"27",X"CB",X"11",X"DD",X"77",X"04",X"DD",X"71",X"05",X"DD", - X"36",X"0E",X"1E",X"3A",X"C8",X"92",X"DD",X"77",X"0F",X"C3",X"86",X"0B",X"3A",X"AA",X"92",X"4F", - X"3A",X"1D",X"90",X"3D",X"A1",X"18",X"C3",X"4F",X"E6",X"0F",X"DD",X"77",X"0A",X"79",X"07",X"07", - X"07",X"07",X"E6",X"0F",X"23",X"DD",X"77",X"0B",X"7E",X"23",X"DD",X"CB",X"13",X"7E",X"28",X"02", - X"ED",X"44",X"DD",X"77",X"0C",X"7E",X"23",X"DD",X"77",X"0D",X"DD",X"75",X"08",X"DD",X"74",X"09", - X"DD",X"CB",X"13",X"76",X"28",X"22",X"DD",X"7E",X"01",X"DD",X"96",X"06",X"28",X"08",X"F2",X"13", - X"0C",X"ED",X"44",X"3D",X"20",X"12",X"DD",X"7E",X"03",X"DD",X"96",X"07",X"CA",X"07",X"0E",X"F2", - X"24",X"0C",X"ED",X"44",X"3D",X"CA",X"07",X"0E",X"DD",X"CB",X"13",X"6E",X"28",X"13",X"DD",X"7E", - X"01",X"DD",X"96",X"06",X"28",X"03",X"3C",X"20",X"08",X"DD",X"36",X"0D",X"01",X"DD",X"CB",X"13", - X"AE",X"DD",X"46",X"0C",X"DD",X"7E",X"04",X"5F",X"80",X"DD",X"77",X"04",X"DD",X"56",X"05",X"2E", - X"01",X"CB",X"78",X"28",X"02",X"2E",X"FF",X"1F",X"A8",X"7A",X"F2",X"5E",X"0C",X"85",X"DD",X"77", - X"05",X"7B",X"4A",X"CB",X"41",X"28",X"01",X"2F",X"C6",X"15",X"30",X"04",X"06",X"06",X"18",X"0C", - X"CB",X"3F",X"47",X"CB",X"38",X"80",X"07",X"07",X"07",X"E6",X"07",X"47",X"26",X"8B",X"DD",X"6E", - X"10",X"7E",X"E6",X"F8",X"B0",X"77",X"26",X"9B",X"79",X"CB",X"09",X"A9",X"3C",X"CB",X"09",X"17", - X"E6",X"03",X"77",X"3A",X"A0",X"92",X"E6",X"01",X"28",X"05",X"DD",X"7E",X"0A",X"18",X"03",X"DD", - X"7E",X"0B",X"A7",X"CA",X"FE",X"0C",X"E5",X"DD",X"E5",X"E1",X"47",X"7A",X"E6",X"03",X"57",X"CB", - X"03",X"CB",X"12",X"D5",X"AA",X"0F",X"38",X"02",X"2C",X"2C",X"14",X"CB",X"52",X"78",X"28",X"02", - X"ED",X"44",X"4F",X"CB",X"29",X"30",X"04",X"7E",X"C6",X"80",X"77",X"2C",X"7E",X"89",X"77",X"2D", - X"EB",X"7B",X"EE",X"02",X"5F",X"E1",X"CB",X"3D",X"30",X"04",X"7D",X"EE",X"7F",X"6F",X"78",X"44", - X"26",X"00",X"CD",X"96",X"0E",X"78",X"EE",X"02",X"3D",X"CB",X"57",X"28",X"08",X"44",X"4D",X"21", - X"00",X"00",X"A7",X"ED",X"42",X"EB",X"7B",X"86",X"77",X"2C",X"7A",X"8E",X"77",X"E1",X"3A",X"15", - X"92",X"4F",X"26",X"93",X"DD",X"56",X"03",X"3E",X"7F",X"DD",X"BE",X"02",X"7A",X"17",X"CB",X"41", - X"28",X"03",X"C6",X"0D",X"2F",X"DD",X"CB",X"13",X"76",X"28",X"03",X"DD",X"86",X"11",X"77",X"2C", - X"DD",X"46",X"01",X"3E",X"7F",X"DD",X"BE",X"00",X"CB",X"13",X"78",X"CB",X"41",X"20",X"04",X"C6", - X"4F",X"2F",X"1D",X"CB",X"1B",X"17",X"CB",X"13",X"DD",X"CB",X"13",X"76",X"28",X"0D",X"DD",X"86", - X"12",X"57",X"1F",X"DD",X"AE",X"12",X"07",X"7A",X"30",X"01",X"1C",X"77",X"26",X"9B",X"CB",X"0E", - X"CB",X"0B",X"CB",X"16",X"DD",X"35",X"0E",X"C2",X"FA",X"0D",X"DD",X"CB",X"0F",X"3E",X"D2",X"F4", - X"0D",X"DD",X"7E",X"01",X"FE",X"4C",X"DA",X"F4",X"0D",X"3A",X"15",X"90",X"A7",X"CA",X"F4",X"0D", - X"3A",X"AD",X"92",X"A7",X"C2",X"F4",X"0D",X"EB",X"21",X"68",X"88",X"06",X"08",X"7E",X"FE",X"80", - X"28",X"06",X"2C",X"2C",X"10",X"F7",X"18",X"6C",X"36",X"06",X"26",X"9B",X"36",X"01",X"E5",X"26", - X"93",X"54",X"1D",X"1A",X"4F",X"77",X"1C",X"2C",X"1A",X"47",X"77",X"26",X"9B",X"54",X"1A",X"CB", - X"0E",X"0F",X"CB",X"16",X"07",X"CB",X"18",X"3A",X"62",X"93",X"91",X"F5",X"30",X"02",X"ED",X"44", - X"67",X"3A",X"15",X"92",X"A7",X"3E",X"95",X"28",X"02",X"3E",X"1C",X"90",X"30",X"02",X"ED",X"44", - X"CD",X"A9",X"0E",X"44",X"4D",X"CB",X"3C",X"CB",X"1D",X"CB",X"3C",X"CB",X"1D",X"09",X"CB",X"3C", - X"CB",X"1D",X"CB",X"3C",X"CB",X"1D",X"7C",X"A7",X"20",X"05",X"7D",X"FE",X"60",X"38",X"02",X"3E", - X"60",X"47",X"F1",X"CB",X"18",X"E1",X"7D",X"C6",X"08",X"E6",X"0F",X"21",X"B0",X"92",X"85",X"6F", - X"70",X"23",X"36",X"00",X"3A",X"E2",X"92",X"DD",X"77",X"0E",X"21",X"89",X"92",X"35",X"C8",X"11", - X"14",X"00",X"DD",X"19",X"C3",X"E4",X"08",X"AF",X"DD",X"CB",X"13",X"86",X"DD",X"77",X"00",X"DD", - X"77",X"02",X"26",X"88",X"DD",X"6E",X"10",X"36",X"02",X"26",X"8B",X"2C",X"7E",X"2D",X"3C",X"E6", - X"07",X"FE",X"05",X"38",X"14",X"3A",X"2E",X"98",X"4F",X"E6",X"F8",X"C6",X"06",X"77",X"2C",X"79", - X"E6",X"07",X"77",X"2D",X"3E",X"01",X"32",X"2D",X"98",X"DD",X"7E",X"06",X"DD",X"77",X"01",X"DD", - X"7E",X"07",X"DD",X"77",X"03",X"C3",X"FE",X"0C",X"26",X"88",X"DD",X"6E",X"10",X"36",X"80",X"26", - X"93",X"36",X"00",X"DD",X"36",X"13",X"00",X"C3",X"FA",X"0D",X"C5",X"D5",X"7B",X"95",X"06",X"00", - X"30",X"04",X"CB",X"C0",X"ED",X"44",X"4F",X"7A",X"94",X"30",X"0A",X"57",X"78",X"EE",X"01",X"F6", - X"02",X"47",X"7A",X"ED",X"44",X"B9",X"F5",X"17",X"A8",X"1F",X"3F",X"CB",X"10",X"F1",X"30",X"03", - X"51",X"4F",X"7A",X"61",X"2E",X"00",X"CD",X"A9",X"0E",X"7C",X"A8",X"E6",X"01",X"28",X"03",X"7D", - X"2F",X"6F",X"60",X"D1",X"C1",X"C9",X"D5",X"EB",X"21",X"00",X"00",X"CB",X"3F",X"30",X"01",X"19", - X"CB",X"23",X"CB",X"12",X"A7",X"20",X"F4",X"D1",X"C9",X"C5",X"4F",X"AF",X"06",X"11",X"8F",X"38", - X"0B",X"B9",X"38",X"01",X"91",X"3F",X"ED",X"6A",X"10",X"F4",X"C1",X"C9",X"91",X"37",X"C3",X"B6", - X"0E",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"3A",X"06",X"68",X"E6",X"02",X"C0", - X"21",X"FF",X"10",X"7E",X"2E",X"DF",X"4E",X"7E",X"A9",X"CB",X"67",X"20",X"01",X"C7",X"11",X"F7", - X"89",X"21",X"F6",X"89",X"01",X"13",X"00",X"ED",X"B8",X"DD",X"21",X"D5",X"0F",X"1E",X"E0",X"01", - X"04",X"05",X"DD",X"7E",X"00",X"DD",X"23",X"6F",X"26",X"10",X"7E",X"7B",X"81",X"5F",X"7E",X"12", - X"10",X"F0",X"06",X"05",X"21",X"E4",X"89",X"7E",X"2C",X"B6",X"2C",X"2F",X"A6",X"2C",X"A6",X"2C", - X"E6",X"0F",X"20",X"04",X"10",X"F1",X"18",X"40",X"05",X"28",X"4F",X"05",X"CB",X"20",X"CB",X"20", - X"0F",X"38",X"03",X"04",X"18",X"FA",X"3A",X"E0",X"89",X"CB",X"3F",X"5F",X"CB",X"11",X"C6",X"E1", - X"6F",X"26",X"89",X"7E",X"CB",X"41",X"28",X"04",X"07",X"07",X"07",X"07",X"E6",X"F0",X"B0",X"CB", - X"41",X"28",X"04",X"07",X"07",X"07",X"07",X"77",X"3A",X"E0",X"89",X"A7",X"20",X"02",X"3E",X"02", - X"3D",X"32",X"E0",X"89",X"7B",X"A7",X"28",X"09",X"2A",X"E2",X"89",X"7E",X"32",X"E1",X"89",X"18", - X"42",X"2A",X"E2",X"89",X"3A",X"E1",X"89",X"77",X"18",X"39",X"4F",X"21",X"E0",X"89",X"CB",X"41", - X"20",X"2D",X"7E",X"CB",X"3F",X"28",X"13",X"CB",X"59",X"20",X"0C",X"7E",X"FE",X"05",X"30",X"03", - X"34",X"18",X"D5",X"36",X"05",X"18",X"D1",X"35",X"18",X"CE",X"2A",X"E2",X"89",X"CB",X"59",X"20", - X"03",X"2B",X"18",X"01",X"23",X"22",X"E2",X"89",X"3E",X"01",X"32",X"E0",X"89",X"18",X"B9",X"36", - X"05",X"18",X"B5",X"21",X"CA",X"83",X"11",X"E1",X"89",X"06",X"03",X"1A",X"1C",X"CD",X"C6",X"0F", - X"10",X"F9",X"21",X"CA",X"87",X"3A",X"E0",X"89",X"06",X"06",X"A7",X"4F",X"28",X"02",X"0E",X"01", - X"71",X"2C",X"3D",X"10",X"F5",X"C9",X"4F",X"E6",X"0F",X"77",X"2C",X"79",X"07",X"07",X"07",X"07", - X"E6",X"0F",X"77",X"2C",X"C9",X"FD",X"FB",X"F7",X"EF",X"FE",X"23",X"00",X"1B",X"23",X"F0",X"40", - X"23",X"00",X"09",X"23",X"05",X"11",X"23",X"00",X"10",X"23",X"10",X"40",X"23",X"04",X"30",X"FF", - X"23",X"02",X"35",X"23",X"08",X"10",X"23",X"10",X"3C",X"23",X"00",X"FF",X"FF",X"AC",X"FF",X"FF"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu3.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu3.vhd deleted file mode 100644 index d8dd82f2..00000000 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/galaga_cpu3.vhd +++ /dev/null @@ -1,278 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity galaga_cpu3 is -port ( - clk : in std_logic; - addr : in std_logic_vector(11 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of galaga_cpu3 is - type rom is array(0 to 4095) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"31",X"00",X"9B",X"C3",X"7B",X"00",X"FF",X"FF",X"87",X"30",X"05",X"24",X"18",X"02",X"FF",X"FF", - X"85",X"6F",X"D0",X"24",X"C9",X"FF",X"FF",X"FF",X"77",X"23",X"10",X"FC",X"C9",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"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"C5",X"D5",X"E5",X"3E",X"01",X"32",X"22",X"68",X"AF", - X"32",X"22",X"68",X"CD",X"B1",X"00",X"E1",X"D1",X"C1",X"F1",X"C9",X"3E",X"01",X"32",X"22",X"68", - X"11",X"01",X"91",X"1A",X"A7",X"20",X"FC",X"67",X"6F",X"01",X"10",X"00",X"86",X"23",X"10",X"FC", - X"0D",X"20",X"F9",X"FE",X"FF",X"28",X"02",X"3E",X"21",X"12",X"1A",X"A7",X"20",X"FC",X"AF",X"32", - X"22",X"68",X"21",X"00",X"9A",X"36",X"00",X"11",X"01",X"9A",X"01",X"FF",X"00",X"ED",X"B0",X"18", - X"FE",X"3A",X"B8",X"9A",X"A7",X"C2",X"A1",X"06",X"21",X"60",X"9A",X"36",X"00",X"11",X"61",X"9A", - X"01",X"0F",X"00",X"ED",X"B0",X"3A",X"B7",X"9A",X"A7",X"C2",X"42",X"03",X"3A",X"79",X"9A",X"A7", - X"28",X"09",X"21",X"A8",X"9A",X"86",X"77",X"AF",X"32",X"79",X"9A",X"3A",X"A0",X"9A",X"A7",X"28", - X"6F",X"3A",X"11",X"92",X"21",X"80",X"9A",X"BE",X"28",X"20",X"32",X"80",X"9A",X"3C",X"28",X"0C", - X"21",X"EA",X"06",X"22",X"82",X"9A",X"AF",X"32",X"00",X"9A",X"18",X"09",X"21",X"FA",X"06",X"22", - X"82",X"9A",X"32",X"00",X"9A",X"32",X"81",X"9A",X"18",X"12",X"21",X"00",X"9A",X"34",X"7E",X"FE", - X"22",X"20",X"1E",X"36",X"00",X"3A",X"81",X"9A",X"3C",X"32",X"81",X"9A",X"2A",X"82",X"9A",X"CF", - X"5E",X"23",X"56",X"ED",X"53",X"84",X"9A",X"3E",X"1F",X"D7",X"5E",X"23",X"56",X"ED",X"53",X"86", - X"9A",X"2A",X"86",X"9A",X"ED",X"5B",X"84",X"9A",X"19",X"22",X"86",X"9A",X"7C",X"32",X"61",X"9A", - X"0F",X"0F",X"0F",X"0F",X"32",X"62",X"9A",X"3E",X"0A",X"32",X"65",X"9A",X"AF",X"32",X"70",X"9A", - X"21",X"74",X"9A",X"36",X"13",X"3A",X"B3",X"9A",X"A7",X"28",X"09",X"AF",X"32",X"B3",X"9A",X"CD", - X"F9",X"03",X"18",X"09",X"3A",X"D3",X"9A",X"A7",X"28",X"03",X"CD",X"4F",X"04",X"21",X"74",X"9A", - X"36",X"0F",X"3A",X"AF",X"9A",X"A7",X"28",X"09",X"AF",X"32",X"AF",X"9A",X"CD",X"F9",X"03",X"18", - X"09",X"3A",X"CF",X"9A",X"A7",X"28",X"03",X"CD",X"4F",X"04",X"21",X"74",X"9A",X"36",X"03",X"3A", - X"A3",X"9A",X"A7",X"28",X"09",X"AF",X"32",X"A3",X"9A",X"CD",X"F9",X"03",X"18",X"09",X"3A",X"C3", - X"9A",X"A7",X"28",X"03",X"CD",X"4F",X"04",X"21",X"74",X"9A",X"36",X"02",X"3A",X"A2",X"9A",X"A7", - X"28",X"09",X"AF",X"32",X"A2",X"9A",X"CD",X"F9",X"03",X"18",X"09",X"3A",X"C2",X"9A",X"A7",X"28", - X"03",X"CD",X"4F",X"04",X"21",X"74",X"9A",X"36",X"04",X"3A",X"A4",X"9A",X"A7",X"28",X"09",X"AF", - X"32",X"A4",X"9A",X"CD",X"F9",X"03",X"18",X"09",X"3A",X"C4",X"9A",X"A7",X"28",X"03",X"CD",X"4F", - X"04",X"21",X"74",X"9A",X"36",X"01",X"3A",X"A1",X"9A",X"A7",X"28",X"09",X"AF",X"32",X"A1",X"9A", - X"CD",X"F9",X"03",X"18",X"09",X"3A",X"C1",X"9A",X"A7",X"28",X"03",X"CD",X"4F",X"04",X"3A",X"B2", - X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A",X"36",X"12",X"CD",X"A7",X"04",X"3A",X"A5",X"9A",X"A7", - X"28",X"2C",X"21",X"74",X"9A",X"36",X"05",X"CD",X"7A",X"03",X"21",X"7E",X"9A",X"34",X"3A",X"7E", - X"9A",X"FE",X"06",X"38",X"11",X"36",X"00",X"3A",X"7C",X"9A",X"FE",X"04",X"38",X"03",X"3D",X"18", - X"02",X"3E",X"0C",X"32",X"7C",X"9A",X"3A",X"7C",X"9A",X"32",X"6F",X"9A",X"18",X"03",X"32",X"C5", - X"9A",X"3A",X"A6",X"9A",X"A7",X"28",X"24",X"21",X"74",X"9A",X"36",X"06",X"CD",X"7A",X"03",X"21", - X"7F",X"9A",X"34",X"7E",X"FE",X"1C",X"20",X"0B",X"AF",X"32",X"7F",X"9A",X"3A",X"7D",X"9A",X"3C", - X"32",X"7D",X"9A",X"3A",X"7D",X"9A",X"32",X"70",X"9A",X"18",X"03",X"32",X"C6",X"9A",X"3A",X"A9", - X"9A",X"A7",X"28",X"0A",X"21",X"74",X"9A",X"36",X"09",X"CD",X"7A",X"03",X"18",X"03",X"32",X"C9", - X"9A",X"3A",X"A7",X"9A",X"A7",X"28",X"0B",X"21",X"74",X"9A",X"36",X"07",X"CD",X"A7",X"04",X"C3", - X"32",X"03",X"3A",X"B1",X"9A",X"A7",X"28",X"0A",X"21",X"74",X"9A",X"36",X"11",X"CD",X"7A",X"03", - X"18",X"03",X"32",X"D1",X"9A",X"3A",X"AD",X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A",X"36",X"0D", - X"CD",X"A7",X"04",X"3A",X"AE",X"9A",X"A7",X"28",X"12",X"21",X"74",X"9A",X"36",X"0E",X"CD",X"A7", - X"04",X"3E",X"09",X"32",X"6A",X"9A",X"3E",X"06",X"32",X"6F",X"9A",X"3A",X"B4",X"9A",X"A7",X"28", - X"08",X"21",X"74",X"9A",X"36",X"14",X"CD",X"A7",X"04",X"3A",X"B5",X"9A",X"A7",X"28",X"08",X"21", - X"74",X"9A",X"36",X"15",X"CD",X"A7",X"04",X"3A",X"AA",X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A", - X"36",X"0A",X"CD",X"A7",X"04",X"3A",X"AB",X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A",X"36",X"0B", - X"CD",X"A7",X"04",X"3A",X"B0",X"9A",X"A7",X"28",X"0A",X"21",X"74",X"9A",X"36",X"10",X"CD",X"7A", - X"03",X"18",X"03",X"32",X"D0",X"9A",X"3A",X"AC",X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A",X"36", - X"0C",X"CD",X"A7",X"04",X"3A",X"B6",X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A",X"36",X"16",X"CD", - X"A7",X"04",X"3A",X"A8",X"9A",X"A7",X"28",X"08",X"21",X"74",X"9A",X"36",X"08",X"CD",X"A7",X"04", - X"18",X"1A",X"21",X"A0",X"9A",X"36",X"00",X"11",X"A1",X"9A",X"01",X"15",X"00",X"ED",X"B0",X"21", - X"C0",X"9A",X"36",X"00",X"11",X"C1",X"9A",X"01",X"16",X"00",X"ED",X"B0",X"21",X"60",X"9A",X"11", - X"10",X"68",X"01",X"10",X"00",X"ED",X"B0",X"3A",X"70",X"9A",X"32",X"05",X"68",X"3A",X"71",X"9A", - X"32",X"0A",X"68",X"3A",X"72",X"9A",X"32",X"0F",X"68",X"C9",X"21",X"74",X"9A",X"7E",X"87",X"86", - X"21",X"2A",X"07",X"D7",X"11",X"75",X"9A",X"01",X"03",X"00",X"ED",X"B0",X"3A",X"74",X"9A",X"FE", - X"0E",X"20",X"18",X"3A",X"4C",X"9A",X"A7",X"28",X"0D",X"3D",X"28",X"06",X"3A",X"4D",X"9A",X"A7", - X"20",X"09",X"3E",X"02",X"18",X"02",X"3E",X"01",X"32",X"76",X"9A",X"21",X"C0",X"9A",X"3A",X"74", - X"9A",X"85",X"6F",X"7E",X"A7",X"20",X"1B",X"34",X"21",X"76",X"9A",X"46",X"48",X"21",X"30",X"9A", - X"3A",X"75",X"9A",X"85",X"6F",X"AF",X"DF",X"41",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F", - X"AF",X"DF",X"CD",X"77",X"05",X"21",X"76",X"9A",X"35",X"28",X"0A",X"21",X"75",X"9A",X"34",X"21", - X"77",X"9A",X"34",X"18",X"ED",X"3A",X"78",X"9A",X"A7",X"C8",X"AF",X"32",X"78",X"9A",X"21",X"C0", - X"9A",X"3A",X"74",X"9A",X"85",X"6F",X"36",X"00",X"C9",X"21",X"C0",X"9A",X"3A",X"74",X"9A",X"85", - X"6F",X"34",X"21",X"74",X"9A",X"7E",X"87",X"86",X"21",X"2A",X"07",X"D7",X"11",X"75",X"9A",X"01", - X"03",X"00",X"ED",X"B0",X"3A",X"74",X"9A",X"FE",X"0E",X"20",X"18",X"3A",X"4C",X"9A",X"A7",X"28", - X"0D",X"3D",X"28",X"06",X"3A",X"4D",X"9A",X"A7",X"20",X"09",X"3E",X"02",X"18",X"02",X"3E",X"01", - X"32",X"76",X"9A",X"21",X"76",X"9A",X"46",X"48",X"21",X"30",X"9A",X"3A",X"75",X"9A",X"85",X"6F", - X"AF",X"DF",X"41",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"AF",X"DF",X"18",X"31",X"21", - X"74",X"9A",X"7E",X"87",X"86",X"21",X"2A",X"07",X"D7",X"11",X"75",X"9A",X"01",X"03",X"00",X"ED", - X"B0",X"3A",X"74",X"9A",X"FE",X"0E",X"20",X"18",X"3A",X"4C",X"9A",X"A7",X"28",X"0D",X"3D",X"28", - X"06",X"3A",X"4D",X"9A",X"A7",X"20",X"09",X"3E",X"02",X"18",X"02",X"3E",X"01",X"32",X"76",X"9A", - X"CD",X"77",X"05",X"21",X"76",X"9A",X"35",X"28",X"0A",X"21",X"75",X"9A",X"34",X"21",X"77",X"9A", - X"34",X"18",X"ED",X"3A",X"78",X"9A",X"A7",X"C8",X"AF",X"32",X"78",X"9A",X"21",X"C0",X"9A",X"3A", - X"74",X"9A",X"85",X"6F",X"36",X"00",X"C9",X"21",X"74",X"9A",X"7E",X"87",X"86",X"21",X"2A",X"07", - X"D7",X"11",X"75",X"9A",X"01",X"03",X"00",X"ED",X"B0",X"3A",X"74",X"9A",X"FE",X"0E",X"20",X"18", - X"3A",X"4C",X"9A",X"A7",X"28",X"0D",X"3D",X"28",X"06",X"3A",X"4D",X"9A",X"A7",X"20",X"09",X"3E", - X"02",X"18",X"02",X"3E",X"01",X"32",X"76",X"9A",X"21",X"C0",X"9A",X"3A",X"74",X"9A",X"85",X"6F", - X"7E",X"A7",X"20",X"1B",X"34",X"21",X"76",X"9A",X"46",X"48",X"21",X"30",X"9A",X"3A",X"75",X"9A", - X"85",X"6F",X"AF",X"DF",X"41",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"AF",X"DF",X"CD", - X"77",X"05",X"21",X"76",X"9A",X"35",X"28",X"0A",X"21",X"75",X"9A",X"34",X"21",X"77",X"9A",X"34", - X"18",X"ED",X"3A",X"78",X"9A",X"A7",X"C8",X"AF",X"32",X"78",X"9A",X"21",X"C0",X"9A",X"3A",X"74", - X"9A",X"85",X"6F",X"36",X"00",X"21",X"A0",X"9A",X"3A",X"74",X"9A",X"85",X"6F",X"3A",X"74",X"9A", - X"FE",X"08",X"28",X"0F",X"FE",X"0C",X"28",X"0D",X"FE",X"14",X"28",X"15",X"FE",X"07",X"28",X"19", - X"36",X"00",X"C9",X"35",X"C9",X"35",X"28",X"03",X"CB",X"46",X"C8",X"3E",X"01",X"32",X"B6",X"9A", - X"C9",X"36",X"00",X"21",X"B3",X"9A",X"36",X"01",X"C9",X"36",X"00",X"21",X"A0",X"9A",X"AF",X"06", - X"08",X"DF",X"23",X"77",X"23",X"23",X"06",X"0C",X"DF",X"21",X"C0",X"9A",X"06",X"08",X"DF",X"23", - X"77",X"23",X"23",X"06",X"0C",X"DF",X"C9",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"34", - X"3A",X"75",X"9A",X"21",X"6F",X"07",X"CF",X"5E",X"23",X"56",X"EB",X"11",X"88",X"9A",X"01",X"03", - X"00",X"ED",X"B0",X"EB",X"21",X"30",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"7E",X"EB",X"D7",X"22", - X"7A",X"9A",X"7E",X"3C",X"CA",X"B2",X"06",X"11",X"D0",X"06",X"2A",X"7A",X"9A",X"7E",X"E6",X"0F", - X"EB",X"CF",X"4E",X"23",X"46",X"EB",X"7E",X"0F",X"0F",X"0F",X"0F",X"E6",X"0F",X"28",X"07",X"CB", - X"38",X"CB",X"19",X"3D",X"20",X"F9",X"3A",X"77",X"9A",X"A7",X"28",X"0D",X"3D",X"28",X"05",X"21", - X"6B",X"9A",X"18",X"08",X"21",X"66",X"9A",X"18",X"03",X"21",X"61",X"9A",X"71",X"7E",X"0F",X"0F", - X"0F",X"0F",X"23",X"77",X"23",X"70",X"7E",X"0F",X"0F",X"0F",X"0F",X"23",X"77",X"3A",X"77",X"9A", - X"A7",X"28",X"0D",X"3D",X"28",X"05",X"11",X"6F",X"9A",X"18",X"08",X"11",X"6A",X"9A",X"18",X"03", - X"11",X"65",X"9A",X"2A",X"7A",X"9A",X"7E",X"D6",X"0C",X"28",X"44",X"3A",X"88",X"9A",X"A7",X"28", - X"23",X"3D",X"28",X"10",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"7E",X"FE",X"06",X"30", - X"13",X"2F",X"18",X"30",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"7E",X"FE",X"06",X"30", - X"03",X"87",X"18",X"20",X"3A",X"89",X"9A",X"A7",X"28",X"18",X"47",X"21",X"00",X"9A",X"3A",X"75", - X"9A",X"85",X"6F",X"7E",X"90",X"38",X"0B",X"D6",X"0A",X"30",X"04",X"ED",X"44",X"18",X"05",X"AF", - X"18",X"02",X"3E",X"0A",X"12",X"21",X"70",X"9A",X"3A",X"77",X"9A",X"85",X"6F",X"3A",X"8A",X"9A", - X"77",X"21",X"CD",X"07",X"3A",X"74",X"9A",X"D7",X"7E",X"2A",X"7A",X"9A",X"23",X"5E",X"16",X"00", - X"21",X"00",X"00",X"06",X"08",X"CB",X"3F",X"30",X"01",X"19",X"CB",X"23",X"CB",X"12",X"10",X"F5", - X"45",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"78",X"BE",X"C0",X"21",X"30",X"9A",X"3A", - X"75",X"9A",X"85",X"6F",X"34",X"34",X"21",X"00",X"9A",X"3A",X"75",X"9A",X"85",X"6F",X"36",X"00", - X"C9",X"21",X"00",X"9A",X"36",X"00",X"11",X"01",X"9A",X"01",X"FF",X"00",X"ED",X"B0",X"31",X"00", - X"9B",X"C9",X"3A",X"77",X"9A",X"A7",X"28",X"0D",X"3D",X"28",X"05",X"21",X"6F",X"9A",X"18",X"08", - X"21",X"6A",X"9A",X"18",X"03",X"21",X"65",X"9A",X"36",X"00",X"3E",X"01",X"32",X"78",X"9A",X"C9", - X"50",X"81",X"00",X"89",X"26",X"91",X"C8",X"99",X"EC",X"A2",X"9D",X"AC",X"E0",X"B6",X"C0",X"C1", - X"45",X"CD",X"7A",X"D9",X"69",X"E6",X"1C",X"F4",X"00",X"00",X"30",X"01",X"68",X"01",X"36",X"01", - X"A8",X"01",X"68",X"01",X"00",X"02",X"AC",X"01",X"08",X"02",X"00",X"FE",X"58",X"FE",X"08",X"FE", - X"98",X"FE",X"58",X"FE",X"D0",X"FE",X"98",X"FE",X"D6",X"FE",X"00",X"5B",X"00",X"6C",X"00",X"5B", - X"00",X"7E",X"00",X"6C",X"00",X"97",X"00",X"81",X"00",X"99",X"00",X"D9",X"00",X"B6",X"00",X"D9", - X"00",X"97",X"00",X"B6",X"00",X"7E",X"00",X"99",X"00",X"81",X"00",X"01",X"00",X"01",X"01",X"01", - X"02",X"01",X"01",X"03",X"01",X"01",X"04",X"01",X"01",X"05",X"01",X"00",X"06",X"01",X"00",X"20", - X"03",X"00",X"0A",X"03",X"00",X"0D",X"03",X"00",X"07",X"03",X"00",X"13",X"03",X"00",X"16",X"03", - X"00",X"19",X"03",X"00",X"1C",X"03",X"00",X"1F",X"01",X"02",X"2C",X"03",X"00",X"10",X"03",X"00", - X"23",X"01",X"00",X"24",X"01",X"00",X"25",X"03",X"00",X"28",X"01",X"00",X"29",X"03",X"00",X"E4", - X"07",X"3B",X"08",X"19",X"08",X"E5",X"07",X"85",X"08",X"9F",X"08",X"B3",X"08",X"F9",X"09",X"09", - X"0A",X"19",X"0A",X"C3",X"09",X"D5",X"09",X"E7",X"09",X"29",X"0A",X"6D",X"0A",X"B1",X"0A",X"DD", - X"0A",X"21",X"0B",X"65",X"0B",X"C7",X"08",X"13",X"09",X"5D",X"09",X"83",X"0C",X"11",X"0D",X"5F", - X"0D",X"8D",X"09",X"9F",X"09",X"B1",X"09",X"C7",X"08",X"C7",X"08",X"C7",X"08",X"2F",X"0C",X"91", - X"0B",X"C7",X"0B",X"FD",X"0B",X"1B",X"0C",X"2F",X"0C",X"93",X"0D",X"07",X"0E",X"83",X"0E",X"85", - X"0D",X"07",X"0D",X"55",X"0D",X"7B",X"0D",X"C5",X"0E",X"01",X"0F",X"3D",X"0F",X"04",X"02",X"02", - X"02",X"02",X"04",X"04",X"0A",X"07",X"0C",X"0B",X"04",X"0A",X"0D",X"04",X"01",X"04",X"0C",X"02", - X"06",X"05",X"02",X"0A",X"FF",X"00",X"00",X"06",X"71",X"01",X"72",X"01",X"73",X"01",X"75",X"01", - X"74",X"01",X"73",X"01",X"72",X"01",X"71",X"01",X"70",X"01",X"8B",X"01",X"8A",X"01",X"0C",X"04", - X"86",X"01",X"87",X"01",X"88",X"01",X"89",X"01",X"8A",X"01",X"89",X"01",X"88",X"01",X"87",X"01", - X"86",X"01",X"85",X"01",X"84",X"01",X"83",X"01",X"FF",X"00",X"00",X"04",X"88",X"01",X"8A",X"01", - X"70",X"01",X"71",X"01",X"73",X"01",X"75",X"01",X"77",X"01",X"78",X"01",X"0C",X"06",X"74",X"01", - X"73",X"01",X"72",X"01",X"71",X"01",X"70",X"01",X"8B",X"01",X"FF",X"00",X"00",X"07",X"89",X"01", - X"8A",X"01",X"8B",X"01",X"0C",X"01",X"70",X"01",X"71",X"01",X"72",X"01",X"0C",X"01",X"73",X"01", - X"74",X"01",X"75",X"01",X"0C",X"03",X"8B",X"01",X"70",X"01",X"71",X"01",X"0C",X"01",X"72",X"01", - X"73",X"01",X"74",X"01",X"0C",X"01",X"75",X"01",X"76",X"01",X"77",X"01",X"0C",X"03",X"71",X"01", - X"72",X"01",X"73",X"01",X"0C",X"01",X"74",X"01",X"75",X"01",X"76",X"01",X"0C",X"01",X"77",X"01", - X"78",X"01",X"79",X"01",X"FF",X"00",X"00",X"05",X"71",X"01",X"72",X"01",X"73",X"01",X"0C",X"01", - X"74",X"01",X"75",X"01",X"76",X"01",X"0C",X"01",X"77",X"01",X"78",X"01",X"79",X"01",X"FF",X"00", - X"00",X"04",X"61",X"01",X"7A",X"01",X"60",X"01",X"78",X"01",X"7A",X"01",X"76",X"01",X"78",X"01", - X"75",X"01",X"FF",X"00",X"00",X"00",X"76",X"01",X"79",X"01",X"60",X"01",X"63",X"01",X"66",X"01", - X"63",X"01",X"60",X"01",X"79",X"01",X"FF",X"00",X"00",X"07",X"81",X"08",X"81",X"01",X"86",X"03", - X"88",X"09",X"8B",X"03",X"8A",X"09",X"86",X"03",X"88",X"09",X"73",X"03",X"71",X"09",X"86",X"03", - X"88",X"09",X"8B",X"03",X"8A",X"09",X"86",X"03",X"71",X"09",X"75",X"03",X"76",X"09",X"74",X"03", - X"72",X"09",X"71",X"03",X"8B",X"09",X"89",X"03",X"88",X"09",X"84",X"03",X"74",X"09",X"76",X"03", - X"74",X"09",X"71",X"03",X"73",X"04",X"8B",X"04",X"88",X"04",X"71",X"04",X"8A",X"04",X"88",X"04", - X"0C",X"10",X"FF",X"00",X"00",X"06",X"8A",X"09",X"81",X"03",X"88",X"09",X"83",X"03",X"86",X"09", - X"81",X"03",X"83",X"09",X"85",X"03",X"8A",X"09",X"81",X"03",X"88",X"09",X"83",X"03",X"86",X"09", - X"81",X"03",X"88",X"09",X"71",X"03",X"72",X"09",X"71",X"03",X"8B",X"09",X"89",X"03",X"88",X"09", - X"86",X"03",X"84",X"09",X"88",X"03",X"89",X"09",X"8B",X"03",X"89",X"09",X"86",X"03",X"8B",X"04", - X"88",X"04",X"83",X"04",X"88",X"04",X"85",X"04",X"83",X"04",X"0C",X"10",X"FF",X"00",X"00",X"07", - X"81",X"0C",X"83",X"09",X"86",X"03",X"85",X"0C",X"81",X"0C",X"86",X"0C",X"88",X"09",X"8B",X"03", - X"8A",X"0C",X"88",X"0C",X"89",X"0C",X"88",X"09",X"86",X"03",X"84",X"0C",X"89",X"0C",X"74",X"0C", - X"71",X"09",X"89",X"03",X"88",X"0C",X"71",X"09",X"8A",X"03",X"0C",X"10",X"FF",X"02",X"00",X"03", - X"78",X"02",X"0C",X"01",X"78",X"01",X"79",X"01",X"7B",X"01",X"61",X"03",X"0C",X"03",X"FF",X"02", - X"00",X"03",X"73",X"02",X"0C",X"01",X"73",X"01",X"74",X"01",X"76",X"01",X"78",X"03",X"0C",X"02", - X"FF",X"02",X"00",X"03",X"70",X"02",X"0C",X"01",X"70",X"01",X"71",X"01",X"73",X"01",X"75",X"03", - X"0C",X"02",X"FF",X"01",X"00",X"04",X"78",X"01",X"7A",X"01",X"63",X"01",X"78",X"01",X"7A",X"01", - X"63",X"01",X"65",X"03",X"FF",X"01",X"00",X"05",X"73",X"01",X"78",X"01",X"7A",X"01",X"73",X"01", - X"78",X"01",X"7A",X"01",X"60",X"03",X"FF",X"01",X"00",X"07",X"8A",X"01",X"73",X"01",X"78",X"01", - X"8A",X"01",X"73",X"01",X"78",X"01",X"7A",X"03",X"FF",X"01",X"06",X"04",X"7A",X"01",X"78",X"01", - X"7A",X"01",X"61",X"01",X"65",X"01",X"68",X"03",X"FF",X"01",X"06",X"04",X"78",X"01",X"75",X"01", - X"78",X"01",X"7A",X"01",X"61",X"01",X"65",X"03",X"FF",X"01",X"06",X"04",X"75",X"01",X"71",X"01", - X"75",X"01",X"78",X"01",X"7A",X"01",X"60",X"03",X"FF",X"02",X"04",X"03",X"7A",X"01",X"76",X"01", - X"78",X"01",X"75",X"01",X"76",X"01",X"73",X"01",X"75",X"01",X"72",X"01",X"73",X"01",X"8A",X"01", - X"8B",X"01",X"88",X"01",X"86",X"01",X"85",X"01",X"83",X"01",X"82",X"01",X"83",X"01",X"86",X"01", - X"85",X"01",X"88",X"01",X"86",X"01",X"8A",X"01",X"88",X"01",X"8B",X"01",X"8A",X"01",X"73",X"01", - X"72",X"01",X"73",X"01",X"75",X"01",X"8A",X"01",X"70",X"01",X"72",X"01",X"FF",X"02",X"04",X"03", - X"76",X"01",X"73",X"01",X"75",X"01",X"72",X"01",X"73",X"01",X"70",X"01",X"72",X"01",X"8A",X"01", - X"8B",X"01",X"86",X"01",X"88",X"01",X"85",X"01",X"83",X"01",X"82",X"01",X"80",X"01",X"9A",X"01", - X"9A",X"01",X"83",X"01",X"82",X"01",X"85",X"01",X"83",X"01",X"86",X"01",X"85",X"01",X"88",X"01", - X"86",X"01",X"8A",X"01",X"88",X"01",X"8B",X"01",X"8A",X"01",X"88",X"01",X"86",X"01",X"85",X"01", - X"FF",X"02",X"10",X"03",X"93",X"02",X"9A",X"02",X"83",X"03",X"9A",X"01",X"98",X"01",X"96",X"01", - X"95",X"01",X"93",X"02",X"95",X"03",X"96",X"02",X"98",X"02",X"9A",X"02",X"9B",X"02",X"9A",X"02", - X"98",X"01",X"96",X"01",X"95",X"01",X"92",X"01",X"93",X"01",X"95",X"01",X"FF",X"02",X"04",X"03", - X"7A",X"01",X"77",X"01",X"78",X"01",X"75",X"01",X"77",X"01",X"73",X"01",X"75",X"01",X"72",X"01", - X"73",X"01",X"8A",X"01",X"80",X"01",X"88",X"01",X"87",X"01",X"85",X"01",X"83",X"01",X"82",X"01", - X"83",X"01",X"87",X"01",X"85",X"01",X"88",X"01",X"87",X"01",X"8A",X"01",X"88",X"01",X"80",X"01", - X"8A",X"01",X"73",X"01",X"72",X"01",X"73",X"01",X"75",X"01",X"8A",X"01",X"70",X"01",X"72",X"01", - X"FF",X"02",X"04",X"03",X"77",X"01",X"73",X"01",X"75",X"01",X"72",X"01",X"73",X"01",X"70",X"01", - X"72",X"01",X"8A",X"01",X"80",X"01",X"87",X"01",X"88",X"01",X"85",X"01",X"83",X"01",X"82",X"01", - X"80",X"01",X"9A",X"01",X"9A",X"01",X"83",X"01",X"82",X"01",X"85",X"01",X"83",X"01",X"87",X"01", - X"85",X"01",X"88",X"01",X"87",X"01",X"8A",X"01",X"88",X"01",X"80",X"01",X"8A",X"01",X"88",X"01", - X"87",X"01",X"85",X"01",X"FF",X"02",X"10",X"03",X"93",X"02",X"9A",X"02",X"83",X"03",X"9A",X"01", - X"98",X"01",X"97",X"01",X"95",X"01",X"93",X"02",X"95",X"03",X"97",X"02",X"98",X"02",X"9A",X"02", - X"90",X"02",X"9A",X"02",X"98",X"01",X"97",X"01",X"95",X"01",X"92",X"01",X"93",X"01",X"95",X"01", - X"FF",X"02",X"04",X"03",X"7A",X"01",X"76",X"01",X"78",X"01",X"75",X"01",X"76",X"01",X"73",X"01", - X"75",X"01",X"72",X"01",X"73",X"01",X"8A",X"01",X"8A",X"01",X"88",X"01",X"86",X"01",X"85",X"01", - X"83",X"01",X"82",X"01",X"83",X"01",X"85",X"01",X"86",X"01",X"88",X"01",X"86",X"01",X"8A",X"01", - X"70",X"01",X"72",X"01",X"73",X"04",X"FF",X"02",X"04",X"03",X"76",X"01",X"73",X"01",X"75",X"01", - X"72",X"01",X"73",X"01",X"70",X"01",X"72",X"01",X"8A",X"01",X"8A",X"01",X"86",X"01",X"86",X"01", - X"85",X"01",X"83",X"01",X"82",X"01",X"80",X"01",X"9A",X"01",X"9A",X"01",X"8B",X"01",X"80",X"01", - X"82",X"01",X"83",X"01",X"85",X"01",X"86",X"01",X"88",X"01",X"8A",X"04",X"FF",X"02",X"10",X"03", - X"73",X"02",X"75",X"02",X"76",X"02",X"75",X"02",X"73",X"02",X"72",X"02",X"70",X"02",X"72",X"02", - X"73",X"02",X"8B",X"02",X"8A",X"02",X"86",X"02",X"83",X"04",X"FF",X"00",X"00",X"04",X"71",X"04", - X"73",X"04",X"71",X"04",X"73",X"04",X"76",X"04",X"78",X"04",X"76",X"04",X"78",X"04",X"FF",X"00", - X"00",X"06",X"56",X"01",X"55",X"01",X"54",X"01",X"53",X"01",X"52",X"01",X"51",X"01",X"50",X"01", - X"6B",X"01",X"6A",X"01",X"69",X"01",X"68",X"01",X"67",X"01",X"66",X"01",X"65",X"01",X"64",X"01", - X"63",X"01",X"62",X"01",X"61",X"01",X"60",X"01",X"7B",X"01",X"7A",X"01",X"79",X"01",X"78",X"01", - X"77",X"01",X"76",X"01",X"75",X"01",X"74",X"01",X"73",X"01",X"72",X"01",X"71",X"01",X"70",X"01", - X"8B",X"01",X"8A",X"01",X"89",X"01",X"88",X"01",X"87",X"01",X"86",X"01",X"85",X"01",X"84",X"01", - X"83",X"01",X"FF",X"02",X"04",X"05",X"60",X"01",X"78",X"01",X"75",X"01",X"71",X"01",X"60",X"01", - X"78",X"01",X"75",X"01",X"71",X"01",X"60",X"01",X"78",X"01",X"75",X"01",X"71",X"01",X"60",X"01", - X"78",X"01",X"75",X"01",X"71",X"01",X"60",X"01",X"78",X"01",X"75",X"01",X"71",X"01",X"60",X"01", - X"78",X"01",X"75",X"01",X"71",X"01",X"60",X"01",X"0C",X"01",X"78",X"01",X"7A",X"01",X"75",X"01", - X"78",X"01",X"73",X"01",X"75",X"01",X"61",X"01",X"7A",X"01",X"76",X"01",X"73",X"01",X"61",X"01", - X"7A",X"01",X"76",X"01",X"73",X"01",X"61",X"01",X"7A",X"01",X"76",X"01",X"73",X"01",X"61",X"01", - X"7A",X"01",X"76",X"01",X"73",X"01",X"61",X"01",X"79",X"01",X"76",X"01",X"73",X"01",X"61",X"01", - X"79",X"01",X"76",X"01",X"73",X"01",X"61",X"01",X"0C",X"01",X"79",X"01",X"61",X"01",X"78",X"01", - X"79",X"01",X"75",X"01",X"78",X"01",X"FF",X"02",X"02",X"05",X"60",X"01",X"60",X"01",X"60",X"01", - X"FF",X"02",X"04",X"05",X"61",X"02",X"78",X"02",X"78",X"02",X"61",X"02",X"78",X"02",X"78",X"02", - X"61",X"02",X"78",X"02",X"78",X"02",X"61",X"02",X"78",X"02",X"78",X"02",X"61",X"02",X"78",X"02", - X"7A",X"02",X"75",X"02",X"63",X"02",X"7A",X"02",X"7A",X"02",X"63",X"02",X"7A",X"02",X"7A",X"02", - X"63",X"02",X"7A",X"02",X"79",X"02",X"63",X"02",X"79",X"02",X"79",X"02",X"63",X"02",X"79",X"02", - X"76",X"02",X"73",X"02",X"FF",X"02",X"02",X"05",X"78",X"01",X"78",X"01",X"78",X"01",X"FF",X"02", - X"10",X"05",X"85",X"06",X"85",X"06",X"85",X"06",X"85",X"06",X"85",X"04",X"85",X"04",X"86",X"06", - X"86",X"06",X"86",X"06",X"86",X"06",X"86",X"04",X"86",X"04",X"FF",X"02",X"04",X"05",X"81",X"01", - X"81",X"01",X"81",X"01",X"FF",X"02",X"00",X"07",X"65",X"01",X"0C",X"01",X"61",X"01",X"0C",X"01", - X"63",X"01",X"FF",X"02",X"00",X"05",X"7A",X"05",X"0C",X"01",X"7A",X"01",X"0C",X"01",X"7A",X"03", - X"0C",X"01",X"78",X"07",X"0C",X"01",X"78",X"07",X"0C",X"01",X"78",X"03",X"0C",X"01",X"7B",X"05", - X"0C",X"01",X"7B",X"01",X"0C",X"01",X"7B",X"03",X"0C",X"01",X"7A",X"07",X"0C",X"01",X"7A",X"07", - X"0C",X"01",X"7A",X"03",X"0C",X"01",X"7B",X"01",X"0C",X"01",X"7B",X"01",X"0C",X"03",X"7B",X"01", - X"0C",X"01",X"7B",X"03",X"0C",X"01",X"61",X"01",X"0C",X"01",X"61",X"01",X"0C",X"03",X"61",X"01", - X"0C",X"01",X"61",X"03",X"0C",X"01",X"61",X"03",X"0C",X"01",X"61",X"03",X"0C",X"01",X"63",X"01", - X"0C",X"01",X"63",X"01",X"0C",X"03",X"63",X"01",X"0C",X"01",X"63",X"03",X"0C",X"01",X"63",X"03", - X"0C",X"01",X"63",X"03",X"0C",X"01",X"FF",X"02",X"00",X"03",X"86",X"02",X"8A",X"02",X"71",X"02", - X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02",X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02", - X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02",X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02", - X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02",X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02", - X"76",X"02",X"86",X"02",X"8A",X"02",X"71",X"02",X"76",X"02",X"77",X"01",X"0C",X"01",X"77",X"01", - X"0C",X"03",X"77",X"01",X"0C",X"01",X"77",X"03",X"0C",X"01",X"69",X"01",X"0C",X"01",X"69",X"01", - X"0C",X"03",X"69",X"01",X"0C",X"01",X"69",X"03",X"0C",X"01",X"69",X"03",X"0C",X"01",X"69",X"03", - X"0C",X"01",X"8B",X"02",X"73",X"02",X"76",X"02",X"7B",X"02",X"7B",X"02",X"76",X"02",X"73",X"02", - X"8B",X"02",X"FF",X"00",X"00",X"02",X"86",X"08",X"81",X"08",X"86",X"08",X"81",X"08",X"86",X"08", - X"81",X"08",X"86",X"08",X"81",X"08",X"82",X"01",X"0C",X"01",X"82",X"01",X"0C",X"03",X"82",X"01", - X"0C",X"01",X"82",X"03",X"0C",X"01",X"84",X"01",X"0C",X"01",X"84",X"01",X"0C",X"03",X"84",X"01", - X"0C",X"01",X"84",X"03",X"0C",X"01",X"84",X"03",X"0C",X"01",X"84",X"03",X"0C",X"01",X"7B",X"08", - X"76",X"04",X"8B",X"04",X"FF",X"00",X"0C",X"05",X"75",X"0C",X"71",X"0C",X"8A",X"0C",X"86",X"0C", - X"0C",X"09",X"75",X"03",X"71",X"09",X"8A",X"03",X"86",X"04",X"8A",X"04",X"71",X"04",X"89",X"04", - X"70",X"04",X"73",X"04",X"8B",X"0C",X"73",X"0C",X"76",X"0C",X"78",X"0C",X"0C",X"09",X"79",X"03", - X"76",X"09",X"72",X"03",X"8B",X"04",X"89",X"04",X"86",X"04",X"72",X"04",X"89",X"04",X"76",X"04", - X"FF",X"00",X"0C",X"05",X"71",X"0C",X"8A",X"0C",X"86",X"0C",X"85",X"0C",X"0C",X"09",X"81",X"03", - X"8A",X"09",X"86",X"03",X"85",X"04",X"86",X"04",X"8A",X"04",X"86",X"04",X"89",X"04",X"8B",X"04", - X"88",X"0C",X"8B",X"0C",X"73",X"0C",X"76",X"0C",X"0C",X"09",X"76",X"03",X"72",X"09",X"8B",X"03", - X"8A",X"04",X"86",X"04",X"82",X"04",X"8B",X"04",X"89",X"04",X"82",X"04",X"FF",X"00",X"00",X"03", - X"75",X"18",X"75",X"18",X"75",X"18",X"71",X"0C",X"75",X"0C",X"73",X"18",X"73",X"18",X"72",X"18", - X"76",X"0C",X"78",X"0C",X"FF",X"FB",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"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"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"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"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"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/sp_graphx.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/sp_graphx.vhd deleted file mode 100644 index c163a322..00000000 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/roms/sp_graphx.vhd +++ /dev/null @@ -1,534 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity sp_graphx 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 sp_graphx is - type rom is array(0 to 8191) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"88",X"CC",X"EE",X"FF",X"BB",X"99",X"18",X"19",X"11",X"1D",X"3F",X"BF",X"FF",X"DF",X"CF",X"E7", - X"00",X"06",X"8E",X"BF",X"FF",X"7F",X"7E",X"FD",X"22",X"66",X"EE",X"EE",X"AA",X"22",X"02",X"02", - X"11",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"77",X"33",X"33",X"33",X"33",X"11",X"11",X"11", - X"DD",X"89",X"89",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"11",X"11",X"33",X"33",X"22",X"02",X"00",X"00",X"00",X"00",X"8B",X"8B",X"EF",X"77",X"E7",X"EB", - X"00",X"00",X"44",X"CF",X"CF",X"DF",X"FF",X"7F",X"00",X"00",X"00",X"11",X"33",X"EE",X"EE",X"44", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"AB",X"3B",X"33",X"77",X"77",X"22",X"22",X"22", - X"FE",X"EE",X"AA",X"02",X"00",X"00",X"00",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"01",X"02",X"00",X"00",X"00",X"44",X"CC",X"CC",X"CD",X"EF",X"77",X"77",X"DF", - X"00",X"00",X"00",X"2A",X"EE",X"EF",X"CF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"FF", - X"01",X"00",X"00",X"00",X"00",X"11",X"11",X"00",X"C7",X"77",X"FF",X"FF",X"CC",X"88",X"00",X"00", - X"FF",X"FF",X"EA",X"04",X"00",X"00",X"00",X"00",X"EE",X"04",X"08",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"01",X"11",X"33",X"77",X"3B",X"33",X"77",X"FB",X"23", - X"00",X"00",X"00",X"0C",X"9D",X"EE",X"EF",X"FF",X"00",X"00",X"00",X"88",X"00",X"00",X"08",X"08", - X"00",X"00",X"00",X"00",X"11",X"22",X"00",X"00",X"23",X"77",X"EE",X"CC",X"00",X"00",X"00",X"00", - X"7F",X"FF",X"62",X"44",X"09",X"00",X"00",X"00",X"FF",X"EE",X"44",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"00",X"00",X"11",X"13",X"15",X"33",X"77",X"7B",X"77", - X"CC",X"88",X"88",X"88",X"8E",X"BF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"88",X"00",X"08", - X"00",X"00",X"11",X"33",X"66",X"00",X"00",X"00",X"EF",X"EF",X"FF",X"DC",X"01",X"00",X"00",X"00", - X"EF",X"7F",X"FF",X"99",X"00",X"01",X"00",X"00",X"08",X"00",X"FF",X"EE",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"00",X"00",X"01",X"00",X"10",X"7F",X"33",X"77", - X"11",X"77",X"EE",X"66",X"EF",X"CF",X"FF",X"7F",X"88",X"00",X"00",X"00",X"08",X"08",X"CC",X"88", - X"11",X"FF",X"11",X"00",X"00",X"00",X"00",X"00",X"EF",X"FF",X"88",X"13",X"00",X"00",X"00",X"00", - X"2F",X"FF",X"F7",X"D9",X"00",X"13",X"00",X"00",X"0C",X"0C",X"00",X"CC",X"FF",X"CC",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"17",X"00",X"11",X"FF", - X"00",X"3F",X"00",X"11",X"FB",X"F7",X"FF",X"9F",X"00",X"FF",X"EE",X"CC",X"88",X"8E",X"0E",X"CC", - X"FF",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"11",X"00",X"17",X"00",X"00",X"00", - X"3F",X"9F",X"FF",X"F7",X"FB",X"11",X"00",X"3F",X"FF",X"CC",X"0E",X"8E",X"88",X"CC",X"EE",X"FF", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"17",X"00",X"11",X"FF", - X"00",X"3F",X"00",X"11",X"FB",X"F7",X"FF",X"9F",X"00",X"FF",X"EE",X"CC",X"88",X"8E",X"0E",X"CC", - X"FF",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"11",X"00",X"17",X"00",X"00",X"00", - X"3F",X"9F",X"FF",X"F7",X"FB",X"11",X"00",X"3F",X"FF",X"CC",X"0E",X"8E",X"88",X"CC",X"EE",X"FF", - X"30",X"70",X"43",X"43",X"52",X"61",X"21",X"30",X"00",X"80",X"80",X"80",X"80",X"81",X"C1",X"F3", - X"00",X"00",X"00",X"00",X"00",X"04",X"14",X"FE",X"60",X"F0",X"96",X"96",X"D2",X"B4",X"A4",X"E0", - X"70",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"F3",X"F3",X"73",X"30",X"43",X"C3",X"10",X"10", - X"FE",X"FE",X"F6",X"E0",X"96",X"96",X"40",X"40",X"F0",X"C0",X"00",X"00",X"00",X"80",X"00",X"00", - X"00",X"00",X"00",X"10",X"10",X"30",X"70",X"30",X"00",X"30",X"70",X"E0",X"80",X"81",X"A3",X"F3", - X"80",X"A0",X"10",X"10",X"00",X"14",X"04",X"CC",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0", - X"10",X"10",X"00",X"10",X"30",X"00",X"00",X"00",X"F7",X"F7",X"72",X"B4",X"2D",X"61",X"10",X"00", - X"EE",X"FC",X"FC",X"F0",X"08",X"48",X"20",X"00",X"C0",X"C0",X"A0",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"10",X"10",X"10",X"10",X"70",X"30",X"40",X"E0",X"E0",X"2C",X"48",X"48",X"C0",X"C6", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"E0",X"E0",X"2C", - X"10",X"00",X"10",X"61",X"01",X"10",X"00",X"00",X"F7",X"FF",X"F7",X"F3",X"A4",X"96",X"90",X"00", - X"18",X"F8",X"F8",X"F0",X"70",X"00",X"00",X"00",X"A4",X"C0",X"80",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"10",X"10",X"00",X"10",X"10",X"00",X"00",X"10",X"30",X"F0",X"E0",X"D1",X"F3",X"F7", - X"00",X"E0",X"F0",X"80",X"00",X"0C",X"8A",X"CE",X"00",X"00",X"80",X"40",X"40",X"60",X"60",X"E0", - X"60",X"01",X"01",X"10",X"00",X"00",X"00",X"00",X"F7",X"79",X"79",X"16",X"86",X"10",X"10",X"00", - X"EE",X"DC",X"F8",X"F0",X"60",X"00",X"00",X"00",X"E0",X"C0",X"80",X"80",X"C0",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"10",X"10",X"10",X"00",X"00",X"10",X"21",X"70",X"F0",X"E0",X"E0",X"E7", - X"00",X"E0",X"68",X"68",X"80",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"60",X"12",X"03",X"70",X"21",X"00",X"00",X"00",X"FF",X"FF",X"F7",X"F2",X"58",X"80",X"80",X"00", - X"00",X"08",X"F8",X"C3",X"F0",X"C0",X"40",X"00",X"00",X"E0",X"78",X"68",X"C0",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"40",X"20",X"03",X"00",X"40",X"30",X"70",X"E0",X"F1",X"F7",X"F7", - X"00",X"00",X"F0",X"F0",X"20",X"00",X"8E",X"88",X"00",X"00",X"00",X"80",X"C0",X"20",X"00",X"30", - X"43",X"30",X"21",X"01",X"10",X"10",X"00",X"00",X"F3",X"F7",X"7B",X"B0",X"B0",X"00",X"00",X"00", - X"8E",X"CC",X"80",X"F0",X"F0",X"E0",X"40",X"00",X"60",X"E0",X"C0",X"80",X"80",X"00",X"00",X"00", - X"00",X"00",X"00",X"20",X"30",X"03",X"C3",X"30",X"10",X"10",X"30",X"30",X"70",X"F7",X"F7",X"F3", - X"30",X"E1",X"96",X"F0",X"C0",X"88",X"8E",X"88",X"E0",X"3C",X"3C",X"E0",X"00",X"00",X"00",X"00", - X"C3",X"03",X"30",X"20",X"00",X"00",X"00",X"00",X"F7",X"F7",X"70",X"30",X"30",X"10",X"10",X"00", - X"8E",X"88",X"C0",X"F0",X"96",X"E1",X"30",X"00",X"00",X"00",X"00",X"E0",X"3C",X"3C",X"E0",X"00", - X"00",X"00",X"00",X"20",X"30",X"03",X"43",X"30",X"10",X"10",X"30",X"70",X"70",X"F7",X"F7",X"F3", - X"00",X"80",X"F0",X"F0",X"10",X"88",X"8E",X"88",X"00",X"00",X"00",X"80",X"C0",X"60",X"30",X"00", - X"43",X"03",X"30",X"20",X"00",X"00",X"00",X"00",X"F7",X"F7",X"70",X"70",X"30",X"10",X"10",X"00", - X"8E",X"88",X"10",X"F0",X"F0",X"80",X"00",X"00",X"30",X"60",X"C0",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"11",X"33",X"11",X"00",X"00",X"00",X"00",X"44",X"DC",X"EF",X"FE",X"FE", - X"00",X"00",X"00",X"11",X"D1",X"3F",X"F3",X"F3",X"00",X"00",X"00",X"00",X"CC",X"EE",X"CC",X"88", - X"11",X"33",X"33",X"33",X"00",X"00",X"00",X"00",X"EF",X"8B",X"9B",X"98",X"98",X"00",X"00",X"00", - X"3F",X"0E",X"4E",X"40",X"40",X"00",X"00",X"00",X"CC",X"EE",X"EE",X"EE",X"88",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"00",X"CC",X"CC",X"FE",X"FE",X"47",X"CF", - X"00",X"00",X"00",X"80",X"D1",X"F3",X"3F",X"7F",X"00",X"00",X"00",X"00",X"88",X"88",X"00",X"00", - X"11",X"22",X"22",X"22",X"00",X"00",X"00",X"00",X"70",X"7C",X"53",X"10",X"00",X"00",X"00",X"00", - X"C4",X"F3",X"19",X"22",X"22",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"11",X"77",X"77",X"00",X"00",X"11",X"FF",X"FF",X"FF",X"FE",X"67", - X"00",X"00",X"00",X"20",X"68",X"2C",X"97",X"F3",X"00",X"00",X"00",X"00",X"00",X"88",X"EE",X"CC", - X"77",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"47",X"51",X"90",X"20",X"00",X"00",X"00", - X"7F",X"7F",X"19",X"33",X"77",X"55",X"00",X"00",X"EE",X"88",X"88",X"88",X"88",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"33",X"00",X"00",X"11",X"33",X"33",X"99",X"FE",X"12", - X"00",X"00",X"88",X"88",X"70",X"3C",X"96",X"C2",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"CC", - X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"47",X"A3",X"41",X"00",X"11",X"00",X"00", - X"F3",X"5D",X"44",X"66",X"CC",X"88",X"00",X"00",X"CC",X"88",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"11",X"33",X"11",X"33",X"00",X"00",X"11",X"11",X"FF",X"FF",X"BB",X"33",X"07", - X"00",X"44",X"CC",X"EE",X"CC",X"BC",X"96",X"C3",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00", - X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"C7",X"03",X"63",X"80",X"11",X"33",X"11",X"00", - X"7B",X"FF",X"FF",X"77",X"EE",X"CC",X"CC",X"00",X"CC",X"88",X"88",X"88",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"33",X"00",X"00",X"00",X"00",X"00",X"00",X"66",X"AA",X"31",X"34", - X"00",X"00",X"00",X"33",X"FF",X"EE",X"BC",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F4",X"34",X"72",X"02",X"11",X"EE",X"00",X"00", - X"3C",X"3F",X"FF",X"BB",X"88",X"00",X"00",X"00",X"00",X"00",X"CC",X"CC",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"11",X"00",X"00",X"10",X"00",X"00",X"EE",X"FF",X"FF",X"11",X"17",X"C7",X"07", - X"00",X"22",X"77",X"FF",X"FF",X"EE",X"D2",X"D2",X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"00", - X"10",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"C7",X"17",X"11",X"FF",X"FF",X"EE",X"00",X"00", - X"D2",X"EE",X"FF",X"FF",X"77",X"22",X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"11",X"17",X"C7",X"07", - X"00",X"00",X"00",X"77",X"77",X"EE",X"D2",X"D2",X"00",X"00",X"00",X"88",X"88",X"00",X"00",X"80", - X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"C7",X"17",X"11",X"FF",X"00",X"00",X"00",X"00", - X"D2",X"EE",X"77",X"77",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"88",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"30",X"30",X"30",X"10",X"00",X"00",X"00",X"00",X"80",X"81",X"D1",X"C1",X"E1", - X"00",X"00",X"00",X"08",X"0C",X"DC",X"1C",X"3C",X"00",X"00",X"00",X"E0",X"E0",X"E0",X"C0",X"80", - X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"71",X"33",X"43",X"A3",X"00",X"00",X"00",X"00", - X"FC",X"EE",X"9E",X"AE",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"80",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"60",X"60",X"60",X"60",X"61",X"61", - X"00",X"00",X"00",X"04",X"0E",X"EE",X"0E",X"1C",X"00",X"00",X"00",X"00",X"C0",X"C0",X"C0",X"80", - X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"33",X"F3",X"57",X"13",X"11",X"00",X"00",X"00", - X"FC",X"FC",X"0C",X"6C",X"10",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"10",X"10",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"C0",X"E0",X"D1",X"E1", - X"00",X"00",X"00",X"00",X"00",X"0C",X"8E",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60", - X"00",X"10",X"60",X"00",X"00",X"00",X"00",X"00",X"C3",X"77",X"3F",X"BF",X"47",X"55",X"00",X"00", - X"1C",X"78",X"F8",X"C8",X"80",X"40",X"40",X"00",X"E0",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"10",X"30",X"30",X"31",X"61",X"F7", - X"00",X"80",X"C0",X"80",X"85",X"CE",X"6F",X"3E",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"E0", - X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"BF",X"3F",X"47",X"9B",X"00",X"10",X"00",X"00", - X"BE",X"F8",X"C8",X"80",X"80",X"00",X"00",X"00",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"10",X"00",X"30",X"70",X"70",X"70",X"60",X"E1",X"CF", - X"00",X"80",X"80",X"00",X"00",X"04",X"8E",X"CE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"23",X"01",X"33",X"00",X"00",X"00",X"00",X"00",X"EF",X"EF",X"3E",X"9C",X"20",X"40",X"40",X"00", - X"4C",X"A0",X"F0",X"F0",X"10",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"80",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"B0",X"BF",X"3F", - X"00",X"00",X"70",X"F0",X"80",X"27",X"2F",X"2F",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"00", - X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"3F",X"64",X"20",X"40",X"00",X"00",X"00", - X"0C",X"F0",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"80",X"50",X"BE",X"3F",X"FF", - X"00",X"30",X"70",X"F0",X"E0",X"80",X"2F",X"2F",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"08", - X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"3F",X"BE",X"50",X"80",X"00",X"00",X"00",X"00", - X"2F",X"80",X"E0",X"F0",X"70",X"30",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"00", - X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"80",X"50",X"BE",X"3F",X"FF", - X"00",X"00",X"00",X"70",X"F0",X"80",X"2F",X"2F",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"08", - X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"3F",X"BE",X"50",X"80",X"00",X"00",X"00",X"00", - X"2F",X"80",X"F0",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"46", - X"00",X"00",X"00",X"00",X"01",X"66",X"22",X"88",X"00",X"33",X"44",X"8A",X"11",X"76",X"80",X"00", - X"00",X"11",X"11",X"02",X"11",X"00",X"00",X"00",X"8A",X"10",X"08",X"08",X"CC",X"88",X"44",X"88", - X"CC",X"A8",X"00",X"00",X"00",X"00",X"10",X"F0",X"00",X"00",X"00",X"70",X"00",X"10",X"F0",X"F0", - X"00",X"00",X"CC",X"02",X"99",X"11",X"00",X"00",X"00",X"00",X"33",X"0C",X"11",X"06",X"10",X"00", - X"00",X"00",X"00",X"88",X"44",X"02",X"91",X"55",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"F0",X"00",X"10",X"F0",X"70",X"F0",X"F0",X"F0",X"F0",X"E0",X"C0",X"80",X"E0",X"E0",X"C0",X"F0", - X"31",X"31",X"01",X"01",X"22",X"44",X"11",X"20",X"08",X"08",X"8C",X"8C",X"88",X"88",X"00",X"00", - X"00",X"11",X"11",X"00",X"00",X"00",X"00",X"00",X"88",X"04",X"04",X"88",X"A8",X"44",X"54",X"33", - X"10",X"00",X"00",X"00",X"00",X"CC",X"03",X"91",X"F0",X"10",X"00",X"70",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"00",X"00",X"00",X"00",X"00", - X"CE",X"33",X"00",X"00",X"00",X"00",X"00",X"00",X"54",X"44",X"13",X"00",X"00",X"00",X"00",X"00", - X"F0",X"F0",X"70",X"F0",X"10",X"00",X"F0",X"00",X"C0",X"E0",X"E0",X"80",X"C0",X"E0",X"F0",X"11", - X"44",X"44",X"01",X"00",X"20",X"55",X"55",X"2A",X"00",X"00",X"00",X"88",X"88",X"00",X"00",X"00", - X"00",X"CE",X"02",X"CE",X"02",X"11",X"00",X"00",X"20",X"FF",X"37",X"26",X"04",X"88",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"00",X"00",X"00",X"00", - X"00",X"00",X"22",X"33",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"89",X"CD",X"03", - X"00",X"00",X"22",X"33",X"22",X"00",X"11",X"77",X"00",X"00",X"88",X"88",X"04",X"00",X"CC",X"FF", - X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"11",X"44",X"44",X"91",X"11",X"11",X"77",X"FF",X"BB", - X"66",X"DD",X"FE",X"FD",X"CF",X"46",X"CF",X"CD",X"77",X"BB",X"EE",X"8E",X"0D",X"0D",X"01",X"07", - X"00",X"00",X"00",X"00",X"00",X"77",X"FF",X"DD",X"00",X"00",X"00",X"80",X"22",X"88",X"AA",X"66", - X"00",X"00",X"00",X"00",X"00",X"01",X"2A",X"0C",X"00",X"00",X"44",X"44",X"88",X"00",X"00",X"00", - X"AA",X"EF",X"1E",X"07",X"07",X"02",X"40",X"0E",X"FF",X"19",X"6E",X"1F",X"35",X"1F",X"3F",X"33", - X"00",X"00",X"EE",X"FF",X"BB",X"66",X"EE",X"CC",X"00",X"88",X"44",X"00",X"00",X"00",X"00",X"00", - X"11",X"11",X"00",X"11",X"11",X"00",X"00",X"00",X"D9",X"BB",X"DD",X"EC",X"CD",X"FF",X"33",X"00", - X"47",X"8F",X"CE",X"CE",X"CF",X"8B",X"66",X"FF",X"29",X"05",X"08",X"26",X"0E",X"06",X"1D",X"FF", - X"00",X"00",X"00",X"00",X"11",X"22",X"22",X"00",X"40",X"22",X"DD",X"99",X"00",X"00",X"00",X"00", - X"66",X"33",X"33",X"11",X"40",X"22",X"22",X"00",X"FF",X"66",X"99",X"FF",X"EE",X"00",X"00",X"00", - X"84",X"0A",X"01",X"0A",X"0F",X"0D",X"1F",X"C2",X"3F",X"1F",X"35",X"17",X"33",X"3F",X"FF",X"77", - X"BB",X"FF",X"66",X"BB",X"BB",X"66",X"CC",X"88",X"00",X"44",X"66",X"44",X"66",X"11",X"00",X"00", - X"FF",X"BB",X"77",X"FF",X"EE",X"00",X"00",X"00",X"AA",X"CC",X"CC",X"88",X"22",X"44",X"00",X"00", - X"33",X"04",X"A8",X"98",X"44",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"44",X"00",X"00", - X"88",X"54",X"22",X"22",X"00",X"33",X"67",X"CF",X"00",X"00",X"91",X"11",X"FF",X"CC",X"0B",X"07", - X"22",X"FF",X"DD",X"2A",X"0F",X"3F",X"07",X"0F",X"EE",X"FF",X"33",X"1D",X"0E",X"8F",X"0F",X"03", - X"CE",X"CD",X"EE",X"45",X"EE",X"EF",X"EF",X"FF",X"1E",X"2F",X"4F",X"0F",X"0F",X"07",X"0E",X"6D", - X"CE",X"87",X"0D",X"0E",X"8F",X"0F",X"01",X"0E",X"0D",X"8F",X"0F",X"06",X"00",X"04",X"0B",X"01", - X"00",X"11",X"BB",X"CC",X"FF",X"77",X"1E",X"87",X"A2",X"22",X"CC",X"11",X"99",X"BB",X"7F",X"0C", - X"00",X"01",X"01",X"CC",X"EE",X"BF",X"3F",X"37",X"11",X"22",X"40",X"08",X"40",X"00",X"00",X"00", - X"0F",X"1F",X"0B",X"03",X"09",X"08",X"83",X"0E",X"0D",X"0F",X"0F",X"09",X"03",X"06",X"05",X"07", - X"3B",X"2E",X"B7",X"1F",X"0D",X"0F",X"0F",X"0F",X"00",X"00",X"66",X"FF",X"3F",X"3F",X"37",X"6E", - X"FF",X"11",X"77",X"FF",X"EE",X"66",X"67",X"67",X"3D",X"1F",X"9B",X"17",X"2F",X"0F",X"07",X"5B", - X"0F",X"0D",X"1A",X"0F",X"0E",X"0D",X"0F",X"8F",X"07",X"01",X"0A",X"04",X"08",X"13",X"07",X"7F", - X"33",X"11",X"00",X"11",X"11",X"33",X"44",X"00",X"8F",X"8A",X"23",X"23",X"91",X"00",X"00",X"00", - X"6F",X"0F",X"07",X"0B",X"8C",X"FF",X"77",X"00",X"0F",X"97",X"6F",X"06",X"3F",X"EE",X"88",X"00", - X"0C",X"08",X"0B",X"84",X"0A",X"03",X"0B",X"0F",X"01",X"07",X"07",X"1A",X"03",X"0B",X"0E",X"4D", - X"0B",X"85",X"0D",X"1B",X"1F",X"19",X"66",X"FF",X"AA",X"88",X"88",X"CC",X"CC",X"88",X"00",X"00", - X"1F",X"2F",X"4B",X"8E",X"77",X"FF",X"00",X"00",X"0F",X"0F",X"0B",X"FF",X"BB",X"00",X"00",X"00", - X"FF",X"CC",X"CC",X"98",X"00",X"40",X"22",X"00",X"00",X"00",X"88",X"88",X"C8",X"62",X"33",X"11", - X"00",X"00",X"02",X"13",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"09",X"C1",X"03", - X"00",X"00",X"02",X"03",X"02",X"00",X"11",X"67",X"00",X"00",X"08",X"80",X"40",X"00",X"0C",X"3F", - X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"11",X"04",X"04",X"89",X"01",X"01",X"17",X"3F",X"3B", - X"06",X"4D",X"0F",X"7C",X"8F",X"06",X"0F",X"0D",X"07",X"0B",X"0E",X"0E",X"0D",X"0D",X"01",X"25", - X"00",X"00",X"00",X"00",X"00",X"77",X"0F",X"4D",X"00",X"00",X"00",X"80",X"22",X"08",X"AA",X"06", - X"00",X"00",X"00",X"00",X"00",X"11",X"0A",X"0C",X"00",X"00",X"04",X"04",X"80",X"00",X"00",X"00", - X"0A",X"0F",X"0F",X"07",X"07",X"02",X"04",X"0E",X"2F",X"09",X"86",X"0F",X"07",X"0F",X"0F",X"03", - X"00",X"00",X"6E",X"1F",X"0B",X"26",X"2E",X"0C",X"00",X"88",X"44",X"00",X"00",X"00",X"00",X"00", - X"01",X"10",X"00",X"01",X"01",X"00",X"00",X"00",X"1D",X"1A",X"4D",X"8E",X"8D",X"0F",X"03",X"00", - X"07",X"0F",X"0E",X"4A",X"0F",X"0B",X"06",X"0F",X"0B",X"05",X"08",X"06",X"0E",X"06",X"0D",X"0F", - X"00",X"00",X"00",X"00",X"10",X"22",X"22",X"00",X"04",X"02",X"0D",X"09",X"00",X"00",X"00",X"00", - X"46",X"03",X"03",X"01",X"04",X"22",X"22",X"00",X"0F",X"06",X"09",X"3E",X"CE",X"00",X"00",X"00", - X"0C",X"28",X"01",X"0A",X"0F",X"0D",X"0F",X"0E",X"1E",X"2F",X"27",X"07",X"03",X"0F",X"0F",X"17", - X"0B",X"4F",X"66",X"2B",X"2B",X"06",X"CC",X"88",X"00",X"04",X"06",X"04",X"06",X"01",X"00",X"00", - X"0F",X"0B",X"27",X"87",X"EE",X"00",X"00",X"00",X"2A",X"0C",X"CC",X"08",X"02",X"04",X"00",X"00", - X"03",X"04",X"0A",X"09",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",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"30", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F1",X"30",X"00",X"00",X"00",X"00",X"00",X"00", - X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30", - X"00",X"00",X"00",X"00",X"01",X"02",X"04",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"30",X"40",X"00",X"00",X"00",X"00",X"00", - X"80",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"F1",X"30",X"00",X"00",X"00",X"00",X"00", - X"00",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"70",X"72", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",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"77",X"CC",X"88",X"77",X"00",X"99",X"AA", - X"00",X"CC",X"22",X"66",X"CC",X"00",X"CC",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"AA",X"AA",X"EE",X"00",X"00",X"FF",X"44",X"00", - X"22",X"22",X"44",X"00",X"22",X"EE",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"08",X"08",X"07",X"00",X"07",X"08", - X"00",X"0C",X"02",X"02",X"0C",X"00",X"0C",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"08",X"07",X"00",X"00",X"0F",X"04",X"02",X"01", - X"02",X"0C",X"00",X"08",X"0E",X"08",X"08",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"00",X"00",X"00",X"00",X"00",X"00",X"07",X"08",X"08",X"07",X"00",X"07",X"08", - X"00",X"0C",X"02",X"02",X"0C",X"00",X"0C",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"08",X"07",X"00",X"09",X"0A",X"0A",X"0A",X"0E", - X"02",X"0C",X"00",X"0C",X"02",X"02",X"02",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"07",X"08",X"08",X"07",X"00",X"07",X"08", - X"00",X"0C",X"02",X"02",X"0C",X"00",X"0C",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"08",X"07",X"00",X"06",X"09",X"09",X"09",X"06", - X"02",X"0C",X"00",X"0C",X"02",X"02",X"02",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"70",X"80",X"80",X"70",X"00",X"70",X"80",X"80", - X"C0",X"20",X"20",X"C0",X"00",X"C0",X"20",X"20",X"00",X"00",X"00",X"00",X"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"00",X"70",X"80",X"80",X"70",X"00",X"F0", - X"C0",X"00",X"C0",X"20",X"20",X"C0",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"77",X"88",X"88",X"77",X"00",X"77",X"88",X"88", - X"CC",X"22",X"22",X"CC",X"00",X"CC",X"22",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"77",X"00",X"99",X"AA",X"AA",X"EE",X"00",X"FF", - X"CC",X"00",X"CC",X"22",X"22",X"44",X"00",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"08",X"08",X"07",X"00",X"07",X"08",X"08", - X"0C",X"02",X"02",X"0C",X"00",X"0C",X"02",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"07",X"00",X"08",X"09",X"05",X"03",X"00",X"0F", - X"0C",X"00",X"0C",X"02",X"02",X"0C",X"00",X"0E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"10",X"12",X"1E",X"00",X"00",X"0F",X"00",X"10",X"76",X"1E",X"1E", - X"00",X"00",X"0F",X"1E",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"1C",X"1C",X"10",X"10",X"DC",X"FE", - X"3E",X"1E",X"12",X"10",X"00",X"00",X"00",X"00",X"DE",X"1E",X"1E",X"76",X"10",X"00",X"0F",X"00", - X"1E",X"FE",X"FE",X"FE",X"FE",X"1E",X"0F",X"00",X"1C",X"FE",X"DC",X"10",X"10",X"1C",X"1C",X"00", - X"00",X"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"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"C0",X"20",X"20",X"00",X"00",X"00",X"00",X"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"00",X"70",X"80",X"80",X"70",X"00",X"70", - X"C0",X"00",X"C0",X"20",X"20",X"C0",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"77",X"88",X"88", - X"00",X"00",X"00",X"00",X"00",X"CC",X"22",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"77",X"00",X"77",X"88",X"88",X"77",X"00",X"77", - X"CC",X"00",X"CC",X"22",X"22",X"CC",X"00",X"CC",X"00",X"00",X"00",X"00",X"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"80",X"70",X"00",X"60",X"90",X"80",X"80", - X"20",X"20",X"C0",X"00",X"20",X"20",X"A0",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"88",X"77",X"00",X"88",X"DD",X"AA",X"88", - X"22",X"22",X"CC",X"00",X"CC",X"22",X"22",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"44",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"33",X"77",X"CC",X"88",X"88",X"77",X"33",X"00",X"88",X"CC",X"22",X"22",X"66",X"CC",X"88",X"00", - X"00",X"00",X"FF",X"FF",X"44",X"00",X"00",X"00",X"22",X"22",X"EE",X"EE",X"22",X"22",X"00",X"00", - X"66",X"FF",X"BB",X"99",X"99",X"CC",X"44",X"00",X"22",X"22",X"AA",X"AA",X"EE",X"EE",X"66",X"00", - X"88",X"DD",X"FF",X"BB",X"99",X"88",X"00",X"00",X"CC",X"EE",X"22",X"22",X"22",X"66",X"44",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"11", - X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"57",X"27",X"57",X"88",X"22",X"00",X"00",X"00", - X"4C",X"4C",X"88",X"44",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"10",X"00",X"44",X"11",X"00",X"00",X"02",X"00",X"A2",X"03",X"AB",X"05", - X"00",X"00",X"10",X"B8",X"44",X"22",X"1B",X"86",X"00",X"00",X"00",X"00",X"00",X"88",X"00",X"44", - X"00",X"11",X"22",X"10",X"10",X"00",X"00",X"00",X"BC",X"21",X"65",X"81",X"44",X"22",X"00",X"00", - X"BE",X"3C",X"B4",X"54",X"11",X"04",X"00",X"00",X"88",X"80",X"84",X"00",X"00",X"00",X"00",X"00", - X"04",X"00",X"22",X"01",X"44",X"38",X"20",X"44",X"11",X"88",X"74",X"00",X"8B",X"00",X"44",X"88", - X"22",X"10",X"22",X"89",X"01",X"22",X"88",X"00",X"20",X"80",X"00",X"08",X"08",X"11",X"C0",X"00", - X"00",X"DA",X"01",X"03",X"44",X"00",X"11",X"88",X"22",X"C0",X"00",X"22",X"44",X"10",X"02",X"02", - X"55",X"00",X"15",X"24",X"C0",X"22",X"00",X"44",X"30",X"20",X"E9",X"40",X"65",X"00",X"88",X"01", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"00", - X"00",X"00",X"11",X"00",X"00",X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"04",X"22",X"88",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"22",X"11",X"88",X"44",X"00",X"22", - X"11",X"04",X"00",X"20",X"11",X"00",X"A8",X"20",X"00",X"C0",X"81",X"22",X"00",X"00",X"02",X"00", - X"00",X"00",X"00",X"00",X"04",X"A2",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"40",X"88", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"88",X"11",X"22",X"22",X"00",X"00",X"00",X"00",X"11",X"02",X"00",X"C0",X"00",X"10",X"04",X"44", - X"00",X"00",X"60",X"00",X"88",X"01",X"00",X"44",X"00",X"00",X"00",X"44",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"80",X"80",X"00",X"11",X"00",X"22",X"00", - X"22",X"0C",X"00",X"00",X"60",X"20",X"00",X"22",X"00",X"00",X"00",X"11",X"00",X"00",X"44",X"06", - X"00",X"00",X"00",X"00",X"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"80",X"00",X"00",X"44",X"00",X"00",X"00",X"10",X"00",X"22",X"04",X"00",X"00",X"00",X"00", - X"00",X"22",X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"22",X"15",X"30",X"00",X"88",X"44",X"01", - X"88",X"00",X"11",X"00",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"82",X"00",X"00",X"44",X"00",X"00",X"00",X"00",X"80",X"40",X"00",X"00",X"00",X"00",X"00",X"00", - X"88",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"00", - X"00",X"44",X"00",X"11",X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"11", - X"00",X"00",X"00",X"00",X"40",X"00",X"00",X"00",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"11", - X"00",X"44",X"00",X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"00", - X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"88",X"C0",X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"11", - X"00",X"00",X"10",X"00",X"00",X"00",X"01",X"00",X"00",X"80",X"00",X"00",X"22",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"00",X"00", - X"00",X"11",X"00",X"00",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"44",X"04", - X"00",X"00",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"00", - X"00",X"00",X"00",X"10",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"10",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"80",X"11",X"00",X"00",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00", - X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"00",X"00",X"22",X"00", - X"00",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"18",X"00",X"00", - X"00",X"00",X"00",X"01",X"03",X"01",X"03",X"00",X"00",X"01",X"01",X"0F",X"0F",X"0B",X"03",X"77", - X"00",X"04",X"0C",X"0E",X"0C",X"7C",X"F6",X"F3",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00", - X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"B7",X"33",X"53",X"80",X"01",X"03",X"01",X"00", - X"CB",X"0F",X"0F",X"07",X"0E",X"0C",X"0C",X"00",X"0C",X"08",X"08",X"08",X"00",X"00",X"00",X"00", - X"0F",X"0C",X"0C",X"0F",X"0F",X"0C",X"0C",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"00",X"00",X"0F", - X"0C",X"0C",X"0C",X"0F",X"07",X"00",X"00",X"07",X"03",X"03",X"03",X"0F",X"0E",X"00",X"00",X"0F", - X"0C",X"0F",X"07",X"00",X"00",X"0C",X"0C",X"0C",X"03",X"0F",X"0E",X"00",X"00",X"03",X"03",X"03", - X"00",X"00",X"07",X"0F",X"0C",X"0C",X"0C",X"0C",X"00",X"00",X"0E",X"0F",X"03",X"03",X"03",X"03", - X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01", - X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"30",X"00",X"00",X"11",X"11",X"51",X"D1",X"D5",X"FF", - X"00",X"00",X"00",X"00",X"40",X"60",X"74",X"FE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80", - X"31",X"31",X"20",X"20",X"00",X"00",X"00",X"00",X"EF",X"2F",X"07",X"03",X"01",X"00",X"00",X"00", - X"FF",X"9F",X"0C",X"08",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"10",X"00",X"00",X"00",X"00",X"20",X"60",X"F3",X"FF", - X"00",X"00",X"44",X"44",X"CC",X"98",X"BA",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80", - X"10",X"30",X"20",X"00",X"00",X"00",X"00",X"00",X"FF",X"17",X"03",X"03",X"01",X"00",X"00",X"00", - X"7F",X"7F",X"1F",X"0C",X"00",X"00",X"00",X"00",X"C0",X"C8",X"C0",X"80",X"80",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"10",X"10",X"30",X"00",X"00",X"00",X"10",X"F0",X"F7",X"FF",X"77", - X"00",X"00",X"11",X"B3",X"22",X"44",X"DD",X"7F",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80", - X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"37",X"07",X"03",X"03",X"00",X"00",X"00",X"00", - X"7F",X"FF",X"3F",X"10",X"10",X"20",X"00",X"00",X"80",X"C0",X"80",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"10",X"30",X"20",X"00",X"00",X"00",X"00",X"F0",X"F7",X"FF",X"77",X"37", - X"00",X"00",X"00",X"C0",X"99",X"AA",X"CC",X"7F",X"00",X"00",X"00",X"88",X"00",X"00",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"27",X"17",X"07",X"00",X"00",X"00",X"00",X"00", - X"FF",X"FF",X"7F",X"32",X"30",X"60",X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"10",X"20",X"00",X"00",X"00",X"00",X"20",X"F0",X"F7",X"77",X"37",X"27", - X"00",X"00",X"00",X"E0",X"CC",X"99",X"EE",X"4C",X"00",X"00",X"00",X"00",X"CC",X"88",X"00",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1F",X"1F",X"03",X"00",X"00",X"10",X"00",X"00", - X"FE",X"FE",X"FE",X"74",X"E0",X"80",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"70",X"F2",X"77",X"37",X"3F",X"0F", - X"00",X"00",X"00",X"C0",X"E8",X"CC",X"99",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"CC",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"1F",X"13",X"11",X"30",X"60",X"00",X"00", - X"CC",X"FC",X"E8",X"C8",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"33",X"13",X"17",X"3F", - X"00",X"00",X"00",X"80",X"C0",X"E8",X"FC",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"3F",X"17",X"13",X"33",X"F0",X"00",X"00", - X"FF",X"88",X"FC",X"E8",X"C0",X"80",X"00",X"00",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"11",X"33",X"33",X"3F", - X"00",X"00",X"CC",X"22",X"11",X"88",X"88",X"8E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"01",X"01",X"03",X"02",X"00",X"00",X"00",X"00",X"3B",X"3B",X"19",X"28",X"20",X"00",X"00",X"00", - X"8B",X"8B",X"03",X"82",X"80",X"00",X"00",X"00",X"00",X"00",X"08",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"01",X"00",X"66",X"99",X"00",X"00",X"11",X"11",X"3F", - X"00",X"00",X"00",X"88",X"88",X"88",X"CC",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"03",X"07",X"05",X"00",X"00",X"00",X"00",X"00",X"3B",X"33",X"22",X"50",X"50",X"00",X"00",X"00", - X"8E",X"8B",X"03",X"07",X"05",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"1F",X"19", - X"00",X"00",X"00",X"00",X"33",X"CC",X"EE",X"CC",X"00",X"00",X"00",X"00",X"88",X"44",X"44",X"00", - X"05",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"3B",X"33",X"62",X"A0",X"20",X"00",X"00",X"00", - X"8C",X"8A",X"06",X"06",X"0E",X"0A",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"0E",X"1D",X"3B", - X"00",X"00",X"EE",X"11",X"11",X"EE",X"EE",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"73",X"A0",X"40",X"01",X"00",X"00",X"00", - X"CC",X"8A",X"06",X"0E",X"0C",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"03",X"01",X"03",X"00",X"00",X"00",X"00",X"00",X"0E",X"0D",X"33", - X"00",X"00",X"00",X"00",X"00",X"77",X"EE",X"EE",X"00",X"00",X"00",X"00",X"00",X"88",X"44",X"44", - X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"F7",X"40",X"81",X"03",X"00",X"01",X"00", - X"CC",X"04",X"04",X"0C",X"0C",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"00",X"00",X"00",X"01",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"0E",X"0F",X"09",X"33", - X"00",X"00",X"00",X"00",X"00",X"00",X"CC",X"FF",X"00",X"00",X"00",X"00",X"88",X"44",X"44",X"88", - X"10",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"B3",X"77",X"80",X"01",X"07",X"03",X"06",X"00", - X"EE",X"88",X"08",X"08",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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"0C",X"07",X"0F",X"00",X"B3", - X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"77",X"B3",X"00",X"0F",X"07",X"0C",X"00",X"00", - X"FF",X"EE",X"08",X"08",X"11",X"00",X"00",X"00",X"88",X"44",X"44",X"88",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"02",X"02",X"03",X"03",X"01",X"00",X"00",X"01",X"01",X"01",X"03",X"0F",X"3C", - X"00",X"00",X"00",X"00",X"00",X"09",X"0F",X"87",X"00",X"00",X"00",X"08",X"08",X"08",X"08",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1E",X"9E",X"CF",X"67",X"01",X"01",X"00",X"00", - X"0F",X"2E",X"6E",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"08",X"0D",X"0F",X"3C", - X"00",X"00",X"08",X"08",X"08",X"0C",X"0C",X"87",X"00",X"00",X"00",X"00",X"00",X"04",X"0C",X"0C", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"9E",X"9E",X"CF",X"DF",X"02",X"02",X"00",X"00", - X"0F",X"0F",X"6E",X"CC",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"00",X"00",X"00",X"00",X"00",X"04",X"04",X"0C",X"0C",X"0F",X"0F",X"9E", - X"00",X"00",X"02",X"02",X"04",X"0C",X"0C",X"86",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"0C", - X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"9E",X"AD",X"8F",X"37",X"19",X"00",X"00",X"00", - X"0F",X"0F",X"4E",X"CC",X"00",X"00",X"00",X"00",X"0C",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"00",X"00",X"11",X"00",X"00",X"02",X"04",X"0E",X"0E",X"0F",X"AD", - X"00",X"00",X"00",X"00",X"01",X"02",X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"11",X"11",X"11",X"00",X"01",X"00",X"00",X"00",X"1E",X"2D",X"8F",X"4F",X"77",X"00",X"00",X"00", - X"0C",X"87",X"0F",X"8F",X"88",X"00",X"00",X"00",X"00",X"04",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"00",X"00",X"00",X"00",X"01",X"03",X"03",X"07",X"CF",X"8F", - X"00",X"04",X"08",X"08",X"00",X"08",X"0F",X"86",X"00",X"00",X"00",X"00",X"00",X"0C",X"00",X"00", - X"11",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"9E",X"AD",X"0F",X"77",X"11",X"00",X"00",X"00", - X"86",X"0E",X"0F",X"8F",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",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"00",X"00",X"00",X"00",X"01",X"03",X"47",X"CF",X"8F", - X"00",X"00",X"0E",X"0C",X"08",X"08",X"0E",X"87",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C", - X"00",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"BC",X"0F",X"CF",X"FF",X"00",X"00",X"00",X"00", - X"86",X"84",X"0E",X"0F",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",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"01",X"67",X"CF",X"8F", - X"00",X"00",X"00",X"07",X"0E",X"0C",X"0C",X"86",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00", - X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"8F",X"CF",X"67",X"01",X"00",X"00",X"00", - X"87",X"86",X"0C",X"0C",X"0E",X"07",X"00",X"00",X"0C",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"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"10",X"10",X"10",X"10",X"10",X"1C", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"07",X"70",X"F0",X"00",X"00",X"00",X"00",X"00",X"1E",X"F0",X"D0",X"10",X"32",X"66",X"00",X"00", - X"0F",X"F0",X"70",X"00",X"88",X"CC",X"00",X"00",X"0C",X"C0",X"E0",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"1E", - X"00",X"00",X"40",X"40",X"80",X"80",X"80",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"F0",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"D0",X"10",X"64",X"DD",X"11",X"00",X"00", - X"0F",X"C3",X"70",X"10",X"00",X"88",X"00",X"00",X"00",X"0C",X"84",X"C0",X"40",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"02",X"03",X"F0",X"00",X"00",X"00",X"00",X"00",X"08",X"0C",X"0E", - X"00",X"00",X"00",X"10",X"20",X"40",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"30",X"00",X"00",X"00",X"11",X"00",X"00",X"00",X"D2",X"F0",X"30",X"A8",X"EA",X"22",X"22",X"00", - X"00",X"0E",X"87",X"E1",X"70",X"30",X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"03",X"E1",X"70",X"30",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"86", - X"00",X"00",X"00",X"00",X"10",X"20",X"40",X"80",X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"11",X"33",X"00",X"00",X"00",X"00",X"D2",X"21",X"50",X"90",X"CC",X"88",X"00",X"00", - X"00",X"0C",X"0E",X"86",X"C3",X"E1",X"60",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"61",X"30",X"30",X"10",X"00",X"00",X"00",X"00",X"08",X"0C",X"86",X"86",X"C2", - X"00",X"00",X"00",X"00",X"00",X"10",X"60",X"C0",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"00", - X"00",X"77",X"10",X"11",X"11",X"00",X"00",X"00",X"70",X"E1",X"30",X"B8",X"10",X"10",X"00",X"00", - X"00",X"08",X"0C",X"0E",X"84",X"86",X"80",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"22",X"00",X"00",X"86",X"C2",X"C3",X"43",X"61",X"21", - X"00",X"00",X"00",X"00",X"00",X"08",X"00",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"00", - X"33",X"00",X"11",X"11",X"00",X"00",X"00",X"00",X"70",X"90",X"B8",X"30",X"30",X"10",X"10",X"10", - X"80",X"0C",X"0C",X"0C",X"84",X"84",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"33",X"00",X"40",X"61",X"61",X"61",X"61",X"61",X"21", - X"00",X"00",X"00",X"00",X"08",X"08",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"10",X"33",X"22",X"00",X"00",X"00",X"00",X"00",X"F0",X"21",X"61",X"61",X"61",X"61",X"61",X"40", - X"F0",X"00",X"08",X"08",X"08",X"00",X"00",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"22",X"66",X"22",X"00",X"00",X"00",X"00",X"00",X"77",X"44",X"77", - X"00",X"00",X"00",X"00",X"00",X"CC",X"11",X"99",X"00",X"00",X"00",X"00",X"00",X"CC",X"22",X"22", - X"22",X"22",X"22",X"77",X"00",X"00",X"00",X"00",X"00",X"00",X"44",X"33",X"00",X"00",X"00",X"00", - X"55",X"55",X"55",X"88",X"00",X"00",X"00",X"00",X"22",X"22",X"22",X"CC",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"03",X"21",X"10",X"00",X"00",X"00",X"00",X"00",X"11",X"1D",X"0F",X"87",X"E1", - X"44",X"CC",X"CC",X"CC",X"88",X"3B",X"7F",X"7F",X"00",X"00",X"00",X"33",X"FF",X"EE",X"EE",X"88", - X"11",X"33",X"77",X"44",X"00",X"00",X"00",X"00",X"F8",X"FD",X"BB",X"33",X"77",X"77",X"66",X"44", - X"4E",X"8E",X"E8",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"A0",X"40",X"A0",X"10", - X"00",X"00",X"00",X"03",X"21",X"76",X"77",X"11",X"00",X"00",X"00",X"11",X"1F",X"0F",X"C3",X"E9", - X"44",X"CC",X"CC",X"CC",X"CC",X"0C",X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"CC",X"FF", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"77",X"77",X"FF",X"EE",X"EE",X"CC",X"88", - X"F7",X"B7",X"60",X"10",X"00",X"00",X"00",X"00",X"FF",X"EE",X"00",X"00",X"A0",X"40",X"A0",X"10", - X"00",X"00",X"11",X"03",X"21",X"10",X"00",X"00",X"00",X"00",X"88",X"DD",X"1F",X"87",X"F0",X"70", - X"22",X"77",X"FF",X"EE",X"CC",X"88",X"0C",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"11",X"11",X"33",X"33",X"22",X"00",X"00",X"FD",X"DD",X"CC",X"88",X"00",X"00",X"00",X"00", - X"EE",X"FF",X"FF",X"77",X"33",X"00",X"00",X"00",X"00",X"00",X"88",X"88",X"A8",X"40",X"A0",X"10", - X"00",X"00",X"00",X"03",X"21",X"10",X"00",X"00",X"00",X"00",X"00",X"11",X"1D",X"0F",X"87",X"E1", - X"44",X"CC",X"CC",X"CC",X"88",X"3B",X"7F",X"7F",X"00",X"00",X"00",X"33",X"FF",X"EE",X"EE",X"88", - X"11",X"33",X"77",X"44",X"00",X"00",X"00",X"00",X"F8",X"FD",X"BB",X"33",X"77",X"77",X"66",X"44", - X"4E",X"8E",X"E8",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"A0",X"40",X"A0",X"10", - X"00",X"00",X"00",X"03",X"21",X"76",X"77",X"11",X"00",X"00",X"00",X"11",X"1F",X"0F",X"C3",X"E9", - X"44",X"CC",X"CC",X"CC",X"CC",X"0C",X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"CC",X"FF", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"77",X"77",X"FF",X"EE",X"EE",X"CC",X"88", - X"F7",X"B7",X"60",X"10",X"00",X"00",X"00",X"00",X"FF",X"EE",X"00",X"00",X"A0",X"40",X"A0",X"10", - X"00",X"00",X"11",X"03",X"21",X"10",X"00",X"00",X"00",X"00",X"88",X"DD",X"1F",X"87",X"F0",X"70", - X"22",X"77",X"FF",X"EE",X"CC",X"88",X"0C",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"11",X"11",X"33",X"33",X"22",X"00",X"00",X"FD",X"DD",X"CC",X"88",X"00",X"00",X"00",X"00", - X"EE",X"FF",X"FF",X"77",X"33",X"00",X"00",X"00",X"00",X"00",X"88",X"88",X"A8",X"40",X"A0",X"10", - X"00",X"00",X"00",X"03",X"21",X"10",X"00",X"00",X"00",X"00",X"00",X"11",X"1D",X"0F",X"87",X"E1", - X"44",X"CC",X"CC",X"CC",X"88",X"3B",X"7F",X"7F",X"00",X"00",X"00",X"33",X"FF",X"EE",X"EE",X"88", - X"11",X"33",X"77",X"44",X"00",X"00",X"00",X"00",X"F8",X"FD",X"BB",X"33",X"77",X"77",X"66",X"44", - X"4E",X"8E",X"E8",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"A0",X"40",X"A0",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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"60",X"60",X"71",X"71",X"71",X"60",X"12",X"12",X"74",X"FC",X"FD",X"B9",X"11",X"71", - X"08",X"08",X"C4",X"E6",X"F7",X"B3",X"11",X"C0",X"00",X"00",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0", - X"60",X"14",X"10",X"10",X"10",X"10",X"00",X"00",X"F0",X"F1",X"F3",X"E7",X"F3",X"E1",X"E1",X"61", - X"E0",X"F0",X"F8",X"FC",X"F8",X"F0",X"E0",X"C0",X"C0",X"04",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"30",X"30",X"30",X"30",X"71",X"60",X"24",X"00",X"00",X"32",X"FE",X"FE",X"30",X"11",X"F1", - X"4A",X"4A",X"C0",X"E2",X"FB",X"FB",X"33",X"91",X"00",X"00",X"00",X"60",X"60",X"60",X"E8",X"C0", - X"10",X"30",X"30",X"30",X"30",X"30",X"10",X"00",X"F0",X"F3",X"FF",X"DF",X"F7",X"D2",X"B4",X"34", - X"C0",X"E0",X"E0",X"E8",X"E0",X"E0",X"C0",X"80",X"C0",X"C0",X"04",X"00",X"00",X"00",X"00",X"00", - X"00",X"10",X"10",X"30",X"30",X"70",X"04",X"30",X"C0",X"C0",X"F7",X"F7",X"FF",X"10",X"E0",X"F1", - X"02",X"12",X"E9",X"F0",X"F5",X"FD",X"D9",X"91",X"00",X"08",X"00",X"00",X"00",X"A8",X"F8",X"E8", - X"30",X"70",X"F1",X"70",X"70",X"70",X"01",X"00",X"F0",X"FE",X"FF",X"BF",X"7D",X"78",X"F0",X"E0", - X"D1",X"C0",X"D0",X"E0",X"C1",X"C0",X"80",X"00",X"E0",X"C0",X"80",X"80",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"10",X"30",X"34",X"00",X"30",X"30",X"70",X"E0",X"F3",X"F7",X"44",X"00",X"E0", - X"00",X"00",X"00",X"CD",X"F8",X"F0",X"F4",X"F9",X"00",X"00",X"48",X"84",X"08",X"00",X"88",X"88", - X"70",X"F1",X"F1",X"F1",X"F1",X"D2",X"34",X"30",X"F1",X"FA",X"FC",X"7E",X"FE",X"F0",X"F0",X"E0", - X"11",X"91",X"B3",X"90",X"B0",X"B0",X"02",X"00",X"B8",X"F8",X"E0",X"C0",X"80",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"01",X"00",X"30",X"70",X"00",X"10",X"30",X"F0",X"51",X"80",X"F0",X"F0", - X"40",X"E0",X"C0",X"EE",X"FF",X"30",X"73",X"F6",X"00",X"00",X"00",X"02",X"A4",X"C3",X"C0",X"C4", - X"71",X"F0",X"F1",X"C3",X"34",X"30",X"30",X"00",X"FC",X"FE",X"7E",X"FE",X"F4",X"F0",X"E0",X"40", - X"B9",X"D1",X"D1",X"D1",X"B0",X"B0",X"24",X"00",X"CC",X"CC",X"FC",X"F0",X"E0",X"80",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"30",X"70",X"F0",X"00",X"00",X"34",X"30",X"00",X"E0",X"F0",X"F8", - X"00",X"70",X"F0",X"C4",X"FF",X"77",X"30",X"B3",X"00",X"80",X"80",X"00",X"00",X"8B",X"F0",X"C3", - X"F1",X"D3",X"3D",X"70",X"70",X"30",X"00",X"00",X"FE",X"7E",X"FC",X"FC",X"F0",X"E0",X"00",X"00", - X"FC",X"B1",X"91",X"91",X"32",X"F0",X"68",X"00",X"C0",X"CC",X"88",X"88",X"E0",X"E0",X"00",X"00", - X"00",X"00",X"00",X"00",X"30",X"70",X"F0",X"F1",X"00",X"00",X"12",X"10",X"E0",X"F0",X"F8",X"FC", - X"00",X"00",X"F0",X"F0",X"77",X"33",X"91",X"B0",X"00",X"00",X"C0",X"C0",X"00",X"88",X"CC",X"C3", - X"1F",X"F1",X"F0",X"70",X"30",X"00",X"00",X"00",X"7E",X"FC",X"F8",X"F0",X"E0",X"10",X"12",X"00", - X"FF",X"B0",X"91",X"33",X"77",X"F0",X"F0",X"00",X"F0",X"C3",X"CC",X"88",X"00",X"C0",X"C0",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",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; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_lpf.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_lpf.vhd new file mode 100644 index 00000000..a7223d27 --- /dev/null +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_lpf.vhd @@ -0,0 +1,120 @@ +--------------------------------------------------------------------------------- +-- Implementation of audio LPF filters +-- derived from Burnin' Rubber / Bump'n'Jump sources +--------------------------------------------------------------------------------- +-- +-- ----------o------------ +-- u4^ | | | +-- | --- C4 | | R5 | +-- | --- | | | +-- | | C3 | | +-- --| R1 |----o----||---o------|\ | +-- ^ | ------> u3 | \__o--- +-- | | | / ^ +-- |uin | | R2 --|/ | +-- | | | | | uout +-- | | | | +-- ------------o--------------o---------- +-- +-- i1 = (sin+u3)/R1 +-- i2 = -u3/R2 +-- i3 = (u4-u3)/R5 +-- i4 = i2-i1-i3 +-- +-- u3(t+dt) = u3(t) + i3(t)*dt/C3; +-- u4(t+dt) = u4(t) + i4(t)*dt/C4; +-- uout = u4-u3 +-- +-- (i3(t)*dt/C3)*scale = du3*scale = ((u4-u3)/R5*dt/C3)*scale +-- (i4(t)*dt/C4)*scale = du4*scale = (-u3/R2 -(uin+u3)/R1 -(u4-u3)/R5)*dt/C4*scale + +library ieee; +use ieee.std_logic_1164.all, + ieee.std_logic_1164.all, + ieee.std_logic_unsigned.all, + ieee.numeric_std.all; + +entity lpf is +port( + clock : in std_logic; + reset : in std_logic; + + div : in integer; + audio_in : in std_logic_vector(9 downto 0); + + gain_in : in integer; + r1 : in integer; + r2 : in integer; + dt_over_c3 : in integer; + dt_over_c4 : in integer; + r5 : in integer; + + audio_out : out std_logic_vector(15 downto 0) +); +end lpf; + +architecture rtl of lpf is +signal clock_div : std_logic_vector(9 downto 0) := (others =>'0'); +signal uin : integer; +signal u3 : integer; +signal u4 : integer; +signal du3 : integer; +signal du4 : integer; +signal uout : integer; +signal uout_ltd : integer; + +-- integer scale for fixed point +constant scale : integer := 8192; + +begin + +uin <= to_integer(unsigned(audio_in)-256)*gain_in; + +process (clock, reset) +begin + if reset = '1' then + clock_div <= (others => '0'); + else + if rising_edge(clock) then + -- divide main clock for downsampling + if clock_div = div-1 then + clock_div <= "0000000000"; + else + clock_div <= clock_div + '1'; + end if; + + if clock_div = "0000000000" then + du3 <= scale*dt_over_c3/r5*(u4-u3); + du4 <= (scale*dt_over_c4/r2 + scale*dt_over_c4/r1 - scale*dt_over_c4/r5)*u3 + + scale*dt_over_c4/r5*u4 + + scale*dt_over_c4/r1*uin; + end if; + + if clock_div = "0000000001" then + u3 <= u3 + du3/scale; + u4 <= u4 - du4/scale; + end if; + + if clock_div = "0000000010" then + uout <= u4 - u3; + end if; + + -- clamp + if clock_div = "0000000011" then + if uout > 255 then + uout_ltd <= 255; + elsif uout < -255 then + uout_ltd <= -255; + else + uout_ltd <= uout; + end if; + end if; + + if clock_div = "0000000100" then + audio_out <= std_logic_vector(to_unsigned(uout_ltd+256,9)) & "0000000"; + end if; + end if; + end if; +end process; + +end architecture; diff --git a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_machine.vhd b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_machine.vhd index 3243e6fb..eb802635 100644 --- a/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_machine.vhd +++ b/Arcade_MiST/Galaga Hardware/Galaga_MiST/rtl/sound_machine.vhd @@ -37,24 +37,24 @@ architecture struct of sound_machine is signal snd_ram_1_we : std_logic; signal snd_ram_0_do : std_logic_vector(3 downto 0); signal snd_ram_1_do : std_logic_vector(3 downto 0); - + signal snd_seq_addr : std_logic_vector(7 downto 0); signal snd_seq_do : std_logic_vector(7 downto 0); signal snd_samples_addr : std_logic_vector(7 downto 0); signal snd_samples_do : std_logic_vector(7 downto 0); - + signal sum : std_logic_vector(4 downto 0) := (others => '0'); signal sum_r : std_logic_vector(4 downto 0) := (others => '0'); signal sum_3_rr : std_logic := '0'; - + signal samples_ch0 : std_logic_vector(3 downto 0); signal samples_ch1 : std_logic_vector(3 downto 0); signal samples_ch2 : std_logic_vector(3 downto 0); signal volume_ch0 : std_logic_vector(3 downto 0); signal volume_ch1 : std_logic_vector(3 downto 0); signal volume_ch2 : std_logic_vector(3 downto 0); - + begin clock_18n <= not clock_18; @@ -69,38 +69,39 @@ snd_ram_1_we <= ram_1_we; sum <= ('0' & snd_ram_0_do) + ('0' & snd_ram_1_do) + ("0000" & sum_r(4)); -process (clock_18, ena) +process (clock_18) begin - if rising_edge(clock_18) and ena = '1' then - if snd_seq_do(3) = '0' then - sum_r <= (others => '0'); - sum_3_rr <= '0'; - elsif snd_seq_do(0) = '0' then - sum_r <= sum; - sum_3_rr <= sum_r(3); - end if ; + if rising_edge(clock_18) then + if ena = '1' then + if snd_seq_do(3) = '0' then + sum_r <= (others => '0'); + sum_3_rr <= '0'; + elsif snd_seq_do(0) = '0' then + sum_r <= sum; + sum_3_rr <= sum_r(3); + end if; - snd_samples_addr <= snd_ram_0_do(2 downto 0) & sum_r(3 downto 0) & sum_3_rr; - - if snd_seq_do(2) = '0' then - if hcnt(5 downto 2) = X"5" then - samples_ch0 <= snd_samples_do(3 downto 0); - volume_ch0 <= snd_ram_1_do; - end if; - if hcnt(5 downto 2) = X"A" then - samples_ch1 <= snd_samples_do(3 downto 0); - volume_ch1 <= snd_ram_1_do; - end if; - if hcnt(5 downto 2) = X"F" then - samples_ch2 <= snd_samples_do(3 downto 0); - volume_ch2 <= snd_ram_1_do; + snd_samples_addr <= snd_ram_0_do(2 downto 0) & sum_r(3 downto 0) & sum_3_rr; + + if snd_seq_do(2) = '0' then + if hcnt(5 downto 2) = X"5" then + samples_ch0 <= snd_samples_do(3 downto 0); + volume_ch0 <= snd_ram_1_do; + end if; + if hcnt(5 downto 2) = X"A" then + samples_ch1 <= snd_samples_do(3 downto 0); + volume_ch1 <= snd_ram_1_do; + end if; + if hcnt(5 downto 2) = X"F" then + samples_ch2 <= snd_samples_do(3 downto 0); + volume_ch2 <= snd_ram_1_do; + end if; end if; + + audio <= ("00" & samples_ch0) * volume_ch0 + + ("00" & samples_ch1) * volume_ch1 + + ("00" & samples_ch2) * volume_ch2; end if; - - audio <= ("00" & samples_ch0) * volume_ch0 + - ("00" & samples_ch1) * volume_ch1 + - ("00" & samples_ch2) * volume_ch2; - end if; end process;