From f3ad3b6830e7c1dcb9d645abb93ef65c375c2d73 Mon Sep 17 00:00:00 2001 From: Gehstock Date: Mon, 30 Apr 2018 16:30:16 +0200 Subject: [PATCH] ORAO Cleanup --- ORAO_MiST/Orao_MiST.qpf | 31 + ORAO_MiST/Orao_MiST.qsf | 227 +++++ ORAO_MiST/clean.bat | 37 + ORAO_MiST/rtl/OraoGraphDisplay8K.vhd | 121 +++ ORAO_MiST/rtl/ProgSRam.vhd | 29 + ORAO_MiST/rtl/T65/T65.vhd | 564 ++++++++++++ ORAO_MiST/rtl/T65/T65_ALU.vhd | 260 ++++++ ORAO_MiST/rtl/T65/T65_MCode.vhd | 1052 +++++++++++++++++++++++ ORAO_MiST/rtl/T65/T65_Pack.vhd | 117 +++ ORAO_MiST/rtl/bram_1port.vhd | 45 + ORAO_MiST/rtl/bram_2port.vhd | 57 ++ ORAO_MiST/rtl/bufferedUART.vhd | 238 +++++ ORAO_MiST/rtl/build_id.tcl | 35 + ORAO_MiST/rtl/build_id.v | 2 + ORAO_MiST/rtl/dac.vhd | 71 ++ ORAO_MiST/rtl/hq2x.sv | 454 ++++++++++ ORAO_MiST/rtl/keyboard.v | 79 ++ ORAO_MiST/rtl/mist_io.v | 491 +++++++++++ ORAO_MiST/rtl/orao.vhd | 263 ++++++ ORAO_MiST/rtl/orao_keyboard_buttons.vhd | 402 +++++++++ ORAO_MiST/rtl/orao_mist.sv | 108 +++ ORAO_MiST/rtl/osd.v | 179 ++++ ORAO_MiST/rtl/pll.qip | 4 + ORAO_MiST/rtl/pll.v | 357 ++++++++ ORAO_MiST/rtl/ps2_intf.vhd | 158 ++++ ORAO_MiST/rtl/rom/BAS102.ROM | Bin 0 -> 8192 bytes ORAO_MiST/rtl/rom/BAS103.ROM | Bin 0 -> 8192 bytes ORAO_MiST/rtl/rom/CRT102.ROM | Bin 0 -> 8192 bytes ORAO_MiST/rtl/rom/CRT103.ROM | Bin 0 -> 8192 bytes ORAO_MiST/rtl/rom/rom_bas102.vhd | 1051 ++++++++++++++++++++++ ORAO_MiST/rtl/rom/rom_bas103.vhd | 1051 ++++++++++++++++++++++ ORAO_MiST/rtl/rom/rom_crt102.vhd | 1051 ++++++++++++++++++++++ ORAO_MiST/rtl/rom/rom_crt103.vhd | 1051 ++++++++++++++++++++++ ORAO_MiST/rtl/scandoubler.v | 194 +++++ ORAO_MiST/rtl/video_mixer.sv | 242 ++++++ ORAO_MiST/snapshot/Orao_MiST.rbf | Bin 0 -> 253813 bytes 36 files changed, 10021 insertions(+) create mode 100644 ORAO_MiST/Orao_MiST.qpf create mode 100644 ORAO_MiST/Orao_MiST.qsf create mode 100644 ORAO_MiST/clean.bat create mode 100644 ORAO_MiST/rtl/OraoGraphDisplay8K.vhd create mode 100644 ORAO_MiST/rtl/ProgSRam.vhd create mode 100644 ORAO_MiST/rtl/T65/T65.vhd create mode 100644 ORAO_MiST/rtl/T65/T65_ALU.vhd create mode 100644 ORAO_MiST/rtl/T65/T65_MCode.vhd create mode 100644 ORAO_MiST/rtl/T65/T65_Pack.vhd create mode 100644 ORAO_MiST/rtl/bram_1port.vhd create mode 100644 ORAO_MiST/rtl/bram_2port.vhd create mode 100644 ORAO_MiST/rtl/bufferedUART.vhd create mode 100644 ORAO_MiST/rtl/build_id.tcl create mode 100644 ORAO_MiST/rtl/build_id.v create mode 100644 ORAO_MiST/rtl/dac.vhd create mode 100644 ORAO_MiST/rtl/hq2x.sv create mode 100644 ORAO_MiST/rtl/keyboard.v create mode 100644 ORAO_MiST/rtl/mist_io.v create mode 100644 ORAO_MiST/rtl/orao.vhd create mode 100644 ORAO_MiST/rtl/orao_keyboard_buttons.vhd create mode 100644 ORAO_MiST/rtl/orao_mist.sv create mode 100644 ORAO_MiST/rtl/osd.v create mode 100644 ORAO_MiST/rtl/pll.qip create mode 100644 ORAO_MiST/rtl/pll.v create mode 100644 ORAO_MiST/rtl/ps2_intf.vhd create mode 100644 ORAO_MiST/rtl/rom/BAS102.ROM create mode 100644 ORAO_MiST/rtl/rom/BAS103.ROM create mode 100644 ORAO_MiST/rtl/rom/CRT102.ROM create mode 100644 ORAO_MiST/rtl/rom/CRT103.ROM create mode 100644 ORAO_MiST/rtl/rom/rom_bas102.vhd create mode 100644 ORAO_MiST/rtl/rom/rom_bas103.vhd create mode 100644 ORAO_MiST/rtl/rom/rom_crt102.vhd create mode 100644 ORAO_MiST/rtl/rom/rom_crt103.vhd create mode 100644 ORAO_MiST/rtl/scandoubler.v create mode 100644 ORAO_MiST/rtl/video_mixer.sv create mode 100644 ORAO_MiST/snapshot/Orao_MiST.rbf diff --git a/ORAO_MiST/Orao_MiST.qpf b/ORAO_MiST/Orao_MiST.qpf new file mode 100644 index 00000000..8da7b752 --- /dev/null +++ b/ORAO_MiST/Orao_MiST.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2016 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel MegaCore Function License Agreement, or other +# applicable license agreement, including, without limitation, +# that your use is for the sole purpose of programming logic +# devices manufactured by Intel and sold by Intel or its +# authorized distributors. Please refer to the applicable +# agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 16.1.0 Build 196 10/24/2016 SJ Lite Edition +# Date created = 08:04:28 December 31, 2017 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "16.1" +DATE = "08:04:28 December 31, 2017" + +# Revisions + +PROJECT_REVISION = "Orao_MiST" diff --git a/ORAO_MiST/Orao_MiST.qsf b/ORAO_MiST/Orao_MiST.qsf new file mode 100644 index 00000000..96fe388b --- /dev/null +++ b/ORAO_MiST/Orao_MiST.qsf @@ -0,0 +1,227 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2013 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II 64-Bit +# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition +# Date created = 06:03:35 February 11, 2018 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# cobra_MiST_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.1.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "17:45:13 JUNE 17,2016" +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files + +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" + +# Pin & Location Assignments +# ========================== +set_location_assignment PIN_7 -to LED +set_location_assignment PIN_54 -to CLOCK_27 +set_location_assignment PIN_144 -to VGA_R[5] +set_location_assignment PIN_143 -to VGA_R[4] +set_location_assignment PIN_142 -to VGA_R[3] +set_location_assignment PIN_141 -to VGA_R[2] +set_location_assignment PIN_137 -to VGA_R[1] +set_location_assignment PIN_135 -to VGA_R[0] +set_location_assignment PIN_133 -to VGA_B[5] +set_location_assignment PIN_132 -to VGA_B[4] +set_location_assignment PIN_125 -to VGA_B[3] +set_location_assignment PIN_121 -to VGA_B[2] +set_location_assignment PIN_120 -to VGA_B[1] +set_location_assignment PIN_115 -to VGA_B[0] +set_location_assignment PIN_114 -to VGA_G[5] +set_location_assignment PIN_113 -to VGA_G[4] +set_location_assignment PIN_112 -to VGA_G[3] +set_location_assignment PIN_111 -to VGA_G[2] +set_location_assignment PIN_110 -to VGA_G[1] +set_location_assignment PIN_106 -to VGA_G[0] +set_location_assignment PIN_136 -to VGA_VS +set_location_assignment PIN_119 -to VGA_HS +set_location_assignment PIN_65 -to AUDIO_L +set_location_assignment PIN_80 -to AUDIO_R +set_location_assignment PIN_105 -to SPI_DO +set_location_assignment PIN_88 -to SPI_DI +set_location_assignment PIN_126 -to SPI_SCK +set_location_assignment PIN_127 -to SPI_SS2 +set_location_assignment PIN_91 -to SPI_SS3 +set_location_assignment PIN_13 -to CONF_DATA0 +set_location_assignment PIN_46 -to UART_TX +set_location_assignment PIN_31 -to UART_RX +set_location_assignment PIN_49 -to SDRAM_A[0] +set_location_assignment PIN_44 -to SDRAM_A[1] +set_location_assignment PIN_42 -to SDRAM_A[2] +set_location_assignment PIN_39 -to SDRAM_A[3] +set_location_assignment PIN_4 -to SDRAM_A[4] +set_location_assignment PIN_6 -to SDRAM_A[5] +set_location_assignment PIN_8 -to SDRAM_A[6] +set_location_assignment PIN_10 -to SDRAM_A[7] +set_location_assignment PIN_11 -to SDRAM_A[8] +set_location_assignment PIN_28 -to SDRAM_A[9] +set_location_assignment PIN_50 -to SDRAM_A[10] +set_location_assignment PIN_30 -to SDRAM_A[11] +set_location_assignment PIN_32 -to SDRAM_A[12] +set_location_assignment PIN_83 -to SDRAM_DQ[0] +set_location_assignment PIN_79 -to SDRAM_DQ[1] +set_location_assignment PIN_77 -to SDRAM_DQ[2] +set_location_assignment PIN_76 -to SDRAM_DQ[3] +set_location_assignment PIN_72 -to SDRAM_DQ[4] +set_location_assignment PIN_71 -to SDRAM_DQ[5] +set_location_assignment PIN_69 -to SDRAM_DQ[6] +set_location_assignment PIN_68 -to SDRAM_DQ[7] +set_location_assignment PIN_86 -to SDRAM_DQ[8] +set_location_assignment PIN_87 -to SDRAM_DQ[9] +set_location_assignment PIN_98 -to SDRAM_DQ[10] +set_location_assignment PIN_99 -to SDRAM_DQ[11] +set_location_assignment PIN_100 -to SDRAM_DQ[12] +set_location_assignment PIN_101 -to SDRAM_DQ[13] +set_location_assignment PIN_103 -to SDRAM_DQ[14] +set_location_assignment PIN_104 -to SDRAM_DQ[15] +set_location_assignment PIN_58 -to SDRAM_BA[0] +set_location_assignment PIN_51 -to SDRAM_BA[1] +set_location_assignment PIN_85 -to SDRAM_DQMH +set_location_assignment PIN_67 -to SDRAM_DQML +set_location_assignment PIN_60 -to SDRAM_nRAS +set_location_assignment PIN_64 -to SDRAM_nCAS +set_location_assignment PIN_66 -to SDRAM_nWE +set_location_assignment PIN_59 -to SDRAM_nCS +set_location_assignment PIN_33 -to SDRAM_CKE +set_location_assignment PIN_43 -to SDRAM_CLK +set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component" + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone III" +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 +set_global_assignment -name TOP_LEVEL_ENTITY orao_mist + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP3C25E144C8 +set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF +set_global_assignment -name ENABLE_NCE_PIN OFF +set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF +set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" + +# EDA Netlist Writer Assignments +# ============================== +set_global_assignment -name EDA_SIMULATION_TOOL "" + +# Assembler Assignments +# ===================== +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name GENERATE_RBF_FILE ON + +# Power Estimation Assignments +# ============================ +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" + +# Advanced I/O Timing Assignments +# =============================== +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall + +# start EDA_TOOL_SETTINGS(eda_simulation) +# --------------------------------------- + + # EDA Netlist Writer Assignments + # ============================== +set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation +set_global_assignment -name EDA_OUTPUT_DATA_FORMAT NONE -section_id eda_simulation + +# end EDA_TOOL_SETTINGS(eda_simulation) +# ------------------------------------- + +# -------------------------- +# start ENTITY(cobra_mist) + + # start DESIGN_PARTITION(Top) + # --------------------------- + + # Incremental Compilation Assignments + # =================================== + + # end DESIGN_PARTITION(Top) + # ------------------------- + +# end ENTITY(cobra_mist) +# ------------------------ +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name VERILOG_INPUT_VERSION SYSTEMVERILOG_2005 +set_global_assignment -name VERILOG_SHOW_LMF_MAPPING_MESSAGES OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT EXTRA +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE AREA +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON +set_global_assignment -name ENABLE_SIGNALTAP OFF +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv +set_global_assignment -name VERILOG_FILE rtl/scandoubler.v +set_global_assignment -name VHDL_FILE rtl/ps2_intf.vhd +set_global_assignment -name VHDL_FILE rtl/ProgSRam.vhd +set_global_assignment -name QIP_FILE rtl/pll.qip +set_global_assignment -name VERILOG_FILE rtl/osd.v +set_global_assignment -name VHDL_FILE rtl/OraoGraphDisplay8K.vhd +set_global_assignment -name SYSTEMVERILOG_FILE rtl/orao_mist.sv +set_global_assignment -name VHDL_FILE rtl/orao_keyboard_buttons.vhd +set_global_assignment -name VHDL_FILE rtl/orao.vhd +set_global_assignment -name VERILOG_FILE rtl/mist_io.v +set_global_assignment -name VERILOG_FILE rtl/keyboard.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv +set_global_assignment -name VHDL_FILE rtl/dac.vhd +set_global_assignment -name VHDL_FILE rtl/bufferedUART.vhd +set_global_assignment -name VHDL_FILE rtl/bram_2port.vhd +set_global_assignment -name VHDL_FILE rtl/bram_1port.vhd +set_global_assignment -name VHDL_FILE rtl/rom/rom_crt103.vhd +set_global_assignment -name VHDL_FILE rtl/rom/rom_bas103.vhd +set_global_assignment -name VHDL_FILE rtl/T65/T65_Pack.vhd +set_global_assignment -name VHDL_FILE rtl/T65/T65_MCode.vhd +set_global_assignment -name VHDL_FILE rtl/T65/T65_ALU.vhd +set_global_assignment -name VHDL_FILE rtl/T65/T65.vhd +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/ORAO_MiST/clean.bat b/ORAO_MiST/clean.bat new file mode 100644 index 00000000..b3b7c3b5 --- /dev/null +++ b/ORAO_MiST/clean.bat @@ -0,0 +1,37 @@ +@echo off +del /s *.bak +del /s *.orig +del /s *.rej +del /s *~ +rmdir /s /q db +rmdir /s /q incremental_db +rmdir /s /q output_files +rmdir /s /q simulation +rmdir /s /q greybox_tmp +rmdir /s /q hc_output +rmdir /s /q .qsys_edit +rmdir /s /q hps_isw_handoff +rmdir /s /q sys\.qsys_edit +rmdir /s /q sys\vip +cd sys +for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" +cd .. +for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" +del build_id.v +del c5_pin_model_dump.txt +del PLLJ_PLLSPE_INFO.txt +del /s *.qws +del /s *.ppf +del /s *.ddb +del /s *.csv +del /s *.cmp +del /s *.sip +del /s *.spd +del /s *.bsf +del /s *.f +del /s *.sopcinfo +del /s *.xml +del /s new_rtl_netlist +del /s old_rtl_netlist + +pause diff --git a/ORAO_MiST/rtl/OraoGraphDisplay8K.vhd b/ORAO_MiST/rtl/OraoGraphDisplay8K.vhd new file mode 100644 index 00000000..bdae883e --- /dev/null +++ b/ORAO_MiST/rtl/OraoGraphDisplay8K.vhd @@ -0,0 +1,121 @@ +-- 8K 256x256 graphics by Emard 2015 +-- License=GPL + +-- Modified Grant Searle's text display to show bitmap graphics +-- Acknowledgement to his great work! +-- main web site http://searle.hostei.com/grant/ +-- UK101 page at http://searle.hostei.com/grant/uk101FPGA/index.html + +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity OraoGraphDisplay8K is + port ( + dispAddr : out std_LOGIC_VECTOR(12 downto 0); + dispData : in std_LOGIC_VECTOR(7 downto 0); + clk : in std_logic; + video : out std_logic; + h_sync : out std_logic; + v_sync : out std_logic; + sync : out std_logic + ); + +end OraoGraphDisplay8K; + +architecture rtl of OraoGraphDisplay8K is + + signal hSync : std_logic := '1'; + signal vSync : std_logic := '1'; + + signal vActive : std_logic := '0'; + signal hActive : std_logic := '0'; + + signal pixelClockCount: STD_LOGIC_VECTOR(3 DOWNTO 0); + signal pixelCount: STD_LOGIC_VECTOR(2 DOWNTO 0); + + signal horizCount: STD_LOGIC_VECTOR(11 DOWNTO 0); + signal vertLineCount: STD_LOGIC_VECTOR(8 DOWNTO 0); + + signal charHoriz: STD_LOGIC_VECTOR(12 DOWNTO 0); + signal charBit: STD_LOGIC_VECTOR(3 DOWNTO 0); + + signal charData: std_LOGIC_VECTOR(7 downto 0); + +begin + + sync <= hSync and vSync; + h_sync <= hSync; + v_sync <= vSync; + + dispAddr <= charHoriz; + charData <= dispData; + + PROCESS (clk) + BEGIN + +-- Orao display 256x256 bitmap 8K + +-- 5 lines vsync +-- 30 lines to start of display +-- 313 lines per frame +-- 64uS per horiz line (3200 clocks) +-- 4.7us horiz sync (235 clocks) + if rising_edge(clk) then + IF horizCount < 3200 THEN + horizCount <= horizCount + 1; + -- horizontal position of the screen + if (horizCount < 780) or (horizCount > 2830) then + hActive <= '0'; + pixelClockCount <= (others => '0'); + else + hActive <= '1'; + end if; + + else + horizCount<= (others => '0'); + pixelCount<= (others => '0'); + if vertLineCount > 312 then + vertLineCount <= (others => '0'); + else + if vertLineCount < 38 or vertLineCount > 293 then + vActive <= '0'; + charHoriz <= (others => '0'); + else + vActive <= '1'; + end if; + + vertLineCount <=vertLineCount+1; + end if; + + END IF; + if horizCount < 235 then + hSync <= '0'; + else + hSync <= '1'; + end if; + if vertLineCount < 5 then + vSync <= '0'; + else + vSync <= '1'; + end if; + + if hActive='1' and vActive = '1' then + if pixelClockCount < 7 then + pixelClockCount <= pixelClockCount+1; + else + video <= charData(conv_integer(pixelCount)); + pixelClockCount <= (others => '0'); + if pixelCount = 7 then + charHoriz <= charHoriz+1; + end if; + pixelCount <= pixelCount+1; + end if; + else + video <= '0'; + end if; + end if; + END PROCESS; + +end rtl; diff --git a/ORAO_MiST/rtl/ProgSRam.vhd b/ORAO_MiST/rtl/ProgSRam.vhd new file mode 100644 index 00000000..280255a8 --- /dev/null +++ b/ORAO_MiST/rtl/ProgSRam.vhd @@ -0,0 +1,29 @@ +library ieee; +use ieee.std_logic_1164.all; + +entity ProgSRam is + port + ( + address : in std_logic_vector(15 downto 0); + n_write : in std_logic; -- inverted write + n_enable : in std_logic; -- inverted enable for read or write + data : in std_logic_vector(7 downto 0); -- input to RAM (for write) + q : out std_logic_vector(7 downto 0); -- output from RAM (for read) + -- external SRAM interface + sram_lbl, sram_ubl, sram_wel: out std_logic; -- inverted logic signals + sram_a : out std_logic_vector(18 downto 0); + sram_d : inout std_logic_vector(15 downto 0) + ); +end ProgSRam; + +architecture struct of ProgSRam is +begin + -- this module will address lower 64K, set 3 high address bits to 0 + sram_a <= "000" & address; + sram_ubl <= '1'; -- upper 8 bits disabled + sram_lbl <= n_enable; -- lower 8 bits to enable signal + sram_wel <= n_write; -- write signal + sram_d(15 downto 8) <= (others => 'Z'); -- upper bits high impedance + sram_d(7 downto 0) <= data when n_write='0' else (others => 'Z'); + q <= sram_d(7 downto 0); +end struct; diff --git a/ORAO_MiST/rtl/T65/T65.vhd b/ORAO_MiST/rtl/T65/T65.vhd new file mode 100644 index 00000000..09253fe0 --- /dev/null +++ b/ORAO_MiST/rtl/T65/T65.vhd @@ -0,0 +1,564 @@ +-- **** +-- T65(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 301 more merging +-- Ver 300 Bugfixes by ehenciak added, started tidyup *bust* +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- 65xx compatible microprocessor core +-- +-- Version : 0246 +-- +-- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t65/ +-- +-- Limitations : +-- +-- 65C02 and 65C816 modes are incomplete +-- Undocumented instructions are not supported +-- Some interface signals behaves incorrect +-- +-- File history : +-- +-- 0246 : First release +-- + +library IEEE; + use IEEE.std_logic_1164.all; + use IEEE.numeric_std.all; + use work.T65_Pack.all; + +-- ehenciak 2-23-2005 : Added the enable signal so that one doesn't have to use +-- the ready signal to limit the CPU. +entity T65 is + port( + Mode : in std_logic_vector(1 downto 0); -- "00" => 6502, "01" => 65C02, "10" => 65C816 + Res_n : in std_logic; + Enable : in std_logic; + Clk : in std_logic; + Rdy : in std_logic; + Abort_n : in std_logic; + IRQ_n : in std_logic; + NMI_n : in std_logic; + SO_n : in std_logic; + R_W_n : out std_logic; + Sync : out std_logic; + EF : out std_logic; + MF : out std_logic; + XF : out std_logic; + ML_n : out std_logic; + VP_n : out std_logic; + VDA : out std_logic; + VPA : out std_logic; + A : out std_logic_vector(23 downto 0); + DI : in std_logic_vector(7 downto 0); + DO : out std_logic_vector(7 downto 0) + ); +end T65; + +architecture rtl of T65 is + + -- Registers + signal ABC, X, Y, D : std_logic_vector(15 downto 0); + signal P, AD, DL : std_logic_vector(7 downto 0) := x"00"; + signal BAH : std_logic_vector(7 downto 0); + signal BAL : std_logic_vector(8 downto 0); + signal PBR : std_logic_vector(7 downto 0); + signal DBR : std_logic_vector(7 downto 0); + signal PC : unsigned(15 downto 0); + signal S : unsigned(15 downto 0); + signal EF_i : std_logic; + signal MF_i : std_logic; + signal XF_i : std_logic; + + signal IR : std_logic_vector(7 downto 0); + signal MCycle : std_logic_vector(2 downto 0); + + signal Mode_r : std_logic_vector(1 downto 0); + signal ALU_Op_r : std_logic_vector(3 downto 0); + signal Write_Data_r : std_logic_vector(2 downto 0); + signal Set_Addr_To_r : std_logic_vector(1 downto 0); + signal PCAdder : unsigned(8 downto 0); + + signal RstCycle : std_logic; + signal IRQCycle : std_logic; + signal NMICycle : std_logic; + + signal B_o : std_logic; + signal SO_n_o : std_logic; + signal IRQ_n_o : std_logic; + signal NMI_n_o : std_logic; + signal NMIAct : std_logic; + + signal Break : std_logic; + + -- ALU signals + signal BusA : std_logic_vector(7 downto 0); + signal BusA_r : std_logic_vector(7 downto 0); + signal BusB : std_logic_vector(7 downto 0); + signal ALU_Q : std_logic_vector(7 downto 0); + signal P_Out : std_logic_vector(7 downto 0); + + -- Micro code outputs + signal LCycle : std_logic_vector(2 downto 0); + signal ALU_Op : std_logic_vector(3 downto 0); + signal Set_BusA_To : std_logic_vector(2 downto 0); + signal Set_Addr_To : std_logic_vector(1 downto 0); + signal Write_Data : std_logic_vector(2 downto 0); + signal Jump : std_logic_vector(1 downto 0); + signal BAAdd : std_logic_vector(1 downto 0); + signal BreakAtNA : std_logic; + signal ADAdd : std_logic; + signal AddY : std_logic; + signal PCAdd : std_logic; + signal Inc_S : std_logic; + signal Dec_S : std_logic; + signal LDA : std_logic; + signal LDP : std_logic; + signal LDX : std_logic; + signal LDY : std_logic; + signal LDS : std_logic; + signal LDDI : std_logic; + signal LDALU : std_logic; + signal LDAD : std_logic; + signal LDBAL : std_logic; + signal LDBAH : std_logic; + signal SaveP : std_logic; + signal Write : std_logic; + + signal really_rdy : std_logic; + signal R_W_n_i : std_logic; + +begin + -- ehenciak : gate Rdy with read/write to make an "OK, it's + -- really OK to stop the processor now if Rdy is + -- deasserted" signal + really_rdy <= Rdy or not(R_W_n_i); + + -- ehenciak : Drive R_W_n_i off chip. + R_W_n <= R_W_n_i; + + Sync <= '1' when MCycle = "000" else '0'; + EF <= EF_i; + MF <= MF_i; + XF <= XF_i; + ML_n <= '0' when IR(7 downto 6) /= "10" and IR(2 downto 1) = "11" and MCycle(2 downto 1) /= "00" else '1'; + VP_n <= '0' when IRQCycle = '1' and (MCycle = "101" or MCycle = "110") else '1'; + VDA <= '1' when Set_Addr_To_r /= "00" else '0'; -- Incorrect !!!!!!!!!!!! + VPA <= '1' when Jump(1) = '0' else '0'; -- Incorrect !!!!!!!!!!!! + + mcode : T65_MCode + port map( + Mode => Mode_r, + IR => IR, + MCycle => MCycle, + P => P, + LCycle => LCycle, + ALU_Op => ALU_Op, + Set_BusA_To => Set_BusA_To, + Set_Addr_To => Set_Addr_To, + Write_Data => Write_Data, + Jump => Jump, + BAAdd => BAAdd, + BreakAtNA => BreakAtNA, + ADAdd => ADAdd, + AddY => AddY, + PCAdd => PCAdd, + Inc_S => Inc_S, + Dec_S => Dec_S, + LDA => LDA, + LDP => LDP, + LDX => LDX, + LDY => LDY, + LDS => LDS, + LDDI => LDDI, + LDALU => LDALU, + LDAD => LDAD, + LDBAL => LDBAL, + LDBAH => LDBAH, + SaveP => SaveP, + Write => Write + ); + + alu : T65_ALU + port map( + Mode => Mode_r, + Op => ALU_Op_r, + BusA => BusA_r, + BusB => BusB, + P_In => P, + P_Out => P_Out, + Q => ALU_Q + ); + + process (Res_n, Clk) + begin + if Res_n = '0' then + PC <= (others => '0'); -- Program Counter + IR <= "00000000"; + S <= (others => '0'); -- Dummy !!!!!!!!!!!!!!!!!!!!! + D <= (others => '0'); + PBR <= (others => '0'); + DBR <= (others => '0'); + + Mode_r <= (others => '0'); + ALU_Op_r <= "1100"; + Write_Data_r <= "000"; + Set_Addr_To_r <= "00"; + + R_W_n_i <= '1'; + EF_i <= '1'; + MF_i <= '1'; + XF_i <= '1'; + + elsif Clk'event and Clk = '1' then + if (Enable = '1') then + if (really_rdy = '1') then + R_W_n_i <= not Write or RstCycle; + + D <= (others => '1'); -- Dummy + PBR <= (others => '1'); -- Dummy + DBR <= (others => '1'); -- Dummy + EF_i <= '0'; -- Dummy + MF_i <= '0'; -- Dummy + XF_i <= '0'; -- Dummy + + if MCycle = "000" then + Mode_r <= Mode; + + if IRQCycle = '0' and NMICycle = '0' then + PC <= PC + 1; + end if; + + if IRQCycle = '1' or NMICycle = '1' then + IR <= "00000000"; + else + IR <= DI; + end if; + end if; + + ALU_Op_r <= ALU_Op; + Write_Data_r <= Write_Data; + if Break = '1' then + Set_Addr_To_r <= "00"; + else + Set_Addr_To_r <= Set_Addr_To; + end if; + + if Inc_S = '1' then + S <= S + 1; + end if; + if Dec_S = '1' and RstCycle = '0' then + S <= S - 1; + end if; + if LDS = '1' then + S(7 downto 0) <= unsigned(ALU_Q); + end if; + + if IR = "00000000" and MCycle = "001" and IRQCycle = '0' and NMICycle = '0' then + PC <= PC + 1; + end if; + -- + -- jump control logic + -- + case Jump is + when "01" => + PC <= PC + 1; + + when "10" => + PC <= unsigned(DI & DL); + + when "11" => + if PCAdder(8) = '1' then + if DL(7) = '0' then + PC(15 downto 8) <= PC(15 downto 8) + 1; + else + PC(15 downto 8) <= PC(15 downto 8) - 1; + end if; + end if; + PC(7 downto 0) <= PCAdder(7 downto 0); + + when others => null; + end case; + end if; + end if; + end if; + end process; + + PCAdder <= resize(PC(7 downto 0),9) + resize(unsigned(DL(7) & DL),9) when PCAdd = '1' + else "0" & PC(7 downto 0); + + process (Clk) + begin + if Clk'event and Clk = '1' then + if (Enable = '1') then + if (really_rdy = '1') then + if MCycle = "000" then + if LDA = '1' then + ABC(7 downto 0) <= ALU_Q; + end if; + if LDX = '1' then + X(7 downto 0) <= ALU_Q; + end if; + if LDY = '1' then + Y(7 downto 0) <= ALU_Q; + end if; + if (LDA or LDX or LDY) = '1' then + P <= P_Out; + end if; + end if; + if SaveP = '1' then + P <= P_Out; + end if; + if LDP = '1' then + P <= ALU_Q; + end if; + if IR(4 downto 0) = "11000" then + case IR(7 downto 5) is + when "000" => + P(Flag_C) <= '0'; + when "001" => + P(Flag_C) <= '1'; + when "010" => + P(Flag_I) <= '0'; + when "011" => + P(Flag_I) <= '1'; + when "101" => + P(Flag_V) <= '0'; + when "110" => + P(Flag_D) <= '0'; + when "111" => + P(Flag_D) <= '1'; + when others => + end case; + end if; + + --if IR = "00000000" and MCycle = "011" and RstCycle = '0' and NMICycle = '0' and IRQCycle = '0' then + -- P(Flag_B) <= '1'; + --end if; + --if IR = "00000000" and MCycle = "100" and RstCycle = '0' and (NMICycle = '1' or IRQCycle = '1') then + -- P(Flag_I) <= '1'; + -- P(Flag_B) <= B_o; + --end if; + + -- B=1 always on the 6502 + P(Flag_B) <= '1'; + if IR = "00000000" and RstCycle = '0' and (NMICycle = '1' or IRQCycle = '1') then + if MCycle = "011" then + -- B=0 in *copy* of P pushed onto the stack + P(Flag_B) <= '0'; + elsif MCycle = "100" then + P(Flag_I) <= '1'; + end if; + end if; + + if SO_n_o = '1' and SO_n = '0' then + P(Flag_V) <= '1'; + end if; + if RstCycle = '1' and Mode_r /= "00" then + P(Flag_1) <= '1'; + P(Flag_D) <= '0'; + P(Flag_I) <= '1'; + end if; + P(Flag_1) <= '1'; + + B_o <= P(Flag_B); + SO_n_o <= SO_n; + IRQ_n_o <= IRQ_n; + NMI_n_o <= NMI_n; + end if; + end if; + end if; + end process; + +--------------------------------------------------------------------------- +-- +-- Buses +-- +--------------------------------------------------------------------------- + + process (Res_n, Clk) + begin + if Res_n = '0' then + BusA_r <= (others => '0'); + BusB <= (others => '0'); + AD <= (others => '0'); + BAL <= (others => '0'); + BAH <= (others => '0'); + DL <= (others => '0'); + elsif Clk'event and Clk = '1' then + if (Enable = '1') then + if (Rdy = '1') then + BusA_r <= BusA; + BusB <= DI; + + case BAAdd is + when "01" => + -- BA Inc + AD <= std_logic_vector(unsigned(AD) + 1); + BAL <= std_logic_vector(unsigned(BAL) + 1); + when "10" => + -- BA Add + BAL <= std_logic_vector(resize(unsigned(BAL(7 downto 0)),9) + resize(unsigned(BusA),9)); + when "11" => + -- BA Adj + if BAL(8) = '1' then + BAH <= std_logic_vector(unsigned(BAH) + 1); + end if; + when others => + end case; + + -- ehenciak : modified to use Y register as well (bugfix) + if ADAdd = '1' then + if (AddY = '1') then + AD <= std_logic_vector(unsigned(AD) + unsigned(Y(7 downto 0))); + else + AD <= std_logic_vector(unsigned(AD) + unsigned(X(7 downto 0))); + end if; + end if; + + if IR = "00000000" then + BAL <= (others => '1'); + BAH <= (others => '1'); + if RstCycle = '1' then + BAL(2 downto 0) <= "100"; + elsif NMICycle = '1' then + BAL(2 downto 0) <= "010"; + else + BAL(2 downto 0) <= "110"; + end if; + if Set_addr_To_r = "11" then + BAL(0) <= '1'; + end if; + end if; + + + if LDDI = '1' then + DL <= DI; + end if; + if LDALU = '1' then + DL <= ALU_Q; + end if; + if LDAD = '1' then + AD <= DI; + end if; + if LDBAL = '1' then + BAL(7 downto 0) <= DI; + end if; + if LDBAH = '1' then + BAH <= DI; + end if; + end if; + end if; + end if; + end process; + + Break <= (BreakAtNA and not BAL(8)) or (PCAdd and not PCAdder(8)); + + + with Set_BusA_To select + BusA <= DI when "000", + ABC(7 downto 0) when "001", + X(7 downto 0) when "010", + Y(7 downto 0) when "011", + std_logic_vector(S(7 downto 0)) when "100", + P when "101", + (others => '-') when others; + + with Set_Addr_To_r select + A <= "0000000000000001" & std_logic_vector(S(7 downto 0)) when "01", + DBR & "00000000" & AD when "10", + "00000000" & BAH & BAL(7 downto 0) when "11", + PBR & std_logic_vector(PC(15 downto 8)) & std_logic_vector(PCAdder(7 downto 0)) when others; + + with Write_Data_r select + DO <= DL when "000", + ABC(7 downto 0) when "001", + X(7 downto 0) when "010", + Y(7 downto 0) when "011", + std_logic_vector(S(7 downto 0)) when "100", + P when "101", + std_logic_vector(PC(7 downto 0)) when "110", + std_logic_vector(PC(15 downto 8)) when others; + +------------------------------------------------------------------------- +-- +-- Main state machine +-- +------------------------------------------------------------------------- + + process (Res_n, Clk) + begin + if Res_n = '0' then + MCycle <= "001"; + RstCycle <= '1'; + IRQCycle <= '0'; + NMICycle <= '0'; + NMIAct <= '0'; + elsif Clk'event and Clk = '1' then + if (Enable = '1') then + if (really_rdy = '1') then + if MCycle = LCycle or Break = '1' then + MCycle <= "000"; + RstCycle <= '0'; + IRQCycle <= '0'; + NMICycle <= '0'; + if NMIAct = '1' then + NMICycle <= '1'; + elsif IRQ_n_o = '0' and P(Flag_I) = '0' then + IRQCycle <= '1'; + end if; + else + MCycle <= std_logic_vector(unsigned(MCycle) + 1); + end if; + + if NMICycle = '1' then + NMIAct <= '0'; + end if; + if NMI_n_o = '1' and NMI_n = '0' then + NMIAct <= '1'; + end if; + end if; + end if; + end if; + end process; + +end; diff --git a/ORAO_MiST/rtl/T65/T65_ALU.vhd b/ORAO_MiST/rtl/T65/T65_ALU.vhd new file mode 100644 index 00000000..b1f6d632 --- /dev/null +++ b/ORAO_MiST/rtl/T65/T65_ALU.vhd @@ -0,0 +1,260 @@ +-- **** +-- T65(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 Bugfixes by ehenciak added +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- 6502 compatible microprocessor core +-- +-- Version : 0245 +-- +-- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t65/ +-- +-- Limitations : +-- +-- File history : +-- +-- 0245 : First version +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use work.T65_Pack.all; + +entity T65_ALU is + port( + Mode : in std_logic_vector(1 downto 0); -- "00" => 6502, "01" => 65C02, "10" => 65816 + Op : in std_logic_vector(3 downto 0); + BusA : in std_logic_vector(7 downto 0); + BusB : in std_logic_vector(7 downto 0); + P_In : in std_logic_vector(7 downto 0); + P_Out : out std_logic_vector(7 downto 0); + Q : out std_logic_vector(7 downto 0) + ); +end T65_ALU; + +architecture rtl of T65_ALU is + + -- AddSub variables (temporary signals) + signal ADC_Z : std_logic; + signal ADC_C : std_logic; + signal ADC_V : std_logic; + signal ADC_N : std_logic; + signal ADC_Q : std_logic_vector(7 downto 0); + signal SBC_Z : std_logic; + signal SBC_C : std_logic; + signal SBC_V : std_logic; + signal SBC_N : std_logic; + signal SBC_Q : std_logic_vector(7 downto 0); + +begin + + process (P_In, BusA, BusB) + variable AL : unsigned(6 downto 0); + variable AH : unsigned(6 downto 0); + variable C : std_logic; + begin + AL := resize(unsigned(BusA(3 downto 0) & P_In(Flag_C)), 7) + resize(unsigned(BusB(3 downto 0) & "1"), 7); + AH := resize(unsigned(BusA(7 downto 4) & AL(5)), 7) + resize(unsigned(BusB(7 downto 4) & "1"), 7); + +-- pragma translate_off + if is_x(std_logic_vector(AL)) then AL := "0000000"; end if; + if is_x(std_logic_vector(AH)) then AH := "0000000"; end if; +-- pragma translate_on + + if AL(4 downto 1) = 0 and AH(4 downto 1) = 0 then + ADC_Z <= '1'; + else + ADC_Z <= '0'; + end if; + + if AL(5 downto 1) > 9 and P_In(Flag_D) = '1' then + AL(6 downto 1) := AL(6 downto 1) + 6; + end if; + + C := AL(6) or AL(5); + AH := resize(unsigned(BusA(7 downto 4) & C), 7) + resize(unsigned(BusB(7 downto 4) & "1"), 7); + + ADC_N <= AH(4); + ADC_V <= (AH(4) xor BusA(7)) and not (BusA(7) xor BusB(7)); + +-- pragma translate_off + if is_x(std_logic_vector(AH)) then AH := "0000000"; end if; +-- pragma translate_on + + if AH(5 downto 1) > 9 and P_In(Flag_D) = '1' then + AH(6 downto 1) := AH(6 downto 1) + 6; + end if; + + ADC_C <= AH(6) or AH(5); + + ADC_Q <= std_logic_vector(AH(4 downto 1) & AL(4 downto 1)); + end process; + + process (Op, P_In, BusA, BusB) + variable AL : unsigned(6 downto 0); + variable AH : unsigned(5 downto 0); + variable C : std_logic; + begin + C := P_In(Flag_C) or not Op(0); + AL := resize(unsigned(BusA(3 downto 0) & C), 7) - resize(unsigned(BusB(3 downto 0) & "1"), 6); + AH := resize(unsigned(BusA(7 downto 4) & "0"), 6) - resize(unsigned(BusB(7 downto 4) & AL(5)), 6); + +-- pragma translate_off + if is_x(std_logic_vector(AL)) then AL := "0000000"; end if; + if is_x(std_logic_vector(AH)) then AH := "000000"; end if; +-- pragma translate_on + + if AL(4 downto 1) = 0 and AH(4 downto 1) = 0 then + SBC_Z <= '1'; + else + SBC_Z <= '0'; + end if; + + SBC_C <= not AH(5); + SBC_V <= (AH(4) xor BusA(7)) and (BusA(7) xor BusB(7)); + SBC_N <= AH(4); + + if P_In(Flag_D) = '1' then + if AL(5) = '1' then + AL(5 downto 1) := AL(5 downto 1) - 6; + end if; + AH := resize(unsigned(BusA(7 downto 4) & "0"), 6) - resize(unsigned(BusB(7 downto 4) & AL(6)), 6); + if AH(5) = '1' then + AH(5 downto 1) := AH(5 downto 1) - 6; + end if; + end if; + + SBC_Q <= std_logic_vector(AH(4 downto 1) & AL(4 downto 1)); + end process; + + process (Op, P_In, BusA, BusB, + ADC_Z, ADC_C, ADC_V, ADC_N, ADC_Q, + SBC_Z, SBC_C, SBC_V, SBC_N, SBC_Q) + variable Q_t : std_logic_vector(7 downto 0); + begin + -- ORA, AND, EOR, ADC, NOP, LD, CMP, SBC + -- ASL, ROL, LSR, ROR, BIT, LD, DEC, INC + P_Out <= P_In; + Q_t := BusA; + case Op(3 downto 0) is + when "0000" => + -- ORA + Q_t := BusA or BusB; + when "0001" => + -- AND + Q_t := BusA and BusB; + when "0010" => + -- EOR + Q_t := BusA xor BusB; + when "0011" => + -- ADC + P_Out(Flag_V) <= ADC_V; + P_Out(Flag_C) <= ADC_C; + Q_t := ADC_Q; + when "0101" | "1101" => + -- LDA + when "0110" => + -- CMP + P_Out(Flag_C) <= SBC_C; + when "0111" => + -- SBC + P_Out(Flag_V) <= SBC_V; + P_Out(Flag_C) <= SBC_C; + Q_t := SBC_Q; + when "1000" => + -- ASL + Q_t := BusA(6 downto 0) & "0"; + P_Out(Flag_C) <= BusA(7); + when "1001" => + -- ROL + Q_t := BusA(6 downto 0) & P_In(Flag_C); + P_Out(Flag_C) <= BusA(7); + when "1010" => + -- LSR + Q_t := "0" & BusA(7 downto 1); + P_Out(Flag_C) <= BusA(0); + when "1011" => + -- ROR + Q_t := P_In(Flag_C) & BusA(7 downto 1); + P_Out(Flag_C) <= BusA(0); + when "1100" => + -- BIT + P_Out(Flag_V) <= BusB(6); + when "1110" => + -- DEC + Q_t := std_logic_vector(unsigned(BusA) - 1); + when "1111" => + -- INC + Q_t := std_logic_vector(unsigned(BusA) + 1); + when others => + end case; + + case Op(3 downto 0) is + when "0011" => + P_Out(Flag_N) <= ADC_N; + P_Out(Flag_Z) <= ADC_Z; + when "0110" | "0111" => + P_Out(Flag_N) <= SBC_N; + P_Out(Flag_Z) <= SBC_Z; + when "0100" => + when "1100" => + P_Out(Flag_N) <= BusB(7); + if (BusA and BusB) = "00000000" then + P_Out(Flag_Z) <= '1'; + else + P_Out(Flag_Z) <= '0'; + end if; + when others => + P_Out(Flag_N) <= Q_t(7); + if Q_t = "00000000" then + P_Out(Flag_Z) <= '1'; + else + P_Out(Flag_Z) <= '0'; + end if; + end case; + + Q <= Q_t; + end process; + +end; diff --git a/ORAO_MiST/rtl/T65/T65_MCode.vhd b/ORAO_MiST/rtl/T65/T65_MCode.vhd new file mode 100644 index 00000000..6c6c864a --- /dev/null +++ b/ORAO_MiST/rtl/T65/T65_MCode.vhd @@ -0,0 +1,1052 @@ +-- **** +-- T65(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 302 minor timing fixes +-- Ver 301 Jump timing fixed +-- Ver 300 Bugfixes by ehenciak added +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- 65xx compatible microprocessor core +-- +-- Version : 0246 + fix +-- +-- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t65/ +-- +-- Limitations : +-- +-- 65C02 +-- supported : inc, dec, phx, plx, phy, ply +-- missing : bra, ora, lda, cmp, sbc, tsb*2, trb*2, stz*2, bit*2, wai, stp, jmp, bbr*8, bbs*8 +-- +-- File history : +-- +-- 0246 : First release +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use work.T65_Pack.all; + +entity T65_MCode is + port( + Mode : in std_logic_vector(1 downto 0); -- "00" => 6502, "01" => 65C02, "10" => 65816 + IR : in std_logic_vector(7 downto 0); + MCycle : in std_logic_vector(2 downto 0); + P : in std_logic_vector(7 downto 0); + LCycle : out std_logic_vector(2 downto 0); + ALU_Op : out std_logic_vector(3 downto 0); + Set_BusA_To : out std_logic_vector(2 downto 0); -- DI,A,X,Y,S,P + Set_Addr_To : out std_logic_vector(1 downto 0); -- PC Adder,S,AD,BA + Write_Data : out std_logic_vector(2 downto 0); -- DL,A,X,Y,S,P,PCL,PCH + Jump : out std_logic_vector(1 downto 0); -- PC,++,DIDL,Rel + BAAdd : out std_logic_vector(1 downto 0); -- None,DB Inc,BA Add,BA Adj + BreakAtNA : out std_logic; + ADAdd : out std_logic; + AddY : out std_logic; + PCAdd : out std_logic; + Inc_S : out std_logic; + Dec_S : out std_logic; + LDA : out std_logic; + LDP : out std_logic; + LDX : out std_logic; + LDY : out std_logic; + LDS : out std_logic; + LDDI : out std_logic; + LDALU : out std_logic; + LDAD : out std_logic; + LDBAL : out std_logic; + LDBAH : out std_logic; + SaveP : out std_logic; + Write : out std_logic + ); +end T65_MCode; + +architecture rtl of T65_MCode is + + signal Branch : std_logic; + +begin + + with IR(7 downto 5) select + Branch <= not P(Flag_N) when "000", + P(Flag_N) when "001", + not P(Flag_V) when "010", + P(Flag_V) when "011", + not P(Flag_C) when "100", + P(Flag_C) when "101", + not P(Flag_Z) when "110", + P(Flag_Z) when others; + + process (IR, MCycle, P, Branch, Mode) + begin + LCycle <= "001"; + Set_BusA_To <= "001"; -- A + Set_Addr_To <= (others => '0'); + Write_Data <= (others => '0'); + Jump <= (others => '0'); + BAAdd <= "00"; + BreakAtNA <= '0'; + ADAdd <= '0'; + PCAdd <= '0'; + Inc_S <= '0'; + Dec_S <= '0'; + LDA <= '0'; + LDP <= '0'; + LDX <= '0'; + LDY <= '0'; + LDS <= '0'; + LDDI <= '0'; + LDALU <= '0'; + LDAD <= '0'; + LDBAL <= '0'; + LDBAH <= '0'; + SaveP <= '0'; + Write <= '0'; + AddY <= '0'; + + case IR(7 downto 5) is + when "100" => + --{{{ + case IR(1 downto 0) is + when "00" => + Set_BusA_To <= "011"; -- Y + Write_Data <= "011"; -- Y + when "10" => + Set_BusA_To <= "010"; -- X + Write_Data <= "010"; -- X + when others => + Write_Data <= "001"; -- A + end case; + --}}} + when "101" => + --{{{ + case IR(1 downto 0) is + when "00" => + if IR(4) /= '1' or IR(2) /= '0' then + LDY <= '1'; + end if; + when "10" => + LDX <= '1'; + when others => + LDA <= '1'; + end case; + Set_BusA_To <= "000"; -- DI + --}}} + when "110" => + --{{{ + case IR(1 downto 0) is + when "00" => + if IR(4) = '0' then + LDY <= '1'; + end if; + Set_BusA_To <= "011"; -- Y + when others => + Set_BusA_To <= "001"; -- A + end case; + --}}} + when "111" => + --{{{ + case IR(1 downto 0) is + when "00" => + if IR(4) = '0' then + LDX <= '1'; + end if; + Set_BusA_To <= "010"; -- X + when others => + Set_BusA_To <= "001"; -- A + end case; + --}}} + when others => + end case; + + if IR(7 downto 6) /= "10" and IR(1 downto 0) = "10" then + Set_BusA_To <= "000"; -- DI + end if; + + case IR(4 downto 0) is + when "00000" | "01000" | "01010" | "11000" | "11010" => + --{{{ + -- Implied + case IR is + when "00000000" => + -- BRK + LCycle <= "110"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= "01"; -- S + Write_Data <= "111"; -- PCH + Write <= '1'; + when 2 => + Dec_S <= '1'; + Set_Addr_To <= "01"; -- S + Write_Data <= "110"; -- PCL + Write <= '1'; + when 3 => + Dec_S <= '1'; + Set_Addr_To <= "01"; -- S + Write_Data <= "101"; -- P + Write <= '1'; + when 4 => + Dec_S <= '1'; + Set_Addr_To <= "11"; -- BA + when 5 => + LDDI <= '1'; + Set_Addr_To <= "11"; -- BA + when 6 => + Jump <= "10"; -- DIDL + when others => + end case; + when "00100000" => + -- JSR + LCycle <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDDI <= '1'; + Set_Addr_To <= "01"; -- S + when 2 => + Set_Addr_To <= "01"; -- S + Write_Data <= "111"; -- PCH + Write <= '1'; + when 3 => + Dec_S <= '1'; + Set_Addr_To <= "01"; -- S + Write_Data <= "110"; -- PCL + Write <= '1'; + when 4 => + Dec_S <= '1'; + when 5 => + Jump <= "10"; -- DIDL + when others => + end case; + when "01000000" => + -- RTI + LCycle <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= "01"; -- S + when 2 => + Inc_S <= '1'; + Set_Addr_To <= "01"; -- S + when 3 => + Inc_S <= '1'; + Set_Addr_To <= "01"; -- S + Set_BusA_To <= "000"; -- DI + when 4 => + LDP <= '1'; + Inc_S <= '1'; + LDDI <= '1'; + Set_Addr_To <= "01"; -- S + when 5 => + Jump <= "10"; -- DIDL + when others => + end case; + when "01100000" => + -- RTS + LCycle <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= "01"; -- S + when 2 => + Inc_S <= '1'; + Set_Addr_To <= "01"; -- S + when 3 => + Inc_S <= '1'; + LDDI <= '1'; + Set_Addr_To <= "01"; -- S + when 4 => + Jump <= "10"; -- DIDL + when 5 => + Jump <= "01"; + when others => + end case; + when "00001000" | "01001000" | "01011010" | "11011010" => + -- PHP, PHA, PHY*, PHX* + LCycle <= "010"; + if Mode = "00" and IR(1) = '1' then + LCycle <= "001"; + end if; + case to_integer(unsigned(MCycle)) is + when 1 => + case IR(7 downto 4) is + when "0000" => + Write_Data <= "101"; -- P + when "0100" => + Write_Data <= "001"; -- A + when "0101" => + Write_Data <= "011"; -- Y + when "1101" => + Write_Data <= "010"; -- X + when others => + end case; + Write <= '1'; + Set_Addr_To <= "01"; -- S + when 2 => + Dec_S <= '1'; + when others => + end case; + when "00101000" | "01101000" | "01111010" | "11111010" => + -- PLP, PLA, PLY*, PLX* + LCycle <= "011"; + if Mode = "00" and IR(1) = '1' then + LCycle <= "001"; + end if; + case IR(7 downto 4) is + when "0010" => + LDP <= '1'; + when "0110" => + LDA <= '1'; + when "0111" => + if Mode /= "00" then + LDY <= '1'; + end if; + when "1111" => + if Mode /= "00" then + LDX <= '1'; + end if; + when others => + end case; + case to_integer(unsigned(MCycle)) is + when 0 => + SaveP <= '1'; + when 1 => + Set_Addr_To <= "01"; -- S + when 2 => + Inc_S <= '1'; + Set_Addr_To <= "01"; -- S + when 3 => + Set_BusA_To <= "000"; -- DI + when others => + end case; + when "10100000" | "11000000" | "11100000" => + -- LDY, CPY, CPX + -- Immediate + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + when others => + end case; + when "10001000" => + -- DEY + LDY <= '1'; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Set_BusA_To <= "011"; -- Y + when others => + end case; + when "11001010" => + -- DEX + LDX <= '1'; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Set_BusA_To <= "010"; -- X + when others => + end case; + when "00011010" | "00111010" => + -- INC*, DEC* + if Mode /= "00" then + LDA <= '1'; -- A + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Set_BusA_To <= "100"; -- S + when others => + end case; + when "00001010" | "00101010" | "01001010" | "01101010" => + -- ASL, ROL, LSR, ROR + LDA <= '1'; -- A + Set_BusA_To <= "001"; -- A + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + when others => + end case; + when "10001010" | "10011000" => + -- TYA, TXA + LDA <= '1'; -- A + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + when others => + end case; + when "10101010" | "10101000" => + -- TAX, TAY + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Set_BusA_To <= "001"; -- A + when others => + end case; + when "10011010" => + -- TXS + case to_integer(unsigned(MCycle)) is + when 0 => + LDS <= '1'; + when 1 => + when others => + end case; + when "10111010" => + -- TSX + LDX <= '1'; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Set_BusA_To <= "100"; -- S + when others => + end case; + + -- when "00011000" | "00111000" | "01011000" | "01111000" | "10111000" | "11011000" | "11111000" | "11001000" | "11101000" => + -- -- CLC, SEC, CLI, SEI, CLV, CLD, SED, INY, INX + -- case to_integer(unsigned(MCycle)) is + -- when 1 => + -- when others => + -- end case; + when others => + case to_integer(unsigned(MCycle)) is + when 0 => + when others => + end case; + end case; + --}}} + + when "00001" | "00011" => + --{{{ + -- Zero Page Indexed Indirect (d,x) + LCycle <= "101"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDAD <= '1'; + Set_Addr_To <= "10"; -- AD + when 2 => + ADAdd <= '1'; + Set_Addr_To <= "10"; -- AD + when 3 => + BAAdd <= "01"; -- DB Inc + LDBAL <= '1'; + Set_Addr_To <= "10"; -- AD + when 4 => + LDBAH <= '1'; + if IR(7 downto 5) = "100" then + Write <= '1'; + end if; + Set_Addr_To <= "11"; -- BA + when 5 => + when others => + end case; + --}}} + + when "01001" | "01011" => + --{{{ + -- Immediate + LDA <= '1'; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + when others => + end case; + + --}}} + + when "00010" | "10010" => + --{{{ + -- Immediate, KIL + LDX <= '1'; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + if IR = "10100010" then + -- LDX + Jump <= "01"; + else + -- KIL !!!!!!!!!!!!!!!!!!!!!!!!!!!!! + end if; + when others => + end case; + --}}} + + when "00100" => + --{{{ + -- Zero Page + LCycle <= "010"; + case to_integer(unsigned(MCycle)) is + when 0 => + if IR(7 downto 5) = "001" then + SaveP <= '1'; + end if; + when 1 => + Jump <= "01"; + LDAD <= '1'; + if IR(7 downto 5) = "100" then + Write <= '1'; + end if; + Set_Addr_To <= "10"; -- AD + when 2 => + when others => + end case; + --}}} + + when "00101" | "00110" | "00111" => + --{{{ + -- Zero Page + if IR(7 downto 6) /= "10" and IR(1 downto 0) = "10" then + -- Read-Modify-Write + LCycle <= "100"; + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDAD <= '1'; + Set_Addr_To <= "10"; -- AD + when 2 => + LDDI <= '1'; + Write <= '1'; + Set_Addr_To <= "10"; -- AD + when 3 => + LDALU <= '1'; + SaveP <= '1'; + Write <= '1'; + Set_Addr_To <= "10"; -- AD + when 4 => + when others => + end case; + else + LCycle <= "010"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDAD <= '1'; + if IR(7 downto 5) = "100" then + Write <= '1'; + end if; + Set_Addr_To <= "10"; -- AD + when 2 => + when others => + end case; + end if; + --}}} + + when "01100" => + --{{{ + -- Absolute + if IR(7 downto 6) = "01" and IR(4 downto 0) = "01100" then + -- JMP + if IR(5) = '0' then + --LCycle <= "011"; + LCycle <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDDI <= '1'; + when 2 => + Jump <= "10"; -- DIDL + when others => + end case; + else + --LCycle <= "101"; + LCycle <= "100"; -- mikej + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDDI <= '1'; + LDBAL <= '1'; + when 2 => + LDBAH <= '1'; + if Mode /= "00" then + Jump <= "10"; -- DIDL + end if; + if Mode = "00" then + Set_Addr_To <= "11"; -- BA + end if; + when 3 => + LDDI <= '1'; + if Mode = "00" then + Set_Addr_To <= "11"; -- BA + BAAdd <= "01"; -- DB Inc + else + Jump <= "01"; + end if; + when 4 => + Jump <= "10"; -- DIDL + when others => + end case; + end if; + else + LCycle <= "011"; + case to_integer(unsigned(MCycle)) is + when 0 => + if IR(7 downto 5) = "001" then + SaveP <= '1'; + end if; + when 1 => + Jump <= "01"; + LDBAL <= '1'; + when 2 => + Jump <= "01"; + LDBAH <= '1'; + if IR(7 downto 5) = "100" then + Write <= '1'; + end if; + Set_Addr_To <= "11"; -- BA + when 3 => + when others => + end case; + end if; + --}}} + + when "01101" | "01110" | "01111" => + --{{{ + -- Absolute + if IR(7 downto 6) /= "10" and IR(1 downto 0) = "10" then + -- Read-Modify-Write + LCycle <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDBAL <= '1'; + when 2 => + Jump <= "01"; + LDBAH <= '1'; + Set_Addr_To <= "11"; -- BA + when 3 => + LDDI <= '1'; + Write <= '1'; + Set_Addr_To <= "11"; -- BA + when 4 => + Write <= '1'; + LDALU <= '1'; + SaveP <= '1'; + Set_Addr_To <= "11"; -- BA + when 5 => + SaveP <= '0'; -- MIKEJ was 1 + when others => + end case; + else + LCycle <= "011"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDBAL <= '1'; + when 2 => + Jump <= "01"; + LDBAH <= '1'; + if IR(7 downto 5) = "100" then + Write <= '1'; + end if; + Set_Addr_To <= "11"; -- BA + when 3 => + when others => + end case; + end if; + --}}} + + when "10000" => + --{{{ + -- Relative + + -- This circuit dictates when the last + -- microcycle occurs for the branch depending on + -- whether or not the branch is taken and if a page + -- is crossed... + if (Branch = '1') then + + LCycle <= "011"; -- We're done @ T3 if branching...upper + -- level logic will stop at T2 if no page cross + -- (See the Break signal) + else + + LCycle <= "001"; + + end if; + + -- This decodes the current microcycle and takes the + -- proper course of action... + case to_integer(unsigned(MCycle)) is + + -- On the T1 microcycle, increment the program counter + -- and instruct the upper level logic to fetch the offset + -- from the Din bus and store it in the data latches. This + -- will be the last microcycle if the branch isn't taken. + when 1 => + + Jump <= "01"; -- Increments the PC by one (PC will now be PC+2) + -- from microcycle T0. + + LDDI <= '1'; -- Tells logic in top level (T65.vhd) to route + -- the Din bus to the memory data latch (DL) + -- so that the branch offset is fetched. + + -- In microcycle T2, tell the logic in the top level to + -- add the offset. If the most significant byte of the + -- program counter (i.e. the current "page") does not need + -- updating, we are done here...the Break signal at the + -- T65.vhd level takes care of that... + when 2 => + + Jump <= "11"; -- Tell the PC Jump logic to use relative mode. + + PCAdd <= '1'; -- This tells the PC adder to update itself with + -- the current offset recently fetched from + -- memory. + + -- The following is microcycle T3 : + -- The program counter should be completely updated + -- on this cycle after the page cross is detected. + -- We don't need to do anything here... + when 3 => + + + when others => null; -- Do nothing. + + end case; + --}}} + + when "10001" | "10011" => + --{{{ + -- Zero Page Indirect Indexed (d),y + LCycle <= "101"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDAD <= '1'; + Set_Addr_To <= "10"; -- AD + when 2 => + LDBAL <= '1'; + BAAdd <= "01"; -- DB Inc + Set_Addr_To <= "10"; -- AD + when 3 => + Set_BusA_To <= "011"; -- Y + BAAdd <= "10"; -- BA Add + LDBAH <= '1'; + Set_Addr_To <= "11"; -- BA + when 4 => + BAAdd <= "11"; -- BA Adj + if IR(7 downto 5) = "100" then + Write <= '1'; + else + BreakAtNA <= '1'; + end if; + Set_Addr_To <= "11"; -- BA + when 5 => + when others => + end case; + --}}} + + when "10100" | "10101" | "10110" | "10111" => + --{{{ + -- Zero Page, X + if IR(7 downto 6) /= "10" and IR(1 downto 0) = "10" then + -- Read-Modify-Write + LCycle <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDAD <= '1'; + Set_Addr_To <= "10"; -- AD + when 2 => + ADAdd <= '1'; + Set_Addr_To <= "10"; -- AD + when 3 => + LDDI <= '1'; + Write <= '1'; + Set_Addr_To <= "10"; -- AD + when 4 => + LDALU <= '1'; + SaveP <= '1'; + Write <= '1'; + Set_Addr_To <= "10"; -- AD + when 5 => + when others => + end case; + else + LCycle <= "011"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDAD <= '1'; + Set_Addr_To <= "10"; -- AD + when 2 => + ADAdd <= '1'; + -- Added this check for Y reg. use... + if (IR(3 downto 0) = "0110") then + AddY <= '1'; + end if; + + if IR(7 downto 5) = "100" then + Write <= '1'; + end if; + Set_Addr_To <= "10"; -- AD + when 3 => null; + when others => + end case; + end if; + --}}} + + when "11001" | "11011" => + --{{{ + -- Absolute Y + LCycle <= "100"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDBAL <= '1'; + when 2 => + Jump <= "01"; + Set_BusA_To <= "011"; -- Y + BAAdd <= "10"; -- BA Add + LDBAH <= '1'; + Set_Addr_To <= "11"; -- BA + when 3 => + BAAdd <= "11"; -- BA adj + if IR(7 downto 5) = "100" then + Write <= '1'; + else + BreakAtNA <= '1'; + end if; + Set_Addr_To <= "11"; -- BA + when 4 => + when others => + end case; + --}}} + + when "11100" | "11101" | "11110" | "11111" => + --{{{ + -- Absolute X + + if IR(7 downto 6) /= "10" and IR(1 downto 0) = "10" then + -- Read-Modify-Write + LCycle <= "110"; + case to_integer(unsigned(MCycle)) is + when 1 => + Jump <= "01"; + LDBAL <= '1'; + when 2 => + Jump <= "01"; + Set_BusA_To <= "010"; -- X + BAAdd <= "10"; -- BA Add + LDBAH <= '1'; + Set_Addr_To <= "11"; -- BA + when 3 => + BAAdd <= "11"; -- BA adj + Set_Addr_To <= "11"; -- BA + when 4 => + LDDI <= '1'; + Write <= '1'; + Set_Addr_To <= "11"; -- BA + when 5 => + LDALU <= '1'; + SaveP <= '1'; + Write <= '1'; + Set_Addr_To <= "11"; -- BA + when 6 => + when others => + end case; + else + LCycle <= "100"; + if IR(7 downto 6) /= "10" then + LDA <= '1'; + end if; + case to_integer(unsigned(MCycle)) is + when 0 => + when 1 => + Jump <= "01"; + LDBAL <= '1'; + when 2 => + Jump <= "01"; + -- mikej + -- special case 0xBE which uses Y reg as index!! + if (IR = "10111110") then + Set_BusA_To <= "011"; -- Y + else + Set_BusA_To <= "010"; -- X + end if; + BAAdd <= "10"; -- BA Add + LDBAH <= '1'; + Set_Addr_To <= "11"; -- BA + when 3 => + BAAdd <= "11"; -- BA adj + if IR(7 downto 5) = "100" then + Write <= '1'; + else + BreakAtNA <= '1'; + end if; + Set_Addr_To <= "11"; -- BA + when 4 => + when others => + end case; + end if; + --}}} + when others => + end case; + end process; + + process (IR, MCycle) + begin + -- ORA, AND, EOR, ADC, NOP, LD, CMP, SBC + -- ASL, ROL, LSR, ROR, BIT, LD, DEC, INC + case IR(1 downto 0) is + when "00" => + --{{{ + case IR(4 downto 2) is + when "000" | "001" | "011" => + case IR(7 downto 5) is + when "110" | "111" => + -- CP + ALU_Op <= "0110"; + when "101" => + -- LD + ALU_Op <= "0101"; + when "001" => + -- BIT + ALU_Op <= "1100"; + when others => + -- NOP/ST + ALU_Op <= "0100"; + end case; + when "010" => + case IR(7 downto 5) is + when "111" | "110" => + -- IN + ALU_Op <= "1111"; + when "100" => + -- DEY + ALU_Op <= "1110"; + when others => + -- LD + ALU_Op <= "1101"; + end case; + when "110" => + case IR(7 downto 5) is + when "100" => + -- TYA + ALU_Op <= "1101"; + when others => + ALU_Op <= "----"; + end case; + when others => + case IR(7 downto 5) is + when "101" => + -- LD + ALU_Op <= "1101"; + when others => + ALU_Op <= "0100"; + end case; + end case; + --}}} + when "01" => -- OR + --{{{ + ALU_Op(3) <= '0'; + ALU_Op(2 downto 0) <= IR(7 downto 5); + --}}} + when "10" => + --{{{ + ALU_Op(3) <= '1'; + ALU_Op(2 downto 0) <= IR(7 downto 5); + case IR(7 downto 5) is + when "000" => + if IR(4 downto 2) = "110" then + -- INC + ALU_Op <= "1111"; + end if; + when "001" => + if IR(4 downto 2) = "110" then + -- DEC + ALU_Op <= "1110"; + end if; + when "100" => + if IR(4 downto 2) = "010" then + -- TXA + ALU_Op <= "0101"; + else + ALU_Op <= "0100"; + end if; + when others => + end case; + --}}} + when others => + --{{{ + case IR(7 downto 5) is + when "100" => + ALU_Op <= "0100"; + when others => + if MCycle = "000" then + ALU_Op(3) <= '0'; + ALU_Op(2 downto 0) <= IR(7 downto 5); + else + ALU_Op(3) <= '1'; + ALU_Op(2 downto 0) <= IR(7 downto 5); + end if; + end case; + --}}} + end case; + end process; + +end; diff --git a/ORAO_MiST/rtl/T65/T65_Pack.vhd b/ORAO_MiST/rtl/T65/T65_Pack.vhd new file mode 100644 index 00000000..e025e1bf --- /dev/null +++ b/ORAO_MiST/rtl/T65/T65_Pack.vhd @@ -0,0 +1,117 @@ +-- **** +-- T65(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 Bugfixes by ehenciak added +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- 65xx compatible microprocessor core +-- +-- Version : 0246 +-- +-- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t65/ +-- +-- Limitations : +-- +-- File history : +-- + +library IEEE; +use IEEE.std_logic_1164.all; + +package T65_Pack is + + constant Flag_C : integer := 0; + constant Flag_Z : integer := 1; + constant Flag_I : integer := 2; + constant Flag_D : integer := 3; + constant Flag_B : integer := 4; + constant Flag_1 : integer := 5; + constant Flag_V : integer := 6; + constant Flag_N : integer := 7; + + component T65_MCode + port( + Mode : in std_logic_vector(1 downto 0); -- "00" => 6502, "01" => 65C02, "10" => 65816 + IR : in std_logic_vector(7 downto 0); + MCycle : in std_logic_vector(2 downto 0); + P : in std_logic_vector(7 downto 0); + LCycle : out std_logic_vector(2 downto 0); + ALU_Op : out std_logic_vector(3 downto 0); + Set_BusA_To : out std_logic_vector(2 downto 0); -- DI,A,X,Y,S,P + Set_Addr_To : out std_logic_vector(1 downto 0); -- PC Adder,S,AD,BA + Write_Data : out std_logic_vector(2 downto 0); -- DL,A,X,Y,S,P,PCL,PCH + Jump : out std_logic_vector(1 downto 0); -- PC,++,DIDL,Rel + BAAdd : out std_logic_vector(1 downto 0); -- None,DB Inc,BA Add,BA Adj + BreakAtNA : out std_logic; + ADAdd : out std_logic; + AddY : out std_logic; + PCAdd : out std_logic; + Inc_S : out std_logic; + Dec_S : out std_logic; + LDA : out std_logic; + LDP : out std_logic; + LDX : out std_logic; + LDY : out std_logic; + LDS : out std_logic; + LDDI : out std_logic; + LDALU : out std_logic; + LDAD : out std_logic; + LDBAL : out std_logic; + LDBAH : out std_logic; + SaveP : out std_logic; + Write : out std_logic + ); + end component; + + component T65_ALU + port( + Mode : in std_logic_vector(1 downto 0); -- "00" => 6502, "01" => 65C02, "10" => 65C816 + Op : in std_logic_vector(3 downto 0); + BusA : in std_logic_vector(7 downto 0); + BusB : in std_logic_vector(7 downto 0); + P_In : in std_logic_vector(7 downto 0); + P_Out : out std_logic_vector(7 downto 0); + Q : out std_logic_vector(7 downto 0) + ); + end component; + +end; diff --git a/ORAO_MiST/rtl/bram_1port.vhd b/ORAO_MiST/rtl/bram_1port.vhd new file mode 100644 index 00000000..2e6d12f6 --- /dev/null +++ b/ORAO_MiST/rtl/bram_1port.vhd @@ -0,0 +1,45 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +-- synthesis tool should recognize this as 8-bit RAM +-- and optimally synthesize it using FPGA on-chip +-- single port block RAM (BRAM) + +entity bram_1port is + generic( + C_mem_size: integer := 8 -- size in KB + ); + port( + clock: in std_logic; + -- read-write port + rw_port_write: in std_logic; + rw_port_addr: in std_logic_vector(15 downto 0); + rw_port_data_in: in std_logic_vector(7 downto 0); + rw_port_data_out: out std_logic_vector(7 downto 0) + ); +end bram_1port; + +architecture x of bram_1port is + type bram_type is array(0 to (C_mem_size * 1024 - 1)) + of std_logic_vector(7 downto 0); + + signal bram: bram_type; + + attribute ramstyle: string; + attribute ramstyle of bram: signal is "no_rw_check"; + +begin + + process(clock) + begin + if falling_edge(clock) then + if rw_port_write = '1' then + bram(conv_integer(rw_port_addr)) <= rw_port_data_in; + end if; + rw_port_data_out <= bram(conv_integer(rw_port_addr)); + end if; + end process; + +end x; diff --git a/ORAO_MiST/rtl/bram_2port.vhd b/ORAO_MiST/rtl/bram_2port.vhd new file mode 100644 index 00000000..c2096501 --- /dev/null +++ b/ORAO_MiST/rtl/bram_2port.vhd @@ -0,0 +1,57 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +-- synthesis tool should recngnize this as 8-bit RAM +-- and optimally synthesize it using FPGA on-chip +-- dual port block RAM (BRAM) + +entity bram_2port is + generic( + C_mem_size: integer := 8 -- size in KB + ); + port( + clock: in std_logic; + -- read-only port + ro_port_addr: in std_logic_vector(15 downto 0); + ro_port_data_out: out std_logic_vector(7 downto 0); + -- read-write port + rw_port_write: in std_logic; + rw_port_addr: in std_logic_vector(15 downto 0); + rw_port_data_in: in std_logic_vector(7 downto 0); + rw_port_data_out: out std_logic_vector(7 downto 0) + ); +end bram_2port; + +architecture x of bram_2port is + type bram_type is array(0 to (C_mem_size * 1024 - 1)) + of std_logic_vector(7 downto 0); + + signal bram: bram_type; + + + -- Altera Quartus attributes + attribute ramstyle: string; + attribute ramstyle of bram: signal is "no_rw_check"; + + signal ro_data: std_logic_vector(7 downto 0); + signal rw_data: std_logic_vector(7 downto 0); + +begin + + rw_port_data_out <= rw_data; + ro_port_data_out <= ro_data; + + process(clock) + begin + if falling_edge(clock) then + if rw_port_write = '1' then + bram(conv_integer(rw_port_addr)) <= rw_port_data_in(7 downto 0); + end if; + rw_data <= bram(conv_integer(rw_port_addr)); + ro_data <= bram(conv_integer(ro_port_addr)); + end if; + end process; + +end x; diff --git a/ORAO_MiST/rtl/bufferedUART.vhd b/ORAO_MiST/rtl/bufferedUART.vhd new file mode 100644 index 00000000..3a6d3a4b --- /dev/null +++ b/ORAO_MiST/rtl/bufferedUART.vhd @@ -0,0 +1,238 @@ +-- 6850 ACIA COMPATIBLE UART WITH HARDWARE INPUT BUFFER AND HANDSHAKE +-- This file is copyright by Grant Searle 2014 + +-- You are free to use this file in your own projects but must never charge for it nor use it without +-- acknowledgement. +-- Please ask permission from Grant Searle before republishing elsewhere. +-- If you use this file or any part of it, please add an acknowledgement to myself and +-- a link back to my main web site http://searle.hostei.com/grant/ +-- and to the UK101 page at http://searle.hostei.com/grant/uk101FPGA/index.html +-- +-- Please check on the above web pages to see if there are any updates before using this file. +-- If for some reason the page is no longer available, please search for "Grant Searle" +-- on the internet to see if I have moved to another web hosting service. +-- +-- Grant Searle +-- eMail address available on my main web page link above. + +library ieee; + use ieee.std_logic_1164.all; + use ieee.numeric_std.all; + use ieee.std_logic_unsigned.all; + +entity bufferedUART is + port ( + n_wr : in std_logic; + n_rd : in std_logic; + regSel : in std_logic; + dataIn : in std_logic_vector(7 downto 0); + dataOut : out std_logic_vector(7 downto 0); + n_int : out std_logic; + rxClock : in std_logic; -- 16 x baud rate + txClock : in std_logic; -- 16 x baud rate + rxd : in std_logic; + txd : out std_logic; + n_rts : out std_logic :='0'; + n_cts : in std_logic; + n_dcd : in std_logic + ); +end bufferedUART; + +architecture rtl of bufferedUART is + +signal n_int_internal : std_logic := '1'; +signal statusReg : std_logic_vector(7 downto 0) := (others => '0'); +signal controlReg : std_logic_vector(7 downto 0) := "00000000"; + +signal rxBitCount: std_logic_vector(3 DOWNTO 0); +signal txBitCount: std_logic_vector(3 DOWNTO 0); + +signal rxClockCount: std_logic_vector(5 DOWNTO 0); +signal txClockCount: std_logic_vector(5 DOWNTO 0); + +signal rxCurrentByteBuffer: std_logic_vector(7 DOWNTO 0); +signal txBuffer: std_logic_vector(7 DOWNTO 0); + +signal txByteLatch: std_logic_vector(7 DOWNTO 0); + +-- Use bit toggling to determine change of state +-- If byte sent over serial, change "txByteSent" flag from 0-->1, or from 1-->0 +-- If byte written to tx buffer, change "txByteWritten" flag from 0-->1, or from 1-->0 +-- So, if "txByteSent" = "txByteWritten" then no new data to be sent +-- otherwise (if "txByteSent" /= "txByteWritten") then new data available ready to be sent +signal txByteWritten : std_logic := '0'; +signal txByteSent : std_logic := '0'; + +type serialStateType is ( idle, dataBit, stopBit ); +signal rxState : serialStateType; +signal txState : serialStateType; + +signal reset : std_logic := '0'; + +type rxBuffArray is array (0 to 31) of std_logic_vector(7 downto 0); +signal rxBuffer : rxBuffArray; + +signal rxInPointer: integer range 0 to 63 :=0; +signal rxReadPointer: integer range 0 to 63 :=0; +signal rxBuffCount: integer range 0 to 63 :=0; + +begin + -- minimal 6850 compatibility + statusReg(0) <= '0' when rxInPointer=rxReadPointer else '1'; + statusReg(1) <= '1' when txByteWritten=txByteSent else '0'; + statusReg(2) <= n_dcd; + statusReg(3) <= n_cts; + statusReg(7) <= not(n_int_internal); + + -- interrupt mask + n_int <= n_int_internal; + n_int_internal <= '0' when (rxInPointer /= rxReadPointer) and controlReg(7)='1' + else '0' when (txByteWritten=txByteSent) and controlReg(6)='0' and controlReg(5)='1' + else '1'; + +-- raise (inhibit) n_rts when buffer over half-full +-- 6850 implementatit = n_rts <= '1' when controlReg(6)='1' and controlReg(5)='0' else '0'; + + rxBuffCount <= 0 + rxInPointer - rxReadPointer when rxInPointer >= rxReadPointer + else 32 + rxInPointer - rxReadPointer; + n_rts <= '1' when rxBuffCount > 24 else '0'; + + -- control reg + -- 7 6 5 4 3 2 1 0 + -- Rx int en | Tx control (INT/RTS) | Tx control (RTS) | ignored | ignored | ignored | reset A | reset B + -- [ 0 1 ] = RTS LOW + -- RESET = [ 1 1 ] + + -- status reg + -- 7 6 5 4 3 2 1 0 + -- irq | parity error | overrun | frame err | n_cts | n_dcd | tx empty | rx full + -- always 0 (no parity) n/a n/a + + -- write of xxxxxx11 to control reg will reset + reset <= '1' when n_wr = '0' and dataIn(1 downto 0) = "11" and regSel = '0' else '0'; + + process( n_rd ) + begin + if falling_edge(n_rd) then -- Standard CPU - present data on leading edge of rd + if regSel='1' then + dataOut <= rxBuffer(rxReadPointer); + if rxInPointer /= rxReadPointer then + if rxReadPointer < 31 then + rxReadPointer <= rxReadPointer+1; + else + rxReadPointer <= 0; + end if; + end if; + else + dataOut <= statusReg; + end if; + end if; + end process; + + process( n_wr ) + begin + if rising_edge(n_wr) then -- Standard CPU - capture data on trailing edge of wr + if regSel='1' then + if txByteWritten=txByteSent then + txByteWritten <= not txByteWritten; + end if; + txByteLatch <= dataIn; + else + controlReg <= dataIn; + end if; + end if; + end process; + + process( rxClock , reset ) + begin + if reset='1' then + rxState <= idle; + rxBitCount<="0000"; + rxClockCount<="000000"; + + elsif falling_edge(rxClock) then + case rxState is + when idle => + if rxd='1' then -- high so idle + rxBitCount<="0000"; + rxClockCount<="000000"; + else -- low so in start bit + if rxClockCount= 7 then -- wait to half way through bit + rxClockCount<="000000"; + rxState <=dataBit; + else + rxClockCount<=rxClockCount+1; + end if; + end if; + when dataBit => + if rxClockCount= 15 then -- 1 bit later - sample + rxClockCount<="000000"; + rxBitCount <=rxBitCount+1; + rxCurrentByteBuffer <= rxd & rxCurrentByteBuffer(7 downto 1); + if rxBitCount= 7 then -- 8 bits read - handle stop bit + rxState<=stopBit; + end if; + else + rxClockCount<=rxClockCount+1; + end if; + when stopBit => + if rxClockCount= 15 then + rxBuffer(rxInPointer) <= rxCurrentByteBuffer; + if rxInPointer < 31 then + rxInPointer <= rxInPointer+1; + else + rxInPointer <= 0; + end if; + rxClockCount<="000000"; + rxState <=idle; + else + rxClockCount<=rxClockCount+1; + end if; + end case; + end if; + end process; + + process( txClock , reset ) + begin + if reset='1' then + txState <= idle; + txBitCount<="0000"; + txClockCount<="000000"; + txByteSent <= '0'; + + elsif falling_edge(txClock) then + case txState is + when idle => + txd <= '1'; + if (txByteWritten /= txByteSent) and n_cts='0' and n_dcd='0' then + txBuffer <= txByteLatch; + txByteSent <= not txByteSent; + txState <=dataBit; + txd <= '0'; -- start bit + txBitCount<="0000"; + txClockCount<="000000"; + end if; + when dataBit => + if txClockCount= 15 then -- 1 bit later + txClockCount<="000000"; + if txBitCount= 8 then -- 8 bits read - handle stop bit + txd <= '1'; + txState<=stopBit; + else + txd <= txBuffer(0); + txBuffer <= '0' & txBuffer(7 downto 1); + txBitCount <=txBitCount+1; + end if; + else + txClockCount<=txClockCount+1; + end if; + when stopBit => + if txClockCount= 15 then + txState <=idle; + else + txClockCount<=txClockCount+1; + end if; + end case; + end if; + end process; + end rtl; diff --git a/ORAO_MiST/rtl/build_id.tcl b/ORAO_MiST/rtl/build_id.tcl new file mode 100644 index 00000000..938515d8 --- /dev/null +++ b/ORAO_MiST/rtl/build_id.tcl @@ -0,0 +1,35 @@ +# ================================================================================ +# +# Build ID Verilog Module Script +# Jeff Wiencrot - 8/1/2011 +# +# Generates a Verilog module that contains a timestamp, +# from the current build. These values are available from the build_date, build_time, +# physical_address, and host_name output ports of the build_id module in the build_id.v +# Verilog source file. +# +# ================================================================================ + +proc generateBuildID_Verilog {} { + + # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) + set buildDate [ clock format [ clock seconds ] -format %y%m%d ] + set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + + # Create a Verilog file for output + set outputFileName "rtl/build_id.v" + set outputFile [open $outputFileName "w"] + + # Output the Verilog source + puts $outputFile "`define BUILD_DATE \"$buildDate\"" + puts $outputFile "`define BUILD_TIME \"$buildTime\"" + close $outputFile + + # Send confirmation message to the Messages window + post_message "Generated build identification Verilog module: [pwd]/$outputFileName" + post_message "Date: $buildDate" + post_message "Time: $buildTime" +} + +# Comment out this line to prevent the process from automatically executing when the file is sourced: +generateBuildID_Verilog \ No newline at end of file diff --git a/ORAO_MiST/rtl/build_id.v b/ORAO_MiST/rtl/build_id.v new file mode 100644 index 00000000..ffb52837 --- /dev/null +++ b/ORAO_MiST/rtl/build_id.v @@ -0,0 +1,2 @@ +`define BUILD_DATE "180430" +`define BUILD_TIME "162546" diff --git a/ORAO_MiST/rtl/dac.vhd b/ORAO_MiST/rtl/dac.vhd new file mode 100644 index 00000000..83d1861e --- /dev/null +++ b/ORAO_MiST/rtl/dac.vhd @@ -0,0 +1,71 @@ +------------------------------------------------------------------------------- +-- +-- Delta-Sigma DAC +-- +-- $Id: dac.vhd,v 1.1 2005/10/25 21:09:42 arnim Exp $ +-- +-- Refer to Xilinx Application Note XAPP154. +-- +-- This DAC requires an external RC low-pass filter: +-- +-- dac_o 0---XXXXX---+---0 analog audio +-- 3k3 | +-- === 4n7 +-- | +-- GND +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity dac is + + generic ( + msbi_g : integer := 9 + ); + port ( + clk_i : in std_logic; + res_n_i : in std_logic; + dac_i : in std_logic_vector(msbi_g downto 0); + dac_o : out std_logic + ); + +end dac; + +library ieee; +use ieee.numeric_std.all; + +architecture rtl of dac is + + signal DACout_q : std_logic; + signal DeltaAdder_s, + SigmaAdder_s, + SigmaLatch_q, + DeltaB_s : unsigned(msbi_g+2 downto 0); + +begin + + DeltaB_s(msbi_g+2 downto msbi_g+1) <= SigmaLatch_q(msbi_g+2) & + SigmaLatch_q(msbi_g+2); + DeltaB_s(msbi_g downto 0) <= (others => '0'); + + DeltaAdder_s <= unsigned('0' & '0' & dac_i) + DeltaB_s; + + SigmaAdder_s <= DeltaAdder_s + SigmaLatch_q; + + seq: process (clk_i, res_n_i) + begin + if res_n_i = '0' then + SigmaLatch_q <= to_unsigned(2**(msbi_g+1), SigmaLatch_q'length); + DACout_q <= '0'; + + elsif clk_i'event and clk_i = '1' then + SigmaLatch_q <= SigmaAdder_s; + DACout_q <= SigmaLatch_q(msbi_g+2); + end if; + end process seq; + + dac_o <= DACout_q; + +end rtl; diff --git a/ORAO_MiST/rtl/hq2x.sv b/ORAO_MiST/rtl/hq2x.sv new file mode 100644 index 00000000..f17732b6 --- /dev/null +++ b/ORAO_MiST/rtl/hq2x.sv @@ -0,0 +1,454 @@ +// +// +// Copyright (c) 2012-2013 Ludvig Strigeus +// Copyright (c) 2017 Sorgelig +// +// This program is GPL Licensed. See COPYING for the full license. +// +// +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on + +`define BITS_TO_FIT(N) ( \ + N <= 2 ? 0 : \ + N <= 4 ? 1 : \ + N <= 8 ? 2 : \ + N <= 16 ? 3 : \ + N <= 32 ? 4 : \ + N <= 64 ? 5 : \ + N <= 128 ? 6 : \ + N <= 256 ? 7 : \ + N <= 512 ? 8 : \ + N <=1024 ? 9 : 10 ) + +module hq2x_in #(parameter LENGTH, parameter DWIDTH) +( + input clk, + + input [AWIDTH:0] rdaddr, + input rdbuf, + output[DWIDTH:0] q, + + input [AWIDTH:0] wraddr, + input wrbuf, + input [DWIDTH:0] data, + input wren +); + + localparam AWIDTH = `BITS_TO_FIT(LENGTH); + wire [DWIDTH:0] out[2]; + assign q = out[rdbuf]; + + hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); + hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); +endmodule + + +module hq2x_out #(parameter LENGTH, parameter DWIDTH) +( + input clk, + + input [AWIDTH:0] rdaddr, + input [1:0] rdbuf, + output[DWIDTH:0] q, + + input [AWIDTH:0] wraddr, + input [1:0] wrbuf, + input [DWIDTH:0] data, + input wren +); + + localparam AWIDTH = `BITS_TO_FIT(LENGTH*2); + wire [DWIDTH:0] out[4]; + assign q = out[rdbuf]; + + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf2(clk,data,rdaddr,wraddr,wren && (wrbuf == 2),out[2]); + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf3(clk,data,rdaddr,wraddr,wren && (wrbuf == 3),out[3]); +endmodule + + +module hq2x_buf #(parameter NUMWORDS, parameter AWIDTH, parameter DWIDTH) +( + input clock, + input [DWIDTH:0] data, + input [AWIDTH:0] rdaddress, + input [AWIDTH:0] wraddress, + input wren, + output [DWIDTH:0] q +); + + altsyncram altsyncram_component ( + .address_a (wraddress), + .clock0 (clock), + .data_a (data), + .wren_a (wren), + .address_b (rdaddress), + .q_b(q), + .aclr0 (1'b0), + .aclr1 (1'b0), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({(DWIDTH+1){1'b1}}), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .wren_b (1'b0)); + defparam + altsyncram_component.address_aclr_b = "NONE", + altsyncram_component.address_reg_b = "CLOCK0", + altsyncram_component.clock_enable_input_a = "BYPASS", + altsyncram_component.clock_enable_input_b = "BYPASS", + altsyncram_component.clock_enable_output_b = "BYPASS", + altsyncram_component.intended_device_family = "Cyclone III", + altsyncram_component.lpm_type = "altsyncram", + altsyncram_component.numwords_a = NUMWORDS, + altsyncram_component.numwords_b = NUMWORDS, + altsyncram_component.operation_mode = "DUAL_PORT", + altsyncram_component.outdata_aclr_b = "NONE", + altsyncram_component.outdata_reg_b = "UNREGISTERED", + altsyncram_component.power_up_uninitialized = "FALSE", + altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE", + altsyncram_component.widthad_a = AWIDTH+1, + altsyncram_component.widthad_b = AWIDTH+1, + altsyncram_component.width_a = DWIDTH+1, + altsyncram_component.width_b = DWIDTH+1, + altsyncram_component.width_byteena_a = 1; + +endmodule + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +module DiffCheck +( + input [17:0] rgb1, + input [17:0] rgb2, + output result +); + + wire [5:0] r = rgb1[5:1] - rgb2[5:1]; + wire [5:0] g = rgb1[11:7] - rgb2[11:7]; + wire [5:0] b = rgb1[17:13] - rgb2[17:13]; + wire [6:0] t = $signed(r) + $signed(b); + wire [6:0] gx = {g[5], g}; + wire [7:0] y = $signed(t) + $signed(gx); + wire [6:0] u = $signed(r) - $signed(b); + wire [7:0] v = $signed({g, 1'b0}) - $signed(t); + + // if y is inside (-24..24) + wire y_inside = (y < 8'h18 || y >= 8'he8); + + // if u is inside (-4, 4) + wire u_inside = (u < 7'h4 || u >= 7'h7c); + + // if v is inside (-6, 6) + wire v_inside = (v < 8'h6 || v >= 8'hfA); + assign result = !(y_inside && u_inside && v_inside); +endmodule + +module InnerBlend +( + input [8:0] Op, + input [5:0] A, + input [5:0] B, + input [5:0] C, + output [5:0] O +); + + function [8:0] mul6x3; + input [5:0] op1; + input [2:0] op2; + begin + mul6x3 = 9'd0; + if(op2[0]) mul6x3 = mul6x3 + op1; + if(op2[1]) mul6x3 = mul6x3 + {op1, 1'b0}; + if(op2[2]) mul6x3 = mul6x3 + {op1, 2'b00}; + end + endfunction + + wire OpOnes = Op[4]; + wire [8:0] Amul = mul6x3(A, Op[7:5]); + wire [8:0] Bmul = mul6x3(B, {Op[3:2], 1'b0}); + wire [8:0] Cmul = mul6x3(C, {Op[1:0], 1'b0}); + wire [8:0] At = Amul; + wire [8:0] Bt = (OpOnes == 0) ? Bmul : {3'b0, B}; + wire [8:0] Ct = (OpOnes == 0) ? Cmul : {3'b0, C}; + wire [9:0] Res = {At, 1'b0} + Bt + Ct; + assign O = Op[8] ? A : Res[9:4]; +endmodule + +module Blend +( + input [5:0] rule, + input disable_hq2x, + input [17:0] E, + input [17:0] A, + input [17:0] B, + input [17:0] D, + input [17:0] F, + input [17:0] H, + output [17:0] Result +); + + reg [1:0] input_ctrl; + reg [8:0] op; + localparam BLEND0 = 9'b1_xxx_x_xx_xx; // 0: A + localparam BLEND1 = 9'b0_110_0_10_00; // 1: (A * 12 + B * 4) >> 4 + localparam BLEND2 = 9'b0_100_0_10_10; // 2: (A * 8 + B * 4 + C * 4) >> 4 + localparam BLEND3 = 9'b0_101_0_10_01; // 3: (A * 10 + B * 4 + C * 2) >> 4 + localparam BLEND4 = 9'b0_110_0_01_01; // 4: (A * 12 + B * 2 + C * 2) >> 4 + localparam BLEND5 = 9'b0_010_0_11_11; // 5: (A * 4 + (B + C) * 6) >> 4 + localparam BLEND6 = 9'b0_111_1_xx_xx; // 6: (A * 14 + B + C) >> 4 + localparam AB = 2'b00; + localparam AD = 2'b01; + localparam DB = 2'b10; + localparam BD = 2'b11; + wire is_diff; + DiffCheck diff_checker(rule[1] ? B : H, rule[0] ? D : F, is_diff); + + always @* begin + case({!is_diff, rule[5:2]}) + 1,17: {op, input_ctrl} = {BLEND1, AB}; + 2,18: {op, input_ctrl} = {BLEND1, DB}; + 3,19: {op, input_ctrl} = {BLEND1, BD}; + 4,20: {op, input_ctrl} = {BLEND2, DB}; + 5,21: {op, input_ctrl} = {BLEND2, AB}; + 6,22: {op, input_ctrl} = {BLEND2, AD}; + + 8: {op, input_ctrl} = {BLEND0, 2'bxx}; + 9: {op, input_ctrl} = {BLEND0, 2'bxx}; + 10: {op, input_ctrl} = {BLEND0, 2'bxx}; + 11: {op, input_ctrl} = {BLEND1, AB}; + 12: {op, input_ctrl} = {BLEND1, AB}; + 13: {op, input_ctrl} = {BLEND1, AB}; + 14: {op, input_ctrl} = {BLEND1, DB}; + 15: {op, input_ctrl} = {BLEND1, BD}; + + 24: {op, input_ctrl} = {BLEND2, DB}; + 25: {op, input_ctrl} = {BLEND5, DB}; + 26: {op, input_ctrl} = {BLEND6, DB}; + 27: {op, input_ctrl} = {BLEND2, DB}; + 28: {op, input_ctrl} = {BLEND4, DB}; + 29: {op, input_ctrl} = {BLEND5, DB}; + 30: {op, input_ctrl} = {BLEND3, BD}; + 31: {op, input_ctrl} = {BLEND3, DB}; + default: {op, input_ctrl} = 11'bx; + endcase + + // Setting op[8] effectively disables HQ2X because blend will always return E. + if (disable_hq2x) op[8] = 1; + end + + // Generate inputs to the inner blender. Valid combinations. + // 00: E A B + // 01: E A D + // 10: E D B + // 11: E B D + wire [17:0] Input1 = E; + wire [17:0] Input2 = !input_ctrl[1] ? A : + !input_ctrl[0] ? D : B; + + wire [17:0] Input3 = !input_ctrl[0] ? B : D; + InnerBlend inner_blend1(op, Input1[5:0], Input2[5:0], Input3[5:0], Result[5:0]); + InnerBlend inner_blend2(op, Input1[11:6], Input2[11:6], Input3[11:6], Result[11:6]); + InnerBlend inner_blend3(op, Input1[17:12], Input2[17:12], Input3[17:12], Result[17:12]); +endmodule + + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +module Hq2x #(parameter LENGTH, parameter HALF_DEPTH) +( + input clk, + input ce_x4, + input [DWIDTH:0] inputpixel, + input mono, + input disable_hq2x, + input reset_frame, + input reset_line, + input [1:0] read_y, + input [AWIDTH+1:0] read_x, + output [DWIDTH:0] outpixel +); + + +localparam AWIDTH = `BITS_TO_FIT(LENGTH); +localparam DWIDTH = HALF_DEPTH ? 8 : 17; + +wire [5:0] hqTable[256] = '{ + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, + 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 35, 35, 23, 15, 7, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, + 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 51, 35, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 35, 35, 23, 61, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 7, 35, 23, 61, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 58, 23, 15, 51, 35, 23, 61, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 39, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 39, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 7, 35, 23, 15, 7, 43 +}; + +reg [17:0] Prev0, Prev1, Prev2, Curr0, Curr1, Next0, Next1, Next2; +reg [17:0] A, B, D, F, G, H; +reg [7:0] pattern, nextpatt; +reg [1:0] i; +reg [7:0] y; + +wire curbuf = y[0]; +reg prevbuf = 0; +wire iobuf = !curbuf; + +wire diff0, diff1; +DiffCheck diffcheck0(Curr1, (i == 0) ? Prev0 : (i == 1) ? Curr0 : (i == 2) ? Prev2 : Next1, diff0); +DiffCheck diffcheck1(Curr1, (i == 0) ? Prev1 : (i == 1) ? Next0 : (i == 2) ? Curr2 : Next2, diff1); + +wire [7:0] new_pattern = {diff1, diff0, pattern[7:2]}; + +wire [17:0] X = (i == 0) ? A : (i == 1) ? Prev1 : (i == 2) ? Next1 : G; +wire [17:0] blend_result; +Blend blender(hqTable[nextpatt], disable_hq2x, Curr0, X, B, D, F, H, blend_result); + +reg Curr2_addr1; +reg [AWIDTH:0] Curr2_addr2; +wire [17:0] Curr2 = HALF_DEPTH ? h2rgb(Curr2tmp) : Curr2tmp; +wire [DWIDTH:0] Curr2tmp; + +reg [AWIDTH:0] wrin_addr2; +reg [DWIDTH:0] wrpix; +reg wrin_en; + +function [17:0] h2rgb; + input [8:0] v; +begin + h2rgb = mono ? {v[5:3],v[2:0], v[5:3],v[2:0], v[5:3],v[2:0]} : {v[8:6],v[8:6],v[5:3],v[5:3],v[2:0],v[2:0]}; +end +endfunction + +function [8:0] rgb2h; + input [17:0] v; +begin + rgb2h = mono ? {3'b000, v[17:15], v[14:12]} : {v[17:15], v[11:9], v[5:3]}; +end +endfunction + +hq2x_in #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_in +( + .clk(clk), + + .rdaddr(Curr2_addr2), + .rdbuf(Curr2_addr1), + .q(Curr2tmp), + + .wraddr(wrin_addr2), + .wrbuf(iobuf), + .data(wrpix), + .wren(wrin_en) +); + +reg [1:0] wrout_addr1; +reg [AWIDTH+1:0] wrout_addr2; +reg wrout_en; +reg [DWIDTH:0] wrdata; + +hq2x_out #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_out +( + .clk(clk), + + .rdaddr(read_x), + .rdbuf(read_y), + .q(outpixel), + + .wraddr(wrout_addr2), + .wrbuf(wrout_addr1), + .data(wrdata), + .wren(wrout_en) +); + +always @(posedge clk) begin + reg [AWIDTH:0] offs; + reg old_reset_line; + reg old_reset_frame; + + wrout_en <= 0; + wrin_en <= 0; + + if(ce_x4) begin + + pattern <= new_pattern; + + if(~&offs) begin + if (i == 0) begin + Curr2_addr1 <= prevbuf; + Curr2_addr2 <= offs; + end + if (i == 1) begin + Prev2 <= Curr2; + Curr2_addr1 <= curbuf; + Curr2_addr2 <= offs; + end + if (i == 2) begin + Next2 <= HALF_DEPTH ? h2rgb(inputpixel) : inputpixel; + wrpix <= inputpixel; + wrin_addr2 <= offs; + wrin_en <= 1; + end + if (i == 3) begin + offs <= offs + 1'd1; + end + + if(HALF_DEPTH) wrdata <= rgb2h(blend_result); + else wrdata <= blend_result; + + wrout_addr1 <= {curbuf, i[1]}; + wrout_addr2 <= {offs, i[1]^i[0]}; + wrout_en <= 1; + end + + if(i==3) begin + nextpatt <= {new_pattern[7:6], new_pattern[3], new_pattern[5], new_pattern[2], new_pattern[4], new_pattern[1:0]}; + {A, G} <= {Prev0, Next0}; + {B, F, H, D} <= {Prev1, Curr2, Next1, Curr0}; + {Prev0, Prev1} <= {Prev1, Prev2}; + {Curr0, Curr1} <= {Curr1, Curr2}; + {Next0, Next1} <= {Next1, Next2}; + end else begin + nextpatt <= {nextpatt[5], nextpatt[3], nextpatt[0], nextpatt[6], nextpatt[1], nextpatt[7], nextpatt[4], nextpatt[2]}; + {B, F, H, D} <= {F, H, D, B}; + end + + i <= i + 1'b1; + if(old_reset_line && ~reset_line) begin + old_reset_frame <= reset_frame; + offs <= 0; + i <= 0; + y <= y + 1'd1; + prevbuf <= curbuf; + if(old_reset_frame & ~reset_frame) begin + y <= 0; + prevbuf <= 0; + end + end + + old_reset_line <= reset_line; + end +end + +endmodule // Hq2x diff --git a/ORAO_MiST/rtl/keyboard.v b/ORAO_MiST/rtl/keyboard.v new file mode 100644 index 00000000..8dde73d6 --- /dev/null +++ b/ORAO_MiST/rtl/keyboard.v @@ -0,0 +1,79 @@ + + +module keyboard +( + input clk, + input reset, + input ps2_kbd_clk, + input ps2_kbd_data, + + output reg[7:0] joystick +); + +reg [11:0] shift_reg = 12'hFFF; +wire[11:0] kdata = {ps2_kbd_data,shift_reg[11:1]}; +wire [7:0] kcode = kdata[9:2]; +reg release_btn = 0; + +reg [7:0] code; +reg input_strobe = 0; + +always @(negedge clk) begin + reg old_reset = 0; + + old_reset <= reset; + + if(~old_reset & reset)begin + joystick <= 0; + end + + if(input_strobe) begin + case(code) + 'h16: joystick[4] <= ~release_btn; // 1 + 'h1E: joystick[5] <= ~release_btn; // 2 + 'h26: joystick[6] <= ~release_btn; // 3 + 'h25: joystick[7] <= ~release_btn; // 4 + + 'h75: joystick[3] <= ~release_btn; // arrow up + 'h72: joystick[2] <= ~release_btn; // arrow down + 'h6B: joystick[1] <= ~release_btn; // arrow left + 'h74: joystick[0] <= ~release_btn; // arrow right + endcase + end +end + +always @(posedge clk) begin + reg [3:0] prev_clk = 0; + reg old_reset = 0; + reg action = 0; + + old_reset <= reset; + input_strobe <= 0; + + if(~old_reset & reset)begin + prev_clk <= 0; + shift_reg <= 12'hFFF; + end else begin + prev_clk <= {ps2_kbd_clk,prev_clk[3:1]}; + if(prev_clk == 1) begin + if (kdata[11] & ^kdata[10:2] & ~kdata[1] & kdata[0]) begin + shift_reg <= 12'hFFF; + if (kcode == 8'he0) ; + // Extended key code follows + else if (kcode == 8'hf0) + // Release code follows + action <= 1; + else begin + // Cancel extended/release flags for next time + action <= 0; + release_btn <= action; + code <= kcode; + input_strobe <= 1; + end + end else begin + shift_reg <= kdata; + end + end + end +end +endmodule diff --git a/ORAO_MiST/rtl/mist_io.v b/ORAO_MiST/rtl/mist_io.v new file mode 100644 index 00000000..ad233a3b --- /dev/null +++ b/ORAO_MiST/rtl/mist_io.v @@ -0,0 +1,491 @@ +// +// mist_io.v +// +// mist_io for the MiST board +// http://code.google.com/p/mist-board/ +// +// Copyright (c) 2014 Till Harbaum +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +/////////////////////////////////////////////////////////////////////// + +// +// Use buffer to access SD card. It's time-critical part. +// Made module synchroneous with 2 clock domains: clk_sys and SPI_SCK +// (Sorgelig) +// +// for synchronous projects default value for PS2DIV is fine for any frequency of system clock. +// clk_ps2 = clk_sys/(PS2DIV*2) +// + +module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) +( + + // parameter STRLEN and the actual length of conf_str have to match + input [(8*STRLEN)-1:0] conf_str, + + // Global clock. It should be around 100MHz (higher is better). + input clk_sys, + + // Global SPI clock from ARM. 24MHz + input SPI_SCK, + + input CONF_DATA0, + input SPI_SS2, + output SPI_DO, + input SPI_DI, + + output reg [7:0] joystick_0, + output reg [7:0] joystick_1, + output reg [15:0] joystick_analog_0, + output reg [15:0] joystick_analog_1, + output [1:0] buttons, + output [1:0] switches, + output scandoubler_disable, + output ypbpr, + + output reg [31:0] status, + + // SD config + input sd_conf, + input sd_sdhc, + output img_mounted, // signaling that new image has been mounted + output reg [31:0] img_size, // size of image in bytes + + // SD block level access + input [31:0] sd_lba, + input sd_rd, + input sd_wr, + output reg sd_ack, + output reg sd_ack_conf, + + // SD byte level access. Signals for 2-PORT altsyncram. + output reg [8:0] sd_buff_addr, + output reg [7:0] sd_buff_dout, + input [7:0] sd_buff_din, + output reg sd_buff_wr, + + // ps2 keyboard emulation + output ps2_kbd_clk, + output reg ps2_kbd_data, + output ps2_mouse_clk, + output reg ps2_mouse_data, + input ps2_caps_led, + + // ARM -> FPGA download + output reg ioctl_download = 0, // signal indicating an active download + output reg [7:0] ioctl_index, // menu index used to upload the file + output ioctl_wr, + output reg [24:0] ioctl_addr, + output reg [7:0] ioctl_dout +); + +reg [7:0] b_data; +reg [6:0] sbuf; +reg [7:0] cmd; +reg [2:0] bit_cnt; // counts bits 0-7 0-7 ... +reg [9:0] byte_cnt; // counts bytes +reg [7:0] but_sw; +reg [2:0] stick_idx; + +reg mount_strobe = 0; +assign img_mounted = mount_strobe; + +assign buttons = but_sw[1:0]; +assign switches = but_sw[3:2]; +assign scandoubler_disable = but_sw[4]; +assign ypbpr = but_sw[5]; + +wire [7:0] spi_dout = { sbuf, SPI_DI}; + +// this variant of user_io is for 8 bit cores (type == a4) only +wire [7:0] core_type = 8'ha4; + +// command byte read by the io controller +wire [7:0] sd_cmd = { 4'h5, sd_conf, sd_sdhc, sd_wr, sd_rd }; + +reg spi_do; +assign SPI_DO = CONF_DATA0 ? 1'bZ : spi_do; + +wire [7:0] kbd_led = { 2'b01, 4'b0000, ps2_caps_led, 1'b1}; + +// drive MISO only when transmitting core id +always@(negedge SPI_SCK) begin + if(!CONF_DATA0) begin + // first byte returned is always core type, further bytes are + // command dependent + if(byte_cnt == 0) begin + spi_do <= core_type[~bit_cnt]; + + end else begin + case(cmd) + // reading config string + 8'h14: begin + // returning a byte from string + if(byte_cnt < STRLEN + 1) spi_do <= conf_str[{STRLEN - byte_cnt,~bit_cnt}]; + else spi_do <= 0; + end + + // reading sd card status + 8'h16: begin + if(byte_cnt == 1) spi_do <= sd_cmd[~bit_cnt]; + else if((byte_cnt >= 2) && (byte_cnt < 6)) spi_do <= sd_lba[{5-byte_cnt, ~bit_cnt}]; + else spi_do <= 0; + end + + // reading sd card write data + 8'h18: + spi_do <= b_data[~bit_cnt]; + + // reading keyboard LED status + 8'h1f: + spi_do <= kbd_led[~bit_cnt]; + + default: + spi_do <= 0; + endcase + end + end +end + +reg b_wr2,b_wr3; +always @(negedge clk_sys) begin + b_wr3 <= b_wr2; + sd_buff_wr <= b_wr3; +end + +// SPI receiver +always@(posedge SPI_SCK or posedge CONF_DATA0) begin + + if(CONF_DATA0) begin + b_wr2 <= 0; + bit_cnt <= 0; + byte_cnt <= 0; + sd_ack <= 0; + sd_ack_conf <= 0; + end else begin + b_wr2 <= 0; + + sbuf <= spi_dout[6:0]; + bit_cnt <= bit_cnt + 1'd1; + if(bit_cnt == 5) begin + if (byte_cnt == 0) sd_buff_addr <= 0; + if((byte_cnt != 0) & (sd_buff_addr != 511)) sd_buff_addr <= sd_buff_addr + 1'b1; + if((byte_cnt == 1) & ((cmd == 8'h17) | (cmd == 8'h19))) sd_buff_addr <= 0; + end + + // finished reading command byte + if(bit_cnt == 7) begin + if(~&byte_cnt) byte_cnt <= byte_cnt + 8'd1; + if(byte_cnt == 0) begin + cmd <= spi_dout; + + if(spi_dout == 8'h19) begin + sd_ack_conf <= 1; + sd_buff_addr <= 0; + end + if((spi_dout == 8'h17) || (spi_dout == 8'h18)) begin + sd_ack <= 1; + sd_buff_addr <= 0; + end + if(spi_dout == 8'h18) b_data <= sd_buff_din; + + mount_strobe <= 0; + + end else begin + + case(cmd) + // buttons and switches + 8'h01: but_sw <= spi_dout; + 8'h02: joystick_0 <= spi_dout; + 8'h03: joystick_1 <= spi_dout; + + // store incoming ps2 mouse bytes + 8'h04: begin + ps2_mouse_fifo[ps2_mouse_wptr] <= spi_dout; + ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1; + end + + // store incoming ps2 keyboard bytes + 8'h05: begin + ps2_kbd_fifo[ps2_kbd_wptr] <= spi_dout; + ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1; + end + + 8'h15: status[7:0] <= spi_dout; + + // send SD config IO -> FPGA + // flag that download begins + // sd card knows data is config if sd_dout_strobe is asserted + // with sd_ack still being inactive (low) + 8'h19, + // send sector IO -> FPGA + // flag that download begins + 8'h17: begin + sd_buff_dout <= spi_dout; + b_wr2 <= 1; + end + + 8'h18: b_data <= sd_buff_din; + + // joystick analog + 8'h1a: begin + // first byte is joystick index + if(byte_cnt == 1) stick_idx <= spi_dout[2:0]; + else if(byte_cnt == 2) begin + // second byte is x axis + if(stick_idx == 0) joystick_analog_0[15:8] <= spi_dout; + else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_dout; + end else if(byte_cnt == 3) begin + // third byte is y axis + if(stick_idx == 0) joystick_analog_0[7:0] <= spi_dout; + else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_dout; + end + end + + // notify image selection + 8'h1c: mount_strobe <= 1; + + // send image info + 8'h1d: if(byte_cnt<5) img_size[(byte_cnt-1)<<3 +:8] <= spi_dout; + + // status, 32bit version + 8'h1e: if(byte_cnt<5) status[(byte_cnt-1)<<3 +:8] <= spi_dout; + default: ; + endcase + end + end + end +end + + +/////////////////////////////// PS2 /////////////////////////////// +// 8 byte fifos to store ps2 bytes +localparam PS2_FIFO_BITS = 3; + +reg clk_ps2; +always @(negedge clk_sys) begin + integer cnt; + cnt <= cnt + 1'd1; + if(cnt == PS2DIV) begin + clk_ps2 <= ~clk_ps2; + cnt <= 0; + end +end + +// keyboard +reg [7:0] ps2_kbd_fifo[1<= 1)&&(ps2_kbd_tx_state < 9)) begin + ps2_kbd_data <= ps2_kbd_tx_byte[0]; // data bits + ps2_kbd_tx_byte[6:0] <= ps2_kbd_tx_byte[7:1]; // shift down + if(ps2_kbd_tx_byte[0]) + ps2_kbd_parity <= !ps2_kbd_parity; + end + + // transmission of parity + if(ps2_kbd_tx_state == 9) ps2_kbd_data <= ps2_kbd_parity; + + // transmission of stop bit + if(ps2_kbd_tx_state == 10) ps2_kbd_data <= 1; // stop bit is 1 + + // advance state machine + if(ps2_kbd_tx_state < 11) ps2_kbd_tx_state <= ps2_kbd_tx_state + 1'd1; + else ps2_kbd_tx_state <= 0; + end + end +end + +// mouse +reg [7:0] ps2_mouse_fifo[1<= 1)&&(ps2_mouse_tx_state < 9)) begin + ps2_mouse_data <= ps2_mouse_tx_byte[0]; // data bits + ps2_mouse_tx_byte[6:0] <= ps2_mouse_tx_byte[7:1]; // shift down + if(ps2_mouse_tx_byte[0]) + ps2_mouse_parity <= !ps2_mouse_parity; + end + + // transmission of parity + if(ps2_mouse_tx_state == 9) ps2_mouse_data <= ps2_mouse_parity; + + // transmission of stop bit + if(ps2_mouse_tx_state == 10) ps2_mouse_data <= 1; // stop bit is 1 + + // advance state machine + if(ps2_mouse_tx_state < 11) ps2_mouse_tx_state <= ps2_mouse_tx_state + 1'd1; + else ps2_mouse_tx_state <= 0; + end + end +end + + +/////////////////////////////// DOWNLOADING /////////////////////////////// + +reg [7:0] data_w; +reg [24:0] addr_w; +reg rclk = 0; + +localparam UIO_FILE_TX = 8'h53; +localparam UIO_FILE_TX_DAT = 8'h54; +localparam UIO_FILE_INDEX = 8'h55; + +// data_io has its own SPI interface to the io controller +always@(posedge SPI_SCK, posedge SPI_SS2) begin + reg [6:0] sbuf; + reg [7:0] cmd; + reg [4:0] cnt; + reg [24:0] addr; + + if(SPI_SS2) cnt <= 0; + else begin + rclk <= 0; + + // don't shift in last bit. It is evaluated directly + // when writing to ram + if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI}; + + // increase target address after write + if(rclk) addr <= addr + 1'd1; + + // count 0-7 8-15 8-15 ... + if(cnt < 15) cnt <= cnt + 1'd1; + else cnt <= 8; + + // finished command byte + if(cnt == 7) cmd <= {sbuf, SPI_DI}; + + // prepare/end transmission + if((cmd == UIO_FILE_TX) && (cnt == 15)) begin + // prepare + if(SPI_DI) begin + addr <= 0; + ioctl_download <= 1; + end else begin + addr_w <= addr; + ioctl_download <= 0; + end + end + + // command 0x54: UIO_FILE_TX + if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin + addr_w <= addr; + data_w <= {sbuf, SPI_DI}; + rclk <= 1; + end + + // expose file (menu) index + if((cmd == UIO_FILE_INDEX) && (cnt == 15)) ioctl_index <= {sbuf, SPI_DI}; + end +end + +assign ioctl_wr = |ioctl_wrd; +reg [1:0] ioctl_wrd; + +always@(negedge clk_sys) begin + reg rclkD, rclkD2; + + rclkD <= rclk; + rclkD2 <= rclkD; + ioctl_wrd<= {ioctl_wrd[0],1'b0}; + + if(rclkD & ~rclkD2) begin + ioctl_dout <= data_w; + ioctl_addr <= addr_w; + ioctl_wrd <= 2'b11; + end +end + +endmodule diff --git a/ORAO_MiST/rtl/orao.vhd b/ORAO_MiST/rtl/orao.vhd new file mode 100644 index 00000000..6f5907ba --- /dev/null +++ b/ORAO_MiST/rtl/orao.vhd @@ -0,0 +1,263 @@ +-- This file is copyright by Grant Searle 2014 +-- You are free to use this file in your own projects but must never charge for it nor use it without +-- acknowledgement. +-- Please ask permission from Grant Searle before republishing elsewhere. +-- If you use this file or any part of it, please add an acknowledgement to myself and +-- a link back to my main web site http://searle.hostei.com/grant/ +-- and to the UK101 page at http://searle.hostei.com/grant/uk101FPGA/index.html +-- +-- Please check on the above web pages to see if there are any updates before using this file. +-- If for some reason the page is no longer available, please search for "Grant Searle" +-- on the internet to see if I have moved to another web hosting service. +-- +-- Grant Searle +-- eMail address available on my main web page link above. +-- +-- Emard modified original UK101 glue into Orao glue +-- video module not instantiated here +-- video bus used instead. +-- to avoid routing clock +-- thru this module and vendor specific modules + +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_ARITH.all; +use IEEE.STD_LOGIC_UNSIGNED.all; + +entity orao is + generic ( + + ram_kb: integer := 32; -- KB RAM this computer will have + clk_mhz : integer := 25; -- clock freq in MHz + serial_baud : integer := 9600 -- output serial baudrate + ); + port( + n_reset : in std_logic; + clk : in std_logic; + clkvid : in std_logic; + video : out std_logic; + hs : out std_logic; + vs : out std_logic; + cs : out std_logic; + rxd : in std_logic; + txd : out std_logic; + rts : out std_logic; + key_b : in std_logic; + key_c : in std_logic; + key_enter : in std_logic; + ps2clk : in std_logic; + ps2data : in std_logic + ); +end orao; + +architecture struct of orao is + + signal n_WR : std_logic; + signal cpuAddress : std_logic_vector(15 downto 0); + signal cpuDataOut : std_logic_vector(7 downto 0); + signal cpuDataIn : std_logic_vector(7 downto 0); + + signal basRomData : std_logic_vector(7 downto 0); + signal ramDataOut : std_logic_vector(7 downto 0); + signal monitorRomData : std_logic_vector(7 downto 0); + signal aciaData : std_logic_vector(7 downto 0); + + signal n_memWR : std_logic; + + signal n_dispRamCS : std_logic; + signal n_ramCS : std_logic; + signal n_basRomCS : std_logic; + signal n_monitorRomCS : std_logic; + signal n_aciaCS : std_logic; + signal n_kbCS : std_logic; + + signal dispAddrB : std_logic_vector(12 downto 0); + signal dispRamDataOutA : std_logic_vector(7 downto 0); + signal dispRamDataOutB : std_logic_vector(7 downto 0); + signal dispData : std_logic_vector(7 downto 0); + signal charAddr : std_logic_vector(10 downto 0); + signal charData : std_logic_vector(7 downto 0); + signal videoAddr : std_logic_vector(12 downto 0); + signal videoData : std_logic_vector(7 downto 0); + signal serialClkCount: std_logic_vector(14 downto 0); + signal cpuClkCount : std_logic_vector(5 downto 0); + signal cpuClock : std_logic; + signal serialClock : std_logic; + + signal kbReadData : std_logic_vector(7 downto 0); + + signal uart_n_wr : std_logic; + signal uart_n_rd : std_logic; + + type matrix8x8 is array (7 downto 0) of std_logic_vector(7 downto 0); + constant test_pattern : matrix8x8 := (x"82", x"44", x"28", x"10", x"28", x"44", x"82", x"01"); + +begin + + n_memWR <= not(cpuClock) nand (not n_WR); + + -- 0x0000, 0x03FF, '0th block', + -- 0x0400, 0x5FFF, 'user RAM (23K)', + -- 0x6000, 0x7FFF, 'video RAM', + -- 0x8000, 0x9FFF, 'system locations (keyboard etc.)', + -- 0xA000, 0xAFFF, 'extension (maybe ROM cartridge)', + -- 0xB000, 0xBFFF, 'DOS', + -- 0xC000, 0xDFFF, 'BASIC ROM', + -- 0xE000, 0xFFFF, 'system ROM', + + n_dispRamCS <= '0' when cpuAddress(15 downto 13) = "011" else '1'; --8k @ 0x6000 + n_basRomCS <= '0' when cpuAddress(15 downto 13) = "110" else '1'; --8k @ 0xC000 + n_monitorRomCS <= '0' when cpuAddress(15 downto 13) = "111" else '1'; --8K @ 0xE000 + n_ramCS <= '0' when conv_integer(cpuAddress(15 downto 12)) < ram_kb/4 else '1'; + n_aciaCS <= '0' when cpuAddress(15 downto 1) = "100010000000000" else '1'; + n_kbCS <= '0' when cpuAddress(15 downto 11) = "10000" else '1'; + + cpuDataIn <= + basRomData when n_basRomCS = '0' else + monitorRomData when n_monitorRomCS = '0' else + aciaData when n_aciaCS = '0' else + ramDataOut when n_ramCS = '0' else + kbReadData when n_kbCS='0' else + dispRamDataOutA when n_dispRamCS = '0' + else x"FF"; + + u1 : entity work.T65 + port map( + Enable => '1', + Mode => "00", + Res_n => n_reset, + Clk => cpuClock, + Rdy => '1', + Abort_n => '1', + IRQ_n => '1', + NMI_n => '1', + SO_n => '1', + R_W_n => n_WR, + A(23 downto 16) => open, + A(15 downto 0) => cpuAddress, + DI => cpuDataIn, + DO => cpuDataOut + ); + + u2 : entity work.rom_bas -- 8KB + port map( + clk => clk, + addr(12 downto 0) => cpuAddress(12 downto 0), + data => basRomData + ); + + u2b : entity work.rom_crt -- 8KB + port map( + clk => clk, + addr(12 downto 0) => cpuAddress(12 downto 0), + data => monitorRomData + ); + + u3: entity work.bram_1port + generic map( + C_mem_size => ram_kb + ) + port map + ( + clock => clk, + rw_port_addr(15) => '0', + rw_port_addr(14 downto 0) => cpuAddress(14 downto 0), + rw_port_write => not(n_memWR or n_ramCS), + rw_port_data_in => cpuDataOut, + rw_port_data_out => ramDataOut + ); + + + uart_n_wr <= n_aciaCS or cpuClock or n_WR; + uart_n_rd <= n_aciaCS or cpuClock or (not n_WR); + + u5: entity work.bufferedUART + port map( + n_wr => uart_n_wr, + n_rd => uart_n_rd, + regSel => cpuAddress(0), + dataIn => cpuDataOut, + dataOut => aciaData, + rxClock => serialClock, + txClock => serialClock, + rxd => rxd, + txd => txd, + n_cts => '0', + n_dcd => '0', + n_rts => rts + ); + + -- clock divider for CPU and serial port + process (clk) + begin + if rising_edge(clk) then + if cpuClkCount < clk_mhz-1 then + cpuClkCount <= cpuClkCount + 1; + else + cpuClkCount <= (others=>'0'); + end if; + if cpuClkCount < clk_mhz/2-1 then + cpuClock <= '0'; + else + cpuClock <= '1'; + end if; + + if serialClkCount < 1000000*clk_mhz/(serial_baud*16)-1 then + serialClkCount <= serialClkCount + 1; + else + serialClkCount <= (others => '0'); + end if; + if serialClkCount < 1000000*clk_mhz/(serial_baud*32)-1 then + serialClock <= '0'; + else + serialClock <= '1'; + end if; + end if; + end process; + + -- test grid on screen during the reset is pressed + videoData <= dispRamDataOutB when n_reset = '1' + else test_pattern(conv_integer(videoAddr(7 downto 5))); + + u8_generic: entity work.bram_2port + generic map( + C_mem_size => 8 + ) + port map + ( + clock => clk, + rw_port_addr(15 downto 13) => (others => '0'), + rw_port_addr(12 downto 0) => cpuAddress(12 downto 0), + rw_port_write => not(n_memWR or n_dispRamCS), + rw_port_data_in => cpuDataOut, + rw_port_data_out => dispRamDataOutA, + ro_port_addr(15 downto 13) => (others => '0'), + ro_port_addr(12 downto 0) => videoAddr, + ro_port_data_out => dispRamDataOutB + ); + + u9 : entity work.orao_keyboard_buttons + port map( + CLK => clk, + nRESET => n_reset, + PS2_CLK => ps2clk, + PS2_DATA => ps2data, + key_b => key_b, + key_c => key_c, + key_enter => key_enter, + A => cpuAddress(10 downto 0), + Q => kbReadData + ); + + vga : entity work.OraoGraphDisplay8K + port map( + dispAddr => videoAddr, + dispData => videoData, + clk => clkvid, + video => video, + h_sync => hs, + v_sync => vs, + sync => cs + ); + +end; diff --git a/ORAO_MiST/rtl/orao_keyboard_buttons.vhd b/ORAO_MiST/rtl/orao_keyboard_buttons.vhd new file mode 100644 index 00000000..feb797ba --- /dev/null +++ b/ORAO_MiST/rtl/orao_keyboard_buttons.vhd @@ -0,0 +1,402 @@ +-- This file was created and maintaned by Grant Searle 2014 +-- You are free to use this file in your own projects but must never charge for it nor use it without +-- acknowledgement. +-- Please ask permission from Grant Searle before republishing elsewhere. +-- If you use this file or any part of it, please add an acknowledgement to myself and +-- a link back to my main web site http://searle.hostei.com/grant/ +-- and to the UK101 page at http://searle.hostei.com/grant/uk101FPGA/index.html +-- +-- Please check on the above web pages to see if there are any updates before using this file. +-- If for some reason the page is no longer available, please search for "Grant Searle" +-- on the internet to see if I have moved to another web hosting service. +-- +-- Grant Searle +-- eMail address available on my main web page link above. + +-- Emard +-- buttons for B, C, ENTER + +-- Adapted from a creation by Mike Stirling. +-- Modifications are copyright by Grant Searle 2014. + +-- Original copyright message shown below: + +-- ZX Spectrum for Altera DE1 +-- +-- Copyright (c) 2009-2011 Mike Stirling +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- * Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- * Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- * Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written agreement from the author. +-- +-- * License is granted for non-commercial use only. A fee may not be charged +-- for redistributions as source code or in synthesized/hardware form without +-- specific prior written agreement from the author. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- + +-- 4 buttons to UK101 matrix conversion +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +entity orao_keyboard_buttons is +generic ( + ps2set : integer := 2 -- keycode scanset +); +port ( + CLK : in std_logic; + nRESET : in std_logic; + + -- PS/2 interface + PS2_CLK : in std_logic; + PS2_DATA : in std_logic; + + -- input keys + key_b : in std_logic; + key_c : in std_logic; + key_enter : in std_logic; + + -- select bus + A : in std_logic_vector(10 downto 0); + -- matrix return + Q : out std_logic_vector(7 downto 0); + + -- miscellaneous + -- FN keys passed out as general signals (momentary and toggled versions) + FNkeys : out std_logic_vector(12 downto 0); + FNtoggledKeys : out std_logic_vector(12 downto 0) + ); +end orao_keyboard_buttons; + +architecture rtl of orao_keyboard_buttons is + +-- PS/2 interface +component ps2_intf is +generic (filter_length : positive := 8); +port( + CLK : in std_logic; + nRESET : in std_logic; + + -- PS/2 interface (could be bi-dir) + PS2_CLK : in std_logic; + PS2_DATA : in std_logic; + + -- Byte-wide data interface - only valid for one clock + -- so must be latched externally if required + DATA : out std_logic_vector(7 downto 0); + VALID : out std_logic; + ERROR : out std_logic + ); +end component; + +-- Interface to PS/2 block +signal keyb_data : std_logic_vector(7 downto 0); +signal keyb_valid : std_logic; +signal keyb_error : std_logic; + +-- Internal signals +type key_matrix is array (10 downto 1) of std_logic_vector(7 downto 0); +signal keys : key_matrix; +signal release : std_logic; +signal extended : std_logic; +signal shiftPressed : std_logic; + +signal FNkeysSig : std_logic_vector(12 downto 0) := (others => '0'); +signal FNtoggledKeysSig : std_logic_vector(12 downto 0) := (others => '0'); + +signal KEYB : std_logic_vector(7 downto 0); + +-- PS/2 scan codes which are different in set2 and set3 + +-- PS/2 Set2 +constant scan_zh : std_logic_vector(7 downto 0) := x"5d"; +constant scan_left_ctrl : std_logic_vector(7 downto 0) := x"14"; +constant scan_right_ctrl : std_logic_vector(7 downto 0) := x"14"; -- extended +constant scan_ltgt : std_logic_vector(7 downto 0) := x"5d"; +constant scan_arrow_left : std_logic_vector(7 downto 0) := x"6b"; +constant scan_arrow_right : std_logic_vector(7 downto 0) := x"74"; +constant scan_arrow_up : std_logic_vector(7 downto 0) := x"75"; +constant scan_arrow_down : std_logic_vector(7 downto 0) := x"72"; +constant scan_f1 : std_logic_vector(7 downto 0) := x"05"; +constant scan_f2 : std_logic_vector(7 downto 0) := x"06"; +constant scan_f3 : std_logic_vector(7 downto 0) := x"04"; +constant scan_f4 : std_logic_vector(7 downto 0) := x"0c"; + +-- PS/2 Set3 +--constant scan_zh : std_logic_vector(7 downto 0) := x"5c"; +--constant scan_left_ctrl : std_logic_vector(7 downto 0) := x"11"; +--constant scan_right_ctrl : std_logic_vector(7 downto 0) := x"58"; +--constant scan_ltgt : std_logic_vector(7 downto 0) := x"13"; +--constant scan_arrow_left : std_logic_vector(7 downto 0) := x"61"; +--constant scan_arrow_right : std_logic_vector(7 downto 0) := x"6a"; +--constant scan_arrow_up : std_logic_vector(7 downto 0) := x"63"; +--constant scan_arrow_down : std_logic_vector(7 downto 0) := x"60"; +--constant scan_f1 : std_logic_vector(7 downto 0) := x"07"; +--constant scan_f2 : std_logic_vector(7 downto 0) := x"0f"; +--constant scan_f3 : std_logic_vector(7 downto 0) := x"17"; +--constant scan_f4 : std_logic_vector(7 downto 0) := x"1f"; + +begin + + ps2 : ps2_intf port map ( + CLK, nRESET, + PS2_CLK, PS2_DATA, + keyb_data, keyb_valid, keyb_error + ); + + -- shiftPressed <= keys(0)(2) or keys(0)(1); + + FNkeys <= FNkeysSig; + FNtoggledKeys <= FNtoggledKeysSig; + + -- Output addressed matrix row/col + -- Original monitor scans for more than one row at a time, so more than one address may be low ! + -- key(x)(y) have inverted logic. 0 when key pressed + KEYB(0) <= (keys( 1)(0) or A(1)) + and ((not key_enter) or A(1)) + and (keys( 2)(0) or A(2)) + and (keys( 3)(0) or A(3)) + and (keys( 4)(0) or A(4)) + and (keys( 5)(0) or A(5)) + and (keys( 6)(0) or A(6)) + and (keys( 7)(0) or A(7)) + and (keys( 8)(0) or A(8)) + and ((not key_b) or A(8)) + and (keys( 9)(0) or A(9)) + and (keys(10)(0) or A(10)); + KEYB(1) <= (keys( 1)(1) or A(1)) + and (keys( 2)(1) or A(2)) + and (keys( 3)(1) or A(3)) + and (keys( 4)(1) or A(4)) + and (keys( 5)(1) or A(5)) + and (keys( 6)(1) or A(6)) + and (keys( 7)(1) or A(7)) + and ((not key_c) or A(7)) + and (keys( 8)(1) or A(8)) + and (keys( 9)(1) or A(9)) + and (keys(10)(1) or A(10)); + KEYB(2) <= '1'; + KEYB(3) <= '1'; + + KEYB(4) <= (keys( 1)(4) or A(1)) + and (keys( 2)(4) or A(2)) + and (keys( 3)(4) or A(3)) + and (keys( 4)(4) or A(4)) + and (keys( 5)(4) or A(5)) + and (keys( 6)(4) or A(6)) + and (keys( 7)(4) or A(7)) + and (keys( 8)(4) or A(8)) + and (keys( 9)(4) or A(9)) + and (keys(10)(4) or A(10)); + KEYB(5) <= (keys( 1)(5) or A(1)) + and (keys( 2)(5) or A(2)) + and (keys( 3)(5) or A(3)) + and (keys( 4)(5) or A(4)) + and (keys( 5)(5) or A(5)) + and (keys( 6)(5) or A(6)) + and (keys( 7)(5) or A(7)) + and (keys( 8)(5) or A(8)) + and (keys( 9)(5) or A(9)) + and (keys(10)(5) or A(10)); + KEYB(6) <= (keys( 1)(6) or A(1)) + and (keys( 2)(6) or A(2)) + and (keys( 3)(6) or A(3)) + and (keys( 4)(6) or A(4)) + and (keys( 5)(6) or A(5)) + and (keys( 6)(6) or A(6)) + and (keys( 7)(6) or A(7)) + and (keys( 8)(6) or A(8)) + and (keys( 9)(6) or A(9)) + and (keys(10)(6) or A(10)); + KEYB(7) <= (keys( 1)(7) or A(1)) + and (keys( 2)(7) or A(2)) + and (keys( 3)(7) or A(3)) + and (keys( 4)(7) or A(4)) + and (keys( 5)(7) or A(5)) + and (keys( 6)(7) or A(6)) + and (keys( 7)(7) or A(7)) + and (keys( 8)(7) or A(8)) + and (keys( 9)(7) or A(9)) + and (keys(10)(7) or A(10)); + + Q <= KEYB(7 downto 4) & x"0" when A(0) = '0' + else KEYB(3 downto 0) & x"0"; + + process(nRESET,CLK) + begin + if nRESET = '0' then + release <= '0'; + extended <= '0'; + + keys(1) <= (others => '1'); + keys(2) <= (others => '1'); + keys(3) <= (others => '1'); + keys(4) <= (others => '1'); + keys(5) <= (others => '1'); + keys(6) <= (others => '1'); + keys(7) <= (others => '1'); + keys(8) <= (others => '1'); + keys(9) <= (others => '1'); + keys(10) <= (others => '1'); + elsif rising_edge(CLK) then + if keyb_valid = '1' then + -- keyb_data contains scan code of PS/2 Set2 + -- http://www.computer-engineering.org/ps2keyboard/scancodes2.html + if keyb_data = X"e0" then + -- Extended key code follows + extended <= '1'; + elsif keyb_data = X"f0" then + -- Release code follows + release <= '1'; + else + -- Cancel extended/release flags for next time + release <= '0'; + extended <= '0'; + + case keyb_data is + + when X"0e" => keys(9)(7) <= release; -- pipe -> :* + when X"16" => keys(5)(7) <= release; -- 1 + when X"1e" => keys(5)(0) <= release; -- 2 + when X"26" => keys(5)(1) <= release; -- 3 + when X"25" => keys(3)(1) <= release; -- 4 + when X"2e" => keys(3)(0) <= release; -- 5 + when X"36" => keys(3)(7) <= release; -- 6 + when X"3d" => keys(4)(7) <= release; -- 7 + when X"3e" => keys(4)(0) <= release; -- 8 + when X"46" => keys(4)(1) <= release; -- 9 + when X"45" => keys(10)(1) <= release; -- 0 + when X"4e" => keys(10)(0) <= release; -- -= + when X"55" => keys(10)(7) <= release; -- ;+ + when X"66" => keys(1)(4) <= release; -- Backspace same as cursor left + + when X"0d" => keys(9)(1) <= release; -- TAB -> ^@ + when X"15" => keys(5)(5) <= release; -- Q + when X"1d" => keys(5)(6) <= release; -- W + when X"24" => keys(5)(4) <= release; -- E + when X"2d" => keys(3)(4) <= release; -- R + when X"2c" => keys(3)(6) <= release; -- T + when X"35" => keys(3)(5) <= release; -- Y + when X"3c" => keys(4)(6) <= release; -- U + when X"43" => keys(4)(5) <= release; -- I + when X"44" => keys(4)(4) <= release; -- O + when X"4d" => keys(10)(4) <= release; -- P + when X"54" => keys(10)(6) <= release; -- [ sh + when X"5b" => keys(10)(5) <= release; -- ] dj + when X"5a" => keys(1)(0) <= release; -- ENTER + + -- when X"58" => -- Caps Lock + when X"1c" => keys(7)(5) <= release; -- A + when X"1b" => keys(7)(6) <= release; -- S + when X"23" => keys(7)(4) <= release; -- D + when X"2b" => keys(8)(4) <= release; -- F + when X"34" => keys(8)(6) <= release; -- G + when X"33" => keys(8)(5) <= release; -- H + when X"3b" => keys(6)(5) <= release; -- J + when X"42" => keys(6)(6) <= release; -- K + when X"4b" => keys(6)(4) <= release; -- L + when X"4c" => keys(9)(4) <= release; -- Č + when X"52" => keys(9)(5) <= release; -- Ć + when scan_zh => keys(9)(6) <= release; -- Ž + --when X"5D" => keys(9)(6) <= release; -- Ž + --when X"5c" => keys(9)(6) <= release; -- Set3: Ž + + when X"12" => keys(2)(1) <= release; -- Left shift + --when scan_ltgt => keys(9)(1) <= release; -- international < > -> ^@ + --when X"61" => keys(9)(1) <= release; -- international < > + --when X"13" => keys(9)(1) <= release; -- Set3: international < > + when X"1a" => keys(7)(7) <= release; -- Z + when X"22" => keys(7)(0) <= release; -- X + when X"21" => keys(7)(1) <= release; -- C + when X"2a" => keys(8)(1) <= release; -- V + when X"32" => keys(8)(0) <= release; -- B + when X"31" => keys(8)(7) <= release; -- N + when X"3a" => keys(6)(7) <= release; -- M + when X"41" => keys(6)(0) <= release; -- ,< + when X"49" => keys(6)(1) <= release; -- .> + when X"4a" => keys(9)(0) <= release; -- /? extended = KP / + when X"59" => keys(2)(1) <= release; -- Right shift + + --when X"76" => keys(0)(0) <= release; -- Escape not on ORAO + when X"29" => keys(2)(0) <= release; -- SPACE + when scan_left_ctrl => keys(1)(1) <= release; -- CTRL + + -- Cursor keys - these are actually extended (E0 xx), but + -- the scancodes for the numeric keypad cursor keys are + -- are the same but without the extension, so we'll accept + -- the codes whether they are extended or not + when scan_arrow_left => keys(1)(4) <= release; -- left arrow + when scan_arrow_right => keys(1)(7) <= release; -- right arrow + when scan_arrow_up => keys(1)(5) <= release; -- up arrow + when scan_arrow_down => keys(1)(6) <= release; -- down arrow + -- Set2: arrow keys + --when X"6b" => keys(1)(4) <= release; -- left arrow + --when X"74" => keys(1)(7) <= release; -- right arrow + --when X"75" => keys(1)(5) <= release; -- up arrow + --when X"72" => keys(1)(6) <= release; -- down arrow + -- Set3: arrow keys + --when X"61" => keys(1)(4) <= release; -- left arrow + --when X"6a" => keys(1)(7) <= release; -- right arrow + --when X"63" => keys(1)(5) <= release; -- up arrow + --when X"60" => keys(1)(6) <= release; -- down arrow + + when X"05" => keys(2)(4) <= release; -- F1 + when X"06" => keys(2)(5) <= release; -- F2 + when X"04" => keys(2)(6) <= release; -- F3 + when X"0C" => keys(2)(7) <= release; -- F4 + + when X"03" => --F5 + FNkeysSig(5) <= release; + if release = '0' then + FNtoggledKeysSig(5) <= not FNtoggledKeysSig(5); + end if; + when X"0B" => --F6 + FNkeysSig(6) <= release; + if release = '0' then + FNtoggledKeysSig(6) <= not FNtoggledKeysSig(6); + end if; + when X"83" => --F7 + FNkeysSig(7) <= release; + if release = '0' then + FNtoggledKeysSig(7) <= not FNtoggledKeysSig(7); + end if; + when X"0A" => --F8 + FNkeysSig(8) <= release; + if release = '0' then + FNtoggledKeysSig(8) <= not FNtoggledKeysSig(8); + end if; + + + when others => + null; + end case; + end if; + end if; + end if; + end process; + +end architecture; diff --git a/ORAO_MiST/rtl/orao_mist.sv b/ORAO_MiST/rtl/orao_mist.sv new file mode 100644 index 00000000..eee504b0 --- /dev/null +++ b/ORAO_MiST/rtl/orao_mist.sv @@ -0,0 +1,108 @@ +module orao_mist +( + output LED, + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + output VGA_HS, + output VGA_VS, + input SPI_SCK, + output SPI_DO, + input SPI_DI, + input SPI_SS2, + input SPI_SS3, + input CONF_DATA0, + input UART_RX, + output UART_TX, + input CLOCK_27 +); + +`include "rtl\build_id.v" + +localparam CONF_STR = { + "Orao;;", + "T6,Reset;", + "V,v1.00.",`BUILD_DATE +}; + +wire [31:0] status; +wire [1:0] buttons; +wire [1:0] switches; +wire vid15khz; +wire ypbpr; +wire ps2_kbd_clk, ps2_kbd_data; +wire hs, vs, cs; +wire video; +wire [7:0] kbjoy; +wire clk_50, clk_25, clk_12p5; + +pll pll ( + .inclk0 ( CLOCK_27 ), + .c0 ( clk_50 ), + .c1 ( clk_25 ), + .c2 ( clk_12p5 ) +); + +orao #(.ram_kb(24), .clk_mhz(25), .serial_baud(9600)) orao ( + .n_reset (~(status[0]|status[6]|buttons[1])), + .clk ( clk_25 ), + .clkvid ( clk_50 ),//Check + .video ( video ), + .hs ( hs ), + .vs ( vs ), + .cs ( ), + .rxd ( UART_RX ), + .txd ( UART_TX ), + .rts ( ), + .key_b ( ), + .key_c ( ), + .key_enter ( ), + .ps2clk ( ps2_kbd_clk ), + .ps2data ( ps2_kbd_data ) +); + + +video_mixer #(.LINE_LENGTH(256), .HALF_DEPTH(1)) video_mixer ( + .clk_sys ( clk_50 ), + .ce_pix ( clk_12p5 ), + .ce_pix_actual ( clk_12p5 ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS3 ( SPI_SS3 ), + .SPI_DI ( SPI_DI ), + .R ( {video,video,video}), + .G ( {video,video,video}), + .B ( {video,video,video}), + .HSync ( hs ), + .VSync ( vs ), + .VGA_R ( VGA_R ), + .VGA_G ( VGA_G ), + .VGA_B ( VGA_B ), + .VGA_VS ( VGA_VS ), + .VGA_HS ( VGA_HS ), + .scandoubler_disable(vid15khz ), + .ypbpr_full ( 1 ), + .line_start ( 0 ), + .mono ( 1 ) +); + +mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io ( + .clk_sys ( clk_50 ), + .conf_str ( CONF_STR ), + .SPI_SCK ( SPI_SCK ), + .CONF_DATA0 ( CONF_DATA0 ), + .SPI_SS2 ( SPI_SS2 ), + .SPI_DO ( SPI_DO ), + .SPI_DI ( SPI_DI ), + .buttons ( buttons ), + .switches ( switches ), + .scandoubler_disable(vid15khz ), + .ypbpr ( ypbpr ), + .ps2_kbd_clk ( ps2_kbd_clk ), + .ps2_kbd_data ( ps2_kbd_data ), + .status ( status ) +); + + + + +endmodule \ No newline at end of file diff --git a/ORAO_MiST/rtl/osd.v b/ORAO_MiST/rtl/osd.v new file mode 100644 index 00000000..c62c10af --- /dev/null +++ b/ORAO_MiST/rtl/osd.v @@ -0,0 +1,179 @@ +// A simple OSD implementation. Can be hooked up between a cores +// VGA output and the physical VGA pins + +module osd ( + // OSDs pixel clock, should be synchronous to cores pixel clock to + // avoid jitter. + input clk_sys, + + // SPI interface + input SPI_SCK, + input SPI_SS3, + input SPI_DI, + + // VGA signals coming from core + input [5:0] R_in, + input [5:0] G_in, + input [5:0] B_in, + input HSync, + input VSync, + + // VGA signals going to video connector + output [5:0] R_out, + output [5:0] G_out, + output [5:0] B_out +); + +parameter OSD_X_OFFSET = 10'd0; +parameter OSD_Y_OFFSET = 10'd0; +parameter OSD_COLOR = 3'd0; + +localparam OSD_WIDTH = 10'd256; +localparam OSD_HEIGHT = 10'd128; + +// ********************************************************************************* +// spi client +// ********************************************************************************* + +// this core supports only the display related OSD commands +// of the minimig +reg osd_enable; +(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[2047:0]; // the OSD buffer itself + +// the OSD has its own SPI interface to the io controller +always@(posedge SPI_SCK, posedge SPI_SS3) begin + reg [4:0] cnt; + reg [10:0] bcnt; + reg [7:0] sbuf; + reg [7:0] cmd; + + if(SPI_SS3) begin + cnt <= 0; + bcnt <= 0; + end else begin + sbuf <= {sbuf[6:0], SPI_DI}; + + // 0:7 is command, rest payload + if(cnt < 15) cnt <= cnt + 1'd1; + else cnt <= 8; + + if(cnt == 7) begin + cmd <= {sbuf[6:0], SPI_DI}; + + // lower three command bits are line address + bcnt <= {sbuf[1:0], SPI_DI, 8'h00}; + + // command 0x40: OSDCMDENABLE, OSDCMDDISABLE + if(sbuf[6:3] == 4'b0100) osd_enable <= SPI_DI; + end + + // command 0x20: OSDCMDWRITE + if((cmd[7:3] == 5'b00100) && (cnt == 15)) begin + osd_buffer[bcnt] <= {sbuf[6:0], SPI_DI}; + bcnt <= bcnt + 1'd1; + end + end +end + +// ********************************************************************************* +// video timing and sync polarity anaylsis +// ********************************************************************************* + +// horizontal counter +reg [9:0] h_cnt; +reg [9:0] hs_low, hs_high; +wire hs_pol = hs_high < hs_low; +wire [9:0] dsp_width = hs_pol ? hs_low : hs_high; + +// vertical counter +reg [9:0] v_cnt; +reg [9:0] vs_low, vs_high; +wire vs_pol = vs_high < vs_low; +wire [9:0] dsp_height = vs_pol ? vs_low : vs_high; + +wire doublescan = (dsp_height>350); + +reg ce_pix; +always @(negedge clk_sys) begin + integer cnt = 0; + integer pixsz, pixcnt; + reg hs; + + cnt <= cnt + 1; + hs <= HSync; + + pixcnt <= pixcnt + 1; + if(pixcnt == pixsz) pixcnt <= 0; + ce_pix <= !pixcnt; + + if(hs && ~HSync) begin + cnt <= 0; + pixsz <= (cnt >> 9) - 1; + pixcnt <= 0; + ce_pix <= 1; + end +end + +always @(posedge clk_sys) begin + reg hsD, hsD2; + reg vsD, vsD2; + + if(ce_pix) begin + // bring hsync into local clock domain + hsD <= HSync; + hsD2 <= hsD; + + // falling edge of HSync + if(!hsD && hsD2) begin + h_cnt <= 0; + hs_high <= h_cnt; + end + + // rising edge of HSync + else if(hsD && !hsD2) begin + h_cnt <= 0; + hs_low <= h_cnt; + v_cnt <= v_cnt + 1'd1; + end else begin + h_cnt <= h_cnt + 1'd1; + end + + vsD <= VSync; + vsD2 <= vsD; + + // falling edge of VSync + if(!vsD && vsD2) begin + v_cnt <= 0; + vs_high <= v_cnt; + end + + // rising edge of VSync + else if(vsD && !vsD2) begin + v_cnt <= 0; + vs_low <= v_cnt; + end + end +end + +// area in which OSD is being displayed +wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET; +wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH; +wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<> 1) + OSD_Y_OFFSET; +wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<= h_osd_start) && (h_cnt < h_osd_end) && + (VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); + +reg [7:0] osd_byte; +always @(posedge clk_sys) if(ce_pix) osd_byte <= osd_buffer[{doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt[7:0]}]; + +wire osd_pixel = osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; + +assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]}; +assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]}; +assign B_out = !osd_de ? B_in : {osd_pixel, osd_pixel, OSD_COLOR[0], B_in[5:3]}; + +endmodule diff --git a/ORAO_MiST/rtl/pll.qip b/ORAO_MiST/rtl/pll.qip new file mode 100644 index 00000000..afd958be --- /dev/null +++ b/ORAO_MiST/rtl/pll.qip @@ -0,0 +1,4 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "13.1" +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "pll.v"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/ORAO_MiST/rtl/pll.v b/ORAO_MiST/rtl/pll.v new file mode 100644 index 00000000..82887cc3 --- /dev/null +++ b/ORAO_MiST/rtl/pll.v @@ -0,0 +1,357 @@ +// megafunction wizard: %ALTPLL% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: altpll + +// ============================================================ +// File Name: pll.v +// Megafunction Name(s): +// altpll +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 13.1.0 Build 162 10/23/2013 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2013 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module pll ( + inclk0, + c0, + c1, + c2); + + input inclk0; + output c0; + output c1; + output c2; + + wire [4:0] sub_wire0; + wire [0:0] sub_wire6 = 1'h0; + wire [2:2] sub_wire3 = sub_wire0[2:2]; + wire [0:0] sub_wire2 = sub_wire0[0:0]; + wire [1:1] sub_wire1 = sub_wire0[1:1]; + wire c1 = sub_wire1; + wire c0 = sub_wire2; + wire c2 = sub_wire3; + wire sub_wire4 = inclk0; + wire [1:0] sub_wire5 = {sub_wire6, sub_wire4}; + + altpll altpll_component ( + .inclk (sub_wire5), + .clk (sub_wire0), + .activeclock (), + .areset (1'b0), + .clkbad (), + .clkena ({6{1'b1}}), + .clkloss (), + .clkswitch (1'b0), + .configupdate (1'b0), + .enable0 (), + .enable1 (), + .extclk (), + .extclkena ({4{1'b1}}), + .fbin (1'b1), + .fbmimicbidir (), + .fbout (), + .fref (), + .icdrclk (), + .locked (), + .pfdena (1'b1), + .phasecounterselect ({4{1'b1}}), + .phasedone (), + .phasestep (1'b1), + .phaseupdown (1'b1), + .pllena (1'b1), + .scanaclr (1'b0), + .scanclk (1'b0), + .scanclkena (1'b1), + .scandata (1'b0), + .scandataout (), + .scandone (), + .scanread (1'b0), + .scanwrite (1'b0), + .sclkout0 (), + .sclkout1 (), + .vcooverrange (), + .vcounderrange ()); + defparam + altpll_component.bandwidth_type = "AUTO", + altpll_component.clk0_divide_by = 27, + altpll_component.clk0_duty_cycle = 50, + altpll_component.clk0_multiply_by = 50, + altpll_component.clk0_phase_shift = "0", + altpll_component.clk1_divide_by = 18, + altpll_component.clk1_duty_cycle = 50, + altpll_component.clk1_multiply_by = 17, + altpll_component.clk1_phase_shift = "0", + altpll_component.clk2_divide_by = 54, + altpll_component.clk2_duty_cycle = 50, + altpll_component.clk2_multiply_by = 25, + altpll_component.clk2_phase_shift = "0", + altpll_component.compensate_clock = "CLK0", + altpll_component.inclk0_input_frequency = 37037, + altpll_component.intended_device_family = "Cyclone III", + altpll_component.lpm_hint = "CBX_MODULE_PREFIX=pll", + altpll_component.lpm_type = "altpll", + altpll_component.operation_mode = "NORMAL", + altpll_component.pll_type = "AUTO", + altpll_component.port_activeclock = "PORT_UNUSED", + altpll_component.port_areset = "PORT_UNUSED", + altpll_component.port_clkbad0 = "PORT_UNUSED", + altpll_component.port_clkbad1 = "PORT_UNUSED", + altpll_component.port_clkloss = "PORT_UNUSED", + altpll_component.port_clkswitch = "PORT_UNUSED", + altpll_component.port_configupdate = "PORT_UNUSED", + altpll_component.port_fbin = "PORT_UNUSED", + altpll_component.port_inclk0 = "PORT_USED", + altpll_component.port_inclk1 = "PORT_UNUSED", + altpll_component.port_locked = "PORT_UNUSED", + altpll_component.port_pfdena = "PORT_UNUSED", + altpll_component.port_phasecounterselect = "PORT_UNUSED", + altpll_component.port_phasedone = "PORT_UNUSED", + altpll_component.port_phasestep = "PORT_UNUSED", + altpll_component.port_phaseupdown = "PORT_UNUSED", + altpll_component.port_pllena = "PORT_UNUSED", + altpll_component.port_scanaclr = "PORT_UNUSED", + altpll_component.port_scanclk = "PORT_UNUSED", + altpll_component.port_scanclkena = "PORT_UNUSED", + altpll_component.port_scandata = "PORT_UNUSED", + altpll_component.port_scandataout = "PORT_UNUSED", + altpll_component.port_scandone = "PORT_UNUSED", + altpll_component.port_scanread = "PORT_UNUSED", + altpll_component.port_scanwrite = "PORT_UNUSED", + altpll_component.port_clk0 = "PORT_USED", + altpll_component.port_clk1 = "PORT_USED", + altpll_component.port_clk2 = "PORT_USED", + altpll_component.port_clk3 = "PORT_UNUSED", + altpll_component.port_clk4 = "PORT_UNUSED", + altpll_component.port_clk5 = "PORT_UNUSED", + altpll_component.port_clkena0 = "PORT_UNUSED", + altpll_component.port_clkena1 = "PORT_UNUSED", + altpll_component.port_clkena2 = "PORT_UNUSED", + altpll_component.port_clkena3 = "PORT_UNUSED", + altpll_component.port_clkena4 = "PORT_UNUSED", + altpll_component.port_clkena5 = "PORT_UNUSED", + altpll_component.port_extclk0 = "PORT_UNUSED", + altpll_component.port_extclk1 = "PORT_UNUSED", + altpll_component.port_extclk2 = "PORT_UNUSED", + altpll_component.port_extclk3 = "PORT_UNUSED", + altpll_component.width_clock = 5; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "27" +// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "27" +// Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "54" +// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +// Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +// Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "50.000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "25.500000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "12.500000" +// Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "27.000" +// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" +// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "deg" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" +// Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +// Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "50" +// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "25" +// Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "25" +// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "50.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "25.50000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "12.50000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +// Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +// Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +// Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" +// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +// Retrieval info: PRIVATE: SPREAD_USE STRING "0" +// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +// Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +// Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: USE_CLK0 STRING "1" +// Retrieval info: PRIVATE: USE_CLK1 STRING "1" +// Retrieval info: PRIVATE: USE_CLK2 STRING "1" +// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +// Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +// Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +// Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "27" +// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "50" +// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "18" +// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "17" +// Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "54" +// Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "25" +// Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +// Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +// Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +// Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +// Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +// Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +// Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +// Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_bb.v FALSE +// Retrieval info: LIB_FILE: altera_mf +// Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/ORAO_MiST/rtl/ps2_intf.vhd b/ORAO_MiST/rtl/ps2_intf.vhd new file mode 100644 index 00000000..f7960950 --- /dev/null +++ b/ORAO_MiST/rtl/ps2_intf.vhd @@ -0,0 +1,158 @@ +-- ZX Spectrum for Altera DE1 +-- +-- Copyright (c) 2009-2011 Mike Stirling +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- * Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- * Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- * Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written agreement from the author. +-- +-- * License is granted for non-commercial use only. A fee may not be charged +-- for redistributions as source code or in synthesized/hardware form without +-- specific prior written agreement from the author. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- + +-- PS/2 interface (input only) +-- Based loosely on ps2_ctrl.vhd (c) ALSE. http://www.alse-fr.com +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +-- This is input-only for the time being +entity ps2_intf is +generic (filter_length : positive := 8); +port( + CLK : in std_logic; + nRESET : in std_logic; + + -- PS/2 interface (could be bi-dir) + PS2_CLK : in std_logic; + PS2_DATA : in std_logic; + + -- Byte-wide data interface - only valid for one clock + -- so must be latched externally if required + DATA : out std_logic_vector(7 downto 0); + VALID : out std_logic; + ERROR : out std_logic + ); +end ps2_intf; + +architecture ps2_intf_arch of ps2_intf is +subtype filter_t is std_logic_vector(filter_length-1 downto 0); +signal clk_filter : filter_t; + +signal ps2_clk_in : std_logic; +signal ps2_dat_in : std_logic; +-- Goes high when a clock falling edge is detected +signal clk_edge : std_logic; +signal bit_count : unsigned (3 downto 0); +signal shiftreg : std_logic_vector(8 downto 0); +signal parity : std_logic; +begin + -- Register input signals + process(nRESET,CLK) + begin + if nRESET = '0' then + ps2_clk_in <= '1'; + ps2_dat_in <= '1'; + clk_filter <= (others => '1'); + clk_edge <= '0'; + elsif rising_edge(CLK) then + -- Register inputs (and filter clock) + ps2_dat_in <= PS2_DATA; + clk_filter <= PS2_CLK & clk_filter(clk_filter'high downto 1); + clk_edge <= '0'; + + if clk_filter = filter_t'(others => '1') then + -- Filtered clock is high + ps2_clk_in <= '1'; + elsif clk_filter = filter_t'(others => '0') then + -- Filter clock is low, check for edge + if ps2_clk_in = '1' then + clk_edge <= '1'; + end if; + ps2_clk_in <= '0'; + end if; + end if; + end process; + + -- Shift in keyboard data + process(nRESET,CLK) + begin + if nRESET = '0' then + bit_count <= (others => '0'); + shiftreg <= (others => '0'); + parity <= '0'; + DATA <= (others => '0'); + VALID <= '0'; + ERROR <= '0'; + elsif rising_edge(CLK) then + -- Clear flags + VALID <= '0'; + ERROR <= '0'; + + if clk_edge = '1' then + -- We have a new bit from the keyboard for processing + if bit_count = 0 then + -- Idle state, check for start bit (0) only and don't + -- start counting bits until we get it + + parity <= '0'; + + if ps2_dat_in = '0' then + -- This is a start bit + bit_count <= bit_count + 1; + end if; + else + -- Running. 8-bit data comes in LSb first followed by + -- a single stop bit (1) + if bit_count < 10 then + -- Shift in data and parity (9 bits) + bit_count <= bit_count + 1; + shiftreg <= ps2_dat_in & shiftreg(shiftreg'high downto 1); + parity <= parity xor ps2_dat_in; -- Calculate parity + elsif ps2_dat_in = '1' then + -- Valid stop bit received + bit_count <= (others => '0'); -- back to idle + if parity = '1' then + -- Parity correct, submit data to host + DATA <= shiftreg(7 downto 0); + VALID <= '1'; + else + -- Error + ERROR <= '1'; + end if; + else + -- Invalid stop bit + bit_count <= (others => '0'); -- back to idle + ERROR <= '1'; + end if; + end if; + end if; + end if; + end process; +end ps2_intf_arch; diff --git a/ORAO_MiST/rtl/rom/BAS102.ROM b/ORAO_MiST/rtl/rom/BAS102.ROM new file mode 100644 index 0000000000000000000000000000000000000000..6457cea43552f21aab99cd7fb3853291248591b1 GIT binary patch literal 8192 zcmeHMdwdheonJltHbypWqNXXGCN2f)ByO+0s!8us7i45uY@ZD@Ef_WdIqNH*+zAN8 zKw_I{gzC_Co#0@CA*!;YXxEms1`L)7cYtLf88C}q;+fJbcJ1CJ-GtEaNTU0V+$Nv9 zzwgg8Xm)mu9PT=a0{l_(dvn0V&mtwc5xI6rv4^YV!+$49?<<&!IhtL)XiS7(px z8s4QIAKo|o$&hLIN5hMT>z^B`|LMrKPe-?%9c$>mT*;p;wV!?Q{mVa3oLSd;)>Y;al0V9Bz2tp}Yj~Y%x#aV;C8xaA;(a?EXMD+qdCu zcq7?fm&DtFLkp3|xA_&rWOS3+?hp*o4dyOK%f^^`XJW&|CSZ!p(jFsNbm1oF4p_-& zufd|Y-TAhli#Z88f08tajd+`LyIA86&tzI;x9K+85+U{CR_t(YFarq=)xf@Z%43W{ z?Ov?S?vOo9i-T;aV`421mjiDQE(5OvrcBE5`k0qNuDy$<(EG_h{g1zS$@pwF(?-^nCGk3*^YwX*POh7YBkgg# zD*ll6R3Z1T#qlRqqqIkz8!r}&@gE7u+3R7PHEvhmKx{HK_KxL_^Mv+cyit8Dtw!vf zjP1>1!g-ALJM>`TTBiE&s%}QR-oHw_N{39UANcwvYGUD+Pnhn8ohQ_T z-HhqPUK1k~;69Gj`?h*?Sax-E$=cUrF;Z|r7R;K#t!9yYH`H^rY5t7zy1Q%cq3oaEAyRu(CSMP68Fq&0Byt{Qqu_sLg!$RYVuEycFDLyJ<4u6 zWx5(qY8MN+;t|VKgY4YnNe*b4F%XgIZt*SpEIvwAdP{1=PowZ@^xKnaT65hD`3;_z zGEu=P^uTFzo4wCQB6W<7xNT&oP1=tPXOS|10s}ZPs@luu6>QoJ?qhT^_jKj zVqJZBCoSBtHSQDi6V&5SvY$QGuhmrU9h%n2L&4r3wpQ#x_0 zqI2WlI0ddKUk|Q7b3(gCE!&{z%<4a+_RXdHlAWR(|I*nEeD3v}^fIn>f`P3&1tL@L z_s$k~f%lZ3BClZZcJfQH8SiwuITRdL?@nINR*VC#864{#RR4?J8iA2pB4}%bRicss zL`EVu0s@G^XCNWOg~ z&IjcczL3dtb16ug`=+FR&Z&LykAMD>D+^=T1q0%JeiJ{1LAyb_} zg8kc+3=$MWY<>)EC5YNpazK0&_c+6-c}VK?F!+G;P4u5b(0QO`Pwex8L(v%Ur9Gkj zG~TZLBL1fKEO5ZapU}3#)`e?|e}|sCgn}wv)NIe|pD7qOELo>hzhpxl!|{1)Egx@J zGn>crge)yXhE-u2mBe>quq!$;1o3!sK2Z>4D}{@A;zAINvKGAvT$9o*#^Nk z2ez20Qo<(kc=SOk=FUrUawMwuF=@HKWWGnKDxQp5=SGo?OLJm54MtXv} zDzG$iUMj)`s5DMysRd?sQ4~@hP{jVU&-WWqklOGwt`_I3f7K9m5}fZWfE4>`D%+i6 z)V#uHil3pAO5=Y`fQ4&Jg?J^{RfhC9UMUrs@hUp8j)4?~4y)+qFd9A09*Lu!7ttmf z55UWdGy`jlr`CtbP zG*hSDe|&}x?>wHT!|vlI@Y&-tbvObZ-ds0Regn9P7lErmz$zU8OEVW*z}O6mfm1&9 zn!$;EeX2ehiS~J!LR+&<($OgEIRj~9A567O$-?~*tY*b^^UHMBef|4{r=bJP=G_6` zKD9`Bp)Nz%WM2bbvvjB~i5=N?ho8SxdqP(E z!FZCqhT`i$bjpBpFTWVC}?i)&RYVfd$1kol~BTKdOBc z7qzG2Z)tx7yPWxjl>}Ax=5YMC>MW00eFCKol2BRFPl9Dh_T>5a0bp^q8V?8t_FHGs zXJmfF5AyVUndjNBouL{HIzzrSnvP?aB(iNXP;tFUK+|)< zzRcr_cz$~-$K7-SY^PIgk1p70Z~C~4TQQ7 zl&jFbM2bvn%{NzBYk*X!thCkuxe&;dS>!0B!^8NnbjZV?+XDt;ji8iX7w1K}R+`%An~&4GQ^ zG-ox^R@ZJz+S5~WL5%kg0+COXZNBXu#?^u48!rKVeo=dfymmoWGs*7Q1zCIAZ6TI3kn-6Bf>MCH%_6WLs+7dz;bR_E&+smZQOv&+*Bum&eIG7ONN0v*LONM~FS zvZRka=RnTtCiXiQ$!Z%U6%PX-W4DdGW<&SR@%S|!@8t$mndxNZv>##p#2aciyZ5J4batY5WszauFUon60>&*39qTh zn+dk(Eg-7_)lHluH69~~>yK>Vd3b|E4PZ!o%xiS@e$FqciN%0jZ;r$iuCC1F&2>7N zr)XS`HMhuU`*~L{J|;S%HR@G6QED*pH`_(Q5YwvudPb6%iDP1~mga5|)q7DAJ*M88 zAQsXvE_?JXGHHyBcfez{`V`QLYe1>6UW}J>*b#>^_j*J72j%i!ndxwTrm5%}(&^e$vW09kB9dHxyeW6ZU%<57V42 zx6St}!Svoa$AlbnvwgGNX5Zph_DB8dA2_lG;>D36IDlD5(|CiQ>=y@zm|hMV z`)E&ur1k(Ko1O?(qEV-sMq3_+Z)xXaU;H@O0X+R*F9C>5LRKm80ZwsIIP&ES)Z1|< z=Y7ZpFpQ!V%CaXJ>*~>R`&Vkl{#EKtNS->gv$M_KgL{2pK{x3-M#5@N8( zU7jF>fEw8)7pAiTq+gmFa1W2e;PyRcM^H%fK0wW}T?Ld$0VhOl)ILP0TA=ox%3cB0 zclFpnp+IqupLfCe$FF7E+;EV8xlO&zo9!>-mw{U+2a8h#OHW7uR5M|o1LmbT_49Mp zS&<#;%o|N=j?HXu!c8z`M`|@L@~oQMU#n(f`;-CK0*|O`IE5HQm50N80P@~@D*Bh< z3kTZZV&s6_26zIADSQk>!d1uT5(1MNnjUNZ-~i;;`-UMEglG_)r=`=>7#xOm2AXYV zFZ00xrKc>}9}*6ckP=G8M=y`x;(1=?@c|yc2~MwlW5T;0($A~ItO~hri2AgjgI6uZ zouB>9FdUDj<2BL^`hu$F3$c);UL6KQ`C!BcNYT~nJmzz_`Y4ebeH&a6>HwQSI2&ye z)3TA~w4E0zpBsI>;xURkIeM1N9HCG#I82n{c1Qy)%IgTCKZw@}M`sSYVTF7@CF_&n zW|*DNLB+KPh^5Yq^dqh|I>Ora%{|&}4wBbp7VzEDF`|?~7PcOxAcp;y5wvYo_z^S% zx%(2nu)Rn6@(2# z&Tw63+^kMQAn(KqM;9O=`w<)>L3=k2l7Rg%4zP1a>vZYiIiWehIRVp0K%H`)o_>~pU zG;V(A<_?Sey_bj5!mjL8SIu1+&E|M4=^t!2)&WCEq)rrGcVbzgRg~J=2so)Tk zwP@Eyt5O`f(WySrwK1!)KcE)Gx;FL))ts2r&>!yFI3CjG5=GEMq*D{H&0@<`TcKjg zlBFa*i2h-;+1nYvV@d}fcOK;YM48uE8c2hCEO1+BfT+@@%!a7q3=;*Mym3ApkUL2T zuLMeP00(i%&v_Vc)^7iR>7Fn%{)lRHb!o=Sr>emMH%#UIhK z;rNpo|F&jSGip0%$Ev~(6M!GfxWrz&SSuIGm3>6AjQg>q6_~P6cx*ya?`Rq5z*rP2 zq^lT?HGjTrE0j(82|u**mZ@U!3--W8xNk`C=t_d5OxH)F7m?!GfREP|b`Rc2?K z?NYYc!#Mh27M9q^#g+vXw|8%P_~YH13K{9waJl`9OT_Kli32VGW)?J=fZGu`QhRg~ z0?Fy6NA@NetT=mPQn8O(|1U2~%=JdNkIa%PJeSbDQRy!BOG}`7JE6@s6-bMwt9nx& zWx=n$Pg(M-S5f&0h}Nqkesf($aaKH2Nv})FlHM|<$CAt64Dn%>*eg96gAJRtbg7tD z=tZ%&k%Y|k?U!i)tlxJTtT<5r#$_CUJ2caHvA+2C&4Lj^Uv}MNfU}*gVsA{I*8p>2 z@AT>AoV{Xeb6Ij;qkN)3Jt+2ulZ-oFtlb8E>0;8ieUkR5DKn)K8Ti%dB;?dFKL9S|en&ZDN8=$VTU?&wKTHMEH<(f$OSyN{2i+U|{_uU_F73)x`3 z>C>^BYqH2sq;Fa)?Ar2hZpYTyyP554f71BU^Pi~@S-(s}uXGpox;IL~b(Mkvol3xA zHVEb)cf*@72HTO9=DH^Bre#WJ13x`GiUA?#q#M}ls;~0h_70*#J% zVL1CjLVCe-mEOjHShstw`i`PgV^F7Z1bTr1sS)~@j}XOXngMnO5Fv}Kh5WXbaz^{s zkMJe~eQ|oOvd>+ioH5XAxSCSSofLmSR%-XPXwy}y3wB`4#(w{5Q`yWbFT<|^1Z{N9 zPTbqMcaDAM!{2+#MQVOeJLs--ZMZIpHwhW3Oa=)p4%~Sm7as5b z!M2yZtF}LSZRv}9mDw-;?7hO5S~f5*vEhvkvRqA7IsunO6Oq8RYw^dGZ1|Y+XYgOk zl*%<$oUW37=y?~e{pfe7H>7;eHLP>$vC)|(rFjN%x-&yM={b)xommo#8EnA6#o3Y@ zdUBk((vx_mWWgrygU8>y+Inn2z1@rt;%6~jciQke3hYzYh457fzHLZ9Pi^zX&0oAk zbNbb9fZZE0ToZbjiF_ckfPL%TKV8UIzntBYe<2@kn{z3GYdG!K=m{!y*N2^{?^#mq z|60(mJqQCyfjUm|<0j#Ec;@tF>Qt`TJ`<>fja>E4tpJi*>L==9udVb$7o3XWUX)^t@OMRXg6$Dxvkv4fwQMs(wF+VA(E?e*jd}3WuWnF45FF`A;RX;CV zT!Jj$EB?-Rzn9CPrPietRkQ^$3zxHt%U}#!R$jK)${@C4Ny!4}qIZg)43m6(!!^#n n^4WC#KU{xc>%ORSq#({|8PcmQ`Rx8{?2&89|Nr~HlfZuiJ-FF$ literal 0 HcmV?d00001 diff --git a/ORAO_MiST/rtl/rom/BAS103.ROM b/ORAO_MiST/rtl/rom/BAS103.ROM new file mode 100644 index 0000000000000000000000000000000000000000..becb76aa9d2743e9c27af710135b01ffbbb154ad GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/ORAO_MiST/rtl/rom/CRT103.ROM b/ORAO_MiST/rtl/rom/CRT103.ROM new file mode 100644 index 0000000000000000000000000000000000000000..0e053fc6f3e3784b3047c1e513a1acc575baa92e GIT binary patch literal 8192 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 Jp4Psn{V)F690dRX literal 0 HcmV?d00001 diff --git a/ORAO_MiST/rtl/rom/rom_bas102.vhd b/ORAO_MiST/rtl/rom/rom_bas102.vhd new file mode 100644 index 00000000..6d50423b --- /dev/null +++ b/ORAO_MiST/rtl/rom/rom_bas102.vhd @@ -0,0 +1,1051 @@ +library IEEE; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity rom_bas 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 Behavioral of rom_bas is + type romDef is array(0 to 8191) of std_logic_vector(7 downto 0); + constant romData: romDef := ( +x"39", x"C6", x"55", x"C5", x"3F", x"CA", x"0B", x"C7", +x"22", x"C9", x"00", x"CD", x"4E", x"C9", x"98", x"DE", +x"B8", x"C6", x"90", x"C6", x"3B", x"C7", x"19", x"C6", +x"9B", x"C6", x"E5", x"C6", x"4E", x"C7", x"37", x"C6", +x"5E", x"C7", x"80", x"DE", x"8C", x"DE", x"26", x"F2", +x"F4", x"F0", x"DD", x"CF", x"28", x"D4", x"2E", x"C8", +x"60", x"C6", x"B4", x"C4", x"8B", x"C6", x"60", x"C4", +x"D8", x"D7", x"62", x"D8", x"F5", x"D7", x"0A", x"00", +x"AD", x"CF", x"CE", x"CF", x"AC", x"DA", x"C0", x"DB", +x"BD", x"D5", x"1B", x"DB", x"FC", x"DB", x"03", x"DC", +x"4C", x"DC", x"99", x"DC", x"1E", x"D4", x"8C", x"D3", +x"8C", x"D0", x"BD", x"D3", x"9B", x"D3", x"FC", x"D2", +x"10", x"D3", x"3C", x"D3", x"47", x"D3", x"79", x"6E", +x"D4", x"79", x"57", x"D4", x"7B", x"FD", x"D5", x"7B", +x"CC", x"D6", x"7F", x"B5", x"DA", x"50", x"68", x"CC", +x"46", x"65", x"CC", x"7D", x"EE", x"DA", x"5A", x"D7", +x"CB", x"64", x"95", x"CC", x"45", x"4E", x"C4", x"46", +x"4F", x"D2", x"4E", x"45", x"58", x"D4", x"44", x"41", +x"54", x"C1", x"49", x"4E", x"50", x"55", x"D4", x"44", +x"49", x"CD", x"52", x"45", x"41", x"C4", x"4D", x"4F", +x"D6", x"47", x"4F", x"54", x"CF", x"52", x"55", x"CE", +x"49", x"C6", x"52", x"45", x"53", x"54", x"4F", x"52", +x"C5", x"47", x"4F", x"53", x"55", x"C2", x"52", x"45", +x"54", x"55", x"52", x"CE", x"52", x"45", x"CD", x"53", +x"54", x"4F", x"D0", x"4F", x"CE", x"44", x"52", x"41", +x"D7", x"50", x"4C", x"4F", x"D4", x"4C", x"4F", x"41", +x"C4", x"53", x"41", x"56", x"C5", x"44", x"45", x"C6", +x"50", x"4F", x"4B", x"C5", x"50", x"52", x"49", x"4E", +x"D4", x"43", x"4F", x"4E", x"D4", x"4C", x"49", x"53", +x"D4", x"43", x"4C", x"45", x"41", x"D2", x"4E", x"45", +x"D7", x"54", x"41", x"42", x"A8", x"54", x"CF", x"46", +x"CE", x"53", x"50", x"43", x"A8", x"54", x"48", x"45", +x"CE", x"4E", x"4F", x"D4", x"53", x"54", x"45", x"D0", +x"AB", x"AD", x"AA", x"AF", x"E0", x"41", x"4E", x"C4", +x"4F", x"D2", x"BE", x"BD", x"BC", x"53", x"47", x"CE", +x"49", x"4E", x"D4", x"41", x"42", x"D3", x"55", x"53", +x"D2", x"46", x"52", x"C5", x"50", x"4F", x"D3", x"53", +x"51", x"D2", x"52", x"4E", x"C4", x"4C", x"4F", x"C7", +x"45", x"58", x"D0", x"43", x"4F", x"D3", x"53", x"49", +x"CE", x"54", x"41", x"CE", x"41", x"54", x"CE", x"50", +x"45", x"45", x"CB", x"4C", x"45", x"CE", x"53", x"54", +x"52", x"A4", x"56", x"41", x"CC", x"41", x"53", x"C3", +x"43", x"48", x"52", x"A4", x"4C", x"45", x"46", x"54", +x"A4", x"52", x"49", x"47", x"48", x"54", x"A4", x"4D", +x"49", x"44", x"A4", x"00", x"4E", x"46", x"53", x"4E", +x"52", x"47", x"4E", x"50", x"46", x"50", x"52", x"4F", +x"4D", x"50", x"4E", x"4E", x"50", x"50", x"44", x"44", +x"2F", x"30", x"50", x"4E", x"50", x"54", x"44", x"4E", +x"49", x"4B", x"4E", x"44", x"44", x"46", x"20", x"47", +x"52", x"45", x"5E", x"4B", x"41", x"00", x"20", x"55", +x"20", x"00", x"0D", x"0A", x"3E", x"0D", x"0A", x"00", +x"00", x"0D", x"0A", x"20", x"53", x"54", x"4F", x"50", +x"00", x"BA", x"E8", x"E8", x"E8", x"E8", x"BD", x"01", +x"01", x"C9", x"81", x"D0", x"21", x"A5", x"98", x"D0", +x"0A", x"BD", x"02", x"01", x"85", x"97", x"BD", x"03", +x"01", x"85", x"98", x"DD", x"03", x"01", x"D0", x"07", +x"A5", x"97", x"DD", x"02", x"01", x"F0", x"07", x"8A", +x"18", x"69", x"10", x"AA", x"D0", x"D8", x"60", x"20", +x"1F", x"C2", x"85", x"7F", x"84", x"80", x"38", x"A5", +x"A6", x"E5", x"AA", x"85", x"71", x"A8", x"A5", x"A7", +x"E5", x"AB", x"AA", x"E8", x"98", x"F0", x"23", x"A5", +x"A6", x"38", x"E5", x"71", x"85", x"A6", x"B0", x"03", +x"C6", x"A7", x"38", x"A5", x"A4", x"E5", x"71", x"85", +x"A4", x"B0", x"08", x"C6", x"A5", x"90", x"04", x"B1", +x"A6", x"91", x"A4", x"88", x"D0", x"F9", x"B1", x"A6", +x"91", x"A4", x"C6", x"A7", x"C6", x"A5", x"CA", x"D0", +x"F2", x"60", x"0A", x"69", x"33", x"B0", x"35", x"85", +x"71", x"BA", x"E4", x"71", x"90", x"2E", x"60", x"C4", +x"82", x"90", x"28", x"D0", x"04", x"C5", x"81", x"90", +x"22", x"48", x"A2", x"08", x"98", x"48", x"B5", x"A3", +x"CA", x"10", x"FA", x"20", x"47", x"D1", x"A2", x"F8", +x"68", x"95", x"AC", x"E8", x"30", x"FA", x"68", x"A8", +x"68", x"C4", x"82", x"90", x"06", x"D0", x"05", x"C5", +x"81", x"58", x"01", x"60", x"A2", x"0C", x"46", x"64", +x"20", x"6C", x"C8", x"20", x"E3", x"C8", x"BD", x"64", +x"C1", x"20", x"E5", x"C8", x"BD", x"65", x"C1", x"20", +x"E5", x"C8", x"20", x"91", x"C4", x"A9", x"86", x"A0", +x"C1", x"20", x"C3", x"C8", x"A4", x"88", x"C8", x"F0", +x"03", x"20", x"53", x"D9", x"46", x"64", x"A9", x"92", +x"A0", x"C1", x"20", x"03", x"00", x"20", x"57", x"C3", +x"86", x"C3", x"84", x"C4", x"20", x"BC", x"00", x"F0", +x"F4", x"A2", x"FF", x"86", x"88", x"90", x"06", x"20", +x"A6", x"C3", x"4C", x"F6", x"C5", x"20", x"7F", x"C7", +x"20", x"A6", x"C3", x"84", x"5D", x"20", x"32", x"C4", +x"90", x"44", x"A0", x"01", x"B1", x"AA", x"85", x"72", +x"A5", x"7B", x"85", x"71", x"A5", x"AB", x"85", x"74", +x"A5", x"AA", x"88", x"F1", x"AA", x"18", x"65", x"7B", +x"85", x"7B", x"85", x"73", x"A5", x"7C", x"69", x"FF", +x"85", x"7C", x"E5", x"AB", x"AA", x"38", x"A5", x"AA", +x"E5", x"7B", x"A8", x"B0", x"03", x"E8", x"C6", x"74", +x"18", x"65", x"71", x"90", x"03", x"C6", x"72", x"18", +x"B1", x"71", x"91", x"73", x"C8", x"D0", x"F9", x"E6", +x"72", x"E6", x"74", x"CA", x"D0", x"F2", x"A5", x"13", +x"F0", x"2F", x"A5", x"85", x"A4", x"86", x"85", x"81", +x"84", x"82", x"A5", x"7B", x"85", x"A6", x"65", x"5D", +x"85", x"A4", x"A4", x"7C", x"84", x"A7", x"90", x"01", +x"C8", x"84", x"A5", x"20", x"CF", x"C1", x"A5", x"7F", +x"A4", x"80", x"85", x"7B", x"84", x"7C", x"A4", x"5D", +x"88", x"B9", x"0F", x"00", x"91", x"AA", x"88", x"10", +x"F8", x"20", x"77", x"C4", x"A5", x"79", x"A4", x"7A", +x"85", x"71", x"84", x"72", x"18", x"A0", x"01", x"B1", +x"71", x"D0", x"03", x"4C", x"7D", x"C2", x"A0", x"04", +x"C8", x"B1", x"71", x"D0", x"FB", x"C8", x"98", x"65", +x"71", x"AA", x"A0", x"00", x"91", x"71", x"A5", x"72", +x"69", x"00", x"C8", x"91", x"71", x"86", x"71", x"85", +x"72", x"90", x"DA", x"20", x"E5", x"C8", x"CA", x"10", +x"08", x"20", x"E5", x"C8", x"20", x"6C", x"C8", x"A2", +x"00", x"20", x"86", x"C3", x"C9", x"0D", x"F0", x"23", +x"C9", x"40", x"F0", x"F0", x"C9", x"08", x"D0", x"05", +x"CA", x"30", x"0E", x"C6", x"0E", x"C9", x"20", x"90", +x"E8", x"E6", x"0E", x"E0", x"47", x"B0", x"05", x"95", +x"13", x"E8", x"D0", x"DD", x"A9", x"07", x"20", x"E5", +x"C8", x"D0", x"D6", x"4C", x"66", x"C8", x"20", x"EE", +x"FF", x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", +x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", x"29", +x"FF", x"C9", x"1E", x"D0", x"08", x"48", x"A5", x"64", +x"49", x"FF", x"85", x"64", x"68", x"60", x"A6", x"C3", +x"A0", x"04", x"84", x"60", x"B5", x"00", x"C9", x"20", +x"F0", x"3A", x"85", x"5C", x"C9", x"22", x"F0", x"58", +x"24", x"60", x"70", x"30", x"C9", x"3F", x"D0", x"04", +x"A9", x"97", x"D0", x"28", x"C9", x"30", x"90", x"04", +x"C9", x"3C", x"90", x"20", x"84", x"BA", x"A0", x"00", +x"84", x"5D", x"88", x"86", x"C3", x"CA", x"C8", x"E8", +x"B5", x"00", x"C9", x"20", x"F0", x"F9", x"38", x"F9", +x"84", x"C0", x"F0", x"F2", x"C9", x"80", x"D0", x"2F", +x"05", x"5D", x"A4", x"BA", x"E8", x"C8", x"99", x"0E", +x"00", x"B9", x"0E", x"00", x"F0", x"34", x"38", x"E9", +x"3A", x"F0", x"04", x"C9", x"49", x"D0", x"02", x"85", +x"60", x"38", x"E9", x"54", x"D0", x"A6", x"85", x"5C", +x"B5", x"00", x"F0", x"E0", x"C5", x"5C", x"F0", x"DC", +x"C8", x"99", x"0E", x"00", x"E8", x"D0", x"F1", x"A6", +x"C3", x"E6", x"5D", x"C8", x"B9", x"83", x"C0", x"10", +x"FA", x"B9", x"84", x"C0", x"D0", x"B2", x"B5", x"00", +x"10", x"C0", x"99", x"10", x"00", x"A9", x"12", x"85", +x"C3", x"60", x"A5", x"79", x"A6", x"7A", x"A0", x"01", +x"85", x"AA", x"86", x"AB", x"B1", x"AA", x"F0", x"1F", +x"C8", x"C8", x"A5", x"12", x"D1", x"AA", x"90", x"18", +x"F0", x"03", x"88", x"D0", x"09", x"A5", x"11", x"88", +x"D1", x"AA", x"90", x"0C", x"F0", x"0A", x"88", x"B1", +x"AA", x"AA", x"88", x"B1", x"AA", x"B0", x"D7", x"18", +x"60", x"D0", x"FD", x"A9", x"00", x"A8", x"91", x"79", +x"C8", x"91", x"79", x"A5", x"79", x"69", x"02", x"85", +x"7B", x"A5", x"7A", x"69", x"00", x"85", x"7C", x"20", +x"A7", x"C4", x"A5", x"85", x"A4", x"86", x"85", x"81", +x"84", x"82", x"A5", x"7B", x"A4", x"7C", x"85", x"7D", +x"84", x"7E", x"85", x"7F", x"84", x"80", x"20", x"1A", +x"C6", x"A2", x"68", x"86", x"65", x"68", x"8D", x"FD", +x"01", x"68", x"8D", x"FE", x"01", x"A2", x"FC", x"9A", +x"A9", x"00", x"85", x"8C", x"85", x"61", x"60", x"18", +x"A5", x"79", x"69", x"FF", x"85", x"C3", x"A5", x"7A", +x"69", x"FF", x"85", x"C4", x"60", x"90", x"06", x"F0", +x"04", x"C9", x"A4", x"D0", x"F7", x"20", x"7F", x"C7", +x"20", x"32", x"C4", x"20", x"C2", x"00", x"F0", x"0C", +x"C9", x"A4", x"D0", x"94", x"20", x"BC", x"00", x"20", +x"7F", x"C7", x"D0", x"8C", x"68", x"68", x"A5", x"11", +x"05", x"12", x"D0", x"06", x"A9", x"FF", x"85", x"11", +x"85", x"12", x"A0", x"01", x"84", x"60", x"B1", x"AA", +x"F0", x"41", x"20", x"29", x"C6", x"20", x"6C", x"C8", +x"C8", x"B1", x"AA", x"AA", x"C8", x"B1", x"AA", x"C5", +x"12", x"D0", x"04", x"E4", x"11", x"F0", x"02", x"B0", +x"2A", x"84", x"97", x"20", x"5E", x"D9", x"A9", x"20", +x"A4", x"97", x"29", x"7F", x"20", x"E5", x"C8", x"C9", +x"22", x"D0", x"06", x"A5", x"60", x"49", x"FF", x"85", +x"60", x"C8", x"B1", x"AA", x"D0", x"10", x"A8", x"B1", +x"AA", x"AA", x"C8", x"B1", x"AA", x"86", x"AA", x"85", +x"AB", x"D0", x"B7", x"4C", x"74", x"C2", x"10", x"DC", +x"C9", x"FF", x"F0", x"D8", x"24", x"60", x"30", x"D4", +x"38", x"E9", x"7F", x"AA", x"84", x"97", x"A0", x"FF", +x"CA", x"F0", x"08", x"C8", x"B9", x"84", x"C0", x"10", +x"FA", x"30", x"F5", x"C8", x"B9", x"84", x"C0", x"30", +x"B7", x"20", x"E5", x"C8", x"D0", x"F5", x"A9", x"80", +x"85", x"61", x"20", x"B9", x"C7", x"20", x"A1", x"C1", +x"D0", x"05", x"8A", x"69", x"0D", x"AA", x"9A", x"68", +x"68", x"A9", x"08", x"20", x"12", x"C2", x"20", x"1A", +x"C7", x"18", x"98", x"65", x"C3", x"48", x"A5", x"C4", +x"69", x"00", x"48", x"A5", x"88", x"48", x"A5", x"87", +x"48", x"A9", x"9D", x"20", x"03", x"CC", x"20", x"B0", +x"CA", x"20", x"AD", x"CA", x"A5", x"B0", x"09", x"7F", +x"25", x"AD", x"85", x"AD", x"A9", x"9F", x"A0", x"C5", +x"85", x"71", x"84", x"72", x"4C", x"66", x"CB", x"A9", +x"9C", x"A0", x"D5", x"20", x"4B", x"D7", x"20", x"C2", +x"00", x"C9", x"A2", x"D0", x"06", x"20", x"BC", x"00", +x"20", x"AD", x"CA", x"20", x"CA", x"D7", x"20", x"5B", +x"CB", x"A5", x"98", x"48", x"A5", x"97", x"48", x"A9", +x"81", x"48", x"20", x"29", x"C6", x"A5", x"C3", x"A4", +x"C4", x"F0", x"06", x"85", x"8B", x"84", x"8C", x"A0", +x"00", x"B1", x"C3", x"F0", x"07", x"C9", x"3A", x"F0", +x"1D", x"4C", x"0C", x"CC", x"A0", x"02", x"B1", x"C3", +x"18", x"F0", x"6E", x"C8", x"B1", x"C3", x"85", x"87", +x"C8", x"B1", x"C3", x"85", x"88", x"98", x"65", x"C3", +x"85", x"C3", x"90", x"02", x"E6", x"C4", x"20", x"BC", +x"00", x"20", x"FF", x"C5", x"4C", x"C2", x"C5", x"F0", +x"79", x"38", x"E9", x"80", x"B0", x"03", x"4C", x"B9", +x"C7", x"C9", x"1C", x"B0", x"CC", x"0A", x"A8", x"B9", +x"01", x"C0", x"48", x"B9", x"00", x"C0", x"48", x"4C", +x"BC", x"00", x"38", x"A5", x"79", x"E9", x"01", x"A4", +x"7A", x"B0", x"01", x"88", x"85", x"8F", x"84", x"90", +x"60", x"2C", x"11", x"02", x"10", x"FA", x"20", x"0F", +x"E6", x"F0", x"F5", x"20", x"86", x"C3", x"C9", x"03", +x"B0", x"01", x"18", x"D0", x"3D", x"A5", x"C3", x"A4", +x"C4", x"F0", x"0C", x"85", x"8B", x"84", x"8C", x"A5", +x"87", x"A4", x"88", x"85", x"89", x"84", x"8A", x"68", +x"68", x"A9", x"99", x"A0", x"C1", x"A2", x"00", x"86", +x"64", x"90", x"03", x"4C", x"69", x"C2", x"4C", x"74", +x"C2", x"D0", x"17", x"A2", x"1E", x"A4", x"8C", x"D0", +x"03", x"4C", x"4E", x"C2", x"A5", x"8B", x"85", x"C3", +x"84", x"C4", x"A5", x"89", x"A4", x"8A", x"85", x"87", +x"84", x"88", x"60", x"20", x"AE", x"D3", x"D0", x"FA", +x"E8", x"E0", x"0A", x"B0", x"04", x"CA", x"86", x"0D", +x"60", x"4C", x"88", x"CE", x"D0", x"EC", x"4C", x"7A", +x"C4", x"D0", x"03", x"4C", x"77", x"C4", x"20", x"7A", +x"C4", x"4C", x"B0", x"C6", x"A9", x"03", x"20", x"12", +x"C2", x"A5", x"C4", x"48", x"A5", x"C3", x"48", x"A5", +x"88", x"48", x"A5", x"87", x"48", x"A9", x"8C", x"48", +x"20", x"C2", x"00", x"20", x"B9", x"C6", x"4C", x"C2", +x"C5", x"20", x"7F", x"C7", x"20", x"1D", x"C7", x"A5", +x"88", x"C5", x"12", x"B0", x"0B", x"98", x"38", x"65", +x"C3", x"A6", x"C4", x"90", x"07", x"E8", x"B0", x"04", +x"A5", x"79", x"A6", x"7A", x"20", x"36", x"C4", x"90", +x"1E", x"A5", x"AA", x"E9", x"01", x"85", x"C3", x"A5", +x"AB", x"E9", x"00", x"85", x"C4", x"60", x"D0", x"FD", +x"A9", x"FF", x"85", x"97", x"20", x"A1", x"C1", x"9A", +x"C9", x"8C", x"F0", x"0B", x"A2", x"04", x"2C", x"A2", +x"0E", x"4C", x"4E", x"C2", x"4C", x"0C", x"CC", x"68", +x"68", x"85", x"87", x"68", x"85", x"88", x"68", x"85", +x"C3", x"68", x"85", x"C4", x"20", x"1A", x"C7", x"98", +x"18", x"65", x"C3", x"85", x"C3", x"90", x"02", x"E6", +x"C4", x"60", x"A2", x"3A", x"2C", x"A2", x"00", x"86", +x"5B", x"A0", x"00", x"84", x"5C", x"A5", x"5C", x"A6", +x"5B", x"85", x"5B", x"86", x"5C", x"B1", x"C3", x"F0", +x"E8", x"C5", x"5C", x"F0", x"E4", x"C8", x"C9", x"22", +x"F0", x"EB", x"D0", x"F1", x"20", x"C1", x"CA", x"20", +x"C2", x"00", x"C9", x"88", x"F0", x"05", x"A9", x"A0", +x"20", x"03", x"CC", x"A5", x"AC", x"D0", x"05", x"20", +x"1D", x"C7", x"F0", x"BB", x"20", x"C2", x"00", x"B0", +x"03", x"4C", x"B9", x"C6", x"4C", x"FF", x"C5", x"20", +x"AE", x"D3", x"48", x"C9", x"8C", x"F0", x"04", x"C9", +x"88", x"D0", x"91", x"C6", x"AF", x"D0", x"04", x"68", +x"4C", x"02", x"C6", x"20", x"BC", x"00", x"20", x"7F", +x"C7", x"C9", x"2C", x"F0", x"EE", x"68", x"60", x"A2", +x"00", x"86", x"11", x"86", x"12", x"B0", x"F7", x"E9", +x"2F", x"85", x"5B", x"A5", x"12", x"85", x"71", x"C9", +x"19", x"B0", x"D4", x"A5", x"11", x"0A", x"26", x"71", +x"0A", x"26", x"71", x"65", x"11", x"85", x"11", x"A5", +x"71", x"65", x"12", x"85", x"12", x"06", x"11", x"26", +x"12", x"A5", x"11", x"65", x"5B", x"85", x"11", x"90", +x"02", x"E6", x"12", x"20", x"BC", x"00", x"4C", x"85", +x"C7", x"20", x"0B", x"CD", x"85", x"97", x"84", x"98", +x"A9", x"AB", x"20", x"03", x"CC", x"A5", x"5F", x"48", +x"20", x"C1", x"CA", x"68", x"2A", x"20", x"B3", x"CA", +x"D0", x"03", x"4C", x"74", x"D7", x"A0", x"02", x"B1", +x"AE", x"C5", x"82", x"90", x"17", x"D0", x"07", x"88", +x"B1", x"AE", x"C5", x"81", x"90", x"0E", x"A4", x"AF", +x"C4", x"7C", x"90", x"08", x"D0", x"0D", x"A5", x"AE", +x"C5", x"7B", x"B0", x"07", x"A5", x"AE", x"A4", x"AF", +x"4C", x"11", x"C8", x"A0", x"00", x"B1", x"AE", x"20", +x"9C", x"D0", x"A5", x"9E", x"A4", x"9F", x"85", x"B8", +x"84", x"B9", x"20", x"8A", x"D2", x"A9", x"AC", x"A0", +x"00", x"85", x"9E", x"84", x"9F", x"20", x"EB", x"D2", +x"A0", x"00", x"B1", x"9E", x"91", x"97", x"C8", x"B1", +x"9E", x"91", x"97", x"C8", x"B1", x"9E", x"91", x"97", +x"60", x"20", x"C6", x"C8", x"20", x"C2", x"00", x"F0", +x"3B", x"F0", x"57", x"C9", x"9C", x"F0", x"6B", x"C9", +x"9F", x"F0", x"67", x"C9", x"2C", x"F0", x"4C", x"C9", +x"3B", x"F0", x"7A", x"20", x"C1", x"CA", x"24", x"5F", +x"30", x"DF", x"20", x"6E", x"D9", x"20", x"AE", x"D0", +x"A0", x"00", x"B1", x"AE", x"18", x"65", x"0E", x"C5", +x"0F", x"90", x"03", x"20", x"6C", x"C8", x"20", x"C6", +x"C8", x"20", x"E0", x"C8", x"D0", x"C6", x"A0", x"00", +x"94", x"13", x"A2", x"12", x"A9", x"0D", x"85", x"0E", +x"20", x"E5", x"C8", x"A9", x"0A", x"20", x"E5", x"C8", +x"8A", x"48", x"A6", x"0D", x"F0", x"08", x"A9", x"00", +x"20", x"E5", x"C8", x"CA", x"D0", x"FA", x"86", x"0E", +x"68", x"AA", x"60", x"A5", x"0E", x"C5", x"10", x"90", +x"06", x"20", x"6C", x"C8", x"4C", x"BD", x"C8", x"38", +x"E9", x"0E", x"B0", x"FC", x"49", x"FF", x"69", x"01", +x"D0", x"14", x"48", x"20", x"AB", x"D3", x"C9", x"29", +x"D0", x"66", x"68", x"C9", x"9C", x"D0", x"08", x"8A", +x"E5", x"0E", x"90", x"09", x"F0", x"07", x"AA", x"20", +x"E0", x"C8", x"CA", x"D0", x"FA", x"20", x"BC", x"00", +x"4C", x"31", x"C8", x"20", x"AE", x"D0", x"20", x"B6", +x"D2", x"AA", x"A0", x"00", x"E8", x"CA", x"F0", x"BA", +x"B1", x"71", x"20", x"E5", x"C8", x"C8", x"C9", x"0D", +x"D0", x"F3", x"20", x"78", x"C8", x"4C", x"CD", x"C8", +x"A9", x"20", x"2C", x"A9", x"3F", x"24", x"64", x"30", +x"18", x"48", x"C9", x"20", x"90", x"0B", x"A5", x"0E", +x"C5", x"0F", x"D0", x"03", x"20", x"6C", x"C8", x"E6", +x"0E", x"68", x"20", x"F1", x"FF", x"EA", x"EA", x"EA", +x"EA", x"29", x"FF", x"60", x"A5", x"62", x"F0", x"0B", +x"A5", x"8D", x"A4", x"8E", x"85", x"87", x"84", x"88", +x"4C", x"0C", x"CC", x"A9", x"2D", x"A0", x"CA", x"20", +x"C3", x"C8", x"A5", x"8B", x"A4", x"8C", x"85", x"C3", +x"84", x"C4", x"60", x"46", x"64", x"C9", x"22", x"D0", +x"0B", x"20", x"C1", x"CB", x"A9", x"3B", x"20", x"03", +x"CC", x"20", x"C6", x"C8", x"20", x"D4", x"CF", x"A9", +x"2C", x"85", x"12", x"20", x"46", x"C9", x"A5", x"13", +x"D0", x"12", x"18", x"4C", x"47", x"C6", x"20", x"E3", +x"C8", x"20", x"E0", x"C8", x"4C", x"57", x"C3", x"A6", +x"8F", x"A4", x"90", x"A9", x"98", x"85", x"62", x"86", +x"91", x"84", x"92", x"20", x"0B", x"CD", x"85", x"97", +x"84", x"98", x"A5", x"C3", x"A4", x"C4", x"85", x"11", +x"84", x"12", x"A6", x"91", x"A4", x"92", x"86", x"C3", +x"84", x"C4", x"20", x"C2", x"00", x"D0", x"0E", x"24", +x"62", x"30", x"62", x"20", x"E3", x"C8", x"20", x"46", +x"C9", x"86", x"C3", x"84", x"C4", x"20", x"BC", x"00", +x"24", x"5F", x"10", x"24", x"85", x"5B", x"C9", x"22", +x"F0", x"07", x"A9", x"3A", x"85", x"5B", x"A9", x"2C", +x"18", x"85", x"5C", x"A5", x"C3", x"A4", x"C4", x"69", +x"00", x"90", x"01", x"C8", x"20", x"B4", x"D0", x"20", +x"F3", x"D3", x"20", x"D5", x"C7", x"4C", x"B6", x"C9", +x"20", x"87", x"D8", x"20", x"74", x"D7", x"20", x"C2", +x"00", x"F0", x"07", x"C9", x"2C", x"F0", x"03", x"4C", +x"04", x"C9", x"A5", x"C3", x"A4", x"C4", x"85", x"91", +x"84", x"92", x"A5", x"11", x"A4", x"12", x"85", x"C3", +x"84", x"C4", x"20", x"C2", x"00", x"F0", x"2C", x"20", +x"01", x"CC", x"4C", x"5B", x"C9", x"20", x"1A", x"C7", +x"C8", x"AA", x"D0", x"12", x"A2", x"06", x"C8", x"B1", +x"C3", x"F0", x"69", x"C8", x"B1", x"C3", x"85", x"8D", +x"C8", x"B1", x"C3", x"C8", x"85", x"8E", x"B1", x"C3", +x"AA", x"20", x"0F", x"C7", x"E0", x"83", x"D0", x"DD", +x"4C", x"85", x"C9", x"A5", x"91", x"A4", x"92", x"A6", +x"62", x"F0", x"03", x"4C", x"24", x"C6", x"A0", x"00", +x"B1", x"91", x"F0", x"07", x"A9", x"1C", x"A0", x"CA", +x"4C", x"C3", x"C8", x"60", x"3F", x"50", x"52", x"45", +x"56", x"49", x"5E", x"45", x"20", x"55", x"4C", x"41", +x"5A", x"41", x"0D", x"0A", x"00", x"20", x"3F", x"20", +x"50", x"4F", x"4E", x"4F", x"56", x"49", x"20", x"55", +x"50", x"49", x"53", x"20", x"20", x"0D", x"0A", x"00", +x"D0", x"04", x"A0", x"00", x"F0", x"03", x"20", x"0B", +x"CD", x"85", x"97", x"84", x"98", x"20", x"A1", x"C1", +x"F0", x"04", x"A2", x"00", x"F0", x"68", x"9A", x"E8", +x"E8", x"E8", x"E8", x"8A", x"E8", x"E8", x"E8", x"E8", +x"E8", x"86", x"73", x"A0", x"01", x"20", x"4B", x"D7", +x"BA", x"BD", x"08", x"01", x"85", x"B0", x"A5", x"97", +x"A4", x"98", x"20", x"6C", x"D4", x"20", x"74", x"D7", +x"A0", x"01", x"20", x"FA", x"D7", x"BA", x"38", x"FD", +x"08", x"01", x"F0", x"17", x"BD", x"0D", x"01", x"85", +x"87", x"BD", x"0E", x"01", x"85", x"88", x"BD", x"10", +x"01", x"85", x"C3", x"BD", x"0F", x"01", x"85", x"C4", +x"4C", x"C2", x"C5", x"8A", x"69", x"0F", x"AA", x"9A", +x"20", x"C2", x"00", x"C9", x"2C", x"D0", x"F1", x"20", +x"BC", x"00", x"20", x"46", x"CA", x"20", x"C1", x"CA", +x"18", x"24", x"38", x"24", x"5F", x"30", x"03", x"B0", +x"03", x"60", x"B0", x"FD", x"A2", x"18", x"4C", x"4E", +x"C2", x"A6", x"C3", x"D0", x"02", x"C6", x"C4", x"C6", +x"C3", x"A2", x"00", x"24", x"48", x"8A", x"48", x"A9", +x"01", x"20", x"12", x"C2", x"20", x"A0", x"CB", x"A9", +x"00", x"85", x"9B", x"20", x"C2", x"00", x"38", x"E9", +x"AA", x"90", x"17", x"C9", x"03", x"B0", x"13", x"C9", +x"01", x"2A", x"49", x"01", x"45", x"9B", x"C5", x"9B", +x"90", x"61", x"85", x"9B", x"20", x"BC", x"00", x"4C", +x"DE", x"CA", x"A6", x"9B", x"D0", x"2C", x"B0", x"78", +x"69", x"07", x"90", x"74", x"65", x"5F", x"D0", x"03", +x"4C", x"4D", x"D2", x"69", x"FF", x"85", x"71", x"0A", +x"65", x"71", x"A8", x"68", x"D9", x"66", x"C0", x"B0", +x"64", x"20", x"B0", x"CA", x"48", x"20", x"43", x"CB", +x"68", x"A4", x"99", x"10", x"17", x"AA", x"F0", x"53", +x"D0", x"5C", x"46", x"5F", x"8A", x"2A", x"A6", x"C3", +x"D0", x"02", x"C6", x"C4", x"C6", x"C3", x"A0", x"1B", +x"85", x"9B", x"D0", x"D7", x"D9", x"66", x"C0", x"B0", +x"45", x"90", x"D9", x"B9", x"68", x"C0", x"48", x"B9", +x"67", x"C0", x"48", x"20", x"56", x"CB", x"A5", x"9B", +x"4C", x"CC", x"CA", x"4C", x"0C", x"CC", x"A5", x"B0", +x"BE", x"66", x"C0", x"A8", x"68", x"85", x"71", x"E6", +x"71", x"68", x"85", x"72", x"98", x"48", x"20", x"BA", +x"D7", x"A5", x"AF", x"48", x"A5", x"AE", x"48", x"A5", +x"AD", x"48", x"A5", x"AC", x"48", x"6C", x"71", x"00", +x"A0", x"FF", x"68", x"F0", x"20", x"C9", x"64", x"F0", +x"03", x"20", x"B0", x"CA", x"84", x"99", x"68", x"4A", +x"85", x"63", x"68", x"85", x"B3", x"68", x"85", x"B4", +x"68", x"85", x"B5", x"68", x"85", x"B6", x"68", x"85", +x"B7", x"45", x"B0", x"85", x"B8", x"A5", x"AC", x"60", +x"A9", x"00", x"85", x"5F", x"20", x"BC", x"00", x"B0", +x"03", x"4C", x"87", x"D8", x"20", x"81", x"CD", x"B0", +x"67", x"C9", x"2E", x"F0", x"F4", x"C9", x"A4", x"F0", +x"58", x"C9", x"A3", x"F0", x"E7", x"C9", x"22", x"D0", +x"0F", x"A5", x"C3", x"A4", x"C4", x"69", x"00", x"90", +x"01", x"C8", x"20", x"AE", x"D0", x"4C", x"F3", x"D3", +x"C9", x"A1", x"D0", x"13", x"A0", x"18", x"D0", x"3B", +x"20", x"05", x"CE", x"A5", x"AF", x"49", x"FF", x"A8", +x"A5", x"AE", x"49", x"FF", x"4C", x"C1", x"CF", x"C9", +x"9E", x"D0", x"03", x"4C", x"1E", x"D0", x"C9", x"AD", +x"90", x"03", x"4C", x"27", x"CC", x"20", x"FE", x"CB", +x"20", x"C1", x"CA", x"A9", x"29", x"2C", x"A9", x"28", +x"2C", x"A9", x"2C", x"A0", x"00", x"D1", x"C3", x"D0", +x"03", x"4C", x"BC", x"00", x"A2", x"02", x"4C", x"4E", +x"C2", x"A0", x"15", x"68", x"68", x"4C", x"1D", x"CB", +x"20", x"0B", x"CD", x"85", x"AE", x"84", x"AF", x"A6", +x"5F", x"F0", x"01", x"60", x"4C", x"4B", x"D7", x"0A", +x"48", x"AA", x"20", x"BC", x"00", x"E0", x"81", x"90", +x"20", x"20", x"FE", x"CB", x"20", x"C1", x"CA", x"20", +x"01", x"CC", x"20", x"B2", x"CA", x"68", x"AA", x"A5", +x"AF", x"48", x"A5", x"AE", x"48", x"8A", x"48", x"20", +x"AE", x"D3", x"68", x"A8", x"8A", x"48", x"4C", x"56", +x"CC", x"20", x"F5", x"CB", x"68", x"A8", x"B9", x"DE", +x"BF", x"85", x"A2", x"B9", x"DF", x"BF", x"85", x"A3", +x"20", x"A1", x"00", x"4C", x"B0", x"CA", x"A0", x"FF", +x"2C", x"A0", x"00", x"84", x"5D", x"20", x"05", x"CE", +x"A5", x"AE", x"45", x"5D", x"85", x"5B", x"A5", x"AF", +x"45", x"5D", x"85", x"5C", x"20", x"9B", x"D7", x"20", +x"05", x"CE", x"A5", x"AF", x"45", x"5D", x"25", x"5C", +x"45", x"5D", x"A8", x"A5", x"AE", x"45", x"5D", x"25", +x"5B", x"45", x"5D", x"4C", x"C1", x"CF", x"20", x"B3", +x"CA", x"B0", x"13", x"A5", x"B7", x"09", x"7F", x"25", +x"B4", x"85", x"B4", x"A9", x"B3", x"A0", x"00", x"20", +x"F8", x"D7", x"AA", x"4C", x"E1", x"CC", x"A9", x"00", +x"85", x"5F", x"C6", x"9B", x"20", x"B6", x"D2", x"85", +x"AC", x"86", x"AD", x"84", x"AE", x"A5", x"B5", x"A4", +x"B6", x"20", x"BA", x"D2", x"86", x"B5", x"84", x"B6", +x"AA", x"38", x"E5", x"AC", x"F0", x"08", x"A9", x"01", +x"90", x"04", x"A6", x"AC", x"A9", x"FF", x"85", x"B0", +x"A0", x"FF", x"E8", x"C8", x"CA", x"D0", x"07", x"A6", +x"B0", x"30", x"0F", x"18", x"90", x"0C", x"B1", x"B5", +x"D1", x"AD", x"F0", x"EF", x"A2", x"FF", x"B0", x"02", +x"A2", x"01", x"E8", x"8A", x"2A", x"25", x"63", x"F0", +x"02", x"A9", x"FF", x"4C", x"DB", x"D7", x"20", x"01", +x"CC", x"AA", x"20", x"10", x"CD", x"20", x"C2", x"00", +x"D0", x"F4", x"60", x"A2", x"00", x"20", x"C2", x"00", +x"86", x"5E", x"85", x"93", x"20", x"C2", x"00", x"20", +x"81", x"CD", x"B0", x"03", x"4C", x"0C", x"CC", x"A2", +x"00", x"86", x"5F", x"20", x"BC", x"00", x"90", x"05", +x"20", x"81", x"CD", x"90", x"0B", x"AA", x"20", x"BC", +x"00", x"90", x"FB", x"20", x"81", x"CD", x"B0", x"F6", +x"C9", x"24", x"D0", x"0B", x"A9", x"FF", x"85", x"5F", +x"8A", x"09", x"80", x"AA", x"20", x"BC", x"00", x"86", +x"94", x"38", x"05", x"61", x"E9", x"28", x"D0", x"03", +x"4C", x"17", x"CE", x"A9", x"00", x"85", x"61", x"A5", +x"7B", x"A6", x"7C", x"A0", x"00", x"86", x"AB", x"85", +x"AA", x"E4", x"7E", x"D0", x"04", x"C5", x"7D", x"F0", +x"22", x"A5", x"93", x"D1", x"AA", x"D0", x"08", x"A5", +x"94", x"C8", x"D1", x"AA", x"F0", x"61", x"88", x"18", +x"A5", x"AA", x"69", x"06", x"90", x"E1", x"E8", x"D0", +x"DC", x"C9", x"41", x"90", x"05", x"E9", x"5B", x"38", +x"E9", x"A5", x"60", x"68", x"48", x"C9", x"1A", x"D0", +x"07", x"A9", x"96", x"A0", x"CD", x"60", x"00", x"00", +x"A5", x"7D", x"A4", x"7E", x"85", x"AA", x"84", x"AB", +x"A5", x"7F", x"A4", x"80", x"85", x"A6", x"84", x"A7", +x"18", x"69", x"06", x"90", x"01", x"C8", x"85", x"A4", +x"84", x"A5", x"20", x"CF", x"C1", x"A5", x"A4", x"A4", +x"A5", x"C8", x"85", x"7D", x"84", x"7E", x"A0", x"00", +x"A5", x"93", x"91", x"AA", x"C8", x"A5", x"94", x"91", +x"AA", x"A9", x"00", x"C8", x"91", x"AA", x"C8", x"91", +x"AA", x"C8", x"91", x"AA", x"C8", x"91", x"AA", x"A5", +x"AA", x"18", x"69", x"02", x"A4", x"AB", x"90", x"01", +x"C8", x"85", x"95", x"84", x"96", x"60", x"A5", x"5D", +x"0A", x"69", x"05", x"65", x"AA", x"A4", x"AB", x"90", +x"01", x"C8", x"85", x"A4", x"84", x"A5", x"60", x"90", +x"80", x"00", x"00", x"20", x"BC", x"00", x"20", x"AD", +x"CA", x"A5", x"B0", x"30", x"0D", x"A5", x"AC", x"C9", +x"90", x"90", x"09", x"A9", x"F7", x"A0", x"CD", x"20", +x"F8", x"D7", x"D0", x"74", x"4C", x"31", x"D8", x"A5", +x"5E", x"48", x"A5", x"5F", x"48", x"A0", x"00", x"98", +x"48", x"A5", x"94", x"48", x"A5", x"93", x"48", x"20", +x"FB", x"CD", x"68", x"85", x"93", x"68", x"85", x"94", +x"68", x"A8", x"BA", x"BD", x"02", x"01", x"48", x"BD", +x"01", x"01", x"48", x"A5", x"AE", x"9D", x"02", x"01", +x"A5", x"AF", x"9D", x"01", x"01", x"C8", x"20", x"C2", +x"00", x"C9", x"2C", x"F0", x"D2", x"84", x"5D", x"20", +x"FB", x"CB", x"68", x"85", x"5F", x"68", x"85", x"5E", +x"A6", x"7D", x"A5", x"7E", x"86", x"AA", x"85", x"AB", +x"C5", x"80", x"D0", x"04", x"E4", x"7F", x"F0", x"39", +x"A0", x"00", x"B1", x"AA", x"C8", x"C5", x"93", x"D0", +x"06", x"A5", x"94", x"D1", x"AA", x"F0", x"16", x"C8", +x"B1", x"AA", x"18", x"65", x"AA", x"AA", x"C8", x"B1", +x"AA", x"65", x"AB", x"90", x"D7", x"A2", x"10", x"2C", +x"A2", x"08", x"4C", x"4E", x"C2", x"A2", x"12", x"A5", +x"5E", x"D0", x"F7", x"20", x"E6", x"CD", x"A5", x"5D", +x"A0", x"04", x"D1", x"AA", x"D0", x"E7", x"4C", x"24", +x"CF", x"20", x"E6", x"CD", x"20", x"1F", x"C2", x"A9", +x"00", x"A8", x"85", x"BB", x"A2", x"04", x"86", x"BA", +x"A5", x"93", x"91", x"AA", x"C8", x"A5", x"94", x"91", +x"AA", x"A5", x"5D", x"C8", x"C8", x"C8", x"91", x"AA", +x"A2", x"0B", x"A9", x"00", x"24", x"5E", x"50", x"08", +x"68", x"18", x"69", x"01", x"AA", x"68", x"69", x"00", +x"C8", x"91", x"AA", x"C8", x"8A", x"91", x"AA", x"20", +x"7C", x"CF", x"86", x"BA", x"85", x"BB", x"A4", x"71", +x"C6", x"5D", x"D0", x"DC", x"65", x"A5", x"B0", x"5D", +x"85", x"A5", x"A8", x"8A", x"65", x"A4", x"90", x"03", +x"C8", x"F0", x"52", x"20", x"1F", x"C2", x"85", x"7F", +x"84", x"80", x"A9", x"00", x"E6", x"BB", x"A4", x"BA", +x"F0", x"05", x"88", x"91", x"A4", x"D0", x"FB", x"C6", +x"A5", x"C6", x"BB", x"D0", x"F5", x"E6", x"A5", x"38", +x"A5", x"7F", x"E5", x"AA", x"A0", x"02", x"91", x"AA", +x"A5", x"80", x"C8", x"E5", x"AB", x"91", x"AA", x"A5", +x"5E", x"D0", x"58", x"C8", x"B1", x"AA", x"85", x"5D", +x"A9", x"00", x"85", x"BA", x"85", x"BB", x"C8", x"68", +x"AA", x"85", x"AE", x"68", x"85", x"AF", x"D1", x"AA", +x"90", x"0E", x"D0", x"06", x"C8", x"8A", x"D1", x"AA", +x"90", x"07", x"4C", x"85", x"CE", x"4C", x"4C", x"C2", +x"C8", x"A5", x"BB", x"05", x"BA", x"18", x"F0", x"0A", +x"20", x"7C", x"CF", x"8A", x"65", x"AE", x"AA", x"98", +x"A4", x"71", x"65", x"AF", x"86", x"BA", x"C6", x"5D", +x"D0", x"CA", x"06", x"BA", x"2A", x"B0", x"DB", x"06", +x"BA", x"2A", x"B0", x"D6", x"A8", x"A5", x"BA", x"65", +x"A4", x"85", x"95", x"98", x"65", x"A5", x"85", x"96", +x"A8", x"A5", x"95", x"60", x"84", x"71", x"B1", x"AA", +x"85", x"76", x"88", x"B1", x"AA", x"85", x"77", x"A9", +x"10", x"85", x"A8", x"A2", x"00", x"A0", x"00", x"8A", +x"0A", x"AA", x"98", x"2A", x"A8", x"B0", x"AE", x"06", +x"BA", x"26", x"BB", x"90", x"0B", x"18", x"8A", x"65", +x"76", x"AA", x"98", x"65", x"77", x"A8", x"B0", x"9D", +x"C6", x"A8", x"D0", x"E3", x"60", x"A5", x"5F", x"F0", +x"03", x"20", x"B6", x"D2", x"20", x"47", x"D1", x"38", +x"A5", x"81", x"E5", x"7F", x"A8", x"A5", x"82", x"E5", +x"80", x"A2", x"00", x"86", x"5F", x"85", x"AD", x"84", +x"AE", x"A2", x"90", x"4C", x"E3", x"D7", x"A4", x"0E", +x"A9", x"00", x"F0", x"ED", x"A6", x"88", x"E8", x"D0", +x"A2", x"A2", x"16", x"4C", x"4E", x"C2", x"20", x"0B", +x"D0", x"20", x"D4", x"CF", x"20", x"FE", x"CB", x"A9", +x"80", x"85", x"61", x"20", x"0B", x"CD", x"20", x"B0", +x"CA", x"20", x"FB", x"CB", x"A9", x"AB", x"20", x"03", +x"CC", x"A5", x"96", x"48", x"A5", x"95", x"48", x"A5", +x"C4", x"48", x"A5", x"C3", x"48", x"20", x"0C", x"C7", +x"4C", x"7A", x"D0", x"A9", x"9E", x"20", x"03", x"CC", +x"09", x"80", x"85", x"61", x"20", x"12", x"CD", x"85", +x"9C", x"84", x"9D", x"4C", x"B0", x"CA", x"20", x"0B", +x"D0", x"A5", x"9D", x"48", x"A5", x"9C", x"48", x"20", +x"F5", x"CB", x"20", x"B0", x"CA", x"68", x"85", x"9C", +x"68", x"85", x"9D", x"A0", x"02", x"A2", x"20", x"B1", +x"9C", x"F0", x"A0", x"85", x"95", x"AA", x"C8", x"B1", +x"9C", x"85", x"96", x"B1", x"95", x"48", x"88", x"10", +x"FA", x"A4", x"96", x"20", x"78", x"D7", x"A5", x"C4", +x"48", x"A5", x"C3", x"48", x"B1", x"9C", x"85", x"C3", +x"C8", x"B1", x"9C", x"85", x"C4", x"A5", x"96", x"48", +x"A5", x"95", x"48", x"20", x"AD", x"CA", x"68", x"85", +x"9C", x"68", x"85", x"9D", x"20", x"C2", x"00", x"F0", +x"03", x"4C", x"0C", x"CC", x"68", x"85", x"C3", x"68", +x"85", x"C4", x"A0", x"00", x"68", x"91", x"9C", x"68", +x"C8", x"91", x"9C", x"68", x"C8", x"91", x"9C", x"68", +x"C8", x"91", x"9C", x"60", x"20", x"B0", x"CA", x"A0", +x"00", x"20", x"70", x"D9", x"68", x"68", x"A9", x"FF", +x"A0", x"00", x"F0", x"12", x"A6", x"AE", x"A4", x"AF", +x"86", x"9E", x"84", x"9F", x"20", x"15", x"D1", x"86", +x"AD", x"84", x"AE", x"85", x"AC", x"60", x"A2", x"22", +x"86", x"5B", x"86", x"5C", x"85", x"B8", x"84", x"B9", +x"85", x"AD", x"84", x"AE", x"A0", x"FF", x"C8", x"B1", +x"B8", x"F0", x"0C", x"C5", x"5B", x"F0", x"04", x"C5", +x"5C", x"D0", x"F3", x"C9", x"22", x"F0", x"01", x"18", +x"84", x"AC", x"98", x"65", x"B8", x"85", x"BA", x"A6", +x"B9", x"90", x"01", x"E8", x"86", x"BB", x"A5", x"B9", +x"D0", x"0B", x"98", x"20", x"9C", x"D0", x"A6", x"B8", +x"A4", x"B9", x"20", x"98", x"D2", x"A6", x"65", x"E0", +x"71", x"D0", x"05", x"A2", x"1C", x"4C", x"4E", x"C2", +x"A5", x"AC", x"95", x"00", x"A5", x"AD", x"95", x"01", +x"A5", x"AE", x"95", x"02", x"A0", x"00", x"86", x"AE", +x"84", x"AF", x"88", x"84", x"5F", x"86", x"66", x"E8", +x"E8", x"E8", x"86", x"65", x"60", x"46", x"60", x"48", +x"49", x"FF", x"38", x"65", x"81", x"A4", x"82", x"B0", +x"01", x"88", x"C4", x"80", x"90", x"11", x"D0", x"04", +x"C5", x"7F", x"90", x"0B", x"85", x"81", x"84", x"82", +x"85", x"83", x"84", x"84", x"AA", x"68", x"60", x"A2", +x"0C", x"A5", x"60", x"30", x"B8", x"20", x"47", x"D1", +x"A9", x"80", x"85", x"60", x"68", x"D0", x"D0", x"A6", +x"85", x"A5", x"86", x"86", x"81", x"85", x"82", x"A0", +x"00", x"84", x"9D", x"A5", x"7F", x"A6", x"80", x"85", +x"AA", x"86", x"AB", x"A9", x"68", x"A2", x"00", x"85", +x"71", x"86", x"72", x"C5", x"65", x"F0", x"05", x"20", +x"D9", x"D1", x"F0", x"F7", x"A9", x"06", x"85", x"A0", +x"A5", x"7B", x"A6", x"7C", x"85", x"71", x"86", x"72", +x"E4", x"7E", x"D0", x"04", x"C5", x"7D", x"F0", x"05", +x"20", x"D3", x"D1", x"F0", x"F3", x"85", x"A4", x"86", +x"A5", x"A9", x"03", x"85", x"A0", x"A5", x"A4", x"A6", +x"A5", x"E4", x"80", x"D0", x"07", x"C5", x"7F", x"D0", +x"03", x"4C", x"18", x"D2", x"85", x"71", x"86", x"72", +x"A0", x"01", x"B1", x"71", x"08", x"C8", x"B1", x"71", +x"65", x"A4", x"85", x"A4", x"C8", x"B1", x"71", x"65", +x"A5", x"85", x"A5", x"28", x"10", x"D7", x"C8", x"B1", +x"71", x"0A", x"69", x"05", x"65", x"71", x"85", x"71", +x"90", x"02", x"E6", x"72", x"A6", x"72", x"E4", x"A5", +x"D0", x"04", x"C5", x"A4", x"F0", x"C3", x"20", x"D9", +x"D1", x"F0", x"F3", x"C8", x"B1", x"71", x"10", x"30", +x"C8", x"B1", x"71", x"F0", x"2B", x"C8", x"B1", x"71", +x"AA", x"C8", x"B1", x"71", x"C5", x"82", x"90", x"06", +x"D0", x"1E", x"E4", x"81", x"B0", x"1A", x"C5", x"AB", +x"90", x"16", x"D0", x"04", x"E4", x"AA", x"90", x"10", +x"86", x"AA", x"85", x"AB", x"A5", x"71", x"A6", x"72", +x"85", x"9C", x"86", x"9D", x"A5", x"A0", x"85", x"A2", +x"A5", x"A0", x"18", x"65", x"71", x"85", x"71", x"90", +x"02", x"E6", x"72", x"A6", x"72", x"A0", x"00", x"60", +x"A6", x"9D", x"F0", x"F7", x"A5", x"A2", x"29", x"04", +x"4A", x"A8", x"85", x"A2", x"B1", x"9C", x"65", x"AA", +x"85", x"A6", x"A5", x"AB", x"69", x"00", x"85", x"A7", +x"A5", x"81", x"A6", x"82", x"85", x"A4", x"86", x"A5", +x"20", x"D6", x"C1", x"A4", x"A2", x"C8", x"A5", x"A4", +x"91", x"9C", x"AA", x"E6", x"A5", x"A5", x"A5", x"C8", +x"91", x"9C", x"4C", x"4B", x"D1", x"A5", x"AF", x"48", +x"A5", x"AE", x"48", x"20", x"A0", x"CB", x"20", x"B2", +x"CA", x"68", x"85", x"B8", x"68", x"85", x"B9", x"A0", +x"00", x"B1", x"B8", x"18", x"71", x"AE", x"90", x"05", +x"A2", x"1A", x"4C", x"4E", x"C2", x"20", x"9C", x"D0", +x"20", x"8A", x"D2", x"A5", x"9E", x"A4", x"9F", x"20", +x"BA", x"D2", x"20", x"9C", x"D2", x"A5", x"B8", x"A4", +x"B9", x"20", x"BA", x"D2", x"20", x"ED", x"D0", x"4C", +x"DB", x"CA", x"A0", x"00", x"B1", x"B8", x"48", x"C8", +x"B1", x"B8", x"AA", x"C8", x"B1", x"B8", x"A8", x"68", +x"86", x"71", x"84", x"72", x"A8", x"F0", x"0A", x"48", +x"88", x"B1", x"71", x"91", x"83", x"98", x"D0", x"F8", +x"68", x"18", x"65", x"83", x"85", x"83", x"90", x"02", +x"E6", x"84", x"60", x"20", x"B2", x"CA", x"A5", x"AE", +x"A4", x"AF", x"85", x"71", x"84", x"72", x"20", x"EB", +x"D2", x"08", x"A0", x"00", x"B1", x"71", x"48", x"C8", +x"B1", x"71", x"AA", x"C8", x"B1", x"71", x"A8", x"68", +x"28", x"D0", x"13", x"C4", x"82", x"D0", x"0F", x"E4", +x"81", x"D0", x"0B", x"48", x"18", x"65", x"81", x"85", +x"81", x"90", x"02", x"E6", x"82", x"68", x"86", x"71", +x"84", x"72", x"60", x"C4", x"67", x"D0", x"0C", x"C5", +x"66", x"D0", x"08", x"85", x"65", x"E9", x"03", x"85", +x"66", x"A0", x"00", x"60", x"20", x"B1", x"D3", x"8A", +x"48", x"A9", x"01", x"20", x"A4", x"D0", x"68", x"A0", +x"00", x"91", x"AD", x"68", x"68", x"4C", x"ED", x"D0", +x"20", x"6F", x"D3", x"D1", x"9E", x"98", x"90", x"04", +x"B1", x"9E", x"AA", x"98", x"48", x"8A", x"48", x"20", +x"A4", x"D0", x"A5", x"9E", x"A4", x"9F", x"20", x"BA", +x"D2", x"68", x"A8", x"68", x"18", x"65", x"71", x"85", +x"71", x"90", x"02", x"E6", x"72", x"98", x"20", x"9C", +x"D2", x"4C", x"ED", x"D0", x"20", x"6F", x"D3", x"18", +x"F1", x"9E", x"49", x"FF", x"4C", x"16", x"D3", x"A9", +x"FF", x"85", x"AF", x"20", x"C2", x"00", x"C9", x"29", +x"F0", x"06", x"20", x"01", x"CC", x"20", x"AE", x"D3", +x"20", x"6F", x"D3", x"CA", x"8A", x"48", x"18", x"A2", +x"00", x"F1", x"9E", x"B0", x"B8", x"49", x"FF", x"C5", +x"AF", x"90", x"B3", x"A5", x"AF", x"B0", x"AF", x"20", +x"FB", x"CB", x"68", x"85", x"A2", x"68", x"85", x"A3", +x"68", x"68", x"68", x"AA", x"68", x"85", x"9E", x"68", +x"85", x"9F", x"A0", x"00", x"8A", x"F0", x"21", x"E6", +x"A2", x"6C", x"A2", x"00", x"20", x"92", x"D3", x"4C", +x"D0", x"CF", x"20", x"B3", x"D2", x"A2", x"00", x"86", +x"5F", x"A8", x"60", x"20", x"92", x"D3", x"F0", x"08", +x"A0", x"00", x"B1", x"71", x"A8", x"4C", x"8F", x"D3", +x"4C", x"88", x"CE", x"20", x"BC", x"00", x"20", x"AD", +x"CA", x"20", x"01", x"CE", x"A6", x"AE", x"D0", x"F0", +x"A6", x"AF", x"4C", x"C2", x"00", x"20", x"92", x"D3", +x"D0", x"03", x"4C", x"F1", x"D4", x"A6", x"C3", x"A4", +x"C4", x"86", x"BA", x"84", x"BB", x"A6", x"71", x"86", +x"C3", x"18", x"65", x"71", x"85", x"73", x"A6", x"72", +x"86", x"C4", x"90", x"01", x"E8", x"86", x"74", x"A0", +x"00", x"B1", x"73", x"48", x"A9", x"00", x"91", x"73", +x"20", x"C2", x"00", x"20", x"87", x"D8", x"68", x"A0", +x"00", x"91", x"73", x"A6", x"BA", x"A4", x"BB", x"86", +x"C3", x"84", x"C4", x"60", x"20", x"AD", x"CA", x"20", +x"08", x"D4", x"20", x"01", x"CC", x"4C", x"AE", x"D3", +x"A5", x"B0", x"30", x"9C", x"A5", x"AC", x"C9", x"91", +x"B0", x"96", x"20", x"31", x"D8", x"A5", x"AE", x"A4", +x"AF", x"84", x"11", x"85", x"12", x"60", x"20", x"08", +x"D4", x"A0", x"00", x"B1", x"11", x"A8", x"4C", x"D0", +x"CF", x"20", x"FC", x"D3", x"8A", x"A0", x"00", x"91", +x"11", x"60", x"20", x"FC", x"D3", x"86", x"97", x"A2", +x"00", x"20", x"C2", x"00", x"F0", x"03", x"20", x"02", +x"D4", x"86", x"98", x"A0", x"00", x"B1", x"11", x"45", +x"98", x"25", x"97", x"F0", x"F8", x"60", x"A9", x"96", +x"A0", x"DA", x"4C", x"6C", x"D4", x"20", x"4D", x"D6", +x"A5", x"B0", x"49", x"FF", x"85", x"B0", x"45", x"B7", +x"85", x"B8", x"A5", x"AC", x"4C", x"6F", x"D4", x"20", +x"7B", x"D5", x"90", x"3C", x"20", x"4D", x"D6", x"D0", +x"03", x"4C", x"9B", x"D7", x"A6", x"B9", x"86", x"A3", +x"A2", x"B3", x"A5", x"B3", x"A8", x"F0", x"CE", x"38", +x"E5", x"AC", x"F0", x"24", x"90", x"12", x"84", x"AC", +x"A4", x"B7", x"84", x"B0", x"49", x"FF", x"69", x"00", +x"A0", x"00", x"84", x"A3", x"A2", x"AC", x"D0", x"04", +x"A0", x"00", x"84", x"B9", x"C9", x"F9", x"30", x"C7", +x"A8", x"A5", x"B9", x"56", x"01", x"20", x"92", x"D5", +x"24", x"B8", x"10", x"4C", x"A0", x"AC", x"E0", x"B3", +x"F0", x"02", x"A0", x"B3", x"38", x"49", x"FF", x"65", +x"A3", x"85", x"B9", x"B9", x"03", x"00", x"F5", x"03", +x"85", x"AF", x"B9", x"02", x"00", x"F5", x"02", x"85", +x"AE", x"B9", x"01", x"00", x"F5", x"01", x"85", x"AD", +x"B0", x"03", x"20", x"37", x"D5", x"A0", x"00", x"98", +x"18", x"A6", x"AD", x"D0", x"3E", x"A6", x"AE", x"86", +x"AD", x"A6", x"AF", x"86", x"AE", x"A6", x"B9", x"86", +x"AF", x"84", x"B9", x"69", x"08", x"C9", x"18", x"D0", +x"E8", x"A9", x"00", x"85", x"AC", x"85", x"B0", x"60", +x"65", x"A3", x"85", x"B9", x"A5", x"AF", x"65", x"B6", +x"85", x"AF", x"A5", x"AE", x"65", x"B5", x"85", x"AE", +x"A5", x"AD", x"65", x"B4", x"85", x"AD", x"4C", x"28", +x"D5", x"69", x"01", x"06", x"B9", x"26", x"AF", x"26", +x"AE", x"26", x"AD", x"10", x"F4", x"38", x"E5", x"AC", +x"B0", x"CF", x"49", x"FF", x"69", x"01", x"85", x"AC", +x"90", x"0C", x"E6", x"AC", x"F0", x"36", x"66", x"AD", +x"66", x"AE", x"66", x"AF", x"66", x"B9", x"60", x"A5", +x"B0", x"49", x"FF", x"85", x"B0", x"A5", x"AD", x"49", +x"FF", x"85", x"AD", x"A5", x"AE", x"49", x"FF", x"85", +x"AE", x"A5", x"AF", x"49", x"FF", x"85", x"AF", x"A5", +x"B9", x"49", x"FF", x"85", x"B9", x"E6", x"B9", x"D0", +x"0A", x"E6", x"AF", x"D0", x"06", x"E6", x"AE", x"D0", +x"02", x"E6", x"AD", x"60", x"A2", x"0A", x"4C", x"4E", +x"C2", x"A2", x"74", x"B4", x"03", x"84", x"B9", x"B4", +x"02", x"94", x"03", x"B4", x"01", x"94", x"02", x"A4", +x"B2", x"94", x"01", x"69", x"08", x"30", x"EC", x"F0", +x"EA", x"E9", x"08", x"A8", x"A5", x"B9", x"B0", x"12", +x"16", x"01", x"90", x"02", x"F6", x"01", x"76", x"01", +x"76", x"01", x"76", x"02", x"76", x"03", x"6A", x"C8", +x"D0", x"EE", x"18", x"60", x"81", x"00", x"00", x"00", +x"02", x"80", x"19", x"56", x"62", x"80", x"76", x"22", +x"F3", x"82", x"38", x"AA", x"40", x"80", x"35", x"04", +x"F3", x"81", x"35", x"04", x"F3", x"80", x"80", x"00", +x"00", x"80", x"31", x"72", x"18", x"20", x"CA", x"D7", +x"F0", x"02", x"10", x"03", x"4C", x"88", x"CE", x"A5", +x"AC", x"E9", x"7F", x"48", x"A9", x"80", x"85", x"AC", +x"A9", x"AD", x"A0", x"D5", x"20", x"6C", x"D4", x"A9", +x"B1", x"A0", x"D5", x"20", x"CA", x"D6", x"A9", x"9C", +x"A0", x"D5", x"20", x"55", x"D4", x"A9", x"A0", x"A0", +x"D5", x"20", x"6E", x"DB", x"A9", x"B5", x"A0", x"D5", +x"20", x"6C", x"D4", x"68", x"20", x"12", x"D9", x"A9", +x"B9", x"A0", x"D5", x"20", x"4D", x"D6", x"F0", x"4C", +x"20", x"73", x"D6", x"A9", x"00", x"85", x"75", x"85", +x"76", x"85", x"77", x"A5", x"B9", x"20", x"22", x"D6", +x"A5", x"AF", x"20", x"22", x"D6", x"A5", x"AE", x"20", +x"22", x"D6", x"A5", x"AD", x"20", x"27", x"D6", x"4C", +x"3C", x"D7", x"D0", x"03", x"4C", x"69", x"D5", x"4A", +x"09", x"80", x"A8", x"90", x"13", x"18", x"A5", x"77", +x"65", x"B6", x"85", x"77", x"A5", x"76", x"65", x"B5", +x"85", x"76", x"A5", x"75", x"65", x"B4", x"85", x"75", +x"66", x"75", x"66", x"76", x"66", x"77", x"66", x"B9", +x"98", x"4A", x"D0", x"DE", x"60", x"85", x"71", x"84", +x"72", x"A0", x"03", x"B1", x"71", x"85", x"B6", x"88", +x"B1", x"71", x"85", x"B5", x"88", x"B1", x"71", x"85", +x"B7", x"45", x"B0", x"85", x"B8", x"A5", x"B7", x"09", +x"80", x"85", x"B4", x"88", x"B1", x"71", x"85", x"B3", +x"A5", x"AC", x"60", x"A5", x"B3", x"F0", x"1F", x"18", +x"65", x"AC", x"90", x"04", x"30", x"1D", x"18", x"2C", +x"10", x"14", x"69", x"80", x"85", x"AC", x"D0", x"03", +x"4C", x"F5", x"D4", x"A5", x"B8", x"85", x"B0", x"60", +x"A5", x"B0", x"49", x"FF", x"30", x"05", x"68", x"68", +x"4C", x"F1", x"D4", x"4C", x"64", x"D5", x"20", x"AB", +x"D7", x"AA", x"F0", x"10", x"18", x"69", x"02", x"B0", +x"F2", x"A2", x"00", x"86", x"B8", x"20", x"7C", x"D4", +x"E6", x"AC", x"F0", x"E7", x"60", x"84", x"20", x"00", +x"00", x"20", x"AB", x"D7", x"A9", x"B5", x"A0", x"D6", +x"A2", x"00", x"86", x"B8", x"20", x"4B", x"D7", x"4C", +x"CD", x"D6", x"20", x"4D", x"D6", x"F0", x"68", x"20", +x"BA", x"D7", x"A9", x"00", x"38", x"E5", x"AC", x"85", +x"AC", x"20", x"73", x"D6", x"E6", x"AC", x"F0", x"BB", +x"A2", x"FD", x"A9", x"01", x"A4", x"B4", x"C4", x"AD", +x"D0", x"0A", x"A4", x"B5", x"C4", x"AE", x"D0", x"04", +x"A4", x"B6", x"C4", x"AF", x"08", x"2A", x"90", x"09", +x"E8", x"95", x"77", x"F0", x"2A", x"10", x"2C", x"A9", +x"01", x"28", x"B0", x"0C", x"06", x"B6", x"26", x"B5", +x"26", x"B4", x"B0", x"E8", x"30", x"D6", x"10", x"E4", +x"A8", x"A5", x"B6", x"E5", x"AF", x"85", x"B6", x"A5", +x"B5", x"E5", x"AE", x"85", x"B5", x"A5", x"B4", x"E5", +x"AD", x"85", x"B4", x"98", x"4C", x"04", x"D7", x"A9", +x"40", x"D0", x"D6", x"0A", x"0A", x"0A", x"0A", x"0A", +x"0A", x"85", x"B9", x"28", x"4C", x"3C", x"D7", x"A2", +x"14", x"4C", x"4E", x"C2", x"A5", x"75", x"85", x"AD", +x"A5", x"76", x"85", x"AE", x"A5", x"77", x"85", x"AF", +x"4C", x"D5", x"D4", x"85", x"71", x"84", x"72", x"A0", +x"03", x"B1", x"71", x"85", x"AF", x"88", x"B1", x"71", +x"85", x"AE", x"88", x"B1", x"71", x"85", x"B0", x"09", +x"80", x"85", x"AD", x"88", x"B1", x"71", x"85", x"AC", +x"84", x"B9", x"60", x"A2", x"A8", x"2C", x"A2", x"A4", +x"A0", x"00", x"F0", x"04", x"A6", x"97", x"A4", x"98", +x"20", x"BA", x"D7", x"86", x"71", x"84", x"72", x"A0", +x"03", x"A5", x"AF", x"91", x"71", x"88", x"A5", x"AE", +x"91", x"71", x"88", x"A5", x"B0", x"09", x"7F", x"25", +x"AD", x"91", x"71", x"88", x"A5", x"AC", x"91", x"71", +x"84", x"B9", x"60", x"A5", x"B7", x"85", x"B0", x"A2", +x"04", x"B5", x"B2", x"95", x"AB", x"CA", x"D0", x"F9", +x"86", x"B9", x"60", x"20", x"BA", x"D7", x"A2", x"05", +x"B5", x"AB", x"95", x"B2", x"CA", x"D0", x"F9", x"86", +x"B9", x"60", x"A5", x"AC", x"F0", x"FB", x"06", x"B9", +x"90", x"F7", x"20", x"59", x"D5", x"D0", x"F2", x"4C", +x"2A", x"D5", x"A5", x"AC", x"F0", x"09", x"A5", x"B0", +x"2A", x"A9", x"FF", x"B0", x"02", x"A9", x"01", x"60", +x"20", x"CA", x"D7", x"85", x"AD", x"A9", x"00", x"85", +x"AE", x"A2", x"88", x"A5", x"AD", x"49", x"FF", x"2A", +x"A9", x"00", x"85", x"AF", x"86", x"AC", x"85", x"B9", +x"85", x"B0", x"4C", x"D0", x"D4", x"46", x"B0", x"60", +x"85", x"73", x"84", x"74", x"A0", x"00", x"B1", x"73", +x"C8", x"AA", x"F0", x"C6", x"B1", x"73", x"45", x"B0", +x"30", x"C4", x"E4", x"AC", x"D0", x"1A", x"B1", x"73", +x"09", x"80", x"C5", x"AD", x"D0", x"12", x"C8", x"B1", +x"73", x"C5", x"AE", x"D0", x"0B", x"C8", x"A9", x"7F", +x"C5", x"B9", x"B1", x"73", x"E5", x"AF", x"F0", x"28", +x"A5", x"B0", x"90", x"02", x"49", x"FF", x"4C", x"D0", +x"D7", x"A5", x"AC", x"F0", x"4A", x"38", x"E9", x"98", +x"24", x"B0", x"10", x"09", x"AA", x"A9", x"FF", x"85", +x"B2", x"20", x"3D", x"D5", x"8A", x"A2", x"AC", x"C9", +x"F9", x"10", x"06", x"20", x"7B", x"D5", x"84", x"B2", +x"60", x"A8", x"A5", x"B0", x"29", x"80", x"46", x"AD", +x"05", x"AD", x"85", x"AD", x"20", x"92", x"D5", x"84", +x"B2", x"60", x"A5", x"AC", x"C9", x"98", x"B0", x"1E", +x"20", x"31", x"D8", x"84", x"B9", x"A5", x"B0", x"84", +x"B0", x"49", x"80", x"2A", x"A9", x"98", x"85", x"AC", +x"A5", x"AF", x"85", x"5B", x"4C", x"D0", x"D4", x"85", +x"AD", x"85", x"AE", x"85", x"AF", x"A8", x"60", x"A0", +x"00", x"A2", x"09", x"94", x"A8", x"CA", x"10", x"FB", +x"90", x"0F", x"C9", x"2D", x"D0", x"04", x"86", x"B1", +x"F0", x"04", x"C9", x"2B", x"D0", x"05", x"20", x"BC", +x"00", x"90", x"5B", x"C9", x"2E", x"F0", x"2E", x"C9", +x"45", x"D0", x"30", x"20", x"BC", x"00", x"90", x"17", +x"C9", x"A4", x"F0", x"0E", x"C9", x"2D", x"F0", x"0A", +x"C9", x"A3", x"F0", x"08", x"C9", x"2B", x"F0", x"04", +x"D0", x"07", x"66", x"AB", x"20", x"BC", x"00", x"90", +x"5C", x"24", x"AB", x"10", x"0E", x"A9", x"00", x"38", +x"E5", x"A9", x"4C", x"DD", x"D8", x"66", x"AA", x"24", +x"AA", x"50", x"C3", x"A5", x"A9", x"38", x"E5", x"A8", +x"85", x"A9", x"F0", x"12", x"10", x"09", x"20", x"B9", +x"D6", x"E6", x"A9", x"D0", x"F9", x"F0", x"07", x"20", +x"9E", x"D6", x"C6", x"A9", x"D0", x"F9", x"A5", x"B1", +x"30", x"01", x"60", x"4C", x"EF", x"DA", x"48", x"24", +x"AA", x"10", x"02", x"E6", x"A8", x"20", x"9E", x"D6", +x"68", x"38", x"E9", x"30", x"20", x"12", x"D9", x"4C", +x"9E", x"D8", x"48", x"20", x"AB", x"D7", x"68", x"20", +x"DB", x"D7", x"A5", x"B7", x"45", x"B0", x"85", x"B8", +x"A6", x"AC", x"4C", x"6F", x"D4", x"A5", x"A9", x"C9", +x"0A", x"90", x"09", x"A9", x"64", x"24", x"AB", x"30", +x"11", x"4C", x"64", x"D5", x"0A", x"0A", x"18", x"65", +x"A9", x"0A", x"18", x"A0", x"00", x"71", x"C3", x"38", +x"E9", x"30", x"85", x"A9", x"4C", x"C4", x"D8", x"91", +x"43", x"4F", x"F8", x"94", x"74", x"23", x"F7", x"94", +x"74", x"24", x"00", x"A9", x"8E", x"A0", x"C1", x"20", +x"6B", x"D9", x"A5", x"88", x"A6", x"87", x"85", x"AD", +x"86", x"AE", x"A2", x"90", x"38", x"20", x"E8", x"D7", +x"20", x"6E", x"D9", x"4C", x"C3", x"C8", x"A0", x"01", +x"A9", x"20", x"24", x"B0", x"10", x"02", x"A9", x"2D", +x"99", x"FF", x"00", x"85", x"B0", x"84", x"BA", x"C8", +x"A9", x"30", x"A6", x"AC", x"D0", x"03", x"4C", x"89", +x"DA", x"A9", x"00", x"E0", x"80", x"F0", x"02", x"B0", +x"09", x"A9", x"4F", x"A0", x"D9", x"20", x"FB", x"D5", +x"A9", x"FA", x"85", x"A8", x"A9", x"4B", x"A0", x"D9", +x"20", x"F8", x"D7", x"F0", x"1E", x"10", x"12", x"A9", +x"47", x"A0", x"D9", x"20", x"F8", x"D7", x"F0", x"02", +x"10", x"0E", x"20", x"9E", x"D6", x"C6", x"A8", x"D0", +x"EE", x"20", x"B9", x"D6", x"E6", x"A8", x"D0", x"DC", +x"20", x"4E", x"D4", x"20", x"31", x"D8", x"A2", x"01", +x"A5", x"A8", x"18", x"69", x"07", x"30", x"09", x"C9", +x"08", x"B0", x"06", x"69", x"FF", x"AA", x"A9", x"02", +x"38", x"E9", x"02", x"85", x"A9", x"86", x"A8", x"8A", +x"F0", x"02", x"10", x"13", x"A4", x"BA", x"A9", x"2E", +x"C8", x"99", x"FF", x"00", x"8A", x"F0", x"06", x"A9", +x"30", x"C8", x"99", x"FF", x"00", x"84", x"BA", x"A0", +x"00", x"A2", x"80", x"A5", x"AF", x"18", x"79", x"9C", +x"DA", x"85", x"AF", x"A5", x"AE", x"79", x"9B", x"DA", +x"85", x"AE", x"A5", x"AD", x"79", x"9A", x"DA", x"85", +x"AD", x"E8", x"B0", x"04", x"10", x"E5", x"30", x"02", +x"30", x"E1", x"8A", x"90", x"04", x"49", x"FF", x"69", +x"0A", x"69", x"2F", x"C8", x"C8", x"C8", x"84", x"95", +x"A4", x"BA", x"C8", x"AA", x"29", x"7F", x"99", x"FF", +x"00", x"C6", x"A8", x"D0", x"06", x"A9", x"2E", x"C8", +x"99", x"FF", x"00", x"84", x"BA", x"A4", x"95", x"8A", +x"49", x"FF", x"29", x"80", x"AA", x"C0", x"12", x"D0", +x"B2", x"A4", x"BA", x"B9", x"FF", x"00", x"88", x"C9", +x"30", x"F0", x"F8", x"C9", x"2E", x"F0", x"01", x"C8", +x"A9", x"2B", x"A6", x"A9", x"F0", x"2E", x"10", x"08", +x"A9", x"00", x"38", x"E5", x"A9", x"AA", x"A9", x"2D", +x"99", x"01", x"01", x"A9", x"45", x"99", x"00", x"01", +x"8A", x"A2", x"2F", x"38", x"E8", x"E9", x"0A", x"B0", +x"FB", x"69", x"3A", x"99", x"03", x"01", x"8A", x"99", +x"02", x"01", x"A9", x"00", x"99", x"04", x"01", x"F0", +x"08", x"99", x"FF", x"00", x"A9", x"00", x"99", x"00", +x"01", x"A9", x"00", x"A0", x"01", x"60", x"80", x"00", +x"00", x"00", x"FE", x"79", x"60", x"00", x"27", x"10", +x"FF", x"FC", x"18", x"00", x"00", x"64", x"FF", x"FF", +x"F6", x"00", x"00", x"01", x"20", x"AB", x"D7", x"A9", +x"96", x"A0", x"DA", x"20", x"4B", x"D7", x"F0", x"63", +x"A5", x"B3", x"D0", x"03", x"4C", x"F3", x"D4", x"A2", +x"9C", x"A0", x"00", x"20", x"78", x"D7", x"A5", x"B7", +x"10", x"0F", x"20", x"62", x"D8", x"A9", x"9C", x"A0", +x"00", x"20", x"F8", x"D7", x"D0", x"03", x"98", x"A4", +x"5B", x"20", x"9D", x"D7", x"98", x"48", x"20", x"BD", +x"D5", x"A9", x"9C", x"A0", x"00", x"20", x"FB", x"D5", +x"20", x"1B", x"DB", x"68", x"4A", x"90", x"0A", x"A5", +x"AC", x"F0", x"06", x"A5", x"B0", x"49", x"FF", x"85", +x"B0", x"60", x"81", x"38", x"AA", x"3B", x"06", x"74", +x"63", x"90", x"8C", x"77", x"23", x"0C", x"AB", x"7A", +x"1E", x"94", x"00", x"7C", x"63", x"42", x"80", x"7E", +x"75", x"FE", x"D0", x"80", x"31", x"72", x"15", x"81", +x"00", x"00", x"00", x"A9", x"FA", x"A0", x"DA", x"20", +x"FB", x"D5", x"A5", x"B9", x"69", x"50", x"90", x"03", +x"20", x"C2", x"D7", x"85", x"A3", x"20", x"AE", x"D7", +x"A5", x"AC", x"C9", x"88", x"90", x"03", x"20", x"90", +x"D6", x"20", x"62", x"D8", x"A5", x"5B", x"18", x"69", +x"81", x"F0", x"F3", x"38", x"E9", x"01", x"48", x"A2", +x"04", x"B5", x"B3", x"B4", x"AC", x"95", x"AC", x"94", +x"B3", x"CA", x"10", x"F5", x"A5", x"A3", x"85", x"B9", +x"20", x"58", x"D4", x"20", x"EF", x"DA", x"A9", x"FE", +x"A0", x"DA", x"20", x"84", x"DB", x"A9", x"00", x"85", +x"B8", x"68", x"20", x"75", x"D6", x"60", x"85", x"BA", +x"84", x"BB", x"20", x"6E", x"D7", x"A9", x"A4", x"20", +x"FB", x"D5", x"20", x"88", x"DB", x"A9", x"A4", x"A0", +x"00", x"4C", x"FB", x"D5", x"85", x"BA", x"84", x"BB", +x"20", x"6B", x"D7", x"B1", x"BA", x"85", x"B1", x"A4", +x"BA", x"C8", x"98", x"D0", x"02", x"E6", x"BB", x"85", +x"BA", x"A4", x"BB", x"20", x"FB", x"D5", x"A5", x"BA", +x"A4", x"BB", x"18", x"69", x"04", x"90", x"01", x"C8", +x"85", x"BA", x"84", x"BB", x"20", x"6C", x"D4", x"A9", +x"A8", x"A0", x"00", x"C6", x"B1", x"D0", x"E4", x"60", +x"98", x"35", x"44", x"7A", x"68", x"28", x"B1", x"46", +x"20", x"CA", x"D7", x"AA", x"30", x"18", x"A9", x"D4", +x"A0", x"00", x"20", x"4B", x"D7", x"8A", x"F0", x"E7", +x"A9", x"B8", x"A0", x"DB", x"20", x"FB", x"D5", x"A9", +x"BC", x"A0", x"DB", x"20", x"6C", x"D4", x"A6", x"AF", +x"A5", x"AD", x"85", x"AF", x"86", x"AD", x"A9", x"00", +x"85", x"B0", x"A5", x"AC", x"85", x"B9", x"A9", x"80", +x"85", x"AC", x"20", x"D5", x"D4", x"A2", x"D4", x"A0", +x"00", x"4C", x"78", x"D7", x"A9", x"78", x"A0", x"DC", +x"20", x"6C", x"D4", x"20", x"AB", x"D7", x"A9", x"7C", +x"A0", x"DC", x"A6", x"B7", x"20", x"C2", x"D6", x"20", +x"AB", x"D7", x"20", x"62", x"D8", x"A9", x"00", x"85", +x"B8", x"20", x"58", x"D4", x"A9", x"80", x"A0", x"DC", +x"20", x"55", x"D4", x"A5", x"B0", x"48", x"10", x"0D", +x"20", x"4E", x"D4", x"A5", x"B0", x"30", x"09", x"A5", +x"63", x"49", x"FF", x"85", x"63", x"20", x"EF", x"DA", +x"A9", x"80", x"A0", x"DC", x"20", x"6C", x"D4", x"68", +x"10", x"03", x"20", x"EF", x"DA", x"A9", x"84", x"A0", +x"DC", x"4C", x"6E", x"DB", x"20", x"6E", x"D7", x"A9", +x"00", x"85", x"63", x"20", x"03", x"DC", x"A2", x"9C", +x"A0", x"00", x"20", x"F9", x"DB", x"A9", x"A4", x"A0", +x"00", x"20", x"4B", x"D7", x"A9", x"00", x"85", x"B0", +x"A5", x"63", x"20", x"74", x"DC", x"A9", x"9C", x"A0", +x"00", x"4C", x"CA", x"D6", x"48", x"4C", x"35", x"DC", +x"81", x"49", x"0F", x"DB", x"83", x"49", x"0F", x"DB", +x"7F", x"00", x"00", x"00", x"04", x"86", x"1E", x"D7", +x"FB", x"87", x"99", x"26", x"65", x"87", x"23", x"34", +x"58", x"86", x"A5", x"5D", x"E1", x"83", x"49", x"0F", +x"DB", x"A5", x"B0", x"48", x"10", x"03", x"20", x"EF", +x"DA", x"A5", x"AC", x"48", x"C9", x"81", x"90", x"07", +x"A9", x"9C", x"A0", x"D5", x"20", x"CA", x"D6", x"A9", +x"C9", x"A0", x"DC", x"20", x"6E", x"DB", x"68", x"C9", +x"81", x"90", x"07", x"A9", x"78", x"A0", x"DC", x"20", +x"55", x"D4", x"68", x"10", x"03", x"4C", x"EF", x"DA", +x"60", x"08", x"78", x"3A", x"C5", x"37", x"7B", x"83", +x"A2", x"5C", x"7C", x"2E", x"DD", x"4D", x"7D", x"99", +x"B0", x"1E", x"7D", x"59", x"ED", x"24", x"7E", x"91", +x"72", x"00", x"7E", x"4C", x"B9", x"73", x"7F", x"AA", +x"AA", x"53", x"81", x"00", x"00", x"00", x"E6", x"C3", +x"D0", x"02", x"E6", x"C4", x"AD", x"DD", x"DD", x"C9", +x"3A", x"B0", x"0A", x"C9", x"20", x"F0", x"EF", x"38", +x"E9", x"30", x"38", x"E9", x"D0", x"60", x"80", x"4F", +x"C7", x"52", x"A9", x"39", x"A0", x"DE", x"20", x"C3", +x"C8", x"A2", x"FF", x"86", x"88", x"9A", x"A9", x"11", +x"A0", x"DD", x"85", x"01", x"84", x"02", x"85", x"04", +x"84", x"05", x"A9", x"05", x"A0", x"CE", x"85", x"06", +x"84", x"07", x"A9", x"C1", x"A0", x"CF", x"85", x"08", +x"84", x"09", x"A9", x"4C", x"85", x"00", x"85", x"03", +x"85", x"A1", x"85", x"0A", x"A9", x"88", x"A0", x"CE", +x"85", x"0B", x"84", x"0C", x"A9", x"3F", x"85", x"0F", +x"A9", x"38", x"85", x"10", x"A2", x"1C", x"BD", x"ED", +x"DC", x"95", x"BB", x"CA", x"D0", x"F8", x"8A", x"85", +x"B2", x"85", x"67", x"85", x"0D", x"85", x"0E", x"48", +x"85", x"64", x"A9", x"03", x"85", x"A0", x"A9", x"2C", +x"85", x"12", x"20", x"6C", x"C8", x"A2", x"68", x"86", +x"65", x"A9", x"5A", x"A0", x"DE", x"20", x"C3", x"C8", +x"20", x"46", x"C9", x"86", x"C3", x"84", x"C4", x"20", +x"BC", x"00", x"C9", x"41", x"F0", x"84", x"A8", x"D0", +x"21", x"A9", x"00", x"A0", x"04", x"85", x"11", x"84", +x"12", x"A0", x"00", x"E6", x"11", x"D0", x"02", x"E6", +x"12", x"4C", x"A3", x"DE", x"EA", x"D1", x"11", x"D0", +x"15", x"0A", x"91", x"11", x"D1", x"11", x"F0", x"EB", +x"D0", x"0C", x"20", x"C2", x"00", x"20", x"7F", x"C7", +x"A8", x"F0", x"03", x"4C", x"0C", x"CC", x"A5", x"11", +x"A4", x"12", x"85", x"85", x"84", x"86", x"85", x"81", +x"84", x"82", x"A9", x"66", x"A0", x"DE", x"20", x"C3", +x"C8", x"20", x"46", x"C9", x"86", x"C3", x"84", x"C4", +x"20", x"BC", x"00", x"A8", x"F0", x"1C", x"20", x"7F", +x"C7", x"A5", x"12", x"D0", x"E5", x"A5", x"11", x"C9", +x"10", x"90", x"DF", x"85", x"0F", x"E9", x"0E", x"B0", +x"FC", x"49", x"FF", x"E9", x"0C", x"18", x"65", x"0F", +x"85", x"10", x"A2", x"00", x"A0", x"04", x"86", x"79", +x"84", x"7A", x"A0", x"00", x"98", x"91", x"79", x"E6", +x"79", x"D0", x"02", x"E6", x"7A", x"A5", x"79", x"A4", +x"7A", x"20", x"1F", x"C2", x"20", x"6C", x"C8", x"A5", +x"85", x"38", x"E5", x"79", x"AA", x"A5", x"86", x"E5", +x"7A", x"20", x"5E", x"D9", x"A9", x"75", x"A0", x"DE", +x"20", x"C3", x"C8", x"A9", x"C3", x"A0", x"C8", x"85", +x"04", x"84", x"05", x"20", x"63", x"C4", x"A9", x"74", +x"A0", x"C2", x"85", x"01", x"84", x"02", x"6C", x"01", +x"00", x"42", x"41", x"53", x"49", x"43", x"2D", x"50", +x"52", x"49", x"56", x"52", x"45", x"4D", x"45", x"4E", +x"41", x"20", x"56", x"45", x"52", x"5A", x"49", x"4A", +x"41", x"20", x"38", x"34", x"30", x"31", x"32", x"34", +x"0C", x"00", x"20", x"4D", x"45", x"4D", x"4F", x"52", +x"49", x"4A", x"41", x"20", x"20", x"00", x"44", x"55", +x"4C", x"4A", x"49", x"4E", x"41", x"20", x"4C", x"49", +x"4E", x"49", x"4A", x"45", x"00", x"20", x"4C", x"4F", +x"4B", x"41", x"43", x"49", x"4A", x"41", x"0D", x"0A", +x"00", x"20", x"FC", x"D3", x"A5", x"11", x"85", x"E4", +x"86", x"E5", x"4C", x"8B", x"FE", x"20", x"FC", x"D3", +x"A5", x"11", x"85", x"E2", x"86", x"E3", x"4C", x"69", +x"FE", x"20", x"FC", x"D3", x"A5", x"11", x"85", x"E2", +x"86", x"E3", x"60", x"A5", x"12", x"C9", x"60", x"F0", +x"07", x"A9", x"92", x"91", x"11", x"4C", x"9D", x"DD", +x"4C", x"B6", x"DD", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", 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 <= romData(conv_integer(addr)); + end if; + end process; +end architecture; + diff --git a/ORAO_MiST/rtl/rom/rom_bas103.vhd b/ORAO_MiST/rtl/rom/rom_bas103.vhd new file mode 100644 index 00000000..ac4a1379 --- /dev/null +++ b/ORAO_MiST/rtl/rom/rom_bas103.vhd @@ -0,0 +1,1051 @@ +library IEEE; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity rom_bas 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 Behavioral of rom_bas is + type romDef is array(0 to 8191) of std_logic_vector(7 downto 0); + constant romData: romDef := ( +x"4C", x"A3", x"DE", x"4C", x"7F", x"C2", x"FE", x"CE", +x"D1", x"D0", x"5D", x"C6", x"5B", x"C5", x"FF", x"CA", +x"66", x"C7", x"BB", x"C9", x"D9", x"CD", x"EF", x"C9", +x"13", x"C8", x"13", x"C7", x"EB", x"C6", x"96", x"C7", +x"30", x"C6", x"F6", x"C6", x"40", x"C7", x"A9", x"C7", +x"5B", x"C6", x"B9", x"C7", x"02", x"F0", x"6B", x"D5", +x"14", x"F0", x"9E", x"C6", x"F0", x"D0", x"62", x"D5", +x"A8", x"C8", x"84", x"C6", x"BB", x"C4", x"80", x"C4", +x"FF", x"EF", x"64", x"C4", x"78", x"D9", x"0B", x"DA", +x"97", x"D9", x"03", x"00", x"BD", x"D0", x"DE", x"D0", +x"75", x"DC", x"96", x"DD", x"29", x"D7", x"F1", x"DC", +x"D2", x"DD", x"D9", x"DD", x"22", x"DE", x"B1", x"C3", +x"4C", x"D5", x"BA", x"D4", x"A3", x"D1", x"EB", x"D4", +x"C9", x"D4", x"2A", x"D4", x"3E", x"D4", x"6A", x"D4", +x"75", x"D4", x"79", x"A8", x"D5", x"79", x"91", x"D5", +x"7B", x"69", x"D7", x"7B", x"50", x"D8", x"7F", x"7E", +x"DC", x"50", x"41", x"CD", x"46", x"3E", x"CD", x"7D", +x"B7", x"DC", x"5A", x"9B", x"CC", x"64", x"6E", x"CD", +x"45", x"4E", x"C4", x"46", x"4F", x"D2", x"4E", x"45", +x"58", x"D4", x"44", x"41", x"54", x"C1", x"49", x"4E", +x"50", x"55", x"D4", x"44", x"49", x"CD", x"52", x"45", +x"41", x"C4", x"44", x"44", x"D4", x"47", x"4F", x"54", +x"CF", x"52", x"55", x"CE", x"49", x"C6", x"52", x"45", +x"53", x"54", x"4F", x"52", x"C5", x"47", x"4F", x"53", +x"55", x"C2", x"52", x"45", x"54", x"55", x"52", x"CE", +x"52", x"45", x"CD", x"53", x"54", x"4F", x"D0", x"4F", +x"CE", x"44", x"52", x"41", x"D7", x"57", x"41", x"49", +x"D4", x"4C", x"4F", x"41", x"C4", x"53", x"41", x"56", +x"C5", x"44", x"45", x"C6", x"50", x"4F", x"4B", x"C5", +x"50", x"52", x"49", x"4E", x"D4", x"43", x"4F", x"4E", +x"D4", x"4C", x"49", x"53", x"D4", x"43", x"4C", x"45", +x"41", x"D2", x"47", x"45", x"D4", x"4E", x"45", x"D7", +x"54", x"41", x"42", x"A8", x"54", x"CF", x"46", x"CE", +x"53", x"50", x"43", x"A8", x"54", x"48", x"45", x"CE", +x"4E", x"4F", x"D4", x"53", x"54", x"45", x"D0", x"AB", +x"AD", x"AA", x"AF", x"E0", x"41", x"4E", x"C4", x"4F", +x"D2", x"BE", x"BD", x"BC", x"53", x"47", x"CE", x"49", +x"4E", x"D4", x"41", x"42", x"D3", x"55", x"53", x"D2", +x"46", x"52", x"C5", x"50", x"4F", x"D3", x"53", x"51", +x"D2", x"52", x"4E", x"C4", x"4C", x"4F", x"C7", x"45", +x"58", x"D0", x"43", x"4F", x"D3", x"53", x"49", x"CE", +x"54", x"41", x"CE", x"41", x"54", x"CE", x"50", x"45", +x"45", x"CB", x"4C", x"45", x"CE", x"53", x"54", x"52", +x"A4", x"56", x"41", x"CC", x"41", x"53", x"C3", x"43", +x"48", x"52", x"A4", x"4C", x"45", x"46", x"54", x"A4", +x"52", x"49", x"47", x"48", x"54", x"A4", x"4D", x"49", +x"44", x"A4", x"47", x"CF", x"00", x"4E", x"46", x"53", +x"4E", x"52", x"47", x"4F", x"44", x"46", x"43", x"4F", +x"56", x"4F", x"4D", x"55", x"53", x"42", x"53", x"44", +x"44", x"2F", x"30", x"49", x"44", x"54", x"4D", x"4C", +x"53", x"53", x"54", x"43", x"4E", x"55", x"46", x"20", +x"45", x"52", x"52", x"4F", x"52", x"00", x"20", x"49", +x"4E", x"20", x"00", x"0D", x"0A", x"20", x"42", x"52", +x"45", x"41", x"4B", x"00", x"BA", x"E8", x"E8", x"E8", +x"E8", x"BD", x"01", x"01", x"C9", x"81", x"D0", x"21", +x"A5", x"92", x"D0", x"0A", x"BD", x"02", x"01", x"85", +x"91", x"BD", x"03", x"01", x"85", x"92", x"DD", x"03", +x"01", x"D0", x"07", x"A5", x"91", x"DD", x"02", x"01", +x"F0", x"07", x"8A", x"18", x"69", x"12", x"AA", x"D0", +x"D8", x"60", x"20", x"2A", x"C2", x"85", x"79", x"84", +x"7A", x"38", x"A5", x"A2", x"E5", x"A7", x"85", x"6A", +x"A8", x"A5", x"A3", x"E5", x"A8", x"AA", x"E8", x"98", +x"F0", x"23", x"A5", x"A2", x"38", x"E5", x"6A", x"85", +x"A2", x"B0", x"03", x"C6", x"A3", x"38", x"A5", x"A0", +x"E5", x"6A", x"85", x"A0", x"B0", x"08", x"C6", x"A1", +x"90", x"04", x"B1", x"A2", x"91", x"A0", x"88", x"D0", +x"F9", x"B1", x"A2", x"91", x"A0", x"C6", x"A3", x"C6", +x"A1", x"CA", x"D0", x"F2", x"60", x"0A", x"69", x"44", +x"B0", x"35", x"85", x"6A", x"BA", x"E4", x"6A", x"90", +x"2E", x"60", x"C4", x"7C", x"90", x"28", x"D0", x"04", +x"C5", x"7B", x"90", x"22", x"48", x"A2", x"09", x"98", +x"48", x"B5", x"9F", x"CA", x"10", x"FA", x"20", x"64", +x"D2", x"A2", x"F7", x"68", x"95", x"A9", x"E8", x"30", +x"FA", x"68", x"A8", x"68", x"C4", x"7C", x"90", x"06", +x"D0", x"05", x"C5", x"7B", x"B0", x"01", x"60", x"A2", +x"0C", x"46", x"10", x"20", x"00", x"C9", x"20", x"6A", +x"C9", x"BD", x"75", x"C1", x"20", x"6C", x"C9", x"BD", +x"76", x"C1", x"20", x"6C", x"C9", x"20", x"9A", x"C4", +x"A9", x"97", x"A0", x"C1", x"20", x"4A", x"C9", x"A4", +x"82", x"C8", x"F0", x"03", x"20", x"1E", x"F0", x"46", +x"10", x"20", x"00", x"00", x"20", x"65", x"C3", x"86", +x"C6", x"84", x"C7", x"20", x"BF", x"00", x"AA", x"F0", +x"F3", x"A2", x"FF", x"86", x"82", x"90", x"06", x"20", +x"AE", x"C3", x"4C", x"F8", x"C5", x"20", x"DA", x"C7", +x"20", x"AE", x"C3", x"84", x"08", x"20", x"36", x"C4", +x"90", x"44", x"A0", x"01", x"B1", x"A7", x"85", x"6B", +x"A5", x"75", x"85", x"6A", x"A5", x"A8", x"85", x"6D", +x"A5", x"A7", x"88", x"F1", x"A7", x"18", x"65", x"75", +x"85", x"75", x"85", x"6C", x"A5", x"76", x"69", x"FF", +x"85", x"76", x"E5", x"A8", x"AA", x"38", x"A5", x"A7", +x"E5", x"75", x"A8", x"B0", x"03", x"E8", x"C6", x"6D", +x"18", x"65", x"6A", x"90", x"03", x"C6", x"6B", x"18", +x"B1", x"6A", x"91", x"6C", x"C8", x"D0", x"F9", x"E6", +x"6B", x"E6", x"6D", x"CA", x"D0", x"F2", x"20", x"7C", +x"C4", x"20", x"29", x"C3", x"A5", x"16", x"F0", x"8C", +x"18", x"A5", x"75", x"85", x"A2", x"65", x"08", x"85", +x"A0", x"A4", x"76", x"84", x"A3", x"90", x"01", x"C8", +x"84", x"A1", x"20", x"DA", x"C1", x"A5", x"79", x"A4", +x"7A", x"85", x"75", x"84", x"76", x"A4", x"08", x"88", +x"B9", x"12", x"00", x"91", x"A7", x"88", x"10", x"F8", +x"20", x"7C", x"C4", x"20", x"29", x"C3", x"4C", x"84", +x"C2", x"A5", x"73", x"A4", x"74", x"85", x"6A", x"84", +x"6B", x"18", x"A0", x"01", x"B1", x"6A", x"F0", x"1D", +x"A0", x"04", x"C8", x"B1", x"6A", x"D0", x"FB", x"C8", +x"98", x"65", x"6A", x"AA", x"A0", x"00", x"91", x"6A", +x"A5", x"6B", x"69", x"00", x"C8", x"91", x"6A", x"86", +x"6A", x"85", x"6B", x"90", x"DD", x"60", x"CA", x"30", +x"09", x"EA", x"EA", x"EA", x"4C", x"67", x"C3", x"20", +x"6C", x"C9", x"20", x"00", x"C9", x"A2", x"00", x"20", +x"9E", x"C3", x"C9", x"1A", x"D0", x"06", x"20", x"18", +x"F0", x"4C", x"65", x"C3", x"C9", x"03", x"F0", x"14", +x"C9", x"0D", x"F0", x"1F", x"C9", x"08", x"F0", x"D6", +x"C9", x"18", x"F0", x"DB", x"C9", x"20", x"90", x"0E", +x"C9", x"80", x"B0", x"DB", x"E0", x"47", x"B0", x"04", +x"95", x"16", x"E8", x"2C", x"A9", x"07", x"20", x"2A", +x"F0", x"D0", x"CC", x"4C", x"FA", x"C8", x"20", x"AB", +x"C6", x"C9", x"0F", x"D0", x"08", x"48", x"A5", x"10", +x"49", x"FF", x"85", x"10", x"68", x"60", x"4C", x"36", +x"F0", x"A5", x"AE", x"48", x"10", x"03", x"20", x"E1", +x"C3", x"A5", x"A9", x"48", x"C9", x"81", x"90", x"07", +x"A9", x"FB", x"A0", x"D6", x"20", x"4E", x"D8", x"A9", +x"EC", x"A0", x"C3", x"20", x"5A", x"DD", x"68", x"C9", +x"81", x"90", x"07", x"A9", x"4E", x"A0", x"DE", x"20", +x"8F", x"D5", x"68", x"10", x"03", x"4C", x"E1", x"C3", +x"60", x"A5", x"A9", x"F0", x"06", x"A5", x"AE", x"49", +x"FF", x"85", x"AE", x"60", x"0C", x"76", x"B3", x"83", +x"BD", x"D3", x"79", x"1E", x"F4", x"A6", x"F5", x"7B", +x"83", x"FC", x"B0", x"10", x"7C", x"0C", x"1F", x"67", +x"CA", x"7C", x"DE", x"53", x"CB", x"C1", x"7D", x"14", +x"64", x"70", x"4C", x"7D", x"B7", x"EA", x"51", x"7A", +x"7D", x"63", x"30", x"88", x"7E", x"7E", x"92", x"44", +x"99", x"3A", x"7E", x"4C", x"CC", x"91", x"C7", x"7F", +x"AA", x"AA", x"AA", x"13", x"81", 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"A5", x"73", +x"A6", x"74", x"A0", x"01", x"85", x"A7", x"86", x"A8", +x"B1", x"A7", x"F0", x"1F", x"C8", x"C8", x"A5", x"15", +x"D1", x"A7", x"90", x"18", x"F0", x"03", x"88", x"D0", +x"09", x"A5", x"14", x"88", x"D1", x"A7", x"90", x"0C", +x"F0", x"0A", x"88", x"B1", x"A7", x"AA", x"88", x"B1", +x"A7", x"B0", x"D7", x"18", x"60", x"D0", x"FD", x"A9", +x"00", x"A8", x"91", x"73", x"C8", x"91", x"73", x"A5", +x"73", x"18", x"69", x"02", x"85", x"75", x"A5", x"74", +x"69", x"00", x"85", x"76", x"20", x"AE", x"C4", x"A9", +x"00", x"D0", x"2A", x"A5", x"7F", x"A4", x"80", x"85", +x"7B", x"84", x"7C", x"A5", x"75", x"A4", x"76", x"85", +x"77", x"84", x"78", x"85", x"79", x"84", x"7A", x"20", +x"31", x"C6", x"A2", x"61", x"86", x"5E", x"68", x"A8", +x"68", x"A2", x"FD", x"9A", x"48", x"98", x"48", x"A9", +x"00", x"85", x"86", x"85", x"0D", x"60", x"18", x"A5", +x"73", x"69", x"FF", x"85", x"C6", x"A5", x"74", x"69", +x"FF", x"85", x"C7", x"60", x"48", x"A9", x"00", x"85", +x"0E", x"68", x"08", x"20", x"DA", x"C7", x"20", x"36", +x"C4", x"28", x"F0", x"14", x"20", x"C5", x"00", x"F0", +x"15", x"C9", x"A5", x"D0", x"8F", x"20", x"BF", x"00", +x"F0", x"06", x"20", x"DA", x"C7", x"F0", x"07", x"60", +x"A9", x"FF", x"85", x"14", x"85", x"15", x"68", x"68", +x"A0", x"01", x"B1", x"A7", x"F0", x"39", x"20", x"40", +x"C6", x"20", x"00", x"C9", x"C8", x"B1", x"A7", x"AA", +x"C8", x"B1", x"A7", x"C5", x"15", x"D0", x"04", x"E4", +x"14", x"F0", x"02", x"B0", x"22", x"84", x"91", x"20", +x"0C", x"DB", x"A9", x"20", x"A4", x"91", x"29", x"7F", +x"20", x"6C", x"C9", x"C8", x"F0", x"11", x"B1", x"A7", +x"D0", x"22", x"A8", x"B1", x"A7", x"AA", x"C8", x"B1", +x"A7", x"86", x"A7", x"85", x"A8", x"D0", x"C1", x"A5", +x"0E", x"F0", x"0E", x"20", x"00", x"C9", x"20", x"00", +x"C9", x"A9", x"1A", x"20", x"6C", x"C9", x"20", x"1B", +x"F0", x"4C", x"7F", x"C2", x"10", x"D2", x"4C", x"39", +x"F0", x"AA", x"84", x"91", x"A0", x"FF", x"CA", x"F0", +x"08", x"C8", x"B9", x"90", x"C0", x"10", x"FA", x"30", +x"F5", x"C8", x"B9", x"90", x"C0", x"30", x"B5", x"20", +x"6C", x"C9", x"D0", x"F5", x"A9", x"80", x"85", x"0D", +x"20", x"14", x"C8", x"20", x"AC", x"C1", x"D0", x"05", +x"8A", x"69", x"0F", x"AA", x"9A", x"68", x"68", x"A9", +x"09", x"20", x"1D", x"C2", x"20", x"75", x"C7", x"18", +x"98", x"65", x"C6", x"48", x"A5", x"C7", x"69", x"00", +x"48", x"A5", x"82", x"48", x"A5", x"81", x"48", x"A9", +x"9E", x"20", x"C7", x"CC", x"20", x"6E", x"CB", x"20", +x"6B", x"CB", x"A5", x"AE", x"09", x"7F", x"25", x"AA", +x"85", x"AA", x"A9", x"A5", x"A0", x"C5", x"85", x"6A", +x"84", x"6B", x"4C", x"24", x"CC", x"A9", x"FB", x"A0", +x"D6", x"20", x"E1", x"D8", x"20", x"C5", x"00", x"C9", +x"A3", x"D0", x"06", x"20", x"BF", x"00", x"20", x"6B", +x"CB", x"20", x"6A", x"D9", x"20", x"19", x"CC", x"A5", +x"92", x"48", x"A5", x"91", x"48", x"A9", x"81", x"48", +x"20", x"40", x"C6", x"A5", x"C6", x"A4", x"C7", x"F0", +x"06", x"85", x"85", x"84", x"86", x"A0", x"00", x"B1", +x"C6", x"D0", x"40", x"A0", x"02", x"B1", x"C6", x"18", +x"D0", x"03", x"4C", x"75", x"C6", x"C8", x"B1", x"C6", +x"85", x"81", x"C8", x"B1", x"C6", x"85", x"82", x"98", +x"65", x"C6", x"85", x"C6", x"90", x"02", x"E6", x"C7", +x"20", x"BF", x"00", x"20", x"01", x"C6", x"4C", x"C8", +x"C5", x"4C", x"33", x"F0", x"EA", x"90", x"11", x"C9", +x"1D", x"B0", x"17", x"0A", x"A8", x"B9", x"0B", x"C0", +x"48", x"B9", x"0A", x"C0", x"48", x"4C", x"BF", x"00", +x"4C", x"14", x"C8", x"C9", x"3A", x"F0", x"D9", x"4C", +x"D0", x"CC", x"C9", x"45", x"D0", x"F9", x"20", x"BF", +x"00", x"A9", x"9E", x"20", x"C7", x"CC", x"4C", x"14", +x"C7", x"38", x"A5", x"73", x"E9", x"01", x"A4", x"74", +x"B0", x"01", x"88", x"85", x"89", x"84", x"8A", x"60", +x"AD", x"FD", x"87", x"29", x"30", x"C9", x"10", x"38", +x"D0", x"F5", x"AD", x"7F", x"87", x"29", x"30", x"C9", +x"10", x"38", x"D0", x"EB", x"20", x"30", x"F0", x"EA", +x"A9", x"03", x"C9", x"03", x"B0", x"01", x"18", x"D0", +x"3D", x"A5", x"C6", x"A4", x"C7", x"F0", x"0C", x"85", +x"85", x"84", x"86", x"A5", x"81", x"A4", x"82", x"85", +x"83", x"84", x"84", x"68", x"68", x"A9", x"A3", x"A0", +x"C1", x"A2", x"00", x"86", x"10", x"90", x"03", x"4C", +x"74", x"C2", x"4C", x"7F", x"C2", x"D0", x"17", x"A2", +x"1E", x"A4", x"86", x"D0", x"03", x"4C", x"59", x"C2", +x"A5", x"85", x"85", x"C6", x"84", x"C7", x"A5", x"83", +x"A4", x"84", x"85", x"81", x"84", x"82", x"60", x"48", +x"20", x"12", x"F0", x"20", x"67", x"C9", x"A9", x"FF", +x"4C", x"BF", x"C4", x"AD", x"40", x"02", x"20", x"D8", +x"C6", x"D0", x"03", x"4C", x"0F", x"F0", x"4C", x"24", +x"F0", x"48", x"AD", x"41", x"02", x"20", x"D8", x"C6", +x"D0", x"04", x"68", x"4C", x"0C", x"F0", x"68", x"C9", +x"0A", x"EA", x"EA", x"C9", x"0D", x"F0", x"03", x"4C", +x"27", x"F0", x"20", x"27", x"F0", x"A9", x"0D", x"60", +x"C9", x"54", x"F0", x"06", x"C9", x"44", x"F0", x"02", +x"C9", x"FF", x"60", x"20", x"B0", x"E5", x"EA", x"90", +x"EF", x"EA", x"EA", x"60", x"D0", x"03", x"4C", x"7C", +x"C4", x"20", x"83", x"C4", x"4C", x"0B", x"C7", x"A9", +x"03", x"20", x"1D", x"C2", x"A5", x"C7", x"48", x"A5", +x"C6", x"48", x"A5", x"82", x"48", x"A5", x"81", x"48", +x"A9", x"8C", x"48", x"20", x"C5", x"00", x"20", x"14", +x"C7", x"4C", x"C8", x"C5", x"20", x"DA", x"C7", x"20", +x"78", x"C7", x"A5", x"82", x"C5", x"15", x"B0", x"0B", +x"98", x"38", x"65", x"C6", x"A6", x"C7", x"90", x"07", +x"E8", x"B0", x"04", x"A5", x"73", x"A6", x"74", x"20", +x"3A", x"C4", x"90", x"1E", x"A5", x"A7", x"E9", x"01", +x"85", x"C6", x"A5", x"A8", x"E9", x"00", x"85", x"C7", +x"60", x"D0", x"FD", x"A9", x"FF", x"85", x"92", x"20", +x"AC", x"C1", x"9A", x"C9", x"8C", x"F0", x"0B", x"A2", +x"04", x"2C", x"A2", x"0E", x"4C", x"59", x"C2", x"4C", +x"D0", x"CC", x"68", x"68", x"85", x"81", x"68", x"85", +x"82", x"68", x"85", x"C6", x"68", x"85", x"C7", x"20", +x"75", x"C7", x"98", x"18", x"65", x"C6", x"85", x"C6", +x"90", x"02", x"E6", x"C7", x"60", x"A2", x"3A", x"2C", +x"A2", x"00", x"86", x"06", x"A0", x"00", x"84", x"07", +x"A5", x"07", x"A6", x"06", x"85", x"06", x"86", x"07", +x"B1", x"C6", x"F0", x"E8", x"C5", x"07", x"F0", x"E4", +x"C8", x"C9", x"22", x"D0", x"F3", x"F0", x"E9", x"20", +x"7F", x"CB", x"20", x"C5", x"00", x"C9", x"88", x"F0", +x"05", x"A9", x"A1", x"20", x"C7", x"CC", x"A5", x"A9", +x"D0", x"05", x"20", x"78", x"C7", x"F0", x"BB", x"20", +x"C5", x"00", x"B0", x"03", x"4C", x"14", x"C7", x"4C", +x"01", x"C6", x"20", x"DC", x"D4", x"48", x"C9", x"8C", +x"F0", x"04", x"C9", x"88", x"D0", x"91", x"C6", x"AD", +x"D0", x"04", x"68", x"4C", x"21", x"F0", x"20", x"BF", +x"00", x"20", x"DA", x"C7", x"C9", x"2C", x"F0", x"EE", +x"68", x"60", x"A2", x"00", x"86", x"14", x"86", x"15", +x"B0", x"F7", x"E9", x"2F", x"85", x"06", x"A5", x"15", +x"85", x"6A", x"C9", x"19", x"B0", x"D4", x"A5", x"14", +x"0A", x"26", x"6A", x"0A", x"26", x"6A", x"65", x"14", +x"85", x"14", x"A5", x"6A", x"65", x"15", x"85", x"15", +x"06", x"14", x"26", x"15", x"A5", x"14", x"65", x"06", +x"85", x"14", x"90", x"02", x"E6", x"15", x"20", x"BF", +x"00", x"4C", x"E0", x"C7", x"20", x"E4", x"CD", x"85", +x"91", x"84", x"92", x"A9", x"AC", x"20", x"C7", x"CC", +x"A5", x"0B", x"48", x"A5", x"0A", x"48", x"20", x"4B", +x"F0", x"68", x"2A", x"20", x"71", x"CB", x"D0", x"18", +x"68", x"10", x"12", x"20", x"5A", x"D9", x"20", x"FE", +x"CE", x"A0", x"00", x"A5", x"AC", x"91", x"91", x"C8", +x"A5", x"AD", x"91", x"91", x"60", x"4C", x"0F", x"D9", +x"68", x"A0", x"02", x"B1", x"AC", x"C5", x"7C", x"90", +x"17", x"D0", x"07", x"88", x"B1", x"AC", x"C5", x"7B", +x"90", x"0E", x"A4", x"AD", x"C4", x"76", x"90", x"08", +x"D0", x"0D", x"A5", x"AC", x"C5", x"75", x"B0", x"07", +x"A5", x"AC", x"A4", x"AD", x"4C", x"85", x"C8", x"A0", +x"00", x"B1", x"AC", x"20", x"B3", x"D1", x"A5", x"98", +x"A4", x"99", x"85", x"B7", x"84", x"B8", x"20", x"B8", +x"D3", x"A9", x"A9", x"A0", x"00", x"85", x"98", x"84", +x"99", x"20", x"19", x"D4", x"A0", x"00", x"B1", x"98", +x"91", x"91", x"C8", x"B1", x"98", x"91", x"91", x"C8", +x"B1", x"98", x"91", x"91", x"60", x"C9", x"21", x"D0", +x"FB", x"A9", x"FF", x"8D", x"10", x"02", x"4C", x"BF", +x"00", x"AD", x"10", x"02", x"85", x"BE", x"20", x"BA", +x"C8", x"A5", x"BE", x"8D", x"10", x"02", x"60", x"20", +x"4D", x"C9", x"20", x"C5", x"00", x"F0", x"41", x"F0", +x"51", x"20", x"9D", x"C8", x"F0", x"4C", x"C9", x"9D", +x"F0", x"60", x"C9", x"A0", x"18", x"F0", x"5B", x"C9", +x"2C", x"F0", x"40", x"C9", x"3B", x"F0", x"68", x"20", +x"7F", x"CB", x"24", x"0A", x"30", x"D9", x"20", x"1C", +x"DB", x"20", x"C5", x"D1", x"A0", x"00", x"B1", x"AC", +x"18", x"65", x"11", x"C5", x"12", x"90", x"03", x"20", +x"00", x"C9", x"20", x"4D", x"C9", x"20", x"67", x"C9", +x"D0", x"C0", x"A0", x"00", x"94", x"16", x"A2", x"15", +x"A9", x"0D", x"85", x"11", x"20", x"6C", x"C9", x"A9", +x"0A", x"20", x"6C", x"C9", x"A9", x"00", x"85", x"11", +x"49", x"FF", x"60", x"A5", x"11", x"C5", x"13", x"90", +x"06", x"20", x"00", x"C9", x"4C", x"3F", x"C9", x"38", +x"E9", x"0A", x"B0", x"FC", x"49", x"FF", x"69", x"01", +x"D0", x"10", x"08", x"20", x"D9", x"D4", x"C9", x"29", +x"D0", x"68", x"28", x"90", x"06", x"8A", x"E5", x"11", +x"90", x"05", x"AA", x"E8", x"CA", x"D0", x"06", x"20", +x"BF", x"00", x"4C", x"BF", x"C8", x"20", x"67", x"C9", +x"D0", x"F2", x"20", x"C5", x"D1", x"20", x"E4", x"D3", +x"AA", x"A0", x"00", x"E8", x"CA", x"F0", x"BB", x"B1", +x"6A", x"20", x"6C", x"C9", x"C8", x"C9", x"0D", x"D0", +x"F3", x"20", x"0C", x"C9", x"4C", x"54", x"C9", x"A9", +x"20", x"2C", x"A9", x"3F", x"24", x"10", x"30", x"15", +x"48", x"C9", x"20", x"90", x"0C", x"A5", x"11", x"C5", +x"12", x"D0", x"04", x"A9", x"00", x"85", x"11", x"E6", +x"11", x"68", x"20", x"B9", x"C6", x"29", x"FF", x"60", +x"A5", x"0E", x"F0", x"11", x"30", x"04", x"A0", x"FF", +x"D0", x"04", x"A5", x"87", x"A4", x"88", x"85", x"81", +x"84", x"82", x"4C", x"D0", x"CC", x"A9", x"ED", x"A0", +x"CA", x"20", x"4A", x"C9", x"A5", x"85", x"A4", x"86", +x"85", x"C6", x"84", x"C7", x"60", x"20", x"E4", x"D0", +x"A2", x"17", x"A0", x"00", x"84", x"17", x"A9", x"40", +x"20", x"F6", x"C9", x"60", x"46", x"10", x"AD", x"10", +x"02", x"85", x"BE", x"20", x"FA", x"DF", x"C9", x"22", +x"D0", x"0B", x"20", x"85", x"CC", x"A9", x"3B", x"20", +x"C7", x"CC", x"20", x"4D", x"C9", x"20", x"E4", x"D0", +x"A9", x"2C", x"85", x"15", x"20", x"E7", x"C9", x"A5", +x"16", x"20", x"5D", x"DF", x"4C", x"F5", x"C9", x"20", +x"6A", x"C9", x"20", x"67", x"C9", x"4C", x"65", x"C3", +x"A6", x"89", x"A4", x"8A", x"A9", x"98", x"85", x"0E", +x"86", x"8B", x"84", x"8C", x"20", x"E4", x"CD", x"85", +x"91", x"84", x"92", x"A5", x"C6", x"A4", x"C7", x"85", +x"93", x"84", x"94", x"A6", x"8B", x"A4", x"8C", x"86", +x"C6", x"84", x"C7", x"20", x"C5", x"00", x"D0", x"1B", +x"24", x"0E", x"50", x"0B", x"20", x"E3", x"C6", x"85", +x"16", x"A2", x"15", x"A0", x"00", x"F0", x"08", x"30", +x"71", x"20", x"6A", x"C9", x"20", x"E7", x"C9", x"86", +x"C6", x"84", x"C7", x"20", x"BF", x"00", x"24", x"0A", +x"10", x"31", x"24", x"0E", x"50", x"09", x"E8", x"86", +x"C6", x"A9", x"00", x"85", x"06", x"F0", x"0C", x"85", +x"06", x"C9", x"22", x"F0", x"07", x"A9", x"3A", x"85", +x"06", x"A9", x"2C", x"18", x"85", x"07", x"A5", x"C6", +x"A4", x"C7", x"69", x"00", x"90", x"01", x"C8", x"20", +x"CB", x"D1", x"20", x"21", x"D5", x"20", x"49", x"C8", +x"4C", x"73", x"CA", x"20", x"32", x"DA", x"A5", x"0B", +x"20", x"31", x"C8", x"20", x"C5", x"00", x"F0", x"07", +x"C9", x"2C", x"F0", x"03", x"4C", x"88", x"C9", x"A5", +x"C6", x"A4", x"C7", x"85", x"8B", x"84", x"8C", x"A5", +x"93", x"A4", x"94", x"85", x"C6", x"84", x"C7", x"20", +x"C5", x"00", x"F0", x"2C", x"20", x"C5", x"CC", x"4C", +x"FC", x"C9", x"20", x"75", x"C7", x"C8", x"AA", x"D0", +x"12", x"A2", x"06", x"C8", x"B1", x"C6", x"F0", x"6C", +x"C8", x"B1", x"C6", x"85", x"87", x"C8", x"B1", x"C6", +x"C8", x"85", x"88", x"B1", x"C6", x"AA", x"20", x"6A", +x"C7", x"E0", x"83", x"D0", x"DD", x"4C", x"33", x"CA", +x"A5", x"8B", x"A4", x"8C", x"A6", x"0E", x"10", x"03", +x"4C", x"3B", x"C6", x"A0", x"00", x"20", x"B1", x"C8", +x"B1", x"8B", x"F0", x"07", x"A9", x"DC", x"A0", x"CA", +x"4C", x"4A", x"C9", x"60", x"3F", x"45", x"58", x"54", +x"52", x"41", x"20", x"49", x"47", x"4E", x"4F", x"52", +x"45", x"44", x"0D", x"0A", x"00", x"3F", x"52", x"45", +x"44", x"4F", x"20", x"46", x"52", x"4F", x"4D", x"20", +x"53", x"54", x"41", x"52", x"54", x"0D", x"0A", x"00", +x"D0", x"04", x"A0", x"00", x"F0", x"03", x"20", x"E4", +x"CD", x"85", x"91", x"84", x"92", x"20", x"AC", x"C1", +x"F0", x"04", x"A2", x"00", x"F0", x"66", x"9A", x"8A", +x"18", x"69", x"04", x"48", x"69", x"06", x"85", x"6C", +x"68", x"A0", x"01", x"20", x"E1", x"D8", x"BA", x"BD", +x"09", x"01", x"85", x"AE", x"A5", x"91", x"A4", x"92", +x"20", x"A6", x"D5", x"20", x"0F", x"D9", x"A0", x"01", +x"20", x"9C", x"D9", x"BA", x"38", x"FD", x"09", x"01", +x"F0", x"17", x"BD", x"0F", x"01", x"85", x"81", x"BD", +x"10", x"01", x"85", x"82", x"BD", x"12", x"01", x"85", +x"C6", x"BD", x"11", x"01", x"85", x"C7", x"4C", x"C8", +x"C5", x"8A", x"69", x"11", x"AA", x"9A", x"20", x"C5", +x"00", x"C9", x"2C", x"D0", x"F1", x"20", x"BF", x"00", +x"20", x"06", x"CB", x"20", x"7F", x"CB", x"18", x"24", +x"38", x"24", x"0A", x"30", x"03", x"B0", x"03", x"60", +x"B0", x"FD", x"A2", x"18", x"4C", x"59", x"C2", x"A6", +x"C6", x"D0", x"02", x"C6", x"C7", x"C6", x"C6", x"A2", +x"00", x"24", x"48", x"8A", x"48", x"A9", x"01", x"20", +x"1D", x"C2", x"20", x"64", x"CC", x"A9", x"00", x"85", +x"95", x"20", x"C5", x"00", x"38", x"E9", x"AB", x"90", +x"17", x"C9", x"03", x"B0", x"13", x"C9", x"01", x"2A", +x"49", x"01", x"45", x"95", x"C5", x"95", x"90", x"61", +x"85", x"95", x"20", x"BF", x"00", x"4C", x"9C", x"CB", +x"A6", x"95", x"D0", x"2C", x"B0", x"7B", x"69", x"07", +x"90", x"77", x"65", x"0A", x"D0", x"03", x"4C", x"7B", +x"D3", x"69", x"FF", x"85", x"6A", x"0A", x"65", x"6A", +x"A8", x"68", x"D9", x"72", x"C0", x"B0", x"67", x"20", +x"6E", x"CB", x"48", x"20", x"01", x"CC", x"68", x"A4", +x"93", x"10", x"17", x"AA", x"F0", x"56", x"D0", x"5F", +x"46", x"0A", x"8A", x"2A", x"A6", x"C6", x"D0", x"02", +x"C6", x"C7", x"C6", x"C6", x"A0", x"1B", x"85", x"95", +x"D0", x"D7", x"D9", x"72", x"C0", x"B0", x"48", x"90", +x"D9", x"B9", x"74", x"C0", x"48", x"B9", x"73", x"C0", +x"48", x"20", x"14", x"CC", x"A5", x"95", x"4C", x"8A", +x"CB", x"4C", x"D0", x"CC", x"A5", x"AE", x"BE", x"72", +x"C0", x"A8", x"68", x"85", x"6A", x"E6", x"6A", x"68", +x"85", x"6B", x"98", x"48", x"20", x"5A", x"D9", x"A5", +x"AD", x"48", x"A5", x"AC", x"48", x"A5", x"AB", x"48", +x"A5", x"AA", x"48", x"A5", x"A9", x"48", x"6C", x"6A", +x"00", x"A0", x"FF", x"68", x"F0", x"23", x"C9", x"64", +x"F0", x"03", x"20", x"6E", x"CB", x"84", x"93", x"68", +x"4A", x"85", x"0F", x"68", x"85", x"B1", x"68", x"85", +x"B2", x"68", x"85", x"B3", x"68", x"85", x"B4", x"68", +x"85", x"B5", x"68", x"85", x"B6", x"45", x"AE", x"85", +x"B7", x"A5", x"A9", x"60", x"A9", x"00", x"85", x"0A", +x"20", x"BF", x"00", x"B0", x"03", x"4C", x"32", x"DA", +x"20", x"6E", x"CE", x"B0", x"67", x"C9", x"2E", x"F0", +x"F4", x"C9", x"A5", x"F0", x"58", x"C9", x"A4", x"F0", +x"E7", x"C9", x"22", x"D0", x"0F", x"A5", x"C6", x"A4", +x"C7", x"69", x"00", x"90", x"01", x"C8", x"20", x"C5", +x"D1", x"4C", x"21", x"D5", x"C9", x"A2", x"D0", x"13", +x"A0", x"18", x"D0", x"3B", x"20", x"FE", x"CE", x"A5", +x"AD", x"49", x"FF", x"A8", x"A5", x"AC", x"49", x"FF", +x"4C", x"D1", x"D0", x"C9", x"9F", x"D0", x"03", x"4C", +x"32", x"D1", x"C9", x"AE", x"90", x"03", x"4C", x"00", +x"CD", x"20", x"C2", x"CC", x"20", x"7F", x"CB", x"A9", +x"29", x"2C", x"A9", x"28", x"2C", x"A9", x"2C", x"A0", +x"00", x"D1", x"C6", x"D0", x"03", x"4C", x"BF", x"00", +x"A2", x"02", x"4C", x"59", x"C2", x"A0", x"15", x"68", +x"68", x"4C", x"DB", x"CB", x"20", x"E4", x"CD", x"85", +x"AC", x"84", x"AD", x"A6", x"0A", x"F0", x"05", x"A2", +x"00", x"86", x"B8", x"60", x"A6", x"0B", x"10", x"0D", +x"A0", x"00", x"B1", x"AC", x"AA", x"C8", x"B1", x"AC", +x"A8", x"8A", x"4C", x"D1", x"D0", x"4C", x"E1", x"D8", +x"0A", x"48", x"AA", x"20", x"BF", x"00", x"E0", x"83", +x"90", x"20", x"20", x"C2", x"CC", x"20", x"7F", x"CB", +x"20", x"C5", x"CC", x"20", x"70", x"CB", x"68", x"AA", +x"A5", x"AD", x"48", x"A5", x"AC", x"48", x"8A", x"48", +x"20", x"DC", x"D4", x"68", x"A8", x"8A", x"48", x"4C", +x"2F", x"CD", x"20", x"B9", x"CC", x"68", x"A8", x"B9", +x"E8", x"BF", x"85", x"9D", x"B9", x"E9", x"BF", x"85", +x"9E", x"20", x"9C", x"00", x"4C", x"6E", x"CB", x"A0", +x"FF", x"2C", x"A0", x"00", x"84", x"08", x"20", x"FE", +x"CE", x"A5", x"AC", x"45", x"08", x"85", x"06", x"A5", +x"AD", x"45", x"08", x"85", x"07", x"20", x"3B", x"D9", +x"20", x"FE", x"CE", x"A5", x"AD", x"45", x"08", x"25", +x"07", x"45", x"08", x"A8", x"A5", x"AC", x"45", x"08", +x"25", x"06", x"45", x"08", x"4C", x"D1", x"D0", x"20", +x"71", x"CB", x"B0", x"13", x"A5", x"B6", x"09", x"7F", +x"25", x"B2", x"85", x"B2", x"A9", x"B1", x"A0", x"00", +x"20", x"9A", x"D9", x"AA", x"4C", x"BA", x"CD", x"A9", +x"00", x"85", x"0A", x"C6", x"95", x"20", x"E4", x"D3", +x"85", x"A9", x"86", x"AA", x"84", x"AB", x"A5", x"B4", +x"A4", x"B5", x"20", x"E8", x"D3", x"86", x"B4", x"84", +x"B5", x"AA", x"38", x"E5", x"A9", x"F0", x"08", x"A9", +x"01", x"90", x"04", x"A6", x"A9", x"A9", x"FF", x"85", +x"AE", x"A0", x"FF", x"E8", x"C8", x"CA", x"D0", x"07", +x"A6", x"AE", x"30", x"0F", x"18", x"90", x"0C", x"B1", +x"B4", x"D1", x"AA", x"F0", x"EF", x"A2", x"FF", x"B0", +x"02", x"A2", x"01", x"E8", x"8A", x"2A", x"25", x"0F", +x"F0", x"02", x"A9", x"FF", x"4C", x"7B", x"D9", x"20", +x"C5", x"CC", x"AA", x"20", x"E9", x"CD", x"20", x"C5", +x"00", x"D0", x"F4", x"60", x"A2", x"00", x"20", x"C5", +x"00", x"86", x"09", x"85", x"8D", x"20", x"C5", x"00", +x"20", x"6E", x"CE", x"B0", x"03", x"4C", x"D0", x"CC", +x"A2", x"00", x"86", x"0A", x"86", x"0B", x"20", x"BF", +x"00", x"90", x"05", x"20", x"6E", x"CE", x"90", x"0B", +x"AA", x"20", x"BF", x"00", x"90", x"FB", x"20", x"6E", +x"CE", x"B0", x"F6", x"C9", x"24", x"D0", x"06", x"A9", +x"FF", x"85", x"0A", x"D0", x"10", x"C9", x"25", x"D0", +x"13", x"A5", x"0D", x"D0", x"D0", x"A9", x"80", x"85", +x"0B", x"05", x"8D", x"85", x"8D", x"8A", x"09", x"80", +x"AA", x"20", x"BF", x"00", x"86", x"8E", x"38", x"05", +x"0D", x"E9", x"28", x"D0", x"03", x"4C", x"10", x"CF", +x"A9", x"00", x"85", x"0D", x"A5", x"75", x"A6", x"76", +x"A0", x"00", x"86", x"A8", x"85", x"A7", x"E4", x"78", +x"D0", x"04", x"C5", x"77", x"F0", x"22", x"A5", x"8D", +x"D1", x"A7", x"D0", x"08", x"A5", x"8E", x"C8", x"D1", +x"A7", x"F0", x"6A", x"88", x"18", x"A5", x"A7", x"69", +x"07", x"90", x"E1", x"E8", x"D0", x"DC", x"C9", x"41", +x"90", x"05", x"4C", x"3C", x"F0", x"EA", x"EA", x"60", +x"68", x"48", x"C9", x"DE", x"D0", x"0D", x"BA", x"BD", +x"02", x"01", x"C9", x"CC", x"D0", x"05", x"A9", x"4E", +x"A0", x"DC", x"60", x"A5", x"77", x"A4", x"78", x"85", +x"A7", x"84", x"A8", x"A5", x"79", x"A4", x"7A", x"85", +x"A2", x"84", x"A3", x"18", x"69", x"07", x"90", x"01", +x"C8", x"85", x"A0", x"84", x"A1", x"20", x"DA", x"C1", +x"A5", x"A0", x"A4", x"A1", x"C8", x"85", x"77", x"84", +x"78", x"A0", x"00", x"A5", x"8D", x"91", x"A7", x"C8", +x"A5", x"8E", x"91", x"A7", x"A9", x"00", x"C8", x"91", +x"A7", x"C8", x"91", x"A7", x"C8", x"91", x"A7", x"C8", +x"91", x"A7", x"C8", x"91", x"A7", x"A5", x"A7", x"18", +x"69", x"02", x"A4", x"A8", x"90", x"01", x"C8", x"85", +x"8F", x"84", x"90", x"60", x"A5", x"08", x"0A", x"69", +x"05", x"65", x"A7", x"A4", x"A8", x"90", x"01", x"C8", +x"85", x"A0", x"84", x"A1", x"60", x"90", x"80", x"00", +x"00", x"20", x"BF", x"00", x"20", x"7F", x"CB", x"20", +x"6E", x"CB", x"A5", x"AE", x"30", x"0D", x"A5", x"A9", +x"C9", x"90", x"90", x"09", x"A9", x"ED", x"A0", x"CE", +x"20", x"9A", x"D9", x"D0", x"7A", x"4C", x"DA", x"D9", +x"A5", x"09", x"05", x"0B", x"48", x"A5", x"0A", x"48", +x"A0", x"00", x"98", x"48", x"A5", x"8E", x"48", x"A5", +x"8D", x"48", x"20", x"F1", x"CE", x"68", x"85", x"8D", +x"68", x"85", x"8E", x"68", x"A8", x"BA", x"BD", x"02", +x"01", x"48", x"BD", x"01", x"01", x"48", x"A5", x"AC", +x"9D", x"02", x"01", x"A5", x"AD", x"9D", x"01", x"01", +x"C8", x"20", x"C5", x"00", x"C9", x"2C", x"F0", x"D2", +x"84", x"08", x"20", x"BF", x"CC", x"68", x"85", x"0A", +x"68", x"85", x"0B", x"29", x"7F", x"85", x"09", x"A6", +x"77", x"A5", x"78", x"86", x"A7", x"85", x"A8", x"C5", +x"7A", x"D0", x"04", x"E4", x"79", x"F0", x"39", x"A0", +x"00", x"B1", x"A7", x"C8", x"C5", x"8D", x"D0", x"06", +x"A5", x"8E", x"D1", x"A7", x"F0", x"16", x"C8", x"B1", +x"A7", x"18", x"65", x"A7", x"AA", x"C8", x"B1", x"A7", +x"65", x"A8", x"90", x"D7", x"A2", x"10", x"2C", x"A2", +x"08", x"4C", x"59", x"C2", x"A2", x"12", x"A5", x"09", +x"D0", x"F7", x"20", x"DC", x"CE", x"A5", x"08", x"A0", +x"04", x"D1", x"A7", x"D0", x"E7", x"4C", x"2A", x"D0", +x"20", x"DC", x"CE", x"20", x"2A", x"C2", x"A9", x"00", +x"A8", x"85", x"BA", x"A2", x"05", x"A5", x"8D", x"91", +x"A7", x"10", x"01", x"CA", x"C8", x"A5", x"8E", x"91", +x"A7", x"10", x"02", x"CA", x"CA", x"86", x"B9", x"A5", +x"08", x"C8", x"C8", x"C8", x"91", x"A7", x"A2", x"0B", +x"A9", x"00", x"24", x"09", x"50", x"08", x"68", x"18", +x"69", x"01", x"AA", x"68", x"69", x"00", x"C8", x"91", +x"A7", x"C8", x"8A", x"91", x"A7", x"20", x"8C", x"D0", +x"86", x"B9", x"85", x"BA", x"A4", x"6A", x"C6", x"08", +x"D0", x"DC", x"65", x"A1", x"B0", x"5D", x"85", x"A1", +x"A8", x"8A", x"65", x"A0", x"90", x"03", x"C8", x"F0", +x"52", x"20", x"2A", x"C2", x"85", x"79", x"84", x"7A", +x"A9", x"00", x"E6", x"BA", x"A4", x"B9", x"F0", x"05", +x"88", x"91", x"A0", x"D0", x"FB", x"C6", x"A1", x"C6", +x"BA", x"D0", x"F5", x"E6", x"A1", x"38", x"A5", x"79", +x"E5", x"A7", x"A0", x"02", x"91", x"A7", x"A5", x"7A", +x"C8", x"E5", x"A8", x"91", x"A7", x"A5", x"09", x"D0", +x"62", x"C8", x"B1", x"A7", x"85", x"08", x"A9", x"00", +x"85", x"B9", x"85", x"BA", x"C8", x"68", x"AA", x"85", +x"AC", x"68", x"85", x"AD", x"D1", x"A7", x"90", x"0E", +x"D0", x"06", x"C8", x"8A", x"D1", x"A7", x"90", x"07", +x"4C", x"84", x"CF", x"4C", x"57", x"C2", x"C8", x"A5", +x"BA", x"05", x"B9", x"18", x"F0", x"0A", x"20", x"8C", +x"D0", x"8A", x"65", x"AC", x"AA", x"98", x"A4", x"6A", +x"65", x"AD", x"86", x"B9", x"C6", x"08", x"D0", x"CA", +x"85", x"BA", x"A2", x"05", x"A5", x"8D", x"10", x"01", +x"CA", x"A5", x"8E", x"10", x"02", x"CA", x"CA", x"86", +x"70", x"A9", x"00", x"20", x"95", x"D0", x"8A", x"65", +x"A0", x"85", x"8F", x"98", x"65", x"A1", x"85", x"90", +x"A8", x"A5", x"8F", x"60", x"84", x"6A", x"B1", x"A7", +x"85", x"70", x"88", x"B1", x"A7", x"85", x"71", x"A9", +x"10", x"85", x"A5", x"A2", x"00", x"A0", x"00", x"8A", +x"0A", x"AA", x"98", x"2A", x"A8", x"B0", x"A4", x"06", +x"B9", x"26", x"BA", x"90", x"0B", x"18", x"8A", x"65", +x"70", x"AA", x"98", x"65", x"71", x"A8", x"B0", x"93", +x"C6", x"A5", x"D0", x"E3", x"60", x"A5", x"0A", x"F0", +x"03", x"20", x"E4", x"D3", x"20", x"64", x"D2", x"38", +x"A5", x"7B", x"E5", x"79", x"A8", x"A5", x"7C", x"E5", +x"7A", x"A2", x"00", x"86", x"0A", x"85", x"AA", x"84", +x"AB", x"A2", x"90", x"4C", x"83", x"D9", x"A4", x"11", +x"A9", x"00", x"F0", x"ED", x"A6", x"82", x"E8", x"D0", +x"A2", x"A2", x"16", x"2C", x"A2", x"20", x"4C", x"59", +x"C2", x"20", x"1F", x"D1", x"20", x"E4", x"D0", x"20", +x"C2", x"CC", x"A9", x"80", x"85", x"0D", x"20", x"E4", +x"CD", x"20", x"6E", x"CB", x"20", x"BF", x"CC", x"A9", +x"AC", x"20", x"C7", x"CC", x"48", x"A5", x"90", x"48", +x"A5", x"8F", x"48", x"A5", x"C7", x"48", x"A5", x"C6", +x"48", x"20", x"67", x"C7", x"4C", x"8D", x"D1", x"A9", +x"9F", x"20", x"C7", x"CC", x"09", x"80", x"85", x"0D", +x"20", x"EB", x"CD", x"85", x"96", x"84", x"97", x"4C", +x"6E", x"CB", x"20", x"1F", x"D1", x"A5", x"97", x"48", +x"A5", x"96", x"48", x"20", x"B9", x"CC", x"20", x"6E", +x"CB", x"68", x"85", x"96", x"68", x"85", x"97", x"A0", +x"02", x"B1", x"96", x"85", x"8F", x"AA", x"C8", x"B1", +x"96", x"F0", x"99", x"85", x"90", x"C8", x"B1", x"8F", +x"48", x"88", x"10", x"FA", x"A4", x"90", x"20", x"13", +x"D9", x"A5", x"C7", x"48", x"A5", x"C6", x"48", x"B1", +x"96", x"85", x"C6", x"C8", x"B1", x"96", x"85", x"C7", +x"A5", x"90", x"48", x"A5", x"8F", x"48", x"20", x"6B", +x"CB", x"68", x"85", x"96", x"68", x"85", x"97", x"20", +x"C5", x"00", x"F0", x"03", x"4C", x"D0", x"CC", x"68", +x"85", x"C6", x"68", x"85", x"C7", x"A0", x"00", x"68", +x"91", x"96", x"68", x"C8", x"91", x"96", x"68", x"C8", +x"91", x"96", x"68", x"C8", x"91", x"96", x"68", x"C8", +x"91", x"96", x"60", x"20", x"6E", x"CB", x"A0", x"00", +x"20", x"1E", x"DB", x"68", x"68", x"A9", x"FF", x"A0", +x"03", x"D0", x"12", x"A6", x"AC", x"A4", x"AD", x"86", +x"98", x"84", x"99", x"20", x"32", x"D2", x"86", x"AA", +x"84", x"AB", x"85", x"A9", x"60", x"A2", x"22", x"86", +x"06", x"86", x"07", x"85", x"B7", x"84", x"B8", x"85", +x"AA", x"84", x"AB", x"A0", x"FF", x"C8", x"B1", x"B7", +x"F0", x"0C", x"C5", x"06", x"F0", x"04", x"C5", x"07", +x"D0", x"F3", x"C9", x"22", x"F0", x"01", x"18", x"84", +x"A9", x"98", x"65", x"B7", x"85", x"B9", x"A6", x"B8", +x"90", x"01", x"E8", x"86", x"BA", x"A5", x"B8", x"F0", +x"04", x"C9", x"03", x"D0", x"0B", x"98", x"20", x"B3", +x"D1", x"A6", x"B7", x"A4", x"B8", x"20", x"C6", x"D3", +x"A6", x"5E", x"E0", x"6A", x"D0", x"05", x"A2", x"1C", +x"4C", x"59", x"C2", x"A5", x"A9", x"95", x"00", x"A5", +x"AA", x"95", x"01", x"A5", x"AB", x"95", x"02", x"A0", +x"00", x"86", x"AC", x"84", x"AD", x"84", x"B8", x"88", +x"84", x"0A", x"86", x"5F", x"E8", x"E8", x"E8", x"86", +x"5E", x"60", x"46", x"0C", x"48", x"49", x"FF", x"38", +x"65", x"7B", x"A4", x"7C", x"B0", x"01", x"88", x"C4", +x"7A", x"90", x"11", x"D0", x"04", x"C5", x"79", x"90", +x"0B", x"85", x"7B", x"84", x"7C", x"85", x"7D", x"84", +x"7E", x"AA", x"68", x"60", x"A2", x"0C", x"A5", x"0C", +x"30", x"B6", x"20", x"64", x"D2", x"A9", x"80", x"85", +x"0C", x"68", x"D0", x"D0", x"A6", x"7F", x"A5", x"80", +x"86", x"7B", x"85", x"7C", x"A0", x"00", x"84", x"97", +x"84", x"96", x"A5", x"79", x"A6", x"7A", x"85", x"A7", +x"86", x"A8", x"A9", x"61", x"A2", x"00", x"85", x"6A", +x"86", x"6B", x"C5", x"5E", x"F0", x"05", x"20", x"05", +x"D3", x"F0", x"F7", x"A9", x"07", x"85", x"9B", x"A5", +x"75", x"A6", x"76", x"85", x"6A", x"86", x"6B", x"E4", +x"78", x"D0", x"04", x"C5", x"77", x"F0", x"05", x"20", +x"FB", x"D2", x"F0", x"F3", x"85", x"A0", x"86", x"A1", +x"A9", x"03", x"85", x"9B", x"A5", x"A0", x"A6", x"A1", +x"E4", x"7A", x"D0", x"07", x"C5", x"79", x"D0", x"03", +x"4C", x"44", x"D3", x"85", x"6A", x"86", x"6B", x"A0", +x"00", x"B1", x"6A", x"AA", x"C8", x"B1", x"6A", x"08", +x"C8", x"B1", x"6A", x"65", x"A0", x"85", x"A0", x"C8", +x"B1", x"6A", x"65", x"A1", x"85", x"A1", x"28", x"10", +x"D3", x"8A", x"30", x"D0", x"C8", x"B1", x"6A", x"A0", +x"00", x"0A", x"69", x"05", x"65", x"6A", x"85", x"6A", +x"90", x"02", x"E6", x"6B", x"A6", x"6B", x"E4", x"A1", +x"D0", x"04", x"C5", x"A0", x"F0", x"BA", x"20", x"05", +x"D3", x"F0", x"F3", x"B1", x"6A", x"30", x"35", x"C8", +x"B1", x"6A", x"10", x"30", x"C8", x"B1", x"6A", x"F0", +x"2B", x"C8", x"B1", x"6A", x"AA", x"C8", x"B1", x"6A", +x"C5", x"7C", x"90", x"06", x"D0", x"1E", x"E4", x"7B", +x"B0", x"1A", x"C5", x"A8", x"90", x"16", x"D0", x"04", +x"E4", x"A7", x"90", x"10", x"86", x"A7", x"85", x"A8", +x"A5", x"6A", x"A6", x"6B", x"85", x"96", x"86", x"97", +x"A5", x"9B", x"85", x"9D", x"A5", x"9B", x"18", x"65", +x"6A", x"85", x"6A", x"90", x"02", x"E6", x"6B", x"A6", +x"6B", x"A0", x"00", x"60", x"A5", x"97", x"05", x"96", +x"F0", x"F5", x"A5", x"9D", x"29", x"04", x"4A", x"A8", +x"85", x"9D", x"B1", x"96", x"65", x"A7", x"85", x"A2", +x"A5", x"A8", x"69", x"00", x"85", x"A3", x"A5", x"7B", +x"A6", x"7C", x"85", x"A0", x"86", x"A1", x"20", x"E1", +x"C1", x"A4", x"9D", x"C8", x"A5", x"A0", x"91", x"96", +x"AA", x"E6", x"A1", x"A5", x"A1", x"C8", x"91", x"96", +x"4C", x"68", x"D2", x"A5", x"AD", x"48", x"A5", x"AC", +x"48", x"20", x"64", x"CC", x"20", x"70", x"CB", x"68", +x"85", x"B7", x"68", x"85", x"B8", x"A0", x"00", x"B1", +x"B7", x"18", x"71", x"AC", x"90", x"05", x"A2", x"1A", +x"4C", x"59", x"C2", x"20", x"B3", x"D1", x"20", x"B8", +x"D3", x"A5", x"98", x"A4", x"99", x"20", x"E8", x"D3", +x"20", x"CA", x"D3", x"A5", x"B7", x"A4", x"B8", x"20", +x"E8", x"D3", x"20", x"08", x"D2", x"4C", x"99", x"CB", +x"A0", x"00", x"B1", x"B7", x"48", x"C8", x"B1", x"B7", +x"AA", x"C8", x"B1", x"B7", x"A8", x"68", x"86", x"6A", +x"84", x"6B", x"A8", x"F0", x"0A", x"48", x"88", x"B1", +x"6A", x"91", x"7D", x"98", x"D0", x"F8", x"68", x"18", +x"65", x"7D", x"85", x"7D", x"90", x"02", x"E6", x"7E", +x"60", x"20", x"70", x"CB", x"A5", x"AC", x"A4", x"AD", +x"85", x"6A", x"84", x"6B", x"20", x"19", x"D4", x"08", +x"A0", x"00", x"B1", x"6A", x"48", x"C8", x"B1", x"6A", +x"AA", x"C8", x"B1", x"6A", x"A8", x"68", x"28", x"D0", +x"13", x"C4", x"7C", x"D0", x"0F", x"E4", x"7B", x"D0", +x"0B", x"48", x"18", x"65", x"7B", x"85", x"7B", x"90", +x"02", x"E6", x"7C", x"68", x"86", x"6A", x"84", x"6B", +x"60", x"C4", x"60", x"D0", x"0C", x"C5", x"5F", x"D0", +x"08", x"85", x"5E", x"E9", x"03", x"85", x"5F", x"A0", +x"00", x"60", x"20", x"DF", x"D4", x"8A", x"48", x"A9", +x"01", x"20", x"BB", x"D1", x"68", x"A0", x"00", x"91", +x"AA", x"68", x"68", x"4C", x"08", x"D2", x"20", x"9F", +x"D4", x"D1", x"98", x"98", x"90", x"04", x"B1", x"98", +x"AA", x"98", x"48", x"8A", x"48", x"20", x"BB", x"D1", +x"A5", x"98", x"A4", x"99", x"20", x"E8", x"D3", x"68", +x"A8", x"68", x"18", x"65", x"6A", x"85", x"6A", x"90", +x"02", x"E6", x"6B", x"98", x"20", x"CA", x"D3", x"4C", +x"08", x"D2", x"20", x"9F", x"D4", x"18", x"F1", x"98", +x"49", x"FF", x"4C", x"44", x"D4", x"A9", x"FF", x"85", +x"AD", x"20", x"C5", x"00", x"C9", x"29", x"F0", x"06", +x"20", x"C5", x"CC", x"20", x"DC", x"D4", x"20", x"9F", +x"D4", x"F0", x"4B", x"CA", x"8A", x"48", x"18", x"A2", +x"00", x"F1", x"98", x"B0", x"B6", x"49", x"FF", x"C5", +x"AD", x"90", x"B1", x"A5", x"AD", x"B0", x"AD", x"20", +x"BF", x"CC", x"68", x"A8", x"68", x"85", x"9D", x"68", +x"68", x"68", x"AA", x"68", x"85", x"98", x"68", x"85", +x"99", x"A5", x"9D", x"48", x"98", x"48", x"A0", x"00", +x"8A", x"60", x"20", x"C0", x"D4", x"4C", x"E0", x"D0", +x"20", x"E1", x"D3", x"A2", x"00", x"86", x"0A", x"A8", +x"60", x"20", x"C0", x"D4", x"F0", x"08", x"A0", x"00", +x"B1", x"6A", x"A8", x"4C", x"E0", x"D0", x"4C", x"87", +x"CF", x"20", x"BF", x"00", x"20", x"6B", x"CB", x"20", +x"F7", x"CE", x"A6", x"AC", x"D0", x"F0", x"A6", x"AD", +x"4C", x"C5", x"00", x"20", x"C0", x"D4", x"D0", x"03", +x"4C", x"36", x"D6", x"A6", x"C6", x"A4", x"C7", x"86", +x"B9", x"84", x"BA", x"A6", x"6A", x"86", x"C6", x"18", +x"65", x"6A", x"85", x"6C", x"A6", x"6B", x"86", x"C7", +x"90", x"01", x"E8", x"86", x"6D", x"A0", x"00", x"B1", +x"6C", x"48", x"A9", x"00", x"91", x"6C", x"20", x"C5", +x"00", x"20", x"32", x"DA", x"68", x"A0", x"00", x"91", +x"6C", x"A6", x"B9", x"A4", x"BA", x"86", x"C6", x"84", +x"C7", x"60", x"20", x"6B", x"CB", x"20", x"36", x"D5", +x"20", x"C5", x"CC", x"4C", x"DC", x"D4", x"A5", x"AE", +x"30", x"9C", x"A5", x"A9", x"C9", x"91", x"B0", x"96", +x"20", x"DA", x"D9", x"A5", x"AC", x"A4", x"AD", x"84", +x"14", x"85", x"15", x"60", x"A5", x"15", x"48", x"A5", +x"14", x"48", x"20", x"36", x"D5", x"A0", x"00", x"B1", +x"14", x"A8", x"68", x"85", x"14", x"68", x"85", x"15", +x"4C", x"E0", x"D0", x"20", x"2A", x"D5", x"8A", x"A0", +x"00", x"91", x"14", x"60", x"20", x"2A", x"D5", x"86", +x"91", x"A2", x"00", x"20", x"C5", x"00", x"F0", x"03", +x"20", x"30", x"D5", x"86", x"92", x"A0", x"00", x"B1", +x"14", x"45", x"92", x"25", x"91", x"F0", x"F8", x"60", +x"A9", x"4C", x"A0", x"DC", x"4C", x"A6", x"D5", x"20", +x"CB", x"D7", x"A5", x"AE", x"49", x"FF", x"85", x"AE", +x"45", x"B6", x"85", x"B7", x"A5", x"A9", x"4C", x"A9", +x"D5", x"20", x"D8", x"D6", x"90", x"3C", x"20", x"CB", +x"D7", x"D0", x"03", x"4C", x"3B", x"D9", x"A6", x"B8", +x"86", x"9E", x"A2", x"B1", x"A5", x"B1", x"A8", x"F0", +x"CE", x"38", x"E5", x"A9", x"F0", x"24", x"90", x"12", +x"84", x"A9", x"A4", x"B6", x"84", x"AE", x"49", x"FF", +x"69", x"00", x"A0", x"00", x"84", x"9E", x"A2", x"A9", +x"D0", x"04", x"A0", x"00", x"84", x"B8", x"C9", x"F9", +x"30", x"C7", x"A8", x"A5", x"B8", x"56", x"01", x"20", +x"EF", x"D6", x"24", x"B7", x"10", x"57", x"A0", x"A9", +x"E0", x"B1", x"F0", x"02", x"A0", x"B1", x"38", x"49", +x"FF", x"65", x"9E", x"85", x"B8", x"B9", x"04", x"00", +x"F5", x"04", x"85", x"AD", x"B9", x"03", x"00", x"F5", +x"03", x"85", x"AC", x"B9", x"02", x"00", x"F5", x"02", +x"85", x"AB", x"B9", x"01", x"00", x"F5", x"01", x"85", +x"AA", x"B0", x"03", x"20", x"86", x"D6", x"A0", x"00", +x"98", x"18", x"A6", x"AA", x"D0", x"4A", x"A6", x"AB", +x"86", x"AA", x"A6", x"AC", x"86", x"AB", x"A6", x"AD", +x"86", x"AC", x"A6", x"B8", x"86", x"AD", x"84", x"B8", +x"69", x"08", x"C9", x"20", x"D0", x"E4", x"A9", x"00", +x"85", x"A9", x"85", x"AE", x"60", x"65", x"9E", x"85", +x"B8", x"A5", x"AD", x"65", x"B5", x"85", x"AD", x"A5", +x"AC", x"65", x"B4", x"85", x"AC", x"A5", x"AB", x"65", +x"B3", x"85", x"AB", x"A5", x"AA", x"65", x"B2", x"85", +x"AA", x"4C", x"75", x"D6", x"69", x"01", x"06", x"B8", +x"26", x"AD", x"26", x"AC", x"26", x"AB", x"26", x"AA", +x"10", x"F2", x"38", x"E5", x"A9", x"B0", x"C7", x"49", +x"FF", x"69", x"01", x"85", x"A9", x"90", x"0E", x"E6", +x"A9", x"F0", x"42", x"66", x"AA", x"66", x"AB", x"66", +x"AC", x"66", x"AD", x"66", x"B8", x"60", x"A5", x"AE", +x"49", x"FF", x"85", x"AE", x"A5", x"AA", x"49", x"FF", +x"85", x"AA", x"A5", x"AB", x"49", x"FF", x"85", x"AB", +x"A5", x"AC", x"49", x"FF", x"85", x"AC", x"A5", x"AD", +x"49", x"FF", x"85", x"AD", x"A5", x"B8", x"49", x"FF", +x"85", x"B8", x"E6", x"B8", x"D0", x"0E", x"E6", x"AD", +x"D0", x"0A", x"E6", x"AC", x"D0", x"06", x"E6", x"AB", +x"D0", x"02", x"E6", x"AA", x"60", x"A2", x"0A", x"4C", +x"59", x"C2", x"A2", x"6D", x"B4", x"04", x"84", x"B8", +x"B4", x"03", x"94", x"04", x"B4", x"02", x"94", x"03", +x"B4", x"01", x"94", x"02", x"A4", x"B0", x"94", x"01", +x"69", x"08", x"30", x"E8", x"F0", x"E6", x"E9", x"08", +x"A8", x"A5", x"B8", x"B0", x"14", x"16", x"01", x"90", +x"02", x"F6", x"01", x"76", x"01", x"76", x"01", x"76", +x"02", x"76", x"03", x"76", x"04", x"6A", x"C8", x"D0", +x"EC", x"18", x"60", x"81", x"00", x"00", x"00", x"00", +x"03", x"7F", x"5E", x"56", x"CB", x"79", x"80", x"13", +x"9B", x"0B", x"64", x"80", x"76", x"38", x"93", x"16", +x"82", x"38", x"AA", x"3B", x"20", x"80", x"35", x"04", +x"F3", x"34", x"81", x"35", x"04", x"F3", x"34", x"80", +x"80", x"00", x"00", x"00", x"80", x"31", x"72", x"17", +x"F8", x"20", x"6A", x"D9", x"F0", x"02", x"10", x"03", +x"4C", x"87", x"CF", x"A5", x"A9", x"E9", x"7F", x"48", +x"A9", x"80", x"85", x"A9", x"A9", x"15", x"A0", x"D7", +x"20", x"A6", x"D5", x"A9", x"1A", x"A0", x"D7", x"20", +x"4E", x"D8", x"A9", x"FB", x"A0", x"D6", x"20", x"8F", +x"D5", x"A9", x"00", x"A0", x"D7", x"20", x"44", x"DD", +x"A9", x"1F", x"A0", x"D7", x"20", x"A6", x"D5", x"68", +x"20", x"BD", x"DA", x"A9", x"24", x"A0", x"D7", x"20", +x"CB", x"D7", x"D0", x"03", x"4C", x"CA", x"D7", x"20", +x"F6", x"D7", x"A9", x"00", x"85", x"6E", x"85", x"6F", +x"85", x"70", x"85", x"71", x"A5", x"B8", x"20", x"98", +x"D7", x"A5", x"AD", x"20", x"98", x"D7", x"A5", x"AC", +x"20", x"98", x"D7", x"A5", x"AB", x"20", x"98", x"D7", +x"A5", x"AA", x"20", x"9D", x"D7", x"4C", x"CE", x"D8", +x"D0", x"03", x"4C", x"C2", x"D6", x"4A", x"09", x"80", +x"A8", x"90", x"19", x"18", x"A5", x"71", x"65", x"B5", +x"85", x"71", x"A5", x"70", x"65", x"B4", x"85", x"70", +x"A5", x"6F", x"65", x"B3", x"85", x"6F", x"A5", x"6E", +x"65", x"B2", x"85", x"6E", x"66", x"6E", x"66", x"6F", +x"66", x"70", x"66", x"71", x"66", x"B8", x"98", x"4A", +x"D0", x"D6", x"60", x"85", x"6A", x"84", x"6B", x"A0", +x"04", x"B1", x"6A", x"85", x"B5", x"88", x"B1", x"6A", +x"85", x"B4", x"88", x"B1", x"6A", x"85", x"B3", x"88", +x"B1", x"6A", x"85", x"B6", x"45", x"AE", x"85", x"B7", +x"A5", x"B6", x"09", x"80", x"85", x"B2", x"88", x"B1", +x"6A", x"85", x"B1", x"A5", x"A9", x"60", x"A5", x"B1", +x"F0", x"1F", x"18", x"65", x"A9", x"90", x"04", x"30", +x"1D", x"18", x"2C", x"10", x"14", x"69", x"80", x"85", +x"A9", x"D0", x"03", x"4C", x"3A", x"D6", x"A5", x"B7", +x"85", x"AE", x"60", x"A5", x"AE", x"49", x"FF", x"30", +x"05", x"68", x"68", x"4C", x"36", x"D6", x"4C", x"BD", +x"D6", x"20", x"4B", x"D9", x"AA", x"F0", x"10", x"18", +x"69", x"02", x"B0", x"F2", x"A2", x"00", x"86", x"B7", +x"20", x"B6", x"D5", x"E6", x"A9", x"F0", x"E7", x"60", +x"84", x"20", x"00", x"00", x"00", x"20", x"4B", x"D9", +x"A9", x"38", x"A0", x"D8", x"A2", x"00", x"86", x"B7", +x"20", x"E1", x"D8", x"4C", x"51", x"D8", x"20", x"CB", +x"D7", x"F0", x"76", x"20", x"5A", x"D9", x"A9", x"00", +x"38", x"E5", x"A9", x"85", x"A9", x"20", x"F6", x"D7", +x"E6", x"A9", x"F0", x"BA", x"A2", x"FC", x"A9", x"01", +x"A4", x"B2", x"C4", x"AA", x"D0", x"10", x"A4", x"B3", +x"C4", x"AB", x"D0", x"0A", x"A4", x"B4", x"C4", x"AC", +x"D0", x"04", x"A4", x"B5", x"C4", x"AD", x"08", x"2A", +x"90", x"09", x"E8", x"95", x"71", x"F0", x"32", x"10", +x"34", x"A9", x"01", x"28", x"B0", x"0E", x"06", x"B5", +x"26", x"B4", x"26", x"B3", x"26", x"B2", x"B0", x"E6", +x"30", x"CE", x"10", x"E2", x"A8", x"A5", x"B5", x"E5", +x"AD", x"85", x"B5", x"A5", x"B4", x"E5", x"AC", x"85", +x"B4", x"A5", x"B3", x"E5", x"AB", x"85", x"B3", x"A5", +x"B2", x"E5", x"AA", x"85", x"B2", x"98", x"4C", x"8E", +x"D8", x"A9", x"40", x"D0", x"CE", x"0A", x"0A", x"0A", +x"0A", x"0A", x"0A", x"85", x"B8", x"28", x"4C", x"CE", +x"D8", x"A2", x"14", x"4C", x"59", x"C2", x"A5", x"6E", +x"85", x"AA", x"A5", x"6F", x"85", x"AB", x"A5", x"70", +x"85", x"AC", x"A5", x"71", x"85", x"AD", x"4C", x"16", +x"D6", x"85", x"6A", x"84", x"6B", x"A0", x"04", x"B1", +x"6A", x"85", x"AD", x"88", x"B1", x"6A", x"85", x"AC", +x"88", x"B1", x"6A", x"85", x"AB", x"88", x"B1", x"6A", +x"85", x"AE", x"09", x"80", x"85", x"AA", x"88", x"B1", +x"6A", x"85", x"A9", x"84", x"B8", x"60", x"A2", x"A4", +x"2C", x"A2", x"9F", x"A0", x"00", x"F0", x"04", x"A6", +x"91", x"A4", x"92", x"20", x"5A", x"D9", x"86", x"6A", +x"84", x"6B", x"A0", x"04", x"A5", x"AD", x"91", x"6A", +x"88", x"A5", x"AC", x"91", x"6A", x"88", x"A5", x"AB", +x"91", x"6A", x"88", x"A5", x"AE", x"09", x"7F", x"25", +x"AA", x"91", x"6A", x"88", x"A5", x"A9", x"91", x"6A", +x"84", x"B8", x"60", x"A5", x"B6", x"85", x"AE", x"A2", +x"05", x"B5", x"B0", x"95", x"A8", x"CA", x"D0", x"F9", +x"86", x"B8", x"60", x"20", x"5A", x"D9", x"A2", x"06", +x"B5", x"A8", x"95", x"B0", x"CA", x"D0", x"F9", x"86", +x"B8", x"60", x"A5", x"A9", x"F0", x"FB", x"06", x"B8", +x"90", x"F7", x"20", x"AE", x"D6", x"D0", x"F2", x"4C", +x"77", x"D6", x"A5", x"A9", x"F0", x"09", x"A5", x"AE", +x"2A", x"A9", x"FF", x"B0", x"02", x"A9", x"01", x"60", +x"20", x"6A", x"D9", x"85", x"AA", x"A9", x"00", x"85", +x"AB", x"A2", x"88", x"A5", x"AA", x"49", x"FF", x"2A", +x"A9", x"00", x"85", x"AD", x"85", x"AC", x"86", x"A9", +x"85", x"B8", x"85", x"AE", x"4C", x"11", x"D6", x"46", +x"AE", x"60", x"85", x"6C", x"84", x"6D", x"A0", x"00", +x"B1", x"6C", x"C8", x"AA", x"F0", x"C4", x"B1", x"6C", +x"45", x"AE", x"30", x"C2", x"E4", x"A9", x"D0", x"21", +x"B1", x"6C", x"09", x"80", x"C5", x"AA", x"D0", x"19", +x"C8", x"B1", x"6C", x"C5", x"AB", x"D0", x"12", x"C8", +x"B1", x"6C", x"C5", x"AC", x"D0", x"0B", x"C8", x"A9", +x"7F", x"C5", x"B8", x"B1", x"6C", x"E5", x"AD", x"F0", +x"28", x"A5", x"AE", x"90", x"02", x"49", x"FF", x"4C", +x"70", x"D9", x"A5", x"A9", x"F0", x"4A", x"38", x"E9", +x"A0", x"24", x"AE", x"10", x"09", x"AA", x"A9", x"FF", +x"85", x"B0", x"20", x"8C", x"D6", x"8A", x"A2", x"A9", +x"C9", x"F9", x"10", x"06", x"20", x"D8", x"D6", x"84", +x"B0", x"60", x"A8", x"A5", x"AE", x"29", x"80", x"46", +x"AA", x"05", x"AA", x"85", x"AA", x"20", x"EF", x"D6", +x"84", x"B0", x"60", x"A5", x"A9", x"C9", x"A0", x"B0", +x"20", x"20", x"DA", x"D9", x"84", x"B8", x"A5", x"AE", +x"84", x"AE", x"49", x"80", x"2A", x"A9", x"A0", x"85", +x"A9", x"A5", x"AD", x"85", x"06", x"4C", x"11", x"D6", +x"85", x"AA", x"85", x"AB", x"85", x"AC", x"85", x"AD", +x"A8", x"60", x"A0", x"00", x"A2", x"0A", x"94", x"A5", +x"CA", x"10", x"FB", x"90", x"0F", x"C9", x"2D", x"D0", +x"04", x"86", x"AF", x"F0", x"04", x"C9", x"2B", x"D0", +x"05", x"20", x"BF", x"00", x"90", x"5B", x"C9", x"2E", +x"F0", x"2E", x"C9", x"45", x"D0", x"30", x"20", x"BF", +x"00", x"90", x"17", x"C9", x"A5", x"F0", x"0E", x"C9", +x"2D", x"F0", x"0A", x"C9", x"A4", x"F0", x"08", x"C9", +x"2B", x"F0", x"04", x"D0", x"07", x"66", x"A8", x"20", +x"BF", x"00", x"90", x"5C", x"24", x"A8", x"10", x"0E", +x"A9", x"00", x"38", x"E5", x"A6", x"4C", x"88", x"DA", +x"66", x"A7", x"24", x"A7", x"50", x"C3", x"A5", x"A6", +x"38", x"E5", x"A5", x"85", x"A6", x"F0", x"12", x"10", +x"09", x"20", x"3D", x"D8", x"E6", x"A6", x"D0", x"F9", +x"F0", x"07", x"20", x"21", x"D8", x"C6", x"A6", x"D0", +x"F9", x"A5", x"AF", x"30", x"01", x"60", x"4C", x"B8", +x"DC", x"48", x"24", x"A7", x"10", x"02", x"E6", x"A5", +x"20", x"21", x"D8", x"68", x"38", x"E9", x"30", x"20", +x"BD", x"DA", x"4C", x"49", x"DA", x"48", x"20", x"4B", +x"D9", x"68", x"20", x"7B", x"D9", x"A5", x"B6", x"45", +x"AE", x"85", x"B7", x"A6", x"A9", x"4C", x"A9", x"D5", +x"A5", x"A6", x"C9", x"0A", x"90", x"09", x"A9", x"64", +x"24", x"A8", x"30", x"11", x"4C", x"BD", x"D6", x"0A", +x"0A", x"18", x"65", x"A6", x"0A", x"18", x"A0", x"00", +x"71", x"C6", x"38", x"E9", x"30", x"85", x"A6", x"4C", +x"6F", x"DA", x"9B", x"3E", x"BC", x"1F", x"FD", x"9E", +x"6E", x"6B", x"27", x"FD", x"9E", x"6E", x"6B", x"28", +x"00", x"A9", x"9E", x"A0", x"C1", x"20", x"19", x"DB", +x"A5", x"82", x"A6", x"81", x"85", x"AA", x"86", x"AB", +x"A2", x"90", x"38", x"20", x"88", x"D9", x"20", x"1C", +x"DB", x"4C", x"4A", x"C9", x"A0", x"01", x"A9", x"20", +x"24", x"AE", x"10", x"02", x"A9", x"2D", x"99", x"FF", +x"03", x"85", x"AE", x"84", x"B9", x"C8", x"A9", x"30", +x"A6", x"A9", x"D0", x"03", x"4C", x"3F", x"DC", x"A9", +x"00", x"E0", x"80", x"F0", x"02", x"B0", x"09", x"A9", +x"FC", x"A0", x"DA", x"20", x"67", x"D7", x"A9", x"F7", +x"85", x"A5", x"A9", x"F7", x"A0", x"DA", x"20", x"9A", +x"D9", x"F0", x"1E", x"10", x"12", x"A9", x"F2", x"A0", +x"DA", x"20", x"9A", x"D9", x"F0", x"02", x"10", x"0E", +x"20", x"21", x"D8", x"C6", x"A5", x"D0", x"EE", x"20", +x"3D", x"D8", x"E6", x"A5", x"D0", x"DC", x"20", x"88", +x"D5", x"20", x"DA", x"D9", x"A2", x"01", x"A5", x"A5", +x"18", x"69", x"0A", x"30", x"09", x"C9", x"0B", x"B0", +x"06", x"69", x"FF", x"AA", x"A9", x"02", x"38", x"E9", +x"02", x"85", x"A6", x"86", x"A5", x"8A", x"F0", x"02", +x"10", x"13", x"A4", x"B9", x"A9", x"2E", x"C8", x"99", +x"FF", x"03", x"8A", x"F0", x"06", x"A9", x"30", x"C8", +x"99", x"FF", x"03", x"84", x"B9", x"A0", x"00", x"A2", +x"80", x"A5", x"AD", x"18", x"79", x"54", x"DC", x"85", +x"AD", x"A5", x"AC", x"79", x"53", x"DC", x"85", x"AC", +x"A5", x"AB", x"79", x"52", x"DC", x"85", x"AB", x"A5", +x"AA", x"79", x"51", x"DC", x"85", x"AA", x"E8", x"B0", +x"04", x"10", x"DE", x"30", x"02", x"30", x"DA", x"8A", +x"90", x"04", x"49", x"FF", x"69", x"0A", x"69", x"2F", +x"C8", x"C8", x"C8", x"C8", x"84", x"8F", x"A4", x"B9", +x"C8", x"AA", x"29", x"7F", x"99", x"FF", x"03", x"C6", +x"A5", x"D0", x"06", x"A9", x"2E", x"C8", x"99", x"FF", +x"03", x"84", x"B9", x"A4", x"8F", x"8A", x"49", x"FF", +x"29", x"80", x"AA", x"C0", x"24", x"D0", x"AA", x"A4", +x"B9", x"B9", x"FF", x"03", x"88", x"C9", x"30", x"F0", +x"F8", x"C9", x"2E", x"F0", x"01", x"C8", x"A9", x"2B", +x"A6", x"A6", x"F0", x"2E", x"10", x"08", x"A9", x"00", +x"38", x"E5", x"A6", x"AA", x"A9", x"2D", x"99", x"01", +x"04", x"A9", x"45", x"99", x"00", x"04", x"8A", x"A2", +x"2F", x"38", x"E8", x"E9", x"0A", x"B0", x"FB", x"69", +x"3A", x"99", x"03", x"04", x"8A", x"99", x"02", x"04", +x"A9", x"00", x"99", x"04", x"04", x"F0", x"08", x"99", +x"FF", x"03", x"A9", x"00", x"99", x"00", x"04", x"A9", +x"00", x"A0", x"04", x"60", x"80", x"00", x"00", x"00", +x"00", x"FA", x"0A", x"1F", x"00", x"00", x"98", x"96", +x"80", x"FF", x"F0", x"BD", x"C0", x"00", x"01", x"86", +x"A0", x"FF", x"FF", x"D8", x"F0", x"00", x"00", x"03", +x"E8", x"FF", x"FF", x"FF", x"9C", x"00", x"00", x"00", +x"0A", x"FF", x"FF", x"FF", x"FF", x"20", x"4B", x"D9", +x"A9", x"4C", x"A0", x"DC", x"20", x"E1", x"D8", x"F0", +x"70", x"A5", x"B1", x"D0", x"03", x"4C", x"38", x"D6", +x"A2", x"96", x"A0", x"00", x"20", x"13", x"D9", x"A5", +x"B6", x"10", x"0F", x"20", x"0B", x"DA", x"A9", x"96", +x"A0", x"00", x"20", x"9A", x"D9", x"D0", x"03", x"98", +x"A4", x"06", x"20", x"3D", x"D9", x"98", x"48", x"20", +x"29", x"D7", x"A9", x"96", x"A0", x"00", x"20", x"67", +x"D7", x"20", x"F1", x"DC", x"68", x"4A", x"90", x"0A", +x"A5", x"A9", x"F0", x"06", x"A5", x"AE", x"49", x"FF", +x"85", x"AE", x"60", x"81", x"38", x"AA", x"3B", x"29", +x"07", x"71", x"34", x"58", x"3E", x"56", x"74", x"16", +x"7E", x"B3", x"1B", x"77", x"2F", x"EE", x"E3", x"85", +x"7A", x"1D", x"84", x"1C", x"2A", x"7C", x"63", x"59", +x"58", x"0A", x"7E", x"75", x"FD", x"E7", x"C6", x"80", +x"31", x"72", x"18", x"10", x"81", x"00", x"00", x"00", +x"00", x"A9", x"C3", x"A0", x"DC", x"20", x"67", x"D7", +x"A5", x"B8", x"69", x"50", x"90", x"03", x"20", x"62", +x"D9", x"85", x"9E", x"20", x"4E", x"D9", x"A5", x"A9", +x"C9", x"88", x"90", x"03", x"20", x"13", x"D8", x"20", +x"0B", x"DA", x"A5", x"06", x"18", x"69", x"81", x"F0", +x"F3", x"38", x"E9", x"01", x"48", x"A2", x"05", x"B5", +x"B1", x"B4", x"A9", x"95", x"A9", x"94", x"B1", x"CA", +x"10", x"F5", x"A5", x"9E", x"85", x"B8", x"20", x"92", +x"D5", x"20", x"B8", x"DC", x"A9", x"C8", x"A0", x"DC", +x"20", x"5A", x"DD", x"A9", x"00", x"85", x"B7", x"68", +x"20", x"F8", x"D7", x"60", x"85", x"B9", x"84", x"BA", +x"20", x"09", x"D9", x"A9", x"9F", x"20", x"67", x"D7", +x"20", x"5E", x"DD", x"A9", x"9F", x"A0", x"00", x"4C", +x"67", x"D7", x"85", x"B9", x"84", x"BA", x"20", x"06", +x"D9", x"B1", x"B9", x"85", x"AF", x"A4", x"B9", x"C8", +x"98", x"D0", x"02", x"E6", x"BA", x"85", x"B9", x"A4", +x"BA", x"20", x"67", x"D7", x"A5", x"B9", x"A4", x"BA", +x"18", x"69", x"05", x"90", x"01", x"C8", x"85", x"B9", +x"84", x"BA", x"20", x"A6", x"D5", x"A9", x"A4", x"A0", +x"00", x"C6", x"AF", x"D0", x"E4", x"60", x"98", x"35", +x"44", x"7A", x"68", x"28", x"B1", x"46", x"20", x"6A", +x"D9", x"AA", x"30", x"18", x"A9", x"D7", x"A0", x"00", +x"20", x"E1", x"D8", x"8A", x"F0", x"E7", x"A9", x"8E", +x"A0", x"DD", x"20", x"67", x"D7", x"A9", x"92", x"A0", +x"DD", x"20", x"A6", x"D5", x"A6", x"AD", x"A5", x"AA", +x"85", x"AD", x"86", x"AA", x"A9", x"00", x"85", x"AE", +x"A5", x"A9", x"85", x"B8", x"A9", x"80", x"85", x"A9", +x"20", x"16", x"D6", x"A2", x"D7", x"A0", x"00", x"4C", +x"13", x"D9", x"A9", x"4E", x"A0", x"DE", x"20", x"A6", +x"D5", x"20", x"4B", x"D9", x"A9", x"53", x"A0", x"DE", +x"A6", x"B6", x"20", x"46", x"D8", x"20", x"4B", x"D9", +x"20", x"0B", x"DA", x"A9", x"00", x"85", x"B7", x"20", +x"92", x"D5", x"A9", x"58", x"A0", x"DE", x"20", x"8F", +x"D5", x"A5", x"AE", x"48", x"10", x"0D", x"20", x"88", +x"D5", x"A5", x"AE", x"30", x"09", x"A5", x"0F", x"49", +x"FF", x"85", x"0F", x"20", x"B8", x"DC", x"A9", x"58", +x"A0", x"DE", x"20", x"A6", x"D5", x"68", x"10", x"03", +x"20", x"B8", x"DC", x"A9", x"5D", x"A0", x"DE", x"4C", +x"44", x"DD", x"20", x"09", x"D9", x"A9", x"00", x"85", +x"0F", x"20", x"D9", x"DD", x"A2", x"96", x"A0", x"00", +x"20", x"CF", x"DD", x"A9", x"9F", x"A0", x"00", x"20", +x"E1", x"D8", x"A9", x"00", x"85", x"AE", x"A5", x"0F", +x"20", x"4A", x"DE", x"A9", x"96", x"A0", x"00", x"4C", +x"4E", x"D8", x"48", x"4C", x"0B", x"DE", x"81", x"49", +x"0F", x"DA", x"A2", x"83", x"49", x"0F", x"DA", x"A2", +x"7F", x"00", x"00", x"00", x"00", x"05", x"84", x"E6", +x"1A", x"2D", x"1B", x"86", x"28", x"07", x"FB", x"F8", +x"87", x"99", x"68", x"89", x"01", x"87", x"23", x"35", +x"DF", x"E1", x"86", x"A5", x"5D", x"E7", x"28", x"83", +x"49", x"0F", x"DA", x"A2", x"A1", x"54", x"46", x"8F", +x"13", x"8F", x"52", x"43", x"89", x"CD", x"E6", x"C6", +x"D0", x"02", x"E6", x"C7", x"AD", x"60", x"EA", x"C9", +x"3A", x"B0", x"0A", x"C9", x"20", x"F0", x"EF", x"38", +x"E9", x"30", x"38", x"E9", x"D0", x"60", x"80", x"4F", +x"C7", x"52", x"58", x"A2", x"FF", x"86", x"82", x"A2", +x"FE", x"9A", x"A9", x"A3", x"A0", x"DE", x"85", x"01", +x"84", x"02", x"A9", x"4C", x"85", x"00", x"85", x"9C", +x"85", x"BB", x"85", x"03", x"20", x"43", x"DF", x"EA", +x"A9", x"87", x"A0", x"CF", x"85", x"04", x"84", x"05", +x"A9", x"20", x"85", x"12", x"A9", x"1E", x"85", x"13", +x"A2", x"1C", x"BD", x"85", x"DE", x"95", x"BE", x"CA", +x"D0", x"F8", x"A9", x"03", x"85", x"9B", x"8A", x"85", +x"B0", x"85", x"60", x"48", x"85", x"10", x"20", x"00", +x"C9", x"A2", x"61", x"86", x"5E", x"A9", x"AF", x"A0", +x"DF", x"20", x"4A", x"C9", x"20", x"E7", x"C9", x"86", +x"C6", x"84", x"C7", x"20", x"BF", x"00", x"A8", x"D0", +x"2B", x"A9", x"11", x"A0", x"04", x"85", x"73", x"84", +x"74", x"85", x"14", x"84", x"15", x"A0", x"00", x"E6", +x"14", x"D0", x"08", x"E6", x"15", x"A5", x"15", x"C5", +x"BC", x"F0", x"1D", x"A9", x"55", x"91", x"14", x"D1", +x"14", x"D0", x"15", x"0A", x"91", x"14", x"D1", x"14", +x"D0", x"0E", x"F0", x"E3", x"20", x"C5", x"00", x"20", +x"DA", x"C7", x"A8", x"F0", x"03", x"4C", x"D0", x"CC", +x"A5", x"14", x"A4", x"15", x"85", x"7F", x"84", x"80", +x"4C", x"70", x"DF", x"A9", x"60", x"85", x"BC", x"A2", +x"42", x"A0", x"40", x"BD", x"00", x"B0", x"5D", x"00", +x"B0", x"CA", x"CA", x"CA", x"D0", x"F8", x"C9", x"4C", +x"D0", x"02", x"84", x"BC", x"60", x"C9", x"03", x"D0", +x"FB", x"A9", x"00", x"85", x"C7", x"4C", x"58", x"C6", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"A2", x"11", x"A0", x"04", x"86", x"73", x"84", x"74", +x"A0", x"00", x"98", x"91", x"73", x"E6", x"73", x"D0", +x"02", x"E6", x"74", x"20", x"67", x"C4", x"A5", x"73", +x"A4", x"74", x"20", x"2A", x"C2", x"20", x"00", x"C9", +x"A5", x"7F", x"38", x"E5", x"73", x"AA", x"A5", x"80", +x"E5", x"74", x"20", x"0C", x"DB", x"A9", x"EB", x"A0", +x"DF", x"20", x"4A", x"C9", x"A9", x"00", x"A0", x"C9", +x"85", x"01", x"84", x"02", x"4C", x"7F", x"C2", x"0C", +x"20", x"20", x"3E", x"45", x"41", x"47", x"4C", x"45", +x"3C", x"20", x"45", x"58", x"54", x"45", x"4E", x"44", +x"45", x"44", x"20", x"42", x"41", x"53", x"49", x"43", +x"0D", x"0A", x"0A", x"20", x"20", x"20", x"20", x"20", +x"56", x"20", x"31", x"2E", x"30", x"20", x"28", x"43", +x"29", x"20", x"38", x"35", x"0D", x"0A", x"0A", x"0A", +x"4D", x"45", x"4D", x"20", x"53", x"49", x"5A", x"45", +x"20", x"20", x"00", x"20", x"42", x"59", x"54", x"45", +x"53", x"20", x"46", x"52", x"45", x"45", x"0D", x"0A", +x"0A", x"00", x"20", x"C5", x"00", x"4C", x"9D", x"C8" + ); +begin + process(clk) + begin + if rising_edge(clk) then + data <= romData(conv_integer(addr)); + end if; + end process; +end architecture; + diff --git a/ORAO_MiST/rtl/rom/rom_crt102.vhd b/ORAO_MiST/rtl/rom/rom_crt102.vhd new file mode 100644 index 00000000..a0f5243a --- /dev/null +++ b/ORAO_MiST/rtl/rom/rom_crt102.vhd @@ -0,0 +1,1051 @@ +library IEEE; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity rom_crt 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 Behavioral of rom_crt is + type romDef is array(0 to 8191) of std_logic_vector(7 downto 0); + constant romData: romDef := ( +x"00", x"00", x"00", x"00", x"00", x"00", x"00", x"00", +x"08", x"08", x"08", x"08", x"08", x"00", x"08", x"00", +x"14", x"14", x"00", x"00", x"00", x"00", x"00", x"00", +x"28", x"28", x"7C", x"28", x"7C", x"28", x"28", x"00", +x"10", x"78", x"14", x"38", x"50", x"3C", x"10", x"00", +x"46", x"26", x"10", x"08", x"64", x"62", x"00", x"00", +x"08", x"14", x"14", x"0C", x"52", x"22", x"5C", x"00", +x"20", x"10", x"08", x"00", x"00", x"00", x"00", x"00", +x"20", x"10", x"08", x"08", x"08", x"10", x"20", x"00", +x"04", x"08", x"10", x"10", x"10", x"08", x"04", x"00", +x"00", x"10", x"54", x"38", x"54", x"10", x"00", x"00", +x"00", x"10", x"10", x"7C", x"10", x"10", x"00", x"00", +x"00", x"00", x"00", x"00", x"18", x"18", x"04", x"00", +x"00", x"00", x"00", x"7C", x"00", x"00", x"00", x"00", +x"00", x"00", x"00", x"00", x"18", x"18", x"00", x"00", +x"00", x"40", x"20", x"10", x"08", x"04", x"00", x"00", +x"38", x"44", x"64", x"54", x"4C", x"44", x"38", x"00", +x"10", x"18", x"10", x"10", x"10", x"10", x"38", x"00", +x"38", x"44", x"40", x"20", x"18", x"04", x"7C", x"00", +x"7C", x"20", x"10", x"20", x"40", x"44", x"38", x"00", +x"20", x"30", x"28", x"24", x"7C", x"20", x"20", x"00", +x"7C", x"04", x"3C", x"40", x"40", x"44", x"38", x"00", +x"30", x"08", x"04", x"3C", x"44", x"44", x"38", x"00", +x"7C", x"40", x"20", x"10", x"08", x"08", x"08", x"00", +x"38", x"44", x"44", x"38", x"44", x"44", x"38", x"00", +x"38", x"44", x"44", x"78", x"40", x"20", x"18", x"00", +x"00", x"18", x"18", x"00", x"18", x"18", x"00", x"00", +x"00", x"18", x"18", x"00", x"18", x"18", x"04", x"00", +x"20", x"10", x"08", x"04", x"08", x"10", x"20", x"00", +x"00", x"00", x"7C", x"00", x"7C", x"00", x"00", x"00", +x"04", x"08", x"10", x"20", x"10", x"08", x"04", x"00", +x"1C", x"22", x"20", x"18", x"08", x"00", x"08", x"00", +x"38", x"44", x"74", x"54", x"74", x"04", x"78", x"00", +x"38", x"44", x"44", x"7C", x"44", x"44", x"44", x"00", +x"3C", x"48", x"48", x"38", x"48", x"48", x"3C", x"00", +x"38", x"44", x"04", x"04", x"04", x"44", x"38", x"00", +x"3C", x"48", x"48", x"48", x"48", x"48", x"3C", x"00", +x"7C", x"04", x"04", x"1C", x"04", x"04", x"7C", x"00", +x"7C", x"04", x"04", x"1C", x"04", x"04", x"04", x"00", +x"38", x"44", x"04", x"04", x"74", x"44", x"78", x"00", +x"44", x"44", x"44", x"7C", x"44", x"44", x"44", x"00", +x"38", x"10", x"10", x"10", x"10", x"10", x"38", x"00", +x"70", x"20", x"20", x"20", x"20", x"24", x"18", x"00", +x"44", x"24", x"14", x"0C", x"14", x"24", x"44", x"00", +x"04", x"04", x"04", x"04", x"04", x"04", x"7C", x"00", +x"44", x"6C", x"54", x"54", x"44", x"44", x"44", x"00", +x"44", x"44", x"4C", x"54", x"64", x"44", x"44", x"00", +x"38", x"44", x"44", x"44", x"44", x"44", x"38", x"00", +x"3C", x"44", x"44", x"3C", x"04", x"04", x"04", x"00", +x"38", x"44", x"44", x"44", x"54", x"24", x"58", x"00", +x"3C", x"44", x"44", x"3C", x"14", x"24", x"44", x"00", +x"38", x"44", x"08", x"10", x"20", x"44", x"38", x"00", +x"7C", x"10", x"10", x"10", x"10", x"10", x"10", x"00", +x"44", x"44", x"44", x"44", x"44", x"44", x"38", x"00", +x"44", x"44", x"44", x"44", x"44", x"28", x"10", x"00", +x"44", x"44", x"44", x"54", x"54", x"54", x"28", x"00", +x"44", x"44", x"28", x"10", x"28", x"44", x"44", x"00", +x"44", x"44", x"44", x"28", x"10", x"10", x"10", x"00", +x"7C", x"40", x"20", x"10", x"08", x"04", x"7C", x"00", +x"28", x"38", x"44", x"04", x"04", x"44", x"38", x"00", +x"20", x"38", x"44", x"04", x"04", x"44", x"38", x"00", +x"3C", x"48", x"48", x"5C", x"48", x"48", x"3C", x"00", +x"28", x"38", x"44", x"08", x"30", x"44", x"38", x"00", +x"28", x"7C", x"40", x"20", x"10", x"08", x"7C", x"00", +x"10", x"28", x"44", x"00", x"00", x"00", x"00", x"00", +x"00", x"18", x"20", x"38", x"24", x"38", x"00", x"00", +x"04", x"04", x"1C", x"24", x"24", x"1C", x"00", x"00", +x"00", x"38", x"04", x"04", x"04", x"38", x"00", x"00", +x"20", x"20", x"38", x"24", x"24", x"38", x"00", x"00", +x"00", x"18", x"24", x"1C", x"04", x"18", x"00", x"00", +x"10", x"28", x"08", x"1C", x"08", x"08", x"08", x"00", +x"00", x"38", x"24", x"24", x"38", x"20", x"18", x"00", +x"04", x"04", x"1C", x"24", x"24", x"24", x"00", x"00", +x"10", x"00", x"18", x"10", x"10", x"38", x"00", x"00", +x"10", x"00", x"18", x"10", x"10", x"14", x"08", x"00", +x"04", x"04", x"14", x"0C", x"14", x"24", x"00", x"00", +x"18", x"10", x"10", x"10", x"10", x"38", x"00", x"00", +x"00", x"2C", x"54", x"54", x"54", x"54", x"00", x"00", +x"00", x"1C", x"24", x"24", x"24", x"24", x"00", x"00", +x"00", x"18", x"24", x"24", x"24", x"18", x"00", x"00", +x"00", x"1C", x"24", x"24", x"1C", x"04", x"04", x"00", +x"00", x"1C", x"12", x"12", x"1C", x"10", x"78", x"00", +x"00", x"34", x"0C", x"04", x"04", x"04", x"00", x"00", +x"00", x"38", x"04", x"18", x"20", x"1C", x"00", x"00", +x"10", x"38", x"10", x"10", x"10", x"20", x"00", x"00", +x"00", x"24", x"24", x"24", x"24", x"38", x"00", x"00", +x"00", x"44", x"44", x"44", x"28", x"10", x"00", x"00", +x"00", x"44", x"44", x"54", x"54", x"28", x"00", x"00", +x"00", x"44", x"28", x"10", x"28", x"44", x"00", x"00", +x"00", x"24", x"24", x"24", x"38", x"20", x"18", x"00", +x"00", x"3C", x"20", x"10", x"08", x"3C", x"00", x"00", +x"38", x"00", x"38", x"04", x"04", x"38", x"00", x"00", +x"20", x"00", x"38", x"04", x"04", x"38", x"00", x"00", +x"20", x"70", x"20", x"38", x"24", x"38", x"00", x"00", +x"28", x"38", x"04", x"18", x"20", x"1C", x"00", x"00", +x"38", x"00", x"3C", x"10", x"08", x"3C", x"00", x"00", +x"09", x"0A", x"0B", x"08", x"14", x"13", x"12", x"11", +x"36", x"74", x"7A", x"72", x"37", x"75", x"69", x"6F", +x"31", x"77", x"71", x"65", x"6D", x"6B", x"6A", x"6C", +x"79", x"73", x"61", x"64", x"6E", x"67", x"68", x"66", +x"3A", x"7F", x"7C", x"7B", x"3B", x"7E", x"7D", x"70", +x"00", x"0D", x"00", x"20", x"34", x"35", x"39", x"38", +x"33", x"32", x"2E", x"2C", x"63", x"78", x"76", x"62", +x"60", x"2F", x"30", x"2D", x"87", x"FC", x"87", x"FA", +x"87", x"F6", x"87", x"EE", x"87", x"DE", x"87", x"BE", +x"87", x"7E", x"86", x"FE", x"85", x"FE", x"83", x"FE", +x"85", x"FC", x"8A", x"48", x"98", x"48", x"A5", x"FC", +x"A8", x"2A", x"2A", x"2A", x"2A", x"29", x"03", x"AA", +x"BD", x"00", x"02", x"D0", x"05", x"BD", x"04", x"02", +x"F0", x"24", x"85", x"F1", x"98", x"0A", x"0A", x"0A", +x"85", x"F0", x"A0", x"07", x"B1", x"F0", x"84", x"FA", +x"A4", x"E9", x"24", x"FC", x"10", x"02", x"49", x"FF", +x"91", x"E6", x"A5", x"E6", x"38", x"E9", x"20", x"85", +x"E6", x"A4", x"FA", x"88", x"10", x"E6", x"68", x"A8", +x"68", x"AA", x"A5", x"FC", x"60", x"A6", x"EA", x"86", +x"E8", x"A4", x"EC", x"84", x"E9", x"A9", x"E0", x"85", +x"E6", x"A5", x"E8", x"20", x"9E", x"EE", x"60", x"EA", +x"EA", x"EA", x"A6", x"EB", x"18", x"90", x"05", x"20", +x"95", x"E3", x"A4", x"EC", x"20", x"AD", x"E4", x"C4", +x"ED", x"C8", x"90", x"F8", x"E4", x"EB", x"B0", x"15", +x"E8", x"E6", x"E7", x"90", x"ED", x"C6", x"E9", x"C4", +x"EC", x"D0", x"0D", x"A4", x"ED", x"84", x"E9", x"E4", +x"EA", x"F0", x"05", x"C6", x"E8", x"20", x"9D", x"E3", +x"68", x"A8", x"68", x"AA", x"A5", x"FC", x"60", x"85", +x"FC", x"8A", x"48", x"98", x"48", x"A5", x"FC", x"A6", +x"E8", x"A4", x"E9", x"C9", x"20", x"B0", x"39", x"2C", +x"08", x"02", x"30", x"34", x"4C", x"B0", x"EE", x"EA", +x"C9", x"0C", x"F0", x"B3", x"C9", x"06", x"F0", x"B4", +x"C9", x"08", x"F0", x"C1", x"C9", x"0B", x"F0", x"C7", +x"C9", x"09", x"F0", x"1F", x"C9", x"0A", x"F0", x"25", +x"C9", x"0D", x"F0", x"6A", x"C9", x"04", x"D0", x"06", +x"20", x"95", x"E3", x"4C", x"D8", x"E3", x"C9", x"07", +x"D0", x"B6", x"20", x"F4", x"E4", x"4C", x"D8", x"E3", +x"20", x"50", x"E3", x"E6", x"E9", x"C4", x"ED", x"90", +x"A7", x"A4", x"EC", x"84", x"E9", x"E6", x"E8", x"E4", +x"EB", x"90", x"9A", x"C6", x"E8", x"A5", x"EA", x"20", +x"A3", x"E3", x"A5", x"E6", x"18", x"90", x"13", x"E6", +x"E7", x"A4", x"EC", x"B1", x"E6", x"91", x"EE", x"C4", +x"ED", x"C8", x"90", x"F7", x"A5", x"E6", x"E9", x"20", +x"85", x"E6", x"85", x"EE", x"B0", x"EB", x"A5", x"E7", +x"85", x"EF", x"38", x"E9", x"60", x"C5", x"EB", x"90", +x"DE", x"4C", x"B2", x"E3", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"20", x"0F", +x"E6", x"F0", x"1C", x"A0", x"09", x"88", x"F0", x"17", +x"A2", x"FF", x"20", x"E3", x"E4", x"20", x"0F", x"E6", +x"D0", x"F3", x"A4", x"E9", x"20", x"C2", x"E4", x"20", +x"0F", x"E6", x"F0", x"FB", x"20", x"C2", x"E4", x"A6", +x"E8", x"AD", x"09", x"02", x"D0", x"8B", x"A4", x"EC", +x"84", x"E9", x"4C", x"D8", x"E3", x"86", x"FB", x"A2", +x"08", x"A9", x"00", x"91", x"E6", x"A5", x"E6", x"38", +x"E9", x"20", x"85", x"E6", x"CA", x"D0", x"F2", x"A6", +x"FB", x"60", x"86", x"FB", x"A2", x"08", x"B1", x"E6", +x"49", x"FF", x"91", x"E6", x"A5", x"E6", x"38", x"E9", +x"20", x"85", x"E6", x"CA", x"D0", x"F0", x"A6", x"FB", +x"60", x"48", x"98", x"A0", x"BB", x"88", x"D0", x"FD", +x"A8", x"68", x"60", x"20", x"D9", x"E4", x"CA", x"D0", +x"FA", x"60", x"8E", x"00", x"88", x"20", x"D9", x"E4", +x"CA", x"D0", x"F7", x"60", x"48", x"8A", x"A2", x"70", +x"20", x"EA", x"E4", x"AA", x"68", x"60", x"FF", x"FF", +x"8A", x"48", x"98", x"48", x"A4", x"E9", x"B1", x"E6", +x"48", x"A4", x"E9", x"B1", x"E6", x"49", x"FF", x"91", +x"E6", x"A0", x"00", x"88", x"F0", x"F3", x"20", x"B0", +x"E5", x"90", x"F8", x"85", x"FC", x"F0", x"F4", x"A2", +x"0A", x"20", x"E3", x"E4", x"20", x"B0", x"E5", x"90", +x"EA", x"C5", x"FC", x"D0", x"E6", x"A4", x"E9", x"68", +x"91", x"E6", x"AD", x"0B", x"02", x"F0", x"05", x"A2", +x"0F", x"20", x"EA", x"E4", x"A2", x"04", x"20", x"E3", +x"E4", x"20", x"B0", x"E5", x"90", x"12", x"C5", x"FC", +x"D0", x"0E", x"AE", x"0C", x"02", x"F0", x"ED", x"CE", +x"0C", x"02", x"D0", x"E8", x"A2", x"20", x"D0", x"07", +x"AE", x"0C", x"02", x"F0", x"05", x"A2", x"FF", x"8E", +x"0C", x"02", x"AD", x"FB", x"87", x"29", x"20", x"0A", +x"85", x"FA", x"AD", x"FD", x"87", x"29", x"20", x"05", +x"FA", x"0A", x"85", x"FA", x"A5", x"FC", x"C9", x"21", +x"90", x"2D", x"C9", x"60", x"B0", x"0F", x"2C", x"0E", +x"02", x"10", x"02", x"09", x"80", x"A4", x"FA", x"30", +x"1E", x"49", x"10", x"D0", x"1A", x"F0", x"05", x"2C", +x"0D", x"02", x"10", x"04", x"A4", x"FA", x"30", x"02", +x"49", x"20", x"2C", x"0E", x"02", x"10", x"02", x"09", +x"80", x"24", x"FA", x"70", x"02", x"29", x"1F", x"85", +x"FC", x"68", x"A8", x"68", x"AA", x"A5", x"FC", x"60", +x"8A", x"48", x"98", x"48", x"A2", x"14", x"CA", x"CA", +x"30", x"2D", x"BD", x"3C", x"E3", x"85", x"F1", x"BD", +x"3D", x"E3", x"85", x"F0", x"20", x"F9", x"E5", x"90", +x"ED", x"C0", x"00", x"D0", x"21", x"0A", x"B0", x"09", +x"C8", x"0A", x"B0", x"05", x"C8", x"0A", x"B0", x"01", +x"C8", x"8A", x"0A", x"84", x"FA", x"18", x"65", x"FA", +x"AA", x"BD", x"00", x"E3", x"85", x"FA", x"38", x"68", +x"A8", x"68", x"AA", x"A5", x"FA", x"60", x"29", x"10", +x"D0", x"01", x"88", x"8A", x"18", x"69", x"28", x"D0", +x"E2", x"38", x"A0", x"00", x"B1", x"F0", x"09", x"0F", +x"49", x"FF", x"D0", x"0A", x"C8", x"B1", x"F0", x"09", +x"CF", x"49", x"FF", x"D0", x"01", x"18", x"60", x"AD", +x"00", x"80", x"09", x"0F", x"49", x"FF", x"D0", x"07", +x"AD", x"01", x"80", x"09", x"CF", x"49", x"FF", x"60", +x"20", x"33", x"E6", x"C9", x"57", x"D0", x"03", x"4C", +x"74", x"C2", x"C9", x"43", x"D0", x"03", x"4C", x"11", +x"DD", x"60", x"E8", x"BD", x"80", x"02", x"C9", x"20", +x"F0", x"F8", x"60", x"85", x"F3", x"84", x"F2", x"98", +x"48", x"A0", x"00", x"B1", x"F2", x"C9", x"04", x"F0", +x"0B", x"20", x"F1", x"FF", x"E6", x"F2", x"D0", x"F3", +x"E6", x"F3", x"D0", x"EF", x"68", x"A8", x"60", x"A2", +x"00", x"8A", x"F0", x"01", x"CA", x"20", x"EE", x"FF", +x"9D", x"80", x"02", x"C9", x"0D", x"F0", x"1B", x"C9", +x"08", x"F0", x"EE", x"C9", x"18", x"F0", x"0D", x"C9", +x"20", x"90", x"EA", x"E8", x"10", x"E7", x"20", x"F4", +x"E4", x"38", x"B0", x"E0", x"A9", x"0D", x"A2", x"00", +x"F0", x"DE", x"60", x"FF", x"0D", x"0A", x"00", x"00", +x"00", x"00", x"2A", x"04", x"E0", x"2F", x"00", x"00", +x"00", x"00", x"E0", x"60", x"00", x"00", x"00", x"1F", +x"00", x"1F", x"E0", x"20", x"00", x"00", x"00", x"00", +x"00", x"E0", x"E1", x"E2", x"00", x"00", x"00", x"00", +x"FF", x"00", x"00", x"00", x"00", x"FF", x"FD", x"2A", +x"FF", x"FF", x"1C", x"E7", x"62", x"E7", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"20", x"E6", x"FD", x"E8", x"06", x"E9", x"0E", x"E9", +x"D0", x"EA", x"09", x"EB", x"48", x"EB", x"6A", x"EB", +x"AB", x"EB", x"80", x"EC", x"F6", x"EE", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"42", x"4A", x"55", x"45", x"43", x"51", x"46", x"4D", +x"41", x"58", x"50", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"20", x"00", x"E5", x"C9", +x"11", x"90", x"09", x"C9", x"14", x"B0", x"05", x"20", +x"34", x"E7", x"A9", x"00", x"2C", x"0F", x"02", x"30", +x"30", x"4C", x"F1", x"FF", x"C9", x"12", x"90", x"21", +x"F0", x"16", x"C9", x"13", x"B0", x"09", x"AD", x"0B", +x"02", x"49", x"FF", x"8D", x"0B", x"02", x"60", x"AD", +x"0E", x"02", x"49", x"FF", x"8D", x"0E", x"02", x"60", +x"AD", x"10", x"02", x"49", x"FF", x"8D", x"10", x"02", +x"60", x"AD", x"0D", x"02", x"49", x"FF", x"8D", x"0D", +x"02", x"60", x"20", x"DF", x"E3", x"2C", x"10", x"02", +x"10", x"F7", x"4C", x"E9", x"EE", x"EA", x"EA", x"BA", +x"BD", x"03", x"01", x"A2", x"09", x"18", x"2A", x"6A", +x"B0", x"05", x"8D", x"00", x"98", x"90", x"07", x"29", +x"FF", x"30", x"03", x"8D", x"00", x"90", x"AC", x"13", +x"02", x"20", x"B8", x"E7", x"CA", x"30", x"06", x"D0", +x"E6", x"09", x"01", x"D0", x"E2", x"68", x"A8", x"68", +x"AA", x"68", x"60", x"FF", x"FF", x"FF", x"FF", x"A0", +x"00", x"8C", x"00", x"98", x"8C", x"00", x"90", x"2C", +x"FF", x"87", x"10", x"03", x"C8", x"D0", x"F8", x"88", +x"84", x"F4", x"60", x"AE", x"2A", x"0A", x"04", x"EA", +x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", x"88", x"D0", +x"F6", x"60", x"FF", x"48", x"10", x"05", x"38", x"90", +x"02", x"49", x"80", x"0A", x"D0", x"F9", x"68", x"60", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"48", x"A9", x"20", x"20", +x"F1", x"FF", x"68", x"60", x"A2", x"03", x"20", x"DC", +x"E7", x"CA", x"D0", x"FA", x"60", x"C9", x"0A", x"90", +x"02", x"69", x"06", x"69", x"30", x"60", x"A9", x"0D", +x"20", x"F1", x"FF", x"A9", x"0A", x"4C", x"F1", x"FF", +x"20", x"DC", x"E7", x"48", x"4A", x"4A", x"4A", x"4A", +x"20", x"ED", x"E7", x"20", x"F1", x"FF", x"68", x"29", +x"0F", x"20", x"ED", x"E7", x"4C", x"F1", x"FF", x"20", +x"DC", x"E7", x"A5", x"FF", x"20", x"03", x"E8", x"A5", +x"FE", x"4C", x"03", x"E8", x"20", x"33", x"E6", x"BD", +x"80", x"02", x"E8", x"C9", x"30", x"90", x"0F", x"E9", +x"30", x"C9", x"0A", x"90", x"0A", x"C9", x"11", x"90", +x"05", x"E9", x"07", x"C9", x"10", x"60", x"38", x"60", +x"20", x"27", x"E8", x"90", x"06", x"60", x"20", x"24", +x"E8", x"B0", x"0F", x"0A", x"0A", x"0A", x"0A", x"85", +x"FC", x"20", x"27", x"E8", x"B0", x"04", x"05", x"FC", +x"85", x"FC", x"60", x"20", x"46", x"E8", x"B0", x"07", +x"85", x"F7", x"20", x"40", x"E8", x"85", x"F6", x"60", +x"20", x"7D", x"E8", x"B0", x"1D", x"20", x"92", x"E8", +x"B0", x"18", x"4C", x"5B", x"E8", x"20", x"7D", x"E8", +x"B0", x"10", x"4C", x"5B", x"E8", x"20", x"5B", x"E8", +x"B0", x"08", x"A5", x"F6", x"85", x"FE", x"A5", x"F7", +x"85", x"FF", x"60", x"E6", x"FE", x"D0", x"02", x"E6", +x"FF", x"60", x"20", x"5B", x"E8", x"B0", x"08", x"A5", +x"F6", x"85", x"F4", x"A5", x"F7", x"85", x"F5", x"60", +x"E6", x"F4", x"D0", x"02", x"E6", x"F5", x"60", x"18", +x"A5", x"FE", x"65", x"F6", x"85", x"FE", x"A5", x"FF", +x"65", x"F7", x"85", x"FF", x"60", x"38", x"A5", x"FE", +x"E5", x"F4", x"85", x"FE", x"A5", x"FF", x"E5", x"F5", +x"85", x"FF", x"60", x"38", x"A5", x"F6", x"E5", x"F4", +x"A5", x"F7", x"E5", x"F5", x"60", x"38", x"A5", x"FE", +x"E5", x"F4", x"A5", x"FF", x"E5", x"F5", x"60", x"18", +x"A5", x"F6", x"E9", x"00", x"85", x"F6", x"A5", x"F7", +x"E9", x"00", x"85", x"F7", x"60", x"18", x"A5", x"FE", +x"E9", x"00", x"85", x"FE", x"A5", x"FF", x"E9", x"00", +x"85", x"FF", x"60", x"38", x"A5", x"FE", x"E5", x"F6", +x"A5", x"FF", x"E5", x"F7", x"60", x"20", x"5B", x"E8", +x"B0", x"2C", x"68", x"68", x"90", x"05", x"20", x"5B", +x"E8", x"B0", x"23", x"6C", x"F6", x"00", x"20", x"75", +x"E8", x"B0", x"1B", x"A0", x"00", x"20", x"F6", x"E7", +x"20", x"17", x"E8", x"A2", x"09", x"CA", x"F0", x"F5", +x"B1", x"FE", x"20", x"00", x"E8", x"20", x"F3", x"E8", +x"20", x"8B", x"E8", x"90", x"F0", x"18", x"60", x"FF", +x"00", x"90", x"6D", x"65", x"69", x"7D", x"79", x"61", +x"71", x"75", x"D0", x"2D", x"25", x"29", x"3D", x"39", +x"21", x"31", x"35", x"30", x"0A", x"0E", x"06", x"1E", +x"16", x"08", x"90", x"08", x"B0", x"88", x"F0", x"48", +x"2C", x"24", x"C8", x"30", x"C8", x"D0", x"28", x"10", +x"28", x"00", x"A8", x"50", x"A8", x"70", x"D8", x"18", +x"D8", x"D8", x"D8", x"58", x"D8", x"B8", x"D8", x"CD", +x"C5", x"C9", x"DD", x"D9", x"C1", x"D1", x"D5", x"38", +x"EC", x"E4", x"E0", x"38", x"CC", x"C4", x"C0", x"84", +x"CE", x"C6", x"DE", x"D6", x"84", x"CA", x"84", x"88", +x"D4", x"4D", x"45", x"49", x"5D", x"59", x"41", x"51", +x"55", x"D2", x"EE", x"E6", x"FE", x"F6", x"D2", x"E8", +x"D2", x"C8", x"CA", x"4C", x"6C", x"2A", x"20", x"86", +x"AD", x"A5", x"A9", x"BD", x"B9", x"A1", x"B1", x"B5", +x"86", x"AE", x"A6", x"A2", x"BE", x"B6", x"86", x"AC", +x"A4", x"A0", x"BC", x"B4", x"26", x"4A", x"4E", x"46", +x"5E", x"56", x"CE", x"EA", x"3E", x"0D", x"05", x"09", +x"1D", x"19", x"01", x"11", x"15", x"41", x"48", x"41", +x"08", x"C1", x"68", x"C1", x"28", x"C9", x"2A", x"2E", +x"26", x"3E", x"36", x"C9", x"6A", x"6E", x"66", x"7E", +x"76", x"A9", x"40", x"A9", x"60", x"19", x"ED", x"E5", +x"E9", x"FD", x"F9", x"E1", x"F1", x"F5", x"99", x"38", +x"99", x"F8", x"99", x"78", x"B9", x"8D", x"85", x"9D", +x"99", x"81", x"91", x"95", x"B9", x"8E", x"86", x"96", +x"B9", x"8C", x"84", x"94", x"05", x"AA", x"05", x"A8", +x"25", x"BA", x"65", x"8A", x"65", x"9A", x"65", x"98", +x"00", x"60", x"82", x"81", x"C1", x"8A", x"86", x"99", +x"95", x"89", x"11", x"82", x"81", x"C1", x"8A", x"86", +x"99", x"95", x"89", x"1B", x"80", x"82", x"81", x"8A", +x"89", x"63", x"A1", x"67", x"A1", x"46", x"A1", x"16", +x"82", x"81", x"4A", x"A1", x"51", x"A1", x"18", x"A1", +x"69", x"80", x"61", x"A1", x"65", x"A1", x"60", x"80", +x"10", x"80", x"48", x"80", x"34", x"80", x"06", x"82", +x"81", x"C1", x"8A", x"86", x"99", x"95", x"89", x"0C", +x"82", x"81", x"C1", x"4C", x"82", x"81", x"C1", x"62", +x"82", x"81", x"8A", x"89", x"0E", x"80", x"4E", x"80", +x"27", x"82", x"81", x"C1", x"8A", x"86", x"99", x"95", +x"89", x"61", x"82", x"81", x"8A", x"89", x"0D", x"80", +x"4D", x"80", x"06", x"82", x"92", x"27", x"82", x"40", +x"82", x"81", x"C1", x"8A", x"86", x"99", x"95", x"89", +x"0C", x"82", x"81", x"C1", x"86", x"85", x"4C", x"82", +x"81", x"C1", x"8A", x"89", x"27", x"80", x"82", x"81", +x"8A", x"89", x"07", x"80", x"41", x"82", x"81", x"C1", +x"8A", x"86", x"99", x"95", x"89", x"40", x"80", x"04", +x"80", x"40", x"80", x"04", x"80", x"1B", x"80", x"82", +x"81", x"8A", x"89", x"27", x"80", x"82", x"81", x"8A", +x"89", x"48", x"80", x"64", x"80", x"61", x"82", x"81", +x"C1", x"8A", x"86", x"99", x"95", x"89", x"62", x"80", +x"12", x"80", x"4A", x"80", x"40", x"82", x"81", x"8A", +x"86", x"99", x"95", x"89", x"0C", x"82", x"81", x"85", +x"4C", x"82", x"81", x"89", x"0E", x"80", x"4E", x"80", +x"0F", x"80", x"40", x"80", x"64", x"80", x"42", x"80", +x"20", x"75", x"E8", x"B0", x"33", x"A2", x"00", x"86", +x"F4", x"86", x"F5", x"A0", x"00", x"8A", x"71", x"FE", +x"AA", x"90", x"06", x"E6", x"F4", x"D0", x"02", x"E6", +x"F5", x"20", x"F3", x"E8", x"20", x"8B", x"E8", x"90", +x"EC", x"20", x"F6", x"E7", x"A9", x"3D", x"20", x"F1", +x"FF", x"A5", x"F5", x"20", x"00", x"E8", x"A5", x"F4", +x"20", x"00", x"E8", x"8A", x"20", x"00", x"E8", x"18", +x"60", x"20", x"68", x"E8", x"B0", x"25", x"20", x"C3", +x"E8", x"90", x"33", x"A0", x"00", x"20", x"CD", x"E8", +x"90", x"1A", x"20", x"B5", x"E8", x"20", x"A7", x"E8", +x"B0", x"11", x"B1", x"F6", x"91", x"FE", x"20", x"D7", +x"E8", x"90", x"08", x"20", x"E5", x"E8", x"20", x"C3", +x"E8", x"B0", x"EF", x"60", x"B1", x"F4", x"91", x"FE", +x"20", x"A0", x"E8", x"F0", x"F6", x"20", x"8B", x"E8", +x"20", x"C3", x"E8", x"B0", x"EF", x"60", x"38", x"60", +x"20", x"75", x"E8", x"B0", x"1C", x"A0", x"00", x"20", +x"46", x"E8", x"90", x"09", x"C9", x"27", x"D0", x"EE", +x"BD", x"80", x"02", x"AA", x"8A", x"91", x"FE", x"AA", +x"20", x"F3", x"E8", x"20", x"8B", x"E8", x"90", x"F4", +x"18", x"60", x"20", x"7D", x"E8", x"A0", x"00", x"F0", +x"0D", x"BD", x"80", x"02", x"91", x"FE", x"D1", x"FE", +x"38", x"D0", x"2F", x"20", x"8B", x"E8", x"20", x"F6", +x"E7", x"20", x"17", x"E8", x"B1", x"FE", x"20", x"00", +x"E8", x"20", x"DC", x"E7", x"20", x"57", x"E6", x"A2", +x"00", x"20", x"46", x"E8", x"90", x"DE", x"C9", x"0D", +x"F0", x"E1", x"C9", x"27", x"F0", x"D3", x"C9", x"2D", +x"18", x"D0", x"07", x"20", x"E5", x"E8", x"18", x"90", +x"D5", x"18", x"60", x"20", x"7D", x"E8", x"20", x"F6", +x"E7", x"20", x"17", x"E8", x"20", x"57", x"E6", x"A2", +x"00", x"20", x"33", x"E6", x"20", x"C2", x"EB", x"90", +x"ED", x"60", x"A9", x"FD", x"85", x"FC", x"A0", x"04", +x"BD", x"80", x"02", x"E8", x"0A", x"0A", x"0A", x"0A", +x"66", x"F5", x"66", x"F4", x"88", x"10", x"F8", x"E6", +x"FC", x"30", x"EB", x"F0", x"F2", x"20", x"33", x"E6", +x"A9", x"80", x"D0", x"02", x"05", x"F8", x"85", x"F8", +x"20", x"40", x"E8", x"90", x"18", x"C9", x"23", x"D0", +x"04", x"A9", x"40", x"D0", x"EF", x"C9", x"28", x"D0", +x"04", x"A9", x"10", x"D0", x"E7", x"C9", x"27", x"D0", +x"30", x"BD", x"80", x"02", x"E8", x"85", x"E4", x"E6", +x"F8", x"20", x"40", x"E8", x"B0", x"07", x"85", x"E5", +x"E6", x"F8", x"20", x"40", x"E8", x"C9", x"21", x"D0", +x"08", x"A9", x"08", x"05", x"F8", x"85", x"F8", x"D0", +x"10", x"C9", x"22", x"D0", x"04", x"A9", x"04", x"D0", +x"F2", x"C9", x"2C", x"F0", x"E5", x"C9", x"29", x"F0", +x"E1", x"A2", x"D0", x"CA", x"F0", x"43", x"BD", x"00", +x"EA", x"30", x"F8", x"C5", x"F5", x"D0", x"F4", x"BD", +x"30", x"E9", x"C5", x"F4", x"D0", x"ED", x"E8", x"BD", +x"00", x"EA", x"10", x"2D", x"C5", x"F8", x"F0", x"10", +x"29", x"20", x"F0", x"F2", x"A5", x"E5", x"38", x"E9", +x"02", x"38", x"E5", x"FE", x"85", x"E4", x"A9", x"01", +x"29", x"03", x"48", x"A0", x"00", x"BD", x"30", x"E9", +x"91", x"FE", x"68", x"AA", x"18", x"20", x"8B", x"E8", +x"CA", x"30", x"07", x"B5", x"E4", x"91", x"FE", x"90", +x"F4", x"38", x"60", x"FF", x"FF", x"FF", x"FF", x"FF", +x"20", x"75", x"E8", x"90", x"14", x"A2", x"1C", x"8A", +x"48", x"20", x"F6", x"E7", x"20", x"A9", x"EC", x"20", +x"8B", x"E8", x"68", x"AA", x"CA", x"D0", x"F0", x"18", +x"60", x"20", x"F6", x"E7", x"20", x"A9", x"EC", x"20", +x"F3", x"E8", x"20", x"8B", x"E8", x"90", x"F2", x"18", +x"60", x"20", x"17", x"E8", x"A0", x"00", x"B1", x"FE", +x"A0", x"80", x"84", x"F8", x"A2", x"D0", x"CA", x"F0", +x"0D", x"DD", x"30", x"E9", x"D0", x"F8", x"BC", x"00", +x"EA", x"10", x"F3", x"84", x"F8", x"CA", x"BD", x"00", +x"EA", x"30", x"FA", x"85", x"F5", x"BD", x"30", x"E9", +x"85", x"F4", x"98", x"29", x"03", x"AA", x"A0", x"FF", +x"C8", x"B1", x"FE", x"20", x"00", x"E8", x"CA", x"10", +x"F7", x"C8", x"20", x"E4", x"E7", x"C0", x"04", x"D0", +x"F8", x"88", x"A2", x"05", x"A9", x"02", x"46", x"F5", +x"66", x"F4", x"2A", x"CA", x"D0", x"F8", x"20", x"F1", +x"FF", x"88", x"D0", x"EE", x"20", x"DC", x"E7", x"A5", +x"F8", x"0A", x"F0", x"A3", x"10", x"04", x"A9", x"23", +x"D0", x"08", x"29", x"20", x"F0", x"02", x"A9", x"08", +x"09", x"20", x"20", x"F1", x"FF", x"A5", x"F8", x"C9", +x"A1", x"D0", x"1D", x"20", x"8B", x"E8", x"B1", x"FE", +x"A8", x"38", x"65", x"FE", x"48", x"A6", x"FF", x"98", +x"10", x"03", x"B0", x"04", x"CA", x"90", x"01", x"E8", +x"8A", x"20", x"03", x"E8", x"68", x"4C", x"03", x"E8", +x"29", x"03", x"A8", x"B1", x"FE", x"20", x"03", x"E8", +x"20", x"8B", x"E8", x"88", x"88", x"F0", x"F4", x"A2", +x"58", x"A5", x"F8", x"29", x"1C", x"F0", x"22", x"0A", +x"0A", x"0A", x"0A", x"F0", x"0B", x"B0", x"04", x"10", +x"0E", x"30", x"0D", x"10", x"07", x"20", x"68", x"ED", +x"A9", x"29", x"D0", x"0A", x"20", x"60", x"ED", x"E8", +x"A9", x"2C", x"20", x"F1", x"FF", x"8A", x"4C", x"F1", +x"FF", x"18", x"60", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"A5", x"7B", x"85", x"FE", x"A5", x"7C", x"85", x"FF", +x"A9", x"00", x"85", x"F4", x"A9", x"04", x"85", x"F5", +x"20", x"B5", x"E8", x"E6", x"FE", x"E6", x"FF", x"A9", +x"60", x"A2", x"00", x"A0", x"14", x"20", x"B7", x"E7", +x"8D", x"00", x"88", x"CA", x"D0", x"F5", x"A8", x"88", +x"98", x"D0", x"F0", x"A0", x"08", x"20", x"DC", x"ED", +x"A5", x"FE", x"20", x"D8", x"ED", x"A5", x"FF", x"20", +x"D8", x"ED", x"20", x"D7", x"ED", x"20", x"D7", x"ED", +x"B1", x"F4", x"A2", x"07", x"A0", x"07", x"20", x"DC", +x"ED", x"E6", x"F4", x"D0", x"02", x"E6", x"F5", x"C6", +x"FE", x"D0", x"EA", x"C6", x"FF", x"D0", x"E9", x"60", +x"A2", x"07", x"A0", x"09", x"20", x"B7", x"E7", x"6A", +x"B0", x"05", x"8D", x"00", x"88", x"90", x"0D", x"A0", +x"0A", x"20", x"B7", x"E7", x"8D", x"00", x"88", x"A0", +x"09", x"20", x"B7", x"E7", x"A0", x"0A", x"20", x"B7", +x"E7", x"8D", x"00", x"88", x"CA", x"10", x"DB", x"60", +x"E8", x"F0", x"05", x"2C", x"FF", x"87", x"70", x"F8", +x"60", x"E8", x"F0", x"05", x"2C", x"FF", x"87", x"50", +x"F8", x"60", x"A0", x"08", x"20", x"1C", x"EE", x"6A", +x"88", x"D0", x"F9", x"60", x"A2", x"00", x"2C", x"FF", +x"87", x"50", x"08", x"20", x"00", x"EE", x"20", x"09", +x"EE", x"70", x"06", x"20", x"09", x"EE", x"20", x"00", +x"EE", x"E0", x"33", x"60", x"A2", x"00", x"2C", x"FF", +x"87", x"50", x"06", x"20", x"00", x"EE", x"E0", x"19", +x"60", x"20", x"09", x"EE", x"E0", x"19", x"60", x"20", +x"34", x"EE", x"90", x"FB", x"E0", x"33", x"B0", x"F7", +x"A0", x"0A", x"20", x"34", x"EE", x"90", x"F0", x"88", +x"D0", x"F8", x"20", x"34", x"EE", x"B0", x"FB", x"20", +x"34", x"EE", x"B0", x"E3", x"60", x"A0", x"FF", x"A9", +x"03", x"84", x"7B", x"85", x"7C", x"20", x"47", x"EE", +x"20", x"12", x"EE", x"85", x"FE", x"20", x"12", x"EE", +x"85", x"FF", x"20", x"12", x"EE", x"E6", x"7B", x"D0", +x"02", x"E6", x"7C", x"91", x"7B", x"C6", x"FE", x"D0", +x"F1", x"C6", x"FF", x"D0", x"ED", x"60", x"C9", x"10", +x"90", x"07", x"29", x"0F", x"09", x"70", x"85", x"E1", +x"60", x"09", x"60", x"85", x"E1", x"60", x"C9", x"10", +x"B0", x"07", x"29", x"0F", x"09", x"60", x"85", x"E7", +x"60", x"29", x"0F", x"09", x"70", x"85", x"E7", x"60", +x"C9", x"05", x"F0", x"19", x"C9", x"14", x"F0", x"18", +x"C9", x"02", x"F0", x"17", x"C9", x"15", x"F0", x"1B", +x"C9", x"16", x"F0", x"1F", x"EA", x"EA", x"EA", x"EA", +x"EA", x"EA", x"4C", x"F8", x"E3", x"4C", x"AA", x"E3", +x"4C", x"00", x"F0", x"A9", x"FF", x"8D", x"10", x"02", +x"4C", x"D8", x"E3", x"A9", x"00", x"8D", x"10", x"02", +x"4C", x"D8", x"E3", x"20", x"3E", x"E7", x"4C", x"D8", +x"E3", x"48", x"8A", x"48", x"98", x"48", x"2C", x"00", +x"80", x"10", x"FB", x"4C", x"6F", x"E7", x"20", x"33", +x"E6", x"C9", x"34", x"B0", x"0F", x"C9", x"30", x"90", +x"0B", x"29", x"03", x"AA", x"BD", x"19", x"EF", x"8D", +x"13", x"02", x"18", x"60", x"A2", x"EE", x"BD", x"2D", +x"EE", x"20", x"62", x"E7", x"E8", x"D0", x"F7", x"18", +x"60", x"A8", x"54", x"2A", x"15", x"0A", x"4E", x"45", +x"50", x"52", x"41", x"56", x"49", x"4C", x"41", x"4E", +x"20", x"55", x"4E", x"4F", x"53", x"A9", x"60", x"85", +x"E1", x"A9", x"00", x"85", x"E0", x"A8", x"A9", x"00", +x"91", x"E0", x"E6", x"E0", x"D0", x"F8", x"E6", x"E1", +x"A5", x"E1", x"C9", x"80", x"D0", x"F0", x"A0", x"57", +x"A9", x"EF", x"20", x"3B", x"E6", x"A0", x"84", x"A9", +x"E6", x"20", x"3B", x"E6", x"4C", x"AA", x"FF", x"20", +x"20", x"20", x"20", x"20", x"20", x"2A", x"2A", x"2A", +x"20", x"4F", x"20", x"52", x"20", x"41", x"20", x"4F", +x"20", x"2A", x"2A", x"2A", x"04", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"A9", x"00", x"85", x"E0", x"85", x"E3", x"AA", x"A8", +x"A9", x"E0", x"85", x"E1", x"A5", x"E7", x"85", x"EF", +x"EA", x"A5", x"E9", x"85", x"EE", x"B1", x"EE", x"85", +x"E2", x"A5", x"EE", x"18", x"69", x"20", x"85", x"EE", +x"E8", x"20", x"49", x"F0", x"A5", x"E1", x"C9", x"E3", +x"B0", x"73", x"E0", x"07", x"90", x"E7", x"A5", x"E0", +x"29", x"F8", x"85", x"E0", x"A2", x"00", x"E6", x"E3", +x"A5", x"E3", x"C9", x"02", x"90", x"D3", x"EA", x"EA", +x"20", x"6A", x"F0", x"20", x"62", x"E7", x"4C", x"D8", +x"E3", x"A5", x"E2", x"D1", x"E0", x"F0", x"14", x"18", +x"A5", x"E0", x"69", x"08", x"85", x"E0", x"90", x"02", +x"E6", x"E1", x"A5", x"E1", x"C9", x"E3", x"B0", x"09", +x"4C", x"49", x"F0", x"E6", x"E0", x"D0", x"02", x"E6", +x"E1", x"60", x"A5", x"E1", x"29", x"0F", x"0A", x"0A", +x"0A", x"0A", x"0A", x"18", x"69", x"20", x"85", x"E2", +x"A5", x"E0", x"29", x"F8", x"6A", x"6A", x"6A", x"65", +x"E2", x"85", x"E2", x"60", x"D1", x"E0", x"F0", x"0E", +x"18", x"A5", x"E0", x"69", x"08", x"85", x"E0", x"90", +x"02", x"E6", x"E1", x"4C", x"82", x"F0", x"E6", x"E0", +x"D0", x"02", x"E6", x"E1", x"60", x"A9", x"20", x"85", +x"E2", x"4C", x"43", x"F0", x"0A", x"0D", x"53", x"4E", +x"49", x"4D", x"41", x"4E", x"4A", x"45", x"20", x"3F", +x"04", x"24", x"0A", x"0D", x"52", x"45", x"50", x"52", +x"4F", x"44", x"55", x"4B", x"43", x"49", x"4A", x"41", +x"20", x"3F", x"04", x"0A", x"0D", x"4E", x"45", x"50", +x"52", x"41", x"56", x"49", x"4C", x"41", x"4E", x"20", +x"55", x"4E", x"4F", x"53", x"0A", x"0D", x"04", x"24", +x"A5", x"7B", x"85", x"FE", x"A5", x"7C", x"85", x"FF", +x"A9", x"00", x"85", x"F4", x"A9", x"04", x"85", x"F5", +x"4C", x"58", x"F1", x"A9", x"F0", x"A0", x"C3", x"20", +x"3B", x"E6", x"4C", x"74", x"C2", x"A2", x"FF", x"E8", +x"B5", x"13", x"9D", x"80", x"02", x"D0", x"F8", x"A2", +x"01", x"20", x"33", x"E6", x"E0", x"1A", x"B0", x"E3", +x"C9", x"22", x"D0", x"DF", x"A0", x"00", x"BD", x"81", +x"02", x"E8", x"99", x"00", x"03", x"C8", x"C0", x"0F", +x"B0", x"D1", x"C9", x"22", x"D0", x"F0", x"A9", x"00", +x"99", x"FF", x"02", x"E8", x"20", x"33", x"E6", x"BD", +x"80", x"02", x"F0", x"AC", x"20", x"5B", x"E8", x"B0", +x"BA", x"A5", x"F7", x"85", x"F5", x"A5", x"F6", x"85", +x"F4", x"20", x"33", x"E6", x"C9", x"2C", x"D0", x"AB", +x"20", x"33", x"E6", x"E8", x"20", x"5B", x"E8", x"B0", +x"A2", x"A5", x"F7", x"85", x"FF", x"A5", x"F6", x"85", +x"FE", x"20", x"33", x"E6", x"C9", x"00", x"D0", x"93", +x"A0", x"10", x"A9", x"FF", x"99", x"80", x"02", x"88", +x"D0", x"F8", x"A9", x"F0", x"A0", x"A4", x"20", x"3B", +x"E6", x"20", x"00", x"E5", x"A5", x"FC", x"C9", x"0D", +x"D0", x"F7", x"A9", x"10", x"A2", x"00", x"A0", x"14", +x"20", x"B7", x"E7", x"8D", x"00", x"88", x"CA", x"D0", +x"F5", x"A8", x"88", x"98", x"D0", x"F0", x"A0", x"08", +x"20", x"DC", x"ED", x"A0", x"10", x"20", x"D7", x"ED", +x"88", x"98", x"48", x"B9", x"00", x"EA", x"A2", x"07", +x"A0", x"07", x"20", x"DC", x"ED", x"EA", x"68", x"A8", +x"D0", x"EB", x"20", x"D7", x"ED", x"A0", x"FF", x"20", +x"D7", x"ED", x"C8", x"98", x"48", x"B9", x"00", x"03", +x"A2", x"07", x"A0", x"07", x"20", x"DC", x"ED", x"68", +x"A8", x"B9", x"00", x"03", x"D0", x"E9", x"20", x"D7", +x"ED", x"A5", x"F4", x"20", x"D8", x"ED", x"A5", x"F5", +x"20", x"D8", x"ED", x"A5", x"FE", x"20", x"D8", x"ED", +x"A5", x"FF", x"20", x"D8", x"ED", x"20", x"B5", x"E8", +x"A5", x"FE", x"20", x"D8", x"ED", x"A5", x"FF", x"20", +x"D8", x"ED", x"E6", x"FE", x"E6", x"FF", x"A9", x"05", +x"20", x"99", x"ED", x"4C", x"74", x"C2", x"4C", x"74", +x"C2", x"20", x"B0", x"E5", x"90", x"02", x"F0", x"F6", +x"A0", x"20", x"20", x"1C", x"EE", x"90", x"F2", x"88", +x"D0", x"F8", x"60", x"4C", x"DE", x"F2", x"A9", x"F0", +x"A0", x"C3", x"20", x"3B", x"E6", x"4C", x"74", x"C2", +x"A9", x"F0", x"A0", x"B2", x"20", x"3B", x"E6", x"20", +x"00", x"E5", x"A5", x"FC", x"C9", x"0D", x"D0", x"F7", +x"20", x"F6", x"E7", x"20", x"F6", x"E7", x"60", x"A5", +x"14", x"C9", x"43", x"D0", x"D6", x"A2", x"FF", x"E8", +x"B5", x"13", x"9D", x"80", x"02", x"D0", x"F8", x"A2", +x"02", x"20", x"33", x"E6", x"BD", x"80", x"02", x"D0", +x"C5", x"20", x"10", x"F2", x"20", x"F1", x"F1", x"20", +x"47", x"EE", x"A0", x"10", x"88", x"98", x"48", x"20", +x"12", x"EE", x"85", x"F4", x"68", x"A8", x"B9", x"00", +x"EA", x"EA", x"EA", x"EA", x"C5", x"F4", x"D0", x"E4", +x"88", x"D0", x"EA", x"A9", x"20", x"A0", x"03", x"85", +x"E0", x"84", x"E1", x"20", x"12", x"EE", x"20", x"12", +x"EE", x"91", x"E0", x"C9", x"00", x"F0", x"04", x"E6", +x"E0", x"D0", x"F3", x"20", x"12", x"EE", x"85", x"F4", +x"20", x"12", x"EE", x"85", x"F5", x"20", x"12", x"EE", +x"85", x"FE", x"20", x"12", x"EE", x"85", x"FF", x"20", +x"12", x"EE", x"85", x"E0", x"20", x"12", x"EE", x"85", +x"E1", x"A0", x"FF", x"C8", x"B9", x"20", x"03", x"20", +x"F1", x"FF", x"C9", x"00", x"D0", x"F5", x"A9", x"20", +x"20", x"F1", x"FF", x"C8", x"C0", x"0F", x"D0", x"F6", +x"A5", x"F5", x"20", x"03", x"E8", x"A5", x"F4", x"20", +x"03", x"E8", x"A5", x"FF", x"20", x"00", x"E8", x"A5", +x"FE", x"20", x"03", x"E8", x"A5", x"E1", x"20", x"00", +x"E8", x"A5", x"E0", x"20", x"03", x"E8", x"20", x"F6", +x"E7", x"4C", x"44", x"F2", x"A9", x"FF", x"85", x"F8", +x"4C", x"75", x"F3", x"4C", x"06", x"F2", x"A2", x"FF", +x"E8", x"B5", x"13", x"9D", x"80", x"02", x"D0", x"F8", +x"A2", x"01", x"20", x"33", x"E6", x"E0", x"1A", x"B0", +x"EA", x"C9", x"22", x"D0", x"E6", x"A0", x"00", x"BD", +x"81", x"02", x"E8", x"99", x"00", x"03", x"C8", x"C0", +x"0F", x"B0", x"D8", x"C9", x"22", x"D0", x"F0", x"A9", +x"00", x"99", x"FF", x"02", x"E8", x"20", x"33", x"E6", +x"BD", x"80", x"02", x"F0", x"BF", x"20", x"5B", x"E8", +x"B0", x"C1", x"20", x"33", x"E6", x"C9", x"00", x"D0", +x"BA", x"20", x"10", x"F2", x"A9", x"00", x"85", x"F8", +x"A5", x"7B", x"48", x"A5", x"7C", x"48", x"20", x"78", +x"F3", x"A5", x"F7", x"85", x"F5", x"A5", x"F6", x"85", +x"F4", x"A5", x"F4", x"C9", x"00", x"F0", x"09", x"C6", +x"F4", x"A5", x"F4", x"85", x"7B", x"18", x"90", x"08", +x"C6", x"F4", x"A5", x"F4", x"85", x"7B", x"C6", x"F5", +x"A5", x"F5", x"85", x"7C", x"E6", x"E0", x"E6", x"E1", +x"A5", x"E0", x"85", x"FE", x"A5", x"E1", x"85", x"FF", +x"20", x"47", x"EE", x"20", x"12", x"EE", x"20", x"12", +x"EE", x"20", x"7A", x"EE", x"68", x"85", x"7C", x"68", +x"85", x"7B", x"4C", x"74", x"C2", x"20", x"10", x"F2", +x"20", x"F1", x"F1", x"20", x"47", x"EE", x"A0", x"10", +x"88", x"98", x"48", x"20", x"12", x"EE", x"85", x"F4", +x"68", x"A8", x"B9", x"00", x"EA", x"C5", x"F4", x"D0", +x"EA", x"88", x"D0", x"ED", x"A9", x"20", x"A0", x"03", +x"85", x"E0", x"84", x"E1", x"20", x"12", x"EE", x"20", +x"12", x"EE", x"91", x"E0", x"C9", x"00", x"F0", x"04", +x"E6", x"E0", x"D0", x"F3", x"20", x"12", x"EE", x"85", +x"F4", x"20", x"12", x"EE", x"85", x"F5", x"20", x"12", +x"EE", x"85", x"FE", x"20", x"12", x"EE", x"85", x"FF", +x"20", x"12", x"EE", x"85", x"E0", x"20", x"12", x"EE", +x"85", x"E1", x"A0", x"FF", x"C8", x"B9", x"00", x"03", +x"C9", x"00", x"F0", x"18", x"D9", x"20", x"03", x"F0", +x"F3", x"A0", x"FF", x"C8", x"B9", x"20", x"03", x"20", +x"F1", x"FF", x"C9", x"00", x"D0", x"F5", x"20", x"F6", +x"E7", x"4C", x"78", x"F3", x"A5", x"F8", x"30", x"0B", +x"A0", x"20", x"A9", x"FF", x"99", x"80", x"02", x"88", +x"D0", x"F8", x"60", x"A0", x"FF", x"A9", x"03", x"84", +x"7B", x"85", x"7C", x"E6", x"E0", x"E6", x"E1", x"A5", +x"E0", x"85", x"FE", x"A5", x"E1", x"85", x"FF", x"20", +x"47", x"EE", x"20", x"12", x"EE", x"20", x"12", x"EE", +x"20", x"7A", x"EE", x"A0", x"20", x"A9", x"FF", x"99", +x"80", x"02", x"88", x"D0", x"F8", x"A5", x"7B", x"85", +x"7D", x"85", x"7F", x"A5", x"7C", x"85", x"7E", x"85", +x"80", x"4C", x"74", x"C2", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FC", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FA", x"FF", x"FA", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FA", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FC", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"A5", x"E3", x"49", x"FF", x"AA", +x"4A", x"4A", x"4A", x"20", x"8E", x"EE", x"EA", x"8A", +x"0A", x"0A", x"0A", x"0A", x"0A", x"85", x"E0", x"60", +x"FF", x"FF", x"FF", x"A5", x"E2", x"4A", x"4A", x"4A", +x"A8", x"60", x"01", x"02", x"04", x"08", x"10", x"20", +x"40", x"80", x"20", x"33", x"FE", x"20", x"4B", x"FE", +x"A5", x"E2", x"29", x"07", x"AA", x"BD", x"52", x"FE", +x"60", x"8A", x"48", x"98", x"48", x"20", x"5A", x"FE", +x"18", x"AE", x"0A", x"02", x"30", x"06", x"D0", x"08", +x"11", x"E0", x"90", x"08", x"51", x"E0", x"90", x"04", +x"49", x"FF", x"31", x"E0", x"91", x"E0", x"68", x"A8", +x"68", x"AA", x"60", x"8A", x"48", x"98", x"48", x"A2", +x"01", x"A5", x"E4", x"38", x"E5", x"E2", x"B0", x"06", +x"A2", x"FF", x"49", x"FF", x"69", x"01", x"85", x"F4", +x"85", x"F8", x"4A", x"69", x"00", x"85", x"F7", x"A0", +x"01", x"A5", x"E5", x"38", x"E5", x"E3", x"B0", x"06", +x"A0", x"FF", x"49", x"FF", x"69", x"01", x"85", x"F6", +x"C5", x"F4", x"B0", x"02", x"85", x"F8", x"4A", x"69", +x"00", x"85", x"F5", x"18", x"90", x"2C", x"A5", x"F5", +x"38", x"E5", x"F8", x"85", x"F5", x"90", x"03", x"D0", +x"0B", x"18", x"65", x"F6", x"85", x"F5", x"8A", x"18", +x"65", x"E2", x"85", x"E2", x"A5", x"F7", x"38", x"E5", +x"F8", x"85", x"F7", x"90", x"03", x"D0", x"0B", x"18", +x"65", x"F4", x"85", x"F7", x"98", x"18", x"65", x"E3", +x"85", x"E3", x"20", x"69", x"FE", x"A5", x"E2", x"C5", +x"E4", x"D0", x"CB", x"A5", x"E3", x"C5", x"E5", x"D0", +x"C5", x"68", x"A8", x"68", x"AA", x"60", x"8A", x"48", +x"98", x"48", x"A5", x"E2", x"85", x"E4", x"A5", x"E3", +x"85", x"E5", x"A9", x"00", x"85", x"F6", x"85", x"F7", +x"A9", x"FF", x"85", x"F4", x"A5", x"F8", x"85", x"F5", +x"A2", x"04", x"A0", x"24", x"A5", x"F7", x"0A", x"90", +x"03", x"E6", x"F5", x"18", x"E5", x"F4", x"49", x"FF", +x"85", x"F4", x"90", x"02", x"C6", x"F5", x"A5", x"F5", +x"0A", x"90", x"03", x"C6", x"F7", x"18", x"65", x"F6", +x"85", x"F6", x"90", x"02", x"E6", x"F7", x"A5", x"F5", +x"18", x"65", x"E4", x"85", x"E2", x"EA", x"EA", x"EA", +x"EA", x"A5", x"F7", x"18", x"65", x"E5", x"EA", x"EA", +x"EA", x"EA", x"85", x"E3", x"20", x"69", x"FE", x"88", +x"D0", x"C2", x"CA", x"D0", x"BF", x"A5", x"E4", x"85", +x"E2", x"A5", x"E5", x"85", x"E3", x"68", x"A8", x"68", +x"AA", x"60", x"48", x"8A", x"48", x"98", x"48", x"D8", +x"BA", x"BD", x"04", x"01", x"29", x"10", x"D0", x"06", +x"6C", x"1E", x"02", x"6C", x"20", x"02", x"6C", x"22", +x"02", x"78", x"D8", x"A2", x"F9", x"9A", x"A2", x"0F", +x"BD", x"8C", x"E6", x"95", x"E0", x"CA", x"10", x"F8", +x"A2", x"23", x"BD", x"9C", x"E6", x"9D", x"00", x"02", +x"CA", x"10", x"F7", x"4C", x"2D", x"EF", x"EA", x"4C", +x"4D", x"EF", x"20", x"57", x"E6", x"A2", x"00", x"20", +x"33", x"E6", x"E8", x"C9", x"0D", x"F0", x"F0", x"A0", +x"FF", x"C8", x"B9", x"00", x"E7", x"C9", x"FF", x"F0", +x"17", x"DD", x"7F", x"02", x"D0", x"F3", x"98", x"0A", +x"A8", x"B9", x"C8", x"E6", x"85", x"F6", x"B9", x"C9", +x"E6", x"85", x"F7", x"20", x"0B", x"E9", x"90", x"CF", +x"20", x"F4", x"E4", x"20", x"F6", x"E7", x"A9", x"3F", +x"20", x"F1", x"FF", x"38", x"B0", x"C1", x"FF", x"FF", +x"6C", x"FE", x"00", x"6C", x"14", x"02", x"6C", x"16", +x"02", x"6C", x"18", x"02", x"6C", x"1A", x"02", x"6C", +x"1C", x"02", x"83", x"FF", x"89", x"FF", x"72", x"FF" + ); +begin + process(clk) + begin + if rising_edge(clk) then + data <= romData(conv_integer(addr)); + end if; + end process; +end architecture; + diff --git a/ORAO_MiST/rtl/rom/rom_crt103.vhd b/ORAO_MiST/rtl/rom/rom_crt103.vhd new file mode 100644 index 00000000..a1f06523 --- /dev/null +++ b/ORAO_MiST/rtl/rom/rom_crt103.vhd @@ -0,0 +1,1051 @@ +library IEEE; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity rom_crt 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 Behavioral of rom_crt is + type romDef is array(0 to 8191) of std_logic_vector(7 downto 0); + constant romData: romDef := ( +x"00", x"00", x"00", x"00", x"00", x"00", x"00", x"00", +x"08", x"08", x"08", x"08", x"08", x"00", x"08", x"00", +x"14", x"14", x"00", x"00", x"00", x"00", x"00", x"00", +x"28", x"28", x"7C", x"28", x"7C", x"28", x"28", x"00", +x"10", x"78", x"14", x"38", x"50", x"3C", x"10", x"00", +x"46", x"26", x"10", x"08", x"64", x"62", x"00", x"00", +x"08", x"14", x"14", x"0C", x"52", x"22", x"5C", x"00", +x"20", x"10", x"08", x"00", x"00", x"00", x"00", x"00", +x"20", x"10", x"08", x"08", x"08", x"10", x"20", x"00", +x"04", x"08", x"10", x"10", x"10", x"08", x"04", x"00", +x"00", x"10", x"54", x"38", x"54", x"10", x"00", x"00", +x"00", x"10", x"10", x"7C", x"10", x"10", x"00", x"00", +x"00", x"00", x"00", x"00", x"18", x"18", x"04", x"00", +x"00", x"00", x"00", x"7C", x"00", x"00", x"00", x"00", +x"00", x"00", x"00", x"00", x"18", x"18", x"00", x"00", +x"00", x"40", x"20", x"10", x"08", x"04", x"00", x"00", +x"38", x"44", x"64", x"54", x"4C", x"44", x"38", x"00", +x"10", x"18", x"10", x"10", x"10", x"10", x"38", x"00", +x"38", x"44", x"40", x"20", x"18", x"04", x"7C", x"00", +x"7C", x"20", x"10", x"20", x"40", x"44", x"38", x"00", +x"20", x"30", x"28", x"24", x"7C", x"20", x"20", x"00", +x"7C", x"04", x"3C", x"40", x"40", x"44", x"38", x"00", +x"30", x"08", x"04", x"3C", x"44", x"44", x"38", x"00", +x"7C", x"40", x"20", x"10", x"08", x"08", x"08", x"00", +x"38", x"44", x"44", x"38", x"44", x"44", x"38", x"00", +x"38", x"44", x"44", x"78", x"40", x"20", x"18", x"00", +x"00", x"18", x"18", x"00", x"18", x"18", x"00", x"00", +x"00", x"18", x"18", x"00", x"18", x"18", x"04", x"00", +x"20", x"10", x"08", x"04", x"08", x"10", x"20", x"00", +x"00", x"00", x"7C", x"00", x"7C", x"00", x"00", x"00", +x"04", x"08", x"10", x"20", x"10", x"08", x"04", x"00", +x"1C", x"22", x"20", x"18", x"08", x"00", x"08", x"00", +x"38", x"44", x"74", x"54", x"74", x"04", x"78", x"00", +x"38", x"44", x"44", x"7C", x"44", x"44", x"44", x"00", +x"3C", x"48", x"48", x"38", x"48", x"48", x"3C", x"00", +x"38", x"44", x"04", x"04", x"04", x"44", x"38", x"00", +x"3C", x"48", x"48", x"48", x"48", x"48", x"3C", x"00", +x"7C", x"04", x"04", x"1C", x"04", x"04", x"7C", x"00", +x"7C", x"04", x"04", x"1C", x"04", x"04", x"04", x"00", +x"38", x"44", x"04", x"04", x"74", x"44", x"78", x"00", +x"44", x"44", x"44", x"7C", x"44", x"44", x"44", x"00", +x"38", x"10", x"10", x"10", x"10", x"10", x"38", x"00", +x"70", x"20", x"20", x"20", x"20", x"24", x"18", x"00", +x"44", x"24", x"14", x"0C", x"14", x"24", x"44", x"00", +x"04", x"04", x"04", x"04", x"04", x"04", x"7C", x"00", +x"44", x"6C", x"54", x"54", x"44", x"44", x"44", x"00", +x"44", x"44", x"4C", x"54", x"64", x"44", x"44", x"00", +x"38", x"44", x"44", x"44", x"44", x"44", x"38", x"00", +x"3C", x"44", x"44", x"3C", x"04", x"04", x"04", x"00", +x"38", x"44", x"44", x"44", x"54", x"24", x"58", x"00", +x"3C", x"44", x"44", x"3C", x"14", x"24", x"44", x"00", +x"38", x"44", x"08", x"10", x"20", x"44", x"38", x"00", +x"7C", x"10", x"10", x"10", x"10", x"10", x"10", x"00", +x"44", x"44", x"44", x"44", x"44", x"44", x"38", x"00", +x"44", x"44", x"44", x"44", x"44", x"28", x"10", x"00", +x"44", x"44", x"44", x"54", x"54", x"54", x"28", x"00", +x"44", x"44", x"28", x"10", x"28", x"44", x"44", x"00", +x"44", x"44", x"44", x"28", x"10", x"10", x"10", x"00", +x"7C", x"40", x"20", x"10", x"08", x"04", x"7C", x"00", +x"28", x"38", x"44", x"04", x"04", x"44", x"38", x"00", +x"20", x"38", x"44", x"04", x"04", x"44", x"38", x"00", +x"3C", x"48", x"48", x"5C", x"48", x"48", x"3C", x"00", +x"28", x"38", x"44", x"08", x"30", x"44", x"38", x"00", +x"28", x"7C", x"40", x"20", x"10", x"08", x"7C", x"00", +x"10", x"28", x"44", x"00", x"00", x"00", x"00", x"00", +x"00", x"18", x"20", x"38", x"24", x"38", x"00", x"00", +x"04", x"04", x"1C", x"24", x"24", x"1C", x"00", x"00", +x"00", x"38", x"04", x"04", x"04", x"38", x"00", x"00", +x"20", x"20", x"38", x"24", x"24", x"38", x"00", x"00", +x"00", x"18", x"24", x"1C", x"04", x"18", x"00", x"00", +x"10", x"28", x"08", x"1C", x"08", x"08", x"08", x"00", +x"00", x"38", x"24", x"24", x"38", x"20", x"18", x"00", +x"04", x"04", x"1C", x"24", x"24", x"24", x"00", x"00", +x"10", x"00", x"18", x"10", x"10", x"38", x"00", x"00", +x"10", x"00", x"18", x"10", x"10", x"14", x"08", x"00", +x"04", x"04", x"14", x"0C", x"14", x"24", x"00", x"00", +x"18", x"10", x"10", x"10", x"10", x"38", x"00", x"00", +x"00", x"2C", x"54", x"54", x"54", x"54", x"00", x"00", +x"00", x"1C", x"24", x"24", x"24", x"24", x"00", x"00", +x"00", x"18", x"24", x"24", x"24", x"18", x"00", x"00", +x"00", x"1C", x"24", x"24", x"1C", x"04", x"04", x"00", +x"00", x"1C", x"12", x"12", x"1C", x"10", x"78", x"00", +x"00", x"34", x"0C", x"04", x"04", x"04", x"00", x"00", +x"00", x"38", x"04", x"18", x"20", x"1C", x"00", x"00", +x"10", x"38", x"10", x"10", x"10", x"20", x"00", x"00", +x"00", x"24", x"24", x"24", x"24", x"38", x"00", x"00", +x"00", x"44", x"44", x"44", x"28", x"10", x"00", x"00", +x"00", x"44", x"44", x"54", x"54", x"28", x"00", x"00", +x"00", x"44", x"28", x"10", x"28", x"44", x"00", x"00", +x"00", x"24", x"24", x"24", x"38", x"20", x"18", x"00", +x"00", x"3C", x"20", x"10", x"08", x"3C", x"00", x"00", +x"38", x"00", x"38", x"04", x"04", x"38", x"00", x"00", +x"20", x"00", x"38", x"04", x"04", x"38", x"00", x"00", +x"20", x"70", x"20", x"38", x"24", x"38", x"00", x"00", +x"28", x"38", x"04", x"18", x"20", x"1C", x"00", x"00", +x"38", x"00", x"3C", x"10", x"08", x"3C", x"00", x"00", +x"09", x"0A", x"0B", x"1F", x"14", x"13", x"12", x"11", +x"36", x"74", x"7A", x"72", x"37", x"75", x"69", x"6F", +x"31", x"77", x"71", x"65", x"6D", x"6B", x"6A", x"6C", +x"79", x"73", x"61", x"64", x"6E", x"67", x"68", x"66", +x"3A", x"7F", x"7C", x"7B", x"3B", x"7E", x"7D", x"70", +x"00", x"0D", x"00", x"20", x"34", x"35", x"39", x"38", +x"33", x"32", x"2E", x"2C", x"63", x"78", x"76", x"62", +x"60", x"2F", x"30", x"2D", x"87", x"FC", x"87", x"FA", +x"87", x"F6", x"87", x"EE", x"87", x"DE", x"87", x"BE", +x"87", x"7E", x"86", x"FE", x"85", x"FE", x"83", x"FE", +x"85", x"FC", x"8A", x"48", x"98", x"48", x"A5", x"FC", +x"A8", x"2A", x"2A", x"2A", x"2A", x"29", x"03", x"AA", +x"BD", x"00", x"02", x"D0", x"05", x"BD", x"04", x"02", +x"F0", x"24", x"85", x"F1", x"98", x"0A", x"0A", x"0A", +x"85", x"F0", x"A0", x"07", x"B1", x"F0", x"84", x"FA", +x"A4", x"E9", x"20", x"C1", x"EE", x"EA", x"EA", x"EA", +x"91", x"E6", x"A5", x"E6", x"38", x"E9", x"20", x"85", +x"E6", x"A4", x"FA", x"88", x"10", x"E6", x"68", x"A8", +x"68", x"AA", x"A5", x"FC", x"60", x"A6", x"EA", x"86", +x"E8", x"A4", x"EC", x"84", x"E9", x"A9", x"E0", x"85", +x"E6", x"A5", x"E8", x"4C", x"9E", x"EE", x"EA", x"EA", +x"EA", x"60", x"A6", x"EB", x"18", x"90", x"05", x"20", +x"95", x"E3", x"A4", x"EC", x"20", x"AD", x"E4", x"C4", +x"ED", x"C8", x"90", x"F8", x"E4", x"EB", x"B0", x"15", +x"E8", x"E6", x"E7", x"90", x"ED", x"C6", x"E9", x"C4", +x"EC", x"D0", x"0D", x"A4", x"ED", x"84", x"E9", x"E4", +x"EA", x"F0", x"05", x"C6", x"E8", x"20", x"9D", x"E3", +x"68", x"A8", x"68", x"AA", x"A5", x"FC", x"60", x"85", +x"FC", x"8A", x"48", x"98", x"48", x"A5", x"FC", x"A6", +x"E8", x"A4", x"E9", x"C9", x"20", x"B0", x"39", x"2C", +x"08", x"02", x"30", x"34", x"C9", x"05", x"F0", x"B2", +x"C9", x"0C", x"F0", x"B3", x"C9", x"06", x"F0", x"B4", +x"C9", x"08", x"F0", x"C1", x"C9", x"0B", x"F0", x"C7", +x"C9", x"09", x"F0", x"1F", x"C9", x"0A", x"F0", x"25", +x"C9", x"0D", x"F0", x"6A", x"C9", x"04", x"D0", x"06", +x"20", x"95", x"E3", x"4C", x"D8", x"E3", x"C9", x"07", +x"D0", x"B6", x"20", x"F4", x"E4", x"4C", x"D8", x"E3", +x"20", x"50", x"E3", x"E6", x"E9", x"C4", x"ED", x"90", +x"A7", x"A4", x"EC", x"84", x"E9", x"E6", x"E8", x"E4", +x"EB", x"90", x"9A", x"C6", x"E8", x"A5", x"EA", x"20", +x"A3", x"E3", x"A5", x"E6", x"18", x"90", x"13", x"E6", +x"E7", x"A4", x"EC", x"B1", x"E6", x"91", x"EE", x"C4", +x"ED", x"C8", x"90", x"F7", x"A5", x"E6", x"E9", x"20", +x"85", x"E6", x"85", x"EE", x"B0", x"EB", x"A5", x"E7", +x"85", x"EF", x"38", x"E9", x"60", x"C5", x"EB", x"90", +x"DE", x"2C", x"43", x"02", x"10", x"03", x"20", x"4E", +x"F0", x"4C", x"B2", x"E3", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"4C", x"9F", +x"E4", x"F0", x"1C", x"A0", x"09", x"88", x"F0", x"17", +x"A2", x"FF", x"20", x"E3", x"E4", x"20", x"0F", x"E6", +x"D0", x"F3", x"A4", x"E9", x"20", x"C2", x"E4", x"20", +x"0F", x"E6", x"F0", x"FB", x"20", x"C2", x"E4", x"A6", +x"E8", x"AD", x"09", x"02", x"D0", x"8B", x"A4", x"EC", +x"84", x"E9", x"4C", x"D8", x"E3", x"86", x"FB", x"A2", +x"08", x"A9", x"00", x"91", x"E6", x"A5", x"E6", x"38", +x"E9", x"20", x"85", x"E6", x"CA", x"D0", x"F2", x"A6", +x"FB", x"60", x"86", x"FB", x"A2", x"08", x"B1", x"E6", +x"49", x"FF", x"91", x"E6", x"A5", x"E6", x"38", x"E9", +x"20", x"85", x"E6", x"CA", x"D0", x"F0", x"A6", x"FB", +x"60", x"48", x"98", x"A0", x"BB", x"88", x"D0", x"FD", +x"A8", x"68", x"60", x"20", x"D9", x"E4", x"CA", x"D0", +x"FA", x"60", x"8E", x"00", x"88", x"20", x"D9", x"E4", +x"CA", x"D0", x"F7", x"60", x"48", x"8A", x"A2", x"70", +x"20", x"EA", x"E4", x"AA", x"68", x"60", x"FF", x"FF", +x"8A", x"48", x"98", x"48", x"20", x"42", x"F0", x"8D", +x"42", x"02", x"20", x"42", x"F0", x"49", x"FF", x"91", +x"E6", x"A0", x"00", x"88", x"F0", x"F4", x"20", x"B0", +x"E5", x"90", x"3E", x"85", x"FC", x"F0", x"3A", x"A2", +x"0A", x"20", x"E3", x"E4", x"20", x"B0", x"E5", x"90", +x"30", x"C5", x"FC", x"D0", x"2C", x"A4", x"E9", x"AD", +x"42", x"02", x"91", x"E6", x"AD", x"0C", x"02", x"D0", +x"06", x"38", x"6E", x"0C", x"02", x"90", x"23", x"2C", +x"0C", x"02", x"10", x"0E", x"A9", x"40", x"8D", x"0C", +x"02", x"A0", x"30", x"20", x"3F", x"F0", x"90", x"09", +x"B0", x"10", x"A0", x"08", x"20", x"3F", x"F0", x"B0", +x"09", x"A9", x"00", x"8D", x"0C", x"02", x"4C", x"13", +x"E5", x"EA", x"AD", x"FB", x"87", x"29", x"20", x"0A", +x"85", x"FA", x"AD", x"FD", x"87", x"29", x"20", x"05", +x"FA", x"0A", x"85", x"FA", x"A5", x"FC", x"C9", x"21", +x"90", x"2D", x"C9", x"60", x"B0", x"0F", x"2C", x"0E", +x"02", x"10", x"02", x"EA", x"EA", x"A4", x"FA", x"30", +x"1E", x"49", x"10", x"D0", x"1A", x"F0", x"05", x"2C", +x"0D", x"02", x"10", x"04", x"A4", x"FA", x"30", x"02", +x"49", x"20", x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", +x"EA", x"24", x"FA", x"70", x"02", x"29", x"1F", x"85", +x"FC", x"68", x"A8", x"68", x"AA", x"A5", x"FC", x"60", +x"8A", x"48", x"98", x"48", x"A2", x"14", x"CA", x"CA", +x"30", x"2D", x"BD", x"3C", x"E3", x"85", x"F1", x"BD", +x"3D", x"E3", x"85", x"F0", x"20", x"F9", x"E5", x"90", +x"ED", x"C0", x"00", x"D0", x"21", x"0A", x"B0", x"09", +x"C8", x"0A", x"B0", x"05", x"C8", x"0A", x"B0", x"01", +x"C8", x"8A", x"0A", x"84", x"FA", x"18", x"65", x"FA", +x"AA", x"BD", x"00", x"E3", x"85", x"FA", x"38", x"68", +x"A8", x"68", x"AA", x"A5", x"FA", x"60", x"29", x"10", +x"D0", x"01", x"88", x"8A", x"18", x"69", x"28", x"D0", +x"E2", x"38", x"A0", x"00", x"B1", x"F0", x"09", x"0F", +x"49", x"FF", x"D0", x"0A", x"C8", x"B1", x"F0", x"09", +x"CF", x"49", x"FF", x"D0", x"01", x"18", x"60", x"AD", +x"00", x"80", x"09", x"0F", x"49", x"FF", x"D0", x"07", +x"AD", x"01", x"80", x"09", x"CF", x"49", x"FF", x"60", +x"4C", x"2D", x"F0", x"C9", x"57", x"D0", x"03", x"4C", +x"03", x"C0", x"C9", x"43", x"D0", x"03", x"4C", x"00", +x"C0", x"60", x"E8", x"BD", x"80", x"02", x"C9", x"20", +x"F0", x"F8", x"60", x"85", x"F3", x"84", x"F2", x"98", +x"48", x"A0", x"00", x"B1", x"F2", x"C9", x"04", x"F0", +x"0B", x"20", x"F1", x"FF", x"E6", x"F2", x"D0", x"F3", +x"E6", x"F3", x"D0", x"EF", x"68", x"A8", x"60", x"A2", +x"00", x"8A", x"F0", x"01", x"CA", x"20", x"EE", x"FF", +x"9D", x"80", x"02", x"C9", x"0D", x"F0", x"1B", x"C9", +x"08", x"F0", x"EE", x"C9", x"18", x"F0", x"0D", x"C9", +x"20", x"90", x"EA", x"E8", x"10", x"E7", x"20", x"F4", +x"E4", x"38", x"B0", x"E0", x"A9", x"0D", x"A2", x"00", +x"F0", x"DE", x"60", x"FF", x"0D", x"0A", x"00", x"00", +x"00", x"00", x"2A", x"04", x"E0", x"2F", x"00", x"00", +x"00", x"00", x"E0", x"60", x"00", x"00", x"00", x"1F", +x"00", x"1F", x"E0", x"20", x"00", x"00", x"00", x"00", +x"00", x"E0", x"E1", x"E2", x"00", x"00", x"00", x"00", +x"FF", x"00", x"00", x"00", x"00", x"FF", x"FD", x"53", +x"FF", x"FF", x"1C", x"E7", x"62", x"E7", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"20", x"E6", x"FD", x"E8", x"06", x"E9", x"0E", x"E9", +x"D0", x"EA", x"09", x"EB", x"48", x"EB", x"6A", x"EB", +x"AB", x"EB", x"80", x"EC", x"D0", x"EE", x"57", x"EF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"42", x"4A", x"55", x"45", x"43", x"51", x"46", x"4D", +x"41", x"58", x"48", x"23", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"20", x"00", x"E5", x"C9", +x"11", x"D0", x"0B", x"AD", x"0D", x"02", x"49", x"FF", +x"8D", x"0D", x"02", x"6C", x"16", x"02", x"C9", x"12", +x"D0", x"0B", x"AD", x"10", x"02", x"49", x"FF", x"8D", +x"10", x"02", x"6C", x"16", x"02", x"C9", x"13", x"D0", +x"0B", x"AD", x"0E", x"02", x"49", x"FF", x"8D", x"0E", +x"02", x"6C", x"16", x"02", x"4C", x"45", x"F0", x"EA", +x"2C", x"0F", x"02", x"30", x"03", x"20", x"F1", x"FF", +x"60", x"48", x"8A", x"2C", x"00", x"80", x"10", x"FB", +x"30", x"0A", x"20", x"DF", x"E3", x"2C", x"10", x"02", +x"10", x"EE", x"30", x"ED", x"48", x"98", x"48", x"BA", +x"BD", x"03", x"01", x"A2", x"09", x"18", x"2A", x"6A", +x"B0", x"05", x"8D", x"00", x"98", x"90", x"07", x"29", +x"FF", x"30", x"03", x"8D", x"00", x"90", x"AC", x"13", +x"02", x"20", x"B8", x"E7", x"CA", x"30", x"06", x"D0", +x"E6", x"09", x"01", x"D0", x"E2", x"68", x"A8", x"68", +x"AA", x"68", x"60", x"FF", x"FF", x"FF", x"FF", x"A0", +x"00", x"8C", x"00", x"98", x"8C", x"00", x"90", x"2C", +x"FF", x"87", x"10", x"03", x"C8", x"D0", x"F8", x"88", +x"84", x"F4", x"60", x"AE", x"2A", x"0A", x"04", x"EA", +x"EA", x"EA", x"EA", x"EA", x"EA", x"EA", x"88", x"D0", +x"F6", x"60", x"FF", x"48", x"10", x"05", x"38", x"90", +x"02", x"49", x"80", x"0A", x"D0", x"F9", x"68", x"60", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"48", x"A9", x"20", x"20", +x"F1", x"FF", x"68", x"60", x"A2", x"03", x"20", x"DC", +x"E7", x"CA", x"D0", x"FA", x"60", x"C9", x"0A", x"90", +x"02", x"69", x"06", x"69", x"30", x"60", x"A9", x"0D", +x"20", x"F1", x"FF", x"A9", x"0A", x"4C", x"F1", x"FF", +x"20", x"DC", x"E7", x"48", x"4A", x"4A", x"4A", x"4A", +x"20", x"ED", x"E7", x"20", x"F1", x"FF", x"68", x"29", +x"0F", x"20", x"ED", x"E7", x"4C", x"F1", x"FF", x"20", +x"DC", x"E7", x"A5", x"FF", x"20", x"03", x"E8", x"A5", +x"FE", x"4C", x"03", x"E8", x"20", x"33", x"E6", x"BD", +x"80", x"02", x"E8", x"C9", x"30", x"90", x"0F", x"E9", +x"30", x"C9", x"0A", x"90", x"0A", x"C9", x"11", x"90", +x"05", x"E9", x"07", x"C9", x"10", x"60", x"38", x"60", +x"20", x"27", x"E8", x"90", x"06", x"60", x"20", x"24", +x"E8", x"B0", x"0F", x"0A", x"0A", x"0A", x"0A", x"85", +x"FC", x"20", x"27", x"E8", x"B0", x"04", x"05", x"FC", +x"85", x"FC", x"60", x"20", x"46", x"E8", x"B0", x"07", +x"85", x"F7", x"20", x"40", x"E8", x"85", x"F6", x"60", +x"20", x"7D", x"E8", x"B0", x"1D", x"20", x"92", x"E8", +x"B0", x"18", x"4C", x"5B", x"E8", x"20", x"7D", x"E8", +x"B0", x"10", x"4C", x"5B", x"E8", x"20", x"5B", x"E8", +x"B0", x"08", x"A5", x"F6", x"85", x"FE", x"A5", x"F7", +x"85", x"FF", x"60", x"E6", x"FE", x"D0", x"02", x"E6", +x"FF", x"60", x"20", x"5B", x"E8", x"B0", x"08", x"A5", +x"F6", x"85", x"F4", x"A5", x"F7", x"85", x"F5", x"60", +x"E6", x"F4", x"D0", x"02", x"E6", x"F5", x"60", x"18", +x"A5", x"FE", x"65", x"F6", x"85", x"FE", x"A5", x"FF", +x"65", x"F7", x"85", x"FF", x"60", x"38", x"A5", x"FE", +x"E5", x"F4", x"85", x"FE", x"A5", x"FF", x"E5", x"F5", +x"85", x"FF", x"60", x"38", x"A5", x"F6", x"E5", x"F4", +x"A5", x"F7", x"E5", x"F5", x"60", x"38", x"A5", x"FE", +x"E5", x"F4", x"A5", x"FF", x"E5", x"F5", x"60", x"18", +x"A5", x"F6", x"E9", x"00", x"85", x"F6", x"A5", x"F7", +x"E9", x"00", x"85", x"F7", x"60", x"18", x"A5", x"FE", +x"E9", x"00", x"85", x"FE", x"A5", x"FF", x"E9", x"00", +x"85", x"FF", x"60", x"38", x"A5", x"FE", x"E5", x"F6", +x"A5", x"FF", x"E5", x"F7", x"60", x"20", x"5B", x"E8", +x"B0", x"2C", x"68", x"68", x"90", x"05", x"20", x"5B", +x"E8", x"B0", x"23", x"6C", x"F6", x"00", x"20", x"75", +x"E8", x"B0", x"1B", x"A0", x"00", x"20", x"F6", x"E7", +x"20", x"17", x"E8", x"A2", x"09", x"CA", x"F0", x"F5", +x"B1", x"FE", x"20", x"00", x"E8", x"20", x"F3", x"E8", +x"20", x"8B", x"E8", x"90", x"F0", x"18", x"60", x"FF", +x"00", x"90", x"6D", x"65", x"69", x"7D", x"79", x"61", +x"71", x"75", x"D0", x"2D", x"25", x"29", x"3D", x"39", +x"21", x"31", x"35", x"30", x"0A", x"0E", x"06", x"1E", +x"16", x"08", x"90", x"08", x"B0", x"88", x"F0", x"48", +x"2C", x"24", x"C8", x"30", x"C8", x"D0", x"28", x"10", +x"28", x"00", x"A8", x"50", x"A8", x"70", x"D8", x"18", +x"D8", x"D8", x"D8", x"58", x"D8", x"B8", x"D8", x"CD", +x"C5", x"C9", x"DD", x"D9", x"C1", x"D1", x"D5", x"38", +x"EC", x"E4", x"E0", x"38", x"CC", x"C4", x"C0", x"84", +x"CE", x"C6", x"DE", x"D6", x"84", x"CA", x"84", x"88", +x"D4", x"4D", x"45", x"49", x"5D", x"59", x"41", x"51", +x"55", x"D2", x"EE", x"E6", x"FE", x"F6", x"D2", x"E8", +x"D2", x"C8", x"CA", x"4C", x"6C", x"2A", x"20", x"86", +x"AD", x"A5", x"A9", x"BD", x"B9", x"A1", x"B1", x"B5", +x"86", x"AE", x"A6", x"A2", x"BE", x"B6", x"86", x"AC", +x"A4", x"A0", x"BC", x"B4", x"26", x"4A", x"4E", x"46", +x"5E", x"56", x"CE", x"EA", x"3E", x"0D", x"05", x"09", +x"1D", x"19", x"01", x"11", x"15", x"41", x"48", x"41", +x"08", x"C1", x"68", x"C1", x"28", x"C9", x"2A", x"2E", +x"26", x"3E", x"36", x"C9", x"6A", x"6E", x"66", x"7E", +x"76", x"A9", x"40", x"A9", x"60", x"19", x"ED", x"E5", +x"E9", x"FD", x"F9", x"E1", x"F1", x"F5", x"99", x"38", +x"99", x"F8", x"99", x"78", x"B9", x"8D", x"85", x"9D", +x"99", x"81", x"91", x"95", x"B9", x"8E", x"86", x"96", +x"B9", x"8C", x"84", x"94", x"05", x"AA", x"05", x"A8", +x"25", x"BA", x"65", x"8A", x"65", x"9A", x"65", x"98", +x"00", x"60", x"82", x"81", x"C1", x"8A", x"86", x"99", +x"95", x"89", x"11", x"82", x"81", x"C1", x"8A", x"86", +x"99", x"95", x"89", x"1B", x"80", x"82", x"81", x"8A", +x"89", x"63", x"A1", x"67", x"A1", x"46", x"A1", x"16", +x"82", x"81", x"4A", x"A1", x"51", x"A1", x"18", x"A1", +x"69", x"80", x"61", x"A1", x"65", x"A1", x"60", x"80", +x"10", x"80", x"48", x"80", x"34", x"80", x"06", x"82", +x"81", x"C1", x"8A", x"86", x"99", x"95", x"89", x"0C", +x"82", x"81", x"C1", x"4C", x"82", x"81", x"C1", x"62", +x"82", x"81", x"8A", x"89", x"0E", x"80", x"4E", x"80", +x"27", x"82", x"81", x"C1", x"8A", x"86", x"99", x"95", +x"89", x"61", x"82", x"81", x"8A", x"89", x"0D", x"80", +x"4D", x"80", x"06", x"82", x"92", x"27", x"82", x"40", +x"82", x"81", x"C1", x"8A", x"86", x"99", x"95", x"89", +x"0C", x"82", x"81", x"C1", x"86", x"85", x"4C", x"82", +x"81", x"C1", x"8A", x"89", x"27", x"80", x"82", x"81", +x"8A", x"89", x"07", x"80", x"41", x"82", x"81", x"C1", +x"8A", x"86", x"99", x"95", x"89", x"40", x"80", x"04", +x"80", x"40", x"80", x"04", x"80", x"1B", x"80", x"82", +x"81", x"8A", x"89", x"27", x"80", x"82", x"81", x"8A", +x"89", x"48", x"80", x"64", x"80", x"61", x"82", x"81", +x"C1", x"8A", x"86", x"99", x"95", x"89", x"62", x"80", +x"12", x"80", x"4A", x"80", x"40", x"82", x"81", x"8A", +x"86", x"99", x"95", x"89", x"0C", x"82", x"81", x"85", +x"4C", x"82", x"81", x"89", x"0E", x"80", x"4E", x"80", +x"0F", x"80", x"40", x"80", x"64", x"80", x"42", x"80", +x"20", x"75", x"E8", x"B0", x"33", x"A2", x"00", x"86", +x"F4", x"86", x"F5", x"A0", x"00", x"8A", x"71", x"FE", +x"AA", x"90", x"06", x"E6", x"F4", x"D0", x"02", x"E6", +x"F5", x"20", x"F3", x"E8", x"20", x"8B", x"E8", x"90", +x"EC", x"20", x"F6", x"E7", x"A9", x"3D", x"20", x"F1", +x"FF", x"A5", x"F5", x"20", x"00", x"E8", x"A5", x"F4", +x"20", x"00", x"E8", x"8A", x"20", x"00", x"E8", x"18", +x"60", x"20", x"68", x"E8", x"B0", x"25", x"20", x"C3", +x"E8", x"90", x"33", x"A0", x"00", x"20", x"CD", x"E8", +x"90", x"1A", x"20", x"B5", x"E8", x"20", x"A7", x"E8", +x"B0", x"11", x"B1", x"F6", x"91", x"FE", x"20", x"D7", +x"E8", x"90", x"08", x"20", x"E5", x"E8", x"20", x"C3", +x"E8", x"B0", x"EF", x"60", x"B1", x"F4", x"91", x"FE", +x"20", x"A0", x"E8", x"F0", x"F6", x"20", x"8B", x"E8", +x"20", x"C3", x"E8", x"B0", x"EF", x"60", x"38", x"60", +x"20", x"75", x"E8", x"B0", x"1C", x"A0", x"00", x"20", +x"46", x"E8", x"90", x"09", x"C9", x"27", x"D0", x"EE", +x"BD", x"80", x"02", x"AA", x"8A", x"91", x"FE", x"AA", +x"20", x"F3", x"E8", x"20", x"8B", x"E8", x"90", x"F4", +x"18", x"60", x"20", x"7D", x"E8", x"A0", x"00", x"F0", +x"0D", x"BD", x"80", x"02", x"91", x"FE", x"D1", x"FE", +x"38", x"D0", x"2F", x"20", x"8B", x"E8", x"20", x"F6", +x"E7", x"20", x"17", x"E8", x"B1", x"FE", x"20", x"00", +x"E8", x"20", x"DC", x"E7", x"20", x"57", x"E6", x"A2", +x"00", x"20", x"46", x"E8", x"90", x"DE", x"C9", x"0D", +x"F0", x"E1", x"C9", x"27", x"F0", x"D3", x"C9", x"2D", +x"18", x"D0", x"07", x"20", x"E5", x"E8", x"18", x"90", +x"D5", x"18", x"60", x"20", x"7D", x"E8", x"20", x"F6", +x"E7", x"20", x"17", x"E8", x"20", x"57", x"E6", x"A2", +x"00", x"20", x"33", x"E6", x"20", x"C2", x"EB", x"90", +x"ED", x"60", x"A9", x"FD", x"85", x"FC", x"A0", x"04", +x"BD", x"80", x"02", x"E8", x"0A", x"0A", x"0A", x"0A", +x"66", x"F5", x"66", x"F4", x"88", x"10", x"F8", x"E6", +x"FC", x"30", x"EB", x"F0", x"F2", x"20", x"33", x"E6", +x"A9", x"80", x"D0", x"02", x"05", x"F8", x"85", x"F8", +x"20", x"40", x"E8", x"90", x"18", x"C9", x"23", x"D0", +x"04", x"A9", x"40", x"D0", x"EF", x"C9", x"28", x"D0", +x"04", x"A9", x"10", x"D0", x"E7", x"C9", x"27", x"D0", +x"30", x"BD", x"80", x"02", x"E8", x"85", x"E4", x"E6", +x"F8", x"20", x"40", x"E8", x"B0", x"07", x"85", x"E5", +x"E6", x"F8", x"20", x"40", x"E8", x"C9", x"21", x"D0", +x"08", x"A9", x"08", x"05", x"F8", x"85", x"F8", x"D0", +x"10", x"C9", x"22", x"D0", x"04", x"A9", x"04", x"D0", +x"F2", x"C9", x"2C", x"F0", x"E5", x"C9", x"29", x"F0", +x"E1", x"A2", x"D0", x"CA", x"F0", x"43", x"BD", x"00", +x"EA", x"30", x"F8", x"C5", x"F5", x"D0", x"F4", x"BD", +x"30", x"E9", x"C5", x"F4", x"D0", x"ED", x"E8", x"BD", +x"00", x"EA", x"10", x"2D", x"C5", x"F8", x"F0", x"10", +x"29", x"20", x"F0", x"F2", x"A5", x"E5", x"38", x"E9", +x"02", x"38", x"E5", x"FE", x"85", x"E4", x"A9", x"01", +x"29", x"03", x"48", x"A0", x"00", x"BD", x"30", x"E9", +x"91", x"FE", x"68", x"AA", x"18", x"20", x"8B", x"E8", +x"CA", x"30", x"07", x"B5", x"E4", x"91", x"FE", x"90", +x"F4", x"38", x"60", x"FF", x"FF", x"FF", x"FF", x"FF", +x"20", x"75", x"E8", x"90", x"14", x"A2", x"0C", x"8A", +x"48", x"20", x"F6", x"E7", x"20", x"A9", x"EC", x"20", +x"8B", x"E8", x"68", x"AA", x"CA", x"D0", x"F0", x"18", +x"60", x"20", x"F6", x"E7", x"20", x"A9", x"EC", x"20", +x"F3", x"E8", x"20", x"8B", x"E8", x"90", x"F2", x"18", +x"60", x"20", x"17", x"E8", x"A0", x"00", x"B1", x"FE", +x"A0", x"80", x"84", x"F8", x"A2", x"D0", x"CA", x"F0", +x"0D", x"DD", x"30", x"E9", x"D0", x"F8", x"BC", x"00", +x"EA", x"10", x"F3", x"84", x"F8", x"CA", x"BD", x"00", +x"EA", x"30", x"FA", x"85", x"F5", x"BD", x"30", x"E9", +x"85", x"F4", x"98", x"29", x"03", x"AA", x"A0", x"FF", +x"C8", x"B1", x"FE", x"20", x"00", x"E8", x"CA", x"10", +x"F7", x"C8", x"20", x"E4", x"E7", x"C0", x"04", x"D0", +x"F8", x"88", x"A2", x"05", x"A9", x"02", x"46", x"F5", +x"66", x"F4", x"2A", x"CA", x"D0", x"F8", x"20", x"F1", +x"FF", x"88", x"D0", x"EE", x"20", x"DC", x"E7", x"A5", +x"F8", x"0A", x"F0", x"A3", x"10", x"04", x"A9", x"23", +x"D0", x"08", x"29", x"20", x"F0", x"02", x"A9", x"08", +x"09", x"20", x"20", x"F1", x"FF", x"A5", x"F8", x"C9", +x"A1", x"D0", x"1D", x"20", x"8B", x"E8", x"B1", x"FE", +x"A8", x"38", x"65", x"FE", x"48", x"A6", x"FF", x"98", +x"10", x"03", x"B0", x"04", x"CA", x"90", x"01", x"E8", +x"8A", x"20", x"03", x"E8", x"68", x"4C", x"03", x"E8", +x"29", x"03", x"A8", x"B1", x"FE", x"20", x"03", x"E8", +x"20", x"8B", x"E8", x"88", x"88", x"F0", x"F4", x"A2", +x"58", x"A5", x"F8", x"29", x"1C", x"F0", x"22", x"0A", +x"0A", x"0A", x"0A", x"F0", x"0B", x"B0", x"04", x"10", +x"0E", x"30", x"0D", x"10", x"07", x"20", x"68", x"ED", +x"A9", x"29", x"D0", x"0A", x"20", x"60", x"ED", x"E8", +x"A9", x"2C", x"20", x"F1", x"FF", x"8A", x"4C", x"F1", +x"FF", x"18", x"60", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"A5", x"7B", x"85", x"FE", x"A5", x"7C", x"85", x"FF", +x"A9", x"00", x"85", x"F4", x"A9", x"04", x"85", x"F5", +x"20", x"B5", x"E8", x"E6", x"FE", x"E6", x"FF", x"A9", +x"60", x"A2", x"00", x"A0", x"14", x"20", x"B7", x"E7", +x"8D", x"00", x"88", x"CA", x"D0", x"F5", x"A8", x"88", +x"98", x"D0", x"F0", x"A0", x"08", x"20", x"DC", x"ED", +x"A5", x"FE", x"20", x"D8", x"ED", x"A5", x"FF", x"20", +x"D8", x"ED", x"20", x"D7", x"ED", x"20", x"D7", x"ED", +x"B1", x"F4", x"A2", x"07", x"A0", x"07", x"20", x"DC", +x"ED", x"E6", x"F4", x"D0", x"02", x"E6", x"F5", x"C6", +x"FE", x"D0", x"EA", x"C6", x"FF", x"D0", x"E9", x"60", +x"A2", x"07", x"A0", x"09", x"20", x"B7", x"E7", x"6A", +x"B0", x"05", x"8D", x"00", x"88", x"90", x"0D", x"A0", +x"0A", x"20", x"B7", x"E7", x"8D", x"00", x"88", x"A0", +x"09", x"20", x"B7", x"E7", x"A0", x"0A", x"20", x"B7", +x"E7", x"8D", x"00", x"88", x"CA", x"10", x"DB", x"60", +x"E8", x"F0", x"05", x"2C", x"FF", x"87", x"70", x"F8", +x"60", x"E8", x"F0", x"05", x"2C", x"FF", x"87", x"50", +x"F8", x"60", x"A0", x"08", x"20", x"1C", x"EE", x"6A", +x"88", x"D0", x"F9", x"60", x"A2", x"00", x"2C", x"FF", +x"87", x"50", x"08", x"20", x"00", x"EE", x"20", x"09", +x"EE", x"70", x"06", x"20", x"09", x"EE", x"20", x"00", +x"EE", x"E0", x"33", x"60", x"A2", x"00", x"2C", x"FF", +x"87", x"50", x"06", x"20", x"00", x"EE", x"E0", x"19", +x"60", x"20", x"09", x"EE", x"E0", x"19", x"60", x"20", +x"34", x"EE", x"90", x"FB", x"E0", x"33", x"B0", x"F7", +x"A0", x"0A", x"20", x"34", x"EE", x"90", x"F0", x"88", +x"D0", x"F8", x"20", x"34", x"EE", x"B0", x"FB", x"20", +x"34", x"EE", x"B0", x"E3", x"60", x"A0", x"FF", x"A9", +x"03", x"84", x"7B", x"85", x"7C", x"20", x"47", x"EE", +x"20", x"12", x"EE", x"85", x"FE", x"20", x"12", x"EE", +x"85", x"FF", x"20", x"12", x"EE", x"E6", x"7B", x"D0", +x"02", x"E6", x"7C", x"91", x"7B", x"C6", x"FE", x"D0", +x"F1", x"C6", x"FF", x"D0", x"ED", x"60", x"C9", x"10", +x"90", x"07", x"29", x"0F", x"09", x"70", x"85", x"E1", +x"60", x"09", x"60", x"85", x"E1", x"60", x"C9", x"10", +x"B0", x"07", x"29", x"0F", x"09", x"60", x"85", x"E7", +x"60", x"29", x"0F", x"09", x"70", x"85", x"E7", x"60", +x"A2", x"23", x"BD", x"9C", x"E6", x"9D", x"00", x"02", +x"CA", x"10", x"F7", x"A9", x"00", x"8D", x"43", x"02", +x"60", x"2C", x"0E", x"02", x"10", x"03", x"49", x"FF", +x"60", x"24", x"FC", x"30", x"F9", x"60", x"FF", x"FF", +x"20", x"75", x"E8", x"90", x"03", x"20", x"49", x"EF", +x"A0", x"00", x"20", x"F6", x"E7", x"20", x"17", x"E8", +x"A2", x"FF", x"E8", x"E0", x"05", x"B0", x"0E", x"B1", +x"FE", x"20", x"00", x"E8", x"20", x"F3", x"E8", x"20", +x"8B", x"E8", x"90", x"EE", x"E8", x"A5", x"FE", x"48", +x"86", x"FE", x"38", x"E5", x"FE", x"85", x"FE", x"A5", +x"FF", x"48", x"E9", x"00", x"85", x"FF", x"20", x"40", +x"EF", x"E8", x"E0", x"06", x"90", x"F8", x"CA", x"F0", +x"1B", x"B1", x"FE", x"C9", x"20", x"90", x"04", x"C9", +x"80", x"90", x"02", x"A9", x"2E", x"20", x"F1", x"FF", +x"20", x"F3", x"E8", x"20", x"8B", x"E8", x"90", x"E6", +x"68", x"68", x"18", x"60", x"20", x"B0", x"E5", x"C9", +x"71", x"F0", x"F5", x"C9", x"0D", x"F0", x"F5", x"68", +x"85", x"FF", x"68", x"85", x"FE", x"4C", x"DA", x"EE", +x"20", x"DC", x"E7", x"20", x"DC", x"E7", x"4C", x"DC", +x"E7", x"A5", x"FE", x"18", x"69", x"04", x"85", x"F6", +x"A5", x"FF", x"69", x"00", x"85", x"F7", x"60", x"20", +x"7D", x"E8", x"B0", x"FA", x"90", x"58", x"20", x"0C", +x"DB", x"18", x"60", x"20", x"9D", x"F9", x"D0", x"6A", +x"C9", x"01", x"F0", x"0E", x"A8", x"D0", x"53", x"20", +x"85", x"EF", x"D0", x"1E", x"20", x"3D", x"A7", x"4C", +x"C5", x"00", x"20", x"85", x"EF", x"D0", x"13", x"20", +x"B6", x"A4", x"4C", x"C5", x"00", x"AD", x"00", x"A4", +x"C9", x"A9", x"D0", x"05", x"AD", x"02", x"A4", x"C9", +x"8D", x"60", x"A9", x"EF", x"A0", x"9C", x"20", x"3B", +x"E6", x"4C", x"03", x"C0", x"0D", x"0A", x"0A", x"20", +x"43", x"52", x"54", x"20", x"4E", x"4F", x"54", x"20", +x"49", x"4D", x"50", x"4C", x"45", x"4D", x"45", x"4E", +x"54", x"45", x"44", x"0D", x"0A", x"04", x"20", x"F6", +x"E7", x"A5", x"FF", x"A6", x"FE", x"20", x"0C", x"DB", +x"18", x"60", x"C9", x"02", x"D0", x"0C", x"20", x"85", +x"EF", x"D0", x"C7", x"18", x"20", x"B6", x"A4", x"4C", +x"C5", x"00", x"A2", x"02", x"4C", x"59", x"C2", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"4C", x"6D", x"FA", x"4C", x"67", x"F0", x"4C", x"FF", +x"FF", x"4C", x"FF", x"FF", x"4C", x"A0", x"F3", x"4C", +x"87", x"F5", x"4C", x"73", x"F3", x"4C", x"0F", x"F5", +x"4C", x"D2", x"F5", x"4C", x"17", x"F4", x"4C", x"F6", +x"F0", x"4C", x"93", x"F8", x"4C", x"EE", x"FF", x"4C", +x"43", x"F4", x"4C", x"09", x"F3", x"4C", x"A1", x"F0", +x"4C", x"ED", x"F0", x"4C", x"90", x"F8", x"4C", x"B0", +x"F8", x"4C", x"57", x"F9", x"4C", x"82", x"F9", x"4C", +x"72", x"F1", x"4C", x"87", x"F1", x"4C", x"C4", x"F1", +x"4C", x"D6", x"FB", x"4C", x"D9", x"FB", x"4C", x"1F", +x"FC", x"20", x"C5", x"CC", x"20", x"C5", x"00", x"4C", +x"DC", x"D4", x"20", x"54", x"F0", x"86", x"E2", x"20", +x"51", x"F0", x"86", x"E3", x"4C", x"C5", x"00", x"20", +x"54", x"F0", x"86", x"E4", x"20", x"51", x"F0", x"86", +x"E5", x"20", x"8B", x"FE", x"20", x"C5", x"00", x"F0", +x"6D", x"20", x"51", x"F0", x"86", x"E4", x"4C", x"6C", +x"F0", x"20", x"5A", x"F0", x"20", x"69", x"FE", x"4C", +x"C5", x"00", x"20", x"5A", x"F0", x"20", x"51", x"F0", +x"86", x"F8", x"20", x"06", x"FF", x"4C", x"C5", x"00", +x"20", x"54", x"F0", x"8E", x"0A", x"02", x"4C", x"C5", +x"00", x"A9", x"00", x"8D", x"5A", x"02", x"20", x"ED", +x"F0", x"20", x"33", x"E6", x"C9", x"57", x"D0", x"03", +x"4C", x"03", x"C0", x"C9", x"43", x"D0", x"2F", x"A9", +x"14", x"8D", x"4F", x"02", x"A9", x"54", x"8D", x"66", +x"02", x"A9", x"FD", x"8D", x"5F", x"02", x"8D", x"61", +x"02", x"8D", x"63", x"02", x"8D", x"65", x"02", x"A9", +x"8F", x"8D", x"5E", x"02", x"A9", x"9D", x"8D", x"60", +x"02", x"A9", x"A1", x"8D", x"62", x"02", x"A9", x"AB", +x"8D", x"64", x"02", x"4C", x"00", x"C0", x"60", x"A9", +x"20", x"8D", x"40", x"02", x"60", x"20", x"E7", x"F0", +x"A9", x"20", x"8D", x"41", x"02", x"60", x"20", x"00", +x"C9", x"A5", x"81", x"85", x"14", x"A5", x"82", x"85", +x"15", x"20", x"36", x"C4", x"A0", x"02", x"B1", x"A7", +x"AA", x"C8", x"B1", x"A7", x"84", x"91", x"20", x"0C", +x"DB", x"A9", x"20", x"A4", x"91", x"29", x"7F", x"20", +x"51", x"F1", x"C8", x"B1", x"A7", x"D0", x"03", x"4C", +x"00", x"C9", x"10", x"F3", x"C9", x"C6", x"90", x"09", +x"20", x"85", x"F8", x"38", x"E9", x"C5", x"4C", x"37", +x"F1", x"20", x"7A", x"F8", x"38", x"E9", x"7F", x"AA", +x"84", x"91", x"A0", x"FF", x"CA", x"F0", x"07", x"C8", +x"B1", x"FE", x"10", x"FB", x"30", x"F6", x"C8", x"B1", +x"FE", x"30", x"C8", x"20", x"6C", x"C9", x"4C", x"46", +x"F1", x"20", x"6C", x"C9", x"98", x"38", x"65", x"A7", +x"85", x"A7", x"90", x"02", x"E6", x"A8", x"A0", x"FF", +x"84", x"91", x"C5", x"C6", x"D0", x"0B", x"A5", x"A8", +x"C5", x"C7", x"D0", x"05", x"A9", x"BF", x"20", x"6C", +x"C9", x"60", x"A2", x"0A", x"20", x"E3", x"E4", x"20", +x"B0", x"E5", x"90", x"09", x"F0", x"07", x"85", x"FC", +x"88", x"D0", x"EF", x"38", x"60", x"18", x"60", x"A4", +x"E9", x"B1", x"E6", x"60", x"8A", x"48", x"A2", x"00", +x"F0", x"04", x"8A", x"48", x"A2", x"05", x"A0", x"00", +x"B9", x"E6", x"00", x"9D", x"44", x"02", x"E8", x"C8", +x"C0", x"04", x"D0", x"F4", x"A8", x"68", x"AA", x"60", +x"8A", x"48", x"A2", x"00", x"F0", x"04", x"8A", x"48", +x"A2", x"05", x"A0", x"00", x"BD", x"44", x"02", x"99", +x"E6", x"00", x"E8", x"C8", x"C0", x"04", x"D0", x"F4", +x"A8", x"68", x"AA", x"60", x"C9", x"08", x"D0", x"1D", +x"2C", x"43", x"02", x"10", x"25", x"20", x"92", x"F1", +x"20", x"A8", x"F1", x"20", x"C2", x"E4", x"20", x"F2", +x"F1", x"20", x"8C", x"F1", x"20", x"C2", x"E4", x"20", +x"AE", x"F1", x"A9", x"08", x"60", x"C9", x"1F", x"D0", +x"18", x"2C", x"43", x"02", x"10", x"04", x"A9", x"08", +x"D0", x"25", x"A9", x"08", x"20", x"50", x"E7", x"A9", +x"20", x"20", x"50", x"E7", x"A9", x"08", x"4C", x"50", +x"E7", x"C9", x"0A", x"D0", x"18", x"2C", x"43", x"02", +x"30", x"0D", x"48", x"A9", x"FF", x"8D", x"43", x"02", +x"20", x"8C", x"F1", x"20", x"C2", x"E4", x"68", x"20", +x"50", x"E7", x"6C", x"16", x"02", x"C9", x"09", x"F0", +x"E4", x"C9", x"0B", x"F0", x"E0", x"C9", x"0D", x"D0", +x"15", x"2C", x"43", x"02", x"10", x"0D", x"48", x"20", +x"A8", x"F1", x"20", x"C2", x"E4", x"A9", x"00", x"8D", +x"43", x"02", x"68", x"4C", x"50", x"E7", x"C9", x"14", +x"F0", x"23", x"C9", x"20", x"90", x"F5", x"48", x"2C", +x"43", x"02", x"10", x"EE", x"20", x"92", x"F1", x"20", +x"A8", x"F1", x"20", x"C2", x"E4", x"68", x"48", x"20", +x"50", x"E7", x"20", x"8C", x"F1", x"20", x"C2", x"E4", +x"20", x"AE", x"F1", x"68", x"60", x"2C", x"43", x"02", +x"30", x"03", x"6C", x"16", x"02", x"20", x"92", x"F1", +x"20", x"A8", x"F1", x"20", x"C2", x"E4", x"20", x"8D", +x"F2", x"20", x"8C", x"F1", x"20", x"C2", x"E4", x"20", +x"AE", x"F1", x"A9", x"09", x"20", x"50", x"E7", x"AD", +x"48", x"02", x"F0", x"DE", x"60", x"8A", x"48", x"98", +x"48", x"AD", x"49", x"02", x"18", x"6D", x"4C", x"02", +x"69", x"20", x"85", x"F0", x"85", x"FC", x"AD", x"4A", +x"02", x"85", x"F1", x"A2", x"00", x"A9", x"20", x"8D", +x"48", x"02", x"E8", x"A9", x"20", x"8D", x"5D", x"02", +x"BD", x"00", x"02", x"85", x"FE", x"BD", x"04", x"02", +x"85", x"FF", x"A0", x"00", x"84", x"FA", x"A0", x"00", +x"B1", x"F0", x"A4", x"FA", x"D1", x"FE", x"F0", x"1E", +x"EE", x"48", x"02", x"2C", x"48", x"02", x"30", x"32", +x"A5", x"FC", x"85", x"F0", x"A5", x"FE", x"CE", x"5D", +x"02", x"F0", x"CF", x"18", x"69", x"08", x"85", x"FE", +x"90", x"D8", x"E6", x"FF", x"D0", x"D4", x"C8", x"84", +x"FA", x"C0", x"07", x"F0", x"0A", x"A5", x"F0", x"18", +x"69", x"20", x"85", x"F0", x"4C", x"BE", x"F2", x"AD", +x"48", x"02", x"20", x"50", x"E7", x"68", x"A8", x"68", +x"AA", x"60", x"A9", x"00", x"8D", x"48", x"02", x"F0", +x"F4", x"24", x"10", x"30", x"12", x"48", x"C9", x"20", +x"90", x"0C", x"A5", x"11", x"C5", x"12", x"D0", x"04", +x"A9", x"00", x"85", x"11", x"E6", x"11", x"68", x"29", +x"FF", x"60", x"A9", x"20", x"A2", x"09", x"9D", x"50", +x"02", x"CA", x"10", x"FA", x"20", x"C5", x"00", x"D0", +x"03", x"4C", x"92", x"FA", x"20", x"71", x"F6", x"CA", +x"F0", x"0A", x"B1", x"6A", x"99", x"50", x"02", x"C8", +x"C0", x"0A", x"D0", x"F3", x"4C", x"C5", x"00", x"86", +x"FA", x"A2", x"03", x"A9", x"1B", x"9D", x"80", x"02", +x"CA", x"10", x"FA", x"A9", x"42", x"8D", x"84", x"02", +x"A2", x"05", x"BD", x"4B", x"02", x"9D", x"80", x"02", +x"E8", x"E0", x"0F", x"D0", x"F5", x"AD", x"4E", x"02", +x"8D", x"8F", x"02", x"A9", x"10", x"8D", x"4D", x"02", +x"A6", x"FA", x"60", x"8A", x"48", x"AD", x"66", x"02", +x"8D", x"41", x"02", x"20", x"C5", x"00", x"20", x"22", +x"F3", x"BA", x"9D", x"04", x"01", x"A9", x"00", x"8D", +x"4E", x"02", x"20", x"47", x"F3", x"AD", x"41", x"02", +x"C9", x"44", x"D0", x"09", x"38", x"20", x"E1", x"F3", +x"90", x"03", x"4C", x"60", x"FD", x"68", x"AA", x"60", +x"85", x"FC", x"48", x"8A", x"48", x"98", x"48", x"20", +x"40", x"C6", x"A5", x"FC", x"AE", x"4D", x"02", x"9D", +x"80", x"02", x"EE", x"4D", x"02", x"D0", x"11", x"20", +x"D1", x"F3", x"EE", x"4E", x"02", x"AD", x"4E", x"02", +x"8D", x"8F", x"02", x"A9", x"10", x"8D", x"4D", x"02", +x"68", x"A8", x"68", x"AA", x"20", x"C5", x"00", x"68", +x"60", x"AD", x"41", x"02", x"C9", x"44", x"D0", x"0C", +x"20", x"E0", x"F3", x"90", x"F3", x"4C", x"60", x"FD", +x"18", x"6C", x"5E", x"02", x"AD", x"4F", x"02", x"A2", +x"00", x"A0", x"14", x"20", x"B7", x"E7", x"8D", x"00", +x"88", x"CA", x"D0", x"F5", x"A8", x"88", x"98", x"D0", +x"F0", x"A0", x"08", x"20", x"DC", x"ED", x"EA", x"EA", +x"EA", x"20", x"D7", x"ED", x"AE", x"4D", x"02", x"BD", +x"80", x"02", x"A2", x"07", x"A0", x"06", x"20", x"DC", +x"ED", x"EE", x"4D", x"02", x"D0", x"E8", x"60", x"8A", +x"48", x"AE", x"4D", x"02", x"A9", x"20", x"9D", x"80", +x"02", x"E8", x"D0", x"FA", x"8E", x"4D", x"02", x"20", +x"D1", x"F3", x"AD", x"41", x"02", x"C9", x"44", x"D0", +x"0B", x"20", x"39", x"F4", x"90", x"06", x"4C", x"60", +x"FD", x"6C", x"60", x"02", x"20", x"ED", x"F0", x"68", +x"AA", x"18", x"60", x"48", x"AD", x"40", x"02", x"20", +x"D8", x"C6", x"F0", x"04", x"68", x"4C", x"F1", x"FF", +x"68", x"60", x"8A", x"48", x"A2", x"00", x"BD", x"50", +x"02", x"20", x"F1", x"FF", x"E8", x"E0", x"0A", x"D0", +x"F5", x"68", x"AA", x"A9", x"22", x"4C", x"F1", x"FF", +x"8A", x"48", x"AD", x"40", x"02", x"C9", x"44", x"F0", +x"43", x"A2", x"00", x"BD", x"85", x"02", x"20", x"F1", +x"FF", x"E8", x"E0", x"0A", x"D0", x"F5", x"A9", x"22", +x"20", x"F1", x"FF", x"A9", x"20", x"20", x"F1", x"FF", +x"AD", x"84", x"02", x"20", x"F1", x"FF", x"AE", x"8F", +x"02", x"AD", x"40", x"02", x"48", x"20", x"E7", x"F0", +x"A9", x"00", x"20", x"0C", x"DB", x"68", x"8D", x"40", +x"02", x"AD", x"84", x"02", x"C9", x"4F", x"D0", x"0C", +x"AD", x"91", x"02", x"20", x"00", x"E8", x"AD", x"90", +x"02", x"20", x"03", x"E8", x"68", x"AA", x"60", x"A2", +x"05", x"BD", x"4B", x"02", x"C9", x"20", x"F0", x"0A", +x"DD", x"80", x"02", x"D0", x"10", x"E8", x"E0", x"0F", +x"D0", x"EF", x"08", x"AD", x"8F", x"02", x"D0", x"03", +x"28", x"18", x"60", x"28", x"38", x"60", x"AD", x"40", +x"02", x"C9", x"44", x"F0", x"F8", x"B9", x"24", x"F6", +x"F0", x"F3", x"20", x"F1", x"FF", x"C8", x"D0", x"F5", +x"AD", x"40", x"02", x"C9", x"44", x"D0", x"08", x"20", +x"F8", x"F4", x"90", x"03", x"4C", x"60", x"FD", x"60", +x"38", x"6C", x"62", x"02", x"AD", x"40", x"02", x"C9", +x"44", x"D0", x"09", x"18", x"20", x"F9", x"F4", x"90", +x"EE", x"4C", x"60", x"FD", x"4C", x"F1", x"F5", x"AD", +x"66", x"02", x"8D", x"40", x"02", x"8A", x"48", x"98", +x"48", x"20", x"C5", x"00", x"20", x"22", x"F3", x"20", +x"E8", x"F4", x"A9", x"42", x"48", x"A0", x"00", x"AD", +x"40", x"02", x"C9", x"44", x"F0", x"06", x"20", x"D6", +x"F4", x"20", x"52", x"F4", x"20", x"FC", x"F4", x"20", +x"B7", x"F4", x"F0", x"0B", x"A0", x"1C", x"20", x"D6", +x"F4", x"20", x"68", x"F4", x"4C", x"34", x"F5", x"90", +x"1E", x"A0", x"1C", x"20", x"D6", x"F4", x"20", x"68", +x"F4", x"68", x"48", x"CD", x"84", x"02", x"D0", x"DC", +x"A0", x"2A", x"20", x"D6", x"F4", x"20", x"EE", x"FF", +x"C9", x"0D", x"F0", x"D0", x"4C", x"58", x"C6", x"68", +x"48", x"CD", x"84", x"02", x"D0", x"CE", x"68", x"A0", +x"0E", x"20", x"D6", x"F4", x"20", x"68", x"F4", x"A9", +x"10", x"8D", x"4D", x"02", x"A9", x"01", x"8D", x"4E", +x"02", x"68", x"A8", x"68", x"AA", x"18", x"60", x"8A", +x"48", x"98", x"48", x"AE", x"4D", x"02", x"F0", x"10", +x"BD", x"80", x"02", x"EE", x"4D", x"02", x"85", x"FA", +x"68", x"A8", x"68", x"AA", x"A5", x"FA", x"18", x"60", +x"20", x"FC", x"F4", x"A0", x"1C", x"20", x"D6", x"F4", +x"20", x"68", x"F4", x"20", x"B7", x"F4", x"F0", x"0F", +x"A0", x"39", x"20", x"D6", x"F4", x"20", x"DE", x"F5", +x"20", x"ED", x"F0", x"A9", x"1A", x"D0", x"D7", x"AD", +x"8F", x"02", x"CD", x"4E", x"02", x"D0", x"E9", x"EE", +x"4E", x"02", x"A9", x"10", x"8D", x"4D", x"02", x"4C", +x"8B", x"F5", x"20", x"DE", x"F5", x"20", x"ED", x"F0", +x"20", x"00", x"C9", x"4C", x"00", x"C9", x"AD", x"40", +x"02", x"C9", x"44", x"D0", x"08", x"20", x"EE", x"F5", +x"90", x"03", x"4C", x"60", x"FD", x"60", x"6C", x"64", +x"02", x"20", x"40", x"C6", x"A9", x"04", x"8D", x"4D", +x"02", x"A0", x"20", x"20", x"1C", x"EE", x"90", x"F1", +x"88", x"D0", x"F8", x"20", x"47", x"EE", x"A9", x"04", +x"85", x"FA", x"20", x"12", x"EE", x"C9", x"1B", x"D0", +x"E0", x"C6", x"FA", x"D0", x"F5", x"20", x"12", x"EE", +x"AE", x"4D", x"02", x"9D", x"80", x"02", x"EE", x"4D", +x"02", x"D0", x"F2", x"60", x"0D", x"0A", x"53", x"45", +x"41", x"52", x"43", x"48", x"49", x"4E", x"47", x"20", +x"22", x"00", x"0D", x"0A", x"4C", x"4F", x"41", x"44", +x"49", x"4E", x"47", x"20", x"20", x"20", x"22", x"00", +x"0D", x"0A", x"20", x"20", x"20", x"20", x"20", x"20", +x"20", x"20", x"20", x"20", x"22", x"00", x"0D", x"0A", +x"0A", x"52", x"45", x"57", x"49", x"4E", x"44", x"20", +x"54", x"41", x"50", x"45", x"00", x"0D", x"0A", x"0A", +x"4C", x"4F", x"41", x"44", x"49", x"4E", x"47", x"20", +x"45", x"52", x"52", x"4F", x"52", x"0D", x"0A", x"0A", +x"00", x"20", x"7F", x"CB", x"20", x"70", x"CB", x"20", +x"E4", x"D3", x"AA", x"A0", x"00", x"E8", x"60", x"20", +x"71", x"F6", x"CA", x"F0", x"08", x"B1", x"6A", x"99", +x"80", x"02", x"C8", x"D0", x"F5", x"A9", x"00", x"99", +x"80", x"02", x"20", x"C5", x"00", x"20", x"51", x"F0", +x"8E", x"5B", x"02", x"20", x"51", x"F0", x"8A", x"29", +x"03", x"6A", x"6A", x"6A", x"8D", x"5C", x"02", x"A2", +x"00", x"AD", x"0A", x"02", x"48", x"BD", x"80", x"02", +x"F0", x"08", x"20", x"C6", x"F6", x"B0", x"0A", x"E8", +x"D0", x"F3", x"68", x"8D", x"0A", x"02", x"4C", x"C5", +x"00", x"A2", x"08", x"4C", x"59", x"C2", x"29", x"7F", +x"85", x"FC", x"C9", x"20", x"B0", x"02", x"38", x"60", +x"8A", x"48", x"98", x"48", x"A5", x"FC", x"A8", x"2A", +x"2A", x"2A", x"2A", x"29", x"03", x"AA", x"BD", x"00", +x"02", x"D0", x"03", x"BD", x"04", x"02", x"85", x"FF", +x"98", x"0A", x"0A", x"0A", x"85", x"FE", x"A5", x"E2", +x"8D", x"50", x"02", x"A5", x"E3", x"8D", x"51", x"02", +x"A0", x"07", x"AD", x"5B", x"02", x"8D", x"52", x"02", +x"2C", x"5C", x"02", x"50", x"08", x"A5", x"E3", x"8D", +x"53", x"02", x"4C", x"12", x"F7", x"A5", x"E2", x"8D", +x"53", x"02", x"B1", x"FE", x"A2", x"08", x"48", x"6A", +x"90", x"06", x"20", x"75", x"F7", x"4C", x"23", x"F7", +x"20", x"79", x"F7", x"68", x"6A", x"CA", x"D0", x"EE", +x"AD", x"53", x"02", x"2C", x"5C", x"02", x"50", x"10", +x"08", x"85", x"E3", x"28", x"10", x"05", x"E6", x"E2", +x"4C", x"4D", x"F7", x"C6", x"E2", x"4C", x"4D", x"F7", +x"08", x"85", x"E2", x"28", x"10", x"05", x"C6", x"E3", +x"4C", x"4D", x"F7", x"E6", x"E3", x"CE", x"52", x"02", +x"D0", x"C0", x"88", x"10", x"A5", x"AD", x"50", x"02", +x"85", x"E2", x"AD", x"51", x"02", x"85", x"E3", x"AE", +x"5B", x"02", x"F0", x"0B", x"A0", x"08", x"20", x"91", +x"F7", x"88", x"D0", x"FA", x"CA", x"D0", x"F5", x"68", +x"A8", x"68", x"AA", x"18", x"60", x"A9", x"00", x"F0", +x"02", x"A9", x"01", x"8D", x"0A", x"02", x"8A", x"48", +x"AE", x"5B", x"02", x"F0", x"09", x"20", x"69", x"FE", +x"20", x"91", x"F7", x"CA", x"D0", x"F7", x"68", x"AA", +x"60", x"2C", x"5C", x"02", x"30", x"05", x"70", x"0B", +x"E6", x"E2", x"60", x"70", x"03", x"C6", x"E2", x"60", +x"C6", x"E3", x"60", x"E6", x"E3", x"60", x"4D", x"4F", +x"44", x"C5", x"4D", x"4F", x"56", x"C5", x"45", x"58", +x"49", x"D4", x"4C", x"4E", x"CB", x"4C", x"45", x"54", +x"54", x"45", x"D2", x"44", x"4D", x"45", x"CD", x"4C", +x"4D", x"45", x"CD", x"49", x"4E", x"4B", x"45", x"D9", +x"4F", x"50", x"45", x"4E", x"D7", x"57", x"52", x"49", +x"54", x"C5", x"43", x"4C", x"4F", x"53", x"45", x"D7", +x"4F", x"50", x"45", x"4E", x"C7", x"43", x"4C", x"4F", +x"53", x"45", x"C7", x"53", x"4F", x"55", x"4E", x"C4", +x"43", x"4C", x"D3", x"56", x"44", x"D5", x"52", x"41", +x"54", x"C5", x"43", x"55", x"D2", x"54", x"47", x"41", +x"D0", x"53", x"43", x"52", x"45", x"45", x"4E", x"A4", +x"44", x"4F", x"D4", x"43", x"52", x"D4", x"49", x"4E", +x"D6", x"53", x"4D", x"4F", x"56", x"C5", x"43", x"49", +x"D2", x"50", x"4C", x"4F", x"D4", x"50", x"54", x"D2", +x"44", x"4F", x"53", x"C9", x"44", x"4F", x"D3", x"43", +x"4F", x"4D", x"CD", x"41", x"54", x"45", x"4F", x"C6", +x"54", x"41", x"50", x"C5", x"44", x"49", x"53", x"CB", +x"43", x"48", x"41", x"D2", x"00", x"00", x"97", x"F0", +x"59", x"F0", x"FB", x"FD", x"8D", x"F9", x"7E", x"F6", +x"AE", x"F9", x"01", x"FA", x"A7", x"F9", x"4F", x"FA", +x"70", x"FA", x"C5", x"FA", x"DD", x"FA", x"01", x"FB", +x"09", x"FB", x"33", x"FB", x"42", x"FB", x"81", x"FB", +x"A2", x"FB", x"BC", x"FB", x"EA", x"FB", x"02", x"FC", +x"62", x"EF", x"2F", x"FC", x"3F", x"FC", x"89", x"F0", +x"80", x"F0", x"70", x"FB", x"C5", x"FB", x"CD", x"FB", +x"67", x"FD", x"C5", x"FD", x"53", x"FD", x"5B", x"FD", +x"D5", x"FD", x"48", x"A9", x"90", x"85", x"FE", x"A9", +x"C0", x"85", x"FF", x"68", x"60", x"48", x"A9", x"A6", +x"85", x"FE", x"A9", x"F7", x"85", x"FF", x"68", x"60", +x"D0", x"01", x"60", x"E9", x"80", x"B0", x"03", x"4C", +x"05", x"C6", x"C9", x"46", x"B0", x"03", x"4C", x"07", +x"C6", x"E9", x"46", x"0A", x"A8", x"B9", x"37", x"F8", +x"48", x"B9", x"36", x"F8", x"48", x"4C", x"BF", x"00", +x"20", x"7A", x"F8", x"A9", x"00", x"8D", x"5B", x"02", +x"20", x"C5", x"F8", x"20", x"85", x"F8", x"A9", x"80", +x"8D", x"5B", x"02", x"E6", x"C6", x"A6", x"C6", x"A0", +x"04", x"84", x"0C", x"B5", x"00", x"30", x"41", x"C9", +x"20", x"F0", x"3D", x"85", x"07", x"C9", x"22", x"F0", +x"5B", x"24", x"0C", x"70", x"33", x"C9", x"3F", x"D0", +x"04", x"A9", x"97", x"D0", x"2B", x"C9", x"30", x"90", +x"04", x"C9", x"3C", x"90", x"23", x"84", x"B9", x"A0", +x"00", x"84", x"08", x"88", x"86", x"C6", x"CA", x"C8", +x"E8", x"B5", x"00", x"38", x"F1", x"FE", x"F0", x"F7", +x"C9", x"80", x"D0", x"37", x"05", x"08", x"2C", x"5B", +x"02", x"10", x"03", x"18", x"69", x"46", x"A4", x"B9", +x"E8", x"C8", x"99", x"11", x"00", x"B9", x"11", x"00", +x"F0", x"32", x"38", x"E9", x"3A", x"F0", x"04", x"C9", +x"49", x"D0", x"02", x"85", x"0C", x"38", x"E9", x"54", +x"D0", x"A1", x"85", x"07", x"B5", x"00", x"F0", x"E0", +x"C5", x"07", x"F0", x"DC", x"C8", x"99", x"11", x"00", +x"E8", x"D0", x"F1", x"A6", x"C6", x"E6", x"08", x"B1", +x"FE", x"10", x"11", x"C8", x"B1", x"FE", x"D0", x"B1", +x"B5", x"00", x"10", x"C2", x"99", x"13", x"00", x"A9", +x"15", x"85", x"C6", x"60", x"C8", x"D0", x"E8", x"38", +x"E9", x"7F", x"C9", x"47", x"B0", x"03", x"4C", x"41", +x"C5", x"E9", x"46", x"AA", x"84", x"91", x"A0", x"FF", +x"CA", x"F0", x"08", x"C8", x"B9", x"A6", x"F7", x"10", +x"FA", x"30", x"F5", x"C8", x"B9", x"A6", x"F7", x"10", +x"03", x"4C", x"0C", x"C5", x"20", x"6C", x"C9", x"4C", +x"73", x"F9", x"C9", x"60", x"F0", x"07", x"C9", x"80", +x"90", x"02", x"18", x"60", x"38", x"60", x"20", x"9D", +x"F9", x"20", x"97", x"F9", x"4C", x"C5", x"00", x"6C", +x"14", x"00", x"20", x"C5", x"CC", x"20", x"6B", x"CB", +x"20", x"36", x"D5", x"A5", x"14", x"A4", x"15", x"60", +x"A9", x"00", x"85", x"FA", x"4C", x"AD", x"C9", x"48", +x"A9", x"54", x"8D", x"41", x"02", x"68", x"20", x"22", +x"F3", x"20", x"47", x"F3", x"A9", x"4F", x"8D", x"84", +x"02", x"20", x"9A", x"F9", x"85", x"F4", x"8D", x"90", +x"02", x"84", x"F5", x"8C", x"91", x"02", x"20", x"9A", +x"F9", x"85", x"FE", x"8D", x"92", x"02", x"84", x"FF", +x"8C", x"93", x"02", x"A9", x"00", x"8D", x"8F", x"02", +x"A2", x"14", x"A9", x"20", x"9D", x"80", x"02", x"E8", +x"D0", x"FA", x"8E", x"4D", x"02", x"20", x"E4", x"F3", +x"AD", x"4F", x"02", x"E6", x"FE", x"E6", x"FF", x"20", +x"99", x"ED", x"A9", x"20", x"8D", x"41", x"02", x"4C", +x"C5", x"00", x"48", x"A9", x"54", x"8D", x"40", x"02", +x"68", x"20", x"22", x"F3", x"A0", x"4F", x"20", x"49", +x"FA", x"A5", x"7B", x"48", x"A5", x"7C", x"48", x"AD", +x"90", x"02", x"38", x"E9", x"01", x"85", x"7B", x"AD", +x"91", x"02", x"E9", x"00", x"85", x"7C", x"20", x"C5", +x"00", x"F0", x"0D", x"20", x"9A", x"F9", x"38", x"E9", +x"01", x"85", x"7B", x"98", x"E9", x"00", x"85", x"7C", +x"20", x"6D", x"EE", x"A9", x"20", x"8D", x"40", x"02", +x"68", x"85", x"7C", x"68", x"85", x"7B", x"4C", x"C5", +x"00", x"8A", x"48", x"98", x"48", x"4C", x"24", x"F5", +x"20", x"22", x"F3", x"A9", x"00", x"8D", x"4E", x"02", +x"A9", x"80", x"8D", x"5A", x"02", x"20", x"47", x"F3", +x"A9", x"44", x"8D", x"84", x"02", x"A9", x"54", x"8D", +x"41", x"02", x"4C", x"C5", x"00", x"A9", x"00", x"F0", +x"06", x"C9", x"23", x"D0", x"0F", x"A9", x"80", x"A0", +x"00", x"20", x"42", x"B0", x"A2", x"1C", x"20", x"06", +x"B0", x"B0", x"0F", x"60", x"AD", x"41", x"02", x"C9", +x"54", x"D0", x"07", x"2C", x"5A", x"02", x"70", x"02", +x"30", x"08", x"20", x"ED", x"F0", x"A2", x"02", x"4C", +x"59", x"C2", x"20", x"C5", x"00", x"D0", x"03", x"4C", +x"00", x"C9", x"20", x"7F", x"CB", x"24", x"0A", x"30", +x"06", x"20", x"1C", x"DB", x"20", x"C5", x"D1", x"20", +x"4D", x"C9", x"20", x"C5", x"00", x"F0", x"E8", x"C9", +x"2C", x"D0", x"D7", x"20", x"A0", x"F3", x"20", x"BF", +x"00", x"D0", x"DF", x"4C", x"00", x"C9", x"2C", x"5A", +x"02", x"10", x"C7", x"A9", x"1A", x"20", x"A0", x"F3", +x"20", x"A0", x"F3", x"A9", x"00", x"8D", x"5A", x"02", +x"20", x"17", x"F4", x"4C", x"C5", x"00", x"20", x"22", +x"F3", x"A9", x"54", x"8D", x"40", x"02", x"A0", x"44", +x"20", x"49", x"FA", x"A9", x"40", x"8D", x"5A", x"02", +x"4C", x"C5", x"00", x"2C", x"5A", x"02", x"50", x"9A", +x"30", x"98", x"20", x"87", x"F5", x"C9", x"1A", x"F0", +x"01", x"60", x"A9", x"00", x"8D", x"5A", x"02", x"4C", +x"D2", x"F5", x"20", x"54", x"F0", x"8E", x"5B", x"02", +x"20", x"51", x"F0", x"8E", x"5C", x"02", x"AE", x"5B", +x"02", x"A0", x"00", x"F0", x"0B", x"AD", x"00", x"88", +x"88", x"D0", x"05", x"CE", x"5C", x"02", x"F0", x"09", +x"CA", x"D0", x"F5", x"AE", x"5B", x"02", x"4C", x"1D", +x"FB", x"4C", x"C5", x"00", x"A9", x"0C", x"20", x"F1", +x"FF", x"A9", x"00", x"85", x"11", x"20", x"9D", x"E3", +x"4C", x"C5", x"00", x"20", x"C5", x"00", x"F0", x"17", +x"20", x"54", x"F0", x"86", x"EC", x"20", x"51", x"F0", +x"86", x"ED", x"20", x"51", x"F0", x"86", x"EA", x"20", +x"51", x"F0", x"86", x"EB", x"4C", x"C5", x"00", x"20", +x"64", x"FB", x"D0", x"D0", x"A9", x"00", x"85", x"EC", +x"85", x"EA", x"A9", x"1F", x"85", x"ED", x"85", x"EB", +x"60", x"20", x"54", x"F0", x"8A", x"C9", x"02", x"B0", +x"10", x"18", x"6A", x"6A", x"8D", x"10", x"02", x"4C", +x"C5", x"00", x"20", x"54", x"F0", x"E0", x"04", x"90", +x"05", x"A2", x"08", x"4C", x"59", x"C2", x"BD", x"97", +x"FB", x"8D", x"13", x"02", x"4C", x"C5", x"00", x"A7", +x"53", x"2A", x"15", x"00", x"01", x"03", x"07", x"0F", +x"1F", x"3F", x"7F", x"20", x"54", x"F0", x"8A", x"29", +x"1F", x"85", x"11", x"85", x"E9", x"20", x"51", x"F0", +x"8A", x"29", x"1F", x"85", x"E8", x"18", x"69", x"0F", +x"85", x"E7", x"4C", x"3D", x"FB", x"20", x"54", x"F0", +x"8E", x"4F", x"02", x"4C", x"C5", x"00", x"20", x"00", +x"B0", x"90", x"08", x"4C", x"60", x"FD", x"20", x"12", +x"B0", x"B0", x"F8", x"4C", x"C5", x"00", x"4C", x"F6", +x"E7", x"20", x"C5", x"00", x"C9", x"D9", x"F0", x"0B", +x"C9", x"DA", x"F0", x"1F", x"C9", x"DB", x"F0", x"31", +x"4C", x"7F", x"CB", x"20", x"92", x"F1", x"20", x"8D", +x"F2", x"A9", x"01", x"20", x"BB", x"D1", x"A0", x"00", +x"AD", x"48", x"02", x"91", x"AA", x"20", x"08", x"D2", +x"4C", x"BF", x"00", x"20", x"5A", x"FE", x"E8", x"B1", +x"E0", x"2A", x"6A", x"CA", x"D0", x"FC", x"29", x"01", +x"A8", x"A9", x"00", x"20", x"D1", x"D0", x"4C", x"BF", +x"00", x"20", x"9F", x"E7", x"4C", x"11", x"FC", x"20", +x"8C", x"F1", x"20", x"AE", x"F1", x"C6", x"E8", x"20", +x"9D", x"E3", x"20", x"92", x"F1", x"4C", x"A8", x"F1", +x"20", x"54", x"F0", x"8A", x"D0", x"06", x"8D", x"0E", +x"02", x"4C", x"C5", x"00", x"A9", x"FF", x"D0", x"F6", +x"20", x"54", x"F0", x"8A", x"29", x"03", x"18", x"6A", +x"6A", x"6A", x"8D", x"5B", x"02", x"20", x"9A", x"F9", +x"20", x"5A", x"FE", x"18", x"98", x"65", x"E0", x"85", +x"E0", x"8E", x"50", x"02", x"A2", x"00", x"A0", x"00", +x"B1", x"14", x"9D", x"A0", x"02", x"E8", x"C8", x"B1", +x"14", x"9D", x"A0", x"02", x"C8", x"E8", x"A9", x"00", +x"9D", x"A0", x"02", x"E8", x"C0", x"20", x"D0", x"E8", +x"A2", x"00", x"AC", x"50", x"02", x"F0", x"14", x"18", +x"7E", x"A0", x"02", x"7E", x"A1", x"02", x"7E", x"A2", +x"02", x"88", x"D0", x"F3", x"E8", x"E8", x"E8", x"E0", +x"30", x"D0", x"E7", x"A2", x"2F", x"A0", x"08", x"A9", +x"00", x"8D", x"51", x"02", x"18", x"BD", x"A0", x"02", +x"6A", x"2E", x"51", x"02", x"88", x"D0", x"F9", x"AD", +x"51", x"02", x"9D", x"A0", x"02", x"CA", x"10", x"E5", +x"AE", x"50", x"02", x"AD", x"5B", x"02", x"C9", x"40", +x"F0", x"04", x"C9", x"80", x"D0", x"5B", x"BD", x"9B", +x"FB", x"8D", x"51", x"02", x"49", x"FF", x"8D", x"52", +x"02", x"A2", x"00", x"A0", x"00", x"B1", x"E0", x"2D", +x"51", x"02", x"1D", x"A0", x"02", x"2C", x"5B", x"02", +x"10", x"02", x"31", x"E0", x"91", x"E0", x"C8", x"BD", +x"A1", x"02", x"2C", x"5B", x"02", x"10", x"05", x"B1", +x"E0", x"3D", x"A1", x"02", x"91", x"E0", x"C8", x"B1", +x"E0", x"2D", x"52", x"02", x"1D", x"A2", x"02", x"2C", +x"5B", x"02", x"10", x"02", x"31", x"E0", x"91", x"E0", +x"20", x"08", x"FD", x"D0", x"C6", x"4C", x"C5", x"00", +x"18", x"A5", x"E0", x"69", x"20", x"85", x"E0", x"90", +x"02", x"E6", x"E1", x"E8", x"E8", x"E8", x"E0", x"30", +x"60", x"A2", x"00", x"A0", x"00", x"B1", x"E0", x"2C", +x"5B", x"02", x"50", x"05", x"1D", x"A0", x"02", x"70", +x"03", x"5D", x"A0", x"02", x"91", x"E0", x"C8", x"B1", +x"E0", x"50", x"05", x"1D", x"A1", x"02", x"70", x"03", +x"5D", x"A1", x"02", x"91", x"E0", x"C8", x"B1", x"E0", +x"50", x"05", x"1D", x"A2", x"02", x"70", x"03", x"5D", +x"A2", x"02", x"91", x"E0", x"20", x"08", x"FD", x"D0", +x"CA", x"4C", x"C5", x"00", x"A9", x"54", x"8D", x"66", +x"02", x"4C", x"C5", x"00", x"A9", x"44", x"D0", x"F6", +x"A9", x"FF", x"8D", x"00", x"5F", x"4C", x"92", x"FA", +x"20", x"71", x"F6", x"CA", x"F0", x"0A", x"B1", x"6A", +x"99", x"22", x"5F", x"C8", x"C0", x"50", x"D0", x"F3", +x"A9", x"00", x"99", x"22", x"5F", x"A2", x"0A", x"20", +x"06", x"B0", x"B0", x"DC", x"CE", x"21", x"5F", x"20", +x"48", x"B0", x"B0", x"D4", x"4C", x"C5", x"00", x"90", +x"08", x"A2", x"16", x"20", x"06", x"B0", x"B0", x"C8", +x"60", x"A2", x"17", x"D0", x"F6", x"A2", x"19", x"D0", +x"F2", x"90", x"04", x"A2", x"1A", x"D0", x"EC", x"A2", +x"1B", x"D0", x"E8", x"AD", x"5C", x"5E", x"AC", x"5D", +x"5E", x"20", x"42", x"B0", x"20", x"0C", x"B0", x"B0", +x"A7", x"A9", x"00", x"8D", x"5C", x"5E", x"8D", x"5D", +x"5E", x"20", x"ED", x"F0", x"18", x"60", x"20", x"DA", +x"C7", x"AD", x"1A", x"5F", x"29", x"01", x"D0", x"03", +x"4C", x"C5", x"00", x"4C", x"17", x"C7", x"20", x"54", +x"F0", x"E0", x"03", x"90", x"03", x"4C", x"C1", x"F6", +x"8A", x"48", x"20", x"51", x"F0", x"68", x"A8", x"E0", +x"00", x"F0", x"0B", x"E0", x"04", x"90", x"EE", x"8A", +x"99", x"05", x"02", x"4C", x"C5", x"00", x"18", x"98", +x"69", x"E0", x"D0", x"F4", x"A2", x"FF", x"9A", x"20", +x"64", x"FB", x"4C", x"A3", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", x"FF", +x"FF", x"FF", x"FF", x"A5", x"E3", x"49", x"FF", x"AA", +x"4A", x"4A", x"4A", x"20", x"8E", x"EE", x"EA", x"8A", +x"0A", x"0A", x"0A", x"0A", x"0A", x"85", x"E0", x"60", +x"FF", x"FF", x"FF", x"A5", x"E2", x"4A", x"4A", x"4A", +x"A8", x"60", x"01", x"02", x"04", x"08", x"10", x"20", +x"40", x"80", x"20", x"33", x"FE", x"20", x"4B", x"FE", +x"A5", x"E2", x"29", x"07", x"AA", x"BD", x"52", x"FE", +x"60", x"8A", x"48", x"98", x"48", x"20", x"5A", x"FE", +x"18", x"AE", x"0A", x"02", x"30", x"06", x"D0", x"08", +x"11", x"E0", x"90", x"08", x"51", x"E0", x"90", x"04", +x"49", x"FF", x"31", x"E0", x"91", x"E0", x"68", x"A8", +x"68", x"AA", x"60", x"8A", x"48", x"98", x"48", x"A2", +x"01", x"A5", x"E4", x"38", x"E5", x"E2", x"B0", x"06", +x"A2", x"FF", x"49", x"FF", x"69", x"01", x"85", x"F4", +x"85", x"F8", x"4A", x"69", x"00", x"85", x"F7", x"A0", +x"01", x"A5", x"E5", x"38", x"E5", x"E3", x"B0", x"06", +x"A0", x"FF", x"49", x"FF", x"69", x"01", x"85", x"F6", +x"C5", x"F4", x"B0", x"02", x"85", x"F8", x"4A", x"69", +x"00", x"85", x"F5", x"18", x"90", x"2C", x"A5", x"F5", +x"38", x"E5", x"F8", x"85", x"F5", x"90", x"03", x"D0", +x"0B", x"18", x"65", x"F6", x"85", x"F5", x"8A", x"18", +x"65", x"E2", x"85", x"E2", x"A5", x"F7", x"38", x"E5", +x"F8", x"85", x"F7", x"90", x"03", x"D0", x"0B", x"18", +x"65", x"F4", x"85", x"F7", x"98", x"18", x"65", x"E3", +x"85", x"E3", x"20", x"69", x"FE", x"A5", x"E2", x"C5", +x"E4", x"D0", x"CB", x"A5", x"E3", x"C5", x"E5", x"D0", +x"C5", x"68", x"A8", x"68", x"AA", x"60", x"8A", x"48", +x"98", x"48", x"A5", x"E2", x"85", x"E4", x"A5", x"E3", +x"85", x"E5", x"A9", x"00", x"85", x"F6", x"85", x"F7", +x"A9", x"7F", x"85", x"F4", x"A5", x"F8", x"85", x"F5", +x"A2", x"04", x"A0", x"24", x"A5", x"F7", x"0A", x"90", +x"03", x"E6", x"F5", x"18", x"E5", x"F4", x"49", x"FF", +x"85", x"F4", x"90", x"02", x"C6", x"F5", x"A5", x"F5", +x"0A", x"90", x"03", x"C6", x"F7", x"18", x"65", x"F6", +x"85", x"F6", x"90", x"02", x"E6", x"F7", x"A5", x"F5", +x"18", x"65", x"E4", x"85", x"E2", x"EA", x"EA", x"EA", +x"EA", x"A5", x"F7", x"18", x"65", x"E5", x"EA", x"EA", +x"EA", x"EA", x"85", x"E3", x"20", x"69", x"FE", x"88", +x"D0", x"C2", x"CA", x"D0", x"BF", x"A5", x"E4", x"85", +x"E2", x"A5", x"E5", x"85", x"E3", x"68", x"A8", x"68", +x"AA", x"60", x"48", x"8A", x"48", x"98", x"48", x"D8", +x"BA", x"BD", x"04", x"01", x"29", x"10", x"D0", x"06", +x"6C", x"1E", x"02", x"6C", x"20", x"02", x"6C", x"22", +x"02", x"78", x"D8", x"A2", x"FF", x"9A", x"A2", x"0F", +x"BD", x"8C", x"E6", x"95", x"E0", x"CA", x"10", x"F8", +x"20", x"B0", x"EE", x"A9", x"0C", x"20", x"F1", x"FF", +x"EA", x"EA", x"EA", x"A0", x"84", x"A9", x"E6", x"20", +x"3B", x"E6", x"20", x"57", x"E6", x"A2", x"00", x"20", +x"33", x"E6", x"E8", x"C9", x"0D", x"F0", x"EC", x"A0", +x"FF", x"C8", x"B9", x"00", x"E7", x"C9", x"FF", x"F0", +x"17", x"DD", x"7F", x"02", x"D0", x"F3", x"98", x"0A", +x"A8", x"B9", x"C8", x"E6", x"85", x"F6", x"B9", x"C9", +x"E6", x"85", x"F7", x"20", x"0B", x"E9", x"90", x"CB", +x"20", x"F4", x"E4", x"20", x"F6", x"E7", x"A9", x"3F", +x"20", x"F1", x"FF", x"38", x"B0", x"BD", x"FF", x"FF", +x"6C", x"FE", x"00", x"6C", x"14", x"02", x"6C", x"16", +x"02", x"6C", x"18", x"02", x"6C", x"1A", x"02", x"6C", +x"1C", x"02", x"83", x"FF", x"89", x"FF", x"72", x"FF" + ); +begin + process(clk) + begin + if rising_edge(clk) then + data <= romData(conv_integer(addr)); + end if; + end process; +end architecture; + diff --git a/ORAO_MiST/rtl/scandoubler.v b/ORAO_MiST/rtl/scandoubler.v new file mode 100644 index 00000000..36e71ed2 --- /dev/null +++ b/ORAO_MiST/rtl/scandoubler.v @@ -0,0 +1,194 @@ +// +// scandoubler.v +// +// Copyright (c) 2015 Till Harbaum +// Copyright (c) 2017 Sorgelig +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// TODO: Delay vsync one line + +module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) +( + // system interface + input clk_sys, + input ce_pix, + input ce_pix_actual, + + input hq2x, + + // shifter video interface + input hs_in, + input vs_in, + input line_start, + + input [DWIDTH:0] r_in, + input [DWIDTH:0] g_in, + input [DWIDTH:0] b_in, + input mono, + + // output interface + output reg hs_out, + output vs_out, + output [DWIDTH:0] r_out, + output [DWIDTH:0] g_out, + output [DWIDTH:0] b_out +); + +`define BITS_TO_FIT(N) ( \ + N <= 2 ? 0 : \ + N <= 4 ? 1 : \ + N <= 8 ? 2 : \ + N <= 16 ? 3 : \ + N <= 32 ? 4 : \ + N <= 64 ? 5 : \ + N <= 128 ? 6 : \ + N <= 256 ? 7 : \ + N <= 512 ? 8 : \ + N <=1024 ? 9 : 10 ) + +localparam DWIDTH = HALF_DEPTH ? 2 : 5; + +assign vs_out = vs_in; + +reg [2:0] phase; +reg [2:0] ce_div; +reg [7:0] pix_len = 0; +wire [7:0] pl = pix_len + 1'b1; + +reg ce_x1, ce_x4; +reg req_line_reset; +wire ls_in = hs_in | line_start; +always @(negedge clk_sys) begin + reg old_ce; + reg [2:0] ce_cnt; + + reg [7:0] pixsz2, pixsz4 = 0; + + old_ce <= ce_pix; + if(~&pix_len) pix_len <= pix_len + 1'd1; + + ce_x4 <= 0; + ce_x1 <= 0; + + // use such odd comparison to place c_x4 evenly if master clock isn't multiple 4. + if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin + phase <= phase + 1'd1; + ce_x4 <= 1; + end + + if(~old_ce & ce_pix) begin + pixsz2 <= {1'b0, pl[7:1]}; + pixsz4 <= {2'b00, pl[7:2]}; + ce_x1 <= 1; + ce_x4 <= 1; + pix_len <= 0; + phase <= phase + 1'd1; + + ce_cnt <= ce_cnt + 1'd1; + if(ce_pix_actual) begin + phase <= 0; + ce_div <= ce_cnt + 1'd1; + ce_cnt <= 0; + req_line_reset <= 0; + end + + if(ls_in) req_line_reset <= 1; + end +end + +reg ce_sd; +always @(*) begin + case(ce_div) + 2: ce_sd = !phase[0]; + 4: ce_sd = !phase[1:0]; + default: ce_sd <= 1; + endcase +end + +localparam AWIDTH = `BITS_TO_FIT(LENGTH); +Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x +( + .clk(clk_sys), + .ce_x4(ce_x4 & ce_sd), + .inputpixel({b_in,g_in,r_in}), + .mono(mono), + .disable_hq2x(~hq2x), + .reset_frame(vs_in), + .reset_line(req_line_reset), + .read_y(sd_line), + .read_x(sd_h_actual), + .outpixel({b_out,g_out,r_out}) +); + +reg [10:0] sd_h_actual; +always @(*) begin + case(ce_div) + 2: sd_h_actual = sd_h[10:1]; + 4: sd_h_actual = sd_h[10:2]; + default: sd_h_actual = sd_h; + endcase +end + +reg [10:0] sd_h; +reg [1:0] sd_line; +always @(posedge clk_sys) begin + + reg [11:0] hs_max,hs_rise,hs_ls; + reg [10:0] hcnt; + reg [11:0] sd_hcnt; + + reg hs, hs2, vs, ls; + + if(ce_x1) begin + hs <= hs_in; + ls <= ls_in; + + if(ls && !ls_in) hs_ls <= {hcnt,1'b1}; + + // falling edge of hsync indicates start of line + if(hs && !hs_in) begin + hs_max <= {hcnt,1'b1}; + hcnt <= 0; + if(ls && !ls_in) hs_ls <= {10'd0,1'b1}; + end else begin + hcnt <= hcnt + 1'd1; + end + + // save position of rising edge + if(!hs && hs_in) hs_rise <= {hcnt,1'b1}; + + vs <= vs_in; + if(vs && ~vs_in) sd_line <= 0; + end + + if(ce_x4) begin + hs2 <= hs_in; + + // output counter synchronous to input and at twice the rate + sd_hcnt <= sd_hcnt + 1'd1; + sd_h <= sd_h + 1'd1; + if(hs2 && !hs_in) sd_hcnt <= hs_max; + if(sd_hcnt == hs_max) sd_hcnt <= 0; + + // replicate horizontal sync at twice the speed + if(sd_hcnt == hs_max) hs_out <= 0; + if(sd_hcnt == hs_rise) hs_out <= 1; + + if(sd_hcnt == hs_ls) sd_h <= 0; + if(sd_hcnt == hs_ls) sd_line <= sd_line + 1'd1; + end +end + +endmodule diff --git a/ORAO_MiST/rtl/video_mixer.sv b/ORAO_MiST/rtl/video_mixer.sv new file mode 100644 index 00000000..04cfd4ba --- /dev/null +++ b/ORAO_MiST/rtl/video_mixer.sv @@ -0,0 +1,242 @@ +// +// +// Copyright (c) 2017 Sorgelig +// +// This program is GPL Licensed. See COPYING for the full license. +// +// +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +`timescale 1ns / 1ps + +// +// LINE_LENGTH: Length of display line in pixels +// Usually it's length from HSync to HSync. +// May be less if line_start is used. +// +// HALF_DEPTH: If =1 then color dept is 3 bits per component +// For half depth 6 bits monochrome is available with +// mono signal enabled and color = {G, R} + +module video_mixer +#( + parameter LINE_LENGTH = 768, + parameter HALF_DEPTH = 0, + + parameter OSD_COLOR = 3'd4, + parameter OSD_X_OFFSET = 10'd0, + parameter OSD_Y_OFFSET = 10'd0 +) +( + // master clock + // it should be multiple by (ce_pix*4). + input clk_sys, + + // Pixel clock or clock_enable (both are accepted). + input ce_pix, + + // Some systems have multiple resolutions. + // ce_pix_actual should match ce_pix where every second or fourth pulse is enabled, + // thus half or qurter resolutions can be used without brake video sync while switching resolutions. + // For fixed single resolution (or when video sync stability isn't required) ce_pix_actual = ce_pix. + input ce_pix_actual, + + // OSD SPI interface + input SPI_SCK, + input SPI_SS3, + input SPI_DI, + + // scanlines (00-none 01-25% 10-50% 11-75%) + input [1:0] scanlines, + + // 0 = HVSync 31KHz, 1 = CSync 15KHz + input scandoubler_disable, + + // High quality 2x scaling + input hq2x, + + // YPbPr always uses composite sync + input ypbpr, + + // 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space) + input ypbpr_full, + + // color + input [DWIDTH:0] R, + input [DWIDTH:0] G, + input [DWIDTH:0] B, + + // Monochrome mode (for HALF_DEPTH only) + input mono, + + // interlace sync. Positive pulses. + input HSync, + input VSync, + + // Falling of this signal means start of informative part of line. + // It can be horizontal blank signal. + // This signal can be used to reduce amount of required FPGA RAM for HQ2x scan doubler + // If FPGA RAM is not an issue, then simply set it to 0 for whole line processing. + // Keep in mind: due to algo first and last pixels of line should be black to avoid side artefacts. + // Thus, if blank signal is used to reduce the line, make sure to feed at least one black (or paper) pixel + // before first informative pixel. + input line_start, + + // MiST video output signals + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + output VGA_VS, + output VGA_HS +); + +localparam DWIDTH = HALF_DEPTH ? 2 : 5; + +wire [DWIDTH:0] R_sd; +wire [DWIDTH:0] G_sd; +wire [DWIDTH:0] B_sd; +wire hs_sd, vs_sd; + +scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) scandoubler +( + .*, + .hs_in(HSync), + .vs_in(VSync), + .r_in(R), + .g_in(G), + .b_in(B), + + .hs_out(hs_sd), + .vs_out(vs_sd), + .r_out(R_sd), + .g_out(G_sd), + .b_out(B_sd) +); + +wire [DWIDTH:0] rt = (scandoubler_disable ? R : R_sd); +wire [DWIDTH:0] gt = (scandoubler_disable ? G : G_sd); +wire [DWIDTH:0] bt = (scandoubler_disable ? B : B_sd); + +generate + if(HALF_DEPTH) begin + wire [5:0] r = mono ? {gt,rt} : {rt,rt}; + wire [5:0] g = mono ? {gt,rt} : {gt,gt}; + wire [5:0] b = mono ? {gt,rt} : {bt,bt}; + end else begin + wire [5:0] r = rt; + wire [5:0] g = gt; + wire [5:0] b = bt; + end +endgenerate + +wire hs = (scandoubler_disable ? HSync : hs_sd); +wire vs = (scandoubler_disable ? VSync : vs_sd); + +reg scanline = 0; +always @(posedge clk_sys) begin + reg old_hs, old_vs; + + old_hs <= hs; + old_vs <= vs; + + if(old_hs && ~hs) scanline <= ~scanline; + if(old_vs && ~vs) scanline <= 0; +end + +wire [5:0] r_out, g_out, b_out; +always @(*) begin + case(scanlines & {scanline, scanline}) + 1: begin // reduce 25% = 1/2 + 1/4 + r_out = {1'b0, r[5:1]} + {2'b00, r[5:2]}; + g_out = {1'b0, g[5:1]} + {2'b00, g[5:2]}; + b_out = {1'b0, b[5:1]} + {2'b00, b[5:2]}; + end + + 2: begin // reduce 50% = 1/2 + r_out = {1'b0, r[5:1]}; + g_out = {1'b0, g[5:1]}; + b_out = {1'b0, b[5:1]}; + end + + 3: begin // reduce 75% = 1/4 + r_out = {2'b00, r[5:2]}; + g_out = {2'b00, g[5:2]}; + b_out = {2'b00, b[5:2]}; + end + + default: begin + r_out = r; + g_out = g; + b_out = b; + end + endcase +end + +wire [5:0] red, green, blue; +osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd +( + .*, + + .R_in(r_out), + .G_in(g_out), + .B_in(b_out), + .HSync(hs), + .VSync(vs), + + .R_out(red), + .G_out(green), + .B_out(blue) +); + +wire [5:0] yuv_full[225] = '{ + 6'd0, 6'd0, 6'd0, 6'd0, 6'd1, 6'd1, 6'd1, 6'd1, + 6'd2, 6'd2, 6'd2, 6'd3, 6'd3, 6'd3, 6'd3, 6'd4, + 6'd4, 6'd4, 6'd5, 6'd5, 6'd5, 6'd5, 6'd6, 6'd6, + 6'd6, 6'd7, 6'd7, 6'd7, 6'd7, 6'd8, 6'd8, 6'd8, + 6'd9, 6'd9, 6'd9, 6'd9, 6'd10, 6'd10, 6'd10, 6'd11, + 6'd11, 6'd11, 6'd11, 6'd12, 6'd12, 6'd12, 6'd13, 6'd13, + 6'd13, 6'd13, 6'd14, 6'd14, 6'd14, 6'd15, 6'd15, 6'd15, + 6'd15, 6'd16, 6'd16, 6'd16, 6'd17, 6'd17, 6'd17, 6'd17, + 6'd18, 6'd18, 6'd18, 6'd19, 6'd19, 6'd19, 6'd19, 6'd20, + 6'd20, 6'd20, 6'd21, 6'd21, 6'd21, 6'd21, 6'd22, 6'd22, + 6'd22, 6'd23, 6'd23, 6'd23, 6'd23, 6'd24, 6'd24, 6'd24, + 6'd25, 6'd25, 6'd25, 6'd25, 6'd26, 6'd26, 6'd26, 6'd27, + 6'd27, 6'd27, 6'd27, 6'd28, 6'd28, 6'd28, 6'd29, 6'd29, + 6'd29, 6'd29, 6'd30, 6'd30, 6'd30, 6'd31, 6'd31, 6'd31, + 6'd31, 6'd32, 6'd32, 6'd32, 6'd33, 6'd33, 6'd33, 6'd33, + 6'd34, 6'd34, 6'd34, 6'd35, 6'd35, 6'd35, 6'd35, 6'd36, + 6'd36, 6'd36, 6'd36, 6'd37, 6'd37, 6'd37, 6'd38, 6'd38, + 6'd38, 6'd38, 6'd39, 6'd39, 6'd39, 6'd40, 6'd40, 6'd40, + 6'd40, 6'd41, 6'd41, 6'd41, 6'd42, 6'd42, 6'd42, 6'd42, + 6'd43, 6'd43, 6'd43, 6'd44, 6'd44, 6'd44, 6'd44, 6'd45, + 6'd45, 6'd45, 6'd46, 6'd46, 6'd46, 6'd46, 6'd47, 6'd47, + 6'd47, 6'd48, 6'd48, 6'd48, 6'd48, 6'd49, 6'd49, 6'd49, + 6'd50, 6'd50, 6'd50, 6'd50, 6'd51, 6'd51, 6'd51, 6'd52, + 6'd52, 6'd52, 6'd52, 6'd53, 6'd53, 6'd53, 6'd54, 6'd54, + 6'd54, 6'd54, 6'd55, 6'd55, 6'd55, 6'd56, 6'd56, 6'd56, + 6'd56, 6'd57, 6'd57, 6'd57, 6'd58, 6'd58, 6'd58, 6'd58, + 6'd59, 6'd59, 6'd59, 6'd60, 6'd60, 6'd60, 6'd60, 6'd61, + 6'd61, 6'd61, 6'd62, 6'd62, 6'd62, 6'd62, 6'd63, 6'd63, + 6'd63 +}; + +// http://marsee101.blog19.fc2.com/blog-entry-2311.html +// Y = 16 + 0.257*R + 0.504*G + 0.098*B (Y = 0.299*R + 0.587*G + 0.114*B) +// Pb = 128 - 0.148*R - 0.291*G + 0.439*B (Pb = -0.169*R - 0.331*G + 0.500*B) +// Pr = 128 + 0.439*R - 0.368*G - 0.071*B (Pr = 0.500*R - 0.419*G - 0.081*B) + +wire [18:0] y_8 = 19'd04096 + ({red, 8'd0} + {red, 3'd0}) + ({green, 9'd0} + {green, 2'd0}) + ({blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0}); +wire [18:0] pb_8 = 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}) - ({green, 8'd0} + {green, 5'd0} + {green, 3'd0}) + ({blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0}); +wire [18:0] pr_8 = 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}) - ({green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}) - ({blue, 6'd0} + {blue , 3'd0}); + +wire [7:0] y = ( y_8[17:8] < 16) ? 8'd16 : ( y_8[17:8] > 235) ? 8'd235 : y_8[15:8]; +wire [7:0] pb = (pb_8[17:8] < 16) ? 8'd16 : (pb_8[17:8] > 240) ? 8'd240 : pb_8[15:8]; +wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[15:8]; + +assign VGA_R = ypbpr ? (ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]) : red; +assign VGA_G = ypbpr ? (ypbpr_full ? yuv_full[y -8'd16] : y[7:2]) : green; +assign VGA_B = ypbpr ? (ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]) : blue; +assign VGA_VS = (scandoubler_disable | ypbpr) ? 1'b1 : ~vs_sd; +assign VGA_HS = scandoubler_disable ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd; + +endmodule diff --git a/ORAO_MiST/snapshot/Orao_MiST.rbf b/ORAO_MiST/snapshot/Orao_MiST.rbf new file mode 100644 index 0000000000000000000000000000000000000000..d1ecd465c8003e5e9bc0ed4b31d35e0a7e82cf06 GIT binary patch literal 253813 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