diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.qpf b/Arcade_MiST/IremM72 Hardware/IremM72.qpf similarity index 79% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.qpf rename to Arcade_MiST/IremM72 Hardware/IremM72.qpf index de19fb03..425d7c02 100644 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.qpf +++ b/Arcade_MiST/IremM72 Hardware/IremM72.qpf @@ -1,6 +1,6 @@ # -------------------------------------------------------------------------- # # -# Copyright (C) 1991-2013 Altera Corporation +# Copyright (C) 1991-2011 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 @@ -16,15 +16,15 @@ # # -------------------------------------------------------------------------- # # -# Quartus II 64-Bit -# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition -# Date created = 02:40:30 January 25, 2017 +# Quartus II +# Version 10.1 Build 197 01/19/2011 Service Pack 1 SJ Full Version +# Date created = 23:49:02 July 13, 2012 # # -------------------------------------------------------------------------- # -QUARTUS_VERSION = "13.1" -DATE = "02:40:30 January 25, 2017" +QUARTUS_VERSION = "10.1" +DATE = "23:49:02 July 13, 2012" # Revisions -PROJECT_REVISION = "Capitol_mist" \ No newline at end of file +PROJECT_REVISION = "IremM72" diff --git a/Arcade_MiST/IremM72 Hardware/IremM72.qsf b/Arcade_MiST/IremM72 Hardware/IremM72.qsf new file mode 100644 index 00000000..152eb751 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/IremM72.qsf @@ -0,0 +1,271 @@ +# -------------------------------------------------------------------------- # +# +# 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 = 21:06:00 February 29, 2020 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# IremM72_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 PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" +set_global_assignment -name SMART_RECOMPILE ON + +# 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_90 -to SPI_SS4 +set_location_assignment PIN_13 -to CONF_DATA0 +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 + +# Classic Timing Assignments +# ========================== +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone III" +set_global_assignment -name TOP_LEVEL_ENTITY IremM72_MiST +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 +set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON +set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE ON +set_global_assignment -name VHDL_INPUT_VERSION VHDL_2008 +set_global_assignment -name VHDL_SHOW_LMF_MAPPING_MESSAGES OFF + +# 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" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON +set_global_assignment -name FITTER_EFFORT "STANDARD FIT" + +# Assembler Assignments +# ===================== +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF + +# SignalTap II Assignments +# ======================== +set_global_assignment -name ENABLE_SIGNALTAP OFF +set_global_assignment -name USE_SIGNALTAP_FILE output_files/cpu3.stp + +# Power Estimation Assignments +# ============================ +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "NO HEAT SINK WITH STILL AIR" +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 ENTITY(IremM72_MiST) + + # Pin & Location Assignments + # ========================== +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[*] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[0] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[1] +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQMH +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQML +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nRAS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCAS +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nWE +set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCS +set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] +set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM_DQ[*] + + # Fitter Assignments + # ================== +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_A[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_DQ[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_BA[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_DQML +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_DQMH +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nRAS +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nCAS +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nWE +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nCS +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_CKE +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_CLK +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_R[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_G[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_B[*] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_HS +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_VS +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to AUDIO_L +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to AUDIO_R +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SPI_DO + + # start DESIGN_PARTITION(Top) + # --------------------------- + + # Incremental Compilation Assignments + # =================================== +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 + + # end DESIGN_PARTITION(Top) + # ------------------------- + +# end ENTITY(IremM72_MiST) +# --------------------------- +set_location_assignment PLL_1 -to pll|altpll_component|auto_generated|pll1 +set_global_assignment -name SYSTEMVERILOG_FILE rtl/IremM72_MiST.sv +set_global_assignment -name QIP_FILE rtl/pll_mist.qip +set_global_assignment -name SYSTEMVERILOG_FILE rtl/m72.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/pal.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/mcu.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/m72_pkg.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/m72_pic.sv +set_global_assignment -name VERILOG_FILE rtl/iir_filter.v +set_global_assignment -name VERILOG_FILE rtl/kna6034201.v +set_global_assignment -name VERILOG_FILE rtl/kna91h014.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/kna70h015.sv +set_global_assignment -name VERILOG_FILE rtl/jtframe_frac_cen.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/dualport_mailbox.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/dpramv.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/ddr_debug.sv +set_global_assignment -name VERILOG_FILE rtl/build_id.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/board_b_d_layer.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/board_b_d.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sprite.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sound.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram_4w.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/rom.sv +set_global_assignment -name QIP_FILE ../../common/mist/mist.qip +set_global_assignment -name QIP_FILE ../../common/CPU/T80/T80.qip +set_global_assignment -name QIP_FILE ../../common/CPU/v30/V30.qip +set_global_assignment -name QIP_FILE ../../common/CPU/MC8051/mc8051.qip +set_global_assignment -name QIP_FILE ../../common/Sound/jt51/jt51.qip +set_global_assignment -name SIGNALTAP_FILE output_files/cpu.stp +set_global_assignment -name SIGNALTAP_FILE output_files/cpu2.stp +set_global_assignment -name SIGNALTAP_FILE output_files/cpu3.stp +set_global_assignment -name DSP_BLOCK_BALANCING "DSP BLOCKS" +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION OFF +set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT EXTRA +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/IremM72.sdc b/Arcade_MiST/IremM72 Hardware/IremM72.sdc new file mode 100644 index 00000000..b2c02084 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/IremM72.sdc @@ -0,0 +1,143 @@ +## Generated SDC file "vectrex_MiST.out.sdc" + +## 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. + + +## VENDOR "Altera" +## PROGRAM "Quartus II" +## VERSION "Version 13.1.0 Build 162 10/23/2013 SJ Web Edition" + +## DATE "Sun Jun 24 12:53:00 2018" + +## +## DEVICE "EP3C25E144C8" +## + +# Clock constraints + +# Automatically constrain PLL and other generated clocks +derive_pll_clocks -create_base_clocks + +# Automatically calculate clock uncertainty to jitter and other effects. +derive_clock_uncertainty + +# tsu/th constraints + +# tco constraints + +# tpd constraints + +#************************************************************** +# Time Information +#************************************************************** + +set_time_format -unit ns -decimal_places 3 + + + +#************************************************************** +# Create Clock +#************************************************************** + +create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_ports {SPI_SCK}] + +set sdram_clk "pll|altpll_component|auto_generated|pll1|clk[0]" +set vid_clk "pll|altpll_component|auto_generated|pll1|clk[1]" +set game_clk "pll|altpll_component|auto_generated|pll1|clk[1]" + +#************************************************************** +# Create Generated Clock +#************************************************************** + + +#************************************************************** +# Set Clock Latency +#************************************************************** + + + +#************************************************************** +# Set Clock Uncertainty +#************************************************************** + +#************************************************************** +# Set Input Delay +#************************************************************** + +set_input_delay -add_delay -clock_fall -clock [get_clocks {CLOCK_27}] 1.000 [get_ports {CLOCK_27}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {CONF_DATA0}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DI}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SCK}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}] + +set_input_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -max 6.4 [get_ports SDRAM_DQ[*]] +set_input_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -min 3.2 [get_ports SDRAM_DQ[*]] + +#************************************************************** +# Set Output Delay +#************************************************************** + +set_output_delay -add_delay -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DO}] +set_output_delay -add_delay -clock [get_clocks $game_clk] 1.000 [get_ports {AUDIO_L}] +set_output_delay -add_delay -clock [get_clocks $game_clk] 1.000 [get_ports {AUDIO_R}] +set_output_delay -add_delay -clock [get_clocks $game_clk] 1.000 [get_ports {LED}] +set_output_delay -add_delay -clock [get_clocks $vid_clk] 1.000 [get_ports {VGA_*}] + +set_output_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -max 1.5 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] +set_output_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -min -0.8 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] + +#************************************************************** +# Set Clock Groups +#************************************************************** + +set_clock_groups -asynchronous -group [get_clocks {SPI_SCK}] -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[*]}] + +#************************************************************** +# Set False Path +#************************************************************** + + + +#************************************************************** +# Set Multicycle Path +#************************************************************** + +set_multicycle_path -to {VGA_*[*]} -setup 3 +set_multicycle_path -to {VGA_*[*]} -hold 2 + +set_multicycle_path -from {m72:m72|mcu:mcu|mc8051_core:mc8051|*} -setup 2 +set_multicycle_path -from {m72:m72|mcu:mcu|mc8051_core:mc8051|*} -hold 1 +set_multicycle_path -from {m72:m72|mcu:mcu|dpramv:prom|altsyncram:ram_rtl_0|*} -to {m72:m72|mcu:mcu|mc8051_core:mc8051|mc8051_control:i_mc8051_control|*} -setup 2 +set_multicycle_path -from {m72:m72|mcu:mcu|dpramv:prom|altsyncram:ram_rtl_0|*} -to {m72:m72|mcu:mcu|mc8051_core:mc8051|mc8051_control:i_mc8051_control|*} -hold 1 +set_multicycle_path -from {m72:m72|mcu:mcu|dpramv:prom|altsyncram:ram_rtl_0|*} -to {m72:m72|mcu:mcu|prom_addr[*]} -setup 2 +set_multicycle_path -from {m72:m72|mcu:mcu|dpramv:prom|altsyncram:ram_rtl_0|*} -to {m72:m72|mcu:mcu|prom_addr[*]} -hold 1 + +#************************************************************** +# Set Maximum Delay +#************************************************************** + + + +#************************************************************** +# Set Minimum Delay +#************************************************************** + + + +#************************************************************** +# Set Input Transition +#************************************************************** + diff --git a/Arcade_MiST/IremM72 Hardware/Readme.md b/Arcade_MiST/IremM72 Hardware/Readme.md new file mode 100644 index 00000000..26187246 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/Readme.md @@ -0,0 +1,47 @@ +# Irem M72 Core + +![](docs/header_small.png) + +Implemention of the Irem M72 arcade hardware (https://www.system16.com/hardware.php?id=738) for the MiSTer FPGA platform. + +[Original core](https://github.com/MiSTer-devel/Arcade-IremM72_MiSTer) by Martin Donlon. + +[MiST](https://github.com/mist-devel/mist-board/wiki) port, new SDRAM controller and minor optimizations by Gyorgy Szombathelyi. + +## Supported Games + +|Name|Region|Notes| +|---|---|---| +|[R-Type](https://en.wikipedia.org/wiki/R-Type)|Japan, US, World|| +|[Ninja Spirit](https://en.wikipedia.org/wiki/Ninja_Spirit)|Japan|| +|[Image Fight](https://en.wikipedia.org/wiki/Image_Fight)|Japan, World|| +|[Gallop - Armed Police Unit](https://en.wikipedia.org/wiki/Armed_Police_Unit_Gallop)|Japan|Emulated MCU| +|[Legend of Hero Tonma](https://en.wikipedia.org/wiki/Legend_of_Hero_Tonma)|Japan|| +|[Mr. HELI no Daibouken](https://en.wikipedia.org/wiki/Mr._Heli)|Japan|| +|[Air Duel](https://en.wikipedia.org/wiki/Air_Duel)|Japan|Conversion from M81 hardware.| +|[Dragon Breed](https://en.wikipedia.org/wiki/Dragon_Breed)|Japan|Conversion from M81 hardware.| +|[X-Multiply](https://en.wikipedia.org/wiki/X_Multiply)|Japan|Conversion from M81 hardware.| +|[Daiku no Gensan](https://en.wikipedia.org/wiki/Hammerin%27_Harry)|Japan|Conversion from M81 hardware. Emulated MCU| + +**Note:** Emulated MCU is not implemented on MiST (FPGA is full). + +## Video Modes +All of these games output a 256 line signal at 55.02hz, that can be difficult for some consumer CRTs to sync too and the refresh rate can cause irregular scrolling on some digital displays. The core offers three additional refresh rates: 50hz, 57hz and 60hz. These will slow down or speed up gameplay, but sound playback will remain uneffected. + +## Pause +The core implements pause functionality. You can bind a pause button and/or enable the "OSD Pause" option in the OSD, which will pause the game whenever the OSD is open. Pause is not something the original hardware supported and certain parts of the graphics state need to be saved and replayed during the paused frame. This may cause slight graphical issues when paused in some situations. + +## Thanks +Many people, knowingly or not, contributed to this work. +- @ElectronAsh for the initial verilator version and help with the various KNA ICs +- @furrtek for the KNA70H015(11) reverse engineering https://github.com/furrtek/VGChips/tree/master/Nanao/KNA70H015(11) +- @jotego for the YM2151 implementation +- @Ace9921 because I used a lot of his TimePilot'84 code as an example for hooking up inputs and dipswitches +- The people from PLD Archive for collecting and archiving schematics and PAL information http://wiki.pldarchive.co.uk/index.php?title=R-Type_(M72) +- @sorgelig for developing and maintaining MiSTer +- @RobertPeip for the v30mz cpu I am using as the basis for the v30 +- @sentientsixp for encouraging me to do this +- @atrac17 for schematics and MRAs +- @tdlabac for help with MCU emulation +- @_ShootTheCore for providing audio captures from original M72 hardware +- The MiSTer FPGA discord server for the helpful advice and support diff --git a/Arcade_MiST/IremM72 Hardware/meta/Air Duel (Japan, M72 hardware).mra b/Arcade_MiST/IremM72 Hardware/meta/Air Duel (Japan, M72 hardware).mra new file mode 100644 index 00000000..4677aeb4 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Air Duel (Japan, M72 hardware).mra @@ -0,0 +1,74 @@ + + Air Duel (Japan, M72 hardware) + 0245 + airdueljm72 + airduel + 1990 + Irem + Shooter + IremM72 + vertical (ccw) + + 8-way + 2 + + + + + + + + + + + 01 + + + 09 + + 00 08 00 00 + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 02 00 00 + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/Dragon Breed (Japan, M72 hardware).mra b/Arcade_MiST/IremM72 Hardware/meta/Dragon Breed (Japan, M72 hardware).mra new file mode 100644 index 00000000..f0e7a453 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Dragon Breed (Japan, M72 hardware).mra @@ -0,0 +1,80 @@ + + Dragon Breed (Japan, M72 hardware) + 0245 + dbreedjm72 + dbreed + 1989 + Irem + Shooter + IremM72 + horizontal + + 8-way + 2 + + + + + + + + + + + + + + + + 02 + + 00 08 00 00 + + + + + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 02 00 00 + + + \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/meta/Gallop - Armed Police Unit (Japan, M72 hardware).mra b/Arcade_MiST/IremM72 Hardware/meta/Gallop - Armed Police Unit (Japan, M72 hardware).mra new file mode 100644 index 00000000..4e77dd97 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Gallop - Armed Police Unit (Japan, M72 hardware).mra @@ -0,0 +1,68 @@ + + Gallop - Armed Police Unit (Japan, M72 hardware) + 0245 + gallop + cosmccop + 1991 + Irem + Shooter + IremM72 + horizontal + + 8-way + 2 + + + + + + + + + + + + + + + 01 + + + 00 08 00 00 + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/Image Fight (Japan).mra b/Arcade_MiST/IremM72 Hardware/meta/Image Fight (Japan).mra new file mode 100644 index 00000000..843085a3 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Image Fight (Japan).mra @@ -0,0 +1,83 @@ + + Image Fight (Japan) + 0245 + imgfightj + imgfight + 1988 + Irem + Shooter + vertical (ccw) + IremM72 + + 8-way + 2 + + + + + + + + + + + + + 01 + + + + 01 + + + 00 08 00 00 + + + + + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 02 00 00 + + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/Image Fight (World).mra b/Arcade_MiST/IremM72 Hardware/meta/Image Fight (World).mra new file mode 100644 index 00000000..6e9bf630 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Image Fight (World).mra @@ -0,0 +1,82 @@ + + Image Fight (World) + 0245 + imgfight + 1988 + Irem + Shooter + vertical (ccw) + IremM72 + + 8-way + 2 + + + + + + + + + + + + + 01 + + + + 01 + + + 00 08 00 00 + + + + + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 02 00 00 + + + + \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/meta/Legend of Hero Tonma (Japan).mra b/Arcade_MiST/IremM72 Hardware/meta/Legend of Hero Tonma (Japan).mra new file mode 100644 index 00000000..d6484305 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Legend of Hero Tonma (Japan).mra @@ -0,0 +1,76 @@ + + Legend of Hero Tonma (Japan) + 0245 + lohtj + loth + 1989 + Irem + + IremM72 + + 8-way + 3 + + + + + + + + + + + + + + + + 01 + + + 00 08 00 00 + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 01 00 00 + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/Mr. HELI no Daibouken (Japan).mra b/Arcade_MiST/IremM72 Hardware/meta/Mr. HELI no Daibouken (Japan).mra new file mode 100644 index 00000000..95e1c04a --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Mr. HELI no Daibouken (Japan).mra @@ -0,0 +1,87 @@ + + Mr. HELI no Daibouken (Japan) + 0245 + mrheli + bchopper + 1987 + Irem + Shooter + IremM72 + + horizontal + 8-way + 2 + + + + + + + + + + + + + + + + + + 01 + + + 00 08 00 00 + + + + + + + + + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 01 00 00 + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/Ninja Spirit (Japan).mra b/Arcade_MiST/IremM72 Hardware/meta/Ninja Spirit (Japan).mra new file mode 100644 index 00000000..1babdeca --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/Ninja Spirit (Japan).mra @@ -0,0 +1,86 @@ + + Ninja Spirit (Japan) + 0245 + nspiritj + nspirit + 1989 + Irem + + IremM72 + + 8-way + 3 + + + + + + + + + + + + + + + + + 01 + + + 00 08 00 00 + + + + + + + + + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 04 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 01 00 00 + + + + \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/meta/R-Type (Japan).mra b/Arcade_MiST/IremM72 Hardware/meta/R-Type (Japan).mra new file mode 100644 index 00000000..89083ddc --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/R-Type (Japan).mra @@ -0,0 +1,80 @@ + + R-Type (Japan) + 0245 + rtypej + rtype + 1987 + Irem + Shooter + IremM72 + horizontal + + 8-way + 2 + + + + + + + + + + + + + + + + + + 00 + + + 00 04 00 00 + + + + + + + + + + + 00 06 00 00 + + + + + + + + + + + + + + + + 00 02 00 00 + + + + + + + + + 00 02 00 00 + + + + + + + + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/R-Type (World).mra b/Arcade_MiST/IremM72 Hardware/meta/R-Type (World).mra new file mode 100644 index 00000000..bc20c710 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/R-Type (World).mra @@ -0,0 +1,77 @@ + + R-Type (World) + 0245 + rtype + 1987 + Irem + Shooter + IremM72 + horizontal + 8-way + 2 + + + + + + + + + + + + + + + + + + 00 + + + 00 04 00 00 + + + + + + + + + + + 00 06 00 00 + + + + + + + + + + + + + + + + 00 02 00 00 + + + + + + + + + 00 02 00 00 + + + + + + + + + diff --git a/Arcade_MiST/IremM72 Hardware/meta/X Multiply (Japan, M72 hardware).mra b/Arcade_MiST/IremM72 Hardware/meta/X Multiply (Japan, M72 hardware).mra new file mode 100644 index 00000000..2b05fa69 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/meta/X Multiply (Japan, M72 hardware).mra @@ -0,0 +1,86 @@ + + X Multiply (Japan, M72 hardware) + 0245 + xmultiplm72 + xmultipl + 1989 + Irem + Shooter + IremM72 + horizontal + + 8-way + 1 + + + + + + + + + + + + + + + + 02 + + 00 08 00 00 + + + + + + + + + + + + + + + 00 10 00 00 + + + + + + + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 08 00 00 + + + + + + + + + 00 00 10 00 + + + + 00 02 00 00 + + + diff --git a/Arcade_MiST/IremM72 Hardware/rtl/Arcade-IremM72.sv b/Arcade_MiST/IremM72 Hardware/rtl/Arcade-IremM72.sv new file mode 100644 index 00000000..479b3ade --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/Arcade-IremM72.sv @@ -0,0 +1,675 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + + +import m72_pkg::*; + +module emu +( + //Master input clock + input CLK_50M, + + //Async reset from top-level module. + //Can be used as initial reset. + input RESET, + + //Must be passed to hps_io module + inout [48:0] HPS_BUS, + + //Base video clock. Usually equals to CLK_SYS. + output CLK_VIDEO, + + //Multiple resolutions are supported using different CE_PIXEL rates. + //Must be based on CLK_VIDEO + output CE_PIXEL, + + //Video aspect ratio for HDMI. Most retro systems have ratio 4:3. + //if VIDEO_ARX[12] or VIDEO_ARY[12] is set then [11:0] contains scaled size instead of aspect ratio. + output [12:0] VIDEO_ARX, + output [12:0] VIDEO_ARY, + + output [7:0] VGA_R, + output [7:0] VGA_G, + output [7:0] VGA_B, + output VGA_HS, + output VGA_VS, + output VGA_DE, // = ~(VBlank | HBlank) + output VGA_F1, + output [1:0] VGA_SL, + output VGA_SCALER, // Force VGA scaler + + input [11:0] HDMI_WIDTH, + input [11:0] HDMI_HEIGHT, + output HDMI_FREEZE, + +`ifdef MISTER_FB + // Use framebuffer in DDRAM (USE_FB=1 in qsf) + // FB_FORMAT: + // [2:0] : 011=8bpp(palette) 100=16bpp 101=24bpp 110=32bpp + // [3] : 0=16bits 565 1=16bits 1555 + // [4] : 0=RGB 1=BGR (for 16/24/32 modes) + // + // FB_STRIDE either 0 (rounded to 256 bytes) or multiple of pixel size (in bytes) + output FB_EN, + output [4:0] FB_FORMAT, + output [11:0] FB_WIDTH, + output [11:0] FB_HEIGHT, + output [31:0] FB_BASE, + output [13:0] FB_STRIDE, + input FB_VBL, + input FB_LL, + output FB_FORCE_BLANK, + +`ifdef MISTER_FB_PALETTE + // Palette control for 8bit modes. + // Ignored for other video modes. + output FB_PAL_CLK, + output [7:0] FB_PAL_ADDR, + output [23:0] FB_PAL_DOUT, + input [23:0] FB_PAL_DIN, + output FB_PAL_WR, +`endif +`endif + + output LED_USER, // 1 - ON, 0 - OFF. + + // b[1]: 0 - LED status is system status OR'd with b[0] + // 1 - LED status is controled solely by b[0] + // hint: supply 2'b00 to let the system control the LED. + output [1:0] LED_POWER, + output [1:0] LED_DISK, + + // I/O board button press simulation (active high) + // b[1]: user button + // b[0]: osd button + output [1:0] BUTTONS, + + input CLK_AUDIO, // 24.576 MHz + output [15:0] AUDIO_L, + output [15:0] AUDIO_R, + output AUDIO_S, // 1 - signed audio samples, 0 - unsigned + output [1:0] AUDIO_MIX, // 0 - no mix, 1 - 25%, 2 - 50%, 3 - 100% (mono) + + //ADC + inout [3:0] ADC_BUS, + + //SD-SPI + output SD_SCK, + output SD_MOSI, + input SD_MISO, + output SD_CS, + input SD_CD, + + //High latency DDR3 RAM interface + //Use for non-critical time purposes + output DDRAM_CLK, + input DDRAM_BUSY, + output [7:0] DDRAM_BURSTCNT, + output [28:0] DDRAM_ADDR, + input [63:0] DDRAM_DOUT, + input DDRAM_DOUT_READY, + output DDRAM_RD, + output [63:0] DDRAM_DIN, + output [7:0] DDRAM_BE, + output DDRAM_WE, + + //SDRAM interface with lower latency + output SDRAM_CLK, + output SDRAM_CKE, + output [12:0] SDRAM_A, + output [1:0] SDRAM_BA, + inout [15:0] SDRAM_DQ, + output SDRAM_DQML, + output SDRAM_DQMH, + output SDRAM_nCS, + output SDRAM_nCAS, + output SDRAM_nRAS, + output SDRAM_nWE, + +`ifdef MISTER_DUAL_SDRAM + //Secondary SDRAM + //Set all output SDRAM_* signals to Z ASAP if SDRAM2_EN is 0 + input SDRAM2_EN, + output SDRAM2_CLK, + output [12:0] SDRAM2_A, + output [1:0] SDRAM2_BA, + inout [15:0] SDRAM2_DQ, + output SDRAM2_nCS, + output SDRAM2_nCAS, + output SDRAM2_nRAS, + output SDRAM2_nWE, +`endif + + input UART_CTS, + output UART_RTS, + input UART_RXD, + output UART_TXD, + output UART_DTR, + input UART_DSR, + + // Open-drain User port. + // 0 - D+/RX + // 1 - D-/TX + // 2..6 - USR2..USR6 + // Set USER_OUT to 1 to read from USER_IN. + input [6:0] USER_IN, + output [6:0] USER_OUT, + + input OSD_STATUS +); + +///////// Default values for ports not used in this core ///////// + +assign ADC_BUS = 'Z; +assign USER_OUT = '1; +assign {UART_RTS, UART_TXD, UART_DTR} = 0; +assign {SD_SCK, SD_MOSI, SD_CS} = 'Z; +assign CLK_VIDEO = CLK_32M; + +assign VGA_F1 = 0; +assign VGA_SCALER = 0; + +assign AUDIO_S = 1; +assign AUDIO_MIX = 0; + +assign LED_DISK = 0; +assign LED_POWER = 0; +assign BUTTONS = 0; + +////////////////////////////////////////////////////////////////// + +wire [1:0] ar = status[2:1]; +wire [1:0] scandoubler_fx = status[4:3]; +wire [1:0] scale = status[6:5]; +wire pause_in_osd = status[7]; +wire system_pause; + +assign VGA_SL = scandoubler_fx; +assign HDMI_FREEZE = 0; //system_pause; + +wire en_layer_a = ~status[64]; +wire en_layer_b = ~status[65]; +wire en_sprites = ~status[66]; +wire en_layer_palette = ~status[67]; +wire en_sprite_palette = ~status[68]; +wire dbg_sprite_freeze = status[69]; +wire en_audio_filters = ~status[70]; + +wire video_60hz = status[9:8] == 2'd3; +wire video_57hz = status[9:8] == 2'd2; +wire video_50hz = status[9:8] == 2'd1; + +// If video timing changes, force mode update +reg [1:0] video_status; +reg new_vmode = 0; +always @(posedge clk_sys) begin + if (video_status != status[9:8]) begin + video_status <= status[9:8]; + new_vmode <= ~new_vmode; + end +end + +`include "build_id.v" +localparam CONF_STR = { + "M72;;", + "-;", + "O[2:1],Aspect ratio,Original,Full Screen,[ARC1],[ARC2];", + "O[4:3],Scandoubler Fx,None,CRT 25%,CRT 50%,CRT 75%;", + "O[6:5],Scale,Normal,V-Integer,Narrower HV-Integer,Wider HV-Integer;", + "O[7],OSD Pause,Off,On;", + "O[9:8],Video Timing,Normal,50Hz,57Hz,60Hz;", + "O[10],Orientation,Horz,Vert;", + "-;", + "DIP;", + "-;", + "P1,Debug;", + "P1-;", + "P1O[64],Layer A,On,Off;", + "P1O[65],Layer B,On,Off;", + "P1O[66],Sprites,On,Off;", + "P1O[67],Layer Palette,On,Off;", + "P1O[68],Sprite Palette,On,Off;", + "P1O[69],Sprite Freeze,Off,On;", + "P1O[70],Audio Filtering,On,Off;", + "-;", + "T[0],Reset;", + "DEFMRA,/_Arcade/m72.mra;", + "V,v",`BUILD_DATE +}; + +wire forced_scandoubler; +wire [1:0] buttons; +wire [128:0] status; +wire [10:0] ps2_key; + +wire ioctl_download; +wire ioctl_upload; +wire ioctl_upload_req = 0; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; +wire [7:0] ioctl_din = 0; +wire ioctl_wait; + +wire [15:0] joystick_0, joystick_1; +wire [15:0] joy = joystick_0 | joystick_1; + +wire [21:0] gamma_bus; +wire direct_video; +wire video_rotated; +wire no_rotate = ~status[10]; +wire flip = 0; +wire rotate_ccw = 1; + +wire clk_sys = CLK_32M; + +hps_io #(.CONF_STR(CONF_STR)) hps_io +( + .clk_sys(clk_sys), + .HPS_BUS(HPS_BUS), + .EXT_BUS(), + .gamma_bus(gamma_bus), + .direct_video(direct_video), + + .forced_scandoubler(forced_scandoubler), + .new_vmode(new_vmode), + .video_rotated(video_rotated), + + .buttons(buttons), + .status(status), + .status_menumask({direct_video}), + + .ioctl_download(ioctl_download), + .ioctl_upload(ioctl_upload), + .ioctl_upload_req(ioctl_upload_req), + .ioctl_wr(ioctl_wr), + .ioctl_addr(ioctl_addr), + .ioctl_dout(ioctl_dout), + .ioctl_din(ioctl_din), + .ioctl_index(ioctl_index), + .ioctl_wait(ioctl_wait), + + .joystick_0(joystick_0), + .joystick_1(joystick_1), + .ps2_key(ps2_key) +); + +/////////////////////// CLOCKS /////////////////////////////// + +wire CLK_32M; +wire CLK_96M; +wire pll_locked; +pll pll +( + .refclk(CLK_50M), + .rst(0), + .outclk_0(CLK_96M), + .outclk_1(CLK_32M), + .locked(pll_locked) +); + +wire reset = RESET | status[0] | buttons[1]; + +/////////////////////////////////////////////////////////////////////// +// SDRAM +/////////////////////////////////////////////////////////////////////// +wire [63:0] sdr_sprite_dout; +wire [24:1] sdr_sprite_addr; +wire sdr_sprite_req, sdr_sprite_rdy; + +wire [31:0] sdr_bg_dout; +wire [24:1] sdr_bg_addr; +wire sdr_bg_req, sdr_bg_rdy; + +wire [15:0] sdr_cpu_dout, sdr_cpu_din; +wire [24:1] sdr_cpu_addr; +wire sdr_cpu_req; +wire [1:0] sdr_cpu_wr_sel; + +reg [24:1] sdr_rom_addr; +reg [15:0] sdr_rom_data; +reg [1:0] sdr_rom_be; +reg sdr_rom_req; + +wire sdr_rom_write = ioctl_download && (ioctl_index == 0); +wire [24:1] sdr_ch3_addr = sdr_rom_write ? sdr_rom_addr : sdr_cpu_addr; +wire [15:0] sdr_ch3_din = sdr_rom_write ? sdr_rom_data : sdr_cpu_din; +wire [1:0] sdr_ch3_be = sdr_rom_write ? sdr_rom_be : sdr_cpu_wr_sel; +wire sdr_ch3_rnw = sdr_rom_write ? 1'b0 : ~{|sdr_cpu_wr_sel}; +wire sdr_ch3_req = sdr_rom_write ? sdr_rom_req : sdr_cpu_req; +wire sdr_ch3_rdy; +wire sdr_cpu_rdy = sdr_ch3_rdy; +wire sdr_rom_rdy = sdr_ch3_rdy; + +wire [19:0] bram_addr; +wire [7:0] bram_data; +wire [1:0] bram_cs; +wire bram_wr; + +board_cfg_t board_cfg; + +sdram sdram +( + .*, + .doRefresh(0), + .init(~pll_locked), + .clk(CLK_96M), + + .ch1_addr(sdr_bg_addr), + .ch1_dout(sdr_bg_dout), + .ch1_req(sdr_bg_req), + .ch1_ready(sdr_bg_rdy), + + .ch2_addr(sdr_sprite_addr), + .ch2_dout(sdr_sprite_dout), + .ch2_req(sdr_sprite_req), + .ch2_ready(sdr_sprite_rdy), + + // multiplexed with rom download and cpu read/writes + .ch3_addr(sdr_ch3_addr), + .ch3_din(sdr_ch3_din), + .ch3_dout(sdr_cpu_dout), + .ch3_be(sdr_ch3_be), + .ch3_rnw(sdr_ch3_rnw), + .ch3_req(sdr_ch3_req), + .ch3_ready(sdr_ch3_rdy) +); + +rom_loader rom_loader( + .sys_clk(clk_sys), + .ram_clk(CLK_96M), + + .ioctl_wr(ioctl_wr && !ioctl_index), + .ioctl_data(ioctl_dout[7:0]), + + .ioctl_wait(ioctl_wait), + + .sdr_addr(sdr_rom_addr), + .sdr_data(sdr_rom_data), + .sdr_be(sdr_rom_be), + .sdr_req(sdr_rom_req), + .sdr_rdy(sdr_rom_rdy), + + .bram_addr(bram_addr), + .bram_data(bram_data), + .bram_cs(bram_cs), + .bram_wr(bram_wr), + + .board_cfg(board_cfg) +); + +/////////////////// Keyboard ////////////////// +reg btn_up = 0; +reg btn_down = 0; +reg btn_left = 0; +reg btn_right = 0; +reg btn_a = 0; +reg btn_b = 0; +reg btn_x = 0; +reg btn_y = 0; +reg btn_coin1 = 0; +reg btn_coin2 = 0; +reg btn_1p_start = 0; +reg btn_2p_start = 0; +reg btn_pause = 0; + +wire pressed = ps2_key[9]; +wire [7:0] code = ps2_key[7:0]; +always @(posedge CLK_32M) begin + reg old_state; + old_state <= ps2_key[10]; + if(old_state != ps2_key[10]) begin + case(code) + 'h16: btn_1p_start <= pressed; // 1 + 'h1E: btn_2p_start <= pressed; // 2 + 'h2E: btn_coin1 <= pressed; // 5 + 'h36: btn_coin2 <= pressed; // 6 + 'h4D: btn_pause <= pressed; // P + + 'h75: btn_up <= pressed; // up + 'h72: btn_down <= pressed; // down + 'h6B: btn_left <= pressed; // left + 'h74: btn_right <= pressed; // right + 'h14: btn_a <= pressed; // ctrl + 'h11: btn_b <= pressed; // alt + 'h29: btn_x <= pressed; // space + 'h12: btn_y <= pressed; // shift + endcase + end +end + +// DIP SWITCHES +reg [7:0] dip_sw[8]; // Active-LOW +always @(posedge CLK_32M) begin + if(ioctl_wr && (ioctl_index==254) && !ioctl_addr[24:3]) + dip_sw[ioctl_addr[2:0]] <= ioctl_dout; +end + + +////////////////// Arcade Buttons/Interfaces /////////////////////////// + +//Player 1 +wire m_up1 = btn_up | joystick_0[3]; +wire m_down1 = btn_down | joystick_0[2]; +wire m_left1 = btn_left | joystick_0[1]; +wire m_right1 = btn_right | joystick_0[0]; +wire m_btna1 = btn_a | joystick_0[4]; +wire m_btnb1 = btn_b | joystick_0[5]; +wire m_btnx1 = btn_x | joystick_0[6]; +wire m_btny1 = btn_y | joystick_0[7]; + +//Player 2 +wire m_up2 = btn_up | joystick_1[3]; +wire m_down2 = btn_down | joystick_1[2]; +wire m_left2 = btn_left | joystick_1[1]; +wire m_right2 = btn_right | joystick_1[0]; +wire m_btna2 = btn_a | joystick_1[4]; +wire m_btnb2 = btn_b | joystick_1[5]; +wire m_btnx2 = btn_x | joystick_1[6]; +wire m_btny2 = btn_y | joystick_1[7]; + +//Start/coin +wire m_start1 = btn_1p_start | joy[8]; +wire m_start2 = btn_2p_start | joy[10]; +wire m_coin1 = btn_coin1 | joy[9]; +wire m_coin2 = btn_coin2; +wire m_pause = btn_pause | joy[11]; + +////////////////////////////////////////////////////////////////// + +wire [7:0] R, G, B; +wire HBlank, VBlank, HSync, VSync; +wire ce_pix; + +m72 m72( + .CLK_32M(CLK_32M), + .CLK_96M(CLK_96M), + .ce_pix(ce_pix), + .reset_n(~reset), + .HBlank(HBlank), + .VBlank(VBlank), + .HSync(HSync), + .VSync(VSync), + .R(R), + .G(G), + .B(B), + .AUDIO_L(AUDIO_L), + .AUDIO_R(AUDIO_R), + + .board_cfg(board_cfg), + + .coin({~m_coin2, ~m_coin1}), + + .start_buttons({~m_start2, ~m_start1}), + + .p1_joystick({~m_up1, ~m_down1, ~m_left1, ~m_right1}), + .p2_joystick({~m_up2, ~m_down2, ~m_left2, ~m_right2}), + .p1_buttons({~m_btna1, ~m_btnb1, ~m_btnx1, ~m_btny1}), + .p2_buttons({~m_btna2, ~m_btnb2, ~m_btnx2, ~m_btny2}), + + .dip_sw({~dip_sw[1], ~dip_sw[0]}), + + .sdr_sprite_addr(sdr_sprite_addr), + .sdr_sprite_dout(sdr_sprite_dout), + .sdr_sprite_req(sdr_sprite_req), + .sdr_sprite_rdy(sdr_sprite_rdy), + + .sdr_bg_addr(sdr_bg_addr), + .sdr_bg_dout(sdr_bg_dout), + .sdr_bg_req(sdr_bg_req), + .sdr_bg_rdy(sdr_bg_rdy), + + .sdr_cpu_dout(sdr_cpu_dout), + .sdr_cpu_din(sdr_cpu_din), + .sdr_cpu_addr(sdr_cpu_addr), + .sdr_cpu_req(sdr_cpu_req), + .sdr_cpu_rdy(sdr_cpu_rdy), + .sdr_cpu_wr_sel(sdr_cpu_wr_sel), + + .clk_bram(clk_sys), + .bram_addr(bram_addr), + .bram_data(bram_data), + .bram_cs(bram_cs), + .bram_wr(bram_wr), + +`ifdef M72_DEBUG + .pause_rq(system_pause | debug_stall), +`else + .pause_rq(system_pause), +`endif + .ddr_debug_data(ddr_debug_data), + + .en_layer_a(en_layer_a), + .en_layer_b(en_layer_b), + .en_sprites(en_sprites), + .en_layer_palette(en_layer_palette), + .en_sprite_palette(en_sprite_palette), + .en_audio_filters(en_audio_filters), + + .sprite_freeze(dbg_sprite_freeze), + + .video_50hz(video_50hz), + .video_57hz(video_57hz), + .video_60hz(video_60hz) +); + + +wire gamma_hsync, gamma_vsync, gamma_hblank, gamma_vblank; +wire [7:0] gamma_r, gamma_g, gamma_b; +gamma_fast video_gamma +( + .clk_vid(CLK_VIDEO), + .ce_pix(ce_pix), + .gamma_bus(gamma_bus), + .HSync(HSync), + .VSync(VSync), + .HBlank(HBlank), + .VBlank(VBlank), + .DE(), + .RGB_in({R, G, B}), + .HSync_out(gamma_hsync), + .VSync_out(gamma_vsync), + .HBlank_out(gamma_hblank), + .VBlank_out(gamma_vblank), + .DE_out(), + .RGB_out({gamma_r, gamma_g, gamma_b}) +); + +wire VGA_DE_MIXER; +video_mixer #(386, 0, 0) video_mixer( + .CLK_VIDEO(CLK_VIDEO), + .CE_PIXEL(CE_PIXEL), + .ce_pix(ce_pix), + + .scandoubler(forced_scandoubler || scandoubler_fx != 2'b00), + .hq2x(0), + + .gamma_bus(), + + .R(gamma_r), + .G(gamma_g), + .B(gamma_b), + + .HBlank(gamma_hblank), + .VBlank(gamma_vblank), + .HSync(gamma_hsync), + .VSync(gamma_vsync), + + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .VGA_DE(VGA_DE_MIXER), + + .HDMI_FREEZE(HDMI_FREEZE) +); + + +video_freak video_freak( + .CLK_VIDEO(CLK_VIDEO), + .CE_PIXEL(CE_PIXEL), + .VGA_VS(VGA_VS), + .HDMI_WIDTH(HDMI_WIDTH), + .HDMI_HEIGHT(HDMI_HEIGHT), + .VGA_DE(VGA_DE), + .VIDEO_ARX(VIDEO_ARX), + .VIDEO_ARY(VIDEO_ARY), + + .VGA_DE_IN(VGA_DE_MIXER), + .ARX((!ar) ? ( no_rotate ? 12'd4 : 12'd3 ) : (ar - 1'd1)), + .ARY((!ar) ? ( no_rotate ? 12'd3 : 12'd4 ) : 12'd0), + .CROP_SIZE(0), + .CROP_OFF(0), + .SCALE(scale) +); + + +pause pause( + .clk_sys(clk_sys), + .reset(reset), + .user_button(m_pause), + .pause_request(0), + .options({1'b0, pause_in_osd}), + .pause_cpu(system_pause), + .OSD_STATUS(OSD_STATUS) +); + +`ifndef M72_DEBUG // debug uses DDR +screen_rotate screen_rotate(.*); +`endif + + + +ddr_debug_data_t ddr_debug_data; + +`ifdef M72_DEBUG +wire debug_stall; +ddr_debug ddr_debug( + .*, + .data(ddr_debug_data), + .clk(CLK_96M), + .reset(reset | ~pll_locked), + .stall(debug_stall) +); +`endif + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/IremM72_MiST.sv b/Arcade_MiST/IremM72 Hardware/rtl/IremM72_MiST.sv new file mode 100644 index 00000000..dd351ab4 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/IremM72_MiST.sv @@ -0,0 +1,462 @@ +import m72_pkg::*; + +module IremM72_MiST( + output LED, + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + output VGA_HS, + output VGA_VS, + output AUDIO_L, + output AUDIO_R, + input SPI_SCK, + inout SPI_DO, + input SPI_DI, + input SPI_SS2, + input SPI_SS3, + input SPI_SS4, + input CONF_DATA0, + input CLOCK_27, + + output [12:0] SDRAM_A, + inout [15:0] SDRAM_DQ, + output SDRAM_DQML, + output SDRAM_DQMH, + output SDRAM_nWE, + output SDRAM_nCAS, + output SDRAM_nRAS, + output SDRAM_nCS, + output [1:0] SDRAM_BA, + output SDRAM_CLK, + output SDRAM_CKE +); + +`include "rtl/build_id.v" + +`define CORE_NAME "LOHTJ" +//`define CORE_NAME "MRHELI" +//`define CORE_NAME "AIRDUM72" +//`define CORE_NAME "RTYPE" +wire [6:0] core_mod; + +localparam CONF_STR = { + `CORE_NAME,";;", + "O3,Rotate Controls,Off,On;", + "O12,Video Timings,Original,50Hz,57Hz,60Hz;", + "O45,Scanlines,Off,25%,50%,75%;", + "O6,Swap Joystick,Off,On;", + "O7,Blending,Off,On;", + "O8,Pause,Off,On;", +`ifdef DEBUG + "O9,Layer A,On,Off;", + "OA,Layer B,On,Off;", + "OB,Sprites,On,Off;", +`endif + "OC,Audio Filters,On,Off;", + "DIP;", + "T0,Reset;", + "V,v1.0.",`BUILD_DATE +}; + +wire [1:0] vidmode = status[2:1]; +wire rotate = status[3]; +wire [1:0] scanlines = status[5:4]; +wire joyswap = status[6]; +wire blend = status[7]; +wire system_pause = status[8]; +wire en_layer_a = ~status[9]; +wire en_layer_b = ~status[10]; +wire en_sprites = ~status[11]; +wire video_50hz = vidmode == 1; +wire video_57hz = vidmode == 2; +wire video_60hz = vidmode == 3; +wire filters = ~status[12]; +wire [1:0] orientation = {1'b0, core_mod[0]}; +reg oneplayer = 0; +wire [15:0] dip_sw = status[31:16]; + +assign LED = ~ioctl_downl; +assign SDRAM_CLK = CLK_96M; +assign SDRAM_CKE = 1; + +wire CLK_96M, CLK_32M; +wire pll_locked; +pll_mist pll( + .inclk0(CLOCK_27), + .c0(CLK_96M), + .c1(CLK_32M), + .locked(pll_locked) + ); + +wire [31:0] status; +wire [1:0] buttons; +wire [1:0] switches; +wire [7:0] joystick_0; +wire [7:0] joystick_1; +wire scandoublerD; +wire ypbpr; +wire no_csync; +wire key_pressed; +wire [7:0] key_code; +wire key_strobe; + +user_io #( + .STRLEN(($size(CONF_STR)>>3)), + .ROM_DIRECT_UPLOAD(1'b1)) +user_io( + .clk_sys (CLK_32M ), + .conf_str (CONF_STR ), + .SPI_CLK (SPI_SCK ), + .SPI_SS_IO (CONF_DATA0 ), + .SPI_MISO (SPI_DO ), + .SPI_MOSI (SPI_DI ), + .buttons (buttons ), + .switches (switches ), + .scandoubler_disable (scandoublerD ), + .ypbpr (ypbpr ), + .no_csync (no_csync ), + .core_mod (core_mod ), + .key_strobe (key_strobe ), + .key_pressed (key_pressed ), + .key_code (key_code ), + .joystick_0 (joystick_0 ), + .joystick_1 (joystick_1 ), + .status (status ) + ); + +wire ioctl_downl; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; + +data_io #(.ROM_DIRECT_UPLOAD(1'b1)) data_io( + .clk_sys ( CLK_32M ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS2 ( SPI_SS2 ), + .SPI_SS4 ( SPI_SS4 ), + .SPI_DI ( SPI_DI ), + .SPI_DO ( SPI_DO ), + .clkref_n ( 1'b0 ), + .ioctl_download( ioctl_downl ), + .ioctl_index ( ioctl_index ), + .ioctl_wr ( ioctl_wr ), + .ioctl_addr ( ioctl_addr ), + .ioctl_dout ( ioctl_dout ) +); + +// reset signal generation +reg reset = 1; +reg rom_loaded = 0; +always @(posedge CLK_32M) begin + reg ioctl_downlD; + reg [15:0] reset_count; + ioctl_downlD <= ioctl_downl; + + if (status[0] | buttons[1] | ~rom_loaded) reset_count <= 16'hffff; + else if (reset_count != 0) reset_count <= reset_count - 1'd1; + + if (ioctl_downlD & ~ioctl_downl) rom_loaded <= 1; + reset <= reset_count != 16'h0000; + +end + +wire [63:0] sdr_sprite_dout; +wire [24:1] sdr_sprite_addr; +wire sdr_sprite_req, sdr_sprite_ack; + +wire [31:0] sdr_bg_data_a; +wire [24:1] sdr_bg_addr_a; +wire sdr_bg_req_a, sdr_bg_ack_a; + +wire [31:0] sdr_bg_data_b; +wire [24:1] sdr_bg_addr_b; +wire sdr_bg_req_b, sdr_bg_ack_b; + +wire [15:0] sdr_cpu_dout, sdr_cpu_din; +wire [24:1] sdr_cpu_addr; +wire sdr_cpu_req, sdr_cpu_ack; +wire [1:0] sdr_cpu_wr_sel; + +wire [24:1] sdr_rom_addr; +wire [15:0] sdr_rom_data; +wire [1:0] sdr_rom_be; +wire sdr_rom_req; +wire sdr_rom_ack; + +wire [15:0] cpu2_ram_q; +wire [24:0] sdr_z80_ram_addr; +wire [7:0] sdr_z80_ram_data; +wire [7:0] sdr_z80_ram_dout = sdr_z80_ram_addr[0] ? cpu2_ram_q[15:8] : cpu2_ram_q[7:0]; +wire sdr_z80_ram_we; +wire sdr_z80_ram_cs; +wire sdr_z80_ram_valid; + +wire [24:0] sample_rom_addr; +wire [63:0] sample_rom_data; +wire sample_rom_req; +wire sample_rom_ack; + +wire sdr_rom_write = ioctl_downl && (ioctl_index == 0); + +wire [19:0] bram_addr; +wire [7:0] bram_data; +wire [1:0] bram_cs; +wire bram_wr; + +board_cfg_t board_cfg; +sdram_4w #(96) sdram +( + .*, + .init_n ( pll_locked ), + .clk ( CLK_96M ), + + // Bank 0-1 ops + .port1_a ( sdr_rom_addr ), + .port1_req ( sdr_rom_req ), + .port1_ack ( sdr_rom_ack ), + .port1_we ( sdr_rom_write ), + .port1_ds ( sdr_rom_be ), + .port1_d ( sdr_rom_data ), + .port1_q ( sdr_rom_ack ), + + // Main CPU + .cpu1_rom_addr ( ), + .cpu1_rom_cs ( ), + .cpu1_rom_q ( ), + .cpu1_rom_valid( ), + + .cpu1_ram_req ( sdr_cpu_req ), + .cpu1_ram_ack ( sdr_cpu_ack ), + .cpu1_ram_addr ( sdr_cpu_addr ), + .cpu1_ram_we ( |sdr_cpu_wr_sel ), + .cpu1_ram_d ( sdr_cpu_din ), + .cpu1_ram_q ( sdr_cpu_dout ), + .cpu1_ram_ds ( |sdr_cpu_wr_sel ? sdr_cpu_wr_sel : 2'b11 ), + + // Audio Z80 + .cpu2_addr ( sdr_z80_ram_addr[24:1] ), + .cpu2_cs ( sdr_z80_ram_cs ), + .cpu2_valid ( sdr_z80_ram_valid ), + .cpu2_d ( {sdr_z80_ram_data, sdr_z80_ram_data} ), + .cpu2_we ( sdr_z80_ram_we ), + .cpu2_ds ( {sdr_z80_ram_addr[0], ~sdr_z80_ram_addr[0]} ), + .cpu2_q ( cpu2_ram_q ), + + // + .cpu3_addr ( ), + .cpu3_req ( ), + .cpu3_q ( ), + .cpu3_ack ( ), + + // Bank 2-3 ops + .port2_a ( sdr_rom_addr ), + .port2_req ( sdr_rom_req ), + .port2_ack ( sdr_rom_ack ), + .port2_we ( sdr_rom_write ), + .port2_ds ( sdr_rom_be ), + .port2_d ( sdr_rom_data ), + .port2_q ( sdr_rom_ack ), + + .gfx1_req ( sdr_bg_req_a ), + .gfx1_ack ( sdr_bg_ack_a ), + .gfx1_addr ( sdr_bg_addr_a ), + .gfx1_q ( sdr_bg_data_a ), + + .gfx2_req ( sdr_bg_req_b ), + .gfx2_ack ( sdr_bg_ack_b ), + .gfx2_addr ( sdr_bg_addr_b ), + .gfx2_q ( sdr_bg_data_b ), + + .sample_addr ( {sample_rom_addr[22:3], 2'b00} ), + .sample_data ( sample_rom_data ), + .sample_req ( sample_rom_req ), + .sample_ack ( sample_rom_ack ), + + .sp_addr ( sdr_sprite_addr ), + .sp_req ( sdr_sprite_req ), + .sp_ack ( sdr_sprite_ack ), + .sp_q ( sdr_sprite_dout ) +); + +rom_loader rom_loader( + .sys_clk(CLK_32M), + + .ioctl_downl(ioctl_downl), + .ioctl_wr(ioctl_wr && !ioctl_index), + .ioctl_data(ioctl_dout[7:0]), + + .ioctl_wait(), + + .sdr_addr(sdr_rom_addr), + .sdr_data(sdr_rom_data), + .sdr_be(sdr_rom_be), + .sdr_req(sdr_rom_req), + .sdr_ack(sdr_rom_ack), + + .bram_addr(bram_addr), + .bram_data(bram_data), + .bram_cs(bram_cs), + .bram_wr(bram_wr), + + .board_cfg(board_cfg) +); + +wire [15:0] ch_left, ch_right; +wire [7:0] R, G, B; +wire HBlank, VBlank, HSync, VSync; +wire blankn = !(HBlank | VBlank); +wire ce_pix; + +ddr_debug_data_t ddr_debug_data; + +m72 m72( + .CLK_32M(CLK_32M), + .CLK_96M(CLK_96M), + .ce_pix(ce_pix), + .reset_n(~reset), + .HBlank(HBlank), + .VBlank(VBlank), + .HSync(HSync), + .VSync(VSync), + .R(R), + .G(G), + .B(B), + .AUDIO_L(ch_left), + .AUDIO_R(ch_right), + + .board_cfg(board_cfg), + + .coin({~m_coin2, ~m_coin1}), + + .start_buttons({~m_two_players, ~m_one_player}), + + .p1_joystick({~m_up, ~m_down, ~m_left, ~m_right}), + .p2_joystick({~m_up2, ~m_down2, ~m_left2, ~m_right2}), + .p1_buttons({~m_fireA, ~m_fireB, ~m_fireC, ~m_fireD}), + .p2_buttons({~m_fire2A, ~m_fire2B, ~m_fire2C, ~m_fire2D}), + + .dip_sw(~dip_sw), + + .sdr_sprite_addr(sdr_sprite_addr), + .sdr_sprite_dout(sdr_sprite_dout), + .sdr_sprite_req(sdr_sprite_req), + .sdr_sprite_ack(sdr_sprite_ack), + + .sdr_bg_data_a(sdr_bg_data_a), + .sdr_bg_addr_a(sdr_bg_addr_a), + .sdr_bg_req_a(sdr_bg_req_a), + .sdr_bg_ack_a(sdr_bg_ack_a), + + .sdr_bg_data_b(sdr_bg_data_b), + .sdr_bg_addr_b(sdr_bg_addr_b), + .sdr_bg_req_b(sdr_bg_req_b), + .sdr_bg_ack_b(sdr_bg_ack_b), + + .sdr_cpu_dout(sdr_cpu_dout), + .sdr_cpu_din(sdr_cpu_din), + .sdr_cpu_addr(sdr_cpu_addr), + .sdr_cpu_req(sdr_cpu_req), + .sdr_cpu_ack(sdr_cpu_ack), + .sdr_cpu_wr_sel(sdr_cpu_wr_sel), + + .sdr_z80_ram_addr(sdr_z80_ram_addr), + .sdr_z80_ram_data(sdr_z80_ram_data), + .sdr_z80_ram_dout(sdr_z80_ram_dout), + .sdr_z80_ram_we(sdr_z80_ram_we), + .sdr_z80_ram_cs(sdr_z80_ram_cs), + .sdr_z80_ram_valid(sdr_z80_ram_valid), + + .sample_rom_addr(sample_rom_addr), + .sample_rom_data(sample_rom_data), + .sample_rom_req(sample_rom_req), + .sample_rom_ack(sample_rom_ack), + + .clk_bram(CLK_32M), + .bram_addr(bram_addr), + .bram_data(bram_data), + .bram_cs(bram_cs), + .bram_wr(bram_wr), + +`ifdef M72_DEBUG + .pause_rq(system_pause | debug_stall), +`else + .pause_rq(system_pause), +`endif + .en_layer_a(en_layer_a), + .en_layer_b(en_layer_b), + .en_sprites(en_sprites), + .en_layer_palette(1'b1), + .en_sprite_palette(1'b1), + .en_audio_filters(filters), + + .sprite_freeze(dbg_sprite_freeze), + + .video_50hz(video_50hz), + .video_57hz(video_57hz), + .video_60hz(video_60hz) +); + +mist_video #(.COLOR_DEPTH(6), .SD_HCNT_WIDTH(10)) mist_video( + .clk_sys ( CLK_32M ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS3 ( SPI_SS3 ), + .SPI_DI ( SPI_DI ), + .R ( blankn ? R[7:2] : 0 ), + .G ( blankn ? G[7:2] : 0 ), + .B ( blankn ? B[7:2] : 0 ), + .HSync ( HSync ), + .VSync ( VSync ), + .VGA_R ( VGA_R ), + .VGA_G ( VGA_G ), + .VGA_B ( VGA_B ), + .VGA_VS ( VGA_VS ), + .VGA_HS ( VGA_HS ), + .rotate ( { orientation[1], rotate } ), + .ce_divider ( 1'b1 ), + .scandoubler_disable( scandoublerD ), + .scanlines ( scanlines ), + .blend ( blend ), + .ypbpr ( ypbpr ), + .no_csync ( no_csync ) + ); + +dac #( + .C_bits(16)) +dacl( + .clk_i(CLK_32M), + .res_n_i(1), + .dac_i({~ch_left[15], ch_left[14:0]}), + .dac_o(AUDIO_L) + ); + +dac #( + .C_bits(16)) +dacr( + .clk_i(CLK_32M), + .res_n_i(1), + .dac_i({~ch_right[15], ch_right[14:0]}), + .dac_o(AUDIO_R) + ); + +wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF; +wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F; +wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players; + +arcade_inputs inputs ( + .clk ( CLK_32M ), + .key_strobe ( key_strobe ), + .key_pressed ( key_pressed ), + .key_code ( key_code ), + .joystick_0 ( joystick_0 ), + .joystick_1 ( joystick_1 ), + .rotate ( rotate ), + .orientation ( orientation ), + .joyswap ( joyswap ), + .oneplayer ( oneplayer ), + .controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ), + .player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ), + .player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} ) +); + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/board_b_d.sv b/Arcade_MiST/IremM72 Hardware/rtl/board_b_d.sv new file mode 100644 index 00000000..c9ae1d69 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/board_b_d.sv @@ -0,0 +1,208 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - B-D board, two background layers +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + + +module board_b_d ( + input CLK_32M, + input CE_PIX, + + output [15:0] DOUT, + output DOUT_VALID, + + input [15:0] DIN, + input [19:0] A, + input [1:0] BYTE_SEL, + + input [7:0] IO_A, + input [7:0] IO_DIN, + + input MRD, + input MWR, + input IORD, + input IOWR, + input CHARA, + input CHARA_P, + input NL, + + input [8:0] VE, + input [8:0] HE, + + output [4:0] RED, + output [4:0] GREEN, + output [4:0] BLUE, + output P1L, + + input [31:0] sdr_data_a, + output [24:1] sdr_addr_a, + output sdr_req_a, + input sdr_ack_a, + + input [31:0] sdr_data_b, + output [24:1] sdr_addr_b, + output sdr_req_b, + input sdr_ack_b, + + input paused, + + input en_layer_a, + input en_layer_b, + input en_palette +); + +// M72-B-D 1/8 +// Didn't implement WAIT signal +wire WRA = MWR & CHARA & ~A[15]; +wire WRB = MWR & CHARA & A[15]; +wire RDA = MRD & CHARA & ~A[15]; +wire RDB = MRD & CHARA & A[15]; + +wire VSCKA = IOWR & (IO_A[7:6] == 2'b10) & (IO_A[3:1] == 3'b000); +wire HSCKA = IOWR & (IO_A[7:6] == 2'b10) & (IO_A[3:1] == 3'b001); +wire VSCKB = IOWR & (IO_A[7:6] == 2'b10) & (IO_A[3:1] == 3'b010); +wire HSCKB = IOWR & (IO_A[7:6] == 2'b10) & (IO_A[3:1] == 3'b011); + +wire [3:0] BITA; +wire [3:0] BITB; +wire [3:0] COLA; +wire [3:0] COLB; +wire CP15A, CP15B, CP8A, CP8B; + +wire [15:0] DOUT_A, DOUT_B; + +assign DOUT = pal_dout_valid ? pal_dout : RDA ? DOUT_A : DOUT_B; +assign DOUT_VALID = RDA | RDB | pal_dout_valid; + +wire [17:0] addr_a, addr_b; +assign sdr_addr_a = { REGION_BG_A.base_addr[24:19], addr_a }; +assign sdr_addr_b = { REGION_BG_B.base_addr[24:19], addr_b }; + +board_b_d_layer layer_a( + .CLK_32M(CLK_32M), + .CE_PIX(CE_PIX), + + .DOUT(DOUT_A), + .DIN(DIN), + .A(A), + .BYTE_SEL(BYTE_SEL), + .RD(RDA), + .WR(WRA), + + .IO_DIN(IO_DIN), + .IO_A(IO_A), + + .VSCK(VSCKA), + .HSCK(HSCKA), + .NL(NL), + + .VE(VE), + .HE(HE), + + .BIT(BITA), + .COL(COLA), + .CP15(CP15A), + .CP8(CP8A), + + .sdr_addr(addr_a), + .sdr_data(sdr_data_a), + .sdr_req(sdr_req_a), + .sdr_ack(sdr_ack_a), + + .enabled(en_layer_a), + .paused(paused) +); + +board_b_d_layer layer_b( + .CLK_32M(CLK_32M), + .CE_PIX(CE_PIX), + + .DOUT(DOUT_B), + .DIN(DIN), + .A(A), + .BYTE_SEL(BYTE_SEL), + .RD(RDB), + .WR(WRB), + + .IO_DIN(IO_DIN), + .IO_A(IO_A), + + .VSCK(VSCKB), + .HSCK(HSCKB), + .NL(NL), + + .VE(VE), + .HE(HE), + + .BIT(BITB), + .COL(COLB), + .CP15(CP15B), + .CP8(CP8B), + + .sdr_addr(addr_b), + .sdr_data(sdr_data_b), + .sdr_req(sdr_req_b), + .sdr_ack(sdr_ack_b), + + .enabled(en_layer_b), + .paused(paused) +); + +wire [4:0] r_out, g_out, b_out; +wire [15:0] pal_dout; +wire pal_dout_valid; + +wire a_opaque = (BITA != 4'b0000); +wire b_opaque = (BITB != 4'b0000); + +wire S = a_opaque; + +assign P1L = ~(CP15A & a_opaque) & ~(CP15B & b_opaque) & ~(CP8A & BITA[3]) & ~(CP8B & BITB[3]); + +kna91h014 kna91h014( + .CLK_32M(CLK_32M), + + .G(CHARA_P), + .SELECT(S), + .CA({COLA, BITA}), + .CB({COLB, BITB}), + + .E1_N(), // TODO + .E2_N(), // TODO + + .MWR(MWR & BYTE_SEL[0]), + .MRD(MRD), + + .DIN(DIN), + .DOUT(pal_dout), + .DOUT_VALID(pal_dout_valid), + .A(A), + + .RED(r_out), + .GRN(g_out), + .BLU(b_out) +); + +assign RED = en_palette ? r_out : b_opaque ? { BITB, BITB[3] } : { BITA, BITA[3] }; +assign GREEN = en_palette ? g_out : b_opaque ? { BITB, BITB[3] } : { BITA, BITA[3] }; +assign BLUE = en_palette ? b_out : b_opaque ? { BITB, BITB[3] } : { BITA, BITA[3] }; + +endmodule + + + diff --git a/Arcade_MiST/IremM72 Hardware/rtl/board_b_d_layer.sv b/Arcade_MiST/IremM72 Hardware/rtl/board_b_d_layer.sv new file mode 100644 index 00000000..7f59dac3 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/board_b_d_layer.sv @@ -0,0 +1,174 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Background layer +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module board_b_d_layer( + input CLK_32M, + input CE_PIX, + + input [15:0] DIN, + output [15:0] DOUT, + input [19:0] A, + input [1:0] BYTE_SEL, + input RD, + input WR, + + input [7:0] IO_A, + input [7:0] IO_DIN, + + input VSCK, + input HSCK, + input NL, + + input [8:0] VE, + input [8:0] HE, + + output [3:0] BIT, + output [3:0] COL, + output CP15, + output CP8, + + input [31:0] sdr_data, + output [17:0] sdr_addr, + output sdr_req, + input sdr_ack, + + input enabled, + input paused +); + +assign DOUT = { dout_h, dout_l }; + +wire [7:0] dout_h, dout_l; + +dpramv #(.widthad_a(13)) ram_l +( + .clock_a(CLK_32M), + .address_a(A[13:1]), + .q_a(dout_l), + .wren_a(WR & BYTE_SEL[0]), + .data_a(DIN[7:0]), + + .clock_b(CLK_32M), + .address_b({SV[8:3], SH[8:2]}), + .data_b(), + .wren_b(1'd0), + .q_b(ram_l_dout) +); + +dpramv #(.widthad_a(13)) ram_h +( + .clock_a(CLK_32M), + .address_a(A[13:1]), + .q_a(dout_h), + .wren_a(WR & BYTE_SEL[1]), + .data_a(DIN[15:8]), + + .clock_b(CLK_32M), + .address_b({SV[8:3], SH[8:2]}), + .data_b(), + .wren_b(1'd0), + .q_b(ram_h_dout) +); + +reg [31:0] rom_data; +wire [3:0] BITF, BITR; + +kna6034201 kna6034201( + .clock(CLK_32M), + .CE_PIXEL(CE_PIX), + .LOAD(SH[2:0] == 3'b111), + .byte_1(enabled ? rom_data[7:0] : 8'h00), + .byte_2(enabled ? rom_data[15:8] : 8'h00), + .byte_3(enabled ? rom_data[23:16] : 8'h00), + .byte_4(enabled ? rom_data[31:24] : 8'h00), + .bit_1(BITF[0]), + .bit_2(BITF[1]), + .bit_3(BITF[2]), + .bit_4(BITF[3]), + .bit_1r(BITR[0]), + .bit_2r(BITR[1]), + .bit_3r(BITR[2]), + .bit_4r(BITR[3]) +); + +wire [8:0] SV = VE + adj_v; +wire [8:0] SH = ( HE + adj_h ) ^ { 6'b0, {3{NL}} }; + +reg [8:0] adj_v; +reg [8:0] adj_h; + +reg HREV1, VREV, HREV2; +reg [13:0] COD; +reg [7:0] row_data1, row_data; + +wire [2:0] RV = SV[2:0] ^ {3{VREV}}; + +wire [7:0] ram_h_dout, ram_l_dout; + +assign COL = row_data[3:0]; +assign CP15 = row_data[7]; +assign CP8 = row_data[6]; + +assign BIT = (HREV2 ^ NL) ? BITR : BITF; + +//reg [17:0] paused_offsets[512]; +//reg [8:0] ve_latch; + +always @(posedge CLK_32M) begin + //ve_latch <= VE; + //if (paused) begin + //{adj_v, adj_h} <= paused_offsets[ve_latch]; + //end else begin + if (VSCK & ~IO_A[0]) adj_v[7:0] <= IO_DIN[7:0]; + if (HSCK & ~IO_A[0]) adj_h[7:0] <= IO_DIN[7:0]; + if (VSCK & IO_A[0]) adj_v[8] <= IO_DIN[0]; + if (HSCK & IO_A[0]) adj_h[8] <= IO_DIN[0]; + //paused_offsets[ve_latch] <= {adj_v, adj_h}; + //end +end + +always @(posedge CLK_32M) begin + reg do_rom; + + do_rom <= 0; + + if (do_rom) begin + sdr_addr <= {COD[13:0], RV[2:0], 1'b0}; + sdr_req <= ~sdr_req; + end else if (sdr_req == sdr_ack) begin + rom_data <= sdr_data; + end + + if (CE_PIX) begin + if (SH[2:0] == 2'b001) begin + { VREV, HREV1, COD } <= { ram_h_dout, ram_l_dout }; + do_rom <= 1; + end + + if (SH[2:0] == 3'b101) row_data1 <= ram_l_dout; + if (SH[2:0] == 3'b111) begin + row_data <= row_data1; + HREV2 <= HREV1; + end + end +end + + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/build_id.tcl b/Arcade_MiST/IremM72 Hardware/rtl/build_id.tcl similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/build_id.tcl rename to Arcade_MiST/IremM72 Hardware/rtl/build_id.tcl diff --git a/Arcade_MiST/IremM72 Hardware/rtl/ddr_debug.sv b/Arcade_MiST/IremM72 Hardware/rtl/ddr_debug.sv new file mode 100644 index 00000000..c30151b3 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/ddr_debug.sv @@ -0,0 +1,224 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - DDR-based tracing system +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + + +typedef struct { + bit [15:0] cpu_cs; + bit [15:0] cpu_ip; + bit [7:0] cpu_opcode; + bit [1:0] cpu_ext_we; + bit [11:0] cpu_ext_addr; + bit [15:0] cpu_ext_data; + + bit mcu_ext_we; + bit [11:0] mcu_ext_addr; + bit [7:0] mcu_ext_data; + + bit [15:0] mcu_rom_addr; +} ddr_debug_data_t; + +module ddr_debug( + input clk, + input reset, + + // ddr interface + output DDRAM_CLK, + input DDRAM_BUSY, + output [7:0] DDRAM_BURSTCNT, + output [28:0] DDRAM_ADDR, + input [63:0] DDRAM_DOUT, + input DDRAM_DOUT_READY, + output DDRAM_RD, + output [63:0] DDRAM_DIN, + output [7:0] DDRAM_BE, + output DDRAM_WE, + + output reg stall, + + input ddr_debug_data_t data +); + + +// extram cpu 00 - 2 bit r/w, 12 bit addr, 16 bit data = 30 bits +// extram mcu 10 - 1 bit r/w, 12 bit addr, 8 bit data = 21 bits +// cpu cs 11 - 16 bits +// cpu ip 111 - 16 bits +// mcu rom_addr 1111 - 16 bits + + + +assign DDRAM_BE = 8'hff; +assign DDRAM_CLK = clk; + + +wire [31:0] base_addr = 32'h3000_0000; +wire [31:0] write_count_addr = 32'h3400_0000; +wire [31:0] read_count_addr = 32'h3400_0008; +wire [31:0] init_count_addr = 32'h3400_0010; + +reg [63:0] write_count = 0; +reg [63:0] read_count = 0; + + +reg [31:0] block_00[128]; +reg [31:0] block_01[128]; +reg [31:0] block_10[128]; +reg [31:0] block_11[128]; + + +reg [1:0] ready_to_send; +enum { INIT, INIT2, IDLE, UPDATE_RQ, BLOCK0, BLOCK1 } state = INIT; +reg [6:0] send_cnt = 0; + +reg [31:0] last_cmd[6]; +reg [31:0] send_cmd; +reg send_cmd_valid; +reg [8:0] entry_count = 0; +reg [3:0] cmd_idx = 0; +reg [7:0] init_count = 0; +reg [7:0] idle_count = 0; + +/* each block is 1024 bytes in size (128, 8 bytes bursts) + * 64MB (0x4000000) of memory for blocks which is 64k blocks (0x10000) + * Blocks are written to 0x3000000 - 0x34000000 + * 0x3400000 and 0x34000008 hold the block written and block read counts + * If written - read > 0x8000, pause the game. + */ + +always @(posedge clk) begin + bit [31:0] cmd[6]; + + send_cmd_valid <= 0; + stall <= ( write_count - read_count ) > 'hc000; + DDRAM_WE <= 0; + DDRAM_RD <= 0; + + if (reset) begin + write_count <= 0; + read_count <= 0; + state <= INIT; + ready_to_send <= 2'b00; + last_cmd[0] <= 0; + last_cmd[1] <= 0; + last_cmd[2] <= 0; + last_cmd[3] <= 0; + last_cmd[4] <= 0; + entry_count <= 0; + end else begin + if (~DDRAM_BUSY) begin + if (DDRAM_DOUT_READY) begin + read_count <= DDRAM_DOUT; + end + + case (state) + INIT: begin + DDRAM_WE <= 1; + DDRAM_BURSTCNT <= 1; + DDRAM_ADDR <= write_count_addr[31:3]; + DDRAM_DIN <= 64'd0; + state <= INIT2; + init_count <= init_count + 8'd1; + end + INIT2: begin + DDRAM_WE <= 1; + DDRAM_BURSTCNT <= 1; + DDRAM_ADDR <= init_count_addr[31:3]; + DDRAM_DIN <= init_count; + state <= IDLE; + end + BLOCK0: begin + send_cnt <= send_cnt + 7'd1; + DDRAM_WE <= 1; + DDRAM_DIN <= {block_01[send_cnt], block_00[send_cnt]}; + if (send_cnt == 7'd127) state <= UPDATE_RQ; + end + BLOCK1: begin + send_cnt <= send_cnt + 7'd1; + DDRAM_WE <= 1; + DDRAM_DIN <= {block_11[send_cnt], block_10[send_cnt]}; + if (send_cnt == 7'd127) state <= UPDATE_RQ; + end + UPDATE_RQ: begin + DDRAM_WE <= 1; + DDRAM_BURSTCNT <= 1; + DDRAM_ADDR <= write_count_addr[31:3]; + DDRAM_DIN <= write_count; + state <= IDLE; + end + IDLE: begin + idle_count <= idle_count + 8'd1; + if (ready_to_send != 2'd0) begin + bit [31:0] addr; + write_count <= write_count + 17'd1; + addr = base_addr | { write_count[15:0], 10'd0 }; + DDRAM_ADDR <= addr[31:3]; + DDRAM_BURSTCNT <= 8'h80; + send_cnt <= 7'd0; + if (ready_to_send[0]) begin + state <= BLOCK0; + ready_to_send[0] <= 0; + end else begin + state <= BLOCK1; + ready_to_send[1] <= 0; + end + end else if (idle_count == 8'd0) begin + DDRAM_RD <= 1; + DDRAM_BURSTCNT <= 1; + DDRAM_ADDR <= read_count_addr[31:3]; + end + end + endcase + end + + send_cmd_valid <= 0; + + cmd_idx <= cmd_idx + 4'd1; + if (cmd_idx == 4'd4) cmd_idx <= 4'd0; + + cmd[0] = { 2'b01, data.cpu_ext_we, data.cpu_ext_addr, data.cpu_ext_data }; + cmd[1] = { 2'b10, 9'b0, data.mcu_ext_we, data.mcu_ext_addr, data.mcu_ext_data }; + cmd[2] = { 8'b11000000, 8'b0, data.cpu_cs }; + cmd[3] = { 8'b11000001, data.cpu_opcode, data.cpu_ip }; + cmd[4] = { 8'b11000010, 8'b0, data.mcu_rom_addr }; + + if (cmd[cmd_idx] != last_cmd[cmd_idx]) begin + last_cmd[cmd_idx] <= cmd[cmd_idx]; + send_cmd <= cmd[cmd_idx]; + send_cmd_valid <= 1; + end + + if (send_cmd_valid) begin + entry_count <= entry_count + 9'd1; + case( {entry_count[8], entry_count[0]} ) + 2'b00: block_00[entry_count[7:1]] <= send_cmd; + 2'b01: block_01[entry_count[7:1]] <= send_cmd; + 2'b10: block_10[entry_count[7:1]] <= send_cmd; + 2'b11: block_11[entry_count[7:1]] <= send_cmd; + endcase + if (entry_count[8:0] == 9'h0ff) ready_to_send[0] <= 1; + if (entry_count[8:0] == 9'h1ff) ready_to_send[1] <= 1; + end + end +end + +endmodule + + + diff --git a/Arcade_MiST/IremM72 Hardware/rtl/dpramv.sv b/Arcade_MiST/IremM72 Hardware/rtl/dpramv.sv new file mode 100644 index 00000000..63be5e58 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/dpramv.sv @@ -0,0 +1,57 @@ +`timescale 1ns / 1ps + +module dpramv #( + parameter width_a = 8, + parameter widthad_a = 10, + parameter init_file= "", + parameter prefix= "", + parameter p= "" +) ( + // Port A + input wire clock_a, + input wire wren_a, + input wire [widthad_a-1:0] address_a, + input wire [width_a-1:0] data_a, + output reg [width_a-1:0] q_a, + + // Port B + input wire clock_b, + input wire wren_b, + input wire [widthad_a-1:0] address_b, + input wire [width_a-1:0] data_b, + output reg [width_a-1:0] q_b +); + + initial begin + if (init_file>0) begin + $display("Loading rom."); + $display(init_file); + $readmemh(init_file, ram); + end + end + + +// Shared ramory +reg [width_a-1:0] ram[(2**widthad_a)-1:0]; + +// Port A +always @(posedge clock_a) begin + if (wren_a) begin + ram[address_a] <= data_a; + q_a <= data_a; + end else begin + q_a <= ram[address_a]; + end +end + +// Port B +always @(posedge clock_b) begin + if(wren_b) begin + q_b <= data_b; + ram[address_b] <= data_b; + end else begin + q_b <= ram[address_b]; + end +end + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/dualport_mailbox.sv b/Arcade_MiST/IremM72 Hardware/rtl/dualport_mailbox.sv new file mode 100644 index 00000000..17a721b6 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/dualport_mailbox.sv @@ -0,0 +1,109 @@ + +//============================================================================ +// Irem M72 for MiSTer FPGA - Dualport memory with mailbox functionality +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +// Based on the MB8421 + +// Left port is 16-bit, right port in 8-bit +// +module dualport_mailbox_2kx16( + input reset, + + input clk_l, + input cs_l, + input [11:1] addr_l, + input [15:0] din_l, + output [15:0] dout_l, + input [1:0] we_l, + output int_l, + + input clk_r, + input cs_r, + input [11:0] addr_r, + input [7:0] din_r, + output [7:0] dout_r, + input we_r, + output int_r +); + +wire [7:0] dout_0_l, dout_1_l; +wire [7:0] dout_0_r, dout_1_r; + +assign dout_l = { dout_1_l, dout_0_l }; +assign dout_r = addr_r[0] ? dout_1_r : dout_0_r; + +assign int_l = int_l_rq != int_l_ack; +assign int_r = int_r_rq != int_r_ack; + +reg int_l_rq = 0; +reg int_l_ack = 0; +reg int_r_rq = 0; +reg int_r_ack = 0; + +always @(posedge clk_l) begin + if (reset) begin + int_l_ack <= 0; + int_r_rq <= 0; + end else if (cs_l) begin + if (we_l != 2'b00 && addr_l[11:1] == 'h7ff) int_r_rq <= ~int_r_ack; + if (we_l == 2'b00 && addr_l[11:1] == 'h7fe) int_l_ack <= int_l_rq; + end +end + +always @(posedge clk_r) begin + if (reset) begin + int_l_rq <= 0; + int_r_ack <= 0; + end else if (cs_r) begin + if (we_r && addr_r[11:1] == 'h7fe) int_l_rq <= ~int_l_ack; + if (~we_r && addr_r[11:1] == 'h7ff) int_r_ack <= int_r_rq; + end +end + + +dpramv #(.widthad_a(11)) ram_0( + .clock_a(clk_l), + .address_a(addr_l[11:1]), + .q_a(dout_0_l), + .wren_a(we_l[0]), + .data_a(din_l[7:0]), + + .clock_b(clk_r), + .address_b(addr_r[11:1]), + .q_b(dout_0_r), + .wren_b(we_r & ~addr_r[0]), + .data_b(din_r) +); + +dpramv #(.widthad_a(11)) ram_1( + .clock_a(clk_l), + .address_a(addr_l[11:1]), + .q_a(dout_1_l), + .wren_a(we_l[1]), + .data_a(din_l[15:8]), + + .clock_b(clk_r), + .address_b(addr_r[11:1]), + .q_b(dout_1_r), + .wren_b(we_r & addr_r[0]), + .data_b(din_r) +); + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/rtl/iir_filter.v b/Arcade_MiST/IremM72 Hardware/rtl/iir_filter.v new file mode 100644 index 00000000..a5336e98 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/iir_filter.v @@ -0,0 +1,213 @@ + +// 3-tap IIR filter for 2 channels. +// Copyright (C) 2020 Sorgelig +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +// +// Can be converted to 2-tap (coeff_x2 = 0, coeff_y2 = 0) or 1-tap (coeff_x1,2 = 0, coeff_y1,2 = 0) +// +module IIR_filter +#( + parameter use_params = 1, // set to 1 to use following parameters, 0 for input port variables. + parameter stereo = 1, // 0 for mono (input_l) + + parameter coeff_x = 0.00000774701983513660, // Base gain value for X. Float. Range: 0.0 ... 0.999(9) + parameter coeff_x0 = 3, // Gain scale factor for X0. Integer. Range -7 ... +7 + parameter coeff_x1 = 3, // Gain scale factor for X1. Integer. Range -7 ... +7 + parameter coeff_x2 = 1, // Gain scale factor for X2. Integer. Range -7 ... +7 + parameter coeff_y0 = -2.96438150626551080000, // Coefficient for Y0. Float. Range -3.999(9) ... 3.999(9) + parameter coeff_y1 = 2.92939452735121100000, // Coefficient for Y1. Float. Range -3.999(9) ... 3.999(9) + parameter coeff_y2 = -0.96500747158831091000 // Coefficient for Y2. Float. Range -3.999(9) ... 3.999(9) +) +( + input clk, + input reset, + + input ce, // must be double of calculated rate for stereo! + input sample_ce, // desired output sample rate + + input [39:0] cx, + input [7:0] cx0, + input [7:0] cx1, + input [7:0] cx2, + input [23:0] cy0, + input [23:0] cy1, + input [23:0] cy2, + + input [15:0] input_l, input_r, // signed samples + output [15:0] output_l, output_r // signed samples +); + +localparam [39:0] pcoeff_x = coeff_x * 40'h8000000000; +localparam [31:0] pcoeff_y0 = coeff_y0 * 24'h200000; +localparam [31:0] pcoeff_y1 = coeff_y1 * 24'h200000; +localparam [31:0] pcoeff_y2 = coeff_y2 * 24'h200000; + +wire [39:0] vcoeff = use_params ? pcoeff_x : cx; +wire [23:0] vcoeff_y0 = use_params ? pcoeff_y0[23:0] : cy0; +wire [23:0] vcoeff_y1 = use_params ? pcoeff_y1[23:0] : cy1; +wire [23:0] vcoeff_y2 = use_params ? pcoeff_y2[23:0] : cy2; + +wire [59:0] inp_mul = $signed(inp) * $signed(vcoeff); + +wire [39:0] x = inp_mul[59:20]; +wire [39:0] y = x + tap0; + +wire [39:0] tap0; +iir_filter_tap iir_tap_0 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x0[7:0] : cx0), + .cy(vcoeff_y0), + .x(x), + .y(y), + .z(tap1), + .tap(tap0) +); + +wire [39:0] tap1; +iir_filter_tap iir_tap_1 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x1[7:0] : cx1), + .cy(vcoeff_y1), + .x(x), + .y(y), + .z(tap2), + .tap(tap1) +); + +wire [39:0] tap2; +iir_filter_tap iir_tap_2 +( + .clk(clk), + .reset(reset), + .ce(ce), + .ch(ch), + .cx(use_params ? coeff_x2[7:0] : cx2), + .cy(vcoeff_y2), + .x(x), + .y(y), + .z(0), + .tap(tap2) +); + +wire [15:0] y_clamp = (~y[39] & |y[38:35]) ? 16'h7FFF : (y[39] & ~&y[38:35]) ? 16'h8000 : y[35:20]; + +reg ch = 0; +reg [15:0] out_l, out_r, out_m; +reg [15:0] inp, inp_m; +always @(posedge clk) if (ce) begin + if(!stereo) begin + ch <= 0; + inp <= input_l; + out_l <= y_clamp; + out_r <= y_clamp; + end + else begin + ch <= ~ch; + if(ch) begin + out_m <= y_clamp; + inp <= inp_m; + end + else begin + out_l <= out_m; + out_r <= y_clamp; + inp <= input_l; + inp_m <= input_r; + end + end +end + +reg [31:0] out; +always @(posedge clk) if (sample_ce) out <= {out_l, out_r}; + +assign {output_l, output_r} = out; + +endmodule + +module iir_filter_tap +( + input clk, + input reset, + + input ce, + input ch, + + input [7:0] cx, + input [23:0] cy, + + input [39:0] x, + input [39:0] y, + input [39:0] z, + output [39:0] tap +); + +wire signed [60:0] y_mul = $signed(y[36:0]) * $signed(cy); + +function [39:0] x_mul; + input [39:0] x; +begin + x_mul = 0; + if(cx[0]) x_mul = x_mul + {{4{x[39]}}, x[39:4]}; + if(cx[1]) x_mul = x_mul + {{3{x[39]}}, x[39:3]}; + if(cx[2]) x_mul = x_mul + {{2{x[39]}}, x[39:2]}; + if(cx[7]) x_mul = ~x_mul; //cheap NEG +end +endfunction + +(* ramstyle = "logic" *) reg [39:0] intreg[2]; +always @(posedge clk, posedge reset) begin + if(reset) {intreg[0],intreg[1]} <= 80'd0; + else if(ce) intreg[ch] <= x_mul(x) - y_mul[60:21] + z; +end + +assign tap = intreg[ch]; + +endmodule + +// simplified IIR 1-tap. +module DC_blocker +( + input clk, + input ce, // 48/96 KHz + input mute, + + input sample_rate, + input [15:0] din, + output [15:0] dout +); + +wire [39:0] x = {din[15], din, 23'd0}; +wire [39:0] x0 = x - (sample_rate ? {{11{x[39]}}, x[39:11]} : {{10{x[39]}}, x[39:10]}); +wire [39:0] y1 = y - (sample_rate ? {{10{y[39]}}, y[39:10]} : {{09{y[39]}}, y[39:09]}); +wire [39:0] y0 = x0 - x1 + y1; + +reg [39:0] x1, y; +always @(posedge clk) if(ce) begin + x1 <= x0; + y <= ^y0[39:38] ? {{2{y0[39]}},{38{y0[38]}}} : y0; +end + +assign dout = mute ? 16'd0 : y[38:23]; + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/jtframe_frac_cen.v b/Arcade_MiST/IremM72 Hardware/rtl/jtframe_frac_cen.v new file mode 100644 index 00000000..8707e766 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/jtframe_frac_cen.v @@ -0,0 +1,58 @@ +/////////////////////////////////////////////////////////////////////////// +// Fractional clock enable signal +// W refers to the number of divided down cen signals available +// each one is divided by 2 + +module jtframe_frac_cen #(parameter W=2)( + input clk, + input [9:0] n, // numerator + input [9:0] m, // denominator + output reg [W-1:0] cen, + output reg [W-1:0] cenb // 180 shifted +); + +wire [10:0] step={1'b0,n}; +wire [10:0] lim ={1'b0,m}; +wire [10:0] absmax = lim+step; + +reg [10:0] cencnt=11'd0; +reg [10:0] next; +reg [10:0] next2; + +always @(*) begin + next = cencnt+step; + next2 = next-lim; +end + +reg half = 1'b0; +wire over = next>=lim; +wire halfway = next >= (lim>>1) && !half; + +reg [W-1:0] edgecnt = {W{1'b0}}; +wire [W-1:0] next_edgecnt = edgecnt + 1'b1; +wire [W-1:0] toggle = next_edgecnt & ~edgecnt; + +always @(posedge clk) begin + cen <= {W{1'b0}}; + cenb <= {W{1'b0}}; + + if( cencnt >= absmax ) begin + // something went wrong: restart + cencnt <= 11'd0; + end else + if( halfway ) begin + half <= 1'b1; + cenb[0] <= 1'b1; + end + if( over ) begin + cencnt <= next2; + half <= 1'b0; + edgecnt <= next_edgecnt; + cen <= { toggle[W-2:0], 1'b1 }; + end else begin + cencnt <= next; + end +end + + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/rtl/kna6034201.v b/Arcade_MiST/IremM72 Hardware/rtl/kna6034201.v new file mode 100644 index 00000000..a786407b --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/kna6034201.v @@ -0,0 +1,93 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - 4-bit color shift register +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module kna6034201 ( + input clock, // Pin 18. + + input LOAD, + input CE_PIXEL, + + input [7:0] byte_1, // Pins 8-1. + input [7:0] byte_2, // Pins 16-10. + input [7:0] byte_3, // Pins 32-39. + input [7:0] byte_4, // Not in original hardware + + output bit_1, // Pin 31. + output bit_1r, // Pin 30. + + output bit_2, // Pin 29. + output bit_2r, // Pin 28. + + output bit_3, // Pin 27. + output bit_3r, // Pin 26. + + output bit_4, // Not in original hardware + output bit_4r +); + + +reg [7:0] shift_reg_1; // Eagle - IC1. +reg [7:0] shift_reg_2; // Eagle - IC2. +reg [7:0] shift_reg_3; // Eagle - IC3. +reg [7:0] shift_reg_4; // Eagle - IC4. +reg [7:0] shift_reg_5; // Eagle - IC5. +reg [7:0] shift_reg_6; // Eagle - IC6. +reg [7:0] shift_reg_7; +reg [7:0] shift_reg_8; + +always @(posedge clock) begin + if (CE_PIXEL & LOAD) begin + shift_reg_1 <= byte_1; + shift_reg_2 <= {byte_1[0],byte_1[1],byte_1[2],byte_1[3],byte_1[4],byte_1[5],byte_1[6],byte_1[7]}; + + shift_reg_3 <= byte_2; + shift_reg_4 <= {byte_2[0],byte_2[1],byte_2[2],byte_2[3],byte_2[4],byte_2[5],byte_2[6],byte_2[7]}; + + shift_reg_5 <= byte_3; + shift_reg_6 <= {byte_3[0],byte_3[1],byte_3[2],byte_3[3],byte_3[4],byte_3[5],byte_3[6],byte_3[7]}; + + shift_reg_7 <= byte_4; + shift_reg_8 <= {byte_4[0],byte_4[1],byte_4[2],byte_4[3],byte_4[4],byte_4[5],byte_4[6],byte_4[7]}; + end + else if (CE_PIXEL) begin + shift_reg_1 <= {shift_reg_1[6:0],1'b0}; // Shift out, MSB first. + shift_reg_2 <= {shift_reg_2[6:0],1'b0}; // Shift out, MSB first. + + shift_reg_3 <= {shift_reg_3[6:0],1'b0}; // Shift out, MSB first. + shift_reg_4 <= {shift_reg_4[6:0],1'b0}; // Shift out, MSB first. + + shift_reg_5 <= {shift_reg_5[6:0],1'b0}; // Shift out, MSB first. + shift_reg_6 <= {shift_reg_6[6:0],1'b0}; // Shift out, MSB first. + + shift_reg_7 <= {shift_reg_7[6:0],1'b0}; // Shift out, MSB first. + shift_reg_8 <= {shift_reg_8[6:0],1'b0}; // Shift out, MSB first. + end +end + +assign bit_1 = shift_reg_1[7]; +assign bit_1r = shift_reg_2[7]; +assign bit_2 = shift_reg_3[7]; +assign bit_2r = shift_reg_4[7]; +assign bit_3 = shift_reg_5[7]; +assign bit_3r = shift_reg_6[7]; +assign bit_4 = shift_reg_7[7]; +assign bit_4r = shift_reg_8[7]; + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/kna70h015.sv b/Arcade_MiST/IremM72 Hardware/rtl/kna70h015.sv new file mode 100644 index 00000000..e863726b --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/kna70h015.sv @@ -0,0 +1,174 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Video counter generator +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module kna70h015 ( + input CLK_32M, + + input CE_PIX, + + input [15:0] D, + input A0, + input ISET, + input NL, + input S24H, + + output INT_D, + output CLD, + output CPBLK, + output [8:0] VE, + output [8:0] V, + output [9:0] HE, + output [9:0] H, + + // These are inputs from two PROMs on the original board, but combined into this module here + output HBLK, + output VBLK, + output HINT, + + // Output from PROMs in original board + output HS, + output VS, + + input video_50hz +); + + +assign CLD = h_count == ( S24H ? 10'h33f : 10'h2ff ); +assign CPBLK = HBLK | VBLK; +assign VE = V ^ {9{NL}}; +assign HE = H ^ {10{NL}}; +assign V = v_count; +assign H = h_count; +assign HINT = int_d_latch && (VE == h_int_line); +assign HBLK = q_ic75[0]; +assign HS = ~q_ic75[1]; +assign INT_D = q_ic75[2]; +assign VBLK = q_ic66[0]; +assign VS = ~q_ic66[1]; + +wire [3:0] q_ic75 = ic75[{S24H, h_count[9:3]}]; +wire [3:0] q_ic66 = ic66[{S24H, v_count[8:2]}]; + +reg int_d_latch = 0; +reg [8:0] v_count; +reg [8:0] h_int_line; +reg [9:0] h_count; + +/* From MAME +Legend of Hero TONMA +(c)1989 Irem + +M72 System +Horizontal Freq. = 15.625KHz +H.Period = 64.0us (512) +H.Blank = 16.0us (128) +H.Sync Pulse = 5.0us (40) +Vertical Freq. = 55.02Hz +V.Period = 18.176ms (284) +V.Blank = 1.792ms (28) +V.Sync Pulse = 384us (6) + +*/ + +always @(posedge CLK_32M) begin + if (ISET) begin + if (A0) + h_int_line[8] <= D[0]; + else + h_int_line[7:0] <= D[7:0]; + end + + if (CE_PIX) begin + h_count <= h_count + 10'd1; + if (CLD) begin + h_count <= (S24H ? 10'h0c0 : 10'h100); + v_count <= v_count + 9'd1; + end + + if (h_count[1]) int_d_latch <= INT_D; + + if (v_count == (S24H ? 9'h1e1 : 9'h18d)) v_count <= (S24H ? 9'h01e : (video_50hz ? 9'h056 : 9'h072)); + end +end + + +wire [3:0] ic66[256] = '{ + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hF, 4'hF, 4'hD, 4'hD, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hF, 4'hF, 4'hF, 4'hF, 4'hD, 4'hD, + 4'hD, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF +}; + +wire [3:0] ic75[256] = '{ + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'h9, 4'h9, 4'hB, 4'hB, + 4'hB, 4'hB, 4'hB, 4'hB, 4'hB, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, + 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, + 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, + 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hF, 4'hF, 4'hF, 4'hF, 4'hD, 4'hD, 4'h9, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'h9, 4'h9, 4'hB, 4'hB, + 4'hB, 4'hB, 4'hB, 4'hB, 4'hB, 4'hB, 4'hB, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, + 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, + 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, + 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hA, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, + 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hE, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hD, 4'hD, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, 4'hF, + 4'hF, 4'hF, 4'hF, 4'hF +}; + + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/rtl/kna91h014.v b/Arcade_MiST/IremM72 Hardware/rtl/kna91h014.v new file mode 100644 index 00000000..e009c9cc --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/kna91h014.v @@ -0,0 +1,106 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Palette chip +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module kna91h014 ( + input CLK_32M, + + input [7:0] CB, // Pins 3-10. + input [7:0] CA, // Pins 11-18. + + input SELECT, // Pin 50. "S" + + input E1_N, // Pin 52. + input E2_N, // Pin 51. CBLK. + + input G, // Pin 30. G_N. + + input MWR, // Pin 29. + input MRD, // Pin 28. + + input [15:0] DIN, // Pins 25, 22-19 (split to input for Verilog). + output [15:0] DOUT, // Pins 25, 22-19 (split to output for Verilog). + output DOUT_VALID, + + input [19:0] A, // Pins 53-60 + + output reg [4:0] RED, // Pins 47-43. + output reg [4:0] GRN, // Pins 42-40, 37-36. + output reg [4:0] BLU // Pins 35-31. +); + +wire [7:0] A_IN = A[8:1]; +wire [2:0] A_S = { A[11], A[10], A[0] }; + +reg [7:0] color_addr; + +always @(posedge CLK_32M) begin + color_addr <= SELECT ? CA : CB; +end + +// Palette RAMs... +reg [4:0] ram_a [256]; +reg [4:0] ram_b [256]; +reg [4:0] ram_c [256]; + +// RAM Addr decoding... +wire ram_a_cs = A_S==3'b000 | A_S==3'b110; +wire ram_b_cs = A_S==3'b010; +wire ram_c_cs = A_S==3'b100; + +// Write enable, and addr decoding for RAM writes. +wire wr_ena = G & MWR; +wire rd_ena = G & MRD; + +wire ram_wr_a = ram_a_cs & wr_ena; +wire ram_wr_b = ram_b_cs & wr_ena; +wire ram_wr_c = ram_c_cs & wr_ena; + +reg [4:0] red_lat; +reg [4:0] grn_lat; +reg [4:0] blu_lat; + +// DOUT read driver... +assign DOUT = { 11'd0, + (ram_a_cs) ? red_lat : + (ram_b_cs) ? grn_lat : + (ram_c_cs) ? blu_lat : 5'h00 }; +assign DOUT_VALID = rd_ena; + +always @(posedge CLK_32M) +begin + red_lat <= ram_a[A_IN]; + if (ram_wr_a) + ram_a[A_IN] <= DIN[4:0]; + + grn_lat <= ram_b[A_IN]; + if (ram_wr_b) + ram_b[A_IN] <= DIN[4:0]; + + blu_lat <= ram_c[A_IN]; + if (ram_wr_c) + ram_c[A_IN] <= DIN[4:0]; + + + RED <= ram_a[color_addr]; + GRN <= ram_b[color_addr]; + BLU <= ram_c[color_addr]; +end + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/m72.sv b/Arcade_MiST/IremM72 Hardware/rtl/m72.sv new file mode 100644 index 00000000..6fa6d038 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/m72.sv @@ -0,0 +1,798 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Main module +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +import m72_pkg::*; + +module m72 ( + input CLK_32M, + input CLK_96M, + + input reset_n, + output reg ce_pix, + + input board_cfg_t board_cfg, + + output reg [7:0] R, + output reg [7:0] G, + output reg [7:0] B, + + output reg HSync, + output reg VSync, + output reg HBlank, + output reg VBlank, + + output [15:0] AUDIO_L, + output [15:0] AUDIO_R, + + input [1:0] coin, + input [1:0] start_buttons, + input [3:0] p1_joystick, + input [3:0] p2_joystick, + input [3:0] p1_buttons, + input [3:0] p2_buttons, + input service_button, + input [15:0] dip_sw, + + input pause_rq, + + output [24:1] sdr_sprite_addr, + input [63:0] sdr_sprite_dout, + output sdr_sprite_req, + input sdr_sprite_ack, + + input [31:0] sdr_bg_data_a, + output [24:1] sdr_bg_addr_a, + output sdr_bg_req_a, + input sdr_bg_ack_a, + + input [31:0] sdr_bg_data_b, + output [24:1] sdr_bg_addr_b, + output sdr_bg_req_b, + input sdr_bg_ack_b, + + output [24:1] sdr_cpu_addr, + input [15:0] sdr_cpu_dout, + output [15:0] sdr_cpu_din, + output reg sdr_cpu_req, + input sdr_cpu_ack, + output [1:0] sdr_cpu_wr_sel, + + output [24:0] sdr_z80_ram_addr, + output [7:0] sdr_z80_ram_data, + input [7:0] sdr_z80_ram_dout, + output sdr_z80_ram_we, + output sdr_z80_ram_cs, + input sdr_z80_ram_valid, + + output [24:0] sample_rom_addr, + input [63:0] sample_rom_data, + output sample_rom_req, + input sample_rom_ack, + + input clk_bram, + input bram_wr, + input [7:0] bram_data, + input [19:0] bram_addr, + input [1:0] bram_cs, + + input en_layer_a, + input en_layer_b, + input en_sprites, + input en_layer_palette, + input en_sprite_palette, + input en_audio_filters, + + input sprite_freeze, + + input video_60hz, + input video_57hz, + input video_50hz +); + +// Divide 32Mhz clock by 4 for pixel clock +reg paused = 0; + +always @(posedge CLK_32M) begin + if (pause_rq & ~paused & VBlank) begin + if (~ls245_en & ~DBEN & ~mem_rq_active) begin + paused <= 1; + end + end else if (~pause_rq & paused & VBlank) begin + paused <= 0; + end +end + +reg [1:0] ce_counter_cpu; +reg [1:0] ce_counter_mcu; +reg ce_cpu, ce_4x_cpu, ce_mcu; + +always @(posedge CLK_32M) begin + if (!reset_n) begin + ce_cpu <= 0; + ce_4x_cpu <= 0; + ce_counter_cpu <= 0; + ce_counter_mcu <= 0; + ce_mcu <= 0; + end else begin + ce_cpu <= 0; + ce_4x_cpu <= 0; + ce_mcu <= 0; + + if (~paused) begin + if (~ls245_en && ~SDBEN && ~mem_rq_active) begin // stall main cpu while fetching from sdram + ce_counter_cpu <= ce_counter_cpu + 2'd1; + ce_4x_cpu <= 1; + ce_cpu <= &ce_counter_cpu; + end + ce_counter_mcu <= ce_counter_mcu + 2'd1; + ce_mcu <= &ce_counter_mcu; + end + end +end + +wire ce_pix_half; +jtframe_frac_cen #(2) pixel_cen +( + .clk(CLK_32M), + .n(video_57hz ? 10'd115 : video_60hz ? 10'd207 : 10'd1), + .m(video_57hz ? 10'd444 : video_60hz ? 10'd760 : 10'd4), + .cen({ce_pix_half, ce_pix}) +); + +/* Global signals from schematics */ +wire IOWR = cpu_io_write; // IO Write +wire IORD = cpu_io_read; // IO Read +wire MWR = cpu_mem_write; // Mem Write +wire MRD = cpu_mem_read; // Mem Read +wire DBEN = cpu_io_write | cpu_io_read | cpu_mem_read | cpu_mem_write; + +wire TNSL; + +wire [15:0] cpu_mem_out; +wire [19:0] cpu_mem_addr; +wire [1:0] cpu_mem_sel; +reg cpu_mem_read_lat, cpu_mem_write_lat; +wire cpu_mem_read_w, cpu_mem_write_w; +wire cpu_mem_read = cpu_mem_read_w | cpu_mem_read_lat; +wire cpu_mem_write = cpu_mem_write_w | cpu_mem_write_lat; + +wire cpu_io_read, cpu_io_write; +wire [7:0] cpu_io_in; +wire [7:0] cpu_io_out; +wire [7:0] cpu_io_addr; + +wire [15:0] cpu_mem_in; + + +wire [15:0] cpu_word_out = cpu_mem_addr[0] ? { cpu_mem_out[7:0], cpu_mem_out[15:8] } : cpu_mem_out; +wire [19:0] cpu_word_addr = { cpu_mem_addr[19:1], 1'b0 }; +wire [1:0] cpu_word_byte_sel = cpu_mem_addr[0] ? { cpu_mem_sel[0], cpu_mem_sel[1] } : cpu_mem_sel; +reg [15:0] cpu_ram_rom_data; +wire [24:1] cpu_region_addr; +wire cpu_region_writable; + +function [15:0] word_shuffle(input [19:0] addr, input [15:0] data); + begin + word_shuffle = addr[0] ? { 8'h00, data[15:8] } : data; + end +endfunction + +reg mem_rq_active = 0; +reg b_d_dout_valid_lat, obj_pal_dout_valid_lat, sprite_dout_valid_lat; + +always @(posedge CLK_32M) +begin + if (!reset_n) begin + b_d_dout_valid_lat <= 0; + obj_pal_dout_valid_lat <= 0; + sprite_dout_valid_lat <= 0; + end else begin + cpu_mem_read_lat <= cpu_mem_read_w; + cpu_mem_write_lat <= cpu_mem_write_w; + + b_d_dout_valid_lat <= b_d_dout_valid; + obj_pal_dout_valid_lat <= obj_pal_dout_valid; + sprite_dout_valid_lat <= sprite_dout_valid; + end +end + +always_ff @(posedge CLK_32M) begin + if (!mem_rq_active) begin + if ((ls245_en | SDBEN) && ((cpu_mem_read_w & ~cpu_mem_read_lat) || (cpu_mem_write_w & ~cpu_mem_write_lat))) begin // sdram request + sdr_cpu_wr_sel <= 2'b00; + sdr_cpu_addr <= SDBEN ? {REGION_CPU2_RAM.base_addr[24:16], cpu_word_addr[15:1]} : cpu_region_addr; + if (cpu_mem_write & (cpu_region_writable | SDBEN)) begin + sdr_cpu_wr_sel <= cpu_word_byte_sel; + sdr_cpu_din <= cpu_word_out; + end + sdr_cpu_req <= ~sdr_cpu_req; + mem_rq_active <= 1; + end + end else if (sdr_cpu_req == sdr_cpu_ack) begin + cpu_ram_rom_data <= sdr_cpu_dout; + mem_rq_active <= 0; + end +end + +wire ls245_en, rom0_ce, rom1_ce, ram_cs2; + + +wire [15:0] switches = { p2_buttons, p2_joystick, p1_buttons, p1_joystick }; +wire [15:0] flags = { 8'hff, TNSL, 1'b1, 1'b1 /*TEST*/, 1'b1 /*R*/, coin, start_buttons }; + +reg [7:0] sys_flags = 0; +wire COIN0 = sys_flags[0]; +wire COIN1 = sys_flags[1]; +wire SOFT_NL = ~sys_flags[2]; +wire CBLK = sys_flags[3]; +wire BRQ = ~sys_flags[4]; +wire BANK = sys_flags[5]; +wire NL = SOFT_NL ^ dip_sw[8]; + +// TODO BANK, CBLK, NL +always @(posedge CLK_32M) begin + if (FSET & ~cpu_io_addr[0]) sys_flags <= cpu_io_out[7:0]; +end + +// mux io and memory reads +always_comb begin + bit [15:0] d16; + bit [15:0] io16; + + if (b_d_dout_valid_lat) d16 = b_d_dout; + else if (obj_pal_dout_valid_lat) d16 = obj_pal_dout; + else if (sprite_dout_valid_lat) d16 = sprite_dout; + else if (cpu_mem_addr[19:16] == 4'hb) d16 = cpu_shared_ram_dout; + else d16 = cpu_ram_rom_data; + cpu_mem_in = word_shuffle(cpu_mem_addr, d16); + + if (SW) io16 = switches; + else if (FLAG) io16 = flags; + else if (DSW) io16 = dip_sw; + else io16 = 16'hffff; + + cpu_io_in = cpu_io_addr[0] ? io16[15:8] : io16[7:0]; +end + +cpu v30( + .clk(CLK_32M), + .ce(ce_cpu), // TODO + .ce_4x(ce_4x_cpu), // TODO + .reset(~reset_n), + .turbo(0), + .SLOWTIMING(0), + + .cpu_idle(), + .cpu_halt(), + .cpu_irqrequest(), + .cpu_prefix(), + + .dma_active(0), + .sdma_request(0), + .canSpeedup(), + + .bus_read(cpu_mem_read_w), + .bus_write(cpu_mem_write_w), + .bus_be(cpu_mem_sel), + .bus_addr(cpu_mem_addr), + .bus_datawrite(cpu_mem_out), + .bus_dataread(cpu_mem_in), + + .irqrequest_in(int_req), + .irqvector_in(int_vector), + .irqrequest_ack(int_ack), + + .load_savestate(0), + + // TODO + .cpu_done(), + + .RegBus_Din(cpu_io_out), + .RegBus_Adr(cpu_io_addr), + .RegBus_wren(cpu_io_write), + .RegBus_rden(cpu_io_read), + .RegBus_Dout(cpu_io_in), + + .sleep_savestate(paused) +); + +pal_3a pal_3a( + .A(cpu_mem_addr), + .BANK(), + .DBEN(DBEN), + .M_IO(MRD | MWR), + .COD(), + .board_cfg(board_cfg), + .ls245_en(ls245_en), + .sdr_addr(cpu_region_addr), + .writable(cpu_region_writable), + .S() +); + +wire SW, FLAG, DSW, SND, SND2, FSET, DMA_ON, ISET, INTCS; + +pal_4d pal_4d( + .IOWR(IOWR), + .IORD(IORD), + .A(cpu_io_addr), + .SW(SW), + .FLAG(FLAG), + .DSW(DSW), + .SND(SND), + .SND2(SND2), + .FSET(FSET), + .DMA_ON(DMA_ON), + .ISET(ISET), + .INTCS(INTCS) +); + +wire BUFDBEN, BUFCS, OBJ_P, CHARA_P, CHARA, SOUND, SDBEN; + +pal_3d pal_3d( + .A(cpu_mem_addr), + .M_IO(MRD | MWR), + .DBEN(~DBEN), + .TNSL(1), // TODO + .BRQ(BRQ), // TODO + + .BUFDBEN(BUFDBEN), + .BUFCS(BUFCS), + .OBJ_P(OBJ_P), + .CHARA_P(CHARA_P), + .CHARA(CHARA), + .SOUND(SOUND), + .SDBEN(SDBEN) +); + +wire int_req, int_ack; +wire [8:0] int_vector; + +m72_pic m72_pic( + .clk(CLK_32M), + .ce(ce_cpu), + .reset(~reset_n), + + .cs(INTCS), + .wr(IOWR), + .rd(0), + .a0(cpu_io_addr[1]), + + .din(cpu_io_out), + + .int_req(int_req), + .int_vector(int_vector), + .int_ack(int_ack), + + .intp({5'd0, HINT, 1'b0, VBLK}) +); + +wire [8:0] VE, V; +wire [9:0] HE, H; +wire HBLK, VBLK, HS, VS; +wire HINT; + +kna70h015 kna70h015( + .CLK_32M(CLK_32M), + + .CE_PIX(ce_pix), + .D(cpu_io_out), + .A0(cpu_io_addr[0]), + .ISET(ISET), + .NL(NL), + .S24H(0), + + .CLD(), + .CPBLK(), + + .VE(VE), + .V(V), + .HE(HE), + .H(H), + + .HBLK(HBLK), + .VBLK(VBLK), + .HINT(HINT), + + .HS(HS), + .VS(VS), + + .video_50hz(video_50hz) +); + +wire [15:0] b_d_dout; +wire b_d_dout_valid; + +wire [4:0] char_r, char_g, char_b; +wire P1L; + +board_b_d board_b_d( + .CLK_32M(CLK_32M), + + .CE_PIX(ce_pix), + + .DOUT(b_d_dout), + .DOUT_VALID(b_d_dout_valid), + + .DIN(cpu_word_out), + .A(cpu_word_addr), + .BYTE_SEL(cpu_word_byte_sel), + + .IO_DIN(cpu_io_out), + .IO_A(cpu_io_addr), + + .MRD(MRD), + .MWR(MWR), + .IORD(IORD), + .IOWR(IOWR), + .CHARA(CHARA), + .CHARA_P(CHARA_P), + .NL(NL), + + .VE(VE), + .HE({HE[9], HE[7:0]}), + + .RED(char_r), + .GREEN(char_g), + .BLUE(char_b), + .P1L(P1L), + + .sdr_data_a(sdr_bg_data_a), + .sdr_addr_a(sdr_bg_addr_a), + .sdr_req_a(sdr_bg_req_a), + .sdr_ack_a(sdr_bg_ack_a), + + .sdr_data_b(sdr_bg_data_b), + .sdr_addr_b(sdr_bg_addr_b), + .sdr_req_b(sdr_bg_req_b), + .sdr_ack_b(sdr_bg_ack_b), + + .paused(paused), + + .en_layer_a(en_layer_a), + .en_layer_b(en_layer_b), + .en_palette(en_layer_palette) +); + + +wire [7:0] snd_io_addr; +wire [7:0] snd_io_data; +wire snd_io_req; + +wire [15:0] ym_audio; + +sound sound( + .CLK_32M(CLK_32M), + .reset_n(reset_n), + + .IO_A(cpu_io_addr), + .IO_DIN(cpu_io_out), + + .SOUND(SOUND), + .SND(SND), + .BRQ(BRQ), + .SND2(SND2), + + .ym_audio_l(), + .ym_audio_r(ym_audio), + + .snd_io_addr(snd_io_addr), + .snd_io_data(snd_io_data), + .snd_io_req(snd_io_req), + + .pause(paused), + + .ram_addr(sdr_z80_ram_addr), + .ram_data(sdr_z80_ram_data), + .ram_dout(sdr_z80_ram_dout), + .ram_we(sdr_z80_ram_we), + .ram_cs(sdr_z80_ram_cs), + .ram_valid(sdr_z80_ram_valid) +); + +// Temp A-C board palette +wire [15:0] obj_pal_dout; +wire obj_pal_dout_valid; + + +wire [4:0] obj_pal_r, obj_pal_g, obj_pal_b; +kna91h014 obj_pal( + .CLK_32M(CLK_32M), + + .G(OBJ_P), + .SELECT(0), + .CA(obj_pix), + .CB(obj_pix), + + .E1_N(), // TODO + .E2_N(), // TODO + + .MWR(MWR & cpu_word_byte_sel[0]), + .MRD(MRD), + + .DIN(cpu_word_out), + .DOUT(obj_pal_dout), + .DOUT_VALID(obj_pal_dout_valid), + .A(cpu_word_addr), + + .RED(obj_pal_r), + .GRN(obj_pal_g), + .BLU(obj_pal_b) +); + +wire [4:0] obj_r = en_sprite_palette ? obj_pal_r : { obj_pix[3:0], 1'b0 }; +wire [4:0] obj_g = en_sprite_palette ? obj_pal_g : { obj_pix[3:0], 1'b0 }; +wire [4:0] obj_b = en_sprite_palette ? obj_pal_b : { obj_pix[3:0], 1'b0 }; + +wire P0L = (|obj_pix[3:0]) && en_sprites; +always @(posedge CLK_32M) begin + if (ce_pix) begin + R <= ~CBLK ? ( (P0L & P1L) ? {obj_r[4:0], obj_r[4:2]} : {char_r[4:0], char_r[4:2]} ) : 8'h00; + G <= ~CBLK ? ( (P0L & P1L) ? {obj_g[4:0], obj_g[4:2]} : {char_g[4:0], char_g[4:2]} ) : 8'h00; + B <= ~CBLK ? ( (P0L & P1L) ? {obj_b[4:0], obj_b[4:2]} : {char_b[4:0], char_b[4:2]} ) : 8'h00; + HSync <= HS; + HBlank <= HBLK; + VSync <= VS; + VBlank <= VBLK; + end +end + +wire [15:0] sprite_dout; +wire sprite_dout_valid; + +wire [7:0] obj_pix; + +sprite sprite( + .CLK_32M(CLK_32M), + .CLK_96M(CLK_96M), + .CE_PIX(ce_pix), + + .DIN(cpu_word_out), + .DOUT(sprite_dout), + .DOUT_VALID(sprite_dout_valid), + + .A(cpu_word_addr), + .BYTE_SEL(cpu_word_byte_sel), + + .BUFDBEN(BUFDBEN), + .MRD(MRD), + .MWR(MWR), + + .VE(VE), + .NL(NL), + .HBLK(HBLK), + .pix_test(obj_pix), + + .TNSL(TNSL), + .DMA_ON(DMA_ON & ~sprite_freeze), + + .sdr_data(sdr_sprite_dout), + .sdr_addr(sdr_sprite_addr), + .sdr_req(sdr_sprite_req), + .sdr_ack(sdr_sprite_ack) +); + + +wire [15:0] cpu_shared_ram_dout; +wire [11:0] mcu_ram_addr; +wire [7:0] mcu_ram_din; +wire [7:0] mcu_ram_dout; +wire mcu_ram_we; +wire mcu_ram_int; +wire mcu_ram_cs; +wire [7:0] mcu_sample_data; + +dualport_mailbox_2kx16 mcu_shared_ram( + .reset(~reset_n), + .clk_l(CLK_32M), + .addr_l(cpu_word_addr[11:1]), + .cs_l(1'b1), + .din_l(cpu_word_out), + .dout_l(cpu_shared_ram_dout), + .we_l((cpu_word_addr[19:16] == 4'hb && MWR) ? cpu_word_byte_sel : 2'b00), + .int_l(), + + .clk_r(CLK_32M), + .cs_r(mcu_ram_cs), + .addr_r(mcu_ram_addr[11:0]), + .din_r(mcu_ram_dout), + .dout_r(mcu_ram_din), + .we_r(mcu_ram_we), + .int_r(mcu_ram_int) +); + +wire [7:0] mculatch_data = board_cfg.main_mculatch ? cpu_io_out : snd_io_data; +wire mculatch_en = board_cfg.main_mculatch ? ( IOWR && cpu_io_addr == 8'hc0 ) : ( snd_io_req && snd_io_addr == 8'h82 ); + +mcu mcu( + .CLK_32M(CLK_32M), + .ce_8m(ce_mcu), + .reset(~reset_n), + + .ext_ram_addr(mcu_ram_addr), + .ext_ram_din(mcu_ram_din), + .ext_ram_dout(mcu_ram_dout), + .ext_ram_cs(mcu_ram_cs), + .ext_ram_we(mcu_ram_we), + .ext_ram_int(mcu_ram_int), + + .z80_din(mculatch_data), + .z80_latch_en(mculatch_en), + + .sample_data(mcu_sample_data), + + .sample_rom_addr(sample_rom_addr), + .sample_rom_data(sample_rom_data), + .sample_rom_req(sample_rom_req), + .sample_rom_ack(sample_rom_ack), + + .clk_bram(clk_bram), + .bram_wr(bram_wr), + .bram_data(bram_data), + .bram_addr(bram_addr), + .bram_prom_cs(bram_cs[0]), + .bram_samples_cs(bram_cs[1]), + + .dbg_rom_addr(mcu_dbg_rom_addr) +); + +wire [7:0] signed_mcu_sample = mcu_sample_data - 8'h80; +reg [2:0] ce_filter_counter = 0; +wire ce_filter = &ce_filter_counter; +reg [15:0] filtered_mcu_sample; +reg [15:0] filtered_ym_audio; + +// 3.5Khz 2nd order low pass filter with additional 10dB attenuation +IIR_filter #( .use_params(1), .stereo(0), .coeff_x(0.00004185087102461337 * 0.31622776601), .coeff_x0(2), .coeff_x1(1), .coeff_x2(0), .coeff_y0(-1.99222499379830120247), .coeff_y1(0.99225510233860669818), .coeff_y2(0)) samples_lpf ( + .clk(CLK_32M), + .reset(~reset_n), + + .ce(ce_filter), + .sample_ce(1), + + .cx(), + .cx0(), + .cx1(), + .cx2(), + .cy0(), + .cy1(), + .cy2(), + + .input_l({signed_mcu_sample[7:0], 8'd0}), + .input_r(), + .output_l(filtered_mcu_sample), + .output_r() +); + + +// 9khz 1st order, 10khz 2nd order +IIR_filter #( .use_params(1), .stereo(0), .coeff_x(0.00000476166826258131), .coeff_x0(3), .coeff_x1(3), .coeff_x2(1), .coeff_y0(-2.96374831301152275032), .coeff_y1(2.92805248787211569450), .coeff_y2(-0.96430074919997255112)) music_lpf ( + .clk(CLK_32M), + .reset(~reset_n), + + .ce(ce_filter), + .sample_ce(1), + + .cx(), + .cx0(), + .cx1(), + .cx2(), + .cy0(), + .cy1(), + .cy2(), + + .input_l(ym_audio), + .input_r(), + .output_l(filtered_ym_audio), + .output_r() +); + +reg [16:0] audio_out; + +assign AUDIO_L = audio_out[16:1]; +assign AUDIO_R = audio_out[16:1]; + +always @(posedge CLK_32M) begin + ce_filter_counter <= ce_filter_counter + 3'd1; + + if (en_audio_filters) + audio_out <= {filtered_ym_audio[15], filtered_ym_audio[15:0]} + {filtered_mcu_sample[15], filtered_mcu_sample[15:0]}; + else + audio_out <= {ym_audio[15], ym_audio[15:0]} + {{3{signed_mcu_sample[7]}}, signed_mcu_sample[6:0], 7'd0}; +end + + + + + + + + + + + + + + + + +/* +reg [11:0] dbg_cpu_ext_addr; +reg [15:0] dbg_cpu_ext_data; +reg [1:0] dbg_cpu_ext_we; + +assign ddr_debug_data.cpu_ext_addr = dbg_cpu_ext_addr; +assign ddr_debug_data.cpu_ext_data = dbg_cpu_ext_data; +assign ddr_debug_data.cpu_ext_we = dbg_cpu_ext_we; + +// CPU debug +always @(posedge CLK_32M) begin + reg cs; + reg [11:0] addr; + reg [15:0] data; + reg [1:0] we; + + cs <= (cpu_word_addr[19:16] == 4'hb) && ( MWR || MRD ); + addr <= cpu_word_addr[11:0]; + data <= cpu_word_out; + we <= MWR ? cpu_word_byte_sel : 2'b00; + + if (cs & ~((cpu_word_addr[19:16] == 4'hb) && ( MWR || MRD ))) begin + dbg_cpu_ext_addr <= addr; + dbg_cpu_ext_we <= we; + if (we != 2'b00) dbg_cpu_ext_data <= data; + else dbg_cpu_ext_data <= cpu_shared_ram_dout; + end +end + +reg [11:0] dbg_mcu_ext_addr; +reg [7:0] dbg_mcu_ext_data; +reg dbg_mcu_ext_we; + +assign ddr_debug_data.mcu_ext_addr = dbg_mcu_ext_addr; +assign ddr_debug_data.mcu_ext_data = dbg_mcu_ext_data; +assign ddr_debug_data.mcu_ext_we = dbg_mcu_ext_we; + +// MCU debug +always @(posedge CLK_32M) begin + reg cs; + reg [11:0] addr; + reg [7:0] data; + reg we; + + cs <= mcu_ram_cs; + addr <= mcu_ram_addr; + data <= mcu_ram_dout; + we <= mcu_ram_we; + + if (cs & ~mcu_ram_cs) begin + dbg_mcu_ext_addr <= addr; + dbg_mcu_ext_we <= we; + if (we) dbg_mcu_ext_data <= data; + else dbg_mcu_ext_data <= mcu_ram_din; + end +end + + +wire [15:0] mcu_dbg_rom_addr; +reg [15:0] latched_mcu_dbg_rom_addr; +assign ddr_debug_data.mcu_rom_addr = latched_mcu_dbg_rom_addr; +always @(posedge CLK_32M) if (ce_cpu) latched_mcu_dbg_rom_addr <= mcu_dbg_rom_addr; +*/ +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/m72.v b/Arcade_MiST/IremM72 Hardware/rtl/m72.v new file mode 100644 index 00000000..d4772ad9 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/m72.v @@ -0,0 +1,813 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Main module +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +import m72_pkg::*; + +module m72 ( + input CLK_32M, + input CLK_96M, + + input reset_n, + output reg ce_pix, + + input board_cfg_t board_cfg, + + input z80_reset_n, + + output [7:0] R, + output [7:0] G, + output [7:0] B, + + output HSync, + output VSync, + output HBlank, + output VBlank, + + output [15:0] AUDIO_L, + output [15:0] AUDIO_R, + + input [1:0] coin, + input [1:0] start_buttons, + input [3:0] p1_joystick, + input [3:0] p2_joystick, + input [3:0] p1_buttons, + input [3:0] p2_buttons, + input service_button, + input [15:0] dip_sw, + + input pause_rq, + + output [24:1] sdr_sprite_addr, + input [63:0] sdr_sprite_dout, + output sdr_sprite_req, + input sdr_sprite_rdy, + + output [24:1] sdr_bg_addr, + input [31:0] sdr_bg_dout, + output sdr_bg_req, + input sdr_bg_rdy, + + output [24:1] sdr_cpu_addr, + input [15:0] sdr_cpu_dout, + output [15:0] sdr_cpu_din, + output sdr_cpu_req, + input sdr_cpu_rdy, + output [1:0] sdr_cpu_wr_sel, + + input clk_bram, + input bram_wr, + input [7:0] bram_data, + input [19:0] bram_addr, + input [1:0] bram_cs, + + input en_layer_a, + input en_layer_b, + input en_sprites, + input en_layer_palette, + input en_sprite_palette, + input en_audio_filters, + + input sprite_freeze, + + input video_60hz, + input video_57hz, + input video_50hz, + + output ddr_debug_data_t ddr_debug_data +); + +// Divide 32Mhz clock by 4 for pixel clock +reg paused = 0; +reg [8:0] paused_v; +reg [9:0] paused_h; + +always @(posedge CLK_32M) begin + if (pause_rq & ~paused) begin + if (~ls245_en & ~DBEN & ~mem_rq_active) begin + paused <= 1; + paused_v <= V; + paused_h <= H; + end + end else if (~pause_rq & paused) begin + paused <= ~(V == paused_v && H == paused_h); + end +end + +reg [1:0] ce_counter_cpu, ce_counter_mcu; +reg ce_cpu, ce_4x_cpu, ce_mcu; + +always @(posedge CLK_32M) begin + if (!reset_n) begin + ce_cpu <= 0; + ce_4x_cpu <= 0; + ce_counter_cpu <= 0; + ce_counter_mcu <= 0; + end else begin + ce_cpu <= 0; + ce_4x_cpu <= 0; + ce_mcu <= 0; + + if (~paused) begin + if (~ls245_en && ~mem_rq_active) begin // stall main cpu while fetching from sdram + ce_counter_cpu <= ce_counter_cpu + 2'd1; + ce_4x_cpu <= 1; + ce_cpu <= &ce_counter_cpu; + end + ce_counter_mcu <= ce_counter_mcu + 2'd1; + ce_mcu <= &ce_counter_mcu; + end + end +end + +wire ce_pix_half; +jtframe_frac_cen #(2) pixel_cen +( + .clk(CLK_32M), + .n(video_57hz ? 10'd115 : video_60hz ? 10'd207 : 10'd1), + .m(video_57hz ? 10'd444 : video_60hz ? 10'd760 : 10'd4), + .cen({ce_pix_half, ce_pix}) +); + +wire clock = CLK_32M; + +/* Global signals from schematics */ +wire IOWR = cpu_io_write; // IO Write +wire IORD = cpu_io_read; // IO Read +wire MWR = cpu_mem_write; // Mem Write +wire MRD = cpu_mem_read; // Mem Read +wire DBEN = cpu_io_write | cpu_io_read | cpu_mem_read | cpu_mem_write; + +wire TNSL; + +wire [15:0] cpu_mem_out; +wire [19:0] cpu_mem_addr; +wire [1:0] cpu_mem_sel; +reg cpu_mem_read_lat, cpu_mem_write_lat; +wire cpu_mem_read_w, cpu_mem_write_w; +wire cpu_mem_read = cpu_mem_read_w | cpu_mem_read_lat; +wire cpu_mem_write = cpu_mem_write_w | cpu_mem_write_lat; + +wire cpu_io_read, cpu_io_write; +wire [7:0] cpu_io_in; +wire [7:0] cpu_io_out; +wire [7:0] cpu_io_addr; + +wire [15:0] cpu_mem_in; + + +wire [15:0] cpu_word_out = cpu_mem_addr[0] ? { cpu_mem_out[7:0], 8'h00 } : cpu_mem_out; +wire [19:0] cpu_word_addr = { cpu_mem_addr[19:1], 1'b0 }; +wire [1:0] cpu_word_byte_sel = cpu_mem_addr[0] ? { cpu_mem_sel[0], 1'b0 } : cpu_mem_sel; +reg [15:0] cpu_ram_rom_data; +wire [24:1] cpu_region_addr; +wire cpu_region_writable; + +function [15:0] word_shuffle(input [19:0] addr, input [15:0] data); + begin + word_shuffle = addr[0] ? { 8'h00, data[15:8] } : data; + end +endfunction + +reg mem_rq_active = 0; +reg b_d_dout_valid_lat, obj_pal_dout_valid_lat, sound_dout_valid_lat, sprite_dout_valid_lat; + +always @(posedge CLK_32M or negedge reset_n) +begin + if (!reset_n) begin + b_d_dout_valid_lat <= 0; + obj_pal_dout_valid_lat <= 0; + sound_dout_valid_lat <= 0; + sprite_dout_valid_lat <= 0; + end else begin + cpu_mem_read_lat <= cpu_mem_read_w; + cpu_mem_write_lat <= cpu_mem_write_w; + + b_d_dout_valid_lat <= b_d_dout_valid; + obj_pal_dout_valid_lat <= obj_pal_dout_valid; + sound_dout_valid_lat <= sound_dout_valid; + sprite_dout_valid_lat <= sprite_dout_valid; + end +end + +reg sdr_cpu_rq, sdr_cpu_ack, sdr_cpu_rq2; + +always_ff @(posedge CLK_96M) begin + sdr_cpu_req <= 0; + if (sdr_cpu_rdy) sdr_cpu_ack <= sdr_cpu_rq; + if (sdr_cpu_rq != sdr_cpu_rq2) begin + sdr_cpu_req <= 1; + sdr_cpu_rq2 <= sdr_cpu_rq; + end +end + + +always_ff @(posedge CLK_32M or negedge reset_n) begin + if (!reset_n) begin + mem_rq_active <= 0; + end else begin + if (!mem_rq_active) begin + if (ls245_en && ((cpu_mem_read_w & ~cpu_mem_read_lat) || (cpu_mem_write_w & ~cpu_mem_write_lat))) begin // sdram request + sdr_cpu_wr_sel <= 2'b00; + sdr_cpu_addr <= cpu_region_addr; + if (cpu_mem_write & cpu_region_writable ) begin + sdr_cpu_wr_sel <= cpu_word_byte_sel; + sdr_cpu_din <= cpu_word_out; + end + sdr_cpu_rq <= ~sdr_cpu_rq; + mem_rq_active <= 1; + end + end else if (sdr_cpu_rq == sdr_cpu_ack) begin + cpu_ram_rom_data <= sdr_cpu_dout; + mem_rq_active <= 0; + end + end +end + +wire ls245_en, rom0_ce, rom1_ce, ram_cs2; + + +wire [15:0] switches = { p2_buttons, p2_joystick, p1_buttons, p1_joystick }; +wire [15:0] flags = { 8'hff, TNSL, 1'b1, 1'b1 /*TEST*/, 1'b1 /*R*/, coin, start_buttons }; + +reg [7:0] sys_flags = 0; +wire COIN0 = sys_flags[0]; +wire COIN1 = sys_flags[1]; +wire SOFT_NL = ~sys_flags[2]; +wire CBLK = sys_flags[3]; +wire BRQ = ~sys_flags[4]; +wire BANK = sys_flags[5]; +wire NL = SOFT_NL ^ dip_sw[8]; + +// TODO BANK, CBLK, NL +always @(posedge CLK_32M) begin + if (FSET & ~cpu_io_addr[0]) sys_flags <= cpu_io_out[7:0]; +end + +// mux io and memory reads +always_comb begin + bit [15:0] d16; + bit [15:0] io16; + + if (b_d_dout_valid_lat) d16 = b_d_dout; + else if (obj_pal_dout_valid_lat) d16 = obj_pal_dout; + else if (sound_dout_valid_lat) d16 = sound_dout; + else if (sprite_dout_valid_lat) d16 = sprite_dout; + else if (cpu_mem_addr[19:16] == 4'hb) d16 = cpu_shared_ram_dout; + else d16 = cpu_ram_rom_data; + cpu_mem_in = word_shuffle(cpu_mem_addr, d16); + + if (SW) io16 = switches; + else if (FLAG) io16 = flags; + else if (DSW) io16 = dip_sw; + else io16 = 16'hffff; + + cpu_io_in = cpu_io_addr[0] ? io16[15:8] : io16[7:0]; +end + +cpu v30( + .clk(CLK_32M), + .ce(ce_cpu), // TODO + .ce_4x(ce_4x_cpu), // TODO + .reset(~reset_n), + .turbo(0), + .SLOWTIMING(0), + + .cpu_idle(), + .cpu_halt(), + .cpu_irqrequest(), + .cpu_prefix(), + + .dma_active(0), + .sdma_request(0), + .canSpeedup(), + + .bus_read(cpu_mem_read_w), + .bus_write(cpu_mem_write_w), + .bus_be(cpu_mem_sel), + .bus_addr(cpu_mem_addr), + .bus_datawrite(cpu_mem_out), + .bus_dataread(cpu_mem_in), + + .irqrequest_in(int_req), + .irqvector_in(int_vector), + .irqrequest_ack(int_ack), + + .load_savestate(0), + + // TODO + .cpu_done(), + .cpu_export_opcode(cpu_export_opcode), + .cpu_export_reg_cs(cpu_export_reg_cs), + .cpu_export_reg_ip(cpu_export_reg_ip), + + .RegBus_Din(cpu_io_out), + .RegBus_Adr(cpu_io_addr), + .RegBus_wren(cpu_io_write), + .RegBus_rden(cpu_io_read), + .RegBus_Dout(cpu_io_in), + + .sleep_savestate(paused) +); + +wire [15:0] cpu_export_reg_cs; +wire [15:0] cpu_export_reg_ip; +wire [7:0] cpu_export_opcode; + +assign ddr_debug_data.cpu_cs = cpu_export_reg_cs; +assign ddr_debug_data.cpu_ip = cpu_export_reg_ip; +assign ddr_debug_data.cpu_opcode = cpu_export_opcode; + +pal_3a pal_3a( + .A(cpu_mem_addr), + .BANK(), + .DBEN(DBEN), + .M_IO(MRD | MWR), + .COD(), + .board_cfg(board_cfg), + .ls245_en(ls245_en), + .sdr_addr(cpu_region_addr), + .writable(cpu_region_writable), + .S() +); + +wire SW, FLAG, DSW, SND, SND2, FSET, DMA_ON, ISET, INTCS; + +pal_4d pal_4d( + .IOWR(IOWR), + .IORD(IORD), + .A(cpu_io_addr), + .SW(SW), + .FLAG(FLAG), + .DSW(DSW), + .SND(SND), + .SND2(SND2), + .FSET(FSET), + .DMA_ON(DMA_ON), + .ISET(ISET), + .INTCS(INTCS) +); + +wire BUFDBEN, BUFCS, OBJ_P, CHARA_P, CHARA, SOUND, SDBEN; + +pal_3d pal_3d( + .A(cpu_mem_addr), + .M_IO(MRD | MWR), + .DBEN(~DBEN), + .TNSL(1), // TODO + .BRQ(BRQ), // TODO + + .BUFDBEN(BUFDBEN), + .BUFCS(BUFCS), + .OBJ_P(OBJ_P), + .CHARA_P(CHARA_P), + .CHARA(CHARA), + .SOUND(SOUND), + .SDBEN(SDBEN) +); + +wire int_req, int_ack; +wire [8:0] int_vector; + +m72_pic m72_pic( + .clk(CLK_32M), + .ce(ce_cpu), + .reset(~reset_n), + + .cs(INTCS), + .wr(IOWR), + .rd(0), + .a0(cpu_io_addr[1]), + + .din(cpu_io_out), + + .int_req(int_req), + .int_vector(int_vector), + .int_ack(int_ack), + + .intp({5'd0, HINT, 1'b0, VBLK}) +); + +wire [8:0] VE, V; +wire [9:0] HE, H; +wire HBLK, VBLK, HS, VS; +wire HINT; + +assign HSync = HS; +assign HBlank = HBLK; +assign VSync = VS; +assign VBlank = VBLK; + +kna70h015 kna70h015( + .CLK_32M(CLK_32M), + + .CE_PIX(ce_pix), + .D(cpu_io_out), + .A0(cpu_io_addr[0]), + .ISET(ISET), + .NL(NL), + .S24H(0), + + .CLD(), + .CPBLK(), + + .VE(VE), + .V(V), + .HE(HE), + .H(H), + + .HBLK(HBLK), + .VBLK(VBLK), + .HINT(HINT), + + .HS(HS), + .VS(VS), + + .video_50hz(video_50hz) +); + +wire [15:0] b_d_dout; +wire b_d_dout_valid; + +wire [4:0] char_r, char_g, char_b; +wire P1L; + +board_b_d board_b_d( + .CLK_32M(CLK_32M), + .CLK_96M(CLK_96M), + + .CE_PIX(ce_pix), + + .DOUT(b_d_dout), + .DOUT_VALID(b_d_dout_valid), + + .DIN(cpu_word_out), + .A(cpu_word_addr), + .BYTE_SEL(cpu_word_byte_sel), + + .IO_DIN(cpu_io_out), + .IO_A(cpu_io_addr), + + .MRD(MRD), + .MWR(MWR), + .IORD(IORD), + .IOWR(IOWR), + .CHARA(CHARA), + .CHARA_P(CHARA_P), + .NL(NL), + + .VE(VE), + .HE({HE[9], HE[7:0]}), + + + .RED(char_r), + .GREEN(char_g), + .BLUE(char_b), + .P1L(P1L), + + .sdr_data(sdr_bg_dout), + .sdr_addr(sdr_bg_addr), + .sdr_req(sdr_bg_req), + .sdr_rdy(sdr_bg_rdy), + + .paused(paused), + + .en_layer_a(en_layer_a), + .en_layer_b(en_layer_b), + .en_palette(en_layer_palette) +); + + +wire [15:0] sound_dout; +wire sound_dout_valid; + +wire [7:0] snd_io_addr; +wire [7:0] snd_io_data; +wire snd_io_req; + +wire [15:0] ym_audio; + +sound sound( + .CLK_32M(CLK_32M), + .DIN(cpu_mem_out), + .DOUT(sound_dout), + .DOUT_VALID(sound_dout_valid), + + .A(cpu_mem_addr), + .BYTE_SEL(cpu_mem_sel), + + .IO_A(cpu_io_addr), + .IO_DIN(cpu_io_out), + + .SDBEN(SDBEN), + .SOUND(SOUND), + .SND(SND), + .BRQ(BRQ), + .MRD(MRD), + .MWR(MWR), + .SND2(SND2), + + .ym_audio_l(), + .ym_audio_r(ym_audio), + + .snd_io_addr(snd_io_addr), + .snd_io_data(snd_io_data), + .snd_io_req(snd_io_req), + + .pause(paused) +); + +// Temp A-C board palette +wire [15:0] obj_pal_dout; +wire obj_pal_dout_valid; + + +wire [4:0] obj_pal_r, obj_pal_g, obj_pal_b; +kna91h014 obj_pal( + .CLK_32M(CLK_32M), + + .G(OBJ_P), + .SELECT(0), + .CA(obj_pix), + .CB(obj_pix), + + .E1_N(), // TODO + .E2_N(), // TODO + + .MWR(MWR & cpu_word_byte_sel[0]), + .MRD(MRD), + + .DIN(cpu_word_out), + .DOUT(obj_pal_dout), + .DOUT_VALID(obj_pal_dout_valid), + .A(cpu_word_addr), + + .RED(obj_pal_r), + .GRN(obj_pal_g), + .BLU(obj_pal_b) +); + +wire [4:0] obj_r = en_sprite_palette ? obj_pal_r : { obj_pix[3:0], 1'b0 }; +wire [4:0] obj_g = en_sprite_palette ? obj_pal_g : { obj_pix[3:0], 1'b0 }; +wire [4:0] obj_b = en_sprite_palette ? obj_pal_b : { obj_pix[3:0], 1'b0 }; + +wire P0L = (|obj_pix[3:0]) && en_sprites; + +assign R = ~CBLK ? ( (P0L & P1L) ? {obj_r[4:0], obj_r[4:2]} : {char_r[4:0], char_r[4:2]} ) : 8'h00; +assign G = ~CBLK ? ( (P0L & P1L) ? {obj_g[4:0], obj_g[4:2]} : {char_g[4:0], char_g[4:2]} ) : 8'h00; +assign B = ~CBLK ? ( (P0L & P1L) ? {obj_b[4:0], obj_b[4:2]} : {char_b[4:0], char_b[4:2]} ) : 8'h00; + +wire [15:0] sprite_dout; +wire sprite_dout_valid; + +wire [7:0] obj_pix; + +sprite sprite( + .CLK_32M(CLK_32M), + .CLK_96M(CLK_96M), + .CE_PIX(ce_pix), + + .DIN(cpu_word_out), + .DOUT(sprite_dout), + .DOUT_VALID(sprite_dout_valid), + + .A(cpu_word_addr), + .BYTE_SEL(cpu_word_byte_sel), + + .BUFDBEN(BUFDBEN), + .MRD(MRD), + .MWR(MWR), + + .VE(VE), + .NL(NL), + .HBLK(HBLK), + .pix_test(obj_pix), + + .TNSL(TNSL), + .DMA_ON(DMA_ON & ~sprite_freeze), + + .sdr_data(sdr_sprite_dout), + .sdr_addr(sdr_sprite_addr), + .sdr_req(sdr_sprite_req), + .sdr_rdy(sdr_sprite_rdy) +); + + +wire [15:0] cpu_shared_ram_dout; +wire [11:0] mcu_ram_addr; +wire [7:0] mcu_ram_din; +wire [7:0] mcu_ram_dout; +wire mcu_ram_we; +wire mcu_ram_int; +wire mcu_ram_cs; +wire [7:0] mcu_sample_data; + +dualport_mailbox_2kx16 mcu_shared_ram( + .reset(~reset_n), + .clk_l(CLK_32M), + .addr_l(cpu_word_addr[11:1]), + .cs_l(1'b1), + .din_l(cpu_word_out), + .dout_l(cpu_shared_ram_dout), + .we_l((cpu_word_addr[19:16] == 4'hb && MWR) ? cpu_word_byte_sel : 2'b00), + .int_l(), + + .clk_r(CLK_32M), + .cs_r(mcu_ram_cs), + .addr_r(mcu_ram_addr[11:0]), + .din_r(mcu_ram_dout), + .dout_r(mcu_ram_din), + .we_r(mcu_ram_we), + .int_r(mcu_ram_int) +); + +wire [7:0] mculatch_data = board_cfg.main_mculatch ? cpu_io_out : snd_io_data; +wire mculatch_en = board_cfg.main_mculatch ? ( IOWR && cpu_io_addr == 8'hc0 ) : ( snd_io_req && snd_io_addr == 8'h82 ); + +mcu mcu( + .CLK_32M(CLK_32M), + .ce_8m(ce_mcu), + .reset(~reset_n), + + .ext_ram_addr(mcu_ram_addr), + .ext_ram_din(mcu_ram_din), + .ext_ram_dout(mcu_ram_dout), + .ext_ram_cs(mcu_ram_cs), + .ext_ram_we(mcu_ram_we), + .ext_ram_int(mcu_ram_int), + + .z80_din(mculatch_data), + .z80_latch_en(mculatch_en), + + .sample_data(mcu_sample_data), + + .clk_bram(clk_bram), + .bram_wr(bram_wr), + .bram_data(bram_data), + .bram_addr(bram_addr), + .bram_prom_cs(bram_cs[0]), + .bram_samples_cs(bram_cs[1]), + + .dbg_rom_addr(mcu_dbg_rom_addr) +); + +wire [7:0] signed_mcu_sample = mcu_sample_data - 8'h80; +reg [2:0] ce_filter_counter = 0; +wire ce_filter = &ce_filter_counter; +reg [15:0] filtered_mcu_sample; +reg [15:0] filtered_ym_audio; + +// 3.5Khz 2nd order low pass filter with additional 10dB attenuation +IIR_filter #( .use_params(1), .stereo(0), .coeff_x(0.00004185087102461337 * 0.31622776601), .coeff_x0(2), .coeff_x1(1), .coeff_x2(0), .coeff_y0(-1.99222499379830120247), .coeff_y1(0.99225510233860669818), .coeff_y2(0)) samples_lpf ( + .clk(CLK_32M), + .reset(~reset_n), + + .ce(ce_filter), + .sample_ce(1), + + .cx(), + .cx0(), + .cx1(), + .cx2(), + .cy0(), + .cy1(), + .cy2(), + + .input_l({signed_mcu_sample[7:0], 8'd0}), + .input_r(), + .output_l(filtered_mcu_sample), + .output_r() +); + + +// 9khz 1st order, 10khz 2nd order +IIR_filter #( .use_params(1), .stereo(0), .coeff_x(0.00000476166826258131), .coeff_x0(3), .coeff_x1(3), .coeff_x2(1), .coeff_y0(-2.96374831301152275032), .coeff_y1(2.92805248787211569450), .coeff_y2(-0.96430074919997255112)) music_lpf ( + .clk(CLK_32M), + .reset(~reset_n), + + .ce(ce_filter), + .sample_ce(1), + + .cx(), + .cx0(), + .cx1(), + .cx2(), + .cy0(), + .cy1(), + .cy2(), + + .input_l(ym_audio), + .input_r(), + .output_l(filtered_ym_audio), + .output_r() +); + +reg [16:0] audio_out; + +assign AUDIO_L = audio_out[16:1]; +assign AUDIO_R = audio_out[16:1]; + +always @(posedge CLK_32M) begin + ce_filter_counter <= ce_filter_counter + 3'd1; + + if (en_audio_filters) + audio_out <= {filtered_ym_audio[15], filtered_ym_audio[15:0]} + {filtered_mcu_sample[15], filtered_mcu_sample[15:0]}; + else + audio_out <= {ym_audio[15], ym_audio[15:0]} + {{signed_mcu_sample[7:0], 9'd0}}; +end + + + + + + + + + + + + + + + + + +reg [11:0] dbg_cpu_ext_addr; +reg [15:0] dbg_cpu_ext_data; +reg [1:0] dbg_cpu_ext_we; + +assign ddr_debug_data.cpu_ext_addr = dbg_cpu_ext_addr; +assign ddr_debug_data.cpu_ext_data = dbg_cpu_ext_data; +assign ddr_debug_data.cpu_ext_we = dbg_cpu_ext_we; + +// CPU debug +always @(posedge CLK_32M) begin + reg cs; + reg [11:0] addr; + reg [15:0] data; + reg [1:0] we; + + cs <= (cpu_word_addr[19:16] == 4'hb) && ( MWR || MRD ); + addr <= cpu_word_addr[11:0]; + data <= cpu_word_out; + we <= MWR ? cpu_word_byte_sel : 2'b00; + + if (cs & ~((cpu_word_addr[19:16] == 4'hb) && ( MWR || MRD ))) begin + dbg_cpu_ext_addr <= addr; + dbg_cpu_ext_we <= we; + if (we != 2'b00) dbg_cpu_ext_data <= data; + else dbg_cpu_ext_data <= cpu_shared_ram_dout; + end +end + +reg [11:0] dbg_mcu_ext_addr; +reg [7:0] dbg_mcu_ext_data; +reg dbg_mcu_ext_we; + +assign ddr_debug_data.mcu_ext_addr = dbg_mcu_ext_addr; +assign ddr_debug_data.mcu_ext_data = dbg_mcu_ext_data; +assign ddr_debug_data.mcu_ext_we = dbg_mcu_ext_we; + +// MCU debug +always @(posedge CLK_32M) begin + reg cs; + reg [11:0] addr; + reg [7:0] data; + reg we; + + cs <= mcu_ram_cs; + addr <= mcu_ram_addr; + data <= mcu_ram_dout; + we <= mcu_ram_we; + + if (cs & ~mcu_ram_cs) begin + dbg_mcu_ext_addr <= addr; + dbg_mcu_ext_we <= we; + if (we) dbg_mcu_ext_data <= data; + else dbg_mcu_ext_data <= mcu_ram_din; + end +end + + +wire [15:0] mcu_dbg_rom_addr; +reg [15:0] latched_mcu_dbg_rom_addr; +assign ddr_debug_data.mcu_rom_addr = latched_mcu_dbg_rom_addr; +always @(posedge CLK_32M) if (ce_cpu) latched_mcu_dbg_rom_addr <= mcu_dbg_rom_addr; + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/m72_pic.sv b/Arcade_MiST/IremM72 Hardware/rtl/m72_pic.sv new file mode 100644 index 00000000..bf95a7d8 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/m72_pic.sv @@ -0,0 +1,143 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Programmable interrupt controller +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module m72_pic( + input clk, + input ce, + input reset, + + input cs, + input wr, + input rd, + input a0, + + input [7:0] din, + + output reg int_req, + output reg [8:0] int_vector, + input int_ack, + + input [7:0] intp +); + +enum { + UNINIT, + INIT_IW2, + INIT_IW3, + INIT_IW4, + INIT_DONE +} init_state = UNINIT; + +reg [7:0] IW1, IW2, IW3, IW4; +reg [7:0] IMW, IRR, ISR; +reg [7:0] PFCW; +reg [7:0] MCW; + +wire iw4_write = IW1[0]; +wire iw4_not_written = ~IW1[0]; +wire single_mode = IW1[1]; +wire extended_mode = ~IW1[1]; +wire address_gap_4 = IW1[2]; +wire address_gap_8 = ~IW1[2]; +wire level_triggered = IW1[3]; +wire edge_triggered = ~IW1[3]; + +reg [7:0] intp_latch = 0; + +always_ff @(posedge clk or posedge reset) begin + if (reset) begin + init_state <= UNINIT; + int_req <= 0; + intp_latch <= 0; + end else if (ce) begin + if (cs & wr) begin + if (~a0) begin + if (din[4]) begin + init_state <= INIT_IW2; + IW1 <= din; + PFCW <= 0; + MCW <= 0; + IMW <= 0; + IRR <= 0; + ISR <= 0; + end else if (~din[4] & ~din[3]) begin + PFCW <= din; + end else if (~din[4] & din[3]) begin + MCW <= din; + end + end + + if (a0) begin + case (init_state) + INIT_IW2: begin + IW2 <= din; + if (extended_mode) init_state <= INIT_IW3; + else if (iw4_write) init_state <= INIT_IW4; + else init_state <= INIT_DONE; + end + INIT_IW3: begin + IW3 <= din; + if (iw4_write) init_state <= INIT_IW4; + else init_state <= INIT_DONE; + end + INIT_IW4: begin + IW4 <= din; + init_state <= INIT_DONE; + end + INIT_DONE: begin + IMW <= din; + end + endcase + end + end + + if (init_state == INIT_DONE) begin + intp_latch <= intp; + + if (int_req) begin + if (int_ack) begin + int_req <= 0; + end + end else begin + bit [7:0] trig; + int p; + bit t; + + if (edge_triggered) + trig = intp & ~intp_latch; + else + trig = intp; + + t = 0; + for( p = 0; p < 8 && !t; p = p + 1 ) begin + if (intp[p]) begin + if (trig[p] & ~IMW[p]) begin + int_req <= 1; + int_vector <= {IW2[6:3], p[2:0], 2'b00}; + end + t = 1; + end + end + end + end + end +end + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/rtl/m72_pkg.sv b/Arcade_MiST/IremM72 Hardware/rtl/m72_pkg.sv new file mode 100644 index 00000000..84713388 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/m72_pkg.sv @@ -0,0 +1,53 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Common definitions +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +package m72_pkg; + + typedef struct packed { + bit [24:0] base_addr; + bit reorder_64; + bit [1:0] bram_cs; + } region_t; + + parameter region_t REGION_CPU_ROM = '{ 25'h000000, 0, 2'b00 }; + parameter region_t REGION_SPRITE = '{ 25'h100000, 1, 2'b00 }; + parameter region_t REGION_BG_A = '{ 25'h200000, 0, 2'b00 }; + parameter region_t REGION_BG_B = '{ 25'h300000, 0, 2'b00 }; + parameter region_t REGION_MCU = '{ 25'h000000, 0, 2'b01 }; + parameter region_t REGION_SAMPLES = '{ 25'h600000, 0, 2'b00 }; + + parameter region_t LOAD_REGIONS[6] = '{ + REGION_CPU_ROM, + REGION_SPRITE, + REGION_BG_A, + REGION_BG_B, + REGION_MCU, + REGION_SAMPLES + }; + + parameter region_t REGION_CPU_RAM = '{ 25'h400000, 0, 2'b00 }; + parameter region_t REGION_CPU2_RAM = '{ 25'h500000, 0, 2'b00 }; + + typedef struct packed { + bit [3:0] reserved; + bit main_mculatch; + bit [2:0] memory_map; + } board_cfg_t; +endpackage \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/rtl/mcu.sv b/Arcade_MiST/IremM72 Hardware/rtl/mcu.sv new file mode 100644 index 00000000..c314de0e --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/mcu.sv @@ -0,0 +1,245 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - 8051 protection and sample playback MCU +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module mcu( + input CLK_32M, + input ce_8m, + input reset, + + // shared ram + output reg [11:0] ext_ram_addr, + input [7:0] ext_ram_din, + output reg [7:0] ext_ram_dout, + output reg ext_ram_cs, + output reg ext_ram_we, + input ext_ram_int, + + // z80 latch + input [7:0] z80_din, + input z80_latch_en, + + // sample output, 8-bit unsigned + output reg [7:0] sample_data, + + output reg [24:0] sample_rom_addr, + input [63:0] sample_rom_data, + output reg sample_rom_req = 0, + input sample_rom_ack, + + // ioctl + input clk_bram, + input bram_wr, + input [7:0] bram_data, + input [19:0] bram_addr, + input bram_prom_cs, + input bram_samples_cs, + + output [15:0] dbg_rom_addr +); + +reg [6:0] ram_addr; +reg [7:0] ram_din, ram_dout; +reg ram_we, ram_cs; + +wire [7:0] sample_port; + +reg [3:0] delayed_ce_count = 0; +wire delayed_ce = ce_8m & ~|delayed_ce_count & sample_rom_req == sample_rom_ack; + +always @(posedge CLK_32M) begin + if (reset) + sample_data <= 8'h80; + else + sample_data <= sample_port; +end + +dpramv #(.widthad_a(7)) internal_ram +( + .clock_a(CLK_32M), + .address_a(ram_addr), + .q_a(ram_din), + .wren_a(ram_we), + .data_a(ram_dout), + + .clock_b(0), + .address_b(0), + .data_b(), + .wren_b(1'd0), + .q_b() +); + +dpramv #(.widthad_a(13)) prom +( + .clock_a(CLK_32M), + .address_a(prom_addr[12:0]), + .q_a(prom_data), + .wren_a(1'b0), + .data_a(), + + .clock_b(clk_bram), + .address_b(bram_addr[12:0]), + .data_b(bram_data), + .wren_b(bram_prom_cs), + .q_b() +); + +wire [7:0] sample_data_dout; +reg [7:0] sample_data_latch; +reg [17:0] sample_addr; + +reg [7:0] z80_latch; +reg z80_latch_int = 0; + +reg [7:0] ext_dout; +reg [15:0] ext_addr; +reg ext_cs, ext_we; + +enum { SAMPLE, Z80, RAM } ext_src = SAMPLE; + +always @(posedge CLK_32M) begin + + if (reset) begin + sample_rom_addr[17:0] <= 18'h3FFFF; + end + + if (z80_latch_en) begin + z80_latch <= z80_din; + z80_latch_int <= 1; + end + + if (ce_8m & |delayed_ce_count) delayed_ce_count <= delayed_ce_count - 3'd1; + + ext_ram_cs <= 0; + ext_ram_we <= 0; + + if (delayed_ce) begin + dbg_rom_addr <= prom_addr; + + if (ext_cs) begin + casex (ext_addr) + 16'h0000: if (ext_we) begin + sample_addr[12:0] <= { ext_dout, 5'd0 }; + end else begin + ext_src <= SAMPLE; + sample_addr <= sample_addr + 18'd1; + sample_rom_addr <= {REGION_SAMPLES.base_addr[24:18], sample_addr[17:0]}; + if(sample_addr[17:3] != sample_rom_addr[17:3]) + sample_rom_req <= ~sample_rom_req; + end + + 16'h0001: if (ext_we) begin + sample_addr[17:13] <= ext_dout[4:0]; + end + + 16'h0002: if (ext_we) begin + z80_latch_int <= 0; + end else begin + ext_src <= Z80; + end + + 16'hcxxx: begin + delayed_ce_count <= 7; + ext_ram_addr <= ext_addr[11:0]; + ext_ram_dout <= ext_dout; + ext_ram_cs <= ext_cs; + ext_ram_we <= ext_cs & ext_we; + if (~ext_we) ext_src <= RAM; + end + endcase + end + end +end + +always @(*) begin + case(sample_rom_addr[2:0]) + 3'd0: sample_data_dout = sample_rom_data[ 7: 0]; + 3'd1: sample_data_dout = sample_rom_data[15: 8]; + 3'd2: sample_data_dout = sample_rom_data[23:16]; + 3'd3: sample_data_dout = sample_rom_data[31:24]; + 3'd4: sample_data_dout = sample_rom_data[39:32]; + 3'd5: sample_data_dout = sample_rom_data[47:40]; + 3'd6: sample_data_dout = sample_rom_data[55:48]; + default: sample_data_dout = sample_rom_data[63:56]; + endcase; +end + +wire [7:0] ext_din = ext_src == SAMPLE ? sample_data_dout : ext_src == Z80 ? z80_latch : ext_ram_din; + +reg [12:0] prom_addr; +wire [12:0] pre_prom_addr; +wire [7:0] prom_data; + +wire [6:0] pre_ram_addr; +wire [7:0] pre_ram_dout; +wire pre_ram_we, pre_ram_cs; + +wire [7:0] pre_ext_dout; +wire [15:0] pre_ext_addr; +wire pre_ext_cs; +wire pre_ext_we; + +always @(posedge CLK_32M) begin + ext_dout <= pre_ext_dout; + ext_addr <= pre_ext_addr; + ext_cs <= pre_ext_cs; + ext_we <= pre_ext_we; + + if (delayed_ce) begin + ram_dout <= pre_ram_dout; + ram_addr <= pre_ram_addr; + ram_we <= pre_ram_we; + ram_cs <= pre_ram_cs; + + prom_addr <= pre_prom_addr; + end +end + +mc8051_core mc8051( + .clk(CLK_32M), + .cen(delayed_ce), + .reset(reset), + + // prom + .rom_data_i(prom_data), + .rom_adr_o(pre_prom_addr), + + // internal ram + .ram_data_i(ram_din), + .ram_data_o(pre_ram_dout), + .ram_adr_o(pre_ram_addr), + .ram_wr_o(pre_ram_we), + .ram_en_o(pre_ram_cs), + + // interrupt lines + .int0_i(~ext_ram_int), + .int1_i(~z80_latch_int), + + // sample dac + .p1_o(sample_port), + + // external ram + .datax_i(ext_din), + .datax_o(pre_ext_dout), + .adrx_o(pre_ext_addr), + .memx_o(pre_ext_cs), + .wrx_o(pre_ext_we) +); + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/IremM72 Hardware/rtl/pal.sv b/Arcade_MiST/IremM72 Hardware/rtl/pal.sv new file mode 100644 index 00000000..c2421f91 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/pal.sv @@ -0,0 +1,146 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - PAL address decoders +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +// http://wiki.pldarchive.co.uk/index.php?title=M72-R-3A + +import m72_pkg::*; + +module pal_3a +( + input logic [19:0] A, + + input board_cfg_t board_cfg, + + input logic BANK, + input logic DBEN, + input logic M_IO, + input logic [12:0] COD, + output logic ls245_en, // TODO this signal might be better named + output [24:1] sdr_addr, + output writable, + output logic S +); + + always_comb begin + case (board_cfg.memory_map) + 0: begin + casex (A[19:16]) + 4'b010x: begin ls245_en = DBEN & M_IO; writable = 1; sdr_addr = REGION_CPU_RAM.base_addr[24:1] | A[16:1]; end + 4'b00xx: begin ls245_en = DBEN & M_IO; writable = 0; sdr_addr = REGION_CPU_ROM.base_addr[24:1] | A[17:1]; end + 4'b1111: begin ls245_en = DBEN & M_IO; writable = 0; sdr_addr = REGION_CPU_ROM.base_addr[24:1] | A[17:1]; end + default: begin ls245_en = 0; writable = 0; sdr_addr = 24'd0; end + endcase + end + 1: begin + casex (A[19:16]) + 4'b1010: begin ls245_en = DBEN & M_IO; writable = 1; sdr_addr = REGION_CPU_RAM.base_addr[24:1] | A[16:1]; end + 4'b0xxx: begin ls245_en = DBEN & M_IO; writable = 0; sdr_addr = REGION_CPU_ROM.base_addr[24:1] | A[18:1]; end + 4'b1111: begin ls245_en = DBEN & M_IO; writable = 0; sdr_addr = REGION_CPU_ROM.base_addr[24:1] | A[18:1]; end + default: begin ls245_en = 0; writable = 0; sdr_addr = 24'd0; end + endcase + end + 2: begin + casex (A[19:16]) + 4'b100x: begin ls245_en = DBEN & M_IO; writable = 1; sdr_addr = REGION_CPU_RAM.base_addr[24:1] | A[16:1]; end + 4'b0xxx: begin ls245_en = DBEN & M_IO; writable = 0; sdr_addr = REGION_CPU_ROM.base_addr[24:1] | A[18:1]; end + 4'b1111: begin ls245_en = DBEN & M_IO; writable = 0; sdr_addr = REGION_CPU_ROM.base_addr[24:1] | A[18:1]; end + default: begin ls245_en = 0; writable = 0; sdr_addr = 24'd0; end + endcase + end + + default: begin + ls245_en = 0; + writable = 0; + sdr_addr = 0; + end + + endcase + + S = COD[11]; + end + +endmodule + +module pal_4d +( + input logic IOWR, + input logic IORD, + input logic [7:0] A, + + output logic SW, + output logic FLAG, + output logic DSW, + output logic SND, + output logic SND2, + output logic FSET, + output logic DMA_ON, + output logic ISET, + output logic INTCS +); + + always_comb begin + SW = IORD & !A[7] & !A[6] & !A[3] & !A[2] & !A[1]; + FLAG = IORD & !A[7] & !A[6] & !A[3] & !A[2] & A[1]; + DSW = IORD & !A[7] & !A[6] & !A[3] & A[2] & !A[1]; + SND = IOWR & !A[7] & !A[6] & !A[3] & !A[2] & !A[1]; + SND2 = IOWR & A[7] & A[6] & !A[3] & !A[2] & !A[1]; + FSET = IOWR & !A[7] & !A[6] & !A[3] & !A[2] & A[1]; + DMA_ON = IOWR & !A[7] & !A[6] & !A[3] & A[2] & !A[1]; + ISET = IOWR & !A[7] & !A[6] & !A[3] & A[2] & A[1]; + INTCS = (IOWR | IORD) & !A[7] & A[6]; + end + +endmodule + +module pal_3d +( + input logic [19:0] A, + input logic M_IO, + input logic DBEN, + input logic TNSL, + input logic BRQ, + + output logic BUFDBEN, + output logic BUFCS, + output logic OBJ_P, + output logic CHARA_P, + output logic CHARA, + output logic SOUND, + output logic SDBEN +); + + always_comb begin + BUFDBEN = A[19] & A[18] & !A[17] & !A[16] & !A[15] & !A[14] & M_IO & !DBEN & TNSL; + + BUFCS = TNSL & (!A[19] | !A[18] | A[17] | A[16] | A[15] | A[14] | !M_IO); // TODO unused, neg M_IO is not safe here + + OBJ_P = A[19] & A[18] & !A[17] & !A[16] & A[15] & !A[14] & M_IO; + + CHARA_P = A[19] & A[18] & !A[17] & !A[16] & A[15] & A[14] & M_IO; + + CHARA = A[19] & A[18] & !A[17] & A[16] & M_IO; + + SOUND = A[19] & A[18] & A[17] & !A[16] & M_IO; + + SDBEN = A[19] & A[18] & A[17] & !A[16] & M_IO & !DBEN & BRQ; + end + +endmodule + diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/pll.qip b/Arcade_MiST/IremM72 Hardware/rtl/pll_mist.qip similarity index 60% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/pll.qip rename to Arcade_MiST/IremM72 Hardware/rtl/pll_mist.qip index 48665362..6182871f 100644 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/pll.qip +++ b/Arcade_MiST/IremM72 Hardware/rtl/pll_mist.qip @@ -1,4 +1,4 @@ set_global_assignment -name IP_TOOL_NAME "ALTPLL" set_global_assignment -name IP_TOOL_VERSION "13.1" -set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] -set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "pll_mist.v"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll_mist.ppf"] diff --git a/Arcade_MiST/IremM72 Hardware/rtl/pll_mist.v b/Arcade_MiST/IremM72 Hardware/rtl/pll_mist.v new file mode 100644 index 00000000..3d3b6c70 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/pll_mist.v @@ -0,0 +1,337 @@ +// megafunction wizard: %ALTPLL% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: altpll + +// ============================================================ +// File Name: pll_mist.v +// Megafunction Name(s): +// altpll +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 13.1.4 Build 182 03/12/2014 SJ Web Edition +// ************************************************************ + + +//Copyright (C) 1991-2014 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_mist ( + inclk0, + c0, + c1, + locked); + + input inclk0; + output c0; + output c1; + output locked; + + wire [4:0] sub_wire0; + wire sub_wire2; + wire [0:0] sub_wire6 = 1'h0; + wire [0:0] sub_wire3 = sub_wire0[0:0]; + wire [1:1] sub_wire1 = sub_wire0[1:1]; + wire c1 = sub_wire1; + wire locked = sub_wire2; + wire c0 = sub_wire3; + wire sub_wire4 = inclk0; + wire [1:0] sub_wire5 = {sub_wire6, sub_wire4}; + + altpll altpll_component ( + .inclk (sub_wire5), + .clk (sub_wire0), + .locked (sub_wire2), + .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 (), + .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 = 9, + altpll_component.clk0_duty_cycle = 50, + altpll_component.clk0_multiply_by = 32, + altpll_component.clk0_phase_shift = "0", + altpll_component.clk1_divide_by = 27, + altpll_component.clk1_duty_cycle = 50, + altpll_component.clk1_multiply_by = 32, + altpll_component.clk1_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_mist", + 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_USED", + 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_UNUSED", + 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.self_reset_on_loss_lock = "OFF", + 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 "1" +// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1" +// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +// Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "96.000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "32.000000" +// 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 "1" +// 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: MIG_DEVICE_SPEED_GRADE STRING "Any" +// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1" +// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "96.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "32.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +// Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "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_mist.mif" +// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +// Retrieval info: PRIVATE: SPREAD_USE STRING "0" +// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +// Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: USE_CLK0 STRING "1" +// Retrieval info: PRIVATE: USE_CLK1 STRING "1" +// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +// Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +// Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "9" +// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "32" +// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "27" +// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "32" +// Retrieval info: CONSTANT: CLK1_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_USED" +// Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +// 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: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +// Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +// 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: locked 0 0 0 0 @locked 0 0 0 0 +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist.ppf TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist_bb.v FALSE +// Retrieval info: LIB_FILE: altera_mf +// Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/IremM72 Hardware/rtl/rom.sv b/Arcade_MiST/IremM72 Hardware/rtl/rom.sv new file mode 100644 index 00000000..a9b2b8c5 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/rom.sv @@ -0,0 +1,120 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - ROM loading +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +import m72_pkg::*; + +module rom_loader +( + input sys_clk, + + input ioctl_downl, + input ioctl_wr, + input [7:0] ioctl_data, + + output ioctl_wait, + + output [24:1] sdr_addr, + output [15:0] sdr_data, + output [1:0] sdr_be, + output reg sdr_req, + input sdr_ack, + + output [19:0] bram_addr, + output [7:0] bram_data, + output reg [1:0] bram_cs, + output bram_wr, + + output board_cfg_t board_cfg +); + +reg [24:0] base_addr; +reg reorder_64; +reg [24:0] offset; +reg [31:0] size; + +enum { + BOARD_CFG, + SIZE_0, + SIZE_1, + SIZE_2, + SIZE_3, + SDR_DATA, + BRAM_DATA +} stage = BOARD_CFG; + +integer region = 0; + +always @(posedge sys_clk) begin + if (!ioctl_downl) begin + stage <= BOARD_CFG; + region <= 0; + end + if (sdr_ack == sdr_req) begin + ioctl_wait <= 0; + end + bram_wr <= 0; + + if (ioctl_wr) begin + case (stage) + BOARD_CFG: begin board_cfg <= board_cfg_t'(ioctl_data); stage <= SIZE_0; end + SIZE_0: begin size[31:24] <= ioctl_data; stage <= SIZE_1; end + SIZE_1: begin size[23:16] <= ioctl_data; stage <= SIZE_2; end + SIZE_2: begin size[15:8] <= ioctl_data; stage <= SIZE_3; end + SIZE_3: begin + size[7:0] <= ioctl_data; + base_addr <= LOAD_REGIONS[region].base_addr; + reorder_64 <= LOAD_REGIONS[region].reorder_64; + bram_cs <= LOAD_REGIONS[region].bram_cs; + region <= region + 4'd1; + offset <= 25'd0; + + if ({size[31:8], ioctl_data} == 32'd0) + stage <= SIZE_0; + else if (LOAD_REGIONS[region].bram_cs != 0) + stage <= BRAM_DATA; + else + stage <= SDR_DATA; + end + SDR_DATA: begin + if (reorder_64) + sdr_addr <= base_addr[24:1] + {offset[24:7], offset[5:2], offset[6], offset[1]}; + else + sdr_addr <= base_addr[24:1] + offset[24:1]; + sdr_data = {ioctl_data, ioctl_data}; + sdr_be <= { offset[0], ~offset[0] }; + offset <= offset + 25'd1; + sdr_req <= ~sdr_req; + ioctl_wait <= 1; + + if (offset == ( size - 1)) stage <= SIZE_0; + end + BRAM_DATA: begin + bram_addr <= offset[19:0]; + bram_data <= ioctl_data; + bram_wr <= 1; + offset <= offset + 25'd1; + + if (offset == ( size - 1)) stage <= SIZE_0; + end + endcase + end +end + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/sdram_4w.sv b/Arcade_MiST/IremM72 Hardware/rtl/sdram_4w.sv new file mode 100644 index 00000000..ba594201 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/sdram_4w.sv @@ -0,0 +1,474 @@ +// +// sdram.v +// +// sdram controller implementation for the MiST board +// https://github.com/mist-devel/mist-board +// +// Copyright (c) 2013 Till Harbaum +// Copyright (c) 2019-2022 Gyorgy Szombathelyi +// +// 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 . +// + +module sdram_4w ( + + // interface to the MT48LC16M16 chip + inout reg [15:0] SDRAM_DQ, // 16 bit bidirectional data bus + output reg [12:0] SDRAM_A, // 13 bit multiplexed address bus + output reg SDRAM_DQML, // two byte masks + output reg SDRAM_DQMH, // two byte masks + output reg [1:0] SDRAM_BA, // two banks + output SDRAM_nCS, // a single chip select + output SDRAM_nWE, // write enable + output SDRAM_nRAS, // row address select + output SDRAM_nCAS, // columns address select + + // cpu/chipset interface + input init_n, // init signal after FPGA config to initialize RAM + input clk, // sdram clock + + // 1st bank + input port1_req, + output reg port1_ack = 0, + input port1_we, + input [23:1] port1_a, + input [1:0] port1_ds, + input [15:0] port1_d, + output reg [15:0] port1_q, + + // cpu1 rom/ram + input [20:1] cpu1_rom_addr, + input cpu1_rom_cs, + output reg [15:0] cpu1_rom_q, + output reg cpu1_rom_valid, + + input cpu1_ram_req, + output reg cpu1_ram_ack = 0, + input [22:1] cpu1_ram_addr, + input cpu1_ram_we, + input [1:0] cpu1_ram_ds, + input [15:0] cpu1_ram_d, + output reg [15:0] cpu1_ram_q, + + // cpu2 ram + input [22:1] cpu2_addr, + input cpu2_cs, + output reg cpu2_valid = 0, + input cpu2_we, + input [1:0] cpu2_ds, + input [15:0] cpu2_d, + output reg [15:0] cpu2_q, + + // cpu3 rom + input cpu3_req, + output reg cpu3_ack = 0, + input [22:1] cpu3_addr, + output reg [15:0] cpu3_q, + + // 2nd bank + input port2_req, + output reg port2_ack = 0, + input port2_we, + input [23:1] port2_a, + input [1:0] port2_ds, + input [15:0] port2_d, + output reg [31:0] port2_q, + + input gfx1_req, + output reg gfx1_ack = 0, + input [22:1] gfx1_addr, + output reg [31:0] gfx1_q, + + input gfx2_req, + output reg gfx2_ack = 0, + input [22:1] gfx2_addr, + output reg [31:0] gfx2_q, + + input sample_req, + output reg sample_ack = 0, + input [22:1] sample_addr, + output reg [63:0] sample_data, + + input sp_req, + output reg sp_ack = 0, + input [22:1] sp_addr, + output reg [63:0] sp_q +); + +parameter MHZ = 16'd80; // 80 MHz default clock, set it to proper value to calculate refresh rate + +localparam RASCAS_DELAY = 3'd2; // tRCD=20ns -> 2 cycles@<100MHz +localparam BURST_LENGTH = 3'b010; // 000=1, 001=2, 010=4, 011=8 +localparam ACCESS_TYPE = 1'b0; // 0=sequential, 1=interleaved +localparam CAS_LATENCY = 3'd2; // 2/3 allowed +localparam OP_MODE = 2'b00; // only 00 (standard operation) allowed +localparam NO_WRITE_BURST = 1'b1; // 0= write burst enabled, 1=only single access write + +localparam MODE = { 3'b000, NO_WRITE_BURST, OP_MODE, CAS_LATENCY, ACCESS_TYPE, BURST_LENGTH}; + +// 64ms/8192 rows = 7.8us +localparam RFRSH_CYCLES = 16'd78*MHZ/4'd10; + +// --------------------------------------------------------------------- +// ------------------------ cycle state machine ------------------------ +// --------------------------------------------------------------------- + +/* + SDRAM state machine for 2 bank interleaved access + 4 words burst, CL2 +cmd issued registered + 0 RAS0 data1 returned + 1 ras0, data1 returned + 2 CAS0 + 3 RAS1 cas0 + 4 ras1 + 5 data0 returned + 6 data0 returned (but masked via DQM) + 7 CAS1 data0 returned (but masked via DQM) + 8 cas1 - data0 masked + 9 + 10 data1 returned + 11 data1 returned +*/ + +localparam STATE_RAS0 = 4'd0; // first state in cycle +localparam STATE_CAS0 = 4'd2; +localparam STATE_READ0 = 4'd6; // STATE_CAS0 + CAS_LATENCY + 2'd2; +localparam STATE_RAS1 = 4'd3; // Second ACTIVE command after RAS0 + tRRD (15ns) +localparam STATE_CAS1 = 4'd7; // CAS phase +localparam STATE_READ1 = 4'd11; +localparam STATE_READ1b = 4'd0; +localparam STATE_READ1c = 4'd1; +localparam STATE_READ1d = 4'd2; +localparam STATE_DS1b = 4'd8; +localparam STATE_DS1c = 4'd9; +localparam STATE_DS1d = 4'd10; +localparam STATE_LAST = 4'd11; + +reg [3:0] t; + +always @(posedge clk) begin + t <= t + 1'd1; + if (t == STATE_LAST) t <= STATE_RAS0; +end + +// --------------------------------------------------------------------- +// --------------------------- startup/reset --------------------------- +// --------------------------------------------------------------------- + +// wait 1ms (32 8Mhz cycles) after FPGA config is done before going +// into normal operation. Initialize the ram in the last 16 reset cycles (cycles 15-0) +reg [4:0] reset; +reg init = 1'b1; +always @(posedge clk, negedge init_n) begin + if(!init_n) begin + reset <= 5'h1f; + init <= 1'b1; + end else begin + if((t == STATE_LAST) && (reset != 0)) reset <= reset - 5'd1; + init <= !(reset == 0); + end +end + +// --------------------------------------------------------------------- +// ------------------ generate ram control signals --------------------- +// --------------------------------------------------------------------- + +// all possible commands +localparam CMD_INHIBIT = 4'b1111; +localparam CMD_NOP = 4'b0111; +localparam CMD_ACTIVE = 4'b0011; +localparam CMD_READ = 4'b0101; +localparam CMD_WRITE = 4'b0100; +localparam CMD_BURST_TERMINATE = 4'b0110; +localparam CMD_PRECHARGE = 4'b0010; +localparam CMD_AUTO_REFRESH = 4'b0001; +localparam CMD_LOAD_MODE = 4'b0000; + +reg [3:0] sd_cmd; // current command sent to sd ram +reg [15:0] sd_din; +// drive control signals according to current command +assign SDRAM_nCS = sd_cmd[3]; +assign SDRAM_nRAS = sd_cmd[2]; +assign SDRAM_nCAS = sd_cmd[1]; +assign SDRAM_nWE = sd_cmd[0]; + +reg [24:1] addr_latch[3]; +reg [24:1] addr_latch_next[2]; +reg [15:0] din_next; +reg [15:0] din_latch[2]; +reg oe_next; +reg [1:0] oe_latch; +reg we_next; +reg [1:0] we_latch; +reg [1:0] ds_next; +reg [1:0] ds[2]; + +reg port1_state; +reg port2_state; +reg cpu1_ram_req_state; +reg cpu3_req_state; +reg sp_req_state; +reg sample_req_state; + +localparam PORT_NONE = 3'd0; +localparam PORT_CPU1_ROM = 3'd1; +localparam PORT_CPU1_RAM = 3'd2; +localparam PORT_CPU2 = 3'd3; +localparam PORT_CPU3 = 3'd4; +localparam PORT_GFX1 = 3'd1; +localparam PORT_GFX2 = 3'd2; +localparam PORT_SAMPLE = 3'd3; +localparam PORT_SP = 3'd4; +localparam PORT_REQ = 3'd6; + +reg [2:0] next_port[2]; +reg [2:0] port[2]; + +reg refresh; +reg [10:0] refresh_cnt; +wire need_refresh = (refresh_cnt >= RFRSH_CYCLES); + +// PORT1: bank 0,1 +always @(*) begin + next_port[0] = PORT_NONE; + addr_latch_next[0] = addr_latch[0]; + ds_next = 2'b00; + { oe_next, we_next } = 2'b00; + din_next = 0; + + if (refresh) begin + // nothing + end else if (port1_req ^ port1_state) begin + next_port[0] = PORT_REQ; + addr_latch_next[0] = { 1'b0, port1_a }; + ds_next = port1_ds; + { oe_next, we_next } = { ~port1_we, port1_we }; + din_next = port1_d; + end else if (/*cpu1_rom_addr != addr_last[PORT_CPU1_ROM] &&*/ cpu1_rom_cs && !cpu1_rom_valid) begin + next_port[0] = PORT_CPU1_ROM; + addr_latch_next[0] = { 4'd0, cpu1_rom_addr }; + ds_next = 2'b11; + { oe_next, we_next } = 2'b10; + end else if (cpu1_ram_req ^ cpu1_ram_req_state) begin + next_port[0] = PORT_CPU1_RAM; + addr_latch_next[0] = { 2'b00, cpu1_ram_addr }; + ds_next = cpu1_ram_ds; + { oe_next, we_next } = { ~cpu1_ram_we, cpu1_ram_we }; + din_next = cpu1_ram_d; + end else if (cpu2_cs && !cpu2_valid) begin + next_port[0] = PORT_CPU2; + addr_latch_next[0] = { 2'b00, cpu2_addr }; + ds_next = cpu2_ds; + { oe_next, we_next } = { ~cpu2_we, cpu2_we }; + din_next = cpu2_d; + end else if (cpu3_req ^ cpu3_req_state) begin + next_port[0] = PORT_CPU3; + addr_latch_next[0] = { 2'b00, cpu3_addr }; + ds_next = 2'b11; + { oe_next, we_next } = 2'b10; + end +end + +// PORT1: bank 2,3 +always @(*) begin + if (port2_req ^ port2_state) begin + next_port[1] = PORT_REQ; + addr_latch_next[1] = { 1'b1, port2_a }; + end else if (gfx1_req ^ gfx1_ack) begin + next_port[1] = PORT_GFX1; + addr_latch_next[1] = { 2'b10, gfx1_addr }; + end else if (gfx2_req ^ gfx2_ack) begin + next_port[1] = PORT_GFX2; + addr_latch_next[1] = { 2'b10, gfx2_addr }; + end else if (sample_req ^ sample_req_state) begin + next_port[1] = PORT_SAMPLE; + addr_latch_next[1] = { 2'b10, sample_addr }; + end else if (sp_req ^ sp_req_state) begin + next_port[1] = PORT_SP; + addr_latch_next[1] = { 2'b10, sp_addr }; + end else begin + next_port[1] = PORT_NONE; + addr_latch_next[1] = addr_latch[1]; + end +end + +always @(posedge clk) begin + + // permanently latch ram data to reduce delays + sd_din <= SDRAM_DQ; + SDRAM_DQ <= 16'bZZZZZZZZZZZZZZZZ; + { SDRAM_DQMH, SDRAM_DQML } <= 2'b11; + sd_cmd <= CMD_NOP; // default: idle + refresh_cnt <= refresh_cnt + 1'd1; + + if(init) begin + { cpu1_rom_valid, cpu2_valid } <= 0; + // initialization takes place at the end of the reset phase + if(t == STATE_RAS0) begin + + if(reset == 15) begin + sd_cmd <= CMD_PRECHARGE; + SDRAM_A[10] <= 1'b1; // precharge all banks + end + + if(reset == 10 || reset == 8) begin + sd_cmd <= CMD_AUTO_REFRESH; + end + + if(reset == 2) begin + sd_cmd <= CMD_LOAD_MODE; + SDRAM_A <= MODE; + SDRAM_BA <= 2'b00; + end + end + end else begin + if (!cpu1_rom_cs) cpu1_rom_valid <= 0; + if (!cpu2_cs) cpu2_valid <= 0; + + // RAS phase + // bank 0,1 + if(t == STATE_RAS0) begin + addr_latch[0] <= addr_latch_next[0]; + port[0] <= next_port[0]; + { oe_latch[0], we_latch[0] } <= 2'b00; + + if (next_port[0] != PORT_NONE) begin + sd_cmd <= CMD_ACTIVE; + SDRAM_A <= addr_latch_next[0][22:10]; + SDRAM_BA <= addr_latch_next[0][24:23]; + end + ds[0] <= ds_next; + { oe_latch[0], we_latch[0] } <= { oe_next, we_next }; + din_latch[0] <= din_next; + + if (next_port[0] == PORT_REQ) port1_state <= port1_req; + if (next_port[0] == PORT_CPU1_RAM) cpu1_ram_req_state <= cpu1_ram_req; + if (next_port[0] == PORT_CPU3) cpu3_req_state <= cpu3_req; + end + + // bank 2,3 + if(t == STATE_RAS1) begin + refresh <= 1'b0; + addr_latch[1] <= addr_latch_next[1]; + { oe_latch[1], we_latch[1] } <= 2'b00; + port[1] <= next_port[1]; + + if (next_port[1] != PORT_NONE) begin + sd_cmd <= CMD_ACTIVE; + SDRAM_A <= addr_latch_next[1][22:10]; + SDRAM_BA <= addr_latch_next[1][24:23]; + if (next_port[1] == PORT_REQ) begin + { oe_latch[1], we_latch[1] } <= { ~port1_we, port1_we }; + ds[1] <= port2_ds; + din_latch[1] <= port2_d; + port2_state <= port2_req; + end else begin + { oe_latch[1], we_latch[1] } <= 2'b10; + ds[1] <= 2'b11; + end + end + if (next_port[1] == PORT_SP) sp_req_state <= sp_req; + if (next_port[1] == PORT_SAMPLE) sample_req_state <= sample_req; + + if (next_port[1] == PORT_NONE && need_refresh && !we_latch[0] && !oe_latch[0]) begin + refresh <= 1'b1; + refresh_cnt <= 0; + sd_cmd <= CMD_AUTO_REFRESH; + end + end + + // CAS phase + if(t == STATE_CAS0 && (we_latch[0] || oe_latch[0])) begin + sd_cmd <= we_latch[0]?CMD_WRITE:CMD_READ; + { SDRAM_DQMH, SDRAM_DQML } <= ~ds[0]; + if (we_latch[0]) begin + SDRAM_DQ <= din_latch[0]; + case(port[0]) + PORT_REQ: port1_ack <= port1_req; + PORT_CPU1_RAM: cpu1_ram_ack <= cpu1_ram_req; + PORT_CPU2: cpu2_valid <= 1; + default: ; + endcase; + end + SDRAM_A <= { 4'b0010, addr_latch[0][9:1] }; // auto precharge + SDRAM_BA <= addr_latch[0][24:23]; + end + + if(t == STATE_CAS1 && (we_latch[1] || oe_latch[1])) begin + sd_cmd <= we_latch[1]?CMD_WRITE:CMD_READ; + { SDRAM_DQMH, SDRAM_DQML } <= ~ds[1]; + if (we_latch[1]) begin + SDRAM_DQ <= din_latch[1]; + port2_ack <= port2_req; + end + SDRAM_A <= { 4'b0010, addr_latch[1][9:1] }; // auto precharge + SDRAM_BA <= addr_latch[1][24:23]; + end + + // Data returned + if(t == STATE_READ0 && oe_latch[0]) begin + case(port[0]) + PORT_REQ: begin port1_q <= sd_din; port1_ack <= port1_req; end + PORT_CPU1_ROM: begin cpu1_rom_q <= sd_din; cpu1_rom_valid <= 1; end + PORT_CPU1_RAM: begin cpu1_ram_q <= sd_din; cpu1_ram_ack <= cpu1_ram_req; end + PORT_CPU2: begin cpu2_q <= sd_din; cpu2_valid <= 1; end + PORT_CPU3: begin cpu3_q <= sd_din; cpu3_ack <= cpu3_req; end + default: ; + endcase; + end + + if(t == STATE_READ1 && oe_latch[1]) begin + case(port[1]) + PORT_REQ : port2_q[15:0] <= sd_din; + PORT_GFX1 : gfx1_q[15:0] <= sd_din; + PORT_GFX2 : gfx2_q[15:0] <= sd_din; + PORT_SAMPLE: sample_data[15:0] <= sd_din; + PORT_SP : sp_q[15:0] <= sd_din; + default: ; + endcase; + end + + if(t == STATE_DS1b && oe_latch[1]) { SDRAM_DQMH, SDRAM_DQML } <= ~ds[1]; + if(t == STATE_DS1c && oe_latch[1]) { SDRAM_DQMH, SDRAM_DQML } <= ~ds[1]; + if(t == STATE_DS1d && oe_latch[1]) { SDRAM_DQMH, SDRAM_DQML } <= ~ds[1]; + + if(t == STATE_READ1b && oe_latch[1]) begin + case(port[1]) + PORT_REQ : begin port2_q[31:16] <= sd_din; port2_ack <= port2_req; end + PORT_GFX1 : begin gfx1_q[31:16] <= sd_din; gfx1_ack <= gfx1_req; end + PORT_GFX2 : begin gfx2_q[31:16] <= sd_din; gfx2_ack <= gfx2_req; end + PORT_SAMPLE: sample_data[31:16] <= sd_din; + PORT_SP : sp_q[31:16] <= sd_din; + default: ; + endcase; + end + if(t == STATE_READ1c && oe_latch[1]) begin + case(port[1]) + PORT_SAMPLE: sample_data[47:32] <= sd_din; + PORT_SP: sp_q[47:32] <= sd_din; + default: ; + endcase; + end + if(t == STATE_READ1d && oe_latch[1]) begin + case(port[1]) + PORT_SAMPLE: begin sample_data[63:48] <= sd_din; sample_ack <= sample_req; end + PORT_SP: begin sp_q[63:48] <= sd_din; sp_ack <= sp_req; end + default: ; + endcase; + end + end +end + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/sound.sv b/Arcade_MiST/IremM72 Hardware/rtl/sound.sv new file mode 100644 index 00000000..0f092395 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/sound.sv @@ -0,0 +1,150 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Z80-based sound system +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +module sound ( + input CLK_32M, + input reset_n, + + input [7:0] IO_A, + input [7:0] IO_DIN, + + output [7:0] snd_io_addr, + output [7:0] snd_io_data, + output snd_io_req, + + input SOUND, + input SND, + input SND2, + input BRQ, + + input pause, + + output [15:0] ym_audio_l, + output [15:0] ym_audio_r, + + output [24:0] ram_addr, + output [7:0] ram_data, + input [7:0] ram_dout, + output ram_we, + output ram_cs, + input ram_valid +); + + + +wire CE_AUDIO, CE_AUDIO_P1; +jtframe_frac_cen #(2) jt51_cen +( + .clk(CLK_32M), + .n(10'd83), + .m(10'd742), + .cen({CE_AUDIO_P1, CE_AUDIO}) +); + +assign ram_cs = ~z80_MREQ_n & z80_IORQ_n & z80_RFSH_n; +assign ram_we = ~z80_WR_n; + +wire [7:0] SD_IN = z80_dout; +wire [7:0] SD_OUT; + +wire SA0 = z80_addr[0]; +wire SCS = ~z80_IORQ_n && (z80_addr[2:1] == 2'b00); +wire SIRQ_N; +wire SRESET; +wire SWR_N = z80_WR_n; + +wire M1_n; +wire [15:0] z80_addr; +wire z80_IORQ_n, z80_RD_n, z80_WR_n, z80_MREQ_n, z80_M1_n, z80_RFSH_n; + +assign ram_addr = {REGION_CPU2_RAM.base_addr[24:16], z80_addr}; +assign ram_data = z80_dout; +wire [7:0] z80_din = ( ~z80_M1_n & ~z80_IORQ_n ) ? {2'b11, ~snd_latch1_ready, SIRQ_N, 4'b1111} : + ( ~z80_RD_n & ~z80_IORQ_n & (z80_addr[2:1] == 2'b01)) ? snd_latch1 : + ( ~z80_RD_n & ~z80_IORQ_n & (z80_addr[2:1] == 2'b10)) ? snd_latch2 : + ( ~z80_RD_n & SCS ) ? SD_OUT : + ( ~z80_RD_n ) ? ram_dout : 8'hff; +wire [7:0] z80_dout; + +assign snd_io_addr = z80_addr[7:0]; +assign snd_io_req = ~z80_IORQ_n; +assign snd_io_data = z80_dout; + +T80s z80( + .RESET_n(~BRQ & reset_n), + .CLK(CLK_32M), + .CEN(CE_AUDIO & ~pause & ~(ram_cs & ~ram_valid)), + .INT_n(~(~SIRQ_N | snd_latch1_ready)), + .BUSRQ_n(~BRQ), + .M1_n(z80_M1_n), + .MREQ_n(z80_MREQ_n), + .IORQ_n(z80_IORQ_n), + .RFSH_n(z80_RFSH_n), + .RD_n(z80_RD_n), + .WR_n(z80_WR_n), + .A(z80_addr), + .DI(z80_din), + .DO(z80_dout), + .NMI_n(~snd_latch2_ready) +); + +jt51 ym2151( + .rst(BRQ | ~reset_n), + .clk(CLK_32M), + .cen(CE_AUDIO & ~pause), + .cen_p1(CE_AUDIO_P1 & ~pause), + .cs_n(~SCS), + .wr_n(SWR_N), + .a0(SA0), + .din(SD_IN), + .dout(SD_OUT), + .irq_n(SIRQ_N), + .xleft(ym_audio_l), + .xright(ym_audio_r) +); + +reg [7:0] snd_latch1; +reg snd_latch1_ready = 0; + +reg [7:0] snd_latch2; +reg snd_latch2_ready = 0; + +always @(posedge CLK_32M) begin + if (~reset_n) begin + snd_latch1_ready <= 0; + snd_latch2_ready <= 0; + end else begin + if (SND & ~IO_A[0]) begin + snd_latch1 <= IO_DIN[7:0]; + snd_latch1_ready <= 1; + end + + if (SND2 & ~IO_A[0]) begin + snd_latch2 <= IO_DIN[7:0]; + snd_latch2_ready <= 1; + end + + if (~z80_IORQ_n & ~z80_WR_n & z80_addr[2:1] == 2'b11) snd_latch1_ready <= 0; + if (~z80_IORQ_n & ~z80_RD_n & (z80_addr[2:1] == 2'b10)) snd_latch2_ready <= 0; + end + +end + +endmodule diff --git a/Arcade_MiST/IremM72 Hardware/rtl/sprite.sv b/Arcade_MiST/IremM72 Hardware/rtl/sprite.sv new file mode 100644 index 00000000..6678c687 --- /dev/null +++ b/Arcade_MiST/IremM72 Hardware/rtl/sprite.sv @@ -0,0 +1,346 @@ +//============================================================================ +// Irem M72 for MiSTer FPGA - Sprites +// +// Copyright (C) 2022 Martin Donlon +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +//============================================================================ + +import m72_pkg::*; + +module sprite ( + input CLK_32M, + input CE_PIX, + + input CLK_96M, + + input [15:0] DIN, + output [15:0] DOUT, + output DOUT_VALID, + + input [19:0] A, + input [1:0] BYTE_SEL, + + input BUFDBEN, + input MRD, + input MWR, + + input HBLK, + input [8:0] VE, + input NL, + + input DMA_ON, + output reg TNSL, + + output [7:0] pix_test, + + input [63:0] sdr_data, + output [24:1] sdr_addr, + output reg sdr_req, + input sdr_ack +); + +wire [7:0] dout_h, dout_l; + +assign DOUT = { dout_h, dout_l }; +assign DOUT_VALID = MRD & BUFDBEN; + +dpramv #(.widthad_a(9)) ram_h +( + .clock_a(CLK_32M), + .address_a(A[9:1]), + .q_a(dout_h), + .wren_a(MWR & BUFDBEN & BYTE_SEL[1]), + .data_a(DIN[15:8]), + + .clock_b(CLK_32M), + .address_b(dma_rd_addr), + .data_b(), + .wren_b(0), + .q_b(dma_h) +); + +dpramv #(.widthad_a(9)) ram_l +( + .clock_a(CLK_32M), + .address_a(A[9:1]), + .q_a(dout_l), + .wren_a(MWR & BUFDBEN & BYTE_SEL[0]), + .data_a(DIN[7:0]), + + .clock_b(CLK_32M), + .address_b(dma_rd_addr), + .data_b(), + .wren_b(0), + .q_b(dma_l) +); + +reg [63:0] objram[128]; + +reg [7:0] dma_l, dma_h; +reg [10:0] dma_counter; +wire [9:0] dma_rd_addr = dma_counter[10:1]; + +always_ff @(posedge CLK_32M) begin + reg [7:0] b[6]; + if (DMA_ON & TNSL) begin + TNSL <= 0; + dma_counter <= 11'd0; + end + + if (~TNSL) begin + case (dma_counter[2:0]) + 3'b001: begin + b[0] <= dma_l; + b[1] <= dma_h; + end + 3'b011: begin + b[2] <= dma_l; + b[3] <= dma_h; + end + 3'b101: begin + b[4] <= dma_l; + b[5] <= dma_h; + end + 3'b111: objram[dma_counter[10:3]] <= { dma_h, dma_l, b[5], b[4], b[3], b[2], b[1], b[0] }; + endcase + + dma_counter <= dma_counter + 11'd1; + if (dma_counter == 11'h3ff) TNSL <= 1; + end +end + +reg line_buffer_ack, line_buffer_req; +reg [3:0] line_buffer_color; +reg [63:0] line_buffer_in; +reg [9:0] line_buffer_x; + +line_buffer line_buffer( + .CLK_32M(CLK_32M), + .CLK_96M(CLK_96M), + .CE_PIX(CE_PIX), + + .V0(VE[0]), + .NL(NL), + + .wr_req(line_buffer_req), + .wr_ack(line_buffer_ack), + .data_in(line_buffer_in), + .color_in(line_buffer_color), + .position_in(line_buffer_x), + + .pixel_out(pix_test) +); + +// d is 16 pixels stored as 2 sets of 4 bitplanes +// d[31:0] is 8 pixels, made up from planes d[7:0], d[15:8], etc +// d[63:32] is 8 pixels made up from planes d[39:32], d[47:40], etc +// Returns 16 pixels stored as 4 bit planes d[15:0], d[31:16], etc +function [63:0] deswizzle(input [63:0] d, input rev); + begin + integer i; + bit [7:0] plane[8]; + bit [7:0] t; + for( i = 0; i < 8; i = i + 1 ) begin + t = d[(i*8) +: 8]; + plane[i] = rev ? { t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7] } : t; + end + + deswizzle[15:0] = rev ? { plane[4], plane[0] } : { plane[0], plane[4] }; + deswizzle[31:16] = rev ? { plane[5], plane[1] } : { plane[1], plane[5] }; + deswizzle[47:32] = rev ? { plane[6], plane[2] } : { plane[2], plane[6] }; + deswizzle[63:48] = rev ? { plane[7], plane[3] } : { plane[3], plane[7] }; + end +endfunction + +reg [63:0] cur_obj; +wire [8:0] obj_org_y = cur_obj[8:0]; +wire [15:0] obj_code = cur_obj[31:16]; +wire [3:0] obj_color = cur_obj[35:32]; +wire obj_flipx = cur_obj[43]; +wire obj_flipy = cur_obj[42]; +wire [1:0] obj_height = cur_obj[45:44]; +wire [1:0] obj_width = cur_obj[47:46]; +wire [9:0] obj_org_x = cur_obj[57:48]; +reg [8:0] width_px, height_px; +reg [3:0] width, height; +reg [8:0] rel_y; + +wire [8:0] row_y = obj_flipy ? (height_px - rel_y - 9'd1) : rel_y; + +always_ff @(posedge CLK_96M) begin + reg old_v0 = 0; + + reg [7:0] obj_ptr = 0; + reg [3:0] st = 0; + reg [3:0] span; + reg [15:0] code; + reg [8:0] V; + + old_v0 <= VE[0]; + + if (old_v0 != VE[0]) begin + // new line, reset + obj_ptr <= 0; + st <= 0; + V <= NL ? ( VE - 9'd1 ) : ( VE + 9'd1 ); + end else if (obj_ptr == 10'h80) begin + // done, wait + obj_ptr <= obj_ptr; + end else if (sdr_req != sdr_ack) begin + // wait + end else begin + st <= st + 4'd1; + case (st) + 0: cur_obj <= objram[obj_ptr]; + 1: begin + width_px <= 9'd16 << obj_width; + height_px <= 9'd16 << obj_height; + width <= 4'd1 << obj_width; + height <= 4'd1 << obj_height; + rel_y <= V + obj_org_y + ( 9'd16 << obj_height ); + span <= 0; + end + 2: begin + if (rel_y >= height_px) begin + st <= 0; + obj_ptr <= obj_ptr + width; + end + code <= obj_code + row_y[8:4] + ( ( obj_flipx ? ( width - span - 16'd1 ) : span ) * 16'd8 ); + end + 3: begin + sdr_addr <= REGION_SPRITE.base_addr[24:1] + { code[12:0], row_y[3:0], 2'b00 }; + sdr_req <= ~sdr_req; + end + 4: begin + line_buffer_in <= deswizzle(sdr_data, obj_flipx); + if (line_buffer_req != line_buffer_ack) + st <= st; // wait + else begin + line_buffer_color <= obj_color; + line_buffer_x = obj_org_x + ( 10'd16 * span ); + line_buffer_req <= ~line_buffer_ack; + end + end + 5: begin + if (span == (width - 1)) begin + st <= 0; + obj_ptr <= obj_ptr + width; + end else begin + st <= 2; + span <= span + 4'd1; + end + end + endcase + end +end + +endmodule + +module line_buffer( + input CLK_32M, + input CLK_96M, + input CE_PIX, + + input V0, + + input NL, + + + input wr_req, + output reg wr_ack, + input [63:0] data_in, + input [3:0] color_in, + input [9:0] position_in, + + output reg [7:0] pixel_out +); + +reg scan_buffer; +reg [9:0] scan_pos = 0; +wire [9:0] scan_pos_nl = scan_pos ^ {10{NL}}; +reg [7:0] line_pixel; +reg [9:0] line_position; +reg line_write = 0; + +wire [7:0] scan_0, scan_1, scan_2; +dpramv #(.widthad_a(10)) buffer_0 +( + .clock_a(CLK_32M), + .address_a(scan_pos_nl), + .q_a(scan_0), + .wren_a(!scan_buffer && CE_PIX), + .data_a(8'd0), + + .clock_b(CLK_96M), + .address_b(line_position), + .data_b(line_pixel), + .wren_b(scan_buffer && line_write), + .q_b() +); + +dpramv #(.widthad_a(10)) buffer_1 +( + .clock_a(CLK_32M), + .address_a(scan_pos_nl), + .q_a(scan_1), + .wren_a(scan_buffer && CE_PIX), + .data_a(8'd0), + + .clock_b(CLK_96M), + .address_b(line_position), + .data_b(line_pixel), + .wren_b(!scan_buffer && line_write), + .q_b() +); + +always_ff @(posedge CLK_96M) begin + reg [63:0] data; + reg [3:0] color; + reg [9:0] position; + reg [4:0] count = 0; + + line_write <= 0; + + if (count != 0) begin + line_pixel <= { color, data[63], data[47], data[31], data[15] }; + line_write <= data[63] | data[47] | data[31] | data[15]; + line_position <= position; + position <= position + 10'd1; + count <= count - 4'd1; + data <= { data[62:0], 1'b0 }; + end else if (wr_req != wr_ack) begin + data <= data_in; + color <= color_in; + position <= position_in; + count <= 5'd16; + wr_ack <= wr_req; + end +end + +always_ff @(posedge CLK_32M) begin + reg old_v0 = 0; + + if (old_v0 != V0) begin + scan_pos <= 249; // TODO why? + old_v0 <= V0; + scan_buffer <= ~scan_buffer; + end else if (CE_PIX) begin + pixel_out <= scan_buffer ? scan_1 : scan_0; + scan_pos <= scan_pos + 10'd1; + end +end + +endmodule diff --git a/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/TerraCresta.sv b/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/TerraCresta.sv index a8210920..54c8d1ee 100644 --- a/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/TerraCresta.sv +++ b/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/TerraCresta.sv @@ -1,5 +1,9 @@ //============================================================================ // +// (c) 2022 Darren Olafson +// +// Enhancements/fixes/SDRAM handling (c) 2022 Gyorgy Szombathelyi +// // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the Free // Software Foundation; either version 2 of the License, or (at your option) @@ -115,14 +119,11 @@ assign flipped = flip; wire [8:0] hc; wire [8:0] vc; -wire [8:0] vc_raw; -assign vc = vc_raw + 8'd16; - video_timing video_timing ( .clk(clk_24M), .clk_pix_en(clk6_en), .hc(hc), - .vc(vc_raw), + .vc(vc), .hs_offset(hs_offset), .vs_offset(vs_offset), .hbl(hbl), @@ -183,7 +184,6 @@ reg [1:0] gfx2_pal_l_r; always @ (posedge clk_24M) begin if (clk6_en) begin // 0 - //gfx1_addr <= { ( (pcb == 0 ) ? 1'b0 : fg_ram_dout[8] ) , fg_ram_dout[7:0], vc[2:0], hc[2:1] } ; // tile #. set of 256 tiles -- fg_ram_dout[7:0] if (hc_x[0]) gfx1_addr <= { 1'b0 , fg_ram_dout[7:0], vc_x[2:0], hc_x[2:1] } ; // tile #. set of 256 tiles -- fg_ram_dout[7:0] @@ -260,7 +260,7 @@ always @ (posedge clk_24M) begin copy_sprite_state <= 3; end else if ( copy_sprite_state == 3 ) begin // address 0 result - sprite_y_pos <= flip ? sprite_shared_ram_dout : 8'd239 - sprite_shared_ram_dout; + sprite_y_pos <= flip ? sprite_shared_ram_dout - 1'd1 : 8'd239 - sprite_shared_ram_dout; sprite_shared_addr <= sprite_shared_addr + 1'd1 ; copy_sprite_state <= 4; @@ -278,8 +278,6 @@ always @ (posedge clk_24M) begin if ( pcb == 0 || pcb == 1 || pcb == 3 ) begin sprite_tile[9:8] <= { 1'b0, sprite_shared_ram_dout[1] }; end else begin -// if( attrs&0x10 ) tile |= 0x100; -// if( attrs&0x02 ) tile |= 0x200; sprite_tile[9:8] <= { sprite_shared_ram_dout[1], sprite_shared_ram_dout[4] }; end @@ -318,7 +316,6 @@ always @ (posedge clk_24M) begin end if ( draw_sprite_state == 0 && copy_sprite_state == 0 && hc == 2 ) begin // 0xe0 - // clear sprite buffer sprite_x_ofs <= 0; draw_sprite_state <= 1; sprite_buffer_addr <= 0; @@ -370,11 +367,8 @@ wire [3:0] sprite_y_ofs = vc - sprite_y_pos ; wire [3:0] flipped_x = ( sprite_flip_x == 0 ) ? sprite_x_new_ofs : 4'd15 - sprite_x_new_ofs; wire [3:0] flipped_y = ( sprite_flip_y == 0 ) ? sprite_y_ofs : 4'd15 - sprite_y_ofs; -//wire [3:0] gfx3_pix = (sprite_x_ofs[0] == 1 ) ? gfx3_dout[7:4] : gfx3_dout[3:0]; wire [3:0] gfx3_pix = (flipped_x[0] == 1 ) ? gfx3_dout[7:4] : gfx3_dout[3:0]; -// int spr_col = (u[t>>1]<<8) + (c<<4) + pen ; -// prom_u = palette bank lookup wire [11:0] p ; wire [16:0] gfx3_addr ; @@ -396,46 +390,14 @@ always @ (*) begin gfx3_addr = { 1'b0, flipped_x[1], sprite_tile[8:0], flipped_y[3:0], flipped_x[3:2] }; p = { prom_u_dout, sprite_colour, gfx3_pix}; - //p = { prom_u[sprite_tile[8:1]][3:0], sprite_colour, gfx3_pix}; end else begin // hori gfx3_addr = { flipped_x[1], sprite_tile[9:0], flipped_y[3:0], flipped_x[3:2] }; p = { prom_u_dout, sprite_colour[3:1], 1'b0, gfx3_pix}; - //p = { prom_u[{sprite_tile[9],sprite_tile[7:2],sprite_tile[8]}][3:0], sprite_colour[3:1], 1'b0, gfx3_pix}; end end -// sprite_tile[9:8] <= { sprite_shared_ram_dout[1], sprite_shared_ram_dout[4] }; - -// int tile = pSource[1]&0xff; -// int attrs = pSource[2]; -// int flipx = attrs&0x04; -// int flipy = attrs&0x08; -// int color = (attrs&0xf0)>>4; -// int sx = (pSource[3] & 0xff) - 0x80 + 256 * (attrs & 1); -// int sy = 240 - (pSource[0] & 0xff); -// -// if( transparent_pen ) -// { -// int bank; -// -// if( attrs&0x02 ) tile |= 0x200; // sprite_shared_ram_dout[1] -// if( attrs&0x10 ) tile |= 0x100; // sprite_shared_ram_dout[4] -// -// bank = (tile&0xfc)>>1; -// if( tile&0x200 ) bank |= 0x80; // sprite_shared_ram_dout[1] -// if( tile&0x100 ) bank |= 0x01; // sprite_shared_ram_dout[4] -// -// color &= 0xe; -// color += 16*(spritepalettebank[bank]&0xf); -// } -// else -// { -// if( attrs&0x02 ) tile|= 0x100; -// color += 16 * (spritepalettebank[(tile>>1)&0xff] & 0x0f); -// } - reg [11:0] sprite_line_buffer[512]; dual_port_ram #(.LEN(64), .DATA_WIDTH(64)) sprite_buffer ( @@ -616,7 +578,7 @@ end // always ack when it's not program rom assign m68k_dtack_n = 0; - // select cpu data input based on what is active +// select cpu data input based on what is active assign m68k_din = prog_rom_cs ? prog_rom_data : m68k_ram_cs ? ram68k_dout : m68k_ram1_cs ? m68k_ram1_dout : diff --git a/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/video_timing.sv b/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/video_timing.sv index 7c11b810..fc96e69c 100644 --- a/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/video_timing.sv +++ b/Arcade_MiST/Nichibutsu M68000 Hardware/TerraCresta/rtl/video_timing.sv @@ -25,10 +25,10 @@ wire [8:0] HS_START = 9'd300; wire [8:0] HS_END = 9'd332; wire [8:0] HTOTAL = 9'd383; -wire [8:0] VBL_START = 9'd224; -wire [8:0] VBL_END = 9'd0; -wire [8:0] VS_START = 9'd235; -wire [8:0] VS_END = 9'd243; +wire [8:0] VBL_START = 9'd240; +wire [8:0] VBL_END = 9'd16; +wire [8:0] VS_START = 9'd251; +wire [8:0] VS_END = 9'd259; wire [8:0] VTOTAL = 9'd263; reg [8:0] v; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.qsf b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.qsf deleted file mode 100644 index edcbe396..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.qsf +++ /dev/null @@ -1,419 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2014 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.4 Build 182 03/12/2014 SJ Web Edition -# Date created = 18:25:30 June 25, 2019 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# Capitol_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 13.1 -set_global_assignment -name PROJECT_CREATION_TIME_DATE "21:40:24 MAY 17, 2014" -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS ON -set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" -set_global_assignment -name SYSTEMVERILOG_FILE rtl/Capitol_MiST.sv -set_global_assignment -name VHDL_FILE rtl/phoenix.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_effect3.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_effect2.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_effect1.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_video.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_music.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/PROM_40.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/PROM_39.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/PROM_24.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/PROM_23.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prog.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/col_l.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/col_h.vhd -set_global_assignment -name VHDL_FILE rtl/pll.vhd -set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd -set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip - -# 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_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 "pll27:pll|altpll:altpll_component" - -# Classic Timing Assignments -# ========================== -set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 - -# Analysis & Synthesis Assignments -# ================================ -set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED -set_global_assignment -name FAMILY "Cyclone III" -set_global_assignment -name TOP_LEVEL_ENTITY Capitol_MiST -set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 -set_global_assignment -name ALLOW_POWER_UP_DONT_CARE ON -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON -set_global_assignment -name SAVE_DISK_SPACE OFF -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 - -# Fitter Assignments -# ================== -set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE OPTIMISTIC -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON -set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING ON -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON -set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON -set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT EXTRA -set_global_assignment -name DEVICE EP3C25E144C8 -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON -set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF -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" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON -set_global_assignment -name FITTER_EFFORT "AUTO FIT" - -# Assembler Assignments -# ===================== -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name USE_CONFIGURATION_DEVICE OFF - -# SignalTap II Assignments -# ======================== -set_global_assignment -name ENABLE_SIGNALTAP OFF -set_global_assignment -name USE_SIGNALTAP_FILE output_files/video.stp - -# 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 ENTITY(Capitol_MiST) - - # Pin & Location Assignments - # ========================== - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[0] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[1] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[2] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[3] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[4] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[5] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[6] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[7] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[8] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[9] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[10] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[11] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[12] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[13] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[14] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[15] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[0] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[1] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[2] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[3] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[4] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[5] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[6] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[7] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[8] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[9] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[10] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[11] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[12] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[0] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[1] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQMH - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQML - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nRAS - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCAS - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nWE - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCS - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[0] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[1] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[2] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[3] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[4] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[5] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[6] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[7] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[8] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[9] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[10] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[11] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[12] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[13] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[14] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[15] - - # Fitter Assignments - # ================== - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[6] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[7] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[8] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[9] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[10] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[11] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[12] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[6] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[7] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[8] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[9] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[10] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[11] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[12] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[13] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[14] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[15] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_BA[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_BA[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQML - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQMH - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nRAS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nCAS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nWE - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nCS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_CKE - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_CLK - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_HS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_VS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to LED - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_L - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_R - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_DO - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to CONF_DATA0 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_L - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_R - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_27 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CONF_DATA0 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_DI - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_DO - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SCK - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SS2 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SS3 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_HS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_VS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[6] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[7] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[8] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[9] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[10] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[11] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[12] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[6] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[7] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[8] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[9] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[10] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[11] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[12] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[13] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[14] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[15] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_BA[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_BA[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQMH - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQML - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nRAS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nCAS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nWE - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nCS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_CKE - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_CLK - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to CLOCK_27 - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_DI - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_SCK - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_SS2 - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_SS3 - - # start DESIGN_PARTITION(Top) - # --------------------------- - - # Incremental Compilation Assignments - # =================================== - 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 - - # end DESIGN_PARTITION(Top) - # ------------------------- - -# end ENTITY(Capitol_MiST) -# ------------------------ -set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.sdc b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.sdc deleted file mode 100644 index ea8cd2c9..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/Capitol_mist.sdc +++ /dev/null @@ -1,42 +0,0 @@ -#************************************************************ -# THIS IS A WIZARD-GENERATED FILE. -# -# Version 13.1.4 Build 182 03/12/2014 SJ Full Version -# -#************************************************************ - -# Copyright (C) 1991-2014 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. - - - -# Clock constraints - -create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_ports {SPI_SCK}] - -# Automatically constrain PLL and other generated clocks -derive_pll_clocks -create_base_clocks - -# Automatically calculate clock uncertainty to jitter and other effects. -derive_clock_uncertainty - -set_clock_groups -asynchronous -group [get_clocks {SPI_SCK}] -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[*]}] - -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {AUDIO_L}] -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {AUDIO_R}] -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {LED}] -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {VGA_*}] - -set_multicycle_path -to {VGA_*[*]} -setup 2 -set_multicycle_path -to {VGA_*[*]} -hold 1 diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/README.txt b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/README.txt deleted file mode 100644 index d8877bea..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/README.txt +++ /dev/null @@ -1,24 +0,0 @@ ---------------------------------------------------------------------------------- --- --- Arcade: Capitol for MiST by Gehstock --- 15 Mar 2019 --- ---------------------------------------------------------------------------------- --- Copyright (c) DAR - Feb 2016 --- https://sourceforge.net/projects/darfpga/files/Software%20VHDL/phoenix/ ---------------------------------------------------------------------------------- --- --- Only controls and OSD are rotated on VGA output. --- --- --- Keyboard inputs : --- --- ESC : Coin --- F1 : Start 1 player --- F2 : Start 2 players --- SPACE : Fire --- ARROW KEYS : Movement/Shield --- --- Joystick support. --- ---------------------------------------------------------------------------------- diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/Capitol_MiST.sv b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/Capitol_MiST.sv deleted file mode 100644 index 7403aa6b..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/Capitol_MiST.sv +++ /dev/null @@ -1,169 +0,0 @@ -//============================================================================ -// Arcade: Capitol -// -//------------------------------------------------------------------------------- -// DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) (April 2016) -// http://darfpga.blogspot.fr -// -// -//------------------------------------------------------------------------------- - -module Capitol_MiST -( - output LED, - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - output VGA_HS, - output VGA_VS, - output AUDIO_L, - output AUDIO_R, - input SPI_SCK, - output SPI_DO, - input SPI_DI, - input SPI_SS2, - input SPI_SS3, - input CONF_DATA0, - input CLOCK_27 -); - -`include "rtl\build_id.v" - -localparam CONF_STR = { - "Capitol;;", - "O2,Rotate Controls,Off,On;", - "O34,Scanlines,Off,25%,50%,75%;", - "O5,Blend,Off,On;", - "T0,Reset;", - "V,v1.21.",`BUILD_DATE -}; - -wire rotate = status[2]; -wire [1:0] scanlines = status[4:3]; -wire blend = status[5]; - -assign LED = 1; -assign AUDIO_R = AUDIO_L; - -wire clk_sys, clk_22; -wire pll_locked; -pll pll( - .inclk0(CLOCK_27), - .areset(0), - .c0(clk_sys), - .c1(clk_22) - ); - -wire [31:0] status; -wire [1:0] buttons; -wire [1:0] switches; -wire [7:0] joystick_0; -wire [7:0] joystick_1; -wire scandoublerD; -wire ypbpr; -reg [11:0] audio; -wire hb1, hb2, vb; -wire blankn = ~((hb1 & hb2) | vb); -wire hs, vs; -wire [1:0] r,g,b; -wire key_pressed; -wire [7:0] key_code; -wire key_strobe; - -phoenix phoenix( - .clk(clk_sys), - .reset(status[0] | buttons[1]), - .dip_switch(8'b00001111), - .btn_coin(m_coin1 | m_coin2), - .btn_player_start({m_two_players,m_one_player}), - .btn_left(m_left), - .btn_right(m_right), - .btn_barrier(m_fireB), - .btn_fire(m_fireA), - .video_r(r), - .video_g(g), - .video_b(b), - .video_hs(hs), - .video_vs(vs), - .video_vblank(vb), - .video_hblank_bg(hb1), - .video_hblank_fg(hb2), - .audio_select("000"), - .audio(audio) - ); - -mist_video #(.COLOR_DEPTH(2), .SD_HCNT_WIDTH(10)) mist_video( - .clk_sys(clk_22), - .SPI_SCK(SPI_SCK), - .SPI_SS3(SPI_SS3), - .SPI_DI(SPI_DI), - .R(blankn ? r : 0), - .G(blankn ? g : 0), - .B(blankn ? b : 0), - .HSync(~hs), - .VSync(~vs), - .VGA_R(VGA_R), - .VGA_G(VGA_G), - .VGA_B(VGA_B), - .VGA_VS(VGA_VS), - .VGA_HS(VGA_HS), - .ce_divider(1'b1), - .blend(blend), - .rotate({1'b1,rotate}), - .scandoubler_disable(scandoublerD), - .scanlines(scanlines), - .ypbpr(ypbpr) - ); - -user_io #( - .STRLEN(($size(CONF_STR)>>3))) -user_io( - .clk_sys (clk_sys ), - .conf_str (CONF_STR ), - .SPI_CLK (SPI_SCK ), - .SPI_SS_IO (CONF_DATA0 ), - .SPI_MISO (SPI_DO ), - .SPI_MOSI (SPI_DI ), - .buttons (buttons ), - .switches (switches ), - .scandoubler_disable (scandoublerD ), - .ypbpr (ypbpr ), - .key_strobe (key_strobe ), - .key_pressed (key_pressed ), - .key_code (key_code ), - .joystick_0 (joystick_0 ), - .joystick_1 (joystick_1 ), - .status (status ) - ); - - -dac #( - .C_bits(15)) -dac( - .clk_i(clk_sys), - .res_n_i(1), - .dac_i({audio, 3'b000}), - .dac_o(AUDIO_L) - ); - -wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF; -wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F; -wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players; - -arcade_inputs inputs ( - .clk ( clk_sys ), - .key_strobe ( key_strobe ), - .key_pressed ( key_pressed ), - .key_code ( key_code ), - .joystick_0 ( joystick_0 ), - .joystick_1 ( joystick_1 ), - .rotate ( rotate ), - .orientation ( 2'b11 ), - .joyswap ( 1'b0 ), - .oneplayer ( 1'b1 ), - .controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ), - .player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ), - .player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} ) -); - -endmodule diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_23.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_23.vhd deleted file mode 100644 index 4405cc49..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_23.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity PROM_23 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of PROM_23 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"10",X"90",X"70",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"0F",X"08",X"08",X"04",X"FF",X"FF",X"FF",X"7E",X"3F",X"1C",X"88",X"E4", - X"E0",X"F8",X"FC",X"FE",X"FE",X"FF",X"FF",X"FF",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E3",X"F1",X"F8",X"7C",X"7E",X"3F",X"1F",X"07", - X"17",X"1F",X"FF",X"7F",X"3F",X"9F",X"8F",X"C7",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01",X"02", - X"04",X"08",X"10",X"20",X"40",X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01",X"02",X"04",X"08", - X"10",X"20",X"40",X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01",X"02",X"04",X"08",X"10",X"20", - X"40",X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80", - X"00",X"18",X"3C",X"7E",X"3C",X"18",X"00",X"00",X"00",X"00",X"20",X"70",X"70",X"20",X"00",X"00", - X"10",X"38",X"7C",X"FE",X"7C",X"38",X"10",X"00",X"20",X"A4",X"38",X"FE",X"38",X"A4",X"20",X"00", - X"44",X"AA",X"AA",X"01",X"01",X"AA",X"AA",X"44",X"44",X"AA",X"82",X"01",X"01",X"82",X"AA",X"44", - X"44",X"82",X"82",X"01",X"01",X"82",X"82",X"44",X"40",X"80",X"80",X"00",X"00",X"80",X"80",X"00", - X"3C",X"6E",X"EF",X"EF",X"EF",X"EF",X"6E",X"3C",X"3C",X"66",X"E7",X"E7",X"E7",X"E7",X"66",X"3C", - X"3C",X"66",X"C3",X"C3",X"C3",X"C3",X"66",X"3C",X"E8",X"D0",X"F0",X"5E",X"70",X"30",X"30",X"10", - X"E8",X"C8",X"E4",X"C3",X"E3",X"C4",X"E8",X"C8",X"10",X"30",X"30",X"70",X"7E",X"D0",X"F0",X"C8", - X"73",X"06",X"04",X"0C",X"1E",X"30",X"7C",X"C0",X"18",X"18",X"70",X"00",X"00",X"70",X"18",X"18", - X"C0",X"7C",X"30",X"1E",X"0C",X"04",X"06",X"73",X"E0",X"E0",X"E0",X"E0",X"C0",X"C0",X"C0",X"C0", - X"C5",X"AB",X"AD",X"9D",X"9C",X"B4",X"B4",X"F0",X"F0",X"B4",X"B4",X"9C",X"9D",X"AD",X"AB",X"C5", - X"C0",X"C0",X"C0",X"C0",X"E0",X"E0",X"E0",X"E0",X"80",X"84",X"48",X"30",X"1F",X"30",X"48",X"84", - X"18",X"24",X"24",X"24",X"24",X"24",X"24",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"90",X"F0",X"F8",X"3F",X"00",X"00",X"00",X"00",X"00",X"02",X"3C",X"CC",X"14",X"24",X"48",X"88", - X"FF",X"FF",X"C1",X"80",X"80",X"00",X"00",X"00",X"08",X"08",X"08",X"0C",X"8F",X"8E",X"C6",X"FF", - X"08",X"08",X"D0",X"E0",X"78",X"1E",X"00",X"00",X"C0",X"80",X"80",X"E0",X"1B",X"0C",X"34",X"C4", - X"FF",X"FF",X"C3",X"81",X"80",X"00",X"00",X"00",X"00",X"01",X"01",X"03",X"83",X"83",X"C7",X"FF", - X"FF",X"08",X"10",X"20",X"C0",X"C0",X"60",X"30",X"00",X"30",X"60",X"C0",X"C0",X"A0",X"10",X"08", - X"FF",X"FF",X"C7",X"83",X"81",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"81",X"83",X"C7",X"FF", - X"E0",X"E0",X"E0",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"E0",X"F8",X"F8", - X"F9",X"FF",X"FF",X"19",X"19",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"F9",X"F9",X"FF",X"FF",X"F9", - X"C0",X"20",X"F8",X"FF",X"F8",X"20",X"C0",X"00",X"30",X"2E",X"30",X"28",X"30",X"2E",X"30",X"28", - X"10",X"38",X"EC",X"4E",X"EC",X"38",X"10",X"00",X"00",X"E0",X"F0",X"A0",X"00",X"00",X"00",X"00", - X"A0",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"F8",X"F4",X"E0",X"40",X"00",X"00",X"00",X"00", - X"00",X"00",X"60",X"80",X"10",X"00",X"00",X"00",X"0C",X"0E",X"5F",X"FB",X"B9",X"C8",X"E4",X"60", - X"00",X"0C",X"0E",X"2F",X"7F",X"7E",X"F2",X"FF",X"D0",X"A0",X"08",X"00",X"00",X"00",X"00",X"00", - X"FB",X"F0",X"D0",X"40",X"20",X"00",X"00",X"00",X"30",X"78",X"68",X"C0",X"40",X"00",X"00",X"00", - X"1E",X"00",X"7F",X"FF",X"00",X"F2",X"6A",X"B0",X"00",X"1C",X"00",X"7F",X"7F",X"00",X"FA",X"F0", - X"00",X"00",X"00",X"00",X"2A",X"00",X"00",X"00",X"00",X"00",X"00",X"2A",X"2A",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"E8",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"DC",X"08",X"00",X"00", - X"00",X"00",X"00",X"1C",X"DC",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"57",X"07",X"57",X"07",X"57",X"07",X"56",X"FC",X"55",X"00",X"55",X"00",X"55",X"00",X"55",X"FF", - X"01",X"03",X"FF",X"FF",X"57",X"07",X"57",X"07",X"00",X"00",X"FF",X"FF",X"55",X"00",X"55",X"00", - X"00",X"00",X"FC",X"00",X"FF",X"FC",X"00",X"00",X"00",X"FF",X"00",X"FF",X"00",X"FF",X"FF",X"00", - X"00",X"00",X"FF",X"00",X"AA",X"00",X"00",X"00",X"00",X"FF",X"00",X"2A",X"00",X"54",X"00",X"00", - X"FF",X"00",X"FF",X"FF",X"00",X"FF",X"00",X"FF",X"00",X"00",X"00",X"2A",X"00",X"00",X"00",X"00", - X"00",X"FF",X"00",X"FF",X"00",X"FF",X"00",X"00",X"04",X"04",X"06",X"06",X"07",X"07",X"00",X"00", - X"FF",X"FC",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"FC", - X"FF",X"6F",X"C7",X"07",X"0F",X"1F",X"3E",X"00",X"00",X"00",X"3E",X"1F",X"0F",X"07",X"C7",X"6F", - X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"79",X"00",X"F0",X"00",X"00",X"00",X"00",X"F8",X"00",X"F8",X"00",X"00",X"00",X"00",X"F0",X"00", - X"00",X"80",X"80",X"C0",X"E0",X"C0",X"80",X"80",X"00",X"80",X"80",X"C4",X"EE",X"C4",X"80",X"80", - X"00",X"80",X"80",X"CE",X"EE",X"CE",X"80",X"80",X"00",X"80",X"8E",X"DF",X"FF",X"DF",X"8E",X"80", - X"FE",X"88",X"88",X"90",X"E0",X"80",X"80",X"00",X"00",X"00",X"80",X"80",X"E0",X"90",X"88",X"88", - X"3F",X"08",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"08",X"08", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80", - X"03",X"0C",X"30",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"0C",X"30",X"C0", - X"0F",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"F0",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"0F",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"F0", - X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01",X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01", - X"00",X"00",X"00",X"00",X"C0",X"30",X"0C",X"03",X"C0",X"30",X"0C",X"03",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"0F",X"00",X"00",X"00",X"00",X"F0",X"0F",X"00",X"00", - X"00",X"00",X"F0",X"0F",X"00",X"00",X"00",X"00",X"F0",X"0F",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"C0",X"E0",X"C0",X"80",X"80",X"80",X"00",X"E0",X"C0",X"80",X"80",X"80",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"C0",X"00",X"00",X"80",X"80",X"80",X"C0",X"E0",X"C0", - X"80",X"80",X"80",X"C0",X"E0",X"C0",X"80",X"80",X"A0",X"F0",X"60",X"C0",X"80",X"80",X"80",X"00", - X"00",X"00",X"80",X"80",X"80",X"C0",X"60",X"F0",X"60",X"C0",X"80",X"80",X"80",X"00",X"00",X"00", - X"80",X"80",X"80",X"C0",X"60",X"F0",X"A0",X"F0",X"80",X"C0",X"60",X"F0",X"A0",X"F0",X"60",X"C0", - X"60",X"F0",X"A0",X"F0",X"60",X"C0",X"80",X"80",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"C0", - X"E0",X"70",X"78",X"EE",X"B8",X"EE",X"78",X"70",X"78",X"EE",X"B8",X"EE",X"78",X"70",X"E0",X"C0", - X"80",X"80",X"80",X"80",X"C0",X"C0",X"E0",X"70",X"B8",X"EE",X"78",X"70",X"E0",X"C0",X"C0",X"80", - X"80",X"80",X"C0",X"C0",X"E0",X"70",X"78",X"EE",X"78",X"70",X"E0",X"C0",X"C0",X"80",X"80",X"80", - X"C0",X"C0",X"E0",X"70",X"78",X"EE",X"B8",X"EE",X"70",X"5E",X"E0",X"E0",X"C0",X"C0",X"80",X"80", - X"00",X"80",X"80",X"C0",X"C0",X"E0",X"F0",X"5E",X"03",X"07",X"03",X"01",X"03",X"01",X"03",X"03", - X"03",X"03",X"03",X"01",X"03",X"01",X"03",X"07",X"7F",X"70",X"7F",X"D0",X"F8",X"E0",X"C0",X"80", - X"00",X"00",X"00",X"80",X"C0",X"E0",X"F8",X"D0",X"1E",X"0F",X"1E",X"0C",X"07",X"03",X"0F",X"07", - X"0E",X"07",X"0F",X"07",X"0F",X"03",X"07",X"0C",X"18",X"0C",X"18",X"0C",X"07",X"03",X"0F",X"07", - X"F0",X"FF",X"D0",X"F8",X"E0",X"C0",X"80",X"80",X"00",X"00",X"00",X"00",X"80",X"F0",X"A0",X"FE", - X"3C",X"1E",X"3C",X"1D",X"0F",X"07",X"0F",X"03",X"18",X"3C",X"1C",X"3E",X"1F",X"3F",X"0F",X"19", - X"F0",X"FE",X"A0",X"F0",X"80",X"00",X"00",X"00",X"80",X"80",X"80",X"C0",X"E0",X"F8",X"D0",X"FF", - X"3C",X"19",X"0F",X"3F",X"1F",X"3E",X"1C",X"3C",X"07",X"03",X"0F",X"07",X"0F",X"1D",X"3C",X"1E", - X"D0",X"F8",X"E0",X"C0",X"80",X"80",X"80",X"80",X"00",X"00",X"80",X"F0",X"A0",X"FE",X"F0",X"FF", - X"3C",X"1D",X"0F",X"07",X"0F",X"03",X"07",X"03",X"1C",X"3E",X"1F",X"3F",X"0F",X"19",X"3C",X"1E", - X"A0",X"F0",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"F8",X"D0",X"FF",X"F0",X"FE", - X"0F",X"3F",X"1F",X"3E",X"1C",X"3C",X"18",X"38",X"0F",X"07",X"0F",X"1D",X"3C",X"1E",X"3C",X"19", - X"80",X"F0",X"A0",X"FE",X"F0",X"FF",X"D0",X"F8",X"0F",X"07",X"0F",X"03",X"07",X"03",X"07",X"03", - X"1F",X"3F",X"0F",X"19",X"3C",X"1E",X"3C",X"1D",X"E0",X"F8",X"D0",X"FF",X"F0",X"FE",X"A0",X"F0", - X"1F",X"3E",X"1C",X"3C",X"18",X"38",X"30",X"70",X"0F",X"1D",X"3C",X"1E",X"3C",X"19",X"0F",X"3F", - X"A0",X"FE",X"F0",X"FF",X"D0",X"F8",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"F0", - X"0F",X"19",X"3C",X"1E",X"3C",X"1D",X"0F",X"07",X"30",X"38",X"18",X"3C",X"1C",X"3E",X"1F",X"3F", - X"D0",X"FF",X"F0",X"FE",X"A0",X"F0",X"80",X"00",X"80",X"80",X"80",X"80",X"80",X"C0",X"E0",X"F8", - X"3C",X"1E",X"3C",X"19",X"0F",X"3F",X"1F",X"3E",X"07",X"03",X"07",X"03",X"0F",X"07",X"0F",X"1D", - X"30",X"B0",X"E0",X"E0",X"C0",X"E0",X"F8",X"D0",X"90",X"A0",X"F0",X"E0",X"E0",X"E0",X"F8",X"D0", - X"A4",X"EC",X"C8",X"90",X"AC",X"08",X"98",X"50",X"C4",X"8C",X"A8",X"14",X"3C",X"64",X"5C",X"98", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"02",X"06",X"06",X"0A",X"0A",X"12",X"34",X"08",X"0A",X"0F",X"0F",X"0E",X"0E",X"0E",X"06", - X"03",X"07",X"0D",X"2A",X"3A",X"3A",X"76",X"D6",X"08",X"09",X"0E",X"0F",X"0F",X"0E",X"0C",X"06", - X"48",X"6C",X"3C",X"1C",X"1E",X"0E",X"06",X"02",X"00",X"80",X"80",X"60",X"30",X"98",X"90",X"D8", - X"8E",X"C6",X"44",X"56",X"72",X"2A",X"0B",X"06",X"00",X"80",X"E0",X"A0",X"B8",X"1C",X"1C",X"08", - X"0A",X"01",X"0C",X"04",X"0E",X"0E",X"0D",X"0C",X"0E",X"07",X"09",X"00",X"08",X"0C",X"0D",X"0F", - X"03",X"03",X"03",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"03",X"03", - X"0C",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"0F",X"07",X"0E",X"06",X"0E",X"0C",X"0C",X"0C", - X"08",X"08",X"0C",X"0C",X"0C",X"0C",X"0E",X"06",X"80",X"C0",X"C0",X"C0",X"60",X"60",X"60",X"70", - X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"07",X"03",X"07",X"03",X"03",X"03",X"03",X"03", - X"C0",X"C0",X"60",X"60",X"60",X"70",X"30",X"38",X"C0",X"C0",X"80",X"80",X"80",X"00",X"00",X"00", - X"18",X"38",X"30",X"70",X"60",X"60",X"60",X"C0",X"03",X"03",X"03",X"03",X"03",X"03",X"07",X"03", - X"00",X"01",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"00",X"00", - X"60",X"60",X"60",X"70",X"30",X"38",X"18",X"3C",X"30",X"70",X"60",X"60",X"60",X"C0",X"C0",X"C0", - X"03",X"03",X"03",X"03",X"07",X"03",X"07",X"03",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"03", - X"03",X"03",X"03",X"03",X"03",X"01",X"01",X"01",X"60",X"70",X"30",X"38",X"18",X"3C",X"1C",X"3E", - X"80",X"80",X"80",X"C0",X"C0",X"C0",X"60",X"60",X"60",X"60",X"60",X"C0",X"C0",X"C0",X"80",X"80", - X"03",X"03",X"07",X"03",X"07",X"03",X"0F",X"07",X"01",X"01",X"03",X"03",X"03",X"03",X"03",X"03", - X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"0F",X"03",X"07",X"03",X"07",X"03",X"03",X"03", - X"00",X"00",X"00",X"08",X"08",X"08",X"08",X"08",X"1C",X"3C",X"18",X"38",X"30",X"70",X"60",X"60", - X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00", - X"80",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"E0",X"C0",X"C0",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80", - X"00",X"00",X"80",X"80",X"80",X"80",X"C0",X"C0",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_24.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_24.vhd deleted file mode 100644 index 06ee1c26..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_24.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity PROM_24 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of PROM_24 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"1C",X"9C",X"FE",X"FE",X"7E",X"1E",X"00", - X"00",X"78",X"7E",X"7F",X"7F",X"38",X"38",X"1C",X"20",X"10",X"88",X"C1",X"E1",X"70",X"38",X"1C", - X"00",X"00",X"20",X"90",X"48",X"24",X"90",X"48",X"0E",X"07",X"03",X"01",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"07",X"13",X"09",X"04",X"02",X"00",X"00", - X"10",X"00",X"80",X"C4",X"E2",X"71",X"38",X"1C",X"00",X"00",X"00",X"00",X"80",X"C0",X"60",X"30", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"0F",X"0F",X"0C",X"0F",X"07",X"07", - X"F0",X"F4",X"EC",X"FE",X"7E",X"1E",X"00",X"00",X"C0",X"C0",X"E0",X"00",X"E0",X"F0",X"C8",X"38", - X"07",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"03",X"03",X"03",X"07",X"07", - X"00",X"F0",X"E8",X"D8",X"B0",X"F0",X"70",X"30",X"00",X"30",X"70",X"F0",X"B8",X"D8",X"E8",X"F0", - X"07",X"07",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"07",X"07", - X"E0",X"E0",X"E0",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"E0",X"E0",X"E0", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"C0",X"00",X"00",X"F0",X"00",X"00",X"C0",X"00",X"00",X"00",X"10",X"18",X"10",X"00",X"00",X"00", - X"E0",X"78",X"00",X"F8",X"00",X"78",X"E0",X"00",X"0E",X"5E",X"0C",X"58",X"F8",X"F0",X"B0",X"80", - X"FE",X"F8",X"FC",X"FE",X"7E",X"3C",X"30",X"00",X"6F",X"DF",X"FE",X"FE",X"EE",X"CC",X"00",X"00", - X"37",X"7F",X"9E",X"78",X"FC",X"FC",X"B8",X"90",X"00",X"00",X"00",X"04",X"26",X"37",X"9F",X"FF", - X"00",X"00",X"00",X"02",X"04",X"29",X"0D",X"12",X"EF",X"7E",X"FE",X"FC",X"7C",X"30",X"00",X"00", - X"2E",X"7F",X"EF",X"FE",X"FA",X"78",X"30",X"00",X"02",X"07",X"17",X"3E",X"B8",X"FC",X"EC",X"40", - X"00",X"18",X"00",X"0C",X"2A",X"9D",X"95",X"EF",X"00",X"00",X"14",X"00",X"28",X"05",X"0F",X"3F", - X"00",X"00",X"00",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"50",X"50",X"03",X"FC",X"00",X"00",X"00",X"00",X"54",X"54",X"00",X"00",X"FF", - X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"00",X"54",X"54",X"00",X"54",X"54",X"00",X"FF",X"00",X"FF",X"FF",X"FF",X"00",X"00",X"00", - X"FF",X"00",X"00",X"00",X"2A",X"00",X"00",X"FF",X"04",X"04",X"06",X"06",X"07",X"07",X"FF",X"00", - X"F0",X"00",X"00",X"30",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"C0",X"00",X"30",X"00",X"00", - X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"3F",X"00",X"3F",X"00",X"00",X"00",X"01",X"00",X"00", - X"1F",X"F0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"F0", - X"7E",X"3F",X"FF",X"7F",X"7C",X"70",X"60",X"00",X"00",X"00",X"60",X"70",X"7C",X"7F",X"FF",X"3F", - X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00",X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00", - X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00",X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00", - X"F7",X"81",X"81",X"82",X"02",X"84",X"A8",X"E0",X"00",X"E0",X"98",X"84",X"02",X"82",X"81",X"81", - X"77",X"40",X"40",X"20",X"20",X"10",X"0C",X"03",X"00",X"03",X"0C",X"10",X"20",X"20",X"40",X"40", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"00", - X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"40",X"10",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"10",X"40",X"10",X"00",X"00",X"00",X"10",X"40",X"10",X"00",X"00", - X"00",X"10",X"40",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"16",X"40",X"16",X"00",X"00",X"00",X"16",X"40",X"16",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"16",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"96",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"80",X"00",X"00",X"96",X"40",X"96",X"80",X"AE",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"AE",X"00",X"04",X"00",X"00",X"02",X"00",X"02",X"00", - X"00",X"00",X"02",X"00",X"02",X"00",X"00",X"04",X"8F",X"80",X"8F",X"20",X"18",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"19",X"00",X"19",X"03",X"00",X"00",X"0C",X"00", - X"0C",X"00",X"0C",X"00",X"0C",X"00",X"00",X"03",X"17",X"03",X"17",X"03",X"00",X"00",X"0C",X"00", - X"00",X"0F",X"20",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"40",X"1E", - X"33",X"01",X"33",X"02",X"00",X"00",X"0C",X"00",X"00",X"30",X"00",X"30",X"00",X"30",X"00",X"06", - X"00",X"1E",X"40",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"0F", - X"33",X"06",X"00",X"30",X"00",X"30",X"00",X"30",X"06",X"00",X"0C",X"00",X"00",X"02",X"33",X"01", - X"20",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"40",X"1E",X"00",X"0F", - X"33",X"02",X"00",X"00",X"0C",X"00",X"06",X"00",X"00",X"30",X"00",X"30",X"00",X"06",X"33",X"01", - X"40",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"0F",X"00",X"1E", - X"00",X"30",X"00",X"30",X"00",X"30",X"00",X"00",X"0C",X"00",X"00",X"02",X"33",X"01",X"33",X"06", - X"00",X"30",X"40",X"1E",X"00",X"0F",X"20",X"18",X"00",X"00",X"0C",X"00",X"06",X"00",X"06",X"00", - X"00",X"30",X"00",X"06",X"33",X"01",X"33",X"02",X"00",X"18",X"20",X"0F",X"00",X"1E",X"40",X"30", - X"00",X"30",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"02",X"33",X"01",X"33",X"06",X"00",X"30", - X"40",X"1E",X"00",X"0F",X"20",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30", - X"00",X"06",X"33",X"01",X"33",X"02",X"00",X"00",X"00",X"00",X"00",X"30",X"00",X"30",X"00",X"30", - X"20",X"0F",X"00",X"1E",X"40",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18", - X"33",X"01",X"33",X"06",X"00",X"30",X"00",X"30",X"06",X"00",X"06",X"00",X"0C",X"00",X"00",X"02", - X"F0",X"F0",X"E0",X"E0",X"00",X"00",X"18",X"20",X"F0",X"E0",X"F0",X"60",X"60",X"00",X"18",X"20", - X"BC",X"FC",X"F8",X"F2",X"EC",X"F8",X"F8",X"F0",X"FC",X"FC",X"FC",X"F4",X"FC",X"FC",X"FC",X"F8", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"02",X"16",X"06",X"0E",X"0E",X"1E",X"3C",X"00",X"02",X"03",X"03",X"03",X"03",X"01",X"01", - X"03",X"07",X"4F",X"2E",X"3E",X"3E",X"7E",X"FE",X"00",X"01",X"03",X"03",X"03",X"03",X"03",X"01", - X"78",X"7C",X"3C",X"1C",X"1E",X"0E",X"26",X"02",X"00",X"80",X"80",X"E0",X"F0",X"F8",X"F4",X"F8", - X"FE",X"FE",X"73",X"7E",X"7E",X"AF",X"0F",X"06",X"00",X"80",X"E4",X"E0",X"F8",X"FC",X"FC",X"F8", - X"02",X"07",X"07",X"07",X"03",X"03",X"01",X"00",X"02",X"03",X"07",X"07",X"07",X"07",X"07",X"03", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"00",X"0C",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"00",X"06",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"06",X"00",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"00",X"30", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"06",X"00",X"06",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"00",X"06",X"00",X"06",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_39.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_39.vhd deleted file mode 100644 index 7c06d9b3..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_39.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity PROM_39 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of PROM_39 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7C",X"12",X"12",X"12",X"7E",X"7C",X"00", - X"00",X"34",X"4A",X"4A",X"4A",X"7E",X"7E",X"00",X"00",X"24",X"42",X"42",X"42",X"7E",X"3C",X"00", - X"00",X"3C",X"42",X"42",X"42",X"7E",X"7E",X"00",X"00",X"42",X"4A",X"4A",X"4A",X"7E",X"7E",X"00", - X"00",X"02",X"0A",X"0A",X"0A",X"7E",X"7E",X"00",X"00",X"34",X"52",X"52",X"42",X"7E",X"3C",X"00", - X"00",X"7E",X"08",X"08",X"08",X"7E",X"7E",X"00",X"00",X"42",X"42",X"7E",X"7E",X"42",X"42",X"00", - X"00",X"7E",X"7E",X"7E",X"40",X"40",X"30",X"00",X"00",X"42",X"24",X"18",X"08",X"7E",X"7E",X"00", - X"00",X"40",X"40",X"40",X"40",X"7E",X"7E",X"00",X"00",X"7E",X"02",X"7C",X"02",X"7E",X"7E",X"00", - X"00",X"7E",X"20",X"18",X"04",X"7E",X"7E",X"00",X"00",X"3C",X"42",X"42",X"42",X"7E",X"3C",X"00", - X"00",X"0C",X"12",X"12",X"12",X"7E",X"7E",X"00",X"00",X"40",X"3C",X"62",X"42",X"7E",X"3C",X"00", - X"00",X"44",X"2A",X"1A",X"0A",X"7E",X"7E",X"00",X"00",X"34",X"72",X"4A",X"4A",X"4E",X"2C",X"00", - X"00",X"02",X"02",X"7E",X"7E",X"02",X"02",X"00",X"00",X"3E",X"40",X"40",X"40",X"7E",X"7E",X"00", - X"00",X"1E",X"20",X"40",X"20",X"3E",X"1E",X"00",X"00",X"3E",X"40",X"38",X"40",X"7E",X"3E",X"00", - X"00",X"42",X"26",X"1C",X"38",X"74",X"62",X"00",X"00",X"06",X"08",X"70",X"08",X"0E",X"06",X"00", - X"00",X"42",X"46",X"4E",X"5A",X"72",X"62",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", - X"00",X"00",X"18",X"24",X"24",X"18",X"00",X"00",X"00",X"00",X"42",X"66",X"3C",X"18",X"00",X"00", - X"00",X"00",X"00",X"18",X"3C",X"66",X"42",X"00",X"00",X"00",X"24",X"18",X"7E",X"18",X"24",X"00", - X"00",X"00",X"3C",X"46",X"4A",X"52",X"3C",X"00",X"00",X"00",X"40",X"40",X"7E",X"42",X"44",X"00", - X"00",X"00",X"64",X"4A",X"52",X"62",X"44",X"00",X"00",X"00",X"34",X"4A",X"4A",X"4A",X"42",X"00", - X"00",X"00",X"08",X"7E",X"08",X"08",X"0E",X"00",X"00",X"00",X"30",X"4A",X"4A",X"4A",X"4E",X"00", - X"00",X"00",X"30",X"4A",X"4A",X"4A",X"3C",X"00",X"00",X"00",X"06",X"1A",X"32",X"62",X"06",X"00", - X"00",X"00",X"34",X"4A",X"4A",X"4A",X"34",X"00",X"00",X"00",X"3C",X"52",X"52",X"52",X"0C",X"00", - X"00",X"00",X"60",X"F8",X"FF",X"F8",X"60",X"00",X"00",X"00",X"08",X"08",X"08",X"08",X"08",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"3C",X"66",X"66",X"3C",X"18",X"00", - X"00",X"3C",X"42",X"5A",X"5A",X"42",X"3C",X"00",X"00",X"00",X"06",X"09",X"51",X"01",X"02",X"00", - X"FC",X"E0",X"70",X"38",X"1C",X"3E",X"00",X"00",X"00",X"3E",X"1C",X"38",X"70",X"E0",X"FC",X"9F", - X"E0",X"70",X"38",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"38",X"70",X"E0",X"FC",X"9F",X"FC", - X"70",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"70",X"E0",X"FC",X"9F",X"FC",X"E0", - X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"70",X"E0",X"FC",X"9F",X"FC",X"E0",X"70", - X"70",X"E0",X"FC",X"9F",X"FC",X"E0",X"70",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8", - X"E0",X"FC",X"9F",X"FC",X"E0",X"70",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"70", - X"FC",X"9F",X"FC",X"E0",X"70",X"38",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"38",X"70",X"E0", - X"9F",X"FC",X"E0",X"70",X"38",X"1C",X"3E",X"00",X"00",X"00",X"3E",X"1C",X"38",X"70",X"E0",X"FC", - X"7F",X"C7",X"0E",X"1C",X"38",X"70",X"FC",X"00",X"FC",X"70",X"38",X"1C",X"0E",X"C7",X"7F",X"E3", - X"CE",X"1C",X"38",X"70",X"FC",X"00",X"00",X"00",X"FC",X"70",X"38",X"1C",X"CE",X"7F",X"E3",X"7F", - X"3C",X"78",X"FC",X"00",X"00",X"00",X"00",X"00",X"FC",X"78",X"3C",X"DE",X"7F",X"E3",X"7F",X"DE", - X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"78",X"FC",X"7F",X"E3",X"7F",X"FC",X"78", - X"78",X"FC",X"7F",X"E3",X"7F",X"FC",X"78",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC", - X"DE",X"7F",X"E3",X"7F",X"DE",X"3C",X"78",X"FC",X"00",X"00",X"00",X"00",X"00",X"FC",X"78",X"3C", - X"7F",X"E3",X"7F",X"CE",X"1C",X"38",X"70",X"FC",X"00",X"00",X"00",X"FC",X"70",X"38",X"1C",X"CE", - X"E3",X"7F",X"C7",X"0E",X"1C",X"38",X"70",X"FC",X"00",X"FC",X"70",X"38",X"1C",X"0E",X"C7",X"7F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00", - X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00", - X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00", - X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"00",X"03",X"0E",X"03",X"00", - X"00",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"03",X"0E",X"03",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"30",X"E0",X"30",X"00", - X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"30",X"E0",X"30",X"00",X"00",X"00",X"00",X"00", - X"03",X"03",X"FF",X"FF",X"03",X"03",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E", - X"FF",X"FF",X"03",X"03",X"07",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"03",X"03", - X"03",X"03",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"03",X"03",X"FF",X"FF", - X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"03",X"03",X"FF",X"FF",X"03",X"03", - X"0C",X"0C",X"FC",X"FC",X"0C",X"0C",X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38", - X"FC",X"FC",X"0C",X"0C",X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"0C", - X"0C",X"0C",X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"0C",X"FC",X"FC", - X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"0C",X"FC",X"FC",X"0C",X"0C", - X"06",X"0F",X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C", - X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F", - X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F", - X"07",X"05",X"02",X"02",X"02",X"07",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F",X"0F",X"06", - X"00",X"18",X"3F",X"3F",X"18",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03", - X"3F",X"3F",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18", - X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"3F",X"3F", - X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"18",X"3F",X"3F",X"18",X"00", - X"30",X"30",X"F0",X"F0",X"30",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0", - X"F0",X"F0",X"30",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"30", - X"30",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"30",X"F0",X"F0", - X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"30",X"F0",X"F0",X"30",X"30", - X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80", - X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0", - X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0", - X"00",X"00",X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7B",X"87", - X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"09",X"01",X"01",X"09",X"0E",X"00",X"00", - X"22",X"22",X"03",X"03",X"22",X"22",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"7F", - X"04",X"08",X"0F",X"0F",X"08",X"84",X"87",X"7B",X"00",X"00",X"00",X"00",X"7F",X"7F",X"00",X"00", - X"00",X"00",X"FF",X"FF",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03", - X"FF",X"FF",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00", - X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"FF",X"FF", - X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"FF",X"FF",X"00",X"00", - X"78",X"7C",X"7C",X"7C",X"7C",X"78",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30", - X"7C",X"7C",X"7C",X"78",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"78",X"7C", - X"7C",X"78",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"78",X"7C",X"7C",X"7C", - X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"78",X"7C",X"7C",X"7C",X"7C",X"78", - X"E0",X"F0",X"F0",X"F0",X"F0",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0", - X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0", - X"F0",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"F0",X"F0", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"80", - X"1E",X"1F",X"1F",X"1F",X"1F",X"1E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C", - X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0", - X"07",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"07",X"07",X"07",X"07", - X"00",X"00",X"08",X"04",X"08",X"14",X"08",X"00",X"00",X"00",X"08",X"26",X"10",X"26",X"0C",X"00", - X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"2C",X"00",X"4D",X"20",X"14",X"00", - X"07",X"07",X"07",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"07",X"07", - X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01", - X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"07",X"07",X"07",X"07",X"07",X"07", - X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E", - X"0F",X"0F",X"0F",X"0F",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"0F",X"0F", - X"1F",X"1F",X"1E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"1E",X"1F",X"1F",X"1F",X"1F", - X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"14",X"20",X"05",X"2A",X"00",X"32",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"8C",X"C2",X"C0",X"F0",X"3A",X"38",X"0C",X"46",X"0C",X"80",X"FC",X"FF",X"F0",X"82",X"F0",X"38", - X"05",X"1C",X"78",X"F2",X"F0",X"C4",X"98",X"72",X"3F",X"3D",X"2D",X"66",X"26",X"43",X"12",X"20", - X"3B",X"3B",X"75",X"EE",X"F5",X"3B",X"7B",X"9F",X"20",X"09",X"2C",X"84",X"44",X"ED",X"6D",X"7F", - X"E2",X"80",X"0C",X"1E",X"1E",X"8C",X"00",X"00",X"F8",X"78",X"B0",X"60",X"F3",X"DB",X"D8",X"30", - X"0C",X"1E",X"0C",X"80",X"C0",X"C0",X"64",X"B2",X"77",X"27",X"03",X"20",X"00",X"08",X"1C",X"08", - X"EF",X"F9",X"77",X"37",X"7C",X"DF",X"EB",X"7D",X"20",X"41",X"04",X"31",X"7B",X"71",X"33",X"6F", - X"00",X"00",X"04",X"00",X"24",X"0E",X"04",X"00",X"00",X"06",X"16",X"00",X"02",X"00",X"00",X"00", - X"00",X"00",X"40",X"00",X"00",X"68",X"00",X"00",X"00",X"60",X"F4",X"60",X"00",X"20",X"00",X"00", - X"B8",X"FC",X"4C",X"F8",X"F0",X"C8",X"C0",X"80",X"FC",X"3E",X"D6",X"DB",X"FB",X"F7",X"FE",X"DC", - X"C0",X"E8",X"E0",X"70",X"F8",X"F4",X"2C",X"F8",X"9F",X"BF",X"77",X"F7",X"E6",X"FC",X"F0",X"E2", - X"C0",X"E2",X"B8",X"9E",X"E7",X"97",X"D7",X"DF",X"E3",X"F3",X"7E",X"1E",X"0C",X"00",X"30",X"30", - X"00",X"C2",X"C0",X"18",X"3C",X"3E",X"62",X"C3",X"EB",X"FF",X"5F",X"DD",X"C3",X"B2",X"BE",X"1C", - X"1C",X"BD",X"E7",X"E3",X"D9",X"FD",X"FF",X"CF",X"30",X"FC",X"BE",X"3E",X"6E",X"DC",X"70",X"E0", - X"7E",X"77",X"B7",X"B7",X"77",X"EF",X"BE",X"BC",X"B0",X"E8",X"3C",X"9E",X"EE",X"EC",X"E8",X"FC", - X"7C",X"CF",X"F7",X"FE",X"6E",X"0F",X"0F",X"06",X"1F",X"7D",X"FB",X"B7",X"F3",X"D9",X"6F",X"3F", - X"0F",X"07",X"1C",X"7D",X"6B",X"3F",X"7F",X"3F",X"00",X"00",X"00",X"02",X"10",X"00",X"2E",X"0F", - X"6F",X"37",X"1F",X"14",X"0F",X"2F",X"07",X"03",X"37",X"7E",X"DF",X"DB",X"DB",X"69",X"3C",X"6F", - X"03",X"03",X"2B",X"1E",X"1E",X"25",X"3F",X"3B",X"F3",X"F3",X"F9",X"DF",X"6F",X"27",X"9F",X"0F", - X"0F",X"1F",X"3F",X"67",X"ED",X"D9",X"DB",X"FB",X"03",X"6E",X"F3",X"E7",X"F1",X"FE",X"1F",X"03", - X"B1",X"59",X"0C",X"24",X"02",X"00",X"00",X"00",X"77",X"CF",X"BB",X"80",X"EF",X"77",X"FA",X"3E", - X"01",X"00",X"02",X"04",X"7D",X"59",X"B7",X"FE",X"CB",X"F7",X"FF",X"FF",X"6C",X"9F",X"F3",X"7C", - X"6E",X"7F",X"07",X"FB",X"FD",X"BD",X"9F",X"DF",X"FF",X"FF",X"FE",X"63",X"CB",X"9D",X"FF",X"F3", - X"3C",X"FE",X"CF",X"BD",X"BD",X"F3",X"7E",X"18",X"19",X"3C",X"7E",X"5E",X"66",X"7E",X"9C",X"00", - X"06",X"00",X"78",X"7C",X"65",X"3C",X"00",X"02",X"00",X"01",X"18",X"3C",X"3C",X"18",X"02",X"40"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_40.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_40.vhd deleted file mode 100644 index 52556fce..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/PROM_40.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity PROM_40 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of PROM_40 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"18",X"7E",X"18",X"24",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"F0",X"00",X"00",X"1F",X"00",X"00",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", - X"00",X"00",X"3C",X"3C",X"3C",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", - X"00",X"00",X"26",X"05",X"2A",X"A4",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", - X"00",X"40",X"B4",X"19",X"85",X"52",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00", - X"8D",X"17",X"00",X"44",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"08",X"04",X"40",X"0B",X"06", - X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"57",X"A2",X"4C",X"04",X"10",X"00",X"00",X"00", - X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"04",X"0C",X"02",X"52",X"BD", - X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"C3", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"C3",X"00", - X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"C3",X"00",X"00", - X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"C3",X"00",X"00",X"00", - X"00",X"00",X"00",X"C3",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", - X"00",X"00",X"C3",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00", - X"00",X"C3",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"C3",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", - X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00", - X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"03",X"0E",X"03",X"00",X"00",X"00",X"00",X"00",X"0E",X"00",X"00", - X"00",X"00",X"03",X"0E",X"03",X"00",X"00",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"30",X"E0",X"30",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00", - X"00",X"00",X"30",X"E0",X"30",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", - X"0C",X"0C",X"80",X"80",X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"80",X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0C", - X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0C",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0C",X"80",X"80",X"0C",X"0C", - X"30",X"30",X"00",X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30", - X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00",X"30",X"30", - X"06",X"0F",X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C", - X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F", - X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F", - X"07",X"05",X"02",X"02",X"05",X"07",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F",X"0F",X"06", - X"00",X"18",X"3C",X"3C",X"18",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03",X"00",X"00", - X"3C",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18", - X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"3C",X"3C", - X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"18",X"3C",X"3C",X"18",X"00", - X"C0",X"C0",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0", - X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"C0",X"C0", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"84", - X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"09",X"01",X"01",X"09",X"0E",X"00",X"00", - X"22",X"22",X"02",X"02",X"22",X"22",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60", - X"07",X"0B",X"08",X"08",X"0B",X"87",X"84",X"78",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"00", - X"03",X"03",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03", - X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03", - X"00",X"30",X"00",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"82",X"82",X"B2",X"84",X"48",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"48",X"84",X"B2", - X"B3",X"86",X"CC",X"78",X"30",X"00",X"00",X"00",X"00",X"30",X"78",X"CC",X"86",X"B3",X"83",X"83", - X"48",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"48",X"84",X"82",X"82",X"82",X"82",X"84", - X"00",X"C0",X"00",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", - X"CC",X"18",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"18",X"CC",X"0C",X"0C", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20",X"20",X"20",X"20",X"40", - X"00",X"0C",X"00",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"30",X"60",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"60",X"30",X"30",X"30", - X"0B",X"08",X"0C",X"07",X"03",X"00",X"00",X"00",X"00",X"03",X"07",X"0C",X"08",X"0B",X"08",X"08", - X"00",X"00",X"08",X"10",X"22",X"14",X"00",X"00",X"00",X"00",X"1C",X"22",X"2A",X"02",X"14",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"08",X"12",X"69",X"2A",X"04",X"08", - X"08",X"08",X"0B",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"08",X"0B", - X"06",X"06",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"06",X"06",X"06",X"06", - X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"08",X"0B",X"08",X"08",X"0B",X"08", - X"8C",X"6C",X"10",X"10",X"6C",X"8C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"10",X"10",X"2C",X"4C",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"6C", - X"4C",X"8C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"4C",X"20",X"20", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"4C",X"2C",X"10",X"10",X"6C",X"8C", - X"E3",X"00",X"00",X"00",X"00",X"E3",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C", - X"E0",X"00",X"10",X"10",X"08",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"1C", - X"CC",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"CC",X"30",X"30", - X"00",X"10",X"0A",X"55",X"02",X"55",X"22",X"08",X"07",X"08",X"10",X"10",X"00",X"E0",X"1C",X"03", - X"00",X"80",X"40",X"20",X"10",X"08",X"44",X"00",X"04",X"00",X"80",X"EA",X"80",X"01",X"A0",X"10", - X"44",X"00",X"10",X"62",X"C0",X"80",X"08",X"20",X"12",X"09",X"20",X"04",X"80",X"42",X"00",X"20", - X"97",X"15",X"0A",X"51",X"1B",X"24",X"0E",X"0B",X"24",X"80",X"28",X"80",X"04",X"04",X"01",X"2A", - X"00",X"10",X"00",X"4C",X"0C",X"00",X"00",X"20",X"80",X"C0",X"42",X"80",X"21",X"62",X"E0",X"C0", - X"00",X"4C",X"01",X"00",X"08",X"00",X"84",X"C0",X"00",X"00",X"00",X"20",X"02",X"40",X"08",X"00", - X"06",X"0E",X"18",X"98",X"03",X"20",X"14",X"02",X"08",X"40",X"04",X"00",X"00",X"09",X"1C",X"30", - X"00",X"00",X"04",X"00",X"04",X"0E",X"14",X"00",X"00",X"10",X"00",X"02",X"00",X"00",X"00",X"00", - X"00",X"00",X"40",X"10",X"00",X"68",X"60",X"00",X"04",X"00",X"00",X"08",X"80",X"00",X"00",X"00", - X"48",X"18",X"30",X"00",X"00",X"10",X"40",X"00",X"00",X"C0",X"E8",X"2C",X"0C",X"18",X"00",X"00", - X"00",X"20",X"80",X"C0",X"00",X"DA",X"D0",X"80",X"20",X"C0",X"88",X"18",X"38",X"30",X"00",X"00", - X"00",X"00",X"40",X"70",X"18",X"68",X"28",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30", - X"00",X"C0",X"40",X"00",X"00",X"00",X"00",X"18",X"14",X"A0",X"B0",X"3A",X"3C",X"1C",X"00",X"00", - X"00",X"00",X"18",X"3C",X"36",X"62",X"00",X"00",X"20",X"60",X"60",X"E0",X"D0",X"20",X"80",X"00", - X"80",X"8C",X"4C",X"4C",X"8C",X"18",X"40",X"40",X"00",X"80",X"E0",X"60",X"30",X"30",X"10",X"00", - X"33",X"3C",X"0C",X"01",X"01",X"00",X"20",X"80",X"00",X"02",X"06",X"4C",X"0E",X"27",X"10",X"00", - X"40",X"00",X"83",X"03",X"16",X"24",X"00",X"00",X"00",X"68",X"60",X"02",X"10",X"00",X"00",X"00", - X"1C",X"1E",X"00",X"03",X"00",X"00",X"10",X"00",X"08",X"00",X"24",X"26",X"26",X"17",X"03",X"00", - X"00",X"02",X"00",X"01",X"01",X"1A",X"10",X"04",X"0C",X"0E",X"27",X"20",X"30",X"18",X"80",X"40", - X"00",X"40",X"00",X"18",X"1A",X"26",X"2C",X"0C",X"01",X"1E",X"3F",X"3E",X"1F",X"0F",X"02",X"01", - X"20",X"10",X"08",X"24",X"00",X"41",X"00",X"00",X"0E",X"39",X"FC",X"FF",X"3B",X"28",X"98",X"22", - X"01",X"00",X"02",X"00",X"08",X"40",X"31",X"CE",X"76",X"3C",X"08",X"00",X"93",X"60",X"0C",X"03", - X"11",X"00",X"38",X"04",X"02",X"40",X"E0",X"60",X"00",X"18",X"21",X"9C",X"34",X"62",X"00",X"0C", - X"00",X"00",X"30",X"46",X"4E",X"1C",X"00",X"00",X"00",X"00",X"00",X"30",X"1C",X"00",X"81",X"00", - X"20",X"00",X"00",X"30",X"19",X"00",X"40",X"00",X"00",X"01",X"00",X"98",X"18",X"00",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/col_h.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/col_h.vhd deleted file mode 100644 index c55e597e..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/col_h.vhd +++ /dev/null @@ -1,30 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity col_h is -port ( - clk : in std_logic; - addr : in std_logic_vector(6 downto 0); - data : out std_logic_vector(3 downto 0) -); -end entity; - -architecture prom of col_h is - type rom is array(0 to 127) of std_logic_vector(3 downto 0); - signal rom_data: rom := ( - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0110","0101","0011","0101","0110","0110","0110", - "0001","0011","0011","0110","0010","0011","0011","0011","0111","0101","0101","0011","0111","0101","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0110","0001","0001","0011","0011","0011","0001","0100", - "0110","0101","0101","0111","0111","0111","0111","0011","0110","0111","0111","0101","0101","0101","0011","0111", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0101","0011","0011","0011","0011","0011", - "0001","0011","0011","0110","0110","0110","0110","0110","0101","0101","0101","0011","0101","0101","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0110","0001","0001","0100","0100","0100","0011","0100", - "0110","0101","0101","0101","0101","0101","0111","0011","0101","0111","0111","0111","0111","0111","0101","0111"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/col_l.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/col_l.vhd deleted file mode 100644 index 9c6aa0b0..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/col_l.vhd +++ /dev/null @@ -1,30 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity col_l is -port ( - clk : in std_logic; - addr : in std_logic_vector(6 downto 0); - data : out std_logic_vector(3 downto 0) -); -end entity; - -architecture prom of col_l is - type rom is array(0 to 127) of std_logic_vector(3 downto 0); - signal rom_data: rom := ( - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0100","0010","0101","0010","0010","0010", - "0000","0001","0010","0000","0010","0001","0001","0001","0000","0001","0001","0001","0110","0100","0100","0100", - "0000","0000","0000","0000","0000","0000","0000","0000","0100","0001","0001","0011","0011","0011","0001","0000", - "0010","0101","0101","0001","0001","0001","0111","0000","0110","0111","0111","0101","0101","0101","0011","0111", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0100","0010","0001","0001","0001","0001", - "0000","0001","0010","0000","0010","0010","0010","0010","0000","0001","0001","0001","0100","0100","0100","0100", - "0000","0000","0000","0000","0000","0000","0000","0000","0100","0001","0001","0100","0100","0100","0011","0100", - "0010","0101","0101","0101","0101","0101","0111","0000","0101","0111","0111","0011","0011","0011","0101","0111"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/prog.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/prog.vhd deleted file mode 100644 index 22b795bf..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/ROM/prog.vhd +++ /dev/null @@ -1,1046 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prog is -port ( - clk : in std_logic; - addr : in std_logic_vector(13 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of prog is - type rom is array(0 to 16383) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"06",X"00",X"21",X"00",X"00",X"C3",X"10",X"08",X"31",X"FF",X"4B",X"26",X"50",X"36",X"00",X"CD", - X"50",X"00",X"21",X"00",X"18",X"0E",X"03",X"CD",X"D0",X"01",X"CD",X"80",X"00",X"3A",X"A2",X"43", - X"A7",X"CA",X"2D",X"00",X"CD",X"00",X"04",X"CD",X"00",X"27",X"C3",X"1A",X"00",X"3A",X"00",X"78", - X"E6",X"40",X"CA",X"E0",X"03",X"CD",X"40",X"27",X"00",X"CD",X"60",X"17",X"A7",X"CA",X"46",X"00", - X"CD",X"88",X"02",X"C3",X"1A",X"00",X"CD",X"E3",X"00",X"C3",X"1A",X"00",X"BF",X"E6",X"00",X"87", - X"26",X"68",X"36",X"00",X"26",X"60",X"36",X"00",X"26",X"58",X"36",X"00",X"CD",X"6B",X"00",X"26", - X"50",X"36",X"01",X"CD",X"6B",X"00",X"26",X"50",X"36",X"00",X"C9",X"21",X"F8",X"4B",X"3E",X"3F", - X"36",X"00",X"2B",X"BC",X"C2",X"70",X"00",X"C9",X"CD",X"00",X"08",X"C3",X"BC",X"06",X"FF",X"FF", - X"26",X"78",X"7E",X"E6",X"80",X"CA",X"80",X"00",X"7E",X"E6",X"80",X"C2",X"88",X"00",X"26",X"70", - X"7E",X"21",X"A0",X"43",X"46",X"77",X"2C",X"70",X"2E",X"9B",X"CD",X"00",X"02",X"2E",X"8F",X"7E", - X"FE",X"09",X"C8",X"D2",X"00",X"00",X"06",X"01",X"CD",X"BB",X"00",X"C8",X"2E",X"8F",X"34",X"7E", - X"C6",X"20",X"32",X"42",X"41",X"C9",X"00",X"C9",X"00",X"C9",X"FF",X"21",X"A0",X"43",X"7E",X"2F", - X"A0",X"2C",X"A6",X"C9",X"7E",X"E6",X"0F",X"F6",X"20",X"12",X"CD",X"10",X"02",X"05",X"C8",X"7E", - X"0F",X"0F",X"0F",X"0F",X"E6",X"0F",X"F6",X"20",X"12",X"CD",X"10",X"02",X"2B",X"05",X"C2",X"C4", - X"00",X"C9",X"FF",X"21",X"99",X"43",X"CD",X"00",X"02",X"01",X"01",X"00",X"CD",X"58",X"02",X"CA", - X"E1",X"01",X"01",X"02",X"00",X"11",X"1F",X"01",X"CD",X"60",X"02",X"D2",X"96",X"01",X"01",X"20", - X"01",X"CD",X"58",X"02",X"CA",X"88",X"06",X"0E",X"B0",X"CD",X"58",X"02",X"CA",X"E1",X"01",X"0E", - X"C0",X"11",X"E0",X"01",X"CD",X"60",X"02",X"D2",X"0C",X"1B",X"01",X"00",X"02",X"11",X"C0",X"03", - X"CD",X"60",X"02",X"D2",X"D0",X"1A",X"01",X"00",X"04",X"11",X"AF",X"04",X"CD",X"60",X"02",X"D2", - X"C0",X"03",X"01",X"E6",X"04",X"11",X"FF",X"FF",X"CD",X"60",X"02",X"D2",X"B0",X"03",X"C9",X"FF", - X"CD",X"A0",X"03",X"CD",X"80",X"00",X"CD",X"80",X"03",X"21",X"A3",X"43",X"36",X"02",X"2C",X"36", - X"00",X"00",X"00",X"00",X"2E",X"B8",X"06",X"08",X"CD",X"D8",X"05",X"2E",X"BA",X"36",X"10",X"2E", - X"BE",X"3A",X"00",X"78",X"E6",X"0C",X"07",X"07",X"C6",X"30",X"77",X"26",X"58",X"36",X"00",X"CD", - X"80",X"00",X"C9",X"7E",X"E6",X"7F",X"06",X"CE",X"FE",X"1F",X"D8",X"06",X"FE",X"C8",X"06",X"AE", - X"FE",X"5F",X"D8",X"06",X"FE",X"C8",X"06",X"CE",X"FE",X"7F",X"D8",X"06",X"FE",X"2D",X"7E",X"FE", - X"09",X"C0",X"06",X"7E",X"C9",X"FF",X"7E",X"E6",X"1F",X"FE",X"06",X"D8",X"5F",X"7E",X"E6",X"E0", - X"4F",X"2D",X"46",X"2E",X"A8",X"70",X"2C",X"71",X"01",X"60",X"18",X"CD",X"06",X"02",X"7E",X"2D", - X"66",X"6F",X"7B",X"56",X"2C",X"5E",X"2D",X"4F",X"85",X"6F",X"79",X"D6",X"06",X"4F",X"CA",X"C8", - X"01",X"CD",X"17",X"02",X"0D",X"C2",X"C1",X"01",X"7E",X"12",X"C3",X"40",X"17",X"C2",X"C0",X"01", - X"56",X"2C",X"5E",X"7D",X"C6",X"05",X"6F",X"06",X"1A",X"CD",X"ED",X"01",X"0D",X"C2",X"D0",X"01", - X"C9",X"CD",X"40",X"01",X"21",X"60",X"19",X"0E",X"03",X"C3",X"D0",X"01",X"FF",X"7E",X"12",X"23", - X"CD",X"17",X"02",X"05",X"C2",X"ED",X"01",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"34",X"C0",X"2D",X"34",X"2C",X"C9",X"7E",X"81",X"77",X"2D",X"7E",X"88",X"77",X"2C",X"C9",X"FF", - X"7B",X"C6",X"20",X"5F",X"D0",X"14",X"C9",X"7B",X"D6",X"20",X"5F",X"D0",X"15",X"C9",X"FF",X"FF", - X"AF",X"7E",X"81",X"27",X"77",X"2D",X"7E",X"88",X"27",X"77",X"2D",X"7E",X"CE",X"00",X"27",X"77", - X"2C",X"2C",X"C9",X"FF",X"FF",X"FF",X"37",X"3E",X"99",X"CE",X"00",X"91",X"86",X"27",X"77",X"2D", - X"3E",X"99",X"CE",X"00",X"90",X"86",X"27",X"77",X"2D",X"3E",X"99",X"CE",X"00",X"86",X"27",X"77", - X"2C",X"2C",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"7E",X"B9",X"C0",X"2D",X"7E",X"2C",X"B8",X"C9", - X"CD",X"70",X"02",X"D8",X"CD",X"77",X"02",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"7E",X"91",X"2D",X"7E",X"98",X"2C",X"C9",X"7B",X"96",X"2D",X"7A",X"9E",X"2C",X"C9",X"FF",X"FF", - X"7D",X"B9",X"C0",X"7C",X"B8",X"C9",X"FF",X"FF",X"CD",X"40",X"01",X"21",X"C0",X"19",X"0E",X"02", - X"CD",X"D0",X"01",X"0E",X"02",X"CD",X"60",X"17",X"FE",X"02",X"DA",X"A7",X"02",X"21",X"A0",X"1B", - X"0E",X"01",X"CD",X"D0",X"01",X"0E",X"06",X"3A",X"00",X"70",X"2F",X"A1",X"C8",X"CD",X"CB",X"02", - X"CD",X"F0",X"02",X"CD",X"2E",X"03",X"CD",X"50",X"03",X"CD",X"40",X"01",X"26",X"50",X"36",X"01", - X"CD",X"40",X"01",X"26",X"50",X"36",X"00",X"C9",X"FF",X"FF",X"FF",X"0E",X"01",X"FE",X"02",X"CA", - X"D4",X"02",X"0E",X"02",X"21",X"A2",X"43",X"71",X"3A",X"00",X"78",X"E6",X"10",X"CA",X"E3",X"02", - X"79",X"07",X"4F",X"2E",X"8F",X"7E",X"91",X"77",X"C6",X"20",X"32",X"42",X"41",X"C9",X"FF",X"FF", - X"11",X"83",X"43",X"21",X"8B",X"43",X"CD",X"14",X"03",X"D4",X"20",X"03",X"1E",X"87",X"2E",X"FF", - X"CD",X"14",X"03",X"D4",X"20",X"03",X"2E",X"8B",X"11",X"41",X"41",X"06",X"06",X"CD",X"C4",X"00", - X"C9",X"FF",X"FF",X"FF",X"1A",X"96",X"1D",X"2D",X"1A",X"9E",X"1D",X"2D",X"1A",X"9E",X"C9",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23",X"1A",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"80", - X"43",X"36",X"00",X"23",X"7D",X"FE",X"88",X"C2",X"31",X"03",X"2E",X"83",X"11",X"61",X"42",X"06", - X"06",X"CD",X"C4",X"00",X"2E",X"87",X"11",X"21",X"40",X"06",X"06",X"CD",X"C4",X"00",X"C9",X"FF", - X"3A",X"00",X"78",X"E6",X"03",X"C6",X"03",X"47",X"21",X"90",X"43",X"70",X"2E",X"A2",X"7E",X"FE", - X"01",X"CA",X"67",X"03",X"2E",X"91",X"70",X"2E",X"90",X"7E",X"F6",X"20",X"32",X"A2",X"42",X"2C", - X"7E",X"F6",X"20",X"32",X"62",X"40",X"C9",X"21",X"8C",X"43",X"77",X"2C",X"77",X"C9",X"FF",X"FF", - X"21",X"3F",X"43",X"11",X"1F",X"00",X"01",X"3F",X"03",X"72",X"2B",X"72",X"2B",X"7D",X"A3",X"B8", - X"C2",X"89",X"03",X"72",X"2B",X"2B",X"2B",X"2B",X"7C",X"B9",X"C2",X"89",X"03",X"C9",X"FF",X"FF", - X"21",X"3F",X"4B",X"11",X"47",X"00",X"72",X"2B",X"72",X"2B",X"7C",X"BB",X"C2",X"A6",X"03",X"C9", - X"CD",X"73",X"01",X"21",X"A0",X"43",X"7E",X"E6",X"01",X"B0",X"77",X"C3",X"00",X"04",X"FF",X"FF", - X"7E",X"0F",X"E6",X"1C",X"FE",X"10",X"DA",X"CC",X"03",X"2F",X"E6",X"0C",X"F6",X"20",X"6F",X"26", - X"14",X"11",X"52",X"42",X"E5",X"CD",X"DC",X"07",X"E1",X"11",X"32",X"41",X"C3",X"DC",X"07",X"FF", - X"3E",X"0F",X"21",X"8C",X"43",X"77",X"32",X"00",X"60",X"3E",X"8F",X"2C",X"77",X"32",X"00",X"68", - X"3E",X"7F",X"30",X"C3",X"38",X"00",X"2E",X"BA",X"72",X"2C",X"73",X"C3",X"80",X"03",X"80",X"FF", - X"21",X"0E",X"04",X"3A",X"A4",X"43",X"07",X"85",X"6F",X"7E",X"2C",X"6E",X"67",X"E9",X"04",X"30", - X"04",X"AC",X"05",X"10",X"00",X"78",X"0A",X"EA",X"0B",X"60",X"24",X"00",X"05",X"D0",X"FF",X"FF", - X"04",X"04",X"00",X"00",X"06",X"02",X"04",X"00",X"06",X"06",X"02",X"02",X"02",X"04",X"06",X"04", - X"21",X"A4",X"43",X"36",X"01",X"2C",X"36",X"80",X"2E",X"A3",X"7E",X"36",X"00",X"FE",X"02",X"C8", - X"77",X"2D",X"7E",X"FE",X"01",X"C8",X"2C",X"7E",X"A7",X"CA",X"A0",X"04",X"2E",X"90",X"7E",X"A7", - X"C8",X"2E",X"A3",X"36",X"00",X"01",X"00",X"01",X"CD",X"60",X"04",X"C9",X"FF",X"FF",X"FF",X"FF", - X"21",X"00",X"50",X"11",X"20",X"43",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"E6",X"03",X"C2",X"66", - X"04",X"7B",X"E6",X"F0",X"D6",X"20",X"5F",X"D2",X"66",X"04",X"15",X"7A",X"FE",X"3F",X"C2",X"66", - X"04",X"11",X"80",X"43",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"FE",X"B8",X"C2",X"84",X"04",X"11", - X"C0",X"4B",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"FE",X"00",X"C2",X"92",X"04",X"C9",X"FF",X"FF", - X"2E",X"A3",X"36",X"01",X"01",X"01",X"00",X"CD",X"60",X"04",X"C9",X"FF",X"21",X"A5",X"43",X"35", - X"7E",X"2D",X"36",X"02",X"A7",X"C8",X"36",X"01",X"FE",X"7F",X"CA",X"F0",X"07",X"2E",X"9A",X"36", - X"00",X"2C",X"36",X"00",X"E6",X"08",X"C2",X"E6",X"04",X"CD",X"08",X"05",X"00",X"21",X"A3",X"43", - X"7E",X"A7",X"2E",X"83",X"11",X"61",X"42",X"CA",X"DF",X"04",X"2E",X"87",X"11",X"21",X"40",X"06", - X"06",X"CD",X"C4",X"00",X"C9",X"FF",X"21",X"A3",X"43",X"7E",X"A7",X"11",X"61",X"42",X"CA",X"F4", - X"04",X"11",X"21",X"40",X"06",X"06",X"CD",X"FB",X"04",X"C9",X"FF",X"3E",X"00",X"12",X"CD",X"10", - X"02",X"05",X"C2",X"FB",X"04",X"C9",X"FF",X"FF",X"21",X"00",X"18",X"0E",X"01",X"C3",X"D0",X"01", - X"21",X"A4",X"43",X"36",X"03",X"CD",X"EA",X"05",X"CD",X"80",X"05",X"CD",X"B8",X"05",X"3A",X"BB", - X"43",X"A7",X"C8",X"C3",X"C4",X"32",X"FF",X"FF",X"FF",X"FF",X"21",X"38",X"05",X"11",X"C0",X"43", - X"06",X"04",X"CD",X"E0",X"05",X"C3",X"A0",X"09",X"0C",X"10",X"64",X"D8",X"CD",X"42",X"05",X"C3", - X"17",X"06",X"21",X"B0",X"43",X"56",X"2C",X"5E",X"21",X"40",X"1B",X"01",X"0B",X"04",X"C3",X"D6", - X"0A",X"05",X"78",X"8E",X"23",X"47",X"7C",X"FE",X"40",X"C2",X"52",X"05",X"78",X"FE",X"40",X"CA", - X"08",X"00",X"C3",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20", - X"21",X"A2",X"43",X"7E",X"A7",X"C8",X"2E",X"B5",X"3A",X"83",X"43",X"E6",X"70",X"86",X"77",X"C9", - X"21",X"B8",X"43",X"7E",X"E6",X"06",X"07",X"07",X"C6",X"98",X"6F",X"26",X"05",X"11",X"B0",X"43", - X"06",X"08",X"CD",X"E0",X"05",X"C3",X"70",X"05",X"4B",X"3F",X"1D",X"D8",X"29",X"00",X"20",X"00", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"20",X"00",X"4A",X"46",X"1B",X"40",X"29",X"80",X"0C",X"00", - X"4B",X"3F",X"1C",X"20",X"FF",X"FF",X"20",X"00",X"21",X"70",X"4B",X"06",X"08",X"36",X"04",X"2C", - X"36",X"08",X"2C",X"36",X"80",X"2C",X"36",X"80",X"2C",X"05",X"C2",X"BD",X"05",X"C9",X"FF",X"FF", - X"CD",X"F4",X"31",X"C3",X"BC",X"06",X"FF",X"FF",X"AF",X"77",X"23",X"05",X"C2",X"D9",X"05",X"C9", - X"7E",X"12",X"23",X"13",X"05",X"C2",X"E0",X"05",X"C9",X"FF",X"21",X"C4",X"43",X"06",X"3C",X"CD", - X"D8",X"05",X"21",X"50",X"43",X"06",X"30",X"CD",X"D8",X"05",X"2E",X"92",X"06",X"06",X"CD",X"D8", - X"05",X"2E",X"9A",X"06",X"04",X"CD",X"D8",X"05",X"21",X"50",X"4B",X"06",X"9C",X"C3",X"D8",X"05", - X"FF",X"FF",X"FF",X"FF",X"CD",X"50",X"06",X"AF",X"32",X"00",X"58",X"32",X"B9",X"43",X"21",X"B6", - X"43",X"35",X"C0",X"2E",X"A4",X"36",X"02",X"2E",X"B8",X"7E",X"34",X"E6",X"0F",X"C0",X"11",X"3B", - X"4A",X"01",X"0A",X"05",X"C5",X"D5",X"3E",X"00",X"12",X"13",X"05",X"C2",X"36",X"06",X"D1",X"C1", - X"CD",X"17",X"02",X"0D",X"C2",X"34",X"06",X"C9",X"AF",X"2C",X"77",X"32",X"00",X"58",X"C9",X"FF", - X"21",X"B0",X"43",X"56",X"2C",X"5E",X"2C",X"7E",X"2C",X"6E",X"67",X"7E",X"06",X"01",X"A7",X"C2", - X"64",X"06",X"23",X"46",X"FE",X"3F",X"C2",X"6B",X"06",X"23",X"46",X"4F",X"23",X"79",X"12",X"CD", - X"17",X"02",X"05",X"C2",X"6D",X"06",X"7A",X"FE",X"47",X"C2",X"5B",X"06",X"EB",X"21",X"B1",X"43", - X"35",X"2C",X"72",X"2C",X"73",X"C9",X"47",X"20",X"01",X"06",X"02",X"11",X"F0",X"42",X"21",X"B0", - X"06",X"CD",X"D6",X"0A",X"21",X"B0",X"43",X"36",X"4B",X"23",X"36",X"3A",X"23",X"36",X"16",X"23", - X"36",X"40",X"3E",X"09",X"F5",X"CD",X"50",X"06",X"F1",X"3D",X"C2",X"A4",X"06",X"C9",X"FF",X"FF", - X"60",X"70",X"61",X"00",X"C0",X"C8",X"C1",X"C9",X"A2",X"00",X"A3",X"00",X"21",X"B8",X"43",X"7E", - X"07",X"E6",X"0C",X"47",X"FE",X"0C",X"CA",X"EA",X"06",X"2C",X"2C",X"7E",X"2C",X"86",X"3D",X"FE", - X"03",X"DA",X"D6",X"06",X"3E",X"03",X"B0",X"C6",X"20",X"6F",X"26",X"04",X"46",X"3A",X"A3",X"43", - X"E6",X"01",X"B0",X"32",X"00",X"50",X"C9",X"FF",X"CD",X"F4",X"7E",X"E6",X"10",X"0F",X"0F",X"0F", - X"B0",X"47",X"2E",X"A4",X"7E",X"FE",X"07",X"C2",X"FB",X"06",X"04",X"78",X"C3",X"D7",X"06",X"FF", - X"01",X"C0",X"43",X"11",X"E0",X"43",X"CD",X"18",X"07",X"79",X"C6",X"04",X"4F",X"C6",X"20",X"5F", - X"50",X"FE",X"EC",X"C2",X"06",X"07",X"C9",X"C9",X"CD",X"20",X"07",X"C3",X"40",X"07",X"E6",X"EF", - X"0A",X"67",X"E6",X"10",X"C8",X"7C",X"E6",X"EF",X"02",X"07",X"07",X"07",X"E6",X"07",X"C6",X"38", - X"6F",X"26",X"07",X"6E",X"E9",X"6C",X"FF",X"8A",X"63",X"79",X"FF",X"9E",X"BE",X"FF",X"FF",X"FF", - X"0A",X"67",X"E6",X"08",X"C8",X"7C",X"E6",X"07",X"67",X"0F",X"0F",X"0F",X"B4",X"F6",X"18",X"02", - X"03",X"7C",X"C6",X"5B",X"6F",X"26",X"07",X"6E",X"E9",X"5E",X"0A",X"6D",X"88",X"FF",X"AA",X"D2", - X"FF",X"FF",X"FF",X"EB",X"56",X"23",X"5E",X"2B",X"AF",X"12",X"EB",X"C9",X"EB",X"EB",X"23",X"23", - X"56",X"23",X"5E",X"0A",X"12",X"0B",X"C9",X"12",X"23",X"EB",X"56",X"23",X"5E",X"2B",X"AF",X"12", - X"CD",X"17",X"02",X"AF",X"12",X"EB",X"C9",X"23",X"EB",X"23",X"23",X"56",X"23",X"5E",X"0A",X"6F", - X"26",X"14",X"7E",X"12",X"23",X"CD",X"17",X"02",X"7E",X"12",X"0B",X"C9",X"FF",X"EB",X"EB",X"56", - X"23",X"5E",X"2B",X"AF",X"12",X"13",X"12",X"EB",X"C9",X"FF",X"EB",X"23",X"23",X"56",X"23",X"5E", - X"0A",X"6F",X"26",X"14",X"7E",X"12",X"23",X"13",X"7E",X"12",X"0B",X"C9",X"23",X"13",X"EB",X"56", - X"23",X"5E",X"2B",X"AF",X"12",X"13",X"12",X"CD",X"17",X"02",X"AF",X"12",X"1B",X"12",X"EB",X"C9", - X"CD",X"4C",X"EB",X"23",X"23",X"56",X"23",X"5E",X"0A",X"6F",X"26",X"14",X"7E",X"12",X"23",X"13", - X"7E",X"12",X"23",X"1B",X"CD",X"17",X"02",X"7E",X"12",X"23",X"13",X"7E",X"12",X"0B",X"C9",X"FF", - X"3A",X"B9",X"43",X"32",X"00",X"58",X"CD",X"80",X"03",X"C3",X"2A",X"05",X"FF",X"FF",X"FF",X"FF", - X"21",X"14",X"08",X"3A",X"B8",X"43",X"07",X"E6",X"1E",X"85",X"6F",X"7E",X"2C",X"6E",X"67",X"E9", - X"C3",X"60",X"14",X"FF",X"06",X"14",X"08",X"34",X"22",X"80",X"34",X"00",X"05",X"3C",X"08",X"34", - X"23",X"60",X"23",X"90",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"CD",X"76",X"08",X"CD",X"F0",X"0D",X"CD",X"AB",X"23",X"21",X"92",X"43", - X"46",X"34",X"3A",X"BA",X"43",X"A7",X"CA",X"F6",X"21",X"FE",X"02",X"DC",X"58",X"0D",X"78",X"0F", - X"DA",X"64",X"08",X"CD",X"50",X"0A",X"CD",X"00",X"30",X"CD",X"08",X"0F",X"CD",X"50",X"25",X"C3", - X"40",X"0C",X"FF",X"FF",X"CD",X"1C",X"0D",X"CD",X"70",X"0D",X"CD",X"6C",X"0A",X"CD",X"78",X"0F", - X"C3",X"80",X"20",X"FF",X"FF",X"FF",X"CD",X"00",X"07",X"CD",X"86",X"08",X"CD",X"A0",X"08",X"CD", - X"A0",X"09",X"CD",X"7A",X"09",X"C9",X"21",X"EB",X"43",X"06",X"03",X"56",X"2B",X"5E",X"2B",X"72", - X"2B",X"73",X"2B",X"05",X"C2",X"8B",X"08",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"E0",X"08",X"21",X"C4",X"43",X"CD",X"30",X"09",X"21",X"C8",X"43",X"3A",X"B8",X"43",X"E6", - X"0F",X"FE",X"05",X"CA",X"30",X"09",X"7E",X"E6",X"08",X"C2",X"64",X"09",X"C9",X"FF",X"FF",X"FF", - X"CD",X"50",X"0A",X"CD",X"00",X"30",X"CD",X"08",X"0F",X"CD",X"1C",X"0D",X"CD",X"70",X"0D",X"CD", - X"6C",X"0A",X"3A",X"92",X"43",X"0F",X"DA",X"5C",X"08",X"C3",X"6D",X"08",X"CD",X"EA",X"08",X"CD", - X"21",X"B8",X"43",X"7E",X"E6",X"0F",X"FE",X"06",X"D2",X"B0",X"22",X"2E",X"C2",X"CD",X"F8",X"08", - X"01",X"00",X"16",X"C3",X"26",X"09",X"FF",X"FF",X"3A",X"A0",X"43",X"2F",X"E6",X"60",X"C8",X"E6", - X"40",X"CA",X"0A",X"09",X"7E",X"FE",X"09",X"D8",X"35",X"C9",X"7E",X"FE",X"C0",X"D0",X"34",X"C9", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"7E",X"E6",X"07",X"81",X"4F",X"0A",X"2D",X"77",X"C9",X"FF", - X"7E",X"E6",X"08",X"C2",X"64",X"09",X"EB",X"06",X"10",X"CD",X"BB",X"00",X"C8",X"7E",X"E6",X"EF", - X"77",X"1A",X"F6",X"08",X"12",X"13",X"13",X"3A",X"C2",X"43",X"C6",X"04",X"12",X"13",X"3A",X"C3", - X"43",X"D6",X"08",X"12",X"1B",X"EB",X"01",X"20",X"16",X"CD",X"26",X"09",X"3E",X"30",X"32",X"61", - X"43",X"C9",X"FF",X"FF",X"2C",X"2C",X"2C",X"7E",X"D6",X"08",X"77",X"FE",X"1F",X"D0",X"2D",X"2D", - X"2D",X"7E",X"E6",X"F7",X"77",X"C9",X"FF",X"FF",X"7E",X"E6",X"3A",X"C2",X"43",X"47",X"E6",X"07", - X"07",X"21",X"38",X"0B",X"85",X"6F",X"78",X"96",X"32",X"9E",X"43",X"23",X"78",X"86",X"32",X"9F", - X"43",X"C9",X"32",X"9F",X"43",X"C9",X"C6",X"00",X"11",X"65",X"41",X"06",X"04",X"C3",X"C4",X"00", - X"01",X"C2",X"43",X"11",X"E2",X"43",X"CD",X"BA",X"09",X"0E",X"C6",X"1E",X"E6",X"CD",X"BA",X"09", - X"0E",X"CA",X"1E",X"EA",X"C3",X"BA",X"09",X"FF",X"FF",X"FF",X"21",X"00",X"0A",X"0A",X"E6",X"F8", - X"0F",X"0F",X"85",X"6F",X"7E",X"12",X"03",X"13",X"23",X"0A",X"E6",X"F8",X"0F",X"0F",X"0F",X"86", - X"12",X"C9",X"FF",X"FF",X"3A",X"B8",X"43",X"0F",X"0F",X"0F",X"0F",X"E6",X"07",X"3C",X"47",X"0E", - X"00",X"16",X"05",X"3A",X"BC",X"43",X"0F",X"5F",X"D2",X"F0",X"09",X"78",X"81",X"27",X"47",X"4F", - X"7B",X"15",X"C2",X"E6",X"09",X"21",X"DE",X"4B",X"71",X"2C",X"36",X"00",X"C3",X"98",X"09",X"00", - X"43",X"20",X"43",X"00",X"42",X"E0",X"42",X"C0",X"42",X"A0",X"42",X"80",X"42",X"60",X"42",X"40", - X"42",X"20",X"42",X"00",X"41",X"E0",X"41",X"C0",X"41",X"A0",X"41",X"80",X"41",X"60",X"41",X"40", - X"41",X"20",X"41",X"00",X"40",X"E0",X"40",X"C0",X"40",X"A0",X"40",X"80",X"40",X"60",X"40",X"40", - X"40",X"20",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"2C",X"2C",X"2D",X"2E",X"2D",X"2E",X"2F",X"2F",X"30",X"31",X"32",X"31",X"30",X"31",X"2C",X"33", - X"01",X"70",X"4B",X"11",X"B0",X"4B",X"C5",X"CD",X"18",X"07",X"C1",X"79",X"C6",X"04",X"4F",X"C6", - X"40",X"5F",X"50",X"FE",X"D0",X"C2",X"56",X"0A",X"C9",X"FF",X"FF",X"FF",X"01",X"70",X"4B",X"11", - X"B3",X"4B",X"C5",X"D5",X"0A",X"E6",X"18",X"CA",X"8A",X"0A",X"EB",X"56",X"2B",X"5E",X"2B",X"72", - X"2B",X"73",X"EB",X"13",X"13",X"03",X"03",X"CD",X"BA",X"09",X"D1",X"C1",X"79",X"C6",X"04",X"4F", - X"7B",X"C6",X"04",X"5F",X"FE",X"D3",X"C2",X"72",X"0A",X"C9",X"FF",X"FF",X"21",X"DB",X"4B",X"01", - X"D4",X"4B",X"0A",X"FE",X"48",X"C2",X"E6",X"0E",X"36",X"04",X"EB",X"13",X"0B",X"CD",X"BA",X"09", - X"1B",X"3E",X"49",X"12",X"3A",X"D2",X"4B",X"32",X"62",X"43",X"C9",X"FF",X"21",X"DD",X"4B",X"5E", - X"2D",X"56",X"2D",X"1A",X"C6",X"14",X"86",X"6F",X"26",X"0A",X"7E",X"12",X"3A",X"DB",X"4B",X"A7", - X"C2",X"90",X"0E",X"C9",X"FF",X"FF",X"D5",X"C5",X"7E",X"12",X"23",X"13",X"05",X"C2",X"D8",X"0A", - X"C1",X"D1",X"CD",X"17",X"02",X"0D",X"C2",X"D6",X"0A",X"C9",X"21",X"E2",X"43",X"56",X"2C",X"5E", - X"2E",X"A5",X"35",X"7E",X"CA",X"15",X"0B",X"FE",X"1F",X"DA",X"80",X"03",X"CA",X"A0",X"0B",X"D6", - X"20",X"C3",X"B8",X"0B",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"2D",X"36",X"05",X"2D",X"7E",X"C6",X"90",X"6F",X"7E",X"A7",X"C8", - X"35",X"E5",X"CD",X"67",X"03",X"E1",X"7E",X"A7",X"C8",X"2E",X"A4",X"36",X"00",X"C9",X"FF",X"FF", - X"FF",X"F0",X"E0",X"B0",X"C0",X"D0",X"C0",X"B0",X"00",X"08",X"01",X"09",X"01",X"09",X"02",X"0A", - X"02",X"0A",X"01",X"09",X"01",X"09",X"00",X"08",X"2E",X"BA",X"36",X"21",X"B8",X"43",X"7E",X"FE", - X"10",X"D8",X"78",X"87",X"27",X"47",X"7E",X"FE",X"30",X"D8",X"78",X"87",X"27",X"47",X"C9",X"FF", - X"21",X"A5",X"43",X"34",X"7E",X"FE",X"40",X"CA",X"A0",X"03",X"21",X"00",X"1A",X"0E",X"01",X"FE", - X"80",X"C2",X"95",X"0B",X"21",X"A4",X"43",X"36",X"00",X"2E",X"90",X"7E",X"2C",X"B6",X"C0",X"AF", - X"2E",X"98",X"77",X"2C",X"77",X"2E",X"A2",X"77",X"2C",X"7E",X"A7",X"C8",X"36",X"00",X"01",X"00", - X"01",X"CD",X"60",X"04",X"C9",X"CD",X"D0",X"01",X"CD",X"E4",X"01",X"C3",X"88",X"16",X"FF",X"FF", - X"21",X"B8",X"43",X"7E",X"E6",X"0E",X"C8",X"FE",X"04",X"DA",X"AD",X"0B",X"35",X"2C",X"AF",X"77", - X"32",X"00",X"58",X"C3",X"A0",X"03",X"FF",X"FF",X"0F",X"DA",X"78",X"0F",X"E6",X"7E",X"C6",X"A0", - X"6F",X"26",X"2A",X"7E",X"23",X"6E",X"67",X"FE",X"17",X"CA",X"DC",X"0B",X"01",X"1F",X"00",X"EB", - X"09",X"EB",X"01",X"04",X"03",X"C3",X"D6",X"0A",X"FF",X"FF",X"FF",X"FF",X"01",X"5D",X"00",X"EB", - X"09",X"EB",X"01",X"08",X"06",X"CD",X"EE",X"0B",X"CD",X"EE",X"0B",X"C3",X"D6",X"0A",X"7A",X"FE", - X"43",X"C0",X"7B",X"FE",X"40",X"D8",X"D6",X"20",X"5F",X"7D",X"80",X"6F",X"0D",X"C9",X"FF",X"FE", - X"7E",X"D6",X"03",X"BA",X"D0",X"C6",X"05",X"BA",X"D8",X"23",X"7E",X"2B",X"D6",X"08",X"BB",X"D0", - X"C6",X"10",X"BB",X"D8",X"2B",X"7E",X"23",X"11",X"08",X"39",X"FE",X"30",X"DA",X"2A",X"0C",X"11", - X"03",X"53",X"FE",X"C0",X"DA",X"2A",X"0C",X"11",X"15",X"1F",X"3A",X"BA",X"43",X"FE",X"02",X"D2", - X"A4",X"0E",X"3A",X"B8",X"43",X"E6",X"70",X"C6",X"10",X"83",X"5F",X"16",X"1A",X"C3",X"A4",X"0E", - X"21",X"FF",X"43",X"06",X"05",X"CD",X"8B",X"08",X"CD",X"56",X"0C",X"CD",X"6B",X"0C",X"CD",X"D8", - X"0C",X"C9",X"FF",X"FF",X"FF",X"FF",X"21",X"CC",X"43",X"E5",X"CD",X"84",X"0C",X"E1",X"7D",X"C6", - X"04",X"6F",X"FE",X"E0",X"C2",X"59",X"0C",X"C9",X"FF",X"FF",X"FF",X"01",X"CE",X"43",X"11",X"EE", - X"43",X"CD",X"BA",X"09",X"03",X"03",X"03",X"13",X"13",X"13",X"79",X"FE",X"E2",X"C2",X"71",X"0C", - X"C9",X"FF",X"FF",X"FF",X"7E",X"E6",X"08",X"C8",X"00",X"00",X"2C",X"7E",X"EE",X"04",X"77",X"2C", - X"2C",X"7E",X"C6",X"04",X"77",X"FE",X"F9",X"D2",X"6E",X"09",X"2D",X"47",X"CD",X"B4",X"0C",X"78", - X"FE",X"B0",X"D8",X"C3",X"00",X"20",X"4E",X"0A",X"EB",X"2C",X"FE",X"E8",X"D2",X"6E",X"09",X"C9", - X"FF",X"FF",X"FF",X"FF",X"FE",X"DC",X"D8",X"FE",X"E9",X"D0",X"3A",X"9F",X"43",X"BE",X"D8",X"3A", - X"9E",X"43",X"BE",X"D0",X"3E",X"04",X"32",X"A4",X"43",X"3E",X"60",X"32",X"A5",X"43",X"3E",X"FF", - X"32",X"63",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"01",X"CC",X"43",X"11",X"EC",X"43",X"C5",X"CD", - X"18",X"07",X"C1",X"79",X"C6",X"04",X"4F",X"C6",X"20",X"5F",X"50",X"A7",X"C2",X"DE",X"0C",X"C9", - X"21",X"DC",X"4B",X"36",X"49",X"2C",X"36",X"A9",X"21",X"9D",X"43",X"3A",X"DE",X"4B",X"77",X"2E", - X"A4",X"36",X"06",X"2C",X"36",X"60",X"2E",X"63",X"36",X"FF",X"2E",X"B8",X"34",X"E1",X"E1",X"C9", - X"CD",X"80",X"00",X"CD",X"A0",X"03",X"E1",X"E1",X"C9",X"FF",X"FF",X"FF",X"01",X"70",X"4B",X"21", - X"50",X"4B",X"CD",X"30",X"0D",X"0C",X"0C",X"2C",X"3E",X"90",X"B9",X"C2",X"22",X"0D",X"C9",X"FF", - X"56",X"23",X"0A",X"03",X"03",X"E6",X"08",X"C8",X"5E",X"EB",X"7E",X"07",X"C6",X"00",X"6F",X"26", - X"17",X"0A",X"86",X"02",X"03",X"23",X"0A",X"86",X"02",X"EB",X"57",X"0B",X"0A",X"B2",X"E6",X"07", - X"C0",X"34",X"C0",X"2D",X"34",X"2C",X"C9",X"EB",X"2E",X"94",X"78",X"0F",X"DA",X"61",X"0D",X"36", - X"01",X"7E",X"A7",X"C8",X"2E",X"B8",X"7E",X"E6",X"F0",X"C8",X"E1",X"C3",X"C0",X"08",X"FF",X"FF", - X"01",X"70",X"4B",X"21",X"50",X"4B",X"CD",X"86",X"0D",X"79",X"C6",X"04",X"4F",X"3E",X"90",X"B9", - X"C2",X"76",X"0D",X"C9",X"FF",X"FF",X"56",X"23",X"5E",X"23",X"0A",X"E6",X"08",X"C8",X"EB",X"7E", - X"A7",X"CA",X"D8",X"0D",X"07",X"C6",X"C0",X"6F",X"26",X"16",X"03",X"03",X"03",X"7E",X"23",X"0F", - X"DA",X"B4",X"0D",X"0F",X"DA",X"C6",X"0D",X"0A",X"0F",X"E6",X"03",X"86",X"0B",X"C3",X"CC",X"0D", - X"0F",X"E6",X"03",X"86",X"0A",X"0F",X"E6",X"03",X"86",X"67",X"0B",X"0A",X"07",X"E6",X"0C",X"84", - X"C3",X"CC",X"0D",X"E6",X"04",X"84",X"0B",X"0A",X"0F",X"E6",X"03",X"86",X"6F",X"26",X"16",X"7E", - X"0B",X"02",X"0B",X"EB",X"C9",X"7E",X"0B",X"02",X"0A",X"E6",X"F7",X"02",X"EB",X"C9",X"1B",X"1B", - X"3A",X"94",X"43",X"12",X"67",X"13",X"36",X"00",X"C9",X"12",X"6F",X"13",X"7E",X"C9",X"FF",X"FF", - X"01",X"C4",X"43",X"21",X"E6",X"43",X"CD",X"04",X"0E",X"01",X"C8",X"43",X"21",X"EA",X"43",X"CD", - X"04",X"0E",X"C9",X"CC",X"0A",X"E6",X"08",X"C8",X"7E",X"C6",X"08",X"57",X"2C",X"5E",X"1A",X"D6", - X"2C",X"FE",X"12",X"CA",X"3C",X"0E",X"DA",X"50",X"0E",X"2D",X"56",X"1A",X"FE",X"60",X"D8",X"FE", - X"D0",X"D0",X"E6",X"07",X"07",X"07",X"C6",X"C0",X"6F",X"26",X"2A",X"03",X"03",X"0A",X"E6",X"07", - X"BE",X"D0",X"23",X"BE",X"D8",X"C3",X"70",X"0E",X"FF",X"FF",X"FF",X"FF",X"AF",X"12",X"0A",X"E6", - X"F7",X"02",X"2D",X"56",X"3E",X"FF",X"32",X"66",X"43",X"06",X"88",X"C3",X"2D",X"20",X"23",X"3E", - X"FE",X"03",X"C2",X"3E",X"0E",X"E5",X"7B",X"D6",X"69",X"07",X"07",X"07",X"6F",X"26",X"3E",X"7E", - X"21",X"BC",X"43",X"B6",X"77",X"E1",X"FE",X"1F",X"CA",X"F8",X"0C",X"C3",X"3E",X"0E",X"FF",X"FF", - X"23",X"0A",X"E6",X"F8",X"86",X"57",X"03",X"0A",X"E6",X"F8",X"5F",X"21",X"70",X"4B",X"7E",X"23", - X"23",X"E6",X"08",X"C4",X"00",X"0C",X"23",X"23",X"3E",X"90",X"BD",X"C2",X"7E",X"0E",X"C9",X"FF", - X"3A",X"92",X"43",X"E6",X"0C",X"0F",X"0F",X"C6",X"48",X"6F",X"26",X"0A",X"7E",X"32",X"A6",X"49", - X"C9",X"02",X"0C",X"00",X"2B",X"2B",X"0B",X"0B",X"0B",X"0A",X"E6",X"F7",X"02",X"7E",X"E6",X"F7", - X"77",X"7D",X"C6",X"42",X"6F",X"46",X"23",X"4E",X"21",X"70",X"43",X"7E",X"E6",X"1F",X"CA",X"D5", - X"0E",X"2E",X"74",X"7E",X"E6",X"1F",X"CA",X"D5",X"0E",X"2E",X"78",X"7E",X"E6",X"1F",X"CA",X"D5", - X"0E",X"2E",X"7C",X"00",X"00",X"72",X"2C",X"73",X"2C",X"70",X"2C",X"71",X"CD",X"F0",X"0E",X"00", - X"2E",X"BA",X"35",X"E1",X"E1",X"E9",X"36",X"00",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"2E",X"64",X"7B",X"FE",X"10",X"DA",X"FA",X"0E",X"2E",X"69",X"36",X"FF",X"C9",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"21",X"E2",X"43",X"56",X"2C",X"5E",X"01",X"02", - X"02",X"CD",X"56",X"0F",X"C8",X"00",X"00",X"21",X"9E",X"43",X"7E",X"D6",X"0A",X"47",X"2C",X"4E", - X"21",X"70",X"4B",X"7E",X"2C",X"2C",X"E6",X"08",X"C4",X"38",X"0F",X"2C",X"2C",X"3E",X"90",X"BD", - X"C2",X"23",X"0F",X"C9",X"FF",X"FF",X"FF",X"FF",X"2C",X"7E",X"2D",X"FE",X"D4",X"D8",X"FE",X"E7", - X"D0",X"7E",X"B9",X"D0",X"B8",X"D8",X"CD",X"C4",X"0C",X"11",X"05",X"39",X"2B",X"2B",X"C3",X"AD", - X"0E",X"AD",X"0E",X"FF",X"FF",X"FF",X"C5",X"D5",X"1A",X"FE",X"60",X"DA",X"63",X"0F",X"FE",X"D0", - X"DA",X"72",X"0F",X"13",X"05",X"C2",X"58",X"0F",X"D1",X"C1",X"CD",X"17",X"02",X"0D",X"C2",X"56", - X"0F",X"C9",X"D1",X"C1",X"C9",X"E2",X"56",X"2C",X"21",X"70",X"43",X"CD",X"C0",X"2F",X"21",X"74", - X"43",X"CD",X"C0",X"2F",X"21",X"78",X"43",X"CD",X"C0",X"2F",X"21",X"7C",X"43",X"C3",X"C0",X"2F", - X"7E",X"E6",X"1F",X"C8",X"35",X"7E",X"E6",X"FE",X"2C",X"2C",X"56",X"2C",X"5E",X"6F",X"26",X"2A", - X"7E",X"2C",X"4E",X"6F",X"26",X"15",X"06",X"00",X"EB",X"09",X"EB",X"3E",X"A0",X"91",X"0F",X"4F", - X"06",X"35",X"C5",X"01",X"08",X"00",X"C3",X"BC",X"0F",X"C3",X"AD",X"0E",X"7A",X"FE",X"43",X"C2", - X"E9",X"0F",X"7B",X"FE",X"40",X"DA",X"E9",X"0F",X"D6",X"20",X"5F",X"2C",X"2C",X"41",X"FE",X"40", - X"DA",X"E9",X"0F",X"D6",X"20",X"5F",X"2C",X"2C",X"78",X"81",X"47",X"7B",X"FE",X"40",X"DA",X"E9", - X"0F",X"D6",X"20",X"5F",X"2C",X"2C",X"78",X"81",X"47",X"E3",X"7D",X"80",X"6F",X"E3",X"01",X"DF", - X"FF",X"EB",X"C9",X"00",X"C3",X"40",X"35",X"68",X"3E",X"05",X"32",X"96",X"43",X"C3",X"A4",X"0E", - X"05",X"1A",X"1A",X"1B",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10",X"11",X"12",X"12",X"13", - X"14",X"15",X"16",X"16",X"17",X"17",X"17",X"17",X"16",X"0F",X"0F",X"12",X"12",X"11",X"11",X"11", - X"11",X"00",X"FF",X"FF",X"05",X"1D",X"1E",X"1F",X"10",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"1A", - X"19",X"18",X"18",X"17",X"16",X"15",X"14",X"13",X"12",X"11",X"10",X"10",X"11",X"12",X"12",X"13", - X"0F",X"0F",X"15",X"16",X"16",X"16",X"17",X"17",X"17",X"17",X"00",X"FF",X"05",X"1C",X"1C",X"1C", - X"1D",X"1D",X"1E",X"1E",X"1E",X"1E",X"1F",X"1F",X"10",X"10",X"10",X"10",X"11",X"12",X"12",X"13", - X"0F",X"0F",X"0F",X"14",X"15",X"15",X"15",X"16",X"16",X"16",X"16",X"17",X"17",X"17",X"17",X"17", - X"17",X"00",X"FF",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10",X"10", - X"10",X"10",X"11",X"12",X"12",X"13",X"14",X"14",X"14",X"14",X"15",X"16",X"16",X"17",X"18",X"18", - X"18",X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"11", - X"12",X"13",X"14",X"14",X"0F",X"06",X"00",X"FF",X"05",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10", - X"10",X"11",X"12",X"13",X"14",X"14",X"14",X"14",X"04",X"02",X"02",X"02",X"02",X"03",X"1C",X"1C", - X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"11",X"12",X"12",X"13",X"14",X"14",X"06",X"00",X"FF", - X"05",X"1F",X"1F",X"1E",X"1E",X"1E",X"1D",X"1C",X"1C",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"18", - X"17",X"16",X"15",X"14",X"0F",X"06",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08", - X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"00",X"FF",X"0E",X"0E",X"0E",X"0E", - X"0E",X"0E",X"0E",X"05",X"1C",X"1B",X"1A",X"1A",X"19",X"18",X"18",X"18",X"17",X"16",X"16",X"15", - X"0F",X"0F",X"0F",X"13",X"13",X"12",X"12",X"12",X"12",X"11",X"11",X"11",X"11",X"11",X"11",X"11", - X"11",X"00",X"FF",X"FF",X"05",X"1C",X"1C",X"1B",X"1A",X"1A",X"19",X"18",X"19",X"1A",X"1B",X"1C", - X"1D",X"1E",X"1F",X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17",X"18",X"17",X"16",X"16",X"15", - X"14",X"14",X"14",X"13",X"13",X"12",X"12",X"12",X"12",X"11",X"11",X"11",X"00",X"FF",X"05",X"1D", - X"1D",X"1D",X"1D",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"18",X"18",X"18",X"17",X"16",X"15",X"14", - X"14",X"13",X"13",X"13",X"13",X"0F",X"04",X"02",X"02",X"02",X"02",X"03",X"1C",X"1B",X"1B",X"1B", - X"1B",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"10",X"11",X"12",X"13",X"14",X"14",X"15", - X"15",X"15",X"15",X"06",X"00",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1C",X"1C",X"1B",X"1B",X"1A", - X"1A",X"19",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"15",X"14",X"14",X"14",X"13",X"13",X"12", - X"12",X"11",X"10",X"1F",X"1E",X"1E",X"1D",X"1D",X"1C",X"1C",X"1C",X"1B",X"1B",X"1A",X"1A",X"19", - X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"15",X"14",X"14",X"0F",X"0F",X"0F",X"0F",X"06",X"00", - X"FF",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1C",X"1C",X"1B",X"1A",X"1A",X"1A",X"19",X"18",X"18", - X"18",X"18",X"18",X"17",X"16",X"16",X"16",X"15",X"0F",X"0F",X"0F",X"14",X"13",X"13",X"12",X"12", - X"12",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1B", - X"1B",X"1A",X"1A",X"19",X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"14",X"0F",X"0F", - X"0F",X"0F",X"04",X"01",X"01",X"01",X"01",X"01",X"03",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"11", - X"12",X"13",X"14",X"14",X"06",X"00",X"FF",X"FF",X"05",X"19",X"19",X"1A",X"1A",X"1A",X"1B",X"1B", - X"1C",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"11",X"12",X"13",X"14",X"0F",X"06",X"0B", - X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0A",X"09",X"08",X"08",X"08", - X"08",X"08",X"08",X"08",X"00",X"FF",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"05",X"1C",X"1D", - X"1E",X"1E",X"1F",X"10",X"10",X"10",X"10",X"11",X"12",X"12",X"13",X"0F",X"0F",X"0F",X"14",X"15", - X"16",X"16",X"16",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"00",X"FF",X"FF", - X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"16",X"15",X"14",X"14",X"14",X"13",X"12", - X"12",X"11",X"10",X"10",X"10",X"1F",X"1E",X"1D",X"1C",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"17", - X"16",X"0F",X"0F",X"13",X"12",X"11",X"11",X"11",X"11",X"11",X"11",X"10",X"10",X"10",X"1F",X"1F", - X"00",X"FF",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"16",X"16",X"16",X"15",X"14",X"14",X"13", - X"12",X"12",X"11",X"10",X"10",X"1F",X"1E",X"1E",X"1D",X"1C",X"1C",X"1B",X"1A",X"1A",X"19",X"18", - X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"0F",X"0F",X"0F",X"13",X"12",X"12",X"11",X"11", - X"11",X"11",X"10",X"10",X"10",X"10",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"00",X"FF",X"FF",X"FF", - X"15",X"15",X"15",X"15",X"15",X"15",X"15",X"16",X"16",X"17",X"18",X"18",X"18",X"19",X"1A",X"1B", - X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"11",X"12",X"12",X"13",X"0F",X"0F",X"0F",X"0F",X"15", - X"16",X"16",X"17",X"18",X"18",X"18",X"19",X"19",X"19",X"19",X"19",X"19",X"00",X"FF",X"15",X"15", - X"16",X"16",X"16",X"16",X"17",X"17",X"18",X"18",X"18",X"18",X"19",X"1A",X"1B",X"1B",X"0F",X"0F", - X"0F",X"0F",X"0F",X"13",X"13",X"12",X"12",X"11",X"10",X"10",X"10",X"10",X"1F",X"1E",X"1D",X"0F", - X"0F",X"0F",X"0F",X"15",X"16",X"16",X"17",X"17",X"18",X"18",X"18",X"19",X"19",X"1A",X"19",X"18", - X"17",X"17",X"00",X"FF",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"17",X"18", - X"19",X"1A",X"1B",X"05",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07", - X"07",X"09",X"09",X"09",X"0A",X"0A",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0B",X"00",X"17",X"17",X"00",X"FF",X"FF",X"17",X"17",X"17",X"17",X"16",X"16",X"16",X"15", - X"14",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"19",X"17",X"15",X"13",X"13",X"14", - X"14",X"14",X"14",X"04",X"01",X"01",X"01",X"01",X"01",X"01",X"03",X"1C",X"1D",X"1E",X"1F",X"1F", - X"00",X"FF",X"15",X"15",X"15",X"15",X"15",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1D",X"1D", - X"1D",X"1E",X"1F",X"10",X"11",X"13",X"14",X"14",X"15",X"15",X"15",X"15",X"0F",X"0F",X"04",X"02", - X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"03",X"1B",X"1B",X"19",X"19",X"19",X"19",X"00",X"FF", - X"17",X"17",X"17",X"17",X"17",X"16",X"15",X"14",X"14",X"14",X"13",X"12",X"11",X"10",X"10",X"1F", - X"1E",X"1D",X"1C",X"1B",X"1A",X"19",X"18",X"18",X"17",X"17",X"16",X"16",X"15",X"15",X"0F",X"0F", - X"0F",X"04",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"00",X"FF",X"FF", - X"30",X"40",X"31",X"41",X"00",X"42",X"33",X"43",X"00",X"44",X"35",X"45",X"00",X"46",X"37",X"47", - X"38",X"48",X"00",X"49",X"3A",X"4A",X"00",X"4B",X"3C",X"4C",X"00",X"4D",X"3E",X"4E",X"3F",X"4F", - X"C0",X"C8",X"C1",X"C9",X"C2",X"CA",X"C3",X"CB",X"C4",X"CC",X"C5",X"CD",X"C6",X"00",X"C7",X"CF", - X"60",X"76",X"61",X"00",X"68",X"93",X"69",X"00",X"80",X"94",X"81",X"71",X"88",X"96",X"89",X"91", - X"60",X"70",X"61",X"00",X"68",X"70",X"69",X"00",X"80",X"70",X"81",X"00",X"88",X"79",X"89",X"99", - X"A0",X"00",X"A1",X"00",X"A2",X"00",X"A3",X"00",X"A4",X"00",X"A5",X"00",X"A6",X"00",X"A7",X"00", - X"C3",X"F1",X"20",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"60",X"70",X"61",X"00",X"68",X"78",X"69",X"00",X"80",X"90",X"81",X"00",X"88",X"98",X"89",X"99", - X"62",X"72",X"63",X"73",X"6A",X"7A",X"6B",X"7B",X"82",X"92",X"83",X"00",X"8A",X"9A",X"8B",X"9B", - X"64",X"74",X"65",X"75",X"6C",X"7C",X"6D",X"7D",X"84",X"00",X"85",X"95",X"8C",X"9C",X"8D",X"9D", - X"66",X"00",X"67",X"77",X"6E",X"00",X"6F",X"7F",X"86",X"00",X"87",X"97",X"8E",X"9E",X"8F",X"9F", - X"B0",X"00",X"B1",X"00",X"A0",X"00",X"A1",X"00",X"A8",X"B8",X"A9",X"00",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"A2",X"00",X"A3",X"00",X"FF",X"FF",X"FF",X"FF",X"AA",X"BA",X"AB",X"BB", - X"FF",X"FF",X"FF",X"FF",X"A4",X"00",X"A5",X"00",X"AC",X"BC",X"AD",X"BD",X"B2",X"B4",X"B3",X"B5", - X"FF",X"FF",X"FF",X"FF",X"A6",X"00",X"A7",X"00",X"FF",X"FF",X"FF",X"FF",X"AE",X"BE",X"AF",X"BF", - X"D6",X"DD",X"E9",X"EC",X"E3",X"F3",X"E1",X"F1",X"E4",X"F4",X"EB",X"EE",X"D8",X"EF",X"DF",X"DD", - X"E0",X"F0",X"E1",X"DA",X"E9",X"DA",X"EA",X"F1",X"E2",X"F2",X"DE",X"DC",X"00",X"00",X"D6",X"FF", - X"E9",X"EC",X"EA",X"ED",X"EB",X"EE",X"D8",X"EF",X"00",X"00",X"DF",X"DD",X"E0",X"F0",X"E1",X"F1", - X"E2",X"F2",X"DE",X"DC",X"00",X"00",X"D6",X"D9",X"D7",X"DA",X"D8",X"DB",X"00",X"00",X"D0",X"D3", - X"D1",X"D4",X"D2",X"D5",X"DF",X"FF",X"FE",X"FC",X"DE",X"FE",X"DC",X"B6",X"FF",X"CE",X"7E",X"FF", - X"00",X"DD",X"DF",X"FF",X"00",X"DC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"D6",X"D9",X"FF",X"E9",X"F9",X"EC",X"EB",X"FB",X"EE",X"D8",X"DB",X"EF",X"00",X"FE",X"DD",X"00", - X"E0",X"F0",X"FF",X"E2",X"F2",X"00",X"DC",X"00",X"00",X"00",X"FF",X"00",X"D0",X"D3",X"DF",X"D2", - X"D5",X"00",X"00",X"DC",X"00",X"00",X"00",X"00",X"D6",X"D9",X"00",X"D8",X"DB",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"DF",X"DD",X"00",X"DE",X"DC",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"D0",X"F6",X"DE",X"D1",X"F7",X"F5",X"D2",X"F8",X"DF",X"00",X"D0",X"D3",X"FF",X"D1",X"D4",X"00", - X"D2",X"D5",X"00",X"D6",X"D9",X"DF",X"D7",X"DA",X"00",X"D8",X"DB",X"00",X"DF",X"DD",X"00",X"DE", - X"FC",X"00",X"DD",X"DC",X"00",X"00",X"DE",X"00",X"DC",X"FE",X"00",X"00",X"DF",X"00",X"54",X"55", - X"56",X"57",X"58",X"00",X"59",X"5A",X"53",X"5C",X"5D",X"00",X"54",X"59",X"5B",X"57",X"5C",X"00", - X"55",X"5A",X"53",X"58",X"5D",X"00",X"00",X"54",X"00",X"53",X"57",X"00",X"00",X"56",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"10",X"14",X"18",X"1C",X"00",X"04",X"08",X"0C",X"20",X"24",X"28",X"2C",X"30",X"34",X"38",X"3C", - X"80",X"84",X"88",X"8C",X"90",X"94",X"98",X"9C",X"A0",X"A4",X"A8",X"AC",X"B0",X"B4",X"B8",X"BC", - X"50",X"51",X"52",X"53",X"54",X"55",X"56",X"57",X"40",X"44",X"48",X"4C",X"50",X"54",X"58",X"5C", - X"C0",X"C4",X"C8",X"FF",X"FF",X"D4",X"FF",X"DC",X"FF",X"E4",X"E8",X"EC",X"FF",X"F4",X"FF",X"FC", - X"00",X"02",X"6F",X"00",X"02",X"7E",X"7F",X"00",X"13",X"00",X"05",X"7C",X"7D",X"00",X"13",X"39", - X"3A",X"2C",X"2C",X"2C",X"2C",X"2C",X"3B",X"3C",X"00",X"11",X"00",X"02",X"3D",X"36",X"37",X"38", - X"3D",X"00",X"13",X"00",X"02",X"60",X"33",X"34",X"35",X"60",X"00",X"13",X"00",X"04",X"32",X"00", - X"15",X"00",X"03",X"DC",X"DD",X"A9",X"AA",X"DE",X"F4",X"00",X"11",X"FB",X"9C",X"FE",X"00",X"02", - X"A7",X"A8",X"00",X"13",X"00",X"1A",X"00",X"1A",X"AF",X"21",X"86",X"19",X"06",X"06",X"CD",X"B0", - X"16",X"21",X"F8",X"1A",X"06",X"08",X"CD",X"B0",X"16",X"21",X"95",X"0B",X"06",X"09",X"CD",X"B0", - X"16",X"C6",X"6B",X"4F",X"11",X"F1",X"37",X"19",X"7E",X"81",X"77",X"C9",X"32",X"23",X"41",X"C9", - X"86",X"23",X"05",X"C2",X"B0",X"16",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"02",X"08",X"02",X"08",X"04",X"0C",X"04",X"0C",X"04",X"28",X"04",X"28",X"02",X"2C", - X"01",X"30",X"01",X"30",X"01",X"30",X"01",X"30",X"02",X"2C",X"01",X"30",X"01",X"30",X"01",X"10", - X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10", - X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10", - X"FF",X"FF",X"01",X"00",X"FF",X"00",X"00",X"FF",X"00",X"01",X"00",X"FF",X"00",X"01",X"02",X"00", - X"04",X"02",X"02",X"02",X"FE",X"02",X"FC",X"02",X"FE",X"00",X"FC",X"FE",X"04",X"FE",X"00",X"01", - X"02",X"00",X"02",X"01",X"02",X"02",X"01",X"02",X"00",X"02",X"FF",X"02",X"FE",X"02",X"FE",X"01", - X"FE",X"00",X"FE",X"FF",X"FE",X"FE",X"FF",X"FE",X"00",X"FE",X"01",X"FE",X"02",X"FE",X"02",X"FF", - X"47",X"3A",X"00",X"78",X"E6",X"10",X"C8",X"EB",X"7A",X"FE",X"18",X"C0",X"7B",X"FE",X"95",X"36", - X"22",X"C8",X"FE",X"9C",X"36",X"0E",X"C8",X"FE",X"B5",X"36",X"24",X"C8",X"70",X"C9",X"FE",X"FF", - X"3A",X"00",X"78",X"E6",X"10",X"3A",X"8F",X"43",X"C8",X"0F",X"E6",X"0F",X"C9",X"FF",X"FF",X"FF", - X"00",X"00",X"FE",X"DC",X"00",X"00",X"00",X"D6",X"D9",X"E5",X"DD",X"00",X"DD",X"E9",X"F9",X"E7", - X"EC",X"DE",X"FE",X"E3",X"FA",X"ED",X"F3",X"DF",X"00",X"E4",X"EA",X"F9",X"F4",X"FF",X"DD",X"EB", - X"FB",X"E8",X"EE",X"00",X"00",X"D8",X"DB",X"E6",X"EF",X"DC",X"00",X"00",X"FD",X"DE",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FD",X"DD",X"00",X"00",X"00",X"00",X"E0",X"E7", - X"F0",X"CE",X"00",X"FF",X"E1",X"F9",X"DA",X"00",X"00",X"00",X"EA",X"FA",X"F1",X"DC",X"00",X"DD", - X"E2",X"E8",X"F2",X"DF",X"00",X"00",X"FF",X"DF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"D6",X"D9",X"FF",X"00",X"00",X"00",X"E9",X"F9", - X"EC",X"00",X"00",X"00",X"EB",X"FB",X"EE",X"00",X"00",X"00",X"D8",X"DB",X"EF",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"20",X"FF",X"FF",X"FF",X"FF",X"10",X"15",X"0E",X"0B",X"14",X"05",X"21",X"00",X"00",X"00", - X"12",X"05",X"0B",X"0F",X"12",X"04",X"00",X"00",X"00",X"10",X"15",X"0E",X"0B",X"14",X"05",X"22", - X"43",X"21",X"FF",X"FF",X"FF",X"FF",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"00",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"00", - X"43",X"22",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"2A",X"20",X"00",X"00",X"00",X"00",X"00", - X"07",X"05",X"0C",X"04",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"2A",X"20",X"00",X"00",X"00", - X"43",X"25",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"02",X"09",X"14",X"14",X"05",X"00",X"07", - X"05",X"0C",X"04",X"00",X"05",X"09",X"0E",X"17",X"05",X"12",X"06",X"05",X"0E",X"00",X"00",X"00", - X"43",X"27",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"1F",X"00",X"21",X"13",X"10",X"09",X"05", - X"0C",X"05",X"12",X"00",X"00",X"21",X"0D",X"15",X"05",X"0E",X"1A",X"05",X"00",X"00",X"1F",X"00", - X"43",X"29",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"1F",X"00",X"22",X"13",X"10",X"09",X"05", - X"0C",X"05",X"12",X"00",X"00",X"22",X"0D",X"15",X"05",X"0E",X"1A",X"05",X"0E",X"00",X"1F",X"00", - X"43",X"2D",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"10",X"15",X"0E",X"0B",X"14",X"05",X"14", - X"01",X"02",X"0C",X"0C",X"05",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"30",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"23",X"20",X"00",X"28",X"20",X"00",X"21",X"25",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"33",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"25",X"20",X"00",X"21",X"20",X"20",X"2B",X"24",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"37",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"2B",X"29",X"26",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"3A",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"21",X"20",X"20",X"2B",X"26",X"20",X"20",X"00",X"25",X"20",X"20",X"2B",X"24",X"20",X"20",X"20", - X"43",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C", - X"00",X"00",X"21",X"29",X"28",X"21",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"3D",X"21",X"00",X"21",X"00",X"16",X"0E",X"09",X"16",X"05",X"12",X"13",X"01",X"0C",X"00", - X"16",X"09",X"04",X"05",X"0F",X"00",X"13",X"10",X"09",X"05",X"0C",X"00",X"07",X"0D",X"02",X"08", - X"43",X"3E",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"28",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"15",X"12",X"00", - X"13",X"10",X"09",X"05",X"0C",X"05",X"12",X"00",X"21",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"28",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"13",X"10", - X"09",X"05",X"0C",X"05",X"0E",X"04",X"05",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"00",X"00",X"00",X"65",X"65",X"00", - X"00",X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"65", - X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65", - X"65",X"65",X"00",X"00",X"65",X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"00",X"00",X"00",X"65", - X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"00",X"00",X"00",X"00",X"65",X"65",X"65", - X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"00",X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"65", - X"65",X"65",X"65",X"00",X"00",X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65", - X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"00",X"00",X"00",X"00",X"65",X"00",X"00", - X"00",X"00",X"00",X"00",X"65",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"43",X"0A",X"20",X"03",X"42",X"8A",X"35",X"03",X"42",X"0A",X"4A",X"03",X"41",X"8A",X"5F",X"01", - X"41",X"4A",X"66",X"03",X"40",X"CA",X"7B",X"03",X"40",X"4A",X"90",X"04",X"FF",X"FF",X"FF",X"FF", - X"21",X"E8",X"4B",X"35",X"CA",X"F8",X"1A",X"7E",X"2C",X"6E",X"26",X"1A",X"56",X"2C",X"5E",X"2C", - X"46",X"2C",X"4E",X"FE",X"20",X"C2",X"B8",X"0B",X"21",X"1E",X"08",X"19",X"EB",X"26",X"1A",X"68", - X"06",X"07",X"C3",X"D6",X"0A",X"6C",X"00",X"6C",X"34",X"2C",X"7E",X"FE",X"C8",X"CA",X"00",X"1C", - X"C6",X"04",X"77",X"2D",X"36",X"40",X"C3",X"80",X"03",X"C3",X"E4",X"01",X"CD",X"00",X"04",X"21", - X"E8",X"4B",X"36",X"40",X"2C",X"36",X"B0",X"21",X"A4",X"43",X"7E",X"FE",X"03",X"C8",X"36",X"02", - X"2E",X"BA",X"36",X"01",X"C9",X"FF",X"00",X"CD",X"BC",X"06",X"C3",X"2E",X"06",X"06",X"CF",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"CA",X"CB",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"39",X"00",X"00",X"00",X"3A",X"00",X"60",X"3D",X"2C", - X"00",X"33",X"36",X"2C",X"30",X"34",X"37",X"2C",X"00",X"35",X"38",X"2C",X"00",X"60",X"3D",X"2C", - X"00",X"00",X"00",X"3B",X"00",X"00",X"00",X"3C",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"32",X"00",X"36",X"39",X"36",X"39",X"00",X"32",X"34",X"00",X"3B",X"3D",X"3B",X"3D",X"00",X"34", - X"43",X"2C",X"32",X"32",X"32",X"32",X"00",X"00",X"00",X"00",X"00",X"0E",X"05",X"15",X"05",X"12", - X"00",X"01",X"0E",X"07",X"12",X"09",X"06",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"13",X"10",X"09",X"05", - X"0C",X"05",X"12",X"00",X"21",X"00",X"0F",X"04",X"05",X"12",X"00",X"22",X"00",X"00",X"00",X"00", - X"43",X"29",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"01",X"03",X"08",X"14",X"15",X"0E",X"07",X"00", - X"00",X"0E",X"05",X"15",X"05",X"12",X"00",X"01",X"15",X"06",X"14",X"12",X"01",X"07",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"1A",X"09",X"05",X"0C",X"01",X"0E",X"06",X"0C", - X"15",X"07",X"00",X"1A",X"15",X"12",X"00",X"00",X"02",X"01",X"13",X"09",X"13",X"00",X"00",X"00", - X"CD",X"46",X"01",X"CD",X"27",X"1B",X"CD",X"E4",X"01",X"11",X"5D",X"26",X"19",X"11",X"20",X"00", - X"3E",X"F4",X"06",X"1A",X"86",X"19",X"05",X"C2",X"14",X"1C",X"1E",X"24",X"19",X"86",X"77",X"C9", - X"3F",X"04",X"87",X"3F",X"10",X"8F",X"3F",X"04",X"00",X"04",X"86",X"00",X"10",X"8E",X"00",X"04", - X"3F",X"04",X"85",X"3F",X"10",X"8D",X"3F",X"04",X"00",X"04",X"84",X"00",X"10",X"8C",X"00",X"04", - X"3F",X"05",X"87",X"3F",X"0E",X"8F",X"3F",X"05",X"00",X"05",X"86",X"00",X"0E",X"8E",X"00",X"05", - X"3F",X"05",X"85",X"3F",X"0E",X"8D",X"3F",X"05",X"00",X"05",X"84",X"00",X"0E",X"8C",X"00",X"05", - X"3F",X"06",X"87",X"3F",X"0C",X"8F",X"3F",X"06",X"00",X"06",X"86",X"00",X"0C",X"8E",X"00",X"06", - X"83",X"3F",X"05",X"85",X"3F",X"0C",X"8D",X"3F",X"05",X"8B",X"82",X"00",X"05",X"84",X"00",X"0C", - X"8C",X"00",X"05",X"8A",X"3F",X"01",X"83",X"3F",X"05",X"87",X"3F",X"0A",X"8F",X"3F",X"05",X"8B", - X"3F",X"01",X"00",X"01",X"82",X"00",X"05",X"86",X"00",X"0A",X"8E",X"00",X"05",X"8A",X"00",X"01", - X"3F",X"02",X"83",X"3F",X"04",X"85",X"3F",X"0A",X"8D",X"3F",X"04",X"8B",X"3F",X"02",X"00",X"02", - X"82",X"00",X"04",X"84",X"00",X"0A",X"8C",X"00",X"04",X"8A",X"00",X"02",X"3F",X"03",X"83",X"3F", - X"04",X"87",X"3F",X"08",X"8F",X"3F",X"04",X"8B",X"3F",X"03",X"00",X"03",X"82",X"00",X"04",X"86", - X"00",X"08",X"8E",X"00",X"04",X"8A",X"00",X"03",X"3F",X"04",X"83",X"3F",X"03",X"85",X"3F",X"08", - X"8D",X"3F",X"03",X"8B",X"3F",X"04",X"00",X"04",X"82",X"00",X"03",X"84",X"00",X"08",X"8C",X"00", - X"03",X"8A",X"00",X"04",X"3F",X"05",X"83",X"3F",X"03",X"87",X"3F",X"06",X"8F",X"3F",X"03",X"8B", - X"3F",X"05",X"00",X"05",X"82",X"00",X"03",X"86",X"00",X"06",X"8E",X"00",X"03",X"8A",X"00",X"05", - X"3F",X"06",X"83",X"3F",X"02",X"85",X"3F",X"06",X"8D",X"3F",X"02",X"8B",X"3F",X"06",X"80",X"00", - X"05",X"82",X"00",X"02",X"84",X"00",X"06",X"8C",X"00",X"02",X"8A",X"00",X"05",X"88",X"78",X"81", - X"3F",X"05",X"83",X"3F",X"02",X"87",X"3F",X"04",X"8F",X"3F",X"02",X"8B",X"3F",X"05",X"89",X"78", - X"00",X"01",X"79",X"80",X"00",X"04",X"82",X"00",X"02",X"86",X"00",X"04",X"8E",X"00",X"02",X"8A", - X"00",X"04",X"88",X"79",X"00",X"01",X"00",X"02",X"7A",X"81",X"3F",X"04",X"83",X"3F",X"01",X"85", - X"3F",X"04",X"8D",X"3F",X"01",X"8B",X"3F",X"04",X"89",X"7A",X"00",X"02",X"00",X"03",X"7B",X"80", - X"00",X"03",X"82",X"00",X"01",X"84",X"00",X"04",X"8C",X"00",X"01",X"8A",X"00",X"03",X"88",X"7B", - X"00",X"03",X"00",X"04",X"78",X"81",X"3F",X"03",X"83",X"3F",X"01",X"87",X"3F",X"02",X"8F",X"3F", - X"01",X"8B",X"3F",X"03",X"89",X"78",X"00",X"04",X"00",X"05",X"79",X"80",X"00",X"02",X"82",X"00", - X"01",X"86",X"00",X"02",X"8E",X"00",X"01",X"8A",X"00",X"02",X"88",X"79",X"00",X"05",X"00",X"06", - X"7A",X"81",X"3F",X"02",X"83",X"85",X"3F",X"02",X"8D",X"8B",X"3F",X"02",X"89",X"7A",X"00",X"06", - X"00",X"07",X"7B",X"80",X"00",X"01",X"82",X"84",X"00",X"02",X"8C",X"8A",X"00",X"01",X"88",X"7B", - X"00",X"04",X"00",X"01",X"00",X"01",X"00",X"01",X"6E",X"6C",X"6B",X"00",X"05",X"78",X"81",X"3F", - X"01",X"83",X"87",X"8F",X"8B",X"3F",X"01",X"89",X"78",X"00",X"05",X"5F",X"65",X"67",X"6E",X"6C", - X"6B",X"00",X"06",X"79",X"80",X"82",X"86",X"8E",X"8A",X"88",X"79",X"00",X"06",X"5F",X"65",X"67", - X"6E",X"6C",X"6B",X"00",X"07",X"7A",X"81",X"83",X"8B",X"89",X"7A",X"00",X"07",X"5F",X"65",X"67", - X"6D",X"6C",X"6B",X"00",X"08",X"7B",X"7E",X"7F",X"7B",X"00",X"08",X"5E",X"65",X"67",X"6D",X"6C", - X"6A",X"00",X"09",X"7C",X"7D",X"00",X"09",X"5E",X"65",X"67",X"6D",X"6C",X"6A",X"00",X"02",X"42", - X"43",X"00",X"0B",X"52",X"52",X"52",X"52",X"00",X"02",X"64",X"66",X"6D",X"69",X"00",X"01",X"42", - X"43",X"40",X"41",X"00",X"0B",X"51",X"51",X"51",X"51",X"4E",X"4F",X"63",X"63",X"00",X"01",X"69", - X"00",X"01",X"40",X"41",X"00",X"0F",X"4E",X"4F",X"4C",X"4D",X"60",X"60",X"00",X"01",X"68",X"00", - X"03",X"50",X"50",X"50",X"50",X"50",X"50",X"00",X"09",X"4C",X"4D",X"00",X"04",X"00",X"01",X"63", - X"00",X"18",X"00",X"18",X"00",X"01",X"00",X"01",X"20",X"21",X"22",X"23",X"24",X"25",X"26",X"27", - X"26",X"25",X"24",X"23",X"22",X"21",X"20",X"21",X"22",X"23",X"24",X"25",X"26",X"27",X"26",X"25", - X"24",X"23",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"00",X"0C",X"19",X"19",X"19",X"07", - X"04",X"00",X"09",X"00",X"0C",X"19",X"19",X"15",X"16",X"17",X"19",X"00",X"08",X"00",X"0C",X"19", - X"07",X"05",X"06",X"19",X"19",X"19",X"00",X"07",X"00",X"0C",X"19",X"03",X"17",X"19",X"19",X"19", - X"19",X"19",X"00",X"06",X"00",X"0D",X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"00",X"05", - X"00",X"0D",X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"00",X"04",X"00",X"0E",X"19", - X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"19",X"00",X"03",X"00",X"0F",X"19",X"19",X"19",X"19", - X"19",X"07",X"04",X"19",X"19",X"00",X"02",X"00",X"10",X"19",X"19",X"19",X"15",X"16",X"17",X"19", - X"19",X"19",X"00",X"02",X"00",X"04",X"07",X"04",X"00",X"0B",X"19",X"07",X"05",X"06",X"19",X"00", - X"01",X"19",X"19",X"00",X"01",X"00",X"03",X"15",X"16",X"17",X"00",X"0C",X"03",X"17",X"19",X"19", - X"19",X"19",X"19",X"00",X"01",X"00",X"02",X"07",X"05",X"06",X"00",X"0E",X"19",X"19",X"19",X"19", - X"19",X"19",X"00",X"01",X"00",X"02",X"03",X"17",X"00",X"10",X"19",X"19",X"19",X"19",X"19",X"00", - X"01",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"10",X"4A",X"25",X"38",X"10",X"4A",X"A7", - X"48",X"10",X"48",X"E9",X"58",X"10",X"49",X"CB",X"68",X"10",X"4A",X"4D",X"78",X"10",X"49",X"4F", - X"00",X"00",X"49",X"60",X"10",X"00",X"4A",X"02",X"20",X"00",X"49",X"04",X"30",X"00",X"49",X"A6", - X"40",X"00",X"48",X"A8",X"50",X"00",X"4A",X"4A",X"60",X"00",X"49",X"6C",X"70",X"00",X"48",X"6E", - X"80",X"00",X"4A",X"F0",X"90",X"00",X"49",X"D2",X"A0",X"00",X"48",X"F4",X"B0",X"00",X"4A",X"76", - X"58",X"20",X"48",X"EB",X"70",X"20",X"4A",X"2E",X"80",X"20",X"49",X"50",X"88",X"20",X"4A",X"91", - X"C0",X"20",X"49",X"78",X"D0",X"20",X"48",X"BA",X"48",X"40",X"49",X"C9",X"C8",X"40",X"4A",X"19", - X"00",X"10",X"49",X"A0",X"10",X"10",X"49",X"22",X"20",X"10",X"4A",X"04",X"30",X"10",X"4A",X"66", - X"40",X"10",X"48",X"E8",X"50",X"10",X"49",X"CA",X"60",X"10",X"4A",X"4C",X"70",X"10",X"49",X"4E", - X"80",X"10",X"48",X"70",X"90",X"10",X"49",X"92",X"A0",X"10",X"4A",X"B4",X"B0",X"10",X"49",X"36", - X"60",X"10",X"48",X"CC",X"68",X"10",X"4A",X"ED",X"78",X"10",X"4A",X"0F",X"90",X"10",X"48",X"D2", - X"30",X"30",X"49",X"66",X"98",X"30",X"4A",X"33",X"B8",X"30",X"49",X"D7",X"C0",X"30",X"4A",X"F8", - X"7E",X"E6",X"02",X"C8",X"54",X"7D",X"C6",X"20",X"5F",X"1A",X"C6",X"08",X"47",X"13",X"1A",X"4F", - X"0A",X"FE",X"40",X"D8",X"FE",X"6F",X"D0",X"78",X"D6",X"08",X"57",X"59",X"2B",X"2B",X"7E",X"E6", - X"F7",X"77",X"0A",X"FE",X"50",X"DA",X"40",X"20",X"3E",X"00",X"02",X"06",X"88",X"21",X"90",X"4B", - X"0E",X"0F",X"CD",X"68",X"20",X"70",X"2C",X"2C",X"72",X"2C",X"73",X"C9",X"FF",X"FF",X"FF",X"FF", - X"E6",X"03",X"FE",X"02",X"C2",X"58",X"20",X"21",X"A0",X"4B",X"0E",X"FF",X"CD",X"68",X"20",X"36", - X"80",X"2C",X"2C",X"70",X"2C",X"73",X"C9",X"FF",X"3E",X"00",X"02",X"06",X"6B",X"C3",X"2D",X"20", - X"CD",X"76",X"08",X"C3",X"BC",X"33",X"FF",X"FF",X"7E",X"A1",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E", - X"A1",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E",X"A1",X"C8",X"2C",X"2C",X"2C",X"2C",X"C9",X"FF",X"FF", - X"3A",X"92",X"43",X"0F",X"0F",X"DA",X"9C",X"20",X"21",X"90",X"4B",X"E5",X"CD",X"B0",X"20",X"E1", - X"7D",X"C6",X"04",X"6F",X"FE",X"A0",X"C2",X"89",X"20",X"C9",X"FF",X"FF",X"21",X"A0",X"4B",X"E5", - X"CD",X"D4",X"20",X"E1",X"7D",X"C6",X"04",X"6F",X"FE",X"B0",X"C2",X"9F",X"20",X"C9",X"FF",X"FF", - X"7E",X"E6",X"0F",X"C8",X"35",X"7E",X"2C",X"2C",X"56",X"2C",X"5E",X"6F",X"26",X"2A",X"6E",X"26", - X"15",X"01",X"1E",X"00",X"EB",X"09",X"C3",X"26",X"21",X"21",X"C5",X"01",X"0C",X"00",X"C3",X"BC", - X"0F",X"FF",X"FF",X"FF",X"7E",X"A7",X"C8",X"35",X"7E",X"2C",X"2C",X"56",X"2C",X"5E",X"E6",X"07", - X"C6",X"F8",X"6F",X"26",X"20",X"6E",X"26",X"15",X"1B",X"1B",X"EB",X"01",X"DE",X"FF",X"C3",X"0C", - X"21",X"C3",X"98",X"2A",X"FF",X"FF",X"FF",X"FF",X"56",X"EB",X"E5",X"DF",X"D9",X"D3",X"CD",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23", - X"1A",X"77",X"13",X"09",X"C9",X"D0",X"01",X"DE",X"FF",X"7C",X"FE",X"43",X"C2",X"00",X"21",X"7D", - X"FE",X"40",X"DA",X"00",X"21",X"D6",X"20",X"6F",X"1C",X"1C",X"1C",X"FE",X"40",X"DA",X"0C",X"21", - X"D6",X"20",X"6F",X"1C",X"1C",X"1C",X"C3",X"18",X"21",X"90",X"21",X"C3",X"A5",X"21",X"F0",X"F9", - X"21",X"B8",X"43",X"7E",X"E6",X"04",X"C0",X"00",X"00",X"2E",X"92",X"7E",X"21",X"92",X"43",X"7E", - X"FE",X"C0",X"D2",X"84",X"21",X"E6",X"04",X"47",X"7E",X"0F",X"0F",X"0F",X"4F",X"E6",X"18",X"C6", - X"30",X"80",X"6F",X"26",X"22",X"56",X"23",X"5E",X"23",X"79",X"E6",X"07",X"86",X"6F",X"26",X"22", - X"7E",X"12",X"C9",X"FF",X"0F",X"0F",X"0F",X"4F",X"7E",X"E6",X"04",X"C6",X"48",X"6F",X"26",X"22", - X"56",X"23",X"5E",X"23",X"79",X"E6",X"07",X"86",X"6F",X"26",X"22",X"6E",X"EB",X"7E",X"23",X"A6", - X"01",X"DF",X"FF",X"09",X"A6",X"23",X"A6",X"E6",X"F0",X"FE",X"40",X"C0",X"01",X"1F",X"00",X"09", - X"EB",X"3E",X"08",X"32",X"62",X"43",X"E5",X"CD",X"C0",X"21",X"E1",X"C3",X"DC",X"07",X"22",X"CD", - X"7D",X"FE",X"70",X"C0",X"21",X"C2",X"43",X"7E",X"FE",X"50",X"D0",X"2E",X"C8",X"7E",X"E6",X"08", - X"C0",X"7E",X"F6",X"08",X"77",X"23",X"36",X"57",X"23",X"01",X"B8",X"1F",X"7B",X"FE",X"D8",X"CA", - X"E5",X"21",X"01",X"C0",X"2F",X"70",X"23",X"71",X"2E",X"EA",X"36",X"00",X"2C",X"36",X"00",X"C9", - X"0F",X"0F",X"C6",X"3A",X"5F",X"16",X"78",X"0F",X"D2",X"04",X"22",X"CD",X"40",X"0C",X"CD",X"78", - X"0F",X"CD",X"80",X"20",X"21",X"94",X"43",X"34",X"7E",X"FE",X"60",X"D8",X"2E",X"A4",X"36",X"02", - X"2E",X"60",X"36",X"FF",X"2E",X"B8",X"E5",X"E5",X"7E",X"E6",X"0E",X"FE",X"04",X"CA",X"F0",X"0C", - X"E1",X"E1",X"34",X"FE",X"00",X"CA",X"74",X"22",X"2E",X"BA",X"36",X"10",X"C3",X"80",X"03",X"FF", - X"4A",X"A9",X"50",X"00",X"48",X"6E",X"50",X"00",X"48",X"38",X"58",X"00",X"48",X"18",X"58",X"00", - X"49",X"44",X"50",X"00",X"49",X"F2",X"50",X"00",X"4A",X"D8",X"60",X"00",X"4A",X"99",X"60",X"00", - X"29",X"2A",X"2B",X"2A",X"2B",X"2A",X"29",X"28",X"61",X"62",X"61",X"60",X"61",X"62",X"61",X"60", - X"6C",X"70",X"6C",X"68",X"6C",X"70",X"6C",X"68",X"40",X"42",X"41",X"43",X"44",X"46",X"45",X"47", - X"48",X"4A",X"49",X"4B",X"2E",X"BB",X"36",X"08",X"2C",X"36",X"00",X"C3",X"80",X"03",X"03",X"15", - X"21",X"B9",X"43",X"7E",X"0F",X"0F",X"0F",X"E6",X"1F",X"C6",X"20",X"5F",X"16",X"4B",X"3E",X"00", - X"12",X"CD",X"17",X"02",X"7A",X"FE",X"47",X"C2",X"8E",X"22",X"CD",X"60",X"20",X"21",X"9B",X"43", - X"7E",X"0F",X"D8",X"2E",X"B9",X"35",X"7E",X"32",X"00",X"58",X"C0",X"2D",X"34",X"C3",X"80",X"03", - X"CD",X"C0",X"22",X"CD",X"E6",X"22",X"01",X"00",X"16",X"21",X"C2",X"43",X"C3",X"26",X"09",X"FF", - X"21",X"9C",X"43",X"3A",X"A0",X"43",X"2F",X"E6",X"60",X"CA",X"D6",X"22",X"34",X"E6",X"40",X"C8", - X"35",X"35",X"C9",X"FF",X"FF",X"FF",X"3A",X"9B",X"43",X"0F",X"00",X"D0",X"7E",X"35",X"A7",X"F0", - X"34",X"34",X"C9",X"FF",X"FF",X"FF",X"21",X"9C",X"43",X"7E",X"A7",X"F2",X"0B",X"23",X"2F",X"3C", - X"FE",X"7C",X"DA",X"F9",X"22",X"3E",X"7C",X"36",X"84",X"CD",X"26",X"23",X"21",X"C2",X"43",X"7E", - X"91",X"77",X"FE",X"08",X"D0",X"36",X"08",X"C3",X"21",X"23",X"FF",X"FE",X"7C",X"DA",X"13",X"23", - X"3E",X"7C",X"77",X"CD",X"26",X"23",X"21",X"C2",X"43",X"7E",X"81",X"77",X"FE",X"C1",X"D8",X"36", - X"C0",X"2E",X"9C",X"36",X"00",X"C9",X"0F",X"0F",X"0F",X"4F",X"E6",X"07",X"C6",X"50",X"5F",X"16", - X"23",X"1A",X"47",X"79",X"0F",X"0F",X"0F",X"E6",X"01",X"4F",X"3A",X"9B",X"43",X"E6",X"07",X"C6", - X"58",X"5F",X"16",X"23",X"1A",X"A0",X"C8",X"0C",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"FE",X"E0",X"D0",X"A9",X"D4",X"E0",X"F8",X"80", - X"21",X"C0",X"1B",X"0E",X"02",X"CD",X"D0",X"01",X"CD",X"76",X"08",X"21",X"B9",X"43",X"3E",X"FF", - X"77",X"32",X"00",X"58",X"2E",X"94",X"34",X"7E",X"FE",X"01",X"C2",X"81",X"23",X"2E",X"67",X"36", - X"FF",X"FE",X"C0",X"C0",X"2E",X"B8",X"34",X"C3",X"80",X"03",X"36",X"00",X"2D",X"7E",X"FE",X"5E", - X"CD",X"F8",X"24",X"CD",X"A0",X"24",X"CD",X"60",X"20",X"CD",X"78",X"0F",X"CD",X"F0",X"32",X"CD", - X"A8",X"31",X"C3",X"76",X"32",X"FF",X"FF",X"FF",X"CD",X"76",X"08",X"21",X"B8",X"43",X"7E",X"E6", - X"04",X"47",X"2E",X"92",X"7E",X"E6",X"03",X"B0",X"07",X"C6",X"C4",X"6F",X"26",X"23",X"7E",X"2C", - X"6E",X"67",X"E9",X"FF",X"21",X"5C",X"24",X"30",X"24",X"3C",X"24",X"48",X"0A",X"9C",X"0A",X"BC", - X"09",X"D4",X"37",X"D0",X"FF",X"FF",X"21",X"B8",X"43",X"7E",X"E6",X"0F",X"FE",X"01",X"CA",X"98", - X"3A",X"FE",X"03",X"CA",X"98",X"3A",X"FE",X"05",X"CA",X"D0",X"3A",X"FE",X"07",X"CA",X"D0",X"3A", - X"FE",X"09",X"D8",X"FE",X"0B",X"DA",X"02",X"3B",X"CD",X"02",X"3B",X"FF",X"98",X"3F",X"FF",X"FF", - X"00",X"00",X"00",X"21",X"DC",X"4B",X"7E",X"D6",X"08",X"57",X"2C",X"5E",X"21",X"BA",X"43",X"36", - X"10",X"2E",X"A4",X"36",X"02",X"2C",X"35",X"7E",X"C8",X"2D",X"36",X"06",X"FE",X"1E",X"D8",X"CA", - X"80",X"03",X"FE",X"1F",X"CA",X"A0",X"03",X"D6",X"20",X"CD",X"B8",X"0B",X"C3",X"D4",X"09",X"7E", - X"21",X"70",X"4B",X"CD",X"54",X"24",X"2E",X"74",X"C3",X"54",X"24",X"FF",X"21",X"78",X"4B",X"CD", - X"54",X"24",X"2E",X"7C",X"C3",X"54",X"24",X"FF",X"21",X"80",X"4B",X"CD",X"54",X"24",X"2E",X"84", - X"C3",X"54",X"24",X"FF",X"7E",X"E6",X"08",X"C8",X"2C",X"7E",X"FE",X"28",X"D0",X"7D",X"C6",X"41", - X"6F",X"7E",X"C6",X"08",X"57",X"2C",X"7E",X"C6",X"02",X"5F",X"1A",X"A7",X"C0",X"3E",X"3E",X"12", - X"C9",X"00",X"1C",X"C3",X"D6",X"0A",X"78",X"81",X"CD",X"95",X"24",X"2E",X"D3",X"77",X"21",X"BB", - X"43",X"3E",X"08",X"96",X"07",X"2E",X"9A",X"86",X"07",X"47",X"2E",X"6F",X"7E",X"E6",X"1E",X"80", - X"32",X"D1",X"4B",X"C9",X"1F",X"80",X"0D",X"C8",X"80",X"0D",X"C8",X"80",X"0D",X"C8",X"87",X"C9", - X"21",X"95",X"43",X"7E",X"A7",X"C0",X"2E",X"B9",X"7E",X"A7",X"C2",X"B1",X"24",X"2E",X"95",X"36", - X"FF",X"47",X"2E",X"B8",X"7E",X"E6",X"F0",X"4F",X"21",X"60",X"1F",X"E5",X"CD",X"CD",X"24",X"E1", - X"7D",X"C6",X"04",X"6F",X"FE",X"00",X"C2",X"BB",X"24",X"C9",X"FF",X"FF",X"FF",X"7E",X"B8",X"C0", - X"2C",X"7E",X"A9",X"E6",X"10",X"C0",X"79",X"BE",X"D8",X"2C",X"56",X"2C",X"5E",X"7D",X"E6",X"04", - X"C6",X"EC",X"6F",X"26",X"24",X"CD",X"DC",X"07",X"03",X"C9",X"FF",X"FF",X"70",X"72",X"71",X"73", - X"74",X"76",X"75",X"77",X"FF",X"FF",X"FF",X"FF",X"CD",X"1A",X"25",X"79",X"A7",X"C8",X"21",X"B9", - X"43",X"7E",X"91",X"77",X"32",X"00",X"58",X"E6",X"07",X"C0",X"CD",X"50",X"06",X"21",X"B1",X"43", - X"7E",X"FE",X"1F",X"C0",X"36",X"3F",X"C9",X"FF",X"FF",X"FF",X"21",X"95",X"43",X"7E",X"2F",X"E6", - X"04",X"4F",X"2E",X"B9",X"7E",X"E6",X"C0",X"07",X"07",X"81",X"07",X"07",X"07",X"C3",X"26",X"23", - X"3A",X"00",X"70",X"2F",X"E6",X"10",X"0F",X"0F",X"0F",X"00",X"81",X"07",X"07",X"07",X"4F",X"FE", - X"40",X"DA",X"26",X"23",X"0E",X"40",X"C3",X"26",X"23",X"5E",X"5F",X"06",X"04",X"C3",X"C4",X"00", - X"21",X"BA",X"43",X"3E",X"20",X"96",X"0F",X"E6",X"0F",X"57",X"2E",X"9F",X"86",X"4F",X"2D",X"7E", - X"D6",X"0A",X"92",X"FE",X"E0",X"DA",X"69",X"25",X"AF",X"47",X"2E",X"9A",X"7E",X"82",X"FE",X"40", - X"DA",X"75",X"25",X"3E",X"40",X"C6",X"88",X"57",X"2E",X"92",X"7E",X"E6",X"06",X"07",X"C6",X"70", - X"6F",X"26",X"4B",X"E5",X"CD",X"94",X"25",X"E1",X"7D",X"C6",X"10",X"6F",X"E5",X"CD",X"94",X"25", - X"E1",X"C9",X"FF",X"FF",X"7E",X"E6",X"08",X"C8",X"2C",X"2C",X"7E",X"B8",X"D8",X"B9",X"D0",X"2D", - X"7E",X"FE",X"30",X"7A",X"D2",X"A9",X"25",X"C6",X"20",X"2C",X"2C",X"BE",X"D8",X"4E",X"2D",X"46", - X"C3",X"B7",X"25",X"00",X"4F",X"2D",X"46",X"3A",X"B8",X"43",X"16",X"03",X"FE",X"10",X"DA",X"CA", - X"25",X"16",X"04",X"FE",X"20",X"DA",X"CA",X"25",X"16",X"05",X"21",X"CC",X"43",X"7E",X"E6",X"08", - X"CA",X"E0",X"25",X"7D",X"C6",X"04",X"6F",X"15",X"C2",X"CD",X"25",X"E1",X"E1",X"C9",X"FF",X"FF", - X"78",X"C6",X"04",X"47",X"79",X"C6",X"0C",X"4F",X"36",X"08",X"2C",X"78",X"0F",X"E6",X"03",X"57", - X"79",X"E6",X"04",X"82",X"C6",X"58",X"77",X"2C",X"70",X"2C",X"71",X"E1",X"E1",X"C9",X"FF",X"FF", - X"00",X"00",X"00",X"00",X"00",X"3A",X"B9",X"43",X"2F",X"0F",X"0F",X"0F",X"E6",X"1F",X"21",X"D2", - X"4B",X"77",X"2C",X"3A",X"D1",X"4B",X"BE",X"DA",X"50",X"26",X"3A",X"D5",X"4B",X"57",X"E6",X"03", - X"5F",X"3A",X"9B",X"43",X"07",X"07",X"E6",X"0C",X"83",X"C6",X"D0",X"6F",X"26",X"3E",X"7A",X"0F", - X"0F",X"E6",X"07",X"86",X"57",X"3A",X"B9",X"43",X"92",X"32",X"B9",X"43",X"32",X"00",X"58",X"3A", - X"9B",X"43",X"0F",X"D2",X"D0",X"26",X"CD",X"68",X"26",X"C3",X"AA",X"26",X"C2",X"3A",X"26",X"3A", - X"2C",X"3A",X"9B",X"43",X"07",X"07",X"E6",X"0C",X"86",X"C6",X"D0",X"6F",X"26",X"3E",X"3A",X"B9", - X"43",X"86",X"C3",X"39",X"26",X"D2",X"AE",X"26",X"3A",X"6E",X"43",X"C6",X"02",X"47",X"3A",X"9A", - X"43",X"57",X"0F",X"0F",X"E6",X"0F",X"80",X"47",X"21",X"BB",X"43",X"3E",X"08",X"96",X"0F",X"E6", - X"03",X"80",X"47",X"5E",X"00",X"3A",X"D6",X"4B",X"C6",X"E0",X"6F",X"26",X"3E",X"78",X"BE",X"DA", - X"93",X"26",X"46",X"7A",X"E6",X"F8",X"80",X"47",X"7B",X"FE",X"04",X"D2",X"A4",X"26",X"2F",X"00", - X"E6",X"03",X"80",X"47",X"78",X"32",X"D5",X"4B",X"C9",X"58",X"21",X"D3",X"4B",X"7E",X"35",X"A7", - X"C0",X"34",X"2E",X"D6",X"7E",X"FE",X"0C",X"D0",X"FE",X"08",X"D8",X"2C",X"96",X"07",X"47",X"3A", - X"6F",X"43",X"E6",X"03",X"2E",X"D4",X"77",X"2F",X"E6",X"03",X"3C",X"4F",X"C3",X"76",X"24",X"C9", - X"21",X"A8",X"4B",X"01",X"00",X"08",X"11",X"00",X"80",X"7E",X"A7",X"CA",X"E5",X"26",X"7A",X"07", - X"D2",X"E4",X"26",X"51",X"59",X"0C",X"7D",X"90",X"6F",X"FE",X"68",X"C2",X"D9",X"26",X"3A",X"D2", - X"4B",X"82",X"83",X"E6",X"1F",X"32",X"D6",X"4B",X"7B",X"92",X"32",X"D7",X"4B",X"C9",X"FF",X"FF", - X"21",X"A2",X"43",X"7E",X"A7",X"C8",X"2C",X"7E",X"E6",X"01",X"07",X"07",X"C6",X"83",X"6F",X"3E", - X"FF",X"32",X"97",X"43",X"11",X"70",X"43",X"CD",X"48",X"27",X"1C",X"1C",X"1C",X"7B",X"FE",X"80", - X"C2",X"17",X"27",X"1E",X"9D",X"3A",X"A4",X"43",X"FE",X"06",X"DA",X"39",X"27",X"1A",X"47",X"0E", - X"00",X"CD",X"20",X"02",X"AF",X"12",X"32",X"97",X"43",X"3A",X"97",X"43",X"A7",X"CC",X"68",X"27", - X"CD",X"A8",X"27",X"C3",X"43",X"3B",X"FF",X"FF",X"1A",X"1C",X"E6",X"1F",X"FE",X"01",X"C0",X"1A", - X"A7",X"C8",X"0F",X"0F",X"0F",X"0F",X"47",X"E6",X"F0",X"4F",X"78",X"E6",X"0F",X"47",X"CD",X"20", - X"02",X"AF",X"12",X"32",X"97",X"43",X"C9",X"FF",X"E5",X"11",X"61",X"42",X"06",X"06",X"3A",X"A3", - X"43",X"A7",X"CA",X"78",X"27",X"11",X"21",X"40",X"CD",X"C4",X"00",X"E1",X"11",X"BD",X"43",X"EB", - X"7E",X"2C",X"B6",X"C8",X"2C",X"EB",X"CD",X"14",X"03",X"D0",X"3A",X"A3",X"43",X"C6",X"90",X"6F", - X"34",X"CD",X"67",X"03",X"3E",X"FF",X"32",X"6A",X"43",X"2E",X"BE",X"7E",X"36",X"00",X"0F",X"0F", - X"0F",X"0F",X"2D",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"8C",X"43",X"7E",X"32",X"00",X"60",X"2C", - X"7E",X"32",X"00",X"68",X"36",X"0F",X"2D",X"36",X"0F",X"C9",X"C9",X"FF",X"FF",X"21",X"63",X"43", - X"7E",X"A7",X"C8",X"FE",X"40",X"DA",X"CA",X"27",X"36",X"40",X"35",X"2E",X"8C",X"36",X"8F",X"E1", - X"C9",X"FF",X"21",X"61",X"43",X"06",X"7F",X"7E",X"A7",X"CA",X"E2",X"27",X"06",X"FF",X"3D",X"E6", - X"02",X"77",X"78",X"30",X"C9",X"E9",X"CD",X"7C",X"3D",X"CD",X"98",X"3D",X"78",X"A7",X"C8",X"21", - X"8D",X"43",X"36",X"2F",X"79",X"A7",X"C8",X"0F",X"E6",X"06",X"F6",X"20",X"77",X"C9",X"C9",X"FF", - X"10",X"24",X"10",X"00",X"10",X"24",X"10",X"4C",X"10",X"74",X"10",X"A8",X"10",X"74",X"10",X"A8", - X"10",X"D0",X"10",X"FC",X"10",X"D0",X"10",X"FC",X"10",X"D0",X"10",X"FC",X"10",X"D0",X"10",X"FC", - X"11",X"C2",X"11",X"24",X"11",X"C2",X"11",X"24",X"11",X"4E",X"11",X"86",X"11",X"4E",X"11",X"EA", - X"11",X"86",X"12",X"18",X"12",X"46",X"12",X"18",X"12",X"46",X"12",X"18",X"12",X"46",X"12",X"18", - X"2D",X"12",X"2C",X"00",X"2D",X"12",X"2C",X"00",X"2C",X"D4",X"2D",X"5C",X"2C",X"D4",X"2C",X"36", - X"2D",X"32",X"2C",X"64",X"2C",X"A8",X"2D",X"32",X"2C",X"A8",X"2C",X"64",X"2C",X"A8",X"2D",X"32", - X"12",X"70",X"13",X"78",X"12",X"70",X"13",X"78",X"12",X"A2",X"12",X"E0",X"13",X"A2",X"13",X"0E", - X"13",X"A2",X"13",X"D0",X"13",X"0E",X"13",X"44",X"13",X"0E",X"13",X"D0",X"13",X"44",X"13",X"0E", - X"2E",X"AE",X"2E",X"74",X"2E",X"AE",X"2E",X"56",X"2E",X"74",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C", - X"2E",X"74",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C", - X"2D",X"E8",X"2D",X"8A",X"2D",X"E8",X"2D",X"AC",X"2E",X"28",X"2D",X"C4",X"2E",X"28",X"2D",X"C4", - X"2D",X"AC",X"2D",X"C4",X"2E",X"28",X"2D",X"C4",X"2E",X"28",X"2D",X"C4",X"2E",X"28",X"2D",X"C4", - X"2C",X"00",X"2C",X"D4",X"2C",X"00",X"2F",X"6A",X"2F",X"94",X"2C",X"D4",X"2F",X"6A",X"2C",X"36", - X"2F",X"94",X"2C",X"64",X"2C",X"A8",X"2C",X"64",X"2C",X"A8",X"2F",X"94",X"2C",X"64",X"2C",X"A8", - X"12",X"70",X"12",X"A2",X"12",X"70",X"12",X"A2",X"2F",X"42",X"13",X"0E",X"12",X"E0",X"2F",X"1C", - X"13",X"0E",X"2F",X"1C",X"2F",X"42",X"13",X"44",X"13",X"44",X"2F",X"1C",X"2F",X"42",X"13",X"44", - X"41",X"30",X"00",X"18",X"31",X"28",X"C8",X"18",X"51",X"40",X"10",X"A0",X"13",X"20",X"C8",X"A0", - X"41",X"40",X"C8",X"28",X"61",X"40",X"00",X"28",X"12",X"20",X"60",X"A0",X"61",X"50",X"40",X"A0", - X"61",X"38",X"28",X"28",X"51",X"30",X"C8",X"38",X"13",X"20",X"00",X"18",X"15",X"40",X"00",X"A0", - X"61",X"50",X"C8",X"A0",X"41",X"20",X"28",X"28",X"31",X"20",X"A0",X"A0",X"13",X"20",X"C8",X"18", - X"13",X"04",X"00",X"18",X"51",X"30",X"08",X"18",X"13",X"04",X"C8",X"18",X"31",X"20",X"B8",X"18", - X"13",X"30",X"80",X"A0",X"51",X"28",X"C8",X"38",X"61",X"40",X"28",X"28",X"13",X"08",X"00",X"A0", - X"51",X"40",X"00",X"A0",X"13",X"08",X"70",X"A0",X"51",X"40",X"C8",X"A0",X"32",X"30",X"C8",X"18", - X"22",X"20",X"00",X"18",X"31",X"30",X"00",X"28",X"51",X"40",X"B8",X"A0",X"31",X"20",X"28",X"A0", - X"11",X"10",X"50",X"48",X"13",X"30",X"00",X"18",X"41",X"40",X"68",X"48",X"12",X"10",X"C8",X"18", - X"21",X"30",X"70",X"48",X"21",X"20",X"C8",X"38",X"31",X"30",X"60",X"48",X"11",X"10",X"00",X"28", - X"21",X"20",X"58",X"48",X"21",X"30",X"00",X"28",X"31",X"30",X"70",X"48",X"21",X"20",X"C8",X"28", - X"31",X"20",X"50",X"48",X"13",X"30",X"C8",X"18",X"21",X"20",X"68",X"48",X"21",X"40",X"00",X"18", - X"31",X"30",X"58",X"48",X"31",X"20",X"00",X"38",X"21",X"20",X"60",X"48",X"31",X"30",X"C8",X"38", - X"31",X"20",X"50",X"48",X"31",X"30",X"C8",X"28",X"21",X"20",X"58",X"48",X"31",X"30",X"00",X"38", - X"41",X"40",X"70",X"48",X"41",X"38",X"00",X"18",X"11",X"10",X"68",X"48",X"41",X"40",X"C8",X"18", - X"21",X"30",X"60",X"48",X"41",X"20",X"C8",X"18",X"31",X"30",X"70",X"48",X"13",X"20",X"00",X"18", - X"F2",X"20",X"50",X"20",X"4A",X"20",X"44",X"20",X"34",X"40",X"2A",X"40",X"1C",X"60",X"0E",X"60", - X"00",X"60",X"1C",X"60",X"00",X"60",X"0E",X"60",X"2A",X"40",X"3E",X"20",X"34",X"40",X"3E",X"20", - X"F2",X"20",X"50",X"20",X"4A",X"20",X"44",X"20",X"34",X"40",X"2A",X"40",X"1C",X"60",X"0E",X"60", - X"1C",X"60",X"2A",X"40",X"3E",X"20",X"34",X"40",X"3E",X"20",X"00",X"00",X"00",X"00",X"00",X"00", - X"F2",X"20",X"50",X"20",X"4A",X"20",X"44",X"20",X"34",X"40",X"2A",X"40",X"1C",X"60",X"2A",X"40", - X"34",X"40",X"3E",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"F2",X"C4",X"BB",X"B2",X"A9",X"A0",X"B2",X"A9",X"A0",X"B2",X"A9",X"A0",X"00",X"00",X"00",X"00", - X"F2",X"C4",X"BB",X"B2",X"BB",X"B2",X"A9",X"A0",X"A9",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", - X"F2",X"C4",X"BB",X"C4",X"B2",X"BB",X"A9",X"B2",X"A0",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"56",X"EB",X"E5",X"D9",X"D3",X"CD",X"E5",X"EB",X"C3",X"98",X"30",X"FF",X"FF",X"FF",X"FF",X"FF", - X"15",X"90",X"15",X"84",X"15",X"6C",X"17",X"CA",X"15",X"6C",X"17",X"CA",X"17",X"A0",X"17",X"70", - X"17",X"A0",X"17",X"70",X"17",X"CA",X"17",X"70",X"17",X"A0",X"17",X"CA",X"15",X"6C",X"15",X"78", - X"08",X"00",X"00",X"FF",X"02",X"00",X"F8",X"FF",X"08",X"02",X"02",X"FF",X"04",X"00",X"FA",X"FF", - X"08",X"04",X"04",X"FF",X"06",X"00",X"FC",X"FF",X"08",X"06",X"06",X"FF",X"08",X"00",X"FE",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"03",X"03",X"03",X"03",X"FF",X"FF",X"FF",X"03",X"02",X"02",X"02",X"02",X"03",X"FF", - X"03",X"02",X"02",X"01",X"01",X"02",X"02",X"03",X"03",X"02",X"01",X"00",X"00",X"01",X"02",X"03", - X"03",X"02",X"01",X"00",X"00",X"01",X"02",X"03",X"03",X"02",X"02",X"01",X"01",X"02",X"02",X"03", - X"FF",X"03",X"02",X"02",X"02",X"02",X"03",X"FF",X"FF",X"FF",X"03",X"03",X"03",X"03",X"FF",X"FF", - X"FF",X"FF",X"01",X"01",X"01",X"01",X"FF",X"FF",X"FF",X"01",X"03",X"03",X"03",X"03",X"01",X"FF", - X"01",X"03",X"03",X"00",X"00",X"03",X"03",X"01",X"01",X"03",X"00",X"02",X"02",X"00",X"03",X"01", - X"01",X"03",X"00",X"02",X"02",X"00",X"03",X"01",X"01",X"03",X"03",X"00",X"00",X"03",X"03",X"01", - X"FF",X"01",X"03",X"03",X"03",X"03",X"01",X"FF",X"FF",X"FF",X"01",X"01",X"01",X"01",X"FF",X"FF", - X"A0",X"42",X"04",X"00",X"AB",X"42",X"88",X"40",X"B6",X"41",X"88",X"00",X"A0",X"42",X"0C",X"40", - X"AB",X"42",X"46",X"00",X"B6",X"41",X"C6",X"40",X"A0",X"42",X"4A",X"00",X"A9",X"41",X"CA",X"40", - X"1B",X"1C",X"2E",X"2D",X"2E",X"2D",X"1C",X"1B",X"00",X"00",X"00",X"CE",X"B9",X"CE",X"B9",X"B7", - X"B6",X"B7",X"B6",X"00",X"00",X"00",X"FC",X"FD",X"FE",X"FF",X"FC",X"FD",X"FE",X"FF",X"00",X"00", - X"38",X"10",X"48",X"E7",X"48",X"20",X"48",X"49",X"68",X"30",X"4A",X"8D",X"C0",X"40",X"4A",X"98", - X"B0",X"50",X"49",X"76",X"90",X"60",X"48",X"72",X"50",X"70",X"49",X"6A",X"28",X"00",X"49",X"E5", - X"08",X"10",X"49",X"41",X"55",X"20",X"4A",X"0B",X"88",X"30",X"49",X"71",X"A8",X"40",X"4A",X"F5", - X"D0",X"50",X"48",X"77",X"78",X"60",X"48",X"6F",X"28",X"70",X"48",X"84",X"10",X"00",X"4A",X"FE", - X"12",X"12",X"11",X"10",X"1F",X"1E",X"1F",X"10",X"10",X"11",X"12",X"13",X"14",X"14",X"15",X"16", - X"17",X"18",X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"11",X"12",X"13", - X"14",X"0F",X"0F",X"0F",X"0F",X"15",X"16",X"17",X"18",X"17",X"16",X"15",X"15",X"16",X"17",X"18", - X"18",X"19",X"19",X"19",X"00",X"FF",X"13",X"13",X"13",X"14",X"14",X"15",X"15",X"14",X"14",X"13", - X"12",X"11",X"11",X"10",X"1F",X"1E",X"1E",X"1D",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"17",X"16", - X"15",X"0F",X"0F",X"13",X"12",X"12",X"11",X"11",X"11",X"11",X"10",X"10",X"1F",X"1F",X"1F",X"1F", - X"1F",X"00",X"FF",X"FF",X"13",X"13",X"13",X"12",X"12",X"12",X"11",X"10",X"10",X"10",X"10",X"1F", - X"1E",X"1D",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"11",X"12",X"13",X"14",X"14",X"15",X"16",X"17", - X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"18",X"18",X"18",X"18",X"17",X"16", - X"15",X"0F",X"0F",X"0F",X"0F",X"13",X"13",X"12",X"12",X"12",X"12",X"11",X"11",X"11",X"11",X"10", - X"10",X"10",X"1F",X"1F",X"1F",X"00",X"FF",X"FF",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10", - X"10",X"10",X"10",X"11",X"13",X"14",X"15",X"17",X"18",X"17",X"16",X"15",X"0F",X"06",X"08",X"08", - X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"13",X"12",X"11",X"11",X"11",X"11",X"11", - X"11",X"11",X"00",X"FF",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"0E",X"0E",X"05", - X"1C",X"1B",X"1A",X"19",X"18",X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"13",X"12", - X"11",X"10",X"10",X"10",X"10",X"10",X"10",X"11",X"12",X"13",X"0F",X"06",X"0A",X"0A",X"0B",X"0B", - X"0B",X"0B",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0C",X"00",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"11",X"11",X"12",X"12",X"13",X"13",X"14",X"14",X"14",X"0F",X"0F",X"0F",X"0F",X"0F", - X"0F",X"04",X"02",X"02",X"02",X"02",X"02",X"02",X"03",X"1C",X"1B",X"1A",X"1A",X"19",X"19",X"00", - X"FF",X"FF",X"11",X"11",X"12",X"12",X"13",X"13",X"14",X"15",X"17",X"18",X"19",X"1B",X"1C",X"1D", - X"1F",X"10",X"11",X"11",X"12",X"12",X"13",X"13",X"14",X"14",X"0F",X"0F",X"04",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"03",X"1C",X"1D",X"1E",X"1F",X"1F",X"00",X"FF",X"13",X"13",X"13",X"13", - X"13",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"1A",X"19",X"18",X"17",X"16",X"15", - X"14",X"14",X"14",X"13",X"13",X"0F",X"04",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"03",X"1C",X"1D",X"1E",X"1F",X"1F",X"1F",X"1F",X"00",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F", - X"0F",X"0F",X"06",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"09",X"0A",X"0B", - X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"00",X"FF",X"FF",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0A",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"00",X"FF",X"FF",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"11",X"12",X"12",X"13",X"0F", - X"06",X"0B",X"0B",X"0B",X"0A",X"09",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0B",X"0B",X"0B",X"0B",X"00",X"FF",X"FF",X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17", - X"18",X"18",X"18",X"19",X"1A",X"1A",X"1B",X"1C",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10", - X"10",X"10",X"11",X"12",X"12",X"13",X"14",X"14",X"14",X"14",X"15",X"15",X"16",X"16",X"17",X"18", - X"18",X"18",X"19",X"1A",X"1A",X"0F",X"0F",X"0F",X"13",X"12",X"11",X"10",X"10",X"1F",X"1E",X"0F", - X"0F",X"16",X"17",X"17",X"17",X"17",X"00",X"FF",X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17", - X"18",X"18",X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10",X"10", - X"11",X"12",X"12",X"13",X"0F",X"0F",X"0F",X"15",X"15",X"16",X"16",X"16",X"17",X"17",X"17",X"17", - X"17",X"17",X"17",X"17",X"00",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"06", - X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0A",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08", - X"08",X"00",X"FF",X"FF",X"08",X"08",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0A",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"FF",X"FF",X"1C",X"1B",X"1A",X"19", - X"18",X"18",X"17",X"16",X"15",X"0F",X"06",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0A",X"09", - X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"FF",X"FF",X"16",X"15", - X"14",X"14",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1E",X"1D",X"1C",X"1C",X"1C",X"1B",X"1A",X"1A", - X"19",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"14",X"14",X"14",X"13",X"12",X"12",X"11", - X"11",X"10",X"10",X"10",X"1F",X"1E",X"1D",X"0F",X"0F",X"0F",X"15",X"16",X"17",X"18",X"18",X"18", - X"19",X"1A",X"0F",X"0F",X"0F",X"13",X"12",X"12",X"11",X"11",X"00",X"FF",X"16",X"15",X"14",X"14", - X"13",X"12",X"11",X"10",X"10",X"1F",X"1E",X"1D",X"1C",X"1C",X"1C",X"1C",X"1B",X"1A",X"1A",X"19", - X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"14",X"14",X"13",X"13",X"12",X"12",X"12", - X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"FF",X"FF",X"15",X"15",X"15",X"15", - X"15",X"15",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1D",X"1E",X"1F",X"10",X"11",X"12",X"12", - X"13",X"0F",X"0F",X"0F",X"06",X"0B",X"0B",X"0B",X"0B",X"0D",X"0D",X"0D",X"0B",X"0B",X"0B",X"0B", - X"00",X"FF",X"0B",X"0B",X"0D",X"0D",X"0B",X"0D",X"0B",X"0D",X"0B",X"0B",X"0A",X"0A",X"0A",X"09", - X"09",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0D",X"0D", - X"0B",X"0B",X"0D",X"0D",X"0B",X"0B",X"0D",X"00",X"FF",X"FF",X"13",X"13",X"13",X"13",X"13",X"13", - X"13",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"1A",X"19",X"18",X"17",X"16",X"15", - X"14",X"0F",X"0F",X"0F",X"0F",X"0F",X"06",X"09",X"08",X"08",X"0E",X"0E",X"0E",X"08",X"08",X"0E", - X"0E",X"00",X"FF",X"FF",X"11",X"10",X"1F",X"10",X"11",X"10",X"1F",X"10",X"11",X"10",X"1F",X"10", - X"11",X"11",X"12",X"0F",X"06",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0A", - X"09",X"08",X"08",X"08",X"0E",X"0E",X"0E",X"0E",X"08",X"08",X"08",X"0E",X"0E",X"00",X"FF",X"FF", - X"7E",X"E6",X"1F",X"C8",X"35",X"7E",X"CA",X"EC",X"2F",X"E6",X"E7",X"C2",X"95",X"0F",X"2C",X"46", - X"2C",X"56",X"2C",X"5E",X"7B",X"E6",X"1F",X"FE",X"04",X"D8",X"1D",X"21",X"E0",X"FF",X"19",X"36", - X"20",X"21",X"E2",X"4B",X"70",X"06",X"02",X"C3",X"C4",X"00",X"FF",X"FF",X"2C",X"2C",X"2C",X"7E", - X"E6",X"1F",X"FE",X"04",X"D8",X"35",X"2D",X"2D",X"2D",X"7E",X"C3",X"96",X"0F",X"FF",X"FF",X"FF", - X"21",X"93",X"43",X"7E",X"34",X"07",X"E6",X"06",X"C6",X"16",X"6F",X"26",X"30",X"7E",X"23",X"6E", - X"67",X"E9",X"FF",X"FF",X"FF",X"FF",X"30",X"20",X"30",X"A0",X"31",X"94",X"31",X"40",X"FF",X"FF", - X"21",X"D0",X"4B",X"7E",X"A7",X"C0",X"23",X"23",X"7E",X"A7",X"CA",X"3F",X"30",X"35",X"7E",X"E6", - X"03",X"C0",X"2D",X"7E",X"E6",X"F0",X"C8",X"7E",X"D6",X"10",X"77",X"2D",X"36",X"01",X"C9",X"3E", - X"FF",X"32",X"D9",X"4B",X"11",X"D1",X"4B",X"21",X"B4",X"43",X"7E",X"2C",X"6E",X"67",X"06",X"04", - X"CD",X"E0",X"05",X"7D",X"E6",X"7F",X"C2",X"5D",X"30",X"7D",X"C6",X"80",X"6F",X"7D",X"32",X"B5", - X"43",X"CD",X"78",X"30",X"0F",X"E6",X"3F",X"4F",X"21",X"D2",X"4B",X"7E",X"91",X"36",X"03",X"D8", - X"FE",X"04",X"D8",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"B8",X"43",X"7E",X"0F",X"0F",X"E6",X"1C", - X"4F",X"2C",X"2C",X"3E",X"10",X"96",X"81",X"4F",X"2E",X"9A",X"7E",X"0F",X"E6",X"7F",X"FE",X"20", - X"DA",X"95",X"30",X"3E",X"1F",X"81",X"4F",X"C9",X"C3",X"8B",X"38",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"D0",X"4B",X"7E",X"FE",X"01",X"C0",X"21",X"70",X"4B",X"01",X"08",X"00",X"7E",X"E6",X"08", - X"CA",X"B4",X"30",X"04",X"2C",X"2C",X"2C",X"2C",X"0D",X"C2",X"AD",X"30",X"21",X"E4",X"4B",X"70", - X"21",X"D0",X"4B",X"36",X"00",X"3A",X"BA",X"43",X"90",X"C8",X"36",X"02",X"2C",X"47",X"7E",X"E6", - X"0F",X"2E",X"D7",X"77",X"B8",X"D8",X"70",X"C9",X"4B",X"7E",X"FE",X"02",X"C0",X"34",X"2E",X"D3", - X"3A",X"C2",X"43",X"96",X"16",X"00",X"D2",X"ED",X"30",X"2F",X"3C",X"16",X"20",X"47",X"0F",X"0F", - X"0F",X"E6",X"1F",X"5F",X"CD",X"78",X"30",X"0F",X"00",X"E6",X"3F",X"4F",X"78",X"E6",X"0F",X"91", - X"D2",X"05",X"31",X"3E",X"00",X"83",X"FE",X"20",X"DA",X"0D",X"31",X"3E",X"1F",X"E6",X"1E",X"B2", - X"47",X"21",X"D4",X"4B",X"7E",X"FE",X"40",X"3E",X"00",X"D2",X"1E",X"31",X"3E",X"40",X"B0",X"47", - X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"01",X"3E",X"00",X"CA",X"2E",X"31",X"3E",X"80",X"B0",X"5F", - X"16",X"28",X"2E",X"D5",X"1A",X"77",X"2C",X"1C",X"1A",X"77",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"D0",X"4B",X"7E",X"FE",X"03",X"C0",X"36",X"00",X"11",X"70",X"4B",X"01",X"50",X"4B",X"3A", - X"D3",X"4B",X"32",X"D8",X"4B",X"1A",X"E6",X"08",X"CA",X"6C",X"31",X"13",X"13",X"13",X"13",X"03", - X"03",X"00",X"00",X"7B",X"FE",X"90",X"C2",X"55",X"31",X"C9",X"FF",X"FF",X"1A",X"E6",X"F0",X"F6", - X"0C",X"12",X"13",X"13",X"2E",X"D8",X"7E",X"12",X"C6",X"10",X"77",X"13",X"2E",X"D4",X"7E",X"12", - X"23",X"7E",X"02",X"23",X"03",X"7E",X"02",X"13",X"03",X"23",X"35",X"C2",X"63",X"31",X"C9",X"00", - X"FF",X"FF",X"FF",X"FF",X"21",X"D0",X"4B",X"7E",X"FE",X"02",X"C0",X"34",X"2E",X"D9",X"34",X"C0", - X"C3",X"DE",X"30",X"FF",X"FF",X"FF",X"FF",X"FF",X"21",X"B9",X"43",X"7E",X"A7",X"C0",X"2E",X"B2", - X"7E",X"FE",X"1F",X"C0",X"2E",X"C2",X"7E",X"E6",X"07",X"C6",X"66",X"6F",X"26",X"32",X"46",X"3A", - X"B8",X"43",X"0F",X"0F",X"0F",X"0F",X"E6",X"0F",X"80",X"FE",X"08",X"DA",X"D0",X"31",X"3E",X"00", - X"47",X"0F",X"0F",X"0F",X"21",X"A5",X"43",X"77",X"2D",X"36",X"07",X"78",X"C6",X"6E",X"6F",X"26", - X"32",X"7E",X"21",X"9D",X"43",X"77",X"2C",X"36",X"00",X"11",X"79",X"41",X"06",X"04",X"CD",X"C4", - X"00",X"C3",X"00",X"07",X"C3",X"B4",X"32",X"35",X"CA",X"30",X"32",X"7E",X"E6",X"1F",X"CA",X"80", - X"03",X"FE",X"1F",X"C2",X"0B",X"32",X"3E",X"10",X"32",X"63",X"43",X"7E",X"0F",X"0F",X"E6",X"07", - X"4F",X"7E",X"E6",X"E0",X"0F",X"0F",X"0F",X"C6",X"80",X"6F",X"26",X"2B",X"06",X"2B",X"7E",X"81", - X"4F",X"23",X"56",X"23",X"5E",X"23",X"6E",X"26",X"2B",X"C3",X"40",X"32",X"FF",X"FF",X"FF",X"FF", - X"2E",X"A4",X"36",X"02",X"2E",X"B8",X"7E",X"E6",X"F0",X"C6",X"10",X"77",X"C3",X"80",X"03",X"FF", - X"D5",X"3E",X"00",X"12",X"7E",X"FE",X"FF",X"CA",X"50",X"32",X"C5",X"81",X"4F",X"0A",X"12",X"C1", - X"13",X"23",X"7D",X"E6",X"07",X"C2",X"41",X"32",X"D1",X"CD",X"17",X"02",X"7D",X"E6",X"3F",X"C2", - X"40",X"32",X"C9",X"FF",X"FF",X"FF",X"01",X"02",X"03",X"03",X"03",X"02",X"01",X"01",X"40",X"05", - X"10",X"15",X"20",X"25",X"30",X"35",X"21",X"95",X"43",X"7E",X"A7",X"C0",X"2E",X"B9",X"46",X"2D", - X"7E",X"2F",X"0F",X"E6",X"30",X"4F",X"7E",X"E6",X"10",X"07",X"C6",X"C0",X"6F",X"26",X"2B",X"E5", - X"CD",X"A0",X"32",X"E1",X"7D",X"C6",X"04",X"6F",X"E6",X"1F",X"C2",X"8F",X"32",X"C9",X"FF",X"FF", - X"7E",X"B8",X"C0",X"2C",X"3A",X"83",X"43",X"AE",X"A1",X"C0",X"2C",X"56",X"2C",X"5E",X"3E",X"6F", - X"12",X"C9",X"FF",X"FF",X"21",X"9B",X"43",X"7E",X"0F",X"D8",X"2E",X"A5",X"C3",X"F7",X"31",X"3A", - X"BB",X"43",X"A7",X"C8",X"07",X"07",X"07",X"4F",X"21",X"70",X"4B",X"06",X"80",X"CD",X"D8",X"05", - X"16",X"4B",X"26",X"3F",X"3E",X"40",X"91",X"C6",X"70",X"5F",X"C6",X"10",X"6F",X"41",X"3A",X"B8", - X"43",X"E6",X"10",X"CA",X"E0",X"05",X"7D",X"C6",X"40",X"6F",X"C3",X"E0",X"05",X"CD",X"E0",X"05", - X"21",X"E2",X"43",X"56",X"2C",X"5E",X"2E",X"B9",X"7E",X"C6",X"04",X"0F",X"0F",X"0F",X"83",X"E6", - X"1F",X"47",X"7B",X"E6",X"E0",X"B0",X"5F",X"7A",X"C6",X"08",X"57",X"01",X"02",X"02",X"C5",X"D5", - X"CD",X"2A",X"33",X"D1",X"C1",X"CD",X"9B",X"33",X"05",X"C2",X"0E",X"33",X"CD",X"F0",X"33",X"06", - X"02",X"0D",X"C2",X"0E",X"33",X"C3",X"90",X"37",X"FF",X"FF",X"1A",X"FE",X"6F",X"D8",X"16",X"A8", - X"CA",X"70",X"33",X"FE",X"7C",X"D0",X"FE",X"78",X"D2",X"42",X"33",X"E6",X"03",X"07",X"07",X"C6", - X"AC",X"57",X"CD",X"4C",X"33",X"C8",X"E1",X"E1",X"E1",X"C3",X"C4",X"0C",X"78",X"E6",X"01",X"47", - X"79",X"E6",X"01",X"07",X"B0",X"47",X"3A",X"B9",X"43",X"E6",X"04",X"B0",X"6F",X"26",X"3E",X"46", - X"3A",X"C2",X"43",X"0F",X"E6",X"03",X"82",X"6F",X"26",X"33",X"7E",X"A0",X"C9",X"FF",X"FF",X"FF", - X"CD",X"4C",X"33",X"C8",X"E1",X"E1",X"C1",X"AF",X"77",X"11",X"69",X"43",X"2F",X"12",X"21",X"70", - X"43",X"36",X"1A",X"2C",X"1E",X"B9",X"1A",X"2F",X"0F",X"E6",X"70",X"C6",X"10",X"77",X"2C",X"1E", - X"E2",X"1A",X"77",X"2C",X"1C",X"1A",X"3D",X"3D",X"77",X"C9",X"E1",X"2E",X"01",X"7B",X"85",X"E6", - X"1F",X"6F",X"7B",X"E6",X"E0",X"B5",X"5F",X"C9",X"FB",X"FA",X"EE",X"CC",X"33",X"3B",X"3A",X"EA", - X"BB",X"BB",X"FE",X"EF",X"1A",X"4A",X"CC",X"CC",X"BB",X"FA",X"EE",X"CC",X"21",X"E2",X"43",X"56", - X"2C",X"5E",X"13",X"13",X"2E",X"C2",X"7E",X"E6",X"06",X"47",X"2E",X"9B",X"7E",X"07",X"E6",X"08", - X"80",X"C6",X"70",X"6F",X"26",X"1B",X"CD",X"E6",X"33",X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"02", - X"C0",X"2D",X"1C",X"CD",X"10",X"02",X"7E",X"12",X"CD",X"17",X"02",X"2C",X"7E",X"12",X"C9",X"34", - X"2E",X"FE",X"CD",X"9D",X"33",X"C3",X"17",X"02",X"60",X"32",X"61",X"34",X"62",X"32",X"61",X"34", - X"CD",X"76",X"08",X"CD",X"00",X"38",X"CD",X"00",X"26",X"CD",X"00",X"38",X"CD",X"80",X"39",X"3A", - X"BB",X"43",X"A7",X"CA",X"62",X"34",X"FE",X"04",X"D2",X"38",X"34",X"CD",X"74",X"34",X"CD",X"86", - X"34",X"CD",X"60",X"35",X"CD",X"98",X"34",X"CD",X"AA",X"34",X"3A",X"9B",X"43",X"0F",X"DA",X"78", - X"0F",X"CD",X"30",X"39",X"C3",X"40",X"0C",X"FF",X"3A",X"9B",X"43",X"0F",X"DA",X"52",X"34",X"CD", - X"74",X"34",X"CD",X"60",X"35",X"CD",X"98",X"34",X"CD",X"30",X"39",X"C3",X"40",X"0C",X"FF",X"FF", - X"FF",X"FF",X"CD",X"86",X"34",X"CD",X"60",X"35",X"CD",X"AA",X"34",X"C3",X"78",X"0F",X"FF",X"FF", - X"FF",X"FF",X"3A",X"9B",X"43",X"0F",X"D8",X"CD",X"40",X"0C",X"CD",X"78",X"0F",X"C3",X"04",X"22", - X"FF",X"FF",X"FF",X"FF",X"21",X"70",X"4B",X"E5",X"CD",X"C0",X"34",X"E1",X"7D",X"C6",X"08",X"6F", - X"FE",X"90",X"C2",X"77",X"34",X"C9",X"21",X"90",X"4B",X"E5",X"CD",X"C0",X"34",X"E1",X"7D",X"C6", - X"08",X"6F",X"FE",X"B0",X"C2",X"89",X"34",X"C9",X"21",X"70",X"4B",X"E5",X"CD",X"B0",X"35",X"E1", - X"7D",X"C6",X"08",X"6F",X"FE",X"90",X"C2",X"9B",X"34",X"C9",X"21",X"90",X"4B",X"E5",X"CD",X"B0", - X"35",X"E1",X"7D",X"C6",X"08",X"6F",X"FE",X"B0",X"C2",X"AD",X"34",X"C9",X"FF",X"FF",X"FF",X"FF", - X"7E",X"A7",X"C8",X"47",X"C6",X"C0",X"5F",X"16",X"3E",X"1A",X"4F",X"2C",X"56",X"2C",X"5E",X"2C", - X"78",X"07",X"07",X"07",X"86",X"E6",X"7E",X"6F",X"26",X"3E",X"7E",X"2C",X"6E",X"67",X"7A",X"FE", - X"4B",X"C2",X"0C",X"35",X"7B",X"FE",X"50",X"DA",X"0C",X"35",X"06",X"08",X"2C",X"2C",X"D6",X"20", - X"5F",X"FE",X"50",X"DA",X"09",X"35",X"06",X"10",X"2C",X"2C",X"D6",X"20",X"5F",X"FE",X"50",X"DA", - X"09",X"35",X"06",X"18",X"2C",X"2C",X"D6",X"20",X"5F",X"79",X"80",X"4F",X"06",X"35",X"C5",X"01", - X"DF",X"FF",X"EB",X"36",X"00",X"23",X"36",X"00",X"09",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"36",X"00",X"23",X"36",X"00",X"C9",X"FF",X"FF", - X"CD",X"58",X"37",X"47",X"07",X"07",X"4F",X"07",X"07",X"B0",X"32",X"6F",X"43",X"3A",X"B8",X"43", - X"FE",X"40",X"DA",X"77",X"35",X"3E",X"30",X"E6",X"30",X"0F",X"47",X"3A",X"BB",X"43",X"3D",X"FE", - X"04",X"DA",X"86",X"35",X"3E",X"03",X"07",X"B0",X"47",X"3A",X"9A",X"43",X"07",X"07",X"E6",X"20", - X"B0",X"C6",X"80",X"6F",X"26",X"3E",X"7E",X"32",X"6E",X"43",X"2C",X"7E",X"81",X"E6",X"F8",X"32", - X"6D",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"7E",X"A7",X"C8",X"47",X"2C",X"2C",X"2C",X"2C",X"7E",X"A7",X"CA",X"BE",X"35",X"35",X"EB",X"D5", - X"78",X"07",X"07",X"07",X"6F",X"26",X"3F",X"46",X"23",X"4E",X"C5",X"23",X"46",X"23",X"4E",X"C5", - X"23",X"46",X"23",X"4E",X"C5",X"23",X"46",X"23",X"4E",X"C5",X"EB",X"C9",X"FF",X"FF",X"FF",X"FF", - X"2C",X"2C",X"7E",X"FE",X"10",X"D2",X"28",X"36",X"47",X"2D",X"86",X"77",X"2D",X"2D",X"78",X"86", - X"77",X"FE",X"08",X"DA",X"6A",X"36",X"E6",X"07",X"77",X"2D",X"7E",X"D6",X"20",X"77",X"D2",X"04", - X"36",X"2D",X"35",X"2C",X"2C",X"2C",X"2C",X"4E",X"2C",X"2C",X"7E",X"2D",X"36",X"10",X"91",X"CA", - X"72",X"36",X"3D",X"0F",X"0F",X"0F",X"E6",X"1F",X"B8",X"3C",X"77",X"D8",X"3A",X"6E",X"43",X"77", - X"B8",X"C8",X"04",X"70",X"C9",X"FF",X"FF",X"FF",X"E6",X"0F",X"CA",X"44",X"37",X"47",X"2D",X"7E", - X"90",X"77",X"2D",X"2D",X"7E",X"90",X"77",X"D2",X"95",X"36",X"E6",X"07",X"77",X"2D",X"7E",X"C6", - X"20",X"77",X"D2",X"48",X"36",X"2D",X"34",X"2C",X"2C",X"2C",X"2C",X"7E",X"2C",X"2C",X"96",X"0F", - X"0F",X"0F",X"E6",X"1F",X"B8",X"3C",X"2D",X"DA",X"63",X"36",X"3A",X"6E",X"43",X"B8",X"CA",X"63", - X"36",X"78",X"3C",X"F6",X"10",X"77",X"C9",X"77",X"C9",X"FF",X"78",X"A7",X"C0",X"2C",X"2C",X"2C", - X"34",X"C9",X"2D",X"46",X"2C",X"2C",X"3A",X"C2",X"43",X"E6",X"F8",X"B8",X"D2",X"80",X"36",X"47", - X"3A",X"6D",X"43",X"4F",X"C6",X"08",X"32",X"6D",X"43",X"78",X"91",X"36",X"08",X"D8",X"FE",X"08", - X"D8",X"77",X"C9",X"D8",X"FE",X"2C",X"2C",X"46",X"2C",X"2C",X"7E",X"B8",X"C0",X"2D",X"36",X"00", - X"2C",X"3A",X"C2",X"43",X"E6",X"F8",X"B8",X"DA",X"AB",X"36",X"47",X"3A",X"6D",X"43",X"C6",X"08", - X"32",X"6D",X"43",X"80",X"36",X"C8",X"D8",X"FE",X"C8",X"D0",X"77",X"C9",X"77",X"C9",X"FF",X"FF", - X"7E",X"0F",X"D8",X"2D",X"7E",X"3C",X"E6",X"07",X"77",X"C9",X"FF",X"FF",X"D1",X"C1",X"E1",X"C9", - X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"01",X"32",X"68",X"43",X"C9",X"FF",X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"0F",X"C0",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"02",X"32",X"68",X"43",X"C9",X"FF",X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"0F",X"C0",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"04",X"32",X"68",X"43",X"3A",X"6F",X"43",X"A3",X"E6",X"F0",X"C0",X"7B",X"E6",X"0F", - X"77",X"2C",X"2C",X"2C",X"2C",X"71",X"3A",X"68",X"43",X"F6",X"08",X"32",X"68",X"43",X"C9",X"FF", - X"FF",X"FF",X"FF",X"FF",X"36",X"11",X"2D",X"35",X"2D",X"2D",X"36",X"07",X"2D",X"7E",X"C6",X"20", - X"77",X"D0",X"2D",X"34",X"C9",X"FF",X"FF",X"FF",X"21",X"9B",X"43",X"7E",X"07",X"07",X"07",X"E6", - X"07",X"2E",X"C2",X"86",X"E6",X"0F",X"C9",X"E6",X"0E",X"07",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"10",X"C2",X"83",X"37",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72", - X"C9",X"FF",X"FF",X"2D",X"2D",X"71",X"2D",X"2D",X"2D",X"2D",X"7B",X"E6",X"0F",X"77",X"C9",X"FF", - X"21",X"9B",X"43",X"7E",X"0F",X"D8",X"E6",X"03",X"07",X"07",X"C6",X"C0",X"6F",X"26",X"37",X"56", - X"23",X"4E",X"23",X"7E",X"23",X"6E",X"67",X"06",X"00",X"7E",X"E6",X"FC",X"FE",X"78",X"C2",X"B6", - X"37",X"7E",X"3C",X"E6",X"FB",X"77",X"09",X"15",X"C2",X"A9",X"37",X"C3",X"BC",X"33",X"FF",X"FF", - X"08",X"1F",X"48",X"07",X"08",X"21",X"4A",X"40",X"04",X"1F",X"49",X"1F",X"04",X"21",X"49",X"DC", - X"3A",X"92",X"43",X"E6",X"0C",X"0F",X"C6",X"F8",X"6F",X"26",X"33",X"7E",X"32",X"E7",X"49",X"32", - X"67",X"49",X"2C",X"56",X"21",X"6A",X"41",X"01",X"20",X"00",X"1E",X"05",X"3A",X"BC",X"43",X"70", - X"0F",X"DA",X"F5",X"37",X"72",X"09",X"1D",X"C2",X"EF",X"37",X"C9",X"34",X"62",X"32",X"61",X"34", - X"3A",X"C4",X"43",X"E6",X"08",X"C8",X"3A",X"E6",X"43",X"C6",X"08",X"57",X"3A",X"D2",X"4B",X"5F", - X"3A",X"E7",X"43",X"E6",X"E0",X"47",X"3A",X"E7",X"43",X"93",X"00",X"E6",X"1F",X"B0",X"5F",X"1A", - X"D6",X"90",X"D8",X"47",X"3A",X"C6",X"43",X"E6",X"07",X"C6",X"00",X"6F",X"26",X"3E",X"4E",X"7B", - X"E6",X"0E",X"07",X"07",X"5F",X"3E",X"A8",X"93",X"5F",X"16",X"4B",X"78",X"FE",X"40",X"DC",X"44", - X"38",X"C3",X"BA",X"38",X"C6",X"60",X"6F",X"26",X"3B",X"7E",X"A1",X"C8",X"CD",X"A1",X"38",X"EB", - X"7E",X"36",X"00",X"2C",X"2C",X"2C",X"2C",X"56",X"E1",X"21",X"BB",X"43",X"35",X"FE",X"08",X"DA", - X"80",X"38",X"5F",X"3E",X"FF",X"32",X"69",X"43",X"01",X"10",X"1F",X"7B",X"FE",X"0D",X"DA",X"FA", - X"38",X"0E",X"20",X"FE",X"0F",X"C2",X"FA",X"38",X"0E",X"40",X"C3",X"FA",X"38",X"0E",X"CA",X"FB", - X"01",X"05",X"39",X"3E",X"FF",X"32",X"64",X"43",X"C3",X"FA",X"38",X"C3",X"52",X"05",X"FF",X"FF", - X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0F",X"0F",X"0E",X"0E",X"0E",X"0E",X"0E",X"0F",X"0E",X"0F", - X"FF",X"D5",X"0E",X"20",X"EB",X"23",X"56",X"23",X"5E",X"3A",X"87",X"19",X"C6",X"E2",X"6F",X"26", - X"17",X"CD",X"DE",X"34",X"D1",X"C9",X"35",X"D1",X"C9",X"FF",X"78",X"FE",X"10",X"D8",X"C6",X"90", - X"6F",X"26",X"3B",X"7E",X"A1",X"C8",X"CD",X"A1",X"38",X"1A",X"D6",X"08",X"DA",X"EA",X"38",X"47", - X"62",X"7B",X"C6",X"05",X"6F",X"3A",X"C6",X"43",X"BE",X"17",X"07",X"07",X"07",X"E6",X"08",X"B0", - X"C6",X"90",X"6F",X"26",X"38",X"46",X"EB",X"CD",X"E0",X"3C",X"3E",X"FF",X"32",X"66",X"43",X"01", - X"02",X"53",X"C3",X"FA",X"38",X"53",X"C3",X"FA",X"38",X"FF",X"CD",X"14",X"39",X"70",X"2C",X"71", - X"2C",X"3A",X"E6",X"43",X"77",X"2C",X"3A",X"E7",X"43",X"77",X"3A",X"C4",X"43",X"E6",X"F7",X"32", - X"C4",X"43",X"C9",X"FF",X"21",X"70",X"43",X"7E",X"E6",X"1F",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E", - X"E6",X"1F",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E",X"E6",X"1F",X"C8",X"2C",X"2C",X"2C",X"2C",X"C9", - X"3A",X"D2",X"4B",X"E6",X"1E",X"C6",X"C0",X"6F",X"26",X"3D",X"5E",X"2C",X"6E",X"26",X"4B",X"CD", - X"00",X"3A",X"3A",X"9F",X"43",X"82",X"4F",X"3A",X"9E",X"43",X"92",X"47",X"E5",X"CD",X"5C",X"39", - X"E1",X"7D",X"C6",X"08",X"6F",X"1D",X"C2",X"4C",X"39",X"C9",X"FF",X"FF",X"7E",X"FE",X"05",X"D8", - X"7D",X"C6",X"05",X"6F",X"7E",X"B8",X"D8",X"B9",X"D0",X"D6",X"04",X"47",X"2D",X"2D",X"2D",X"3A", - X"D2",X"4B",X"86",X"E6",X"1F",X"07",X"07",X"07",X"C6",X"08",X"4F",X"C3",X"B7",X"25",X"FF",X"FF", - X"3A",X"D2",X"4B",X"D6",X"0C",X"D8",X"FE",X"10",X"D0",X"21",X"C4",X"43",X"11",X"C0",X"4B",X"06", - X"04",X"CD",X"E0",X"05",X"2E",X"E6",X"06",X"02",X"CD",X"E0",X"05",X"2E",X"E2",X"11",X"E6",X"43", - X"06",X"02",X"CD",X"E0",X"05",X"2E",X"C4",X"36",X"08",X"11",X"9E",X"43",X"3A",X"9B",X"43",X"0F", - X"DA",X"BF",X"39",X"1C",X"2E",X"E7",X"7E",X"D6",X"20",X"77",X"2D",X"7E",X"DE",X"00",X"77",X"1A", - X"32",X"C6",X"43",X"CD",X"00",X"38",X"21",X"C4",X"43",X"7E",X"E6",X"08",X"CA",X"F0",X"39",X"21", - X"E7",X"43",X"34",X"7E",X"E6",X"1F",X"FE",X"1D",X"DA",X"C3",X"39",X"21",X"C0",X"4B",X"11",X"C4", - X"43",X"06",X"04",X"CD",X"E0",X"05",X"1E",X"E6",X"06",X"02",X"C3",X"E0",X"05",X"FF",X"FF",X"FF", - X"2E",X"A6",X"7E",X"FE",X"C0",X"DA",X"C4",X"0C",X"D6",X"01",X"77",X"C3",X"DB",X"39",X"FF",X"FF", - X"3A",X"BB",X"43",X"D6",X"0C",X"2F",X"3C",X"57",X"3A",X"9B",X"43",X"0F",X"0F",X"D8",X"E1",X"C9", - X"21",X"B8",X"11",X"8C",X"43",X"CD",X"2A",X"3A",X"CD",X"48",X"3A",X"21",X"66",X"43",X"7E",X"A7", - X"C8",X"36",X"00",X"1A",X"F6",X"40",X"12",X"C9",X"FF",X"FF",X"21",X"69",X"43",X"7E",X"A7",X"C8", - X"E6",X"3F",X"3D",X"77",X"0F",X"0F",X"0F",X"00",X"E6",X"07",X"47",X"7E",X"0F",X"E6",X"03",X"80", - X"47",X"1A",X"E6",X"F0",X"B0",X"12",X"C9",X"FF",X"21",X"64",X"43",X"7E",X"A7",X"C8",X"E6",X"1F", - X"3D",X"77",X"0F",X"0F",X"2F",X"E6",X"07",X"47",X"7E",X"07",X"E6",X"06",X"80",X"47",X"1A",X"E6", - X"F0",X"B0",X"12",X"C9",X"8C",X"77",X"C9",X"FE",X"10",X"DA",X"78",X"3A",X"36",X"10",X"3A",X"B8", - X"3A",X"A4",X"43",X"FE",X"03",X"C2",X"BD",X"27",X"3A",X"B8",X"43",X"E6",X"07",X"07",X"C6",X"8A", - X"6F",X"26",X"3A",X"7E",X"2C",X"6E",X"67",X"E9",X"C9",X"FF",X"3A",X"88",X"27",X"E6",X"3A",X"9A", - X"3A",X"D0",X"3A",X"88",X"27",X"E6",X"3A",X"B4",X"3A",X"E8",X"21",X"8C",X"43",X"36",X"AF",X"3A", - X"B9",X"43",X"FE",X"FD",X"D0",X"36",X"BF",X"E6",X"07",X"C8",X"36",X"7F",X"E6",X"01",X"C8",X"36", - X"3F",X"C9",X"21",X"2F",X"3A",X"9A",X"43",X"FE",X"02",X"D0",X"E6",X"0F",X"67",X"3A",X"9B",X"43", - X"E6",X"FC",X"6F",X"7E",X"E6",X"01",X"C8",X"3E",X"0D",X"32",X"8C",X"43",X"C9",X"FF",X"FF",X"FF", - X"3A",X"BB",X"43",X"A7",X"C8",X"21",X"8C",X"43",X"36",X"3F",X"3A",X"B9",X"43",X"FE",X"F0",X"D8", - X"E6",X"07",X"C0",X"36",X"2F",X"C9",X"C9",X"F7",X"CD",X"B4",X"3A",X"3A",X"95",X"43",X"A7",X"CA", - X"E0",X"3D",X"3A",X"9C",X"43",X"E6",X"7C",X"C8",X"0F",X"0F",X"32",X"8D",X"43",X"C9",X"77",X"C9", - X"06",X"00",X"21",X"B8",X"43",X"7E",X"E6",X"0E",X"FE",X"00",X"C8",X"06",X"40",X"FE",X"06",X"C8", - X"06",X"80",X"C9",X"06",X"80",X"C9",X"80",X"B6",X"77",X"C9",X"78",X"21",X"62",X"43",X"7E",X"A7", - X"C8",X"3D",X"E6",X"3F",X"77",X"07",X"00",X"E6",X"0C",X"47",X"2E",X"8D",X"7E",X"E6",X"F0",X"B0", - X"77",X"C9",X"C9",X"21",X"6A",X"43",X"7E",X"A7",X"C8",X"35",X"E6",X"08",X"F6",X"07",X"2E",X"8D", - X"77",X"C9",X"8D",X"CD",X"70",X"3A",X"CD",X"33",X"3B",X"CD",X"1B",X"3B",X"CD",X"12",X"3A",X"CD", - X"D2",X"27",X"CD",X"00",X"3B",X"2E",X"8D",X"7E",X"E6",X"3F",X"B0",X"77",X"C9",X"3A",X"FF",X"FF", - X"FE",X"F8",X"0F",X"3F",X"FF",X"FE",X"3F",X"F8",X"FF",X"FF",X"FF",X"0F",X"FF",X"FF",X"FF",X"FF", - X"0F",X"E0",X"3F",X"F8",X"0F",X"F8",X"0F",X"FC",X"07",X"FC",X"07",X"FC",X"F8",X"0F",X"F8",X"0F", - X"F8",X"0F",X"F8",X"0F",X"E0",X"3F",X"E0",X"3F",X"E0",X"3F",X"E0",X"3F",X"FF",X"80",X"FF",X"FF", - X"80",X"FF",X"FE",X"03",X"FE",X"03",X"FE",X"03",X"FE",X"03",X"07",X"07",X"00",X"00",X"00",X"00", - X"F0",X"1F",X"C0",X"07",X"F0",X"07",X"F0",X"03",X"F8",X"03",X"F8",X"03",X"07",X"F0",X"07",X"F0", - X"07",X"F0",X"07",X"F0",X"1F",X"C0",X"1F",X"C0",X"1F",X"C0",X"1F",X"C0",X"00",X"7F",X"00",X"00", - X"7F",X"00",X"01",X"FC",X"01",X"FC",X"01",X"FC",X"01",X"FC",X"F8",X"F8",X"FF",X"FF",X"00",X"00", - X"3F",X"FF",X"3F",X"FF",X"FC",X"FF",X"FE",X"FF",X"FF",X"FF",X"FE",X"7F",X"FE",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"F8",X"FF",X"FF",X"7F",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"0F",X"FF",X"1F",X"00",X"80",X"E0",X"F8",X"FE",X"03",X"0F",X"3F",X"FF", - X"00",X"E0",X"F9",X"E1",X"AC",X"AE",X"AD",X"AF",X"00",X"E2",X"00",X"FD",X"00",X"00",X"00",X"E7", - X"F8",X"FF",X"B4",X"B6",X"B5",X"B7",X"00",X"E8",X"00",X"FE",X"00",X"00",X"FA",X"00",X"FC",X"EC", - X"FB",X"BD",X"BC",X"BE",X"00",X"ED",X"00",X"EE",X"00",X"00",X"F9",X"00",X"FD",X"F2",X"FA",X"F3", - X"C2",X"C4",X"C3",X"C5",X"00",X"DF",X"00",X"FC",X"00",X"FB",X"00",X"F5",X"C6",X"C8",X"C7",X"C9", - X"00",X"FF",X"00",X"F6",X"00",X"00",X"00",X"E3",X"00",X"E4",X"B0",X"B2",X"B1",X"B3",X"FC",X"E5", - X"00",X"E6",X"00",X"00",X"00",X"F9",X"00",X"E9",X"B8",X"BA",X"B9",X"BB",X"FD",X"EA",X"00",X"EB", - X"00",X"00",X"00",X"F8",X"00",X"EF",X"F8",X"C0",X"BF",X"C1",X"FE",X"F0",X"F8",X"F1",X"FC",X"00", - X"00",X"DC",X"00",X"DD",X"A7",X"A9",X"CA",X"AA",X"CC",X"D1",X"D0",X"F4",X"00",X"DC",X"00",X"DD", - X"A7",X"AB",X"CB",X"AA",X"CD",X"D3",X"D2",X"F4",X"D4",X"DC",X"D5",X"D8",X"A7",X"A9",X"A8",X"AA", - X"00",X"DE",X"00",X"F4",X"D6",X"DC",X"D7",X"D9",X"A7",X"AB",X"A8",X"AA",X"00",X"DE",X"00",X"F4", - X"D4",X"DC",X"D5",X"D8",X"A7",X"A9",X"CB",X"AA",X"CD",X"D3",X"D2",X"F4",X"D6",X"DC",X"D7",X"D9", - X"A7",X"AB",X"CA",X"AA",X"CC",X"D1",X"D0",X"F4",X"00",X"DC",X"00",X"DD",X"A7",X"A9",X"A8",X"AA", - X"00",X"DE",X"00",X"F4",X"00",X"E3",X"00",X"E4",X"B0",X"B2",X"AD",X"AF",X"00",X"E2",X"00",X"FD", - X"00",X"E0",X"F9",X"E1",X"AC",X"AE",X"B1",X"B3",X"FC",X"E5",X"00",X"E6",X"B8",X"BB",X"B9",X"BC", - X"7D",X"C6",X"05",X"6F",X"7E",X"E6",X"F8",X"2C",X"2C",X"BE",X"C8",X"2D",X"7E",X"E6",X"F0",X"77", - X"2D",X"7E",X"E6",X"F8",X"77",X"2D",X"36",X"80",X"2D",X"36",X"00",X"2D",X"2D",X"2D",X"70",X"C9", - X"00",X"00",X"00",X"00",X"90",X"00",X"FC",X"00",X"00",X"00",X"00",X"00",X"91",X"00",X"92",X"00", - X"00",X"00",X"00",X"00",X"F9",X"00",X"93",X"00",X"00",X"00",X"00",X"00",X"F8",X"00",X"94",X"00", - X"00",X"00",X"00",X"00",X"95",X"00",X"96",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"97",X"00", - X"98",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F9",X"00",X"99",X"00",X"FC",X"00",X"00",X"00", - X"00",X"00",X"F8",X"00",X"9A",X"00",X"9B",X"00",X"00",X"00",X"FB",X"00",X"9C",X"00",X"FE",X"00", - X"00",X"00",X"00",X"00",X"FA",X"00",X"9D",X"00",X"9E",X"00",X"00",X"00",X"00",X"00",X"F9",X"00", - X"9F",X"00",X"A0",X"00",X"FC",X"00",X"00",X"00",X"F8",X"00",X"A1",X"00",X"A2",X"00",X"FD",X"00", - X"00",X"00",X"00",X"DA",X"A3",X"A5",X"A4",X"A6",X"00",X"DB",X"00",X"00",X"21",X"D0",X"4B",X"7E", - X"FE",X"03",X"2E",X"E3",X"C2",X"89",X"3D",X"36",X"10",X"7E",X"A7",X"C8",X"35",X"2F",X"00",X"E6", - X"0F",X"F6",X"10",X"32",X"8D",X"43",X"E1",X"C9",X"21",X"70",X"4B",X"01",X"00",X"00",X"11",X"08", - X"08",X"7E",X"2C",X"A2",X"CA",X"AF",X"3D",X"04",X"7E",X"FE",X"30",X"D2",X"AF",X"3D",X"4F",X"2C", - X"2C",X"2C",X"1D",X"C2",X"A1",X"3D",X"C9",X"00",X"0C",X"0C",X"0E",X"FF",X"0D",X"0E",X"0D",X"FF", - X"06",X"70",X"07",X"70",X"08",X"70",X"07",X"78",X"06",X"80",X"05",X"88",X"04",X"90",X"03",X"98", - X"02",X"A0",X"01",X"A8",X"01",X"70",X"01",X"70",X"02",X"70",X"03",X"70",X"04",X"70",X"05",X"70", - X"21",X"8D",X"43",X"36",X"3F",X"3A",X"B9",X"43",X"FE",X"FC",X"D0",X"36",X"2F",X"E6",X"01",X"C8", - X"2D",X"7E",X"F6",X"40",X"77",X"C9",X"05",X"04",X"03",X"02",X"02",X"02",X"02",X"02",X"02",X"02", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"3D",X"00",X"3D",X"08",X"3D",X"10",X"3D",X"18", - X"3D",X"20",X"3D",X"2A",X"3D",X"34",X"3D",X"3E",X"3D",X"48",X"3D",X"52",X"3D",X"5C",X"3D",X"66", - X"3D",X"48",X"3D",X"52",X"3D",X"5C",X"3D",X"70",X"3D",X"70",X"3D",X"70",X"3C",X"B8",X"3C",X"B8", - X"3D",X"70",X"3D",X"5C",X"3D",X"52",X"3D",X"48",X"3C",X"B8",X"3C",X"B8",X"3D",X"70",X"3D",X"70", - X"3C",X"B8",X"3C",X"C4",X"3C",X"B8",X"3C",X"D0",X"3C",X"46",X"3C",X"B8",X"3C",X"B8",X"3C",X"00", - X"3C",X"00",X"3C",X"B8",X"3C",X"B8",X"3C",X"46",X"3C",X"00",X"3C",X"0E",X"3C",X"1C",X"3C",X"2A", - X"3C",X"38",X"3C",X"46",X"3C",X"54",X"3C",X"62",X"3C",X"70",X"3C",X"70",X"3C",X"7C",X"3C",X"7C", - X"3C",X"88",X"3C",X"88",X"3C",X"94",X"3C",X"94",X"3C",X"A0",X"3C",X"A0",X"3C",X"AC",X"3C",X"AC", - X"04",X"40",X"03",X"20",X"02",X"30",X"02",X"10",X"05",X"48",X"04",X"28",X"03",X"38",X"02",X"18", - X"06",X"50",X"05",X"30",X"04",X"40",X"03",X"20",X"07",X"58",X"06",X"38",X"05",X"48",X"04",X"28", - X"05",X"10",X"04",X"20",X"03",X"30",X"03",X"40",X"06",X"18",X"05",X"28",X"04",X"38",X"03",X"48", - X"07",X"20",X"06",X"30",X"05",X"40",X"04",X"50",X"08",X"30",X"07",X"40",X"06",X"50",X"05",X"60", - X"FF",X"38",X"30",X"30",X"30",X"28",X"30",X"28",X"28",X"28",X"28",X"20",X"20",X"28",X"28",X"28", - X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"01",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"01", - X"14",X"15",X"16",X"10",X"08",X"04",X"00",X"00",X"00",X"01",X"01",X"02",X"02",X"03",X"03",X"04", - X"04",X"05",X"06",X"07",X"08",X"09",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",X"10",X"11",X"12",X"13", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"20",X"FF",X"02",X"FF",X"36",X"D2",X"35",X"E0", - X"30",X"FF",X"03",X"FF",X"36",X"D2",X"35",X"E0",X"10",X"FF",X"04",X"FF",X"36",X"EA",X"35",X"E0", - X"10",X"FF",X"05",X"FF",X"36",X"EA",X"36",X"C0",X"10",X"FF",X"08",X"FF",X"36",X"EA",X"36",X"C0", - X"30",X"FF",X"03",X"FF",X"36",X"EA",X"36",X"C0",X"10",X"FF",X"06",X"FF",X"36",X"EA",X"36",X"C0", - X"10",X"10",X"09",X"1A",X"37",X"6A",X"36",X"C0",X"10",X"10",X"0B",X"38",X"37",X"0A",X"36",X"C0", - X"10",X"10",X"0C",X"38",X"37",X"0A",X"36",X"C0",X"10",X"10",X"0A",X"77",X"37",X"0A",X"35",X"E0", - X"10",X"10",X"09",X"77",X"37",X"0A",X"35",X"E0",X"10",X"FF",X"08",X"FF",X"36",X"D2",X"36",X"C0", - X"10",X"FF",X"08",X"FF",X"36",X"D2",X"36",X"C0",X"10",X"FF",X"08",X"FF",X"36",X"D2",X"36",X"C0", - X"01",X"48",X"6E",X"00",X"10",X"D0",X"10",X"10",X"01",X"4A",X"8C",X"00",X"20",X"48",X"00",X"B8", - X"01",X"4A",X"2A",X"00",X"30",X"60",X"10",X"28",X"01",X"49",X"68",X"00",X"40",X"90",X"00",X"B0", - X"01",X"4A",X"E6",X"00",X"50",X"30",X"00",X"60",X"01",X"4A",X"84",X"00",X"60",X"48",X"00",X"A0", - X"01",X"48",X"C2",X"00",X"70",X"B8",X"10",X"80",X"01",X"49",X"40",X"00",X"80",X"98",X"10",X"40", - X"01",X"4B",X"2E",X"00",X"10",X"20",X"00",X"40",X"01",X"48",X"6C",X"00",X"20",X"D0",X"10",X"70", - X"01",X"4A",X"CA",X"00",X"30",X"38",X"00",X"58",X"01",X"48",X"C8",X"00",X"40",X"B8",X"10",X"58", - X"01",X"4A",X"66",X"00",X"50",X"50",X"00",X"70",X"01",X"49",X"24",X"00",X"60",X"A0",X"10",X"40", - X"01",X"4A",X"02",X"00",X"70",X"68",X"00",X"88",X"01",X"49",X"80",X"00",X"80",X"88",X"10",X"28"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix.vhd deleted file mode 100644 index 47bd27e9..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix.vhd +++ /dev/null @@ -1,462 +0,0 @@ ---------------------------------------------------------------------------------- --- DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix is -generic ( - C_test_picture: boolean := false; - C_tile_rom: boolean := true; -- false: disable tile ROM to try game logic on small FPGA - -- reduce ROMs: 14 is normal game, 13 will draw initial screen, 12 will repeatedly blink 1 line of garbage - C_autofire: boolean := true; - -- C_audio: boolean := true; - C_prog_rom_addr_bits: integer range 12 to 14 := 14 -); -port( - clk : in std_logic; -- 11 MHz for TV, 25 MHz for VGA - reset : in std_logic; - ce_pix : out std_logic; - - dip_switch : in std_logic_vector(7 downto 0); - -- game controls, normal logic '1':pressed, '0':released - - btn_coin: in std_logic; - btn_player_start: in std_logic_vector(1 downto 0); - btn_fire, btn_left, btn_right, btn_barrier: in std_logic; - - video_r : out std_logic_vector(1 downto 0); - video_g : out std_logic_vector(1 downto 0); - video_b : out std_logic_vector(1 downto 0); - video_vblank, video_hblank_bg, video_hblank_fg: out std_logic; - video_hs : out std_logic; - video_vs : out std_logic; - - sound_fire : out std_logic; -- '1' when missile fires - sound_explode: out std_logic; -- '1' when ship explodes - sound_burn : out std_logic; -- bird burns - sound_fireball: out std_logic; -- bird explodes in 2 fireballs - sound_ab : out std_logic_vector(15 downto 0); - audio_select : in std_logic_vector(2 downto 0) := (others => '0'); - audio : out std_logic_vector(11 downto 0) -); -end phoenix; - -architecture struct of phoenix is - - signal reset_n: std_logic; - - signal hcnt : std_logic_vector(9 downto 1); - signal vcnt : std_logic_vector(8 downto 1); - signal sync : std_logic; - signal adrsel : std_logic; - signal rdy : std_logic := '1'; - signal vblank : std_logic; - signal hblank_bkgrd : std_logic; - signal hblank_frgrd : std_logic; - signal ce_pix1 : std_logic; - - signal cpu_ce : std_logic; - signal cpu_adr : std_logic_vector(15 downto 0); - signal cpu_di : std_logic_vector( 7 downto 0); - signal cpu_do : std_logic_vector( 7 downto 0); - signal cpu_wr_n : std_logic; - signal prog_do : std_logic_vector( 7 downto 0); - signal S_prog_rom_addr : std_logic_vector(13 downto 0); - - signal frgnd_horz_cnt : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_horz_cnt : std_logic_vector(7 downto 0) := (others =>'0'); - signal vert_cnt : std_logic_vector(7 downto 0) := (others =>'0'); - - signal frgnd_ram_adr: std_logic_vector(10 downto 0) := (others =>'0'); - signal bkgnd_ram_adr: std_logic_vector(10 downto 0) := (others =>'0'); - signal frgnd_ram_do : std_logic_vector( 7 downto 0) := (others =>'0'); - signal bkgnd_ram_do : std_logic_vector( 7 downto 0) := (others =>'0'); - signal frgnd_ram_we : std_logic := '0'; - signal bkgnd_ram_we : std_logic := '0'; - - signal frgnd_graph_adr : std_logic_vector(11 downto 0) := (others =>'0'); - signal bkgnd_graph_adr : std_logic_vector(11 downto 0) := (others =>'0'); - signal palette_adr : std_logic_vector( 6 downto 0) := (others =>'0'); - signal A11 : std_logic; - - signal frgnd_clk : std_logic; - signal bkgnd_clk : std_logic; - - signal frgnd_tile_id : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_tile_id : std_logic_vector(7 downto 0) := (others =>'0'); - - signal frgnd_bit0_graph : std_logic_vector(7 downto 0) := (others =>'0'); - signal frgnd_bit1_graph : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit0_graph : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit1_graph : std_logic_vector(7 downto 0) := (others =>'0'); - - signal frgnd_bit0_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - signal frgnd_bit1_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit0_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit1_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - - signal fr_bit0 : std_logic; - signal fr_bit1 : std_logic; - signal bk_bit0 : std_logic; - signal bk_bit1 : std_logic; - signal fr_lin : std_logic_vector(2 downto 0); - signal bk_lin : std_logic_vector(2 downto 0); - - signal color_set : std_logic; - signal color_id : std_logic_vector(5 downto 0); - signal rgb : std_logic_vector(7 downto 0); - - signal player2 : std_logic := '0'; - signal pl2_cocktail : std_logic := '0'; - signal bkgnd_offset : std_logic_vector(7 downto 0) := (others =>'0'); - signal sound_a : std_logic_vector(7 downto 0) := (others =>'0'); - signal sound_b : std_logic_vector(7 downto 0) := (others =>'0'); - - signal clk10 : std_logic; - signal snd1 : std_logic_vector( 7 downto 0) := (others =>'0'); - signal snd2 : std_logic_vector( 1 downto 0) := (others =>'0'); - signal snd3 : std_logic_vector( 7 downto 0) := (others =>'0'); - signal song : std_logic_vector( 7 downto 0) := (others =>'0'); - signal mixed : std_logic_vector(11 downto 0) := (others =>'0'); - signal sound_string : std_logic_vector(31 downto 0); - - signal coin : std_logic; - signal player_start : std_logic_vector(1 downto 0); - signal buttons : std_logic_vector(3 downto 0); - signal R_autofire : std_logic_vector(21 downto 0); -begin - --- game core uses inverted control logic -coin <= not btn_coin; -- insert coin -player_start <= not btn_player_start; -- select 1 or 2 players -buttons(1) <= not btn_right; -- Right -buttons(2) <= not btn_left; -- Left -buttons(3) <= '1'; -- Protection - -G_not_autofire: if not C_autofire generate - buttons(0) <= not btn_fire; -- Fire -end generate; - -G_yes_autofire: if C_autofire generate - process(clk) - begin - if rising_edge(clk) then - if btn_fire='1' then - R_autofire <= R_autofire-1; - else - R_autofire <= (others => '0'); - end if; - end if; - end process; - buttons(0) <= not R_autofire(R_autofire'high); -end generate; - - video: entity work.phoenix_video - port map - ( - clk11 => clk, - ce_pix => ce_pix1, - hcnt => hcnt, - vcnt => vcnt, - sync_hs => video_hs, - sync_vs => video_vs, - adrsel => adrsel, -- RAM address selector ('0')cpu / ('1')video_generator - rdy => rdy, -- Ready ('1')cpu can access RAMs read/write - vblank => vblank, - hblank_frgrd => hblank_frgrd, - hblank_bkgrd => hblank_bkgrd, - reset => reset - ); - reset_n <= not reset; - ce_pix <= ce_pix1; - - process(clk) - begin - if rising_edge(clk) then - cpu_ce <= not cpu_ce; - end if; - end process; - --- microprocessor 8085 -cpu8085 : entity work.T8080se -generic map -( - Mode => 2, - T2Write => 0 -) -port map( - RESET_n => reset_n, - CLK => clk, - CLKEN => cpu_ce, - READY => rdy, - HOLD => '1', - INT => '1', - INTE => open, - DBIN => open, - SYNC => open, - VAIT => open, - HLDA => open, - WR_n => cpu_wr_n, - A => cpu_adr, - DI => cpu_di, - DO => cpu_do -); - --- mux prog, ram, vblank, switch... to processor data bus in -cpu_di <= prog_do when cpu_adr(15 downto 14) = "00" else - frgnd_ram_do when cpu_adr(13 downto 10) = 2#00_00# else - bkgnd_ram_do when cpu_adr(13 downto 10) = 2#00_10# else - buttons & '0' & player_start & coin when cpu_adr(13 downto 10) = 2#11_00# else--buttons & '1' - not vblank & dip_switch(6 downto 0) when cpu_adr(13 downto 10) = 2#11_10# else - x"FF"; - --- write enable to RAMs from cpu -frgnd_ram_we <= '1' when cpu_wr_n = '0' and cpu_adr(14 downto 10) = "10000" and adrsel = '0' else '0'; -bkgnd_ram_we <= '1' when cpu_wr_n = '0' and cpu_adr(14 downto 10) = "10010" and adrsel = '0' else '0'; - --- RAMs address mux cpu/video_generator, bank0 for player1, bank1 for player2 -frgnd_ram_adr <= player2 & cpu_adr(9 downto 0) when adrsel ='0' else player2 & vert_cnt(7 downto 3) & frgnd_horz_cnt(7 downto 3); -bkgnd_ram_adr <= player2 & cpu_adr(9 downto 0) when adrsel ='0' else player2 & vert_cnt(7 downto 3) & bkgnd_horz_cnt(7 downto 3); - --- demux cpu data to registers : background scrolling, sound control, --- player id (1/2), palette color set. -process (clk) -begin - if rising_edge(clk) then - if cpu_wr_n = '0' then - case cpu_adr(14 downto 10) is - when "10110" => bkgnd_offset <= cpu_do; - when "11000" => sound_b <= cpu_do; - when "11010" => sound_a <= cpu_do; - when "10100" => player2 <= cpu_do(0); - color_set <= cpu_do(1); - A11 <= cpu_do(3); - when others => null; - end case; - end if; - end if; -end process; - --- player2 and cocktail mode (flip horizontal/vertical) -pl2_cocktail <= player2 and dip_switch(7); - --- horizontal scan video RAMs address background and foreground --- with flip and scroll offset -frgnd_horz_cnt <= hcnt(8 downto 1) when pl2_cocktail = '0' else not hcnt(8 downto 1); -bkgnd_horz_cnt <= frgnd_horz_cnt + bkgnd_offset; - --- vertical scan video RAMs address -vert_cnt <= vcnt(8 downto 1) when pl2_cocktail = '0' else not (vcnt(8 downto 1) + X"30"); - --- get tile_ids from RAMs -frgnd_tile_id <= frgnd_ram_do; -bkgnd_tile_id <= bkgnd_ram_do; - --- address graphix ROMs with tile_ids and line counter -frgnd_graph_adr <= A11 & frgnd_tile_id & vert_cnt(2 downto 0); -bkgnd_graph_adr <= A11 & bkgnd_tile_id & vert_cnt(2 downto 0); - --- latch foreground/background next graphix byte, high bit and low bit --- and palette_ids (fr_lin, bklin) -process (clk) -begin - if rising_edge(clk) then - if (pl2_cocktail = '0' and (frgnd_horz_cnt(2 downto 0) = "111")) or - (pl2_cocktail = '1' and (frgnd_horz_cnt(2 downto 0) = "000")) then - frgnd_bit0_graph_r <= frgnd_bit0_graph; - frgnd_bit1_graph_r <= frgnd_bit1_graph; - fr_lin <= frgnd_tile_id(7 downto 5); - end if; - if (pl2_cocktail = '0' and (bkgnd_horz_cnt(2 downto 0) = "111")) or - (pl2_cocktail = '1' and (bkgnd_horz_cnt(2 downto 0) = "000")) then - bkgnd_bit0_graph_r <= bkgnd_bit0_graph; - bkgnd_bit1_graph_r <= bkgnd_bit1_graph; - bk_lin <= bkgnd_tile_id(7 downto 5); - end if; - end if; -end process; - --- demux background and foreground pixel bits (0/1) from graphix byte with horizontal counter --- and apply horizontal and vertical blanking -fr_bit0 <= frgnd_bit0_graph_r(to_integer(unsigned(frgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_frgrd)= '0' else '0'; -fr_bit1 <= frgnd_bit1_graph_r(to_integer(unsigned(frgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_frgrd)= '0' else '0'; -bk_bit0 <= bkgnd_bit0_graph_r(to_integer(unsigned(bkgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_bkgrd)= '0' else '0'; -bk_bit1 <= bkgnd_bit1_graph_r(to_integer(unsigned(bkgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_bkgrd)= '0' else '0'; - --- select pixel bits and palette_id with foreground priority -color_id <= (fr_bit0 or fr_bit1) & fr_bit1 & fr_bit0 & fr_lin when (fr_bit0 or fr_bit1) = '1' else - (fr_bit0 or fr_bit1) & bk_bit1 & bk_bit0 & bk_lin; - --- address palette with pixel bits color and color set -palette_adr <= color_set & color_id; --- output video to top level --- output video to top level -process(clk) begin - if rising_edge(clk) then - if ce_pix1='1' then - video_vblank <= vblank; - video_hblank_fg <= hblank_frgrd; - video_hblank_bg <= hblank_bkgrd; - if hcnt>=192 then - video_r <= rgb(4) & rgb(0); - video_g <= rgb(6) & rgb(2); - video_b <= rgb(5) & rgb(1); - else - video_r <= "00"; - video_g <= "00"; - video_b <= "00"; - end if; - end if; - end if; -end process; - -frgnd_bit0 : entity work.PROM_39 -port map( - clk => clk, - addr => frgnd_graph_adr(10 downto 0), - data => frgnd_bit0_graph - ); - -frgnd_bit1 : entity work.PROM_40 -port map( - clk => clk, - addr => frgnd_graph_adr(10 downto 0), - data => frgnd_bit1_graph - ); - -bkgnd_bit0 : entity work.PROM_23 -port map( - clk => clk, - addr => bkgnd_graph_adr(10 downto 0), - data => bkgnd_bit0_graph - ); - -bkgnd_bit1 : entity work.PROM_24 -port map( - clk => clk, - addr => bkgnd_graph_adr(10 downto 0), - data => bkgnd_bit1_graph - ); - -col_l : entity work.col_h -port map( - clk => clk, - addr => palette_adr, - data => rgb(3 downto 0) - ); - -col_h : entity work.col_l -port map( - clk => clk, - addr => palette_adr, - data => rgb(7 downto 4) - ); - --- Program PROM -S_prog_rom_addr(C_prog_rom_addr_bits-1 downto 0) <= cpu_adr(C_prog_rom_addr_bits-1 downto 0); - -prog : entity work.prog -port map( - clk => clk, - addr => S_prog_rom_addr, - data => prog_do - ); - --- foreground RAM 0x4000-0x433F --- cpu working area 0x4340-0x43FF -frgnd_ram : entity work.gen_ram -generic map( dWidth => 8, aWidth => 11) -port map( - clk => clk, - we => frgnd_ram_we, - addr => frgnd_ram_adr, - d => cpu_do, - q => frgnd_ram_do -); - --- background RAM 0x4800-0x4B3F --- cpu working area 0x4B40-0x4BFF --- stack pointer downward from 0x4BFF -bkgnd_ram : entity work.gen_ram -generic map( dWidth => 8, aWidth => 11) -port map( - clk => clk, - we => bkgnd_ram_we, - addr => bkgnd_ram_adr, - d => cpu_do, - q => bkgnd_ram_do -); - - -effect1: entity work.phoenix_effect1 -port map -( - clk => clk, - reset => '0', - trigger => sound_a(4), - filter => sound_a(5), - divider => sound_a(3 downto 0), - snd => snd1 -); - -effect2 : entity work.phoenix_effect2 -port map -( - clk => clk, - reset => '0', - trigger1 => sound_b(4), - trigger2 => sound_b(5), - divider => sound_b(3 downto 0), - snd => snd2 -); - -effect3 : entity work.phoenix_effect3 -port map -( - clk => clk, - reset => '0', - trigger1 => sound_b(6), - trigger2 => sound_b(7), - snd => snd3 -); - -sound_burn <= sound_b(4); -sound_fire <= sound_b(6); -- '1' when fire sound -sound_explode <= sound_b(7); -- '1' when explode sound -sound_fireball <= sound_a(1) and not sound_a(0); -- ambiguity: mothership descend also triggers this -sound_ab <= sound_b & sound_a; - -music: entity work.phoenix_music -port map -( - clk => clk, - reset => '0', - trigger => sound_a(7), - sel_song => sound_a(6), - snd => song -); - --- mix effects and music -mixed <= std_logic_vector - ( - unsigned("00" & snd1 & "00") + - unsigned("0" & snd2 & "000000000") + - unsigned("00" & snd3 & "00") + - unsigned("00" & song & "00" ) - ); - --- select sound or/and effect -with audio_select select -audio <= "00" & snd1 & "00" when "100", - "0" & snd2 & "000000000" when "101", - "00" & snd3 & "00" when "110", - "00" & song & "00" when "111", - mixed when others; - - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_mist.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_mist.vhd deleted file mode 100644 index f986972e..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_mist.vhd +++ /dev/null @@ -1,309 +0,0 @@ ---------------------------------------------------------------------------------- --- DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr --- --- Main features --- PS2 keyboard input --- wm8731 sound output --- NO board SRAM used --- --- sw 0: on/off hdmi-audio --- --- Board switch : ---- todo fixme switches note --- 1 - 4 : dip switch --- 0-1 : lives 3-6 --- 3-2 : bonus life 30K-60K --- 4 : coin 1-2 --- 6-5 : unkonwn --- 7 : upright-cocktail --- 8 -10 : sound_select --- 0XX : all mixed (normal) --- 100 : sound1 only --- 101 : sound2 only --- 110 : sound3 only --- 111 : melody only --- Board key : --- 0 : reset --- ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_mist is -port -( - CLOCK_27 : in std_logic; - LED : out std_logic; - VGA_R : out std_logic_vector(5 downto 0); - VGA_G : out std_logic_vector(5 downto 0); - VGA_B : out std_logic_vector(5 downto 0); - VGA_HS : out std_logic; - VGA_VS : out std_logic; - SPI_SCK : in std_logic; - SPI_DI : in std_logic; - SPI_DO : out std_logic; - SPI_SS2 : in std_logic; - SPI_SS3 : in std_logic; - CONF_DATA0 : in std_logic; - AUDIO_L : out std_logic; - AUDIO_R : out std_logic -); -end; - -architecture struct of phoenix_mist is - - signal clk : std_logic; - signal clk_88m : std_logic; - signal reset : std_logic; - signal clock_stable : std_logic; - - signal audio : std_logic_vector(11 downto 0); - signal video_r, video_g, video_b: std_logic_vector(1 downto 0); - signal vsync, hsync : std_logic; - - signal dip_switch : std_logic_vector(7 downto 0);-- := (others => '0'); - signal status : std_logic_vector(31 downto 0); - signal buttons : std_logic_vector(1 downto 0); - signal scandoubler_disable : std_logic; - signal ypbpr : std_logic; - signal ce_pix : std_logic; - - signal scanlines : std_logic_vector(1 downto 0); - signal hq2x : std_logic; - - signal coin : std_logic; - signal player_start : std_logic_vector(1 downto 0); - signal button_left, button_right, button_protect, button_fire: std_logic; - signal joy0 : std_logic_vector(7 downto 0); - signal joy1 : std_logic_vector(7 downto 0); - signal ps2Clk : std_logic; - signal ps2Data : std_logic; - signal kbd_joy : std_logic_vector(7 downto 0); - signal upjoyL : std_logic; - signal upjoyR : std_logic; - signal upjoyB : std_logic; --- config string used by the io controller to fill the OSD - constant CONF_STR : string := "PHOENIX;;O4,Screen Direction,Upright,Normal;O67,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;T5,Reset;V,v1.1;"; - - function to_slv(s: string) return std_logic_vector is - constant ss: string(1 to s'length) := s; - variable rval: std_logic_vector(1 to 8 * s'length); - variable p: integer; - variable c: integer; - begin - for i in ss'range loop - p := 8 * i; - c := character'pos(ss(i)); - rval(p - 7 to p) := std_logic_vector(to_unsigned(c,8)); - end loop; - return rval; - end function; - - component mist_io - generic ( STRLEN : integer := 0 ); - port ( - clk_sys :in std_logic; - SPI_SCK, CONF_DATA0, SPI_DI :in std_logic; - SPI_DO : out std_logic; - conf_str : in std_logic_vector(8*STRLEN-1 downto 0); - buttons : out std_logic_vector(1 downto 0); - joystick_0 : out std_logic_vector(7 downto 0); - joystick_1 : out std_logic_vector(7 downto 0); - status : out std_logic_vector(31 downto 0); - scandoubler_disable, ypbpr : out std_logic; - ps2_kbd_clk : out std_logic; - ps2_kbd_data : out std_logic - ); - end component mist_io; - - component video_mixer - generic ( LINE_LENGTH : integer := 352; HALF_DEPTH : integer := 1 ); - port ( - clk_sys, ce_pix, ce_pix_actual : in std_logic; - SPI_SCK, SPI_SS3, SPI_DI : in std_logic; - scanlines : in std_logic_vector(1 downto 0); - scandoubler_disable, hq2x, ypbpr, ypbpr_full : in std_logic; - rotate : in std_logic_vector(1 downto 0); - R, G, B : in std_logic_vector(2 downto 0); - HSync, VSync, line_start, mono : in std_logic; - - VGA_R,VGA_G, VGA_B : out std_logic_vector(5 downto 0); - VGA_VS, VGA_HS : out std_logic - ); - end component video_mixer; - - component keyboard - PORT( - clk : in std_logic; - reset : in std_logic; - ps2_kbd_clk : in std_logic; - ps2_kbd_data : in std_logic; - joystick : out std_logic_vector (7 downto 0) - ); - end component; - - -begin - --- SWITCH 1: SWITCH 2: NUMBER OF SPACESHIPS: --- --------- --------- --------------------- --- OFF OFF 6 --- ON OFF 5 --- OFF ON 4 --- ON ON 3 --- FIRST FREE SECOND FREE --- SWITCH 3: SWITCH 4: SHIP SCORE: SHIP SCORE: --- --------- --------- ----------- ----------- --- OFF OFF 6,000 60,000 --- ON OFF 5,000 50,000 --- OFF ON 4,000 40,000 --- ON ON 3,000 30,000 - - --Cocktail,Factory,Factory,Factory,Bonus2,Bonus1,Ships2,Ships1 - dip_switch <= "00001111"; - - mist_io_inst : mist_io - generic map (STRLEN => CONF_STR'length) - port map ( - clk_sys => clk, - SPI_SCK => SPI_SCK, - CONF_DATA0 => CONF_DATA0, - SPI_DI => SPI_DI, - SPI_DO => SPI_DO, - conf_str => to_slv(CONF_STR), - buttons => buttons, - scandoubler_disable => scandoubler_disable, - ypbpr => ypbpr, - joystick_1 => joy1, - joystick_0 => joy0, - status => status, - ps2_kbd_clk => ps2Clk, - ps2_kbd_data => ps2Data - ); - - -- - -- Audio - -- - u_dac1 : entity work.dac - port map( - clk_i => clk_88m, - res_n_i => not reset, - dac_i => audio, - dac_o => AUDIO_L - ); - - u_dac2 : entity work.dac - port map( - clk_i => clk_88m, - res_n_i => not reset, - dac_i => audio, - dac_o => AUDIO_R - ); - - - pll: entity work.pll27 - port map( - inclk0 => CLOCK_27, - c0 => clk_88m, - c1 => clk, - locked => clock_stable - ); - - reset <= status(0) or status(5) or buttons(1) or not clock_stable; - - u_keyboard : keyboard - port map( - clk => clk, - reset => reset, - ps2_kbd_clk => ps2Clk, - ps2_kbd_data => ps2Data, - joystick => kbd_joy - ); - - process(clk_88m) - variable cnt: integer range 0 to 6000000 := 0; - begin - if rising_edge(clk_88m) then - if status(3 downto 1) /= "000" then - cnt := 0; - coin <= status(1); - player_start <= status(3 downto 2); - else - if cnt < 6000000 then - cnt := cnt + 1; - else - coin <= '0'; - player_start <= "00"; - end if; - end if; - end if; - end process; - - upjoyB <= joy0(2) or joy1(2) when status(4) = '0' else joy0(0) or joy1(0); - upjoyL <= joy0(1) or joy1(1) or kbd_joy(6) when status(4) = '0' else joy0(2) or joy1(2) or kbd_joy(5); - upjoyR <= joy0(0) or joy1(0) or kbd_joy(7) when status(4) = '0' else joy0(3) or joy1(3) or kbd_joy(4); - - phoenix : entity work.phoenix - port map - ( - clk => clk, - reset => reset, - ce_pix => ce_pix, - dip_switch => dip_switch, - btn_coin => kbd_joy(3) or coin,--ESC - btn_player_start(0) => kbd_joy(1) or player_start(0),--1 - btn_player_start(1) => kbd_joy(2) or player_start(1),--2 - btn_left => upjoyL, - btn_right => upjoyR, - btn_barrier => upjoyB or kbd_joy(2),--TAB - btn_fire => joy0(4) or joy1(4) or kbd_joy(0),--space - video_r => video_r, - video_g => video_g, - video_b => video_b, - video_hs => hsync, - video_vs => vsync, - audio_select => "000", - audio => audio - ); - - scanlines(0) <= '1' when status(7 downto 6) = "10" else '0'; - scanlines(1) <= '1' when status(7 downto 6) = "11" else '0'; - hq2x <= '1' when status(7 downto 6) = "01" else '0'; - - vmixer : video_mixer - port map ( - clk_sys => clk_88m, - ce_pix => ce_pix, - ce_pix_actual => ce_pix, - - SPI_SCK => SPI_SCK, - SPI_SS3 => SPI_SS3, - SPI_DI => SPI_DI, - rotate => '1' & not status(4), - scanlines => scanlines, - scandoubler_disable => scandoubler_disable, - hq2x => hq2x, - ypbpr => ypbpr, - ypbpr_full => '1', - - R => video_r & video_r(1), - G => video_g & video_g(1), - B => video_b & video_b(1), - HSync => hsync, - VSync => vsync, - line_start => '0', - mono => '0', - - VGA_R => VGA_R, - VGA_G => VGA_G, - VGA_B => VGA_B, - VGA_VS => VGA_VS, - VGA_HS => VGA_HS - ); - - LED <= '1'; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/pll.vhd b/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/pll.vhd deleted file mode 100644 index 1c661cbc..00000000 --- a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/pll.vhd +++ /dev/null @@ -1,387 +0,0 @@ --- megafunction wizard: %ALTPLL% --- GENERATION: STANDARD --- VERSION: WM1.0 --- MODULE: altpll - --- ============================================================ --- File Name: pll.vhd --- Megafunction Name(s): --- altpll --- --- Simulation Library Files(s): --- altera_mf --- ============================================================ --- ************************************************************ --- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! --- --- 13.1.4 Build 182 03/12/2014 SJ Web Edition --- ************************************************************ - - ---Copyright (C) 1991-2014 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. - - -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.all; - -ENTITY pll IS - PORT - ( - areset : IN STD_LOGIC := '0'; - inclk0 : IN STD_LOGIC := '0'; - c0 : OUT STD_LOGIC ; - c1 : OUT STD_LOGIC - ); -END pll; - - -ARCHITECTURE SYN OF pll IS - - SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); - SIGNAL sub_wire1 : STD_LOGIC ; - SIGNAL sub_wire2 : STD_LOGIC ; - SIGNAL sub_wire3 : STD_LOGIC ; - SIGNAL sub_wire4 : STD_LOGIC_VECTOR (1 DOWNTO 0); - SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0); - SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); - - - - COMPONENT altpll - GENERIC ( - bandwidth_type : STRING; - clk0_divide_by : NATURAL; - clk0_duty_cycle : NATURAL; - clk0_multiply_by : NATURAL; - clk0_phase_shift : STRING; - clk1_divide_by : NATURAL; - clk1_duty_cycle : NATURAL; - clk1_multiply_by : NATURAL; - clk1_phase_shift : STRING; - compensate_clock : STRING; - inclk0_input_frequency : NATURAL; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - operation_mode : STRING; - pll_type : STRING; - port_activeclock : STRING; - port_areset : STRING; - port_clkbad0 : STRING; - port_clkbad1 : STRING; - port_clkloss : STRING; - port_clkswitch : STRING; - port_configupdate : STRING; - port_fbin : STRING; - port_inclk0 : STRING; - port_inclk1 : STRING; - port_locked : STRING; - port_pfdena : STRING; - port_phasecounterselect : STRING; - port_phasedone : STRING; - port_phasestep : STRING; - port_phaseupdown : STRING; - port_pllena : STRING; - port_scanaclr : STRING; - port_scanclk : STRING; - port_scanclkena : STRING; - port_scandata : STRING; - port_scandataout : STRING; - port_scandone : STRING; - port_scanread : STRING; - port_scanwrite : STRING; - port_clk0 : STRING; - port_clk1 : STRING; - port_clk2 : STRING; - port_clk3 : STRING; - port_clk4 : STRING; - port_clk5 : STRING; - port_clkena0 : STRING; - port_clkena1 : STRING; - port_clkena2 : STRING; - port_clkena3 : STRING; - port_clkena4 : STRING; - port_clkena5 : STRING; - port_extclk0 : STRING; - port_extclk1 : STRING; - port_extclk2 : STRING; - port_extclk3 : STRING; - width_clock : NATURAL - ); - PORT ( - areset : IN STD_LOGIC ; - clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); - inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - END COMPONENT; - -BEGIN - sub_wire5_bv(0 DOWNTO 0) <= "0"; - sub_wire5 <= To_stdlogicvector(sub_wire5_bv); - sub_wire2 <= sub_wire0(0); - sub_wire1 <= sub_wire0(1); - c1 <= sub_wire1; - c0 <= sub_wire2; - sub_wire3 <= inclk0; - sub_wire4 <= sub_wire5(0 DOWNTO 0) & sub_wire3; - - altpll_component : altpll - GENERIC MAP ( - bandwidth_type => "AUTO", - clk0_divide_by => 27, - clk0_duty_cycle => 50, - clk0_multiply_by => 11, - clk0_phase_shift => "0", - clk1_divide_by => 27, - clk1_duty_cycle => 50, - clk1_multiply_by => 22, - clk1_phase_shift => "0", - compensate_clock => "CLK0", - inclk0_input_frequency => 37037, - intended_device_family => "Cyclone III", - lpm_hint => "CBX_MODULE_PREFIX=pll", - lpm_type => "altpll", - operation_mode => "NORMAL", - pll_type => "AUTO", - port_activeclock => "PORT_UNUSED", - port_areset => "PORT_USED", - port_clkbad0 => "PORT_UNUSED", - port_clkbad1 => "PORT_UNUSED", - port_clkloss => "PORT_UNUSED", - port_clkswitch => "PORT_UNUSED", - port_configupdate => "PORT_UNUSED", - port_fbin => "PORT_UNUSED", - port_inclk0 => "PORT_USED", - port_inclk1 => "PORT_UNUSED", - port_locked => "PORT_UNUSED", - port_pfdena => "PORT_UNUSED", - port_phasecounterselect => "PORT_UNUSED", - port_phasedone => "PORT_UNUSED", - port_phasestep => "PORT_UNUSED", - port_phaseupdown => "PORT_UNUSED", - port_pllena => "PORT_UNUSED", - port_scanaclr => "PORT_UNUSED", - port_scanclk => "PORT_UNUSED", - port_scanclkena => "PORT_UNUSED", - port_scandata => "PORT_UNUSED", - port_scandataout => "PORT_UNUSED", - port_scandone => "PORT_UNUSED", - port_scanread => "PORT_UNUSED", - port_scanwrite => "PORT_UNUSED", - port_clk0 => "PORT_USED", - port_clk1 => "PORT_USED", - port_clk2 => "PORT_UNUSED", - port_clk3 => "PORT_UNUSED", - port_clk4 => "PORT_UNUSED", - port_clk5 => "PORT_UNUSED", - port_clkena0 => "PORT_UNUSED", - port_clkena1 => "PORT_UNUSED", - port_clkena2 => "PORT_UNUSED", - port_clkena3 => "PORT_UNUSED", - port_clkena4 => "PORT_UNUSED", - port_clkena5 => "PORT_UNUSED", - port_extclk0 => "PORT_UNUSED", - port_extclk1 => "PORT_UNUSED", - port_extclk2 => "PORT_UNUSED", - port_extclk3 => "PORT_UNUSED", - width_clock => 5 - ) - PORT MAP ( - areset => areset, - inclk => sub_wire4, - clk => sub_wire0 - ); - - - -END SYN; - --- ============================================================ --- CNX file retrieval info --- ============================================================ --- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" --- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" --- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" --- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" --- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" --- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" --- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" --- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" --- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" --- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" --- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" --- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" --- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "27" --- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "27" --- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "11.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "22.000000" --- 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 "ps" --- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" --- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" --- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "11" --- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "44" --- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" --- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "11.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "22.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" --- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" --- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" --- 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: SWITCHOVER_COUNT_EDIT NUMERIC "1" --- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" --- Retrieval info: PRIVATE: USE_CLK0 STRING "1" --- Retrieval info: PRIVATE: USE_CLK1 STRING "1" --- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" --- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" --- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" --- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all --- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" --- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "27" --- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "11" --- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "27" --- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "22" --- Retrieval info: CONSTANT: CLK1_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_USED" --- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" --- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" --- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" --- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" --- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" --- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" --- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" --- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 --- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 --- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd 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.vhd FALSE --- Retrieval info: LIB_FILE: altera_mf --- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/clean.bat b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/clean.bat deleted file mode 100644 index b98ca391..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/clean.bat +++ /dev/null @@ -1,16 +0,0 @@ -@echo off -del /s *.bak -del /s *.orig -del /s *.rej -rmdir /s /q db -rmdir /s /q incremental_db -rmdir /s /q output_files -rmdir /s /q simulation -rmdir /s /q greybox_tmp -del PLLJ_PLLSPE_INFO.txt -del /s /q build_id.v -del *.qws -del *.ppf -del *.qip -del *.ddb -pause diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic23.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic23.vhd deleted file mode 100644 index 230b2a85..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic23.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prom_ic23 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of prom_ic23 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00", - X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"20",X"00",X"00", - X"00",X"00",X"40",X"00",X"00",X"04",X"00",X"00",X"00",X"08",X"08",X"00",X"00",X"40",X"00",X"00", - X"00",X"00",X"20",X"00",X"0C",X"0C",X"00",X"00",X"00",X"20",X"70",X"20",X"00",X"00",X"00",X"00", - X"00",X"00",X"08",X"08",X"3E",X"08",X"08",X"00",X"10",X"10",X"10",X"FE",X"10",X"10",X"10",X"00", - X"00",X"44",X"00",X"00",X"20",X"00",X"02",X"00",X"10",X"00",X"40",X"08",X"02",X"80",X"04",X"00", - X"01",X"40",X"04",X"10",X"82",X"04",X"50",X"02",X"82",X"48",X"02",X"A0",X"08",X"45",X"20",X"02", - X"3C",X"7E",X"DF",X"AF",X"D7",X"AF",X"56",X"3C",X"3C",X"42",X"99",X"BD",X"BD",X"99",X"42",X"3C", - X"88",X"20",X"04",X"90",X"2A",X"56",X"0F",X"03",X"24",X"18",X"65",X"9A",X"1D",X"A0",X"56",X"28", - X"3C",X"5A",X"AB",X"AD",X"D5",X"D3",X"6A",X"3C",X"38",X"68",X"DC",X"FA",X"2E",X"3F",X"16",X"0C", - X"01",X"2A",X"54",X"2A",X"54",X"2A",X"54",X"80",X"3C",X"46",X"F9",X"8F",X"F3",X"9D",X"62",X"3C", - X"08",X"08",X"1C",X"7F",X"1C",X"08",X"08",X"00",X"1C",X"3A",X"6D",X"75",X"77",X"36",X"1C",X"00", - X"00",X"18",X"3C",X"7E",X"7E",X"3C",X"18",X"00",X"38",X"50",X"E8",X"F8",X"F0",X"D8",X"60",X"38", - X"08",X"2A",X"1C",X"7F",X"1C",X"2A",X"08",X"00",X"38",X"4C",X"9D",X"BD",X"BD",X"B9",X"32",X"1C", - X"62",X"91",X"09",X"3A",X"5C",X"90",X"89",X"46",X"3C",X"5E",X"EB",X"FF",X"DF",X"F7",X"7E",X"3C", - X"FE",X"FC",X"F8",X"C0",X"80",X"10",X"60",X"80",X"F0",X"1C",X"06",X"83",X"C3",X"E3",X"F7",X"FE", - X"FF",X"FF",X"BB",X"EE",X"EE",X"BC",X"F8",X"E0",X"E0",X"F8",X"FC",X"F6",X"BE",X"FF",X"6F",X"6B", - X"40",X"10",X"80",X"C0",X"00",X"00",X"00",X"00",X"21",X"88",X"22",X"10",X"84",X"21",X"88",X"54", - X"E5",X"D0",X"85",X"20",X"94",X"40",X"01",X"A0",X"40",X"10",X"44",X"90",X"02",X"A8",X"C5",X"E8", - X"C0",X"E8",X"60",X"14",X"48",X"04",X"2A",X"01",X"00",X"00",X"80",X"28",X"40",X"10",X"C0",X"D0", - X"FC",X"FC",X"F8",X"FC",X"F2",X"D9",X"0F",X"07",X"00",X"00",X"C0",X"C0",X"98",X"38",X"7C",X"FC", - X"BB",X"D6",X"77",X"E6",X"8E",X"3C",X"F8",X"E0",X"E0",X"F8",X"3C",X"8E",X"66",X"F7",X"F6",X"EB", - X"F8",X"F8",X"F0",X"E0",X"C0",X"00",X"00",X"00",X"03",X"05",X"0A",X"D4",X"E8",X"D0",X"B8",X"78", - X"7F",X"EF",X"C7",X"C3",X"41",X"60",X"30",X"0F",X"01",X"06",X"08",X"01",X"03",X"1F",X"3F",X"7F", - X"E7",X"E4",X"FC",X"7F",X"77",X"37",X"1E",X"07",X"07",X"1F",X"3D",X"7E",X"5E",X"FB",X"BE",X"BE", - X"19",X"16",X"28",X"76",X"7B",X"FC",X"F8",X"E0",X"00",X"00",X"00",X"00",X"02",X"02",X"0C",X"0A", - X"27",X"93",X"29",X"44",X"12",X"24",X"09",X"02",X"05",X"10",X"01",X"44",X"12",X"89",X"23",X"97", - X"03",X"0B",X"10",X"05",X"12",X"00",X"00",X"00",X"80",X"48",X"20",X"15",X"28",X"06",X"27",X"13", - X"39",X"33",X"07",X"0F",X"0F",X"03",X"00",X"00",X"E0",X"D0",X"CB",X"6F",X"3F",X"1F",X"3E",X"3C", - X"DF",X"CB",X"ED",X"67",X"71",X"3C",X"1F",X"07",X"07",X"1F",X"3C",X"71",X"67",X"ED",X"CF",X"DA", - X"1E",X"1D",X"0B",X"17",X"2B",X"50",X"A0",X"C0",X"00",X"00",X"00",X"03",X"07",X"0F",X"1F",X"1F", - X"20",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"77",X"22",X"77",X"22",X"77", - X"77",X"22",X"77",X"22",X"F7",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"70",X"20", - X"F0",X"07",X"FF",X"77",X"27",X"72",X"27",X"70",X"70",X"27",X"72",X"27",X"77",X"FF",X"07",X"F0", - X"0F",X"E0",X"FF",X"77",X"27",X"77",X"20",X"70",X"70",X"20",X"77",X"27",X"77",X"FF",X"E0",X"0F", - X"00",X"00",X"00",X"00",X"F0",X"F0",X"F0",X"F0",X"00",X"E0",X"F0",X"F0",X"FF",X"FF",X"FF",X"FF", - X"F0",X"FE",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"E7",X"E7",X"81",X"81",X"E7",X"E7",X"FF", - X"01",X"03",X"01",X"01",X"07",X"03",X"01",X"03",X"1F",X"03",X"1F",X"0F",X"07",X"1F",X"03",X"0F", - X"7F",X"0F",X"7F",X"3F",X"0F",X"7F",X"1F",X"3F",X"FF",X"3F",X"7F",X"FF",X"3F",X"FF",X"3F",X"7F", - X"C4",X"CE",X"C4",X"CE",X"C0",X"C0",X"C0",X"C0",X"00",X"FF",X"FF",X"CE",X"C4",X"CE",X"C4",X"CE", - X"CE",X"C4",X"CE",X"C4",X"CE",X"FF",X"FF",X"00",X"C0",X"C0",X"C0",X"C0",X"CE",X"C4",X"CE",X"C4", - X"F0",X"07",X"FF",X"CE",X"C4",X"CE",X"C4",X"CE",X"0E",X"04",X"0E",X"04",X"0E",X"FF",X"07",X"F0", - X"0F",X"E0",X"FF",X"CE",X"C4",X"CE",X"C4",X"CE",X"CE",X"C4",X"CE",X"C4",X"CE",X"FF",X"E0",X"0F", - X"F0",X"F0",X"F0",X"F0",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"F0",X"F0",X"E0",X"00", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FE",X"F0",X"FF",X"E7",X"E7",X"FF",X"FF",X"E7",X"E7",X"FF", - X"FF",X"FF",X"7E",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"7E",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"FF",X"C3",X"C3",X"FF",X"FF",X"C3",X"C3",X"FF",X"00",X"00",X"00",X"00",X"FF",X"C3",X"C3",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"C3",X"C3",X"FF",X"2F",X"03",X"3F",X"4F",X"FF",X"C3",X"C3",X"FF", - X"FF",X"C3",X"C3",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"2F",X"03",X"3F",X"4F",X"00",X"00",X"00",X"00", - X"FF",X"C3",X"C3",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"2F",X"03",X"3F",X"4F",X"FF",X"FF",X"FF",X"FF", - X"FF",X"C3",X"C3",X"FF",X"2F",X"03",X"3F",X"4F",X"00",X"00",X"00",X"00",X"2F",X"03",X"3F",X"4F", - X"FF",X"FF",X"FF",X"FF",X"2F",X"03",X"3F",X"4F",X"2F",X"03",X"3F",X"4F",X"2F",X"03",X"3F",X"4F", - X"9E",X"F2",X"F0",X"F0",X"F0",X"F0",X"60",X"00",X"00",X"60",X"F0",X"F0",X"F0",X"F0",X"F2",X"9E", - X"9C",X"96",X"F2",X"F0",X"F0",X"F0",X"60",X"00",X"00",X"60",X"F0",X"F0",X"F0",X"F2",X"96",X"9C", - X"F0",X"98",X"9C",X"F6",X"F2",X"F0",X"60",X"00",X"00",X"60",X"F0",X"F2",X"F6",X"9C",X"98",X"F0", - X"F0",X"98",X"9C",X"F6",X"F2",X"62",X"00",X"00",X"00",X"62",X"F2",X"F6",X"9C",X"90",X"F0",X"F0", - X"07",X"0C",X"38",X"60",X"C6",X"6C",X"38",X"00",X"00",X"38",X"6C",X"C6",X"60",X"38",X"0C",X"07", - X"07",X"1C",X"70",X"C0",X"80",X"D8",X"70",X"00",X"00",X"70",X"D8",X"80",X"C0",X"70",X"1C",X"07", - X"07",X"1C",X"70",X"C0",X"80",X"C0",X"60",X"00",X"00",X"60",X"C0",X"80",X"C0",X"70",X"1C",X"07", - X"07",X"3C",X"60",X"C0",X"80",X"80",X"80",X"00",X"FF",X"80",X"80",X"80",X"C0",X"60",X"3C",X"0F", - X"F8",X"FC",X"FC",X"FC",X"78",X"30",X"00",X"00",X"F8",X"7C",X"FE",X"FF",X"FF",X"FF",X"FE",X"F8", - X"00",X"00",X"60",X"F8",X"FC",X"FC",X"F8",X"F0",X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"7E",X"3C", - X"78",X"FC",X"FE",X"FF",X"FF",X"FF",X"FF",X"FF",X"1E",X"3F",X"7F",X"7F",X"3D",X"18",X"00",X"00", - X"3F",X"7F",X"FF",X"FF",X"7F",X"3F",X"3F",X"1F",X"00",X"00",X"04",X"0E",X"1F",X"3F",X"3F",X"1F", - X"00",X"80",X"C0",X"E0",X"E0",X"C0",X"C0",X"00",X"FF",X"7E",X"7C",X"30",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"3C",X"7E",X"FE",X"00",X"03",X"07",X"0F",X"0F",X"0F",X"03",X"01", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"00",X"00",X"38",X"6C",X"7C",X"6C",X"38",X"00",X"38",X"6C",X"7C",X"6C",X"38",X"00",X"00", - X"6C",X"7C",X"6C",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38", - X"6C",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"6C",X"7C", - X"00",X"38",X"7C",X"E6",X"FE",X"E6",X"7C",X"38",X"7C",X"E6",X"FE",X"E6",X"7C",X"38",X"00",X"00", - X"FE",X"E6",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"7C",X"E6", - X"7C",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"7C",X"E6",X"FE",X"E6", - X"3C",X"7E",X"E7",X"FF",X"FF",X"E7",X"7E",X"3C",X"E7",X"FF",X"FF",X"E7",X"7E",X"3C",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"7E",X"FF",X"E7",X"7E",X"3C",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"3C",X"7E",X"E7",X"FF",X"7E",X"3C",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"3C",X"7E",X"E7",X"FF",X"FF",X"E7",X"FF",X"CF",X"CE",X"FE",X"FC",X"70",X"00",X"00", - X"00",X"00",X"00",X"70",X"FC",X"FE",X"CE",X"CF",X"07",X"07",X"03",X"03",X"01",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"01",X"03",X"03",X"07",X"FF",X"CF",X"CE",X"FE",X"FC",X"F8",X"F0",X"00", - X"00",X"00",X"F0",X"F8",X"FC",X"FE",X"CE",X"CF",X"0E",X"0F",X"07",X"1F",X"03",X"01",X"00",X"00", - X"00",X"00",X"00",X"01",X"03",X"1F",X"07",X"0F",X"7F",X"CE",X"CC",X"F8",X"F8",X"F8",X"F0",X"F0", - X"E0",X"F0",X"F0",X"F8",X"F8",X"F8",X"CC",X"CE",X"1E",X"0F",X"27",X"3F",X"03",X"03",X"01",X"00", - X"00",X"01",X"01",X"03",X"03",X"3F",X"27",X"0F",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"0C",X"27",X"33",X"1F",X"03",X"01",X"03",X"01",X"03",X"03",X"01",X"07",X"03",X"3F",X"67",X"4F", - X"0C",X"67",X"73",X"1F",X"01",X"00",X"07",X"03",X"07",X"0F",X"01",X"03",X"00",X"1F",X"73",X"67", - X"4C",X"F8",X"F8",X"F0",X"F8",X"F0",X"E0",X"C0",X"F8",X"F0",X"F8",X"F8",X"4C",X"4E",X"7E",X"4E", - X"73",X"1F",X"71",X"01",X"07",X"03",X"1F",X"0F",X"01",X"03",X"71",X"1F",X"73",X"06",X"0C",X"06", - X"F8",X"F0",X"F8",X"F8",X"F0",X"E0",X"80",X"00",X"F8",X"F8",X"4C",X"4E",X"7F",X"4E",X"4C",X"F8", - X"00",X"00",X"80",X"E0",X"F0",X"F8",X"F8",X"F0",X"31",X"60",X"07",X"03",X"07",X"1F",X"7F",X"FE", - X"31",X"1F",X"32",X"64",X"08",X"64",X"32",X"1F",X"00",X"FE",X"7F",X"1F",X"07",X"1F",X"01",X"63", - X"F8",X"F0",X"F0",X"E0",X"80",X"00",X"00",X"00",X"4C",X"4E",X"7F",X"4E",X"4C",X"F8",X"F8",X"F0", - X"C0",X"E0",X"F0",X"F0",X"F8",X"F0",X"F8",X"F8",X"07",X"03",X"0F",X"07",X"1F",X"7E",X"F0",X"00", - X"73",X"06",X"0C",X"06",X"73",X"1F",X"71",X"00",X"1F",X"7F",X"07",X"0F",X"01",X"03",X"71",X"1F", - X"FE",X"9C",X"98",X"F0",X"F8",X"FC",X"FC",X"7E",X"3E",X"7E",X"FC",X"FC",X"F8",X"F0",X"98",X"9C", - X"30",X"18",X"0C",X"1F",X"F7",X"61",X"C0",X"00",X"00",X"00",X"C0",X"61",X"F7",X"1F",X"0C",X"18", - X"98",X"F0",X"F8",X"FC",X"FC",X"7E",X"3E",X"3E",X"FC",X"FC",X"F8",X"F0",X"98",X"9C",X"FE",X"9C", - X"0D",X"1F",X"FB",X"31",X"E0",X"00",X"00",X"00",X"E0",X"31",X"FB",X"1F",X"0D",X"19",X"31",X"19", - X"F8",X"FC",X"FC",X"7E",X"3E",X"7F",X"1F",X"3F",X"F8",X"F0",X"98",X"9C",X"FE",X"9C",X"98",X"F0", - X"3F",X"0F",X"1F",X"3F",X"3E",X"7E",X"FC",X"FC",X"3B",X"F1",X"20",X"E0",X"00",X"00",X"00",X"00", - X"3B",X"1F",X"0D",X"19",X"39",X"19",X"0D",X"1F",X"00",X"00",X"00",X"00",X"00",X"E0",X"20",X"F1", - X"FC",X"7E",X"3E",X"7F",X"1F",X"7F",X"1F",X"3F",X"98",X"9C",X"FE",X"9C",X"98",X"F0",X"F8",X"FC", - X"3F",X"1F",X"7E",X"7E",X"FC",X"FC",X"F8",X"F0",X"0D",X"19",X"31",X"19",X"0D",X"EF",X"3B",X"E1", - X"00",X"00",X"00",X"00",X"00",X"E1",X"3B",X"EF",X"7F",X"4E",X"CC",X"F8",X"F8",X"FC",X"FC",X"7C", - X"FC",X"FC",X"FC",X"7C",X"F8",X"F8",X"CC",X"4E",X"0C",X"06",X"63",X"3F",X"61",X"00",X"01",X"00", - X"01",X"00",X"01",X"00",X"61",X"3F",X"63",X"06",X"98",X"F0",X"F8",X"FC",X"FC",X"00",X"00",X"00", - X"F8",X"FC",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"F8", - X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0", - X"07",X"0F",X"1F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1F",X"0F", - X"0F",X"07",X"1F",X"7E",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"7E",X"0F",X"3F", - X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"F0",X"3F",X"7E",X"F8",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"F8",X"7E",X"0F",X"3F",X"07",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"7F", - X"1F",X"0F",X"1E",X"0E",X"1E",X"0C",X"1C",X"18",X"7E",X"3F",X"FF",X"1F",X"3F",X"0F",X"3F",X"0F", - X"3F",X"0F",X"07",X"1F",X"0F",X"3F",X"1F",X"7E",X"00",X"18",X"1C",X"0C",X"1E",X"0E",X"1E",X"0F", - X"1E",X"0E",X"3C",X"1C",X"18",X"30",X"00",X"00",X"70",X"38",X"3C",X"1C",X"3E",X"0E",X"3F",X"0F", - X"0E",X"1E",X"1C",X"38",X"30",X"00",X"00",X"00",X"0F",X"3F",X"0F",X"3F",X"0F",X"1F",X"0E",X"1E", - X"1F",X"0F",X"3F",X"0F",X"1F",X"0F",X"3F",X"0F",X"00",X"00",X"00",X"00",X"00",X"38",X"1C",X"0C", - X"0E",X"1C",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"1C",X"0C",X"1E",X"0E", - X"F0",X"F0",X"E0",X"C0",X"80",X"00",X"00",X"00",X"FE",X"3E",X"7E",X"3C",X"7C",X"FC",X"78",X"F8", - X"03",X"01",X"07",X"03",X"07",X"1E",X"00",X"00",X"F8",X"78",X"FC",X"7C",X"FC",X"3E",X"7E",X"3E", - X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"F0",X"00",X"00",X"00",X"1F",X"07",X"03",X"07",X"01", - X"FC",X"F8",X"F8",X"F0",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"F0",X"F8",X"F8", - X"00",X"01",X"00",X"07",X"03",X"0F",X"1F",X"7C",X"00",X"7C",X"3F",X"0F",X"07",X"03",X"01",X"03", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic24.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic24.vhd deleted file mode 100644 index f420697f..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic24.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prom_ic24 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of prom_ic24 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"10",X"38",X"10",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0", - X"00",X"00",X"44",X"10",X"10",X"40",X"00",X"00",X"00",X"00",X"00",X"08",X"40",X"00",X"90",X"94", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80", - X"80",X"40",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80", - X"00",X"80",X"C0",X"64",X"32",X"19",X"0F",X"07",X"07",X"0D",X"19",X"32",X"64",X"C0",X"80",X"00", - X"80",X"20",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"40",X"10", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"05",X"0A",X"14",X"28",X"40",X"80",X"00", - X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03", - X"18",X"1B",X"03",X"00",X"08",X"08",X"01",X"00",X"00",X"00",X"02",X"01",X"21",X"04",X"41",X"41", - X"04",X"00",X"15",X"00",X"44",X"28",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"02",X"01", - X"07",X"0D",X"18",X"30",X"60",X"C8",X"D0",X"E0",X"E0",X"D0",X"C8",X"60",X"30",X"18",X"0D",X"07", - X"00",X"01",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"05", - X"02",X"04",X"08",X"10",X"28",X"50",X"A0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01", - X"00",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"77",X"00",X"77",X"00",X"77", - X"77",X"00",X"77",X"00",X"77",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"70",X"00", - X"0F",X"F8",X"00",X"77",X"07",X"70",X"07",X"70",X"70",X"07",X"70",X"07",X"77",X"00",X"F8",X"0F", - X"F0",X"1F",X"00",X"77",X"07",X"77",X"00",X"70",X"70",X"00",X"77",X"07",X"77",X"00",X"1F",X"F0", - X"20",X"20",X"20",X"20",X"F0",X"F0",X"F0",X"F0",X"02",X"02",X"02",X"02",X"0F",X"0F",X"0F",X"0F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"18",X"7E",X"7E",X"18",X"18",X"00", - X"01",X"03",X"01",X"01",X"07",X"03",X"01",X"03",X"1F",X"03",X"1F",X"0F",X"07",X"1F",X"03",X"0F", - X"7F",X"0F",X"7F",X"3F",X"0F",X"7F",X"1F",X"3F",X"FF",X"3F",X"7F",X"FF",X"3F",X"FF",X"3F",X"7F", - X"00",X"0E",X"00",X"0E",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"0E",X"00",X"0E",X"00",X"0E", - X"0E",X"00",X"0E",X"00",X"0E",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"0E",X"00",X"0E",X"00", - X"0F",X"F8",X"00",X"0E",X"00",X"0E",X"00",X"0E",X"0E",X"00",X"0E",X"00",X"0E",X"00",X"F8",X"0F", - X"F0",X"1F",X"00",X"0E",X"00",X"0E",X"00",X"0E",X"0E",X"00",X"0E",X"00",X"0E",X"00",X"1F",X"F0", - X"F0",X"F0",X"F0",X"F0",X"20",X"20",X"20",X"20",X"0F",X"0F",X"0F",X"0F",X"02",X"02",X"02",X"02", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"18",X"18",X"00", - X"FF",X"FF",X"7E",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"7E",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60", - X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60", - X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00", - X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"00", - X"07",X"0C",X"38",X"60",X"C6",X"6C",X"38",X"00",X"00",X"38",X"6C",X"C6",X"60",X"38",X"0C",X"07", - X"07",X"1C",X"70",X"C0",X"80",X"D8",X"70",X"00",X"00",X"70",X"D8",X"80",X"C0",X"70",X"1C",X"07", - X"07",X"1C",X"70",X"C0",X"80",X"C0",X"60",X"00",X"00",X"60",X"C0",X"80",X"C0",X"70",X"1C",X"07", - X"07",X"3C",X"60",X"C0",X"80",X"80",X"80",X"00",X"00",X"80",X"80",X"80",X"C0",X"60",X"3C",X"07", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"10",X"00",X"10",X"00",X"00",X"00",X"10",X"00",X"10",X"00",X"00",X"00", - X"10",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00", - X"00",X"38",X"44",X"9A",X"82",X"9A",X"44",X"38",X"44",X"9A",X"82",X"9A",X"44",X"38",X"00",X"00", - X"82",X"9A",X"44",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"44",X"9A", - X"44",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"44",X"9A",X"82",X"9A", - X"3C",X"42",X"99",X"81",X"81",X"99",X"42",X"3C",X"99",X"81",X"81",X"99",X"42",X"3C",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"42",X"81",X"99",X"42",X"3C",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"3C",X"42",X"99",X"81",X"42",X"3C",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"3C",X"42",X"99",X"81",X"81",X"99",X"01",X"31",X"32",X"02",X"8C",X"70",X"00",X"00", - X"00",X"00",X"00",X"70",X"8C",X"02",X"32",X"31",X"04",X"04",X"02",X"02",X"01",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"01",X"02",X"02",X"04",X"01",X"31",X"32",X"02",X"04",X"08",X"F0",X"00", - X"00",X"00",X"F0",X"08",X"04",X"02",X"32",X"31",X"08",X"08",X"04",X"1C",X"02",X"01",X"00",X"00", - X"00",X"00",X"00",X"01",X"02",X"1C",X"04",X"08",X"80",X"30",X"30",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"01",X"00",X"20",X"3C",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"3C",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"03",X"20",X"30",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3C",X"70",X"60", - X"03",X"60",X"70",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1E",X"70",X"60", - X"B0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"B0",X"B0",X"80",X"B0", - X"70",X"1E",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"70",X"1E",X"70",X"01",X"03",X"01", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"B0",X"B0",X"80",X"B0",X"B0",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"60",X"00",X"00",X"00",X"00",X"00",X"00", - X"30",X"1E",X"31",X"63",X"07",X"33",X"31",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"B0",X"B0",X"80",X"B0",X"B0",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"70",X"01",X"03",X"01",X"70",X"1E",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"70",X"1E", - X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60", - X"0F",X"07",X"03",X"18",X"F0",X"60",X"C0",X"00",X"00",X"00",X"C0",X"60",X"F0",X"18",X"03",X"07", - X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"60", - X"02",X"18",X"F8",X"30",X"E0",X"00",X"00",X"00",X"E0",X"30",X"F8",X"18",X"02",X"06",X"0E",X"06", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"60",X"60",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"F0",X"20",X"E0",X"00",X"00",X"00",X"00", - X"38",X"18",X"02",X"06",X"06",X"06",X"02",X"18",X"00",X"00",X"00",X"00",X"00",X"E0",X"20",X"F0", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"60",X"60",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"06",X"0E",X"06",X"02",X"E8",X"38",X"E0", - X"00",X"00",X"00",X"00",X"00",X"E0",X"38",X"E8",X"80",X"B0",X"30",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"B0",X"03",X"01",X"60",X"3E",X"60",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"60",X"3E",X"60",X"01",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic39.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic39.vhd deleted file mode 100644 index acd8075a..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic39.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prom_ic39 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of prom_ic39 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7C",X"12",X"12",X"12",X"7E",X"7C",X"00", - X"00",X"34",X"4A",X"4A",X"4A",X"7E",X"7E",X"00",X"00",X"24",X"42",X"42",X"42",X"7E",X"3C",X"00", - X"00",X"3C",X"42",X"42",X"42",X"7E",X"7E",X"00",X"00",X"42",X"4A",X"4A",X"4A",X"7E",X"7E",X"00", - X"00",X"02",X"0A",X"0A",X"0A",X"7E",X"7E",X"00",X"00",X"34",X"52",X"52",X"42",X"7E",X"3C",X"00", - X"00",X"7E",X"08",X"08",X"08",X"7E",X"7E",X"00",X"00",X"42",X"42",X"7E",X"7E",X"42",X"42",X"00", - X"00",X"7E",X"7E",X"7E",X"40",X"40",X"30",X"00",X"00",X"42",X"24",X"18",X"08",X"7E",X"7E",X"00", - X"00",X"40",X"40",X"40",X"40",X"7E",X"7E",X"00",X"00",X"7E",X"02",X"7C",X"02",X"7E",X"7E",X"00", - X"00",X"7E",X"20",X"18",X"04",X"7E",X"7E",X"00",X"00",X"3C",X"42",X"42",X"42",X"7E",X"3C",X"00", - X"00",X"0C",X"12",X"12",X"12",X"7E",X"7E",X"00",X"00",X"40",X"3C",X"62",X"42",X"7E",X"3C",X"00", - X"00",X"44",X"2A",X"1A",X"0A",X"7E",X"7E",X"00",X"00",X"34",X"72",X"4A",X"4A",X"4E",X"2C",X"00", - X"00",X"02",X"02",X"7E",X"7E",X"02",X"02",X"00",X"00",X"3E",X"40",X"40",X"40",X"7E",X"7E",X"00", - X"00",X"1E",X"20",X"40",X"20",X"3E",X"1E",X"00",X"00",X"3E",X"40",X"38",X"40",X"7E",X"3E",X"00", - X"00",X"42",X"26",X"1C",X"38",X"74",X"62",X"00",X"00",X"06",X"08",X"70",X"08",X"0E",X"06",X"00", - X"00",X"42",X"46",X"4E",X"5A",X"72",X"62",X"00",X"00",X"00",X"00",X"42",X"42",X"7E",X"00",X"00", - X"00",X"00",X"00",X"7E",X"42",X"42",X"00",X"00",X"00",X"00",X"42",X"66",X"3C",X"18",X"00",X"00", - X"00",X"00",X"00",X"18",X"3C",X"66",X"42",X"00",X"00",X"00",X"24",X"18",X"7E",X"18",X"24",X"00", - X"00",X"00",X"3C",X"46",X"4A",X"52",X"3C",X"00",X"00",X"00",X"40",X"40",X"7E",X"42",X"44",X"00", - X"00",X"00",X"64",X"4A",X"52",X"62",X"44",X"00",X"00",X"00",X"34",X"4A",X"4A",X"4A",X"42",X"00", - X"00",X"00",X"08",X"7E",X"08",X"08",X"0E",X"00",X"00",X"00",X"30",X"4A",X"4A",X"4A",X"4E",X"00", - X"00",X"00",X"30",X"4A",X"4A",X"4A",X"3C",X"00",X"00",X"00",X"06",X"1A",X"32",X"62",X"06",X"00", - X"00",X"00",X"34",X"4A",X"4A",X"4A",X"34",X"00",X"00",X"00",X"3C",X"52",X"52",X"52",X"0C",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"08",X"08",X"08",X"08",X"08",X"00", - X"3C",X"42",X"81",X"81",X"81",X"81",X"42",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"09",X"51",X"01",X"02",X"00", - X"FC",X"E0",X"70",X"38",X"1C",X"3E",X"00",X"00",X"00",X"3E",X"1C",X"38",X"70",X"E0",X"FC",X"9F", - X"E0",X"70",X"38",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"38",X"70",X"E0",X"FC",X"9F",X"FC", - X"70",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"70",X"E0",X"FC",X"9F",X"FC",X"E0", - X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"70",X"E0",X"FC",X"9F",X"FC",X"E0",X"70", - X"70",X"E0",X"FC",X"9F",X"FC",X"E0",X"70",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8", - X"E0",X"FC",X"9F",X"FC",X"E0",X"70",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"70", - X"FC",X"9F",X"FC",X"E0",X"70",X"38",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"38",X"70",X"E0", - X"9F",X"FC",X"E0",X"70",X"38",X"1C",X"3E",X"00",X"00",X"00",X"3E",X"1C",X"38",X"70",X"E0",X"FC", - X"7F",X"C7",X"0E",X"1C",X"38",X"70",X"FC",X"00",X"FC",X"70",X"38",X"1C",X"0E",X"C7",X"7F",X"E3", - X"CE",X"1C",X"38",X"70",X"FC",X"00",X"00",X"00",X"FC",X"70",X"38",X"1C",X"CE",X"7F",X"E3",X"7F", - X"3C",X"78",X"FC",X"00",X"00",X"00",X"00",X"00",X"FC",X"78",X"3C",X"DE",X"7F",X"E3",X"7F",X"DE", - X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"78",X"FC",X"7F",X"E3",X"7F",X"FC",X"78", - X"78",X"FC",X"7F",X"E3",X"7F",X"FC",X"78",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC", - X"DE",X"7F",X"E3",X"7F",X"DE",X"3C",X"78",X"FC",X"00",X"00",X"00",X"00",X"00",X"FC",X"78",X"3C", - X"7F",X"E3",X"7F",X"CE",X"1C",X"38",X"70",X"FC",X"00",X"00",X"00",X"FC",X"70",X"38",X"1C",X"CE", - X"E3",X"7F",X"C7",X"0E",X"1C",X"38",X"70",X"FC",X"00",X"FC",X"70",X"38",X"1C",X"0E",X"C7",X"7F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00", - X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00", - X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00", - X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00", - X"00",X"00",X"0F",X"0F",X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00", - X"00",X"00",X"F0",X"F0",X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00",X"00",X"00",X"00",X"00", - X"7E",X"CC",X"38",X"FE",X"38",X"CC",X"7E",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F", - X"78",X"3E",X"78",X"9C",X"0E",X"FF",X"3E",X"00",X"00",X"00",X"00",X"00",X"3E",X"FF",X"0E",X"9C", - X"38",X"5C",X"4E",X"87",X"0F",X"3E",X"FC",X"00",X"FC",X"3E",X"0F",X"87",X"4E",X"5C",X"38",X"3E", - X"0E",X"FF",X"3E",X"00",X"00",X"00",X"00",X"00",X"3E",X"FF",X"0E",X"9C",X"78",X"3E",X"78",X"9C", - X"FF",X"1C",X"38",X"FE",X"38",X"1C",X"FF",X"00",X"82",X"92",X"D6",X"FE",X"FE",X"BA",X"92",X"92", - X"FF",X"38",X"1C",X"7F",X"1C",X"38",X"FF",X"00",X"92",X"92",X"BA",X"FE",X"FE",X"D6",X"92",X"82", - X"00",X"00",X"10",X"38",X"10",X"00",X"00",X"00",X"00",X"08",X"30",X"7C",X"30",X"08",X"00",X"00", - X"00",X"0C",X"38",X"FE",X"38",X"0C",X"00",X"00",X"1E",X"0C",X"38",X"FE",X"38",X"0C",X"1E",X"00", - X"3D",X"3E",X"5C",X"18",X"10",X"20",X"00",X"00",X"00",X"00",X"04",X"08",X"18",X"3A",X"74",X"B8", - X"7C",X"3A",X"18",X"08",X"04",X"00",X"00",X"00",X"00",X"20",X"10",X"18",X"5C",X"2E",X"1D",X"BC", - X"BC",X"1D",X"2E",X"5C",X"18",X"10",X"20",X"00",X"00",X"00",X"00",X"04",X"08",X"18",X"3A",X"7C", - X"74",X"3A",X"18",X"08",X"04",X"00",X"00",X"00",X"00",X"20",X"10",X"18",X"5C",X"3E",X"3D",X"B8", - X"18",X"F8",X"F0",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"38",X"18", - X"FE",X"BA",X"92",X"92",X"00",X"10",X"28",X"10",X"00",X"00",X"00",X"00",X"82",X"92",X"D6",X"FE", - X"18",X"1F",X"0F",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"1C",X"1C",X"18", - X"00",X"00",X"00",X"00",X"00",X"0A",X"0E",X"00",X"00",X"C3",X"66",X"BC",X"E7",X"BC",X"66",X"C3", - X"F0",X"F8",X"3C",X"0C",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"C0", - X"A0",X"C0",X"E0",X"F0",X"70",X"38",X"18",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"F8",X"DC",X"0C",X"0C",X"1C",X"18",X"10",X"00",X"00",X"00",X"00",X"00",X"80",X"E8",X"F0",X"78", - X"00",X"40",X"88",X"70",X"E0",X"C0",X"80",X"00",X"80",X"40",X"E0",X"F0",X"F8",X"C4",X"20",X"00", - X"00",X"40",X"88",X"F0",X"E0",X"C0",X"80",X"00",X"80",X"40",X"E0",X"F0",X"B8",X"44",X"20",X"00", - X"F0",X"C0",X"80",X"E0",X"80",X"C0",X"F0",X"00",X"F0",X"80",X"C2",X"F5",X"C2",X"80",X"F0",X"00", - X"FE",X"D6",X"92",X"82",X"00",X"00",X"00",X"00",X"10",X"28",X"10",X"00",X"92",X"92",X"BA",X"FE", - X"7C",X"E0",X"C0",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"C0",X"E0",X"7C",X"F0", - X"0F",X"0C",X"10",X"00",X"00",X"00",X"00",X"00",X"70",X"38",X"1C",X"1C",X"0E",X"0E",X"07",X"07", - X"07",X"03",X"01",X"03",X"03",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"1C",X"1F", - X"00",X"00",X"01",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"0F",X"1C",X"00", - X"02",X"04",X"0E",X"1F",X"3F",X"47",X"08",X"01",X"00",X"04",X"22",X"1D",X"0F",X"07",X"02",X"01", - X"02",X"04",X"0F",X"1F",X"3B",X"45",X"08",X"01",X"00",X"04",X"23",X"1F",X"0F",X"07",X"02",X"01", - X"0F",X"01",X"43",X"AF",X"43",X"01",X"0F",X"00",X"0F",X"03",X"01",X"07",X"01",X"03",X"0F",X"00", - X"78",X"FA",X"DC",X"9F",X"BF",X"33",X"43",X"1E",X"1E",X"47",X"33",X"BF",X"9F",X"DC",X"FA",X"78", - X"00",X"00",X"01",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"01",X"00",X"00",X"01", - X"C0",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"C0",X"00", - X"E8",X"F0",X"60",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"20",X"C0",X"C4", - X"C4",X"C0",X"20",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"E0",X"F0",X"C8", - X"C8",X"F0",X"E0",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"20",X"C0",X"C4", - X"C4",X"C0",X"20",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"60",X"F0",X"E8", - X"C0",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"0C",X"3C",X"F8",X"F0", - X"38",X"70",X"F0",X"E0",X"C0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"18",X"18", - X"78",X"F0",X"E8",X"80",X"00",X"00",X"00",X"00",X"00",X"10",X"18",X"18",X"0C",X"0C",X"DC",X"F8", - X"07",X"0E",X"1C",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"1C",X"0E",X"07",X"1F", - X"23",X"03",X"04",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"07",X"0F",X"13", - X"17",X"0F",X"06",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"04",X"03",X"23", - X"23",X"03",X"04",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"06",X"0F",X"17", - X"13",X"0F",X"07",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"04",X"03",X"23", - X"07",X"07",X"0E",X"0E",X"1C",X"1C",X"38",X"70",X"00",X"00",X"00",X"00",X"20",X"10",X"0C",X"0F", - X"04",X"03",X"03",X"01",X"03",X"07",X"1F",X"7C",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"1C",X"0F",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"01",X"00",X"00", - X"00",X"60",X"60",X"00",X"08",X"00",X"00",X"00",X"40",X"00",X"08",X"1C",X"08",X"00",X"00",X"00", - X"18",X"7E",X"CF",X"BD",X"BD",X"F3",X"7F",X"3C",X"08",X"24",X"01",X"84",X"50",X"09",X"22",X"08", - X"FF",X"FF",X"FE",X"FE",X"FC",X"FC",X"F8",X"E0",X"A1",X"29",X"23",X"B3",X"77",X"77",X"FF",X"FF", - X"FF",X"FF",X"77",X"77",X"B3",X"23",X"A9",X"25",X"E0",X"F8",X"FC",X"FC",X"FE",X"FE",X"FF",X"FF", - X"8C",X"C2",X"C0",X"F0",X"3A",X"38",X"0C",X"46",X"C4",X"80",X"FC",X"FF",X"F0",X"82",X"F0",X"38", - X"05",X"1C",X"78",X"F2",X"F0",X"C4",X"98",X"72",X"E2",X"80",X"0C",X"1E",X"1A",X"8C",X"00",X"00", - X"F8",X"78",X"B0",X"60",X"F3",X"DB",X"D8",X"30",X"0C",X"1E",X"0C",X"80",X"C0",X"C0",X"64",X"B2", - X"00",X"00",X"08",X"1C",X"3E",X"36",X"22",X"00",X"00",X"00",X"0E",X"1C",X"38",X"1C",X"0E",X"00", - X"00",X"00",X"3E",X"3E",X"3E",X"3E",X"3E",X"00",X"60",X"70",X"78",X"7C",X"3C",X"1C",X"0C",X"04", - X"20",X"30",X"38",X"1C",X"0E",X"06",X"02",X"00",X"00",X"10",X"38",X"7C",X"FE",X"7C",X"38",X"10", - X"FF",X"FF",X"7F",X"7F",X"3F",X"3F",X"1F",X"07",X"A4",X"85",X"D4",X"C6",X"EE",X"EF",X"FF",X"FF", - X"FF",X"FF",X"EF",X"EE",X"C6",X"D4",X"84",X"A5",X"07",X"1F",X"3F",X"3F",X"7F",X"7F",X"FF",X"FF", - X"3F",X"3D",X"2D",X"66",X"26",X"43",X"12",X"20",X"3B",X"3B",X"75",X"EE",X"F5",X"3B",X"7B",X"9F", - X"20",X"09",X"2C",X"84",X"44",X"ED",X"6D",X"7F",X"77",X"27",X"03",X"20",X"00",X"08",X"1C",X"08", - X"EF",X"F9",X"77",X"37",X"7C",X"DF",X"EB",X"7D",X"20",X"41",X"04",X"31",X"7B",X"7E",X"33",X"6F", - X"00",X"00",X"22",X"36",X"3E",X"1C",X"08",X"00",X"00",X"38",X"1C",X"0E",X"1C",X"38",X"00",X"00", - X"00",X"60",X"78",X"3C",X"1E",X"0E",X"06",X"00",X"00",X"38",X"38",X"38",X"18",X"18",X"38",X"38", - X"00",X"00",X"07",X"7F",X"FE",X"E0",X"00",X"00",X"03",X"07",X"77",X"DD",X"FF",X"F6",X"3C",X"00", - X"9E",X"F8",X"E0",X"70",X"38",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"38",X"70",X"E0",X"F8", - X"79",X"3F",X"67",X"0E",X"1C",X"38",X"7C",X"00",X"00",X"00",X"7C",X"38",X"1C",X"0E",X"67",X"3F", - X"90",X"20",X"40",X"80",X"00",X"00",X"00",X"00",X"34",X"34",X"34",X"64",X"68",X"68",X"C8",X"D0", - X"D0",X"C8",X"68",X"68",X"64",X"34",X"34",X"34",X"00",X"00",X"00",X"00",X"80",X"40",X"20",X"90", - X"34",X"64",X"C8",X"90",X"20",X"C0",X"00",X"00",X"0D",X"0D",X"0D",X"0D",X"19",X"1A",X"1A",X"32", - X"32",X"1A",X"1A",X"19",X"0D",X"0D",X"0D",X"0D",X"00",X"00",X"C0",X"20",X"90",X"C8",X"64",X"34", - X"09",X"04",X"02",X"01",X"00",X"00",X"00",X"00",X"2C",X"2C",X"2C",X"26",X"16",X"16",X"13",X"0B", - X"0B",X"03",X"06",X"06",X"26",X"2C",X"2C",X"2C",X"00",X"00",X"00",X"00",X"01",X"02",X"04",X"09", - X"2C",X"26",X"13",X"09",X"04",X"03",X"00",X"00",X"B0",X"B0",X"B0",X"B0",X"98",X"58",X"58",X"4C", - X"4C",X"58",X"50",X"98",X"B0",X"B0",X"B0",X"B0",X"00",X"00",X"03",X"04",X"09",X"13",X"26",X"2C", - X"03",X"1F",X"FC",X"E1",X"0E",X"F0",X"00",X"00",X"C0",X"F8",X"3F",X"87",X"70",X"0F",X"00",X"00", - X"00",X"00",X"0F",X"70",X"87",X"3F",X"F8",X"C0",X"00",X"00",X"F0",X"0E",X"E1",X"FC",X"1F",X"03", - X"00",X"00",X"01",X"0F",X"FE",X"F0",X"07",X"F8",X"00",X"00",X"80",X"F0",X"7F",X"0F",X"E0",X"1F", - X"1F",X"E0",X"0F",X"7F",X"F0",X"80",X"00",X"00",X"F8",X"07",X"F0",X"FE",X"0F",X"01",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic40.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic40.vhd deleted file mode 100644 index ab29736f..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_ic40.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prom_ic40 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of prom_ic40 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"18",X"7E",X"18",X"24",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"24",X"42",X"42",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00",X"3E",X"00",X"00",X"00",X"00",X"00",X"F0", - X"00",X"00",X"00",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"00",X"00",X"00",X"00",X"F0",X"00", - X"00",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"00",X"00",X"00",X"F0",X"00",X"00", - X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"00",X"00",X"00",X"F0",X"00",X"00",X"00", - X"00",X"00",X"00",X"F0",X"00",X"00",X"00",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8", - X"00",X"00",X"F0",X"00",X"00",X"00",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"00", - X"00",X"F0",X"00",X"00",X"00",X"00",X"7C",X"00",X"00",X"00",X"00",X"00",X"7C",X"00",X"00",X"00", - X"F0",X"00",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00",X"3E",X"00",X"00",X"00",X"00",X"00", - X"00",X"C0",X"00",X"00",X"00",X"00",X"FC",X"00",X"FC",X"00",X"00",X"00",X"00",X"C0",X"00",X"DC", - X"C0",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"C0",X"00",X"DC",X"00", - X"00",X"00",X"FC",X"00",X"00",X"00",X"00",X"00",X"FC",X"00",X"00",X"C0",X"00",X"DC",X"00",X"C0", - X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"00",X"C0",X"00",X"DC",X"00",X"C0",X"00", - X"00",X"C0",X"00",X"DC",X"00",X"C0",X"00",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC", - X"C0",X"00",X"DC",X"00",X"C0",X"00",X"00",X"FC",X"00",X"00",X"00",X"00",X"00",X"FC",X"00",X"00", - X"00",X"DC",X"00",X"C0",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"FC",X"00",X"00",X"00",X"C0", - X"DC",X"00",X"C0",X"00",X"00",X"00",X"00",X"FC",X"00",X"FC",X"00",X"00",X"00",X"00",X"C0",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00", - X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00", - X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00", - X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00", - X"00",X"00",X"0F",X"0F",X"00",X"00",X"00",X"00",X"0F",X"0F",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00", - X"00",X"00",X"F0",X"F0",X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00",X"00",X"00",X"00",X"00", - X"7E",X"CC",X"01",X"00",X"01",X"CC",X"7E",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F", - X"01",X"00",X"01",X"1C",X"0E",X"FF",X"3E",X"00",X"00",X"00",X"00",X"00",X"3E",X"FF",X"0E",X"1C", - X"01",X"1C",X"0E",X"07",X"0F",X"3E",X"FC",X"00",X"FC",X"3E",X"0F",X"07",X"0E",X"1C",X"01",X"00", - X"0E",X"FF",X"3E",X"00",X"00",X"00",X"00",X"00",X"3E",X"FF",X"0E",X"1C",X"01",X"00",X"01",X"1C", - X"FF",X"1C",X"01",X"00",X"01",X"1C",X"FF",X"00",X"AA",X"82",X"C6",X"C6",X"C6",X"82",X"82",X"82", - X"FF",X"38",X"80",X"00",X"80",X"38",X"FF",X"00",X"82",X"82",X"82",X"C6",X"C6",X"C6",X"82",X"AA", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"0C",X"00",X"00",X"00",X"0C",X"00",X"00",X"1E",X"0C",X"01",X"00",X"01",X"00",X"1E",X"00", - X"01",X"06",X"0C",X"18",X"10",X"20",X"00",X"00",X"00",X"00",X"04",X"08",X"1A",X"33",X"60",X"80", - X"60",X"30",X"18",X"08",X"04",X"00",X"00",X"00",X"00",X"20",X"10",X"58",X"CC",X"06",X"01",X"00", - X"80",X"01",X"06",X"CC",X"58",X"10",X"20",X"00",X"00",X"00",X"00",X"04",X"08",X"18",X"30",X"60", - X"60",X"33",X"1A",X"08",X"04",X"00",X"00",X"00",X"00",X"20",X"10",X"18",X"0C",X"06",X"01",X"00", - X"03",X"03",X"03",X"06",X"0E",X"1C",X"F8",X"E0",X"E0",X"F8",X"1C",X"0E",X"06",X"03",X"03",X"03", - X"C6",X"82",X"82",X"82",X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"AA",X"82",X"C6",X"C6", - X"C0",X"C0",X"C0",X"60",X"70",X"38",X"1F",X"07",X"07",X"1F",X"38",X"70",X"60",X"C0",X"C0",X"C0", - X"00",X"00",X"00",X"00",X"0A",X"11",X"11",X"0E",X"00",X"00",X"00",X"80",X"3C",X"80",X"00",X"00", - X"F0",X"F8",X"3C",X"0C",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"00",X"C0", - X"90",X"00",X"20",X"70",X"70",X"38",X"18",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20", - X"18",X"1C",X"0C",X"0C",X"1C",X"18",X"10",X"00",X"00",X"00",X"00",X"00",X"88",X"E4",X"C0",X"08", - X"40",X"20",X"08",X"30",X"60",X"C0",X"80",X"00",X"80",X"40",X"60",X"30",X"18",X"04",X"00",X"00", - X"00",X"00",X"08",X"30",X"60",X"C0",X"80",X"00",X"80",X"40",X"60",X"30",X"18",X"04",X"10",X"20", - X"F0",X"C0",X"10",X"00",X"10",X"C0",X"F0",X"00",X"F0",X"80",X"02",X"07",X"02",X"80",X"F0",X"00", - X"C6",X"C6",X"82",X"AA",X"00",X"00",X"00",X"00",X"10",X"38",X"10",X"00",X"82",X"82",X"82",X"C6", - X"00",X"C0",X"C0",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"C0",X"E0",X"00",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"70",X"38",X"1C",X"1C",X"0E",X"0E",X"04",X"00", - X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"1C",X"1F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"0F",X"1C",X"00", - X"02",X"04",X"0C",X"18",X"30",X"40",X"00",X"00",X"04",X"08",X"20",X"18",X"0C",X"06",X"02",X"01", - X"02",X"04",X"0C",X"18",X"30",X"40",X"10",X"09",X"00",X"00",X"20",X"18",X"0C",X"06",X"02",X"01", - X"0F",X"01",X"40",X"E0",X"40",X"01",X"0F",X"00",X"0F",X"03",X"08",X"00",X"08",X"03",X"0F",X"00", - X"7A",X"F9",X"D0",X"83",X"87",X"03",X"03",X"1E",X"1E",X"07",X"03",X"87",X"83",X"D0",X"F9",X"7A", - X"02",X"00",X"01",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"01",X"00",X"02",X"00", - X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00", - X"28",X"70",X"60",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"20",X"10",X"00",X"00", - X"04",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"E0",X"70",X"08", - X"08",X"70",X"E0",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"04", - X"04",X"00",X"10",X"20",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"60",X"70",X"28", - X"C0",X"00",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"0C",X"3C",X"F8",X"F0", - X"38",X"70",X"70",X"20",X"00",X"10",X"20",X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"18",X"18", - X"08",X"C0",X"E4",X"88",X"00",X"00",X"00",X"00",X"00",X"10",X"18",X"18",X"0C",X"0C",X"1C",X"18", - X"20",X"0E",X"1C",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"1C",X"0E",X"20",X"00", - X"20",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"07",X"0E",X"10", - X"14",X"0E",X"06",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"04",X"08",X"00",X"00", - X"20",X"00",X"08",X"04",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"06",X"0E",X"14", - X"10",X"0E",X"07",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"20", - X"00",X"04",X"0E",X"0E",X"1C",X"1C",X"38",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01", - X"00",X"00",X"00",X"00",X"03",X"07",X"1F",X"7C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"1C",X"0F",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"08",X"1C",X"08",X"00",X"00",X"00", - X"00",X"10",X"78",X"62",X"46",X"0E",X"1C",X"00",X"00",X"04",X"10",X"80",X"00",X"08",X"02",X"00", - X"03",X"03",X"06",X"0E",X"3C",X"FC",X"F8",X"E0",X"00",X"08",X"00",X"01",X"00",X"01",X"01",X"01", - X"01",X"01",X"01",X"00",X"01",X"00",X"08",X"00",X"E0",X"F8",X"FC",X"3C",X"0E",X"06",X"03",X"03", - X"0C",X"80",X"40",X"20",X"10",X"08",X"00",X"42",X"C4",X"80",X"E0",X"FA",X"C0",X"80",X"60",X"10", - X"00",X"08",X"10",X"22",X"C0",X"80",X"88",X"20",X"00",X"00",X"00",X"0C",X"0C",X"00",X"00",X"00", - X"E0",X"E0",X"C0",X"80",X"C3",X"E0",X"E0",X"C0",X"00",X"0C",X"00",X"00",X"00",X"80",X"80",X"C2", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"C0",X"C0",X"60",X"70",X"3C",X"3F",X"1F",X"07",X"00",X"10",X"00",X"80",X"00",X"80",X"80",X"80", - X"80",X"80",X"80",X"00",X"80",X"00",X"10",X"00",X"07",X"1F",X"3F",X"3C",X"70",X"60",X"C0",X"C0", - X"1B",X"19",X"20",X"24",X"00",X"42",X"10",X"00",X"1F",X"1F",X"3F",X"FF",X"3F",X"3F",X"5F",X"0E", - X"00",X"00",X"24",X"80",X"44",X"45",X"2B",X"2F",X"03",X"00",X"00",X"20",X"00",X"00",X"08",X"00", - X"3F",X"3F",X"1F",X"1F",X"1F",X"3F",X"3F",X"03",X"00",X"40",X"04",X"00",X"00",X"19",X"1F",X"1F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"60",X"78",X"3C",X"1E",X"0E",X"06",X"00",X"00",X"38",X"38",X"38",X"18",X"18",X"38",X"38", - X"00",X"00",X"07",X"7F",X"FE",X"E0",X"00",X"00",X"03",X"07",X"77",X"DD",X"FF",X"F6",X"3C",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"70",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"0C",X"0C",X"0C",X"1C",X"18",X"18",X"38",X"30", - X"30",X"38",X"18",X"18",X"1C",X"0C",X"0C",X"0C",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"70", - X"0C",X"1C",X"38",X"70",X"E0",X"C0",X"00",X"00",X"03",X"03",X"03",X"03",X"07",X"06",X"06",X"0E", - X"0E",X"06",X"06",X"07",X"03",X"03",X"03",X"03",X"00",X"00",X"C0",X"E0",X"70",X"38",X"1C",X"0C", - X"0E",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"30",X"30",X"30",X"38",X"18",X"18",X"1C",X"0C", - X"0C",X"1C",X"18",X"18",X"38",X"30",X"30",X"30",X"00",X"00",X"00",X"00",X"01",X"03",X"07",X"0E", - X"30",X"38",X"1C",X"0E",X"07",X"03",X"00",X"00",X"C0",X"C0",X"C0",X"C0",X"E0",X"60",X"60",X"70", - X"70",X"60",X"60",X"E0",X"C0",X"C0",X"C0",X"C0",X"00",X"00",X"03",X"07",X"0E",X"1C",X"38",X"30", - X"00",X"00",X"03",X"1F",X"FE",X"F0",X"00",X"00",X"00",X"00",X"C0",X"F8",X"7F",X"0F",X"00",X"00", - X"00",X"00",X"0F",X"7F",X"F8",X"C0",X"00",X"00",X"00",X"00",X"F0",X"FE",X"1F",X"03",X"00",X"00", - X"00",X"00",X"00",X"00",X"01",X"0F",X"FF",X"F8",X"00",X"00",X"00",X"00",X"80",X"F0",X"7F",X"1F", - X"1F",X"FF",X"F0",X"80",X"00",X"00",X"00",X"00",X"F8",X"FF",X"0F",X"01",X"00",X"00",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_palette_ic40.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_palette_ic40.vhd deleted file mode 100644 index 422d60cc..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_palette_ic40.vhd +++ /dev/null @@ -1,30 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prom_palette_ic40 is -port ( - clk : in std_logic; - addr : in std_logic_vector(6 downto 0); - data : out std_logic_vector(2 downto 0) -); -end entity; - -architecture prom of prom_palette_ic40 is - type rom is array(0 to 127) of std_logic_vector(2 downto 0); - signal rom_data: rom := ( - "000","000","000","000","000","000","000","000","010","010","100","010","101","010","010","010", - "000","001","010","000","010","001","001","001","000","001","001","001","110","100","100","100", - "000","000","000","000","000","000","000","000","100","001","001","011","011","011","001","000", - "010","101","101","001","001","001","111","000","110","111","111","101","101","101","011","111", - "000","000","000","000","000","000","000","000","010","010","100","010","001","001","001","001", - "000","001","010","000","010","010","010","010","000","001","001","001","100","100","100","100", - "000","000","000","000","000","000","000","000","100","001","001","100","100","100","011","100", - "010","101","101","101","101","101","111","000","101","111","111","011","011","011","101","111"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_palette_ic41.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_palette_ic41.vhd deleted file mode 100644 index 5dcb18d9..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/ROM/prom_palette_ic41.vhd +++ /dev/null @@ -1,30 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prom_palette_ic41 is -port ( - clk : in std_logic; - addr : in std_logic_vector(6 downto 0); - data : out std_logic_vector(2 downto 0) -); -end entity; - -architecture prom of prom_palette_ic41 is - type rom is array(0 to 127) of std_logic_vector(2 downto 0); - signal rom_data: rom := ( - "000","000","000","000","000","000","000","000","010","110","101","011","101","110","110","110", - "001","011","011","110","010","011","011","011","111","101","101","011","111","101","101","101", - "000","000","000","000","000","000","000","000","110","001","001","011","011","011","001","100", - "110","101","101","111","111","111","111","011","110","111","111","101","101","101","011","111", - "000","000","000","000","000","000","000","000","010","010","101","011","011","011","011","011", - "001","011","011","110","110","110","110","110","101","101","101","011","101","101","101","101", - "000","000","000","000","000","000","000","000","110","001","001","100","100","100","011","100", - "110","101","101","101","101","101","111","011","101","111","111","111","111","111","101","111"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect1.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect1.vhd deleted file mode 100644 index 43c9433b..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect1.vhd +++ /dev/null @@ -1,230 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix sound effect1 by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - --- this module generates sound how the birds fly --- how they burn and the ship's barrier activation sound --- it is most often heard module througut all levels of the game - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; -use ieee.math_real.all; - -entity phoenix_effect1 is -generic( - -- Command - Cmd_Fs: real := 11.0; -- MHz - Cmd_V: real := 12.0; -- V - Cmd_Vd: real := 0.46; -- V - Cmd_Vce: real := 0.2; -- V - Cmd_R1: real := 100.0; -- k - Cmd_R2: real := 33.0; -- k - Cmd_R3: real := 0.47; -- k - Cmd_C: real := 6.8; -- uF - Cmd_Div2n: integer := 8; -- bits divisor - Cmd_bits: integer := 16; -- bits counter - -- Oscillator - Osc_Fs: real := 11.0; -- MHz - Osc_Vb: real := 5.0; -- V - Osc_Vce: real := 0.2; -- V - Osc_R1: real := 47.0; -- k - Osc_R2: real := 47.0; -- k - Osc_C: real := 0.001; -- uF - Osc_Div2n: integer := 7; -- bits divisor - Osc_bits: integer := 6; -- bits counter - -- Filter - Filt_Fs: real := 11.0; -- MHz - Filt_V1: real := 5.0; -- V - Filt_V2: real := 0.0; -- V - Filt_R1: real := 100.0; -- k - Filt_R2: real := 10.0; -- k - Filt_C: real := 0.047; -- uF - Filt_Div2n: integer := 7; -- bits divisor - Filt_bits: integer := 8; -- bits counter - - Vmax: real := 5.0; -- V - Vmax_bits: integer := 16 -- number of bits to represent vmax -); -port( - clk : in std_logic; - reset : in std_logic; - trigger : in std_logic; - filter : in std_logic; - divider : in std_logic_vector(3 downto 0); - snd : out std_logic_vector(7 downto 0) -); -end phoenix_effect1; - -architecture struct of phoenix_effect1 is - --- integer representation of voltage, full range -constant IVmax: integer := integer(2**Vmax_bits)-1; --- command -- -constant Cmd_div: integer := integer(2**Cmd_Div2n); --- command charge -constant Cmd_VFc: real := (Cmd_V*Cmd_R2 + Cmd_Vd*Cmd_R1)/(Cmd_R1 + Cmd_R2); -- V -constant Cmd_RCc: real := Cmd_R1*Cmd_R2/(Cmd_R1 + Cmd_R2)*Cmd_C/1000.0; -- s -constant Cmd_ikc: integer := integer(Cmd_Fs * 1.0E6 * Cmd_RCc / 2.0**Cmd_Div2n); -constant Cmd_iVFc: integer := integer(Cmd_VFc * real(IVmax)/Vmax); --- command discharge -constant Cmd_VFd: real := (Cmd_V/Cmd_R1+Cmd_Vd/Cmd_R2+(Cmd_Vd+Cmd_Vce)/Cmd_R3)/(1.0/Cmd_R1+1.0/Cmd_R2+1.0/Cmd_R3); -- V -constant Cmd_RCd: real := 1.0/(1.0/Cmd_R1+1.0/Cmd_R2+1.0/Cmd_R3)*Cmd_C/1000.0; -- s -constant Cmd_ikd: integer := integer(Cmd_Fs * 1.0E6 * Cmd_RCd / 2.0**Cmd_Div2n); -constant Cmd_iVFd: integer := integer(Cmd_VFd * real(IVmax)/Vmax); - --- oscillator -constant Osc_div: integer := integer(2**Osc_Div2n); --- oscillator charge -constant Osc_VFc: real := Osc_Vb; -- V -constant Osc_RCc: real := (Osc_R1+Osc_R2)*Osc_C/1000.0; -- s -constant Osc_ikc: integer := integer(Osc_Fs * 1.0E6 * Osc_RCc / 2.0**Osc_Div2n); -constant Osc_iVFc: integer := integer(Osc_VFc * real(IVmax)/Vmax); --- oscillator discharge -constant Osc_VFd: real := Osc_Vce; -- V -constant Osc_RCd: real := Osc_R2*Osc_C/1000.0; -- s -constant Osc_ikd: integer := integer(Osc_Fs * 1.0E6 * Osc_RCd / 2.0**Osc_Div2n); -constant Osc_iVFd: integer := integer(Osc_VFd * real(IVmax)/Vmax); - --- filter -constant Filt_div: integer := integer(2**Filt_Div2n); --- filter charge -constant Filt_VFc: real := Filt_V1; -- V -constant Filt_RCc: real := 1.0/(1.0/Filt_R1+1.0/Filt_R2)*Filt_C/1000.0; -- s -constant Filt_ikc: integer := integer(Filt_Fs * 1.0E6 * Filt_RCc / 2.0**Filt_Div2n); -constant Filt_iVFc: integer := integer(Filt_VFc * real(IVmax)/Vmax); --- filter discharge -constant Filt_VFd: real := Filt_V2; -- V -constant Filt_RCd: real := Filt_RCc; -- s -constant Filt_ikd: integer := integer(Filt_Fs * 1.0E6 * Filt_RCd / 2.0**Filt_Div2n); -constant Filt_iVFd: integer := integer(Filt_VFd * real(IVmax)/Vmax); - -function imax(x,y: integer) return integer is begin - if x > y then - return x; - else - return y; - end if; -end imax; - -signal u_c1 : unsigned(15 downto 0) := (others => '0'); -signal u_c2 : unsigned(15 downto 0) := (others => '0'); -signal flip : std_logic := '0'; - -signal u_cf : unsigned(15 downto 0) := (others => '0'); -signal sound : std_logic := '0'; - -begin - --- Commande --- R1 = 100k, R2 = 33k, R3 = 0.47k C=6.8e-6 SR=10MHz --- Charge : VF1 = 43559, k1 = 6591 (R1//R2) --- Decharge : VF2 = 9300, k2 = 123 (R1//R2//R3) --- Div = 2^8 - -process (clk) - variable cnt: integer range 0 to imax(Cmd_ikc,Cmd_ikd) := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c1 <= (others => '0'); - else - cnt := cnt + 1; - if trigger = '1' then - if cnt = Cmd_ikc then - cnt := 0; - u_c1 <= u_c1 + (Cmd_iVFc - u_c1)/Cmd_div; - end if; - else - if cnt = Cmd_ikd then - cnt := 0; - u_c1 <= u_c1 - (u_c1 - Cmd_iVFd)/Cmd_div; - end if; - end if; - end if; - end if; -end process; - --- Oscillateur --- R1 = 47k, R2 = 47k, C=0.001e-6 SR=50MHz --- Charge : VF1 = 65535, k1 = 37 (R1+R2) --- Decharge : VF2 = 2621, k2 = 18 (R2) --- Div = 2^7 - --- Diviseur --- LS163 : Count up, Sync load when 0xF (no toggle sound if divider = 0xF) --- LS74 : Divide by 2 - -process (clk) - variable cnt: integer range 0 to imax(Osc_ikc,Osc_ikd) := 0; - variable cnt2: unsigned(3 downto 0) := (others => '0'); -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c2 <= (others => '0'); - flip <= '0'; - else - if u_c2 > u_c1 then flip <= '0'; end if; - if u_c2 < u_c1/2 then - flip <= '1'; - if flip = '0' then - cnt2 := cnt2 + 1; - if cnt2 = "0000" then - cnt2 := unsigned(divider); - if divider /= "1111" then sound <= not sound; end if; - end if; - end if; - end if; - cnt := cnt + 1; - if flip = '1' then - if cnt = Osc_ikc then - cnt := 0; - u_c2 <= u_c2 + (Osc_iVFc - u_c2)/Osc_div; - end if; - else - if cnt = Osc_ikd then - cnt := 0; - u_c2 <= u_c2 - (u_c2 - Osc_iVFd)/Osc_div; - end if; - end if; - end if; - end if; -end process; - --- filter --- R1 = 10k, R2 = 100k, C=0.047e-6, SR=10MHz --- Charge : VF1= 65535, k1 = 33 (R1//R2) --- Decharge : VF2= 0 , k2 = 33 (R1//R2) --- Div = 2^7 - -process (clk) - variable cnt: integer range 0 to imax(Filt_ikc,Filt_ikd) := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_cf <= (others => '0'); - else - cnt := cnt + 1; - if sound = '1' then - if cnt = Filt_ikc then - cnt := 0; - u_cf <= u_cf + (Filt_iVFc - u_cf)/Filt_div; - end if; - else - if cnt = Filt_ikd then - cnt := 0; - u_cf <= u_cf - (u_cf - Filt_iVFd)/Filt_div; - end if; - end if; - end if; - end if; -end process; - -with filter select snd <= std_logic_vector(u_cf(15 downto 8)) when '1', sound&"0000000" when others; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect2.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect2.vhd deleted file mode 100644 index 097f4aa9..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect2.vhd +++ /dev/null @@ -1,387 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix sound effect2 by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - --- this module outputs sound of mothership's descend --- it could be heard at beginning of level 5 --- the prrrrr...vioooouuuuu sound --- fixme: --- the VCO control levels are too coarse (quantized) --- frequency transitions are heard in large steps --- instead of continous sweep - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; -use ieee.math_real.all; - -entity phoenix_effect2 is -generic( - -- Oscillator 1 - Osc1_Fs: real := 11.0; -- MHz - Osc1_Vb: real := 5.0; -- V - Osc1_Vce: real := 0.2; -- V - Osc1_R1: real := 47.0; -- k - Osc1_R2: real := 100.0; -- k - Osc1_C1: real := 0.01; -- uF - Osc1_C2: real := 0.47; -- uF - Osc1_C3: real := 1.0; -- uF - Osc1_Div2n: integer := 8; -- bits divisor - Osc1_bits: integer := 16; -- bits counter - -- Oscillator 2 - Osc2_Fs: real := 11.0; -- MHz - Osc2_Vb: real := 5.0; -- V - Osc2_Vce: real := 0.2; -- V - Osc2_R1: real := 510.0; -- k - Osc2_R2: real := 510.0; -- k - Osc2_C: real := 1.0; -- uF - Osc2_Div2n: integer := 8; -- bits divisor - Osc2_bits: integer := 17; -- bits counter - -- Filter 2 - Filt2_Fs: real := 11.0; -- MHz - Filt2_V: real := 5.0; -- V - Filt2_R1: real := 10.0; -- k - Filt2_R2: real := 5.1; -- k - Filt2_R3: real := 5.1; -- k - Filt2_R4: real := 5.0; -- k - Filt2_R5: real := 10.0; -- k - Filt2_C: real := 100.0; -- uF - Filt2_Div2n: integer := 8; -- bits divisor - Filt2_bits: integer := 16; -- bits counter - -- Oscillator 3 - Osc3_Fs: real := 11.0; -- MHz - Osc3_Vb: real := 5.0; -- V - Osc3_Vce: real := 0.2; -- V - Osc3_R1: real := 20.0; -- k - Osc3_R2: real := 20.0; -- k - Osc3_C: real := 0.001; -- uF - Osc3_Div2n: integer := 6; -- bits divisor - Osc3_bits: integer := 6; -- bits counter - - C_flip1_0: integer := 22020; - C_flip1_1: integer := 33063; - C_flip1_scale: integer := 84; -- ?? - - - Vmax: real := 5.0; -- V - Vmax_bits: integer := 16 -- number of bits to represent Vmax -); - -port( - clk : in std_logic; - reset : in std_logic; - trigger1 : in std_logic; - trigger2 : in std_logic; - divider : in std_logic_vector(3 downto 0); - snd : out std_logic_vector(1 downto 0) -); -end phoenix_effect2; - -architecture struct of phoenix_effect2 is - -function imax(x,y: integer) return integer is begin - if x > y then - return x; - else - return y; - end if; -end imax; - --- integer representation of voltage, full range -constant IVmax: integer := integer(2**Vmax_bits)-1; --- Oscillator1 -- -constant Osc1_div: integer := integer(2**Osc1_Div2n); --- Oscillator1 charge/discharge voltages -constant Osc1_VFc: real := Osc1_Vb; -- V -constant Osc1_iVFc: integer := integer(Osc1_VFc * real(IVmax)/Vmax); -constant Osc1_VFd: real := Osc1_Vce; -- V -constant Osc1_iVFd: integer := integer(Osc1_VFd * real(IVmax)/Vmax); --- Oscillator1 charge/discharge time constants -constant Osc1_T0_RCc: real := (Osc1_R1+Osc1_R2)*Osc1_C1/1000.0; -- s -constant Osc1_T0_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T0_RCc / 2.0**Osc1_Div2n); -constant Osc1_T0_RCd: real := Osc1_R2*Osc1_C1/1000.0; -- s -constant Osc1_T0_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T0_RCd / 2.0**Osc1_Div2n); - -constant Osc1_T1_RCc: real := (Osc1_R1+Osc1_R2)*(Osc1_C1+Osc1_C2)/1000.0; -- s -constant Osc1_T1_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T1_RCc / 2.0**Osc1_Div2n); -constant Osc1_T1_RCd: real := Osc1_R2*(Osc1_C1+Osc1_C2)/1000.0; -- s -constant Osc1_T1_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T1_RCd / 2.0**Osc1_Div2n); - -constant Osc1_T2_RCc: real := (Osc1_R1+Osc1_R2)*(Osc1_C1+Osc1_C3)/1000.0; -- s -constant Osc1_T2_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T2_RCc / 2.0**Osc1_Div2n); -constant Osc1_T2_RCd: real := Osc1_R2*(Osc1_C1+Osc1_C3)/1000.0; -- s -constant Osc1_T2_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T2_RCd / 2.0**Osc1_Div2n); - -constant Osc1_T3_RCc: real := (Osc1_R1+Osc1_R2)*(Osc1_C1+Osc1_C2+Osc1_C3)/1000.0; -- s -constant Osc1_T3_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T3_RCc / 2.0**Osc1_Div2n); -constant Osc1_T3_RCd: real := Osc1_R2*(Osc1_C1+Osc1_C2+Osc1_C3)/1000.0; -- s -constant Osc1_T3_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T3_RCd / 2.0**Osc1_Div2n); - -constant Osc1_ik_max: integer := imax( imax(Osc1_T1_ikc,Osc1_T1_ikd), imax(Osc1_T3_ikc,Osc1_T3_ikd)); - --- Oscillator2 -- -constant Osc2_div: integer := integer(2**Osc2_Div2n); --- Oscillator2 charge/discharge voltages -constant Osc2_VFc: real := Osc2_Vb; -- V -constant Osc2_iVFc: integer := integer(Osc2_VFc * real(IVmax)/Vmax); -constant Osc2_VFd: real := Osc2_Vce; -- V -constant Osc2_iVFd: integer := integer(Osc2_VFd * real(IVmax)/Vmax); --- Oscillator2 charge/discharge time constants -constant Osc2_RCc: real := (Osc2_R1+Osc2_R2)*Osc2_C/1000.0; -- s -constant Osc2_ikc: integer := integer(Osc2_Fs * 1.0E6 * Osc2_RCc / 2.0**Osc2_Div2n); -constant Osc2_RCd: real := Osc2_R2*Osc2_C/1000.0; -- s -constant Osc2_ikd: integer := integer(Osc2_Fs * 1.0E6 * Osc2_RCd / 2.0**Osc2_Div2n); - --- Filter2 -- -constant Filt2_div: integer := integer(2**Filt2_Div2n); -constant Filt2_R4p: real := 1.0/(1.0/Filt2_R1+1.0/Filt2_R4); -- k -constant Filt2_R5p: real := 1.0/(1.0/Filt2_R1+1.0/Filt2_R5); -- k -constant Filt2_Rp: real := 1.0/(1.0/Filt2_R3+1.0/Filt2_R4+1.0/Filt2_R5p); -- k -constant Filt2_Rs: real := 1.0/(1.0/Filt2_R2+1.0/Filt2_R3-Filt2_Rp/(Filt2_R3**2)); -- k -constant Filt2_RC: real := Filt2_Rs*Filt2_C/1000.0; -- s -constant Filt2_ik: integer := integer(Filt2_Fs*1.0E6*Filt2_RC / 2.0**Filt2_Div2n); --- Filter2 voltages -constant Filt2_V0: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R3*Filt2_R4); -- V -constant Filt2_iV0: integer := integer(Filt2_V0 * real(IVmax)/Vmax); -constant Filt2_V1: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R4p*Filt2_R3); -- V -constant Filt2_iV1: integer := integer(Filt2_V1 * real(IVmax)/Vmax); -constant Filt2_V2: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R3*Filt2_R4)+Filt2_V*Filt2_Rs/Filt2_R2; -- V -constant Filt2_iV2: integer := integer(Filt2_V2 * real(IVmax)/Vmax); -constant Filt2_V3: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R3*Filt2_R4p)+Filt2_V*Filt2_Rs/Filt2_R2; -- V -constant Filt2_iV3: integer := integer(Filt2_V3 * real(IVmax)/Vmax); - --- Oscillator3 -- -constant Osc3_div: integer := integer(2**Osc3_Div2n); --- Oscillator3 charge/discharge voltages -constant Osc3_VFc: real := Osc3_Vb; -- V -constant Osc3_iVFc: integer := integer(Osc3_VFc * real(IVmax)/Vmax); -constant Osc3_VFd: real := Osc3_Vce; -- V -constant Osc3_iVFd: integer := integer(Osc3_VFd * real(IVmax)/Vmax); --- Oscillator3 charge/discharge time constants -constant Osc3_RCc: real := (Osc3_R1+Osc3_R2)*Osc3_C/1000.0; -- s -constant Osc3_ikc: integer := integer(Osc3_Fs * 1.0E6 * Osc3_RCc / 2.0**Osc3_Div2n); -constant Osc3_RCd: real := Osc3_R2*Osc3_C/1000.0; -- s -constant Osc3_ikd: integer := integer(Osc3_Fs * 1.0E6 * Osc3_RCd / 2.0**Osc3_Div2n); - -signal u_c1 : unsigned(15 downto 0) := (others => '0'); -signal u_c2 : unsigned(15 downto 0) := (others => '0'); -signal u_c3 : unsigned(16 downto 0) := (others => '0'); -signal flip1 : std_logic := '0'; -signal flip2 : std_logic := '0'; -signal flip3 : std_logic := '0'; - -signal triggers : std_logic_vector(1 downto 0) := "00"; ---signal kc : unsigned(15 downto 0) := (others =>'0'); ---signal kd : unsigned(15 downto 0) := (others =>'0'); -signal kc : integer range 0 to Osc1_ik_max; -signal kd : integer range 0 to Osc1_ik_max; - -signal u_cf : unsigned(15 downto 0) := (others => '0'); -signal flips : std_logic_vector(1 downto 0) := "00"; -signal vf : unsigned(15 downto 0) := (others =>'0'); - -signal u_cf_scaled : unsigned(23 downto 0) := (others => '0'); -signal u_ctrl : unsigned(15 downto 0) := (others => '0'); - -signal sound: std_logic := '0'; - -begin - --- Oscillateur1 --- R1 = 47k, R2 = 100k, C1=0.01e-6, C2=0.047e-6, C3=1.000e-6 SR=10MHz --- Div = 2^8 - --- trigger = 00 --- Charge : VF1 = 65535, k1 = 57 (R1+R2, C1) --- Decharge : VF2 = 2621, k2 = 39 (R2, C1) --- trigger = 01 --- Charge : VF1 = 65535, k1 = 2756 (R1+R2, C1+C2) --- Decharge : VF2 = 2621, k2 = 1875 (R2, C1+C2) --- trigger = 10 --- Charge : VF1 = 65535, k1 = 5800 (R1+R2, C1+C3) --- Decharge : VF2 = 2621, k2 = 3945 (R2, C1+C3) --- trigger = 11 --- Charge : VF1 = 65535, k1 = 8498 (R1+R2, C1+C2+C3) --- Decharge : VF2 = 2621, k2 = 5781 (R2, C1+C2+C3) - -triggers <= trigger2 & trigger1; - -with triggers select -kc <= Osc1_T0_ikc when "00", - Osc1_T1_ikc when "01", - Osc1_T2_ikc when "10", - Osc1_T3_ikc when others; - -with triggers select -kd <= Osc1_T0_ikd when "00", - Osc1_T1_ikd when "01", - Osc1_T2_ikd when "10", - Osc1_T3_ikd when others; - -process (clk) - variable cnt: integer range 0 to Osc1_ik_max := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c1 <= (others => '0'); - else - if u_c1 > X"AAAA" then flip1 <= '0'; end if; - if u_c1 < X"5555" then flip1 <= '1'; end if; - cnt := cnt + 1; - if flip1 = '1' then - if cnt = kc then - cnt := 0; - u_c1 <= u_c1 + (Osc1_iVFc - u_c1)/Osc1_div; - end if; - else - if cnt = kd then - cnt := 0; - u_c1 <= u_c1 - (u_c1 - Osc1_iVFd)/Osc1_div; - end if; - end if; - end if; - end if; -end process; - --- Oscillateur2 --- R1 = 510k, R2 = 510k, C=1.000e-6, SR=10MHz --- Charge : VF1 = 65535, k1 = 39844 (R1+R2, C) --- Decharge : VF2 = 2621, k2 = 19922 (R2, C) --- Div = 2^8 - -process (clk) - variable cnt: integer range 0 to imax(Osc2_ikc,Osc2_ikd) := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c2 <= (others => '0'); - else - if u_c2 > X"AAAA" then flip2 <= '0'; end if; - if u_c2 < X"5555" then flip2 <= '1'; end if; - cnt := cnt + 1; - if flip2 = '1' then - if cnt = Osc2_ikc then - cnt := 0; - u_c2 <= u_c2 + (Osc2_iVFc - u_c2)/Osc2_div; - end if; - else - if cnt = Osc2_ikd then - cnt := 0; - u_c2 <= u_c2 - (u_c2 - Osc2_iVFd)/Osc2_div; - end if; - end if; - end if; - end if; -end process; - --- Filtre --- V1 = 5V --- R1 = 10k, R2 = 5.1k, R3 = 5.1k, R4 = 5k, R5 = 10k, C=100.0e-6, SR=10MHz --- Rp = R3//R4//R4//R1 = 1.68k --- Rs = 1/(1/R2 + 1/R3 - Rp/(R3*R3)) = 3.05k --- k = 11922 (Rs*C) --- Div = 2^8 - --- VF00 = 13159 (V*Rp*Rs)/(R4*R3) --- VF01 = 19738 (V*Rp*Rs)/(R4p*R3) --- VF10 = 52377 (V*Rp*Rs)/(R4*R3) + V*Rs/R2 --- VF11 = 58957 (V*Rp*Rs)/(R4p*R3) + V*Rs/R2 - -flips <= flip2 & flip1; - -with flips select - -vf <= to_unsigned(Filt2_iV0,16) when "00", - to_unsigned(Filt2_iV1,16) when "01", - to_unsigned(Filt2_iV2,16) when "10", - to_unsigned(Filt2_iV3,16) when others; - -process (clk) - variable cnt: integer range 0 to Filt2_ik := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_cf <= (others => '0'); - else - cnt := cnt + 1; - if vf > u_cf then - if cnt = Filt2_ik then - cnt := 0; - u_cf <= u_cf + (vf - u_cf)/Filt2_div; - end if; - else - if cnt = Filt2_ik then - cnt := 0; - u_cf <= u_cf - (u_cf - vf)/Filt2_div; - end if; - end if; - end if; - end if; -end process; - --- U_CTRL - --- flip1 = 0 u_ctrl = 5V*Rp/R4 + u_cf*Rp/R3 # 22020 + u_cf*84/256 --- flip1 = 1 u_ctrl = 5V*Rp/R4p + u_cf*Rp/R3 # 33063 + u_cf*84/256 - -u_cf_scaled <= u_cf*to_unsigned(C_flip1_scale,8); - -with flip1 select - u_ctrl <= to_unsigned(C_flip1_0,16)+u_cf_scaled(23 downto 8) when '0', - to_unsigned(C_flip1_1,16)+u_cf_scaled(23 downto 8) when others; - --- Oscillateur3 --- R1 = 20k, R2 = 20k, C=0.001e-6 SR=50MHz --- Charge : VF1 = 65535, k1 = 31 (R1+R2) --- Decharge : VF2 = 2621, k2 = 16 (R2) --- Div = 2^6 - --- Diviseur --- LS163 : Count up, Sync load when 0xF (no toggle sound if divider = 0xF) --- LS74 : Divide by 2 - -process (clk) - variable cnt: integer range 0 to imax(Osc3_ikc,Osc3_ikd) := 0; - variable cnt2: unsigned(3 downto 0) := (others => '0'); -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c3 <= (others => '0'); - flip3 <= '0'; - else - if u_c3 > u_ctrl then flip3 <= '0'; end if; - if u_c3 < u_ctrl/2 then - flip3 <= '1'; - if flip3 = '0' then - cnt2 := cnt2 + 1; - if cnt2 = "0000" then - cnt2 := unsigned(divider); - if divider /= "1111" then sound <= not sound; end if; - end if; - end if; - end if; - cnt := cnt + 1; - if flip3 = '1' then - if cnt = Osc3_ikc then - cnt := 0; - u_c3 <= u_c3 + (Osc3_iVFc - u_c3)/Osc3_div; - end if; - else - if cnt = Osc3_ikd then - cnt := 0; - u_c3 <= u_c3 - (u_c3 - Osc3_iVFd)/Osc3_div; - end if; - end if; - end if; - end if; -end process; - -with trigger2 select snd <= '0'&sound when '1', sound&'0' when others; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect3.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect3.vhd deleted file mode 100644 index c5bc2e77..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_effect3.vhd +++ /dev/null @@ -1,290 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix sound effect3 (noise) by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - --- this module generates noisy sound of ship missile shooting --- ship explosions and enemy mothership explosion --- it is often head throught all the levels of the game - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_effect3 is -generic( - -- Command 1 - Cmd1_Fs: real := 11.0; -- MHz - Cmd1_V: real := 5.0; -- V - Cmd1_Vd: real := 0.46; -- V - Cmd1_Vce: real := 0.2; -- V - Cmd1_R1: real := 1.0; -- k - Cmd1_R2: real := 0.33; -- k - Cmd1_R3: real := 20.0; -- k - Cmd1_C: real := 6.8; -- uF - Cmd1_Div2n: integer := 8; -- bits divisor - --Cmd1_bits: integer := 16; -- bits counter - -- Command 2 - Cmd2_Fs: real := 11.0; -- MHz - Cmd2_V: real := 5.0; -- V - Cmd2_Vd: real := 0.46; -- V - Cmd2_Vce: real := 0.2; -- V - Cmd2_R1: real := 1.0; -- k - Cmd2_R2: real := 0.33; -- k - Cmd2_R3: real := 47.0; -- k - Cmd2_C: real := 6.8; -- uF - Cmd2_Div2n: integer := 8; -- bits divisor - --Cmd2_bits: integer := 16; -- bits counter - -- Oscillator - Osc_Fs: real := 11.0; -- MHz - Osc_Vb: real := 5.0; -- V - Osc_Vce: real := 0.2; -- V - Oscmin_R1a: real := 47.0; -- k - Oscmin_R2: real := 0.33; -- k - Oscmin_C: real := 0.05; -- uF - Oscmin_bits: integer := 16; -- bits counter - Oscmax_R1a: real := 2.553; -- k - Oscmax_R2: real := 1.0; -- k - Oscmax_C: real := 0.05; -- uF - Osc_Div2n: integer := 7; -- bits divisor - --Osc_bits: integer := 16; -- bits counter - - C_commande2_chop_k: integer := 62500; - - Vmax: real := 5.0; -- V - Vmax_bits: integer := 16 -- number of bits to represent Vmax -); -port( - clk : in std_logic; - reset : in std_logic; - trigger1 : in std_logic; - trigger2 : in std_logic; - snd : out std_logic_vector(7 downto 0) -); -end phoenix_effect3; - -architecture struct of phoenix_effect3 is - --- integer representation of voltage, full range -constant IVmax: integer := integer(2**Vmax_bits)-1; --- Command1 -- -constant Cmd1_div: integer := integer(2**Cmd1_Div2n); --- Command1 charge/discharge voltages -constant Cmd1_VFc: real := Cmd1_V-Cmd1_Vd; -- V -constant Cmd1_iVFc: integer := integer(Cmd1_VFc * real(IVmax)/Vmax); -constant Cmd1_VFd: real := Cmd1_Vce+Cmd1_Vd; -- V -constant Cmd1_iVFd: integer := integer(Cmd1_VFd * real(IVmax)/Vmax); --- Command1 charge/discharge time constants -constant Cmd1_RCc: real := (Cmd1_R1+Cmd1_R2+Cmd1_R3)*Cmd1_C/1000.0; -- s -constant Cmd1_ikc: integer := integer(Cmd1_Fs * 1.0E6 * Cmd1_RCc / 2.0**Cmd1_Div2n); -constant Cmd1_RCd: real := Cmd1_R2*Cmd1_C/1000.0; -- s -constant Cmd1_ikd: integer := integer(Cmd1_Fs * 1.0E6 * Cmd1_RCd / 2.0**Cmd1_Div2n); --- Command2 -- -constant Cmd2_div: integer := integer(2**Cmd2_Div2n); --- Command2 charge/discharge voltages -constant Cmd2_VFc: real := (Cmd2_V-Cmd2_Vd)*Cmd2_R3/(Cmd2_R1+Cmd2_R2+Cmd2_R3); -- V -constant Cmd2_iVFc: integer := integer(Cmd2_VFc * real(IVmax)/Vmax); -constant Cmd2_VFd: real := 0.0; -- V -constant Cmd2_iVFd: integer := integer(Cmd2_VFd * real(IVmax)/Vmax); --- Command2 charge/discharge time constants -constant Cmd2_RCc: real := (Cmd2_R1+Cmd2_R2)*Cmd2_R3/(Cmd2_R1+Cmd2_R2+Cmd2_R3)*Cmd2_C/1000.0; -- s -constant Cmd2_ikc: integer := integer(Cmd2_Fs * 1.0E6 * Cmd2_RCc / 2.0**Cmd2_Div2n); -constant Cmd2_RCd: real := Cmd2_R3*Cmd2_C/1000.0; -- s -constant Cmd2_ikd: integer := integer(Cmd2_Fs * 1.0E6 * Cmd2_RCd / 2.0**Cmd2_Div2n); --- Oscillator -- -constant Osc_div: integer := integer(2**Osc_Div2n); --- Oscillator charge/discharge voltages -constant Osc_VFc: real := Osc_Vb; -- V -constant Osc_iVFc: integer := integer(Osc_VFc * real(IVmax)/Vmax); -constant Osc_VFd: real := Osc_Vce; -- V -constant Osc_iVFd: integer := integer(Osc_VFd * real(IVmax)/Vmax); --- Oscillator min charge/discharge time constants -constant Oscmin_RCc: real := (Oscmin_R1a+Oscmin_R2)*Oscmin_C/1000.0; -- s -constant Oscmin_ikc: integer := integer(Osc_Fs * 1.0E6 * Oscmin_RCc / 2.0**Osc_Div2n); -constant Oscmin_RCd: real := Oscmin_R2*Oscmin_C/1000.0; -- s -constant Oscmin_ikd: integer := integer(Osc_Fs * 1.0E6 * Oscmin_RCd / 2.0**Osc_Div2n); --- Oscillator max charge/discharge time constants -constant Oscmax_RCc: real := (Oscmax_R1a+Oscmax_R2)*Oscmax_C/1000.0; -- s -constant Oscmax_ikc: integer := integer(Osc_Fs * 1.0E6 * Oscmax_RCc / 2.0**Osc_Div2n); -constant Oscmax_RCd: real := Oscmax_R2*Oscmax_C/1000.0; -- s -constant Oscmax_ikd: integer := integer(Osc_Fs * 1.0E6 * Oscmax_RCd / 2.0**Osc_Div2n); - -function imax(x,y: integer) return integer is begin - if x > y then - return x; - else - return y; - end if; -end imax; - -signal u_c1 : unsigned(15 downto 0) := (others => '0'); -signal u_c2 : unsigned(15 downto 0) := (others => '0'); -signal u_c3 : unsigned(15 downto 0) := (others => '0'); -signal flip3 : std_logic := '0'; - -signal k_ch : unsigned(25 downto 0) := (others =>'0'); - -signal u_ctrl1 : unsigned(15 downto 0) := (others => '0'); -signal u_ctrl2 : unsigned(15 downto 0) := (others => '0'); -signal u_ctrl1_f : unsigned( 7 downto 0) := (others => '0'); -signal u_ctrl2_f : unsigned( 7 downto 0) := (others => '0'); -signal sound : unsigned( 7 downto 0) := (others => '0'); - -signal shift_reg : std_logic_vector(17 downto 0) := (others => '0'); - -begin - --- Commande1 --- R1 = 1k, R2 = 0.33k, R3 = 20k C=6.8e-6 SR=10MHz --- Charge : VF1 = 59507, k1 = 5666 (R1+R2+R3) --- Decharge : VF2 = 8651, k2 = 88 (R2) --- Div = 2^8 - -process (clk) - -- variable cnt : unsigned(15 downto 0) := (others => '0'); - variable cnt: integer range 0 to imax(Cmd1_ikc,Cmd1_ikd)*2 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c1 <= (others => '0'); - else - cnt := cnt + 1; - if trigger1 = '1' then - -- if cnt > C_commande1_k1 then - if cnt > Cmd1_ikc then - cnt := 0; - -- u_c1 <= u_c1 + (C_commande1_VF1 - u_c1)/256; - u_c1 <= u_c1 + (Cmd1_iVFc - u_c1)/Cmd1_div; - end if; - else - -- if cnt > C_commande1_k2 then - if cnt > Cmd1_ikd then - cnt := 0; - -- u_c1 <= u_c1 - (u_c1 - C_commande1_VF2)/256; - u_c1 <= u_c1 - (u_c1 - Cmd1_iVFd)/Cmd1_div; - end if; - end if; - end if; - end if; -end process; - --- Commande2 --- R1 = 1k, R2 = 0.33k, R3 = 47k C=6.8e-6 SR=10MHz --- Charge : VF1 = 57869, k1 = 344 (R1+R2)//R3 --- Decharge : VF2 = 0, k2 = 12484 (R3) --- Div = 2^8 - -process (clk) - -- variable cnt : unsigned(15 downto 0) := (others => '0'); - variable cnt: integer range 0 to imax(Cmd2_ikc,Cmd2_ikd)*2 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - -- cnt := (others => '0'); - cnt := 0; - u_c2 <= (others => '0'); - else - cnt := cnt + 1; - if trigger2 = '1' then - -- if cnt > C_commande2_k1 then - if cnt > Cmd2_ikc then - -- cnt := (others => '0'); - cnt := 0; - -- u_c2 <= u_c2 + (C_commande2_VF1 - u_c2)/256; - u_c2 <= u_c2 + (Cmd2_iVFc - u_c2)/Cmd2_div; - end if; - else - -- if cnt > C_commande2_k2 then - if cnt > Cmd2_ikd then - -- cnt := (others => '0'); - cnt := 0; - -- u_c2 <= u_c2 - (u_c2 - C_commande2_VF2)/256; - u_c2 <= u_c2 - (u_c2 - Cmd2_iVFd)/Cmd2_div; - end if; - end if; - end if; - end if; -end process; - --- control voltage from command1 is R3 voltage (not u_c1 voltage) -with trigger1 select --- u_ctrl1 <= (to_unsigned(C_commande1_VF1,16) - u_c1) when '1', (others=>'0') when others; -u_ctrl1 <= (to_unsigned(Cmd1_iVFc,16) - u_c1) when '1', (others=>'0') when others; - --- control voltage from command2 is u_c2 voltage -u_ctrl2 <= u_c2; - --- sum up and scaled both control voltages to vary R1 resistor of oscillator --- k_ch <= shift_right(((u_ctrl1/2 + u_ctrl2/2) * to_unsigned(C_oscillateur_min_k1-C_oscillateur_max_k1,10)),15) + C_oscillateur_max_k1; -k_ch <= shift_right(((u_ctrl1/2 + u_ctrl2/2) * to_unsigned(Oscmin_ikc-Oscmax_ikc,10)),15) + Oscmax_ikc; - --- Oscillateur --- R1 = 47k..2.533k, R2 = 1k, C=0.05e-6, SR=50MHz --- Charge : VF1 = 65536, k_ch = 938..69 (R1+R2, C) --- Decharge : VF2 = 2621, k2 = 20 (R2, C) --- Div = 2^7 - --- noise generator triggered by oscillator output - -process (clk) - variable cnt: integer range 0 to imax(imax(Oscmin_ikc,Oscmin_ikd), imax(Oscmax_ikc,Oscmax_ikd))+256 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c3 <= (others => '0'); - else - if u_c3 > X"AAAA" then flip3 <= '0'; end if; - if u_c3 < X"5555" then - flip3 <= '1'; - if flip3 = '0' then - shift_reg <= shift_reg(16 downto 0) & not(shift_reg(17) xor shift_reg(16)); - end if; - end if; - cnt := cnt + 1; - if flip3 = '1' then - if cnt > k_ch then - cnt := 0; - u_c3 <= u_c3 + (Osc_iVFc - u_c3)/Osc_div; - end if; - else - if cnt > Oscmax_ikd then - cnt := 0; - u_c3 <= u_c3 - (u_c3 - Osc_iVFd)/Osc_div; - end if; - end if; - end if; - end if; -end process; - --- modulated (chop) command1 voltage with noise generator output -with shift_reg(17) xor shift_reg(16) select -u_ctrl1_f <= u_ctrl1(15 downto 8)/2 when '0', (others => '0') when others; - - --- modulated (chop) command2 voltage with noise generator output --- and add 400Hz filter (raw sub-sampling) --- f=10 MHz, k = 25000 -process (clk) - variable cnt : unsigned(15 downto 0) := (others => '0'); -begin - if rising_edge(clk) then - cnt := cnt + 1; - if cnt > C_commande2_chop_k then - cnt := (others => '0'); - if (shift_reg(17) xor shift_reg(16)) = '0' then - u_ctrl2_f <= u_ctrl2(15 downto 8)/2; - else - u_ctrl2_f <= (others => '0'); - end if; - end if; - end if; -end process; - --- mix modulated noises 1 and 2 -sound <= u_ctrl1_f + u_ctrl2_f; -snd <= std_logic_vector(sound); - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_mist.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_mist.vhd deleted file mode 100644 index f986972e..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_mist.vhd +++ /dev/null @@ -1,309 +0,0 @@ ---------------------------------------------------------------------------------- --- DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr --- --- Main features --- PS2 keyboard input --- wm8731 sound output --- NO board SRAM used --- --- sw 0: on/off hdmi-audio --- --- Board switch : ---- todo fixme switches note --- 1 - 4 : dip switch --- 0-1 : lives 3-6 --- 3-2 : bonus life 30K-60K --- 4 : coin 1-2 --- 6-5 : unkonwn --- 7 : upright-cocktail --- 8 -10 : sound_select --- 0XX : all mixed (normal) --- 100 : sound1 only --- 101 : sound2 only --- 110 : sound3 only --- 111 : melody only --- Board key : --- 0 : reset --- ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_mist is -port -( - CLOCK_27 : in std_logic; - LED : out std_logic; - VGA_R : out std_logic_vector(5 downto 0); - VGA_G : out std_logic_vector(5 downto 0); - VGA_B : out std_logic_vector(5 downto 0); - VGA_HS : out std_logic; - VGA_VS : out std_logic; - SPI_SCK : in std_logic; - SPI_DI : in std_logic; - SPI_DO : out std_logic; - SPI_SS2 : in std_logic; - SPI_SS3 : in std_logic; - CONF_DATA0 : in std_logic; - AUDIO_L : out std_logic; - AUDIO_R : out std_logic -); -end; - -architecture struct of phoenix_mist is - - signal clk : std_logic; - signal clk_88m : std_logic; - signal reset : std_logic; - signal clock_stable : std_logic; - - signal audio : std_logic_vector(11 downto 0); - signal video_r, video_g, video_b: std_logic_vector(1 downto 0); - signal vsync, hsync : std_logic; - - signal dip_switch : std_logic_vector(7 downto 0);-- := (others => '0'); - signal status : std_logic_vector(31 downto 0); - signal buttons : std_logic_vector(1 downto 0); - signal scandoubler_disable : std_logic; - signal ypbpr : std_logic; - signal ce_pix : std_logic; - - signal scanlines : std_logic_vector(1 downto 0); - signal hq2x : std_logic; - - signal coin : std_logic; - signal player_start : std_logic_vector(1 downto 0); - signal button_left, button_right, button_protect, button_fire: std_logic; - signal joy0 : std_logic_vector(7 downto 0); - signal joy1 : std_logic_vector(7 downto 0); - signal ps2Clk : std_logic; - signal ps2Data : std_logic; - signal kbd_joy : std_logic_vector(7 downto 0); - signal upjoyL : std_logic; - signal upjoyR : std_logic; - signal upjoyB : std_logic; --- config string used by the io controller to fill the OSD - constant CONF_STR : string := "PHOENIX;;O4,Screen Direction,Upright,Normal;O67,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;T5,Reset;V,v1.1;"; - - function to_slv(s: string) return std_logic_vector is - constant ss: string(1 to s'length) := s; - variable rval: std_logic_vector(1 to 8 * s'length); - variable p: integer; - variable c: integer; - begin - for i in ss'range loop - p := 8 * i; - c := character'pos(ss(i)); - rval(p - 7 to p) := std_logic_vector(to_unsigned(c,8)); - end loop; - return rval; - end function; - - component mist_io - generic ( STRLEN : integer := 0 ); - port ( - clk_sys :in std_logic; - SPI_SCK, CONF_DATA0, SPI_DI :in std_logic; - SPI_DO : out std_logic; - conf_str : in std_logic_vector(8*STRLEN-1 downto 0); - buttons : out std_logic_vector(1 downto 0); - joystick_0 : out std_logic_vector(7 downto 0); - joystick_1 : out std_logic_vector(7 downto 0); - status : out std_logic_vector(31 downto 0); - scandoubler_disable, ypbpr : out std_logic; - ps2_kbd_clk : out std_logic; - ps2_kbd_data : out std_logic - ); - end component mist_io; - - component video_mixer - generic ( LINE_LENGTH : integer := 352; HALF_DEPTH : integer := 1 ); - port ( - clk_sys, ce_pix, ce_pix_actual : in std_logic; - SPI_SCK, SPI_SS3, SPI_DI : in std_logic; - scanlines : in std_logic_vector(1 downto 0); - scandoubler_disable, hq2x, ypbpr, ypbpr_full : in std_logic; - rotate : in std_logic_vector(1 downto 0); - R, G, B : in std_logic_vector(2 downto 0); - HSync, VSync, line_start, mono : in std_logic; - - VGA_R,VGA_G, VGA_B : out std_logic_vector(5 downto 0); - VGA_VS, VGA_HS : out std_logic - ); - end component video_mixer; - - component keyboard - PORT( - clk : in std_logic; - reset : in std_logic; - ps2_kbd_clk : in std_logic; - ps2_kbd_data : in std_logic; - joystick : out std_logic_vector (7 downto 0) - ); - end component; - - -begin - --- SWITCH 1: SWITCH 2: NUMBER OF SPACESHIPS: --- --------- --------- --------------------- --- OFF OFF 6 --- ON OFF 5 --- OFF ON 4 --- ON ON 3 --- FIRST FREE SECOND FREE --- SWITCH 3: SWITCH 4: SHIP SCORE: SHIP SCORE: --- --------- --------- ----------- ----------- --- OFF OFF 6,000 60,000 --- ON OFF 5,000 50,000 --- OFF ON 4,000 40,000 --- ON ON 3,000 30,000 - - --Cocktail,Factory,Factory,Factory,Bonus2,Bonus1,Ships2,Ships1 - dip_switch <= "00001111"; - - mist_io_inst : mist_io - generic map (STRLEN => CONF_STR'length) - port map ( - clk_sys => clk, - SPI_SCK => SPI_SCK, - CONF_DATA0 => CONF_DATA0, - SPI_DI => SPI_DI, - SPI_DO => SPI_DO, - conf_str => to_slv(CONF_STR), - buttons => buttons, - scandoubler_disable => scandoubler_disable, - ypbpr => ypbpr, - joystick_1 => joy1, - joystick_0 => joy0, - status => status, - ps2_kbd_clk => ps2Clk, - ps2_kbd_data => ps2Data - ); - - -- - -- Audio - -- - u_dac1 : entity work.dac - port map( - clk_i => clk_88m, - res_n_i => not reset, - dac_i => audio, - dac_o => AUDIO_L - ); - - u_dac2 : entity work.dac - port map( - clk_i => clk_88m, - res_n_i => not reset, - dac_i => audio, - dac_o => AUDIO_R - ); - - - pll: entity work.pll27 - port map( - inclk0 => CLOCK_27, - c0 => clk_88m, - c1 => clk, - locked => clock_stable - ); - - reset <= status(0) or status(5) or buttons(1) or not clock_stable; - - u_keyboard : keyboard - port map( - clk => clk, - reset => reset, - ps2_kbd_clk => ps2Clk, - ps2_kbd_data => ps2Data, - joystick => kbd_joy - ); - - process(clk_88m) - variable cnt: integer range 0 to 6000000 := 0; - begin - if rising_edge(clk_88m) then - if status(3 downto 1) /= "000" then - cnt := 0; - coin <= status(1); - player_start <= status(3 downto 2); - else - if cnt < 6000000 then - cnt := cnt + 1; - else - coin <= '0'; - player_start <= "00"; - end if; - end if; - end if; - end process; - - upjoyB <= joy0(2) or joy1(2) when status(4) = '0' else joy0(0) or joy1(0); - upjoyL <= joy0(1) or joy1(1) or kbd_joy(6) when status(4) = '0' else joy0(2) or joy1(2) or kbd_joy(5); - upjoyR <= joy0(0) or joy1(0) or kbd_joy(7) when status(4) = '0' else joy0(3) or joy1(3) or kbd_joy(4); - - phoenix : entity work.phoenix - port map - ( - clk => clk, - reset => reset, - ce_pix => ce_pix, - dip_switch => dip_switch, - btn_coin => kbd_joy(3) or coin,--ESC - btn_player_start(0) => kbd_joy(1) or player_start(0),--1 - btn_player_start(1) => kbd_joy(2) or player_start(1),--2 - btn_left => upjoyL, - btn_right => upjoyR, - btn_barrier => upjoyB or kbd_joy(2),--TAB - btn_fire => joy0(4) or joy1(4) or kbd_joy(0),--space - video_r => video_r, - video_g => video_g, - video_b => video_b, - video_hs => hsync, - video_vs => vsync, - audio_select => "000", - audio => audio - ); - - scanlines(0) <= '1' when status(7 downto 6) = "10" else '0'; - scanlines(1) <= '1' when status(7 downto 6) = "11" else '0'; - hq2x <= '1' when status(7 downto 6) = "01" else '0'; - - vmixer : video_mixer - port map ( - clk_sys => clk_88m, - ce_pix => ce_pix, - ce_pix_actual => ce_pix, - - SPI_SCK => SPI_SCK, - SPI_SS3 => SPI_SS3, - SPI_DI => SPI_DI, - rotate => '1' & not status(4), - scanlines => scanlines, - scandoubler_disable => scandoubler_disable, - hq2x => hq2x, - ypbpr => ypbpr, - ypbpr_full => '1', - - R => video_r & video_r(1), - G => video_g & video_g(1), - B => video_b & video_b(1), - HSync => hsync, - VSync => vsync, - line_start => '0', - mono => '0', - - VGA_R => VGA_R, - VGA_G => VGA_G, - VGA_B => VGA_B, - VGA_VS => VGA_VS, - VGA_HS => VGA_HS - ); - - LED <= '1'; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_music.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_music.vhd deleted file mode 100644 index 56d6c594..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_music.vhd +++ /dev/null @@ -1,241 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix music by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; -use ieee.math_real.all; - -entity phoenix_music is -generic( - C_clk_freq: real := 11.0 -- MHz -); -port( - clk : in std_logic; - reset : in std_logic; - trigger : in std_logic; - sel_song : in std_logic; - snd : out std_logic_vector(7 downto 0) -); -end phoenix_music; - -architecture struct of phoenix_music is - -constant C_voice_attack: integer := integer(230.0 * C_clk_freq); -- larger value is faster -constant C_song0_tempo: integer := integer(2200.0 * C_clk_freq); -- larger value is faster -constant C_song1_tempo: integer := integer(1700.0 * C_clk_freq); -- larger value is faster -constant C_voice_down_rate: integer := integer(4000.0 / C_clk_freq); -- larger value is slower - -type voice_array is array (0 to 94) of integer range 0 to 127; --- main voice1 (Jeux Interdits) -constant voice1 : voice_array := ( -32,96,32,96,32,96,32,96,26,90,24,88,24,88,23,87,21,85,21,85,24,88,32,96,37,101,101,101,101,101,37,101,35,99,33,97,33,97,32,96,26,90,26,90,32,96,33,97,32,96,33,97,32,96,36,100,33,97,32,96,32,96,26,90,24,88,24,88,23,87,21,85,23,87,23,87,23,87,23,87,24,88,23,87,21,85,24,88,32,96,37,101,101,101,101); --- accompagnement voice1 -constant voice2 : voice_array := ( -5,69,69,69,69,69,16,80,80,80,80,80,8,72,8,72,8,72,16,80,80,80,80,80,5,69,5,8,16,21,5,69,69,69,69,69,17,81,81,81,81,81,10,74,74,74,74,74,16,80,80,80,80,80,16,80,80,80,80,80,8,72,72,72,72,72,5,69,69,69,69,69,7,71,71,71,71,71,17,81,81,81,8,72,5,69,16,80,8,72,5,69,69,69,69); - --- voice1, voice2 and voice3 value description --- bit3-bit0 : tone from 0(La/A) to 11(Sol/G#) --- bit5-bit4 : octave from 0(220Hz)to 2(880Hz) --- bit6 : 0 = strike (restart) the tone, 1 = don't strike (hold) the tone - -type voice_array2 is array (0 to 45) of integer range 0 to 127; --- main voice3 (La lettre a Elise) -constant voice3 : voice_array2 := ( -37,36,37,36,37,32,35,33,26,5,10,17,21,26,32,5,16,21,25,32,33,5,10,17,37,36,37,36,37,32,35,33,26,5,10,17,21,26,32,5,16,21,33,32,26,90); - -type period_array is array (0 to 11) of integer range 0 to 65535; --- Octave 220Hz @ 10MHz -constant tone_period : period_array := ( - 45455, -- ton 0 La (A ) - 42903, -- ton 1 La# (A#) - 40495, -- ton 2 Si (B ) - 38223, -- ton 3 Do (C ) - 36077, -- ton 4 Do# (C#) - 34052, -- ton 5 Re (D ) - 32141, -- ton 6 Re# (D#) - 30337, -- ton 7 Mi (E ) - 28635, -- ton 8 Fa (F ) - 27027, -- ton 9 Fa# (F#) - 25511, -- ton 10 Sol (G ) - 24079 -- ton 11 Sol# (G#) -); - -signal tempo_period : integer range 0 to C_song0_tempo := C_song1_tempo; --0.19s @ 100kHz - -signal voice1_tone : integer range 0 to 65535 := 0; -signal voice1_tone_div : integer range 0 to 65535 := 0; -signal voice1_code : unsigned(6 downto 0) := "0000000"; -signal voice1_vol : unsigned(7 downto 0) := "00000000"; -signal voice1_snd : std_logic := '0'; - -signal voice2_tone : integer range 0 to 65535 := 0; -signal voice2_tone_div : integer range 0 to 65535 := 0; -signal voice2_code : unsigned(6 downto 0) := "0000000"; -signal voice2_vol : unsigned(7 downto 0) := "00000000"; -signal voice2_snd : std_logic := '0'; - -signal snd1 : unsigned(7 downto 0) := "00000000"; -signal snd2 : unsigned(7 downto 0) := "00000000"; - -signal trigger_r : std_logic := '0'; -signal max_step : integer range 0 to 94 := 94; -signal sel_song_r: std_logic := '1'; - -begin - -process (clk) - variable cnt : integer range 0 to 127 := 0; - variable step : integer range 0 to 94 := 94; - variable tempo : integer range 0 to C_song0_tempo := 0; - variable voice1_code_v : unsigned(6 downto 0) := "0000000"; - variable voice2_code_v : unsigned(6 downto 0) := "0000000"; - variable voice1_down_rate : integer range 0 to C_voice_down_rate := 0; - variable voice2_down_rate : integer range 0 to C_voice_down_rate := 0; -begin - if rising_edge(clk) then - trigger_r <= trigger; - - if reset = '1' then - cnt := 0; - step := 94; - voice1_vol <= X"00"; - voice2_vol <= X"00"; - elsif trigger ='1' and trigger_r ='0' and step = 94 then -- restart music on edge trigger if not already playing - cnt := 0; - step := 0; - voice1_vol <= X"00"; - voice2_vol <= X"00"; - sel_song_r <= sel_song; - if sel_song = '1' then - max_step <= 94; - tempo_period <= C_song1_tempo; - else - max_step <= 46; - tempo_period <= C_song0_tempo; - end if; - else - cnt := cnt +1; - if cnt >= 100 then - cnt := 0; - tempo := tempo +1; - if tempo >= tempo_period then -- next beat - tempo := 0; - if step < max_step then -- if not end of music get next note - if sel_song_r = '1' then - voice1_code_v := to_unsigned(voice1(step),7); - voice2_code_v := to_unsigned(voice2(step),7); - else - voice1_code_v := to_unsigned(voice3(step),7); - voice2_code_v := to_unsigned(voice3(step),7); - end if; - voice1_code <= voice1_code_v; - voice2_code <= voice2_code_v; - step := step + 1; - else -- if end cut-off volume - voice1_vol <= X"00"; - voice2_vol <= X"00"; - step := 94; - end if; - end if; - if (step < 94) then -- if not end of music - -- manage voice1 volume - -- ramp up fast to xF0 at begining of beat when new strike - if (tempo < C_voice_attack) and (voice1_code_v(6)='0') then - if voice1_vol < X"F0" then voice1_vol <= voice1_vol + X"01"; end if; - voice1_down_rate := 0; - -- ramp down slowly after a while, down to x80 - else - if voice1_vol > X"80" then - voice1_down_rate := voice1_down_rate+1; - if voice1_down_rate >= C_voice_down_rate then - voice1_down_rate := 0; - voice1_vol <= voice1_vol - X"01"; - end if; - end if; - end if; - -- manage voice2 volume - if (tempo < C_voice_attack) and (voice2_code_v(6)='0') then - if voice2_vol < X"F0" then voice2_vol <= voice2_vol + X"01"; end if; - voice2_down_rate := 0; - else - if voice2_vol > X"80" then - voice2_down_rate := voice2_down_rate+1; - if voice2_down_rate >= C_voice_down_rate then - voice2_down_rate := 0; - voice2_vol <= voice2_vol - X"01"; - end if; - end if; - end if; - end if; - end if; - end if; - end if; -end process; - --- get voice1 raw tone -voice1_tone <= tone_period(to_integer(voice1_code(3 downto 0))); - --- get voice1 tone w.r.t octave -with voice1_code(5 downto 4) select -voice1_tone_div <= voice1_tone when "00", - voice1_tone/2 when "01", - voice1_tone/4 when others; - --- generate voice1 frequency -voice1_frequency: process (clk) - variable cnt : integer range 0 to 65535 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - else - cnt := cnt+1; - if cnt >= voice1_tone_div then - cnt := 0; - voice1_snd <= not voice1_snd; - end if; - end if; - end if; -end process; - --- get voice2 raw tone -voice2_tone <= tone_period(to_integer(voice2_code(3 downto 0))); - --- get voice2 tone w.r.t octave -with voice2_code(5 downto 4) select -voice2_tone_div <= voice2_tone when "00", - voice2_tone/2 when "01", - voice2_tone/4 when others; - --- generate voice2 frequency -voice2_frequency: process (clk) - variable cnt : integer range 0 to 65535 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - else - cnt := cnt+1; - if cnt >= voice2_tone_div then - cnt := 0; - voice2_snd <= not voice2_snd; - end if; - end if; - end if; -end process; - --- modulate voice1 volume with voice1 frequency -with voice1_snd select snd1 <= voice1_vol when '1', X"00" when others; - --- modulate voice2 volume with voice2 frequency -with voice2_snd select snd2 <= voice2_vol when '1', X"00" when others; - --- mix voice1 and voice 2 -snd <= std_logic_vector(('0'&snd1(7 downto 1)) + ('0'&snd2(7 downto 1))); - -end struct; - diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_prog.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_prog.vhd deleted file mode 100644 index 5278aeb3..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_prog.vhd +++ /dev/null @@ -1,1046 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity phoenix_prog is -port ( - clk : in std_logic; - addr : in std_logic_vector(13 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of phoenix_prog is - type rom is array(0 to 16383) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"FF",X"4B",X"26",X"50",X"36",X"00",X"CD", - X"50",X"00",X"21",X"00",X"18",X"0E",X"03",X"CD",X"D0",X"01",X"CD",X"80",X"00",X"3A",X"A2",X"43", - X"A7",X"CA",X"2D",X"00",X"CD",X"00",X"04",X"CD",X"00",X"27",X"C3",X"1A",X"00",X"3E",X"0F",X"26", - X"60",X"77",X"26",X"68",X"77",X"CD",X"77",X"03",X"00",X"CD",X"E0",X"17",X"A7",X"CA",X"46",X"00", - X"CD",X"88",X"02",X"C3",X"1A",X"00",X"CD",X"E3",X"00",X"C3",X"1A",X"00",X"FF",X"FF",X"FF",X"FF", - X"26",X"68",X"36",X"00",X"26",X"60",X"36",X"00",X"26",X"58",X"36",X"00",X"CD",X"6B",X"00",X"26", - X"50",X"36",X"01",X"CD",X"6B",X"00",X"26",X"50",X"36",X"00",X"C9",X"21",X"F8",X"4B",X"3E",X"3F", - X"36",X"00",X"2B",X"BC",X"C2",X"70",X"00",X"C9",X"CD",X"96",X"01",X"C3",X"F0",X"06",X"FF",X"FF", - X"26",X"78",X"7E",X"E6",X"80",X"CA",X"80",X"00",X"7E",X"E6",X"80",X"C2",X"88",X"00",X"26",X"70", - X"7E",X"21",X"A0",X"43",X"46",X"77",X"2C",X"70",X"2E",X"9B",X"CD",X"00",X"02",X"2E",X"8F",X"7E", - X"FE",X"09",X"C8",X"D2",X"00",X"00",X"06",X"01",X"CD",X"BB",X"00",X"C8",X"2E",X"8F",X"34",X"7E", - X"C6",X"20",X"32",X"42",X"41",X"C9",X"00",X"C9",X"FF",X"FF",X"FF",X"21",X"A0",X"43",X"7E",X"2F", - X"A0",X"2C",X"A6",X"C9",X"7E",X"E6",X"0F",X"F6",X"20",X"12",X"CD",X"10",X"02",X"05",X"C8",X"7E", - X"0F",X"0F",X"0F",X"0F",X"E6",X"0F",X"F6",X"20",X"12",X"CD",X"10",X"02",X"2B",X"05",X"C2",X"C4", - X"00",X"C9",X"FF",X"21",X"99",X"43",X"CD",X"00",X"02",X"01",X"01",X"00",X"CD",X"58",X"02",X"CA", - X"E1",X"01",X"01",X"02",X"00",X"11",X"1F",X"01",X"CD",X"60",X"02",X"D2",X"96",X"01",X"01",X"20", - X"01",X"CD",X"58",X"02",X"CA",X"CA",X"0B",X"0E",X"B0",X"CD",X"58",X"02",X"CA",X"E1",X"01",X"0E", - X"B8",X"CD",X"58",X"02",X"CA",X"80",X"05",X"0E",X"C0",X"11",X"DF",X"02",X"CD",X"60",X"02",X"D2", - X"78",X"00",X"01",X"00",X"03",X"11",X"AF",X"03",X"CD",X"60",X"02",X"D2",X"DC",X"21",X"01",X"E6", - X"03",X"11",X"FF",X"FF",X"CD",X"60",X"02",X"D2",X"B0",X"03",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"A0",X"03",X"CD",X"80",X"00",X"CD",X"80",X"03",X"21",X"A3",X"43",X"36",X"02",X"2C",X"36", - X"00",X"00",X"00",X"00",X"2E",X"B8",X"06",X"08",X"CD",X"D8",X"05",X"2E",X"BA",X"36",X"10",X"2E", - X"BE",X"3A",X"00",X"78",X"E6",X"0C",X"07",X"07",X"C6",X"30",X"77",X"26",X"58",X"36",X"00",X"CD", - X"80",X"00",X"C9",X"7E",X"E6",X"7F",X"06",X"CE",X"FE",X"1F",X"D8",X"06",X"FE",X"C8",X"06",X"AE", - X"FE",X"5F",X"D8",X"06",X"FE",X"C8",X"06",X"CE",X"FE",X"7F",X"D8",X"06",X"FE",X"2D",X"7E",X"FE", - X"09",X"C0",X"06",X"7E",X"C9",X"FF",X"7E",X"E6",X"1F",X"FE",X"06",X"D8",X"5F",X"7E",X"E6",X"E0", - X"4F",X"2D",X"46",X"2E",X"A8",X"70",X"2C",X"71",X"01",X"60",X"18",X"CD",X"06",X"02",X"7E",X"2D", - X"66",X"6F",X"7B",X"56",X"2C",X"5E",X"2D",X"4F",X"85",X"6F",X"79",X"D6",X"06",X"4F",X"CA",X"C8", - X"01",X"CD",X"17",X"02",X"0D",X"C2",X"C1",X"01",X"7E",X"12",X"C3",X"E0",X"14",X"C2",X"C0",X"01", - X"56",X"2C",X"5E",X"7D",X"C6",X"05",X"6F",X"06",X"1A",X"CD",X"ED",X"01",X"0D",X"C2",X"D0",X"01", - X"C9",X"CD",X"40",X"01",X"21",X"60",X"19",X"0E",X"03",X"C3",X"D0",X"01",X"FF",X"7E",X"12",X"23", - X"CD",X"17",X"02",X"05",X"C2",X"ED",X"01",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"34",X"C0",X"2D",X"34",X"2C",X"C9",X"7E",X"81",X"77",X"2D",X"7E",X"88",X"77",X"2C",X"C9",X"FF", - X"7B",X"C6",X"20",X"5F",X"D0",X"14",X"C9",X"7B",X"D6",X"20",X"5F",X"D0",X"15",X"C9",X"FF",X"FF", - X"AF",X"7E",X"81",X"27",X"77",X"2D",X"7E",X"88",X"27",X"77",X"2D",X"7E",X"CE",X"00",X"27",X"77", - X"2C",X"2C",X"C9",X"FF",X"FF",X"FF",X"37",X"3E",X"99",X"CE",X"00",X"91",X"86",X"27",X"77",X"2D", - X"3E",X"99",X"CE",X"00",X"90",X"86",X"27",X"77",X"2D",X"3E",X"99",X"CE",X"00",X"86",X"27",X"77", - X"2C",X"2C",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"7E",X"B9",X"C0",X"2D",X"7E",X"2C",X"B8",X"C9", - X"CD",X"70",X"02",X"D8",X"CD",X"77",X"02",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"7E",X"91",X"2D",X"7E",X"98",X"2C",X"C9",X"7B",X"96",X"2D",X"7A",X"9E",X"2C",X"C9",X"FF",X"FF", - X"7D",X"B9",X"C0",X"7C",X"B8",X"C9",X"FF",X"FF",X"CD",X"40",X"01",X"21",X"C0",X"19",X"0E",X"02", - X"CD",X"D0",X"01",X"0E",X"02",X"CD",X"E0",X"17",X"FE",X"02",X"DA",X"A7",X"02",X"21",X"A0",X"1B", - X"0E",X"01",X"CD",X"D0",X"01",X"0E",X"06",X"3A",X"00",X"70",X"2F",X"A1",X"C8",X"CD",X"CB",X"02", - X"CD",X"F0",X"02",X"CD",X"2E",X"03",X"CD",X"50",X"03",X"CD",X"40",X"01",X"26",X"50",X"36",X"01", - X"CD",X"40",X"01",X"26",X"50",X"36",X"00",X"C9",X"FF",X"FF",X"FF",X"0E",X"01",X"FE",X"02",X"CA", - X"D4",X"02",X"0E",X"02",X"21",X"A2",X"43",X"71",X"3A",X"00",X"78",X"E6",X"10",X"CA",X"E3",X"02", - X"79",X"07",X"4F",X"2E",X"8F",X"7E",X"91",X"77",X"C6",X"20",X"32",X"42",X"41",X"C9",X"FF",X"FF", - X"11",X"83",X"43",X"21",X"8B",X"43",X"CD",X"14",X"03",X"D4",X"20",X"03",X"1E",X"87",X"2E",X"8B", - X"CD",X"14",X"03",X"D4",X"20",X"03",X"2E",X"8B",X"11",X"41",X"41",X"06",X"06",X"CD",X"C4",X"00", - X"C9",X"FF",X"FF",X"FF",X"1A",X"96",X"1D",X"2D",X"1A",X"9E",X"1D",X"2D",X"1A",X"9E",X"C9",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23",X"1A",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"80", - X"43",X"36",X"00",X"23",X"7D",X"FE",X"88",X"C2",X"31",X"03",X"2E",X"83",X"11",X"61",X"42",X"06", - X"06",X"CD",X"C4",X"00",X"2E",X"87",X"11",X"21",X"40",X"06",X"06",X"CD",X"C4",X"00",X"C9",X"FF", - X"3A",X"00",X"78",X"E6",X"03",X"C6",X"03",X"47",X"21",X"90",X"43",X"70",X"2E",X"A2",X"7E",X"FE", - X"01",X"CA",X"67",X"03",X"2E",X"91",X"70",X"2E",X"90",X"7E",X"F6",X"20",X"32",X"A2",X"42",X"2C", - X"7E",X"F6",X"20",X"32",X"62",X"40",X"C9",X"21",X"8C",X"43",X"77",X"2C",X"77",X"C9",X"FF",X"FF", - X"21",X"3F",X"43",X"11",X"1F",X"00",X"01",X"3F",X"03",X"72",X"2B",X"72",X"2B",X"7D",X"A3",X"B8", - X"C2",X"89",X"03",X"72",X"2B",X"2B",X"2B",X"2B",X"7C",X"B9",X"C2",X"89",X"03",X"C9",X"FF",X"FF", - X"21",X"3F",X"4B",X"11",X"47",X"00",X"72",X"2B",X"72",X"2B",X"7C",X"BB",X"C2",X"A6",X"03",X"C9", - X"01",X"A0",X"07",X"CD",X"70",X"02",X"DA",X"CE",X"03",X"CD",X"58",X"02",X"CA",X"EB",X"03",X"01", - X"60",X"0B",X"CD",X"70",X"02",X"DA",X"CE",X"03",X"CD",X"58",X"02",X"CA",X"E2",X"03",X"CD",X"73", - X"01",X"21",X"A0",X"43",X"7E",X"E6",X"01",X"B0",X"77",X"C3",X"00",X"04",X"C3",X"00",X"04",X"FF", - X"FF",X"FF",X"01",X"08",X"01",X"11",X"00",X"10",X"C3",X"F1",X"03",X"01",X"04",X"01",X"11",X"08", - X"00",X"21",X"A4",X"43",X"70",X"2E",X"B8",X"71",X"2E",X"BA",X"72",X"2C",X"73",X"C9",X"FF",X"FF", - X"21",X"0E",X"04",X"3A",X"A4",X"43",X"07",X"85",X"6F",X"7E",X"2C",X"6E",X"67",X"E9",X"04",X"30", - X"04",X"AC",X"05",X"15",X"08",X"00",X"0A",X"EA",X"0B",X"60",X"24",X"00",X"24",X"4C",X"3A",X"A3", - X"43",X"E6",X"01",X"47",X"3A",X"B8",X"43",X"E6",X"02",X"B0",X"32",X"00",X"50",X"C9",X"18",X"05", - X"21",X"A4",X"43",X"36",X"01",X"2C",X"36",X"80",X"2E",X"A3",X"7E",X"36",X"00",X"FE",X"02",X"C8", - X"77",X"2D",X"7E",X"FE",X"01",X"C8",X"2C",X"7E",X"A7",X"CA",X"A0",X"04",X"2E",X"90",X"7E",X"A7", - X"C8",X"2E",X"A3",X"36",X"00",X"01",X"00",X"01",X"CD",X"60",X"04",X"C9",X"FF",X"FF",X"FF",X"FF", - X"21",X"00",X"50",X"11",X"20",X"43",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"E6",X"03",X"C2",X"66", - X"04",X"7B",X"E6",X"F0",X"D6",X"20",X"5F",X"D2",X"66",X"04",X"15",X"7A",X"FE",X"3F",X"C2",X"66", - X"04",X"11",X"80",X"43",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"FE",X"B8",X"C2",X"84",X"04",X"11", - X"C0",X"4B",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"FE",X"00",X"C2",X"92",X"04",X"C9",X"FF",X"FF", - X"2E",X"A3",X"36",X"01",X"01",X"01",X"00",X"CD",X"60",X"04",X"C9",X"FF",X"21",X"A5",X"43",X"35", - X"7E",X"2D",X"36",X"02",X"A7",X"C8",X"36",X"01",X"FE",X"7F",X"CA",X"F0",X"07",X"2E",X"9A",X"36", - X"00",X"2C",X"36",X"00",X"E6",X"08",X"C2",X"E6",X"04",X"CD",X"E8",X"06",X"00",X"21",X"A3",X"43", - X"7E",X"A7",X"2E",X"83",X"11",X"61",X"42",X"CA",X"DF",X"04",X"2E",X"87",X"11",X"21",X"40",X"06", - X"06",X"CD",X"C4",X"00",X"C9",X"FF",X"21",X"A3",X"43",X"7E",X"A7",X"11",X"61",X"42",X"CA",X"F4", - X"04",X"11",X"21",X"40",X"06",X"06",X"CD",X"FB",X"04",X"C9",X"FF",X"3E",X"00",X"12",X"CD",X"10", - X"02",X"05",X"C2",X"FB",X"04",X"C9",X"21",X"92",X"43",X"06",X"06",X"CD",X"D8",X"05",X"3A",X"50", - X"4B",X"32",X"94",X"43",X"C9",X"CD",X"1E",X"04",X"21",X"A4",X"43",X"36",X"03",X"CD",X"80",X"05", - X"CD",X"47",X"05",X"CD",X"A0",X"09",X"CD",X"32",X"05",X"CD",X"6C",X"0A",X"CD",X"06",X"05",X"C3", - X"B0",X"32",X"21",X"50",X"4B",X"06",X"A0",X"CD",X"D8",X"05",X"CD",X"EC",X"05",X"CD",X"50",X"06", - X"CD",X"10",X"06",X"C9",X"FF",X"FF",X"FF",X"21",X"60",X"05",X"11",X"C0",X"43",X"06",X"20",X"CD", - X"E0",X"05",X"21",X"E0",X"43",X"06",X"20",X"CD",X"D8",X"05",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"0C",X"10",X"64",X"D8",X"00",X"50",X"00",X"D0",X"00",X"50",X"00",X"D0",X"00",X"58",X"00",X"20", - X"00",X"58",X"00",X"20",X"00",X"58",X"00",X"20",X"00",X"58",X"00",X"20",X"00",X"58",X"00",X"20", - X"21",X"98",X"05",X"3A",X"B8",X"43",X"E6",X"0F",X"85",X"6F",X"6E",X"26",X"05",X"11",X"AB",X"43", - X"06",X"0C",X"CD",X"E0",X"05",X"C9",X"FF",X"FF",X"A8",X"A8",X"C0",X"C0",X"A8",X"A8",X"A8",X"A8", - X"B4",X"CC",X"B4",X"B4",X"A8",X"A8",X"A8",X"A8",X"80",X"7F",X"00",X"00",X"40",X"3F",X"00",X"1C", - X"00",X"FF",X"FF",X"FF",X"60",X"5F",X"01",X"02",X"30",X"2F",X"00",X"1C",X"00",X"C0",X"FF",X"FF", - X"80",X"7F",X"03",X"04",X"40",X"3F",X"00",X"1F",X"00",X"A0",X"FF",X"FF",X"60",X"60",X"05",X"06", - X"50",X"30",X"00",X"1D",X"00",X"48",X"FF",X"FF",X"AF",X"77",X"23",X"05",X"C2",X"D9",X"05",X"C9", - X"7E",X"12",X"23",X"13",X"05",X"C2",X"E0",X"05",X"C9",X"FF",X"FF",X"FF",X"21",X"00",X"15",X"3A", - X"B8",X"43",X"E6",X"0F",X"07",X"85",X"6F",X"56",X"23",X"5E",X"21",X"70",X"4B",X"3A",X"BA",X"43", - X"47",X"A7",X"C8",X"72",X"2C",X"73",X"2C",X"2C",X"2C",X"05",X"C2",X"03",X"06",X"C9",X"FF",X"FF", - X"21",X"3A",X"06",X"3A",X"B8",X"43",X"0F",X"E6",X"0F",X"85",X"6F",X"00",X"00",X"00",X"6E",X"26", - X"15",X"11",X"72",X"4B",X"3A",X"BA",X"43",X"47",X"A7",X"C8",X"7E",X"12",X"23",X"13",X"7E",X"12", - X"23",X"13",X"13",X"13",X"05",X"C2",X"2A",X"06",X"C9",X"FF",X"60",X"40",X"E0",X"E0",X"E0",X"E0", - X"FF",X"FF",X"C0",X"A0",X"80",X"80",X"80",X"80",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"20",X"15",X"3A",X"B8",X"43",X"E6",X"0F",X"07",X"85",X"6F",X"56",X"23",X"5E",X"21",X"50", - X"4B",X"3A",X"BA",X"43",X"47",X"A7",X"C8",X"72",X"2C",X"73",X"2C",X"05",X"C2",X"67",X"06",X"C9", - X"21",X"B1",X"43",X"46",X"2E",X"B9",X"4E",X"79",X"90",X"77",X"21",X"B9",X"43",X"7E",X"35",X"32", - X"00",X"58",X"E6",X"07",X"C0",X"01",X"47",X"20",X"11",X"21",X"4B",X"7E",X"0F",X"0F",X"0F",X"E6", - X"1F",X"83",X"5F",X"2E",X"B2",X"7E",X"2C",X"6E",X"67",X"7E",X"12",X"2C",X"7B",X"90",X"5F",X"D2", - X"99",X"06",X"15",X"7A",X"B9",X"C2",X"99",X"06",X"7D",X"32",X"B3",X"43",X"C9",X"FF",X"FF",X"FF", - X"21",X"AB",X"43",X"3A",X"B9",X"43",X"4F",X"BE",X"C0",X"7E",X"2C",X"86",X"2D",X"77",X"2C",X"2C", - X"34",X"46",X"2C",X"34",X"7E",X"21",X"20",X"1E",X"E6",X"1F",X"85",X"6F",X"56",X"C6",X"20",X"6F", - X"5E",X"79",X"0F",X"0F",X"0F",X"E6",X"1E",X"83",X"C6",X"02",X"5F",X"21",X"60",X"1E",X"78",X"E6", - X"1F",X"85",X"6F",X"6E",X"CD",X"DC",X"07",X"C9",X"21",X"00",X"18",X"0E",X"01",X"C3",X"D0",X"01", - X"CD",X"7A",X"06",X"CD",X"40",X"20",X"C3",X"B0",X"06",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"01",X"C0",X"43",X"11",X"E0",X"43",X"CD",X"18",X"07",X"79",X"C6",X"04",X"4F",X"C6",X"20",X"5F", - X"50",X"FE",X"EC",X"C2",X"06",X"07",X"C9",X"C9",X"CD",X"20",X"07",X"C3",X"40",X"07",X"E6",X"EF", - X"0A",X"67",X"E6",X"10",X"C8",X"7C",X"E6",X"EF",X"02",X"07",X"07",X"07",X"E6",X"07",X"C6",X"38", - X"6F",X"26",X"07",X"6E",X"E9",X"6C",X"FF",X"8A",X"63",X"79",X"FF",X"9E",X"BE",X"FF",X"FF",X"FF", - X"0A",X"67",X"E6",X"08",X"C8",X"7C",X"E6",X"07",X"67",X"0F",X"0F",X"0F",X"B4",X"F6",X"18",X"02", - X"03",X"7C",X"C6",X"5B",X"6F",X"26",X"07",X"6E",X"E9",X"5E",X"0A",X"6D",X"88",X"FF",X"AA",X"D2", - X"FF",X"FF",X"FF",X"EB",X"56",X"23",X"5E",X"2B",X"AF",X"12",X"EB",X"C9",X"EB",X"EB",X"23",X"23", - X"56",X"23",X"5E",X"0A",X"12",X"0B",X"C9",X"12",X"23",X"EB",X"56",X"23",X"5E",X"2B",X"AF",X"12", - X"CD",X"17",X"02",X"AF",X"12",X"EB",X"C9",X"23",X"EB",X"23",X"23",X"56",X"23",X"5E",X"0A",X"6F", - X"26",X"14",X"7E",X"12",X"23",X"CD",X"17",X"02",X"7E",X"12",X"0B",X"C9",X"FF",X"EB",X"EB",X"56", - X"23",X"5E",X"2B",X"AF",X"12",X"13",X"12",X"EB",X"C9",X"FF",X"EB",X"23",X"23",X"56",X"23",X"5E", - X"0A",X"6F",X"26",X"14",X"7E",X"12",X"23",X"13",X"7E",X"12",X"0B",X"C9",X"23",X"13",X"EB",X"56", - X"23",X"5E",X"2B",X"AF",X"12",X"13",X"12",X"CD",X"17",X"02",X"AF",X"12",X"1B",X"12",X"EB",X"C9", - X"CD",X"4C",X"EB",X"23",X"23",X"56",X"23",X"5E",X"0A",X"6F",X"26",X"14",X"7E",X"12",X"23",X"13", - X"7E",X"12",X"23",X"1B",X"CD",X"17",X"02",X"7E",X"12",X"23",X"13",X"7E",X"12",X"0B",X"C9",X"FF", - X"3A",X"B9",X"43",X"32",X"00",X"58",X"CD",X"80",X"03",X"C3",X"1E",X"04",X"FF",X"FF",X"FF",X"FF", - X"21",X"14",X"08",X"3A",X"B8",X"43",X"07",X"E6",X"1E",X"85",X"6F",X"7E",X"2C",X"6E",X"67",X"E9", - X"FF",X"FF",X"FF",X"FF",X"08",X"34",X"20",X"00",X"08",X"34",X"20",X"00",X"22",X"30",X"34",X"00", - X"22",X"30",X"34",X"00",X"22",X"30",X"22",X"B4",X"22",X"CA",X"20",X"00",X"22",X"4C",X"22",X"4C", - X"22",X"4C",X"22",X"4C",X"CD",X"F0",X"06",X"21",X"B4",X"43",X"35",X"7E",X"FE",X"15",X"D0",X"CD", - X"5A",X"08",X"CD",X"FA",X"05",X"CD",X"50",X"0A",X"21",X"B4",X"43",X"7E",X"A7",X"C0",X"2E",X"B8", - X"34",X"2E",X"A4",X"36",X"02",X"C9",X"FF",X"FF",X"FF",X"FF",X"11",X"6C",X"08",X"FE",X"11",X"D0", - X"1E",X"6D",X"FE",X"0D",X"D0",X"1E",X"6E",X"FE",X"09",X"D0",X"1E",X"6F",X"FE",X"05",X"D0",X"1E", - X"68",X"C9",X"FF",X"FF",X"FF",X"FF",X"CD",X"00",X"07",X"CD",X"86",X"08",X"CD",X"A0",X"08",X"CD", - X"A0",X"09",X"CD",X"7A",X"09",X"C9",X"21",X"EB",X"43",X"06",X"03",X"56",X"2B",X"5E",X"2B",X"72", - X"2B",X"73",X"2B",X"05",X"C2",X"8B",X"08",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"C4",X"08",X"21",X"C4",X"43",X"CD",X"30",X"09",X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"03", - X"C0",X"21",X"C8",X"43",X"CD",X"30",X"09",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"21",X"C0",X"43",X"7E",X"E6",X"08",X"CA",X"A0",X"0A",X"2E",X"A6",X"7E", - X"A7",X"C2",X"EA",X"08",X"06",X"80",X"CD",X"BB",X"00",X"CA",X"EB",X"08",X"2E",X"62",X"36",X"40", - X"2E",X"C0",X"7E",X"E6",X"F7",X"77",X"2E",X"A6",X"36",X"FF",X"35",X"2E",X"C2",X"CD",X"00",X"09", - X"01",X"00",X"16",X"C3",X"26",X"09",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"3A",X"A0",X"43",X"2F",X"E6",X"60",X"C8",X"E6",X"40",X"CA",X"17",X"09",X"7E",X"FE",X"0D",X"D8", - X"35",X"3E",X"FF",X"32",X"60",X"43",X"C9",X"7E",X"FE",X"C0",X"D0",X"34",X"3E",X"FF",X"32",X"60", - X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"7E",X"E6",X"07",X"81",X"4F",X"0A",X"2D",X"77",X"C9",X"FF", - X"7E",X"E6",X"08",X"C2",X"64",X"09",X"EB",X"06",X"10",X"CD",X"BB",X"00",X"C8",X"7E",X"E6",X"EF", - X"77",X"1A",X"F6",X"08",X"12",X"13",X"13",X"3A",X"C2",X"43",X"C6",X"04",X"12",X"13",X"3A",X"C3", - X"43",X"D6",X"08",X"12",X"1B",X"EB",X"01",X"20",X"16",X"CD",X"26",X"09",X"3E",X"30",X"32",X"61", - X"43",X"C9",X"FF",X"FF",X"2C",X"2C",X"2C",X"7E",X"D6",X"08",X"77",X"FE",X"1F",X"D0",X"2D",X"2D", - X"2D",X"7E",X"E6",X"F7",X"77",X"C9",X"FF",X"FF",X"7E",X"E6",X"3A",X"C2",X"43",X"47",X"E6",X"07", - X"07",X"21",X"38",X"0B",X"85",X"6F",X"78",X"96",X"32",X"9E",X"43",X"23",X"78",X"86",X"32",X"9F", - X"43",X"C9",X"32",X"9F",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"01",X"C2",X"43",X"11",X"E2",X"43",X"CD",X"BA",X"09",X"03",X"03",X"03",X"13",X"13",X"13",X"79", - X"FE",X"CE",X"C2",X"A6",X"09",X"C9",X"FF",X"FF",X"FF",X"FF",X"21",X"00",X"0A",X"0A",X"E6",X"F8", - X"0F",X"0F",X"85",X"6F",X"7E",X"12",X"03",X"13",X"23",X"0A",X"E6",X"F8",X"0F",X"0F",X"0F",X"86", - X"12",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"43",X"20",X"43",X"00",X"42",X"E0",X"42",X"C0",X"42",X"A0",X"42",X"80",X"42",X"60",X"42",X"40", - X"42",X"20",X"42",X"00",X"41",X"E0",X"41",X"C0",X"41",X"A0",X"41",X"80",X"41",X"60",X"41",X"40", - X"41",X"20",X"41",X"00",X"40",X"E0",X"40",X"C0",X"40",X"A0",X"40",X"80",X"40",X"60",X"40",X"40", - X"40",X"20",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"AA",X"BA",X"AB",X"BB",X"80",X"90",X"81",X"91",X"74",X"7C",X"75",X"7D",X"FF",X"FF",X"FF",X"FF", - X"01",X"70",X"4B",X"11",X"B0",X"4B",X"C5",X"CD",X"18",X"07",X"C1",X"79",X"C6",X"04",X"4F",X"C6", - X"40",X"5F",X"50",X"A7",X"C2",X"56",X"0A",X"C9",X"FF",X"FF",X"FF",X"FF",X"01",X"70",X"4B",X"11", - X"B3",X"4B",X"C5",X"D5",X"0A",X"E6",X"18",X"CA",X"8A",X"0A",X"EB",X"56",X"2B",X"5E",X"2B",X"72", - X"2B",X"73",X"EB",X"13",X"13",X"03",X"03",X"CD",X"BA",X"09",X"D1",X"C1",X"79",X"C6",X"04",X"4F", - X"7B",X"C6",X"04",X"5F",X"FE",X"03",X"C2",X"72",X"0A",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"2E",X"E2",X"56",X"23",X"5E",X"CD",X"10",X"02",X"1B",X"01",X"04",X"04",X"2E",X"A6",X"35",X"7E", - X"21",X"F0",X"17",X"FE",X"C0",X"CA",X"48",X"0B",X"21",X"70",X"17",X"E6",X"0C",X"07",X"07",X"85", - X"6F",X"C3",X"D6",X"0A",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"D5",X"C5",X"7E",X"12",X"23",X"13",X"05",X"C2",X"D8",X"0A", - X"C1",X"D1",X"CD",X"17",X"02",X"0D",X"C2",X"D6",X"0A",X"C9",X"21",X"B9",X"43",X"7E",X"E6",X"F8", - X"77",X"32",X"00",X"58",X"2E",X"E2",X"56",X"2C",X"5E",X"CD",X"10",X"02",X"1B",X"00",X"2E",X"A5", - X"35",X"7E",X"CA",X"15",X"0B",X"FE",X"20",X"DA",X"A0",X"0B",X"CA",X"80",X"03",X"C3",X"BA",X"0B", - X"70",X"20",X"C3",X"E8",X"20",X"2D",X"36",X"05",X"2D",X"7E",X"C6",X"90",X"6F",X"7E",X"A7",X"C8", - X"35",X"E5",X"CD",X"67",X"03",X"E1",X"7E",X"A7",X"C8",X"2E",X"A4",X"36",X"00",X"C9",X"FF",X"FF", - X"FF",X"F0",X"E0",X"B0",X"C0",X"D0",X"C0",X"B0",X"00",X"08",X"01",X"09",X"02",X"0A",X"03",X"0B", - X"03",X"0B",X"02",X"0A",X"01",X"09",X"00",X"08",X"CD",X"D6",X"0A",X"21",X"C0",X"43",X"36",X"0C", - X"2C",X"36",X"0C",X"2C",X"7E",X"E6",X"F8",X"F6",X"03",X"77",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"A5",X"43",X"34",X"7E",X"FE",X"40",X"CA",X"A0",X"03",X"21",X"00",X"1A",X"0E",X"01",X"FE", - X"80",X"C2",X"95",X"0B",X"21",X"A4",X"43",X"36",X"00",X"2E",X"90",X"7E",X"2C",X"B6",X"C0",X"AF", - X"2E",X"98",X"77",X"2C",X"77",X"2E",X"A2",X"77",X"2C",X"7E",X"A7",X"C8",X"36",X"00",X"01",X"00", - X"01",X"CD",X"60",X"04",X"C9",X"CD",X"D0",X"01",X"CD",X"E4",X"01",X"C3",X"F0",X"1D",X"FF",X"FF", - X"21",X"B8",X"43",X"7E",X"E6",X"0F",X"FE",X"04",X"D8",X"FE",X"09",X"D0",X"2C",X"AF",X"77",X"32", - X"00",X"58",X"C3",X"A0",X"03",X"FF",X"FF",X"FF",X"FF",X"FF",X"47",X"0F",X"D2",X"C0",X"0F",X"0F", - X"78",X"DA",X"70",X"20",X"C3",X"E8",X"20",X"FF",X"FF",X"FF",X"21",X"D0",X"42",X"01",X"DF",X"FF", - X"36",X"64",X"09",X"23",X"36",X"65",X"21",X"F2",X"42",X"11",X"40",X"0A",X"CD",X"38",X"35",X"21", - X"15",X"4B",X"11",X"00",X"3C",X"CD",X"28",X"35",X"21",X"D8",X"4A",X"11",X"48",X"0A",X"CD",X"48", - X"35",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"E5",X"7D",X"D6",X"72",X"0F",X"C6",X"50",X"6F",X"7E",X"2C",X"6E",X"67",X"11",X"04",X"0C",X"7E", - X"E1",X"FE",X"07",X"DA",X"A4",X"0E",X"FE",X"09",X"D2",X"A4",X"0E",X"11",X"20",X"10",X"3E",X"FF", - X"32",X"69",X"43",X"C3",X"A4",X"0E",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"FF",X"43",X"06",X"05",X"CD",X"8B",X"08",X"CD",X"56",X"0C",X"CD",X"6B",X"0C",X"CD",X"D8", - X"0C",X"C9",X"FF",X"FF",X"FF",X"FF",X"21",X"CC",X"43",X"E5",X"CD",X"84",X"0C",X"E1",X"7D",X"C6", - X"04",X"6F",X"FE",X"E0",X"C2",X"59",X"0C",X"C9",X"FF",X"FF",X"FF",X"01",X"CE",X"43",X"11",X"EE", - X"43",X"CD",X"BA",X"09",X"03",X"03",X"03",X"13",X"13",X"13",X"79",X"FE",X"E2",X"C2",X"71",X"0C", - X"C9",X"FF",X"FF",X"FF",X"7E",X"E6",X"08",X"C8",X"00",X"00",X"2C",X"7E",X"EE",X"04",X"77",X"2C", - X"2C",X"7E",X"C6",X"04",X"77",X"FE",X"F9",X"D2",X"6E",X"09",X"2D",X"CD",X"B4",X"0C",X"54",X"7D", - X"C6",X"20",X"5F",X"EB",X"46",X"23",X"4E",X"0A",X"EB",X"2C",X"FE",X"E8",X"D2",X"6E",X"09",X"C9", - X"FF",X"FF",X"FF",X"FF",X"FE",X"DC",X"D8",X"FE",X"E9",X"D0",X"3A",X"9F",X"43",X"BE",X"D8",X"3A", - X"9E",X"43",X"BE",X"D0",X"3E",X"04",X"32",X"A4",X"43",X"3E",X"60",X"32",X"A5",X"43",X"3E",X"10", - X"32",X"63",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"01",X"CC",X"43",X"11",X"EC",X"43",X"C5",X"CD", - X"18",X"07",X"C1",X"79",X"C6",X"04",X"4F",X"C6",X"20",X"5F",X"50",X"A7",X"C2",X"DE",X"0C",X"C9", - X"FF",X"FF",X"FF",X"FF",X"D1",X"C1",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"21",X"93",X"43",X"34",X"7E",X"E6",X"07",X"C0", - X"2C",X"2C",X"7E",X"3C",X"E6",X"0F",X"77",X"C9",X"FF",X"FF",X"FF",X"FF",X"01",X"70",X"4B",X"21", - X"50",X"4B",X"CD",X"30",X"0D",X"0C",X"0C",X"2C",X"3E",X"B0",X"B9",X"C2",X"22",X"0D",X"C9",X"FF", - X"56",X"23",X"0A",X"03",X"03",X"E6",X"08",X"C8",X"5E",X"EB",X"7E",X"07",X"C6",X"00",X"6F",X"26", - X"17",X"AF",X"BE",X"CA",X"4F",X"0D",X"23",X"BE",X"CA",X"5E",X"0D",X"2B",X"0A",X"86",X"02",X"03", - X"23",X"0A",X"86",X"02",X"0B",X"E6",X"07",X"EB",X"C0",X"34",X"C9",X"FF",X"FF",X"FF",X"2B",X"0A", - X"86",X"02",X"E6",X"07",X"EB",X"C0",X"34",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"01",X"70",X"4B",X"21",X"50",X"4B",X"CD",X"86",X"0D",X"79",X"C6",X"04",X"4F",X"3E",X"B0",X"B9", - X"C2",X"76",X"0D",X"C9",X"FF",X"FF",X"56",X"23",X"5E",X"23",X"0A",X"E6",X"08",X"C8",X"EB",X"7E", - X"A7",X"CC",X"DE",X"0D",X"6F",X"07",X"85",X"C6",X"A0",X"6F",X"26",X"16",X"0A",X"E6",X"F8",X"B6", - X"02",X"03",X"03",X"03",X"23",X"7E",X"23",X"0F",X"DA",X"BB",X"0D",X"0F",X"DA",X"CC",X"0D",X"0A", - X"0F",X"E6",X"03",X"86",X"0B",X"C3",X"D2",X"0D",X"FF",X"FF",X"FF",X"0A",X"0F",X"E6",X"03",X"86", - X"67",X"0B",X"0A",X"E6",X"04",X"84",X"C3",X"D2",X"0D",X"FF",X"FF",X"FF",X"0B",X"0A",X"0F",X"E6", - X"03",X"86",X"6F",X"26",X"16",X"7E",X"0B",X"02",X"0B",X"EB",X"C9",X"FF",X"FF",X"FF",X"1B",X"1B", - X"3A",X"94",X"43",X"12",X"67",X"13",X"3A",X"95",X"43",X"12",X"6F",X"13",X"7E",X"C9",X"FF",X"FF", - X"01",X"C4",X"43",X"21",X"E6",X"43",X"CD",X"10",X"0E",X"01",X"C8",X"43",X"21",X"EA",X"43",X"C3", - X"10",X"0E",X"01",X"CC",X"43",X"21",X"EE",X"43",X"CD",X"10",X"0E",X"C9",X"FF",X"FF",X"FF",X"FF", - X"0A",X"E6",X"08",X"C8",X"56",X"2C",X"5E",X"1A",X"FE",X"C0",X"D0",X"FE",X"60",X"D8",X"FE",X"68", - X"D2",X"39",X"0E",X"E6",X"07",X"07",X"07",X"C6",X"40",X"6F",X"26",X"17",X"03",X"03",X"0A",X"E6", - X"07",X"BE",X"D0",X"23",X"BE",X"D8",X"C3",X"70",X"0E",X"03",X"03",X"0A",X"57",X"03",X"0A",X"E6", - X"F8",X"5F",X"21",X"70",X"4B",X"7E",X"23",X"23",X"E6",X"08",X"C4",X"58",X"0E",X"23",X"23",X"3E", - X"B0",X"BD",X"C2",X"45",X"0E",X"C9",X"FF",X"FF",X"7A",X"BE",X"D8",X"7E",X"C6",X"08",X"BA",X"D8", - X"23",X"7E",X"2B",X"C6",X"04",X"BB",X"D8",X"D6",X"0C",X"BB",X"D0",X"C3",X"00",X"0C",X"FF",X"FF", - X"23",X"0A",X"E6",X"F8",X"86",X"57",X"03",X"0A",X"E6",X"F8",X"5F",X"21",X"70",X"4B",X"7E",X"23", - X"23",X"E6",X"08",X"C4",X"90",X"0E",X"23",X"23",X"3E",X"B0",X"BD",X"C2",X"7E",X"0E",X"C9",X"FF", - X"7E",X"C6",X"02",X"BA",X"D8",X"D6",X"05",X"BA",X"D0",X"23",X"7E",X"2B",X"E6",X"F8",X"BB",X"C0", - X"11",X"02",X"0C",X"00",X"2B",X"2B",X"0B",X"0B",X"0B",X"0A",X"E6",X"F7",X"02",X"7E",X"E6",X"F7", - X"77",X"7D",X"C6",X"42",X"6F",X"46",X"23",X"4E",X"21",X"78",X"43",X"7A",X"FE",X"10",X"CA",X"C3", - X"0E",X"2E",X"70",X"7E",X"A7",X"CA",X"D5",X"0E",X"2C",X"2C",X"2C",X"2C",X"7E",X"A7",X"CA",X"D5", - X"0E",X"2C",X"2C",X"2C",X"2C",X"72",X"2C",X"73",X"2C",X"70",X"2C",X"71",X"2E",X"64",X"36",X"FF", - X"2E",X"BA",X"35",X"E1",X"E1",X"E9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"A6",X"43",X"7E",X"FE",X"C0",X"D2",X"74",X"0F",X"2E",X"E2",X"56",X"2C",X"5E",X"01",X"02", - X"02",X"CD",X"56",X"0F",X"C8",X"00",X"00",X"21",X"9E",X"43",X"7E",X"D6",X"06",X"47",X"2C",X"4E", - X"21",X"70",X"4B",X"7E",X"2C",X"2C",X"E6",X"08",X"C4",X"38",X"0F",X"2C",X"2C",X"3E",X"B0",X"BD", - X"C2",X"23",X"0F",X"C9",X"FF",X"FF",X"FF",X"FF",X"2C",X"7E",X"2D",X"FE",X"D2",X"D8",X"FE",X"E7", - X"D0",X"7E",X"B9",X"D0",X"B8",X"D8",X"CD",X"C4",X"0C",X"11",X"04",X"0D",X"2B",X"2B",X"C3",X"AD", - X"0E",X"AD",X"0E",X"FF",X"FF",X"FF",X"C5",X"D5",X"1A",X"FE",X"60",X"DA",X"63",X"0F",X"FE",X"C0", - X"DA",X"F4",X"0C",X"13",X"05",X"C2",X"58",X"0F",X"D1",X"C1",X"CD",X"17",X"02",X"0D",X"C2",X"56", - X"0F",X"C9",X"FF",X"FF",X"2E",X"E2",X"56",X"2C",X"5E",X"CD",X"17",X"02",X"1B",X"01",X"04",X"04", - X"CD",X"56",X"0F",X"C8",X"00",X"00",X"3A",X"C2",X"43",X"D6",X"0E",X"47",X"C6",X"2D",X"4F",X"21", - X"70",X"4B",X"7E",X"2C",X"2C",X"E6",X"08",X"C4",X"A6",X"0F",X"2C",X"2C",X"3E",X"B0",X"BD",X"C2", - X"92",X"0F",X"C9",X"FF",X"FF",X"FF",X"2C",X"7E",X"2D",X"FE",X"CA",X"D8",X"FE",X"EF",X"D0",X"7E", - X"B9",X"D0",X"B8",X"D8",X"11",X"02",X"0D",X"2B",X"2B",X"C3",X"AD",X"0E",X"AD",X"0E",X"FF",X"FF", - X"21",X"70",X"43",X"CD",X"D8",X"0F",X"21",X"74",X"43",X"CD",X"D8",X"0F",X"21",X"78",X"43",X"CD", - X"58",X"37",X"21",X"7C",X"43",X"C3",X"58",X"37",X"7E",X"A7",X"C8",X"46",X"35",X"2C",X"2C",X"56", - X"2C",X"5E",X"00",X"CD",X"10",X"02",X"78",X"E6",X"0E",X"0F",X"C6",X"B0",X"6F",X"26",X"17",X"6E", - X"EB",X"01",X"DF",X"FF",X"C3",X"40",X"35",X"68",X"3E",X"05",X"32",X"96",X"43",X"C3",X"A4",X"0E", - X"01",X"01",X"01",X"01",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"01",X"01",X"01",X"01", - X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"10",X"11",X"12",X"13",X"10",X"1D",X"0D",X"0E",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"06",X"06", - X"1E",X"03",X"1F",X"05",X"1C",X"04",X"1D",X"06",X"1E",X"03",X"03",X"03",X"03",X"03",X"1F",X"1C", - X"1D",X"1E",X"03",X"03",X"03",X"03",X"03",X"1F",X"05",X"1C",X"04",X"1D",X"06",X"1E",X"03",X"1F", - X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"1C",X"04",X"04",X"11",X"12",X"13", - X"00",X"FF",X"FF",X"FF",X"0B",X"1E",X"19",X"06",X"06",X"06",X"06",X"06",X"06",X"1E",X"1F",X"1C", - X"1D",X"06",X"06",X"06",X"06",X"06",X"1E",X"03",X"1F",X"05",X"1C",X"04",X"1D",X"06",X"06",X"1A", - X"04",X"1B",X"05",X"18",X"19",X"06",X"1A",X"04",X"1B",X"05",X"05",X"1C",X"04",X"1D",X"06",X"1E", - X"03",X"1F",X"05",X"05",X"05",X"05",X"05",X"1C",X"1D",X"1E",X"1F",X"05",X"05",X"05",X"05",X"05", - X"05",X"05",X"18",X"1F",X"00",X"FF",X"FF",X"FF",X"10",X"04",X"04",X"1D",X"0D",X"0E",X"0B",X"0C", - X"0D",X"0E",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"05",X"05",X"05",X"05",X"05",X"1C", - X"04",X"04",X"1D",X"06",X"06",X"1E",X"03",X"03",X"1F",X"05",X"05",X"05",X"1C",X"11",X"12",X"13", - X"00",X"FF",X"FF",X"FF",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"1A",X"1B", - X"05",X"18",X"19",X"06",X"0D",X"0E",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"05",X"05", - X"1C",X"1B",X"05",X"05",X"1C",X"04",X"1B",X"05",X"05",X"1C",X"04",X"1B",X"00",X"FF",X"FF",X"FF", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"09",X"09",X"09",X"09",X"0A",X"0A",X"09",X"09",X"0A",X"09", - X"16",X"17",X"14",X"07",X"07",X"07",X"1C",X"04",X"1D",X"06",X"1E",X"03",X"1F",X"05",X"1C",X"08", - X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"05",X"05",X"05",X"05",X"00",X"FF",X"FF",X"FF",X"FF", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"0A",X"0A",X"0A",X"0A",X"09",X"09",X"0A",X"0A",X"09",X"0A", - X"12",X"13",X"10",X"08",X"08",X"08",X"18",X"07",X"07",X"07",X"07",X"05",X"1C",X"04",X"1D",X"06", - X"1E",X"03",X"1F",X"07",X"07",X"07",X"07",X"05",X"05",X"05",X"05",X"00",X"FF",X"FF",X"FF",X"FF", - X"1C",X"04",X"04",X"04",X"1D",X"06",X"0D",X"0E",X"0B",X"0C",X"06",X"06",X"1E",X"15",X"16",X"17", - X"14",X"19",X"06",X"1A",X"04",X"1D",X"06",X"1E",X"03",X"19",X"06",X"1A",X"04",X"1D",X"1E",X"03", - X"1F",X"1C",X"04",X"1B",X"05",X"18",X"03",X"1F",X"05",X"1C",X"04",X"1B",X"05",X"18",X"03",X"15", - X"16",X"17",X"14",X"1F",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"1C",X"04",X"1D",X"1A",X"1B", - X"00",X"FF",X"FF",X"FF",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"0D",X"0E", - X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"05",X"05",X"18",X"03",X"19",X"1A",X"04",X"1B", - X"05",X"18",X"03",X"1F",X"05",X"18",X"03",X"1F",X"05",X"05",X"18",X"1F",X"00",X"FF",X"FF",X"FF", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"06",X"06",X"09",X"09",X"09",X"0A",X"09",X"09",X"0A",X"09", - X"09",X"09",X"06",X"1A",X"04",X"11",X"12",X"13",X"10",X"08",X"08",X"08",X"07",X"07",X"07",X"08", - X"08",X"08",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"00",X"FF",X"FF", - X"1C",X"11",X"12",X"13",X"10",X"04",X"1D",X"0D",X"0E",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"1E", - X"1F",X"05",X"18",X"19",X"0D",X"0E",X"0B",X"0C",X"1E",X"1F",X"05",X"05",X"05",X"05",X"05",X"18", - X"19",X"0D",X"0E",X"0B",X"0C",X"06",X"1E",X"1F",X"05",X"05",X"05",X"05",X"18",X"19",X"06",X"1E", - X"1F",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"1C",X"04",X"04",X"1D",X"1A",X"04",X"1B", - X"00",X"FF",X"FF",X"FF",X"18",X"03",X"03",X"19",X"06",X"06",X"06",X"06",X"06",X"06",X"06",X"06", - X"06",X"06",X"06",X"06",X"1A",X"04",X"1B",X"05",X"1C",X"04",X"1D",X"06",X"1E",X"03",X"03",X"19", - X"06",X"1A",X"04",X"04",X"04",X"1B",X"05",X"18",X"03",X"03",X"1F",X"05",X"1C",X"04",X"1D",X"06", - X"1A",X"04",X"1B",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"18", - X"03",X"19",X"1E",X"1F",X"00",X"FF",X"FF",X"FF",X"0B",X"0C",X"1A",X"1D",X"1E",X"03",X"19",X"06", - X"1A",X"04",X"04",X"1D",X"06",X"1E",X"03",X"03",X"03",X"19",X"06",X"06",X"1A",X"04",X"04",X"04", - X"04",X"1D",X"06",X"06",X"1E",X"03",X"03",X"03",X"03",X"03",X"03",X"1F",X"05",X"05",X"1C",X"04", - X"04",X"04",X"04",X"1B",X"05",X"05",X"18",X"03",X"03",X"03",X"1F",X"05",X"1C",X"04",X"04",X"1B", - X"05",X"18",X"03",X"1F",X"1C",X"1B",X"05",X"05",X"00",X"FF",X"18",X"03",X"19",X"06",X"06",X"06", - X"06",X"06",X"06",X"1A",X"1D",X"1E",X"19",X"1A",X"1D",X"06",X"1E",X"19",X"06",X"1E",X"15",X"16", - X"17",X"14",X"07",X"07",X"07",X"08",X"08",X"08",X"08",X"05",X"05",X"18",X"03",X"03",X"19",X"06", - X"06",X"1A",X"04",X"04",X"1B",X"08",X"08",X"08",X"08",X"05",X"05",X"05",X"05",X"18",X"1F",X"00", - X"0B",X"0C",X"0A",X"0A",X"09",X"09",X"09",X"0A",X"0A",X"09",X"09",X"09",X"0A",X"09",X"09",X"16", - X"17",X"14",X"07",X"07",X"07",X"08",X"08",X"08",X"08",X"07",X"07",X"08",X"08",X"08",X"08",X"07", - X"08",X"11",X"12",X"13",X"00",X"FF",X"FF",X"FF",X"0B",X"0C",X"09",X"09",X"0A",X"09",X"09",X"0A", - X"0A",X"0A",X"0A",X"09",X"0A",X"0A",X"0A",X"12",X"13",X"10",X"04",X"04",X"04",X"1B",X"18",X"03", - X"03",X"07",X"07",X"08",X"08",X"07",X"07",X"08",X"08",X"07",X"07",X"07",X"07",X"07",X"00",X"FF", - X"FF",X"FF",X"FF",X"FF",X"1C",X"11",X"12",X"13",X"10",X"1D",X"0D",X"0E",X"0B",X"0C",X"09",X"0A", - X"09",X"09",X"0A",X"09",X"09",X"09",X"06",X"1A",X"04",X"1B",X"05",X"18",X"03",X"19",X"09",X"09", - X"0D",X"0E",X"0B",X"0C",X"0D",X"0E",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02", - X"02",X"02",X"08",X"07",X"07",X"08",X"07",X"07",X"08",X"08",X"07",X"07",X"07",X"07",X"07",X"05", - X"05",X"05",X"05",X"05",X"05",X"1C",X"11",X"12",X"13",X"00",X"FF",X"FF",X"0B",X"0C",X"0D",X"0E", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"1A",X"1D",X"06",X"1E",X"19",X"06",X"06",X"1A",X"04",X"1B", - X"1C",X"04",X"1D",X"1A",X"04",X"1B",X"1C",X"04",X"1D",X"1A",X"04",X"1B",X"05",X"18",X"07",X"07", - X"07",X"08",X"08",X"07",X"07",X"07",X"07",X"08",X"08",X"07",X"07",X"07",X"07",X"00",X"FF",X"FF", - X"14",X"03",X"19",X"0D",X"0E",X"0B",X"0C",X"0A",X"0A",X"0A",X"09",X"0A",X"0A",X"0A",X"09",X"0A", - X"0A",X"0A",X"06",X"1E",X"15",X"16",X"17",X"14",X"03",X"1F",X"05",X"05",X"08",X"07",X"07",X"07", - X"08",X"07",X"07",X"07",X"08",X"08",X"05",X"05",X"05",X"05",X"05",X"00",X"FF",X"FF",X"FF",X"FF", - X"30",X"40",X"31",X"41",X"32",X"42",X"33",X"43",X"34",X"44",X"35",X"45",X"36",X"46",X"37",X"47", - X"38",X"48",X"39",X"49",X"3A",X"4A",X"3B",X"4B",X"3C",X"4C",X"3D",X"4D",X"3E",X"4E",X"3F",X"4F", - X"60",X"61",X"62",X"63",X"64",X"65",X"66",X"67",X"69",X"00",X"69",X"00",X"7A",X"7B",X"7A",X"7B", - X"6B",X"00",X"6B",X"00",X"8C",X"8D",X"8C",X"8D",X"68",X"00",X"68",X"00",X"8A",X"9A",X"8A",X"9A", - X"6A",X"00",X"6A",X"00",X"8B",X"9B",X"8B",X"9B",X"68",X"00",X"6B",X"00",X"6A",X"00",X"69",X"00", - X"76",X"77",X"74",X"75",X"72",X"73",X"70",X"71",X"68",X"00",X"86",X"96",X"69",X"00",X"87",X"97", - X"6A",X"00",X"88",X"98",X"6B",X"00",X"89",X"99",X"68",X"00",X"00",X"00",X"A2",X"B2",X"A3",X"B3", - X"69",X"00",X"00",X"00",X"A4",X"B4",X"A5",X"B5",X"6A",X"00",X"00",X"00",X"A6",X"B6",X"A7",X"B7", - X"6B",X"00",X"00",X"00",X"A8",X"B8",X"A9",X"B9",X"FF",X"FF",X"FF",X"FF",X"8A",X"9A",X"00",X"00", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"8B",X"9B",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"8E",X"9E",X"8F",X"9F",X"A0",X"B0",X"A1",X"B1", - X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"9C",X"00",X"00",X"00",X"84",X"94",X"85",X"95",X"82",X"92",X"83",X"93",X"80",X"90",X"81",X"91", - X"9D",X"00",X"00",X"00",X"AE",X"BE",X"AF",X"BF",X"AC",X"BC",X"AD",X"00",X"AA",X"BA",X"AB",X"BB", - X"47",X"3A",X"00",X"78",X"E6",X"10",X"C8",X"EB",X"7A",X"FE",X"18",X"C0",X"7B",X"FE",X"95",X"36", - X"22",X"C8",X"FE",X"9A",X"36",X"13",X"C8",X"FE",X"B5",X"36",X"24",X"C8",X"70",X"C9",X"FF",X"FF", - X"08",X"6C",X"09",X"60",X"08",X"6C",X"09",X"60",X"08",X"6C",X"09",X"60",X"08",X"6C",X"09",X"60", - X"08",X"6C",X"09",X"60",X"08",X"6C",X"09",X"60",X"08",X"6C",X"09",X"60",X"09",X"60",X"09",X"60", - X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00", - X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00",X"10",X"00", - X"50",X"20",X"70",X"20",X"60",X"28",X"60",X"38",X"50",X"40",X"70",X"40",X"40",X"38",X"80",X"38", - X"30",X"30",X"90",X"30",X"20",X"38",X"A0",X"38",X"18",X"48",X"A8",X"48",X"60",X"48",X"60",X"58", - X"60",X"48",X"60",X"58",X"48",X"58",X"78",X"58",X"38",X"50",X"88",X"50",X"28",X"48",X"98",X"48", - X"18",X"40",X"A8",X"40",X"18",X"30",X"A8",X"30",X"28",X"28",X"98",X"28",X"38",X"20",X"88",X"20", - X"60",X"20",X"50",X"20",X"70",X"20",X"40",X"28",X"80",X"28",X"30",X"30",X"90",X"30",X"20",X"38", - X"A0",X"38",X"60",X"58",X"50",X"58",X"70",X"58",X"40",X"58",X"80",X"58",X"30",X"58",X"90",X"58", - X"60",X"20",X"50",X"28",X"70",X"28",X"40",X"30",X"80",X"30",X"30",X"38",X"90",X"38",X"20",X"40", - X"A0",X"40",X"60",X"58",X"50",X"58",X"70",X"58",X"40",X"50",X"80",X"50",X"30",X"48",X"90",X"48", - X"60",X"58",X"50",X"50",X"70",X"50",X"60",X"48",X"40",X"48",X"80",X"48",X"50",X"40",X"70",X"40", - X"40",X"38",X"80",X"38",X"30",X"30",X"90",X"30",X"20",X"28",X"A0",X"28",X"10",X"20",X"B0",X"20", - X"60",X"20",X"50",X"28",X"70",X"28",X"40",X"30",X"80",X"30",X"30",X"38",X"90",X"38",X"20",X"40", - X"A0",X"40",X"60",X"20",X"50",X"28",X"70",X"28",X"40",X"30",X"80",X"30",X"30",X"38",X"90",X"38", - X"10",X"14",X"18",X"1C",X"00",X"04",X"08",X"0C",X"20",X"22",X"24",X"26",X"28",X"2A",X"2C",X"2E", - X"30",X"32",X"34",X"36",X"38",X"3A",X"3C",X"3E",X"40",X"42",X"44",X"46",X"5C",X"5C",X"5E",X"5E", - X"50",X"51",X"52",X"53",X"54",X"55",X"56",X"57",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"48",X"48",X"50",X"50",X"4A",X"4A",X"52",X"52",X"4C",X"4C",X"54",X"54",X"4E",X"4E",X"56",X"56", - X"48",X"48",X"56",X"56",X"4E",X"4E",X"54",X"54",X"4C",X"4C",X"52",X"52",X"4A",X"4A",X"50",X"50", - X"68",X"68",X"6C",X"6C",X"70",X"70",X"74",X"74",X"78",X"78",X"7C",X"7C",X"80",X"80",X"84",X"84", - X"68",X"68",X"84",X"84",X"80",X"80",X"7C",X"7C",X"78",X"78",X"74",X"74",X"70",X"70",X"6C",X"6C", - X"58",X"58",X"5A",X"5A",X"5C",X"5C",X"5E",X"5E",X"60",X"60",X"62",X"62",X"64",X"64",X"66",X"66", - X"78",X"FF",X"A0",X"FF",X"FF",X"A8",X"FF",X"AC",X"C0",X"FF",X"C8",X"FF",X"FF",X"C4",X"FF",X"CC", - X"D0",X"FF",X"D8",X"FF",X"FF",X"D4",X"FF",X"DC",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"01",X"02",X"08",X"01",X"02",X"08",X"01",X"02",X"0C",X"01",X"02",X"10",X"03", - X"04",X"14",X"03",X"04",X"18",X"04",X"01",X"88",X"04",X"01",X"90",X"04",X"01",X"80",X"04",X"01", - X"80",X"03",X"04",X"70",X"03",X"04",X"74",X"03",X"04",X"78",X"03",X"04",X"7C",X"FF",X"FF",X"FF", - X"01",X"02",X"30",X"01",X"02",X"34",X"01",X"02",X"38",X"01",X"02",X"3C",X"01",X"02",X"40",X"01", - X"02",X"44",X"01",X"02",X"48",X"01",X"02",X"4C",X"04",X"04",X"50",X"04",X"04",X"54",X"04",X"04", - X"58",X"04",X"04",X"5C",X"04",X"04",X"60",X"04",X"04",X"64",X"04",X"04",X"68",X"04",X"04",X"6C", - X"FF",X"FF",X"01",X"00",X"FF",X"00",X"04",X"00",X"FC",X"00",X"00",X"FC",X"00",X"04",X"04",X"FE", - X"FC",X"FE",X"04",X"02",X"FC",X"02",X"00",X"04",X"00",X"04",X"00",X"04",X"00",X"04",X"FF",X"FF", - X"FC",X"00",X"FC",X"00",X"FC",X"00",X"FC",X"00",X"04",X"00",X"04",X"00",X"04",X"00",X"04",X"00", - X"04",X"FC",X"04",X"04",X"FC",X"04",X"FC",X"FC",X"FC",X"FC",X"FC",X"04",X"04",X"04",X"04",X"FC", - X"08",X"00",X"00",X"FF",X"01",X"00",X"F8",X"FF",X"08",X"01",X"02",X"FF",X"04",X"00",X"FA",X"FF", - X"08",X"01",X"04",X"FF",X"08",X"00",X"FC",X"FF",X"08",X"05",X"06",X"FF",X"08",X"00",X"FE",X"FF", - X"10",X"10",X"88",X"88",X"10",X"10",X"10",X"10",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"EC",X"FC",X"FD",X"F4",X"ED",X"30",X"40",X"F5",X"EE",X"31",X"41",X"F6",X"EF",X"FF",X"FE",X"F7", - X"E8",X"F8",X"F9",X"F0",X"E9",X"30",X"40",X"F1",X"EA",X"31",X"41",X"F2",X"EB",X"FB",X"FA",X"F3", - X"E8",X"F8",X"F9",X"F0",X"E9",X"E4",X"E6",X"F1",X"EA",X"E5",X"E7",X"F2",X"EB",X"FB",X"FA",X"F3", - X"00",X"00",X"00",X"00",X"00",X"E4",X"E6",X"00",X"00",X"E5",X"E7",X"00",X"00",X"00",X"00",X"00", - X"F0",X"CA",X"C4",X"BE",X"B8",X"BE",X"B8",X"BE",X"C8",X"D8",X"C9",X"D9",X"CA",X"DA",X"CB",X"DB", - X"CC",X"DC",X"CD",X"DD",X"C0",X"C1",X"C1",X"C2",X"00",X"C0",X"00",X"00",X"00",X"C3",X"00",X"00", - X"C4",X"D4",X"C5",X"D5",X"C3",X"C3",X"C3",X"C3",X"C6",X"D6",X"C7",X"D7",X"FF",X"FF",X"FF",X"FF", - X"3A",X"00",X"78",X"E6",X"10",X"3A",X"8F",X"43",X"C8",X"0F",X"E6",X"0F",X"C9",X"FF",X"FF",X"FF", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"20",X"FF",X"FF",X"FF",X"FF",X"00",X"13",X"03",X"0F",X"12",X"05",X"21",X"00",X"00",X"08", - X"09",X"2B",X"13",X"03",X"0F",X"12",X"05",X"00",X"00",X"13",X"03",X"0F",X"12",X"05",X"22",X"00", - X"43",X"21",X"FF",X"FF",X"FF",X"FF",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"00",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"00", - X"43",X"22",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"7F",X"20",X"00",X"00",X"00",X"00",X"00", - X"03",X"0F",X"09",X"0E",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"7F",X"20",X"00",X"00",X"00", - X"43",X"25",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"09",X"0E",X"13", - X"05",X"12",X"14",X"00",X"00",X"03",X"0F",X"09",X"0E",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"27",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"1F",X"00",X"21",X"10",X"0C",X"01",X"19", - X"05",X"12",X"00",X"00",X"00",X"21",X"03",X"0F",X"09",X"0E",X"00",X"00",X"1F",X"00",X"00",X"00", - X"43",X"29",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"1F",X"00",X"22",X"10",X"0C",X"01",X"19", - X"05",X"12",X"13",X"00",X"00",X"22",X"03",X"0F",X"09",X"0E",X"13",X"00",X"1F",X"00",X"00",X"00", - X"43",X"2E",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"13",X"03",X"0F",X"12",X"05",X"00",X"01", - X"16",X"05",X"12",X"01",X"07",X"05",X"00",X"14",X"01",X"02",X"0C",X"05",X"00",X"00",X"00",X"00", - X"43",X"30",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"20", - X"00",X"24",X"20",X"00",X"28",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"33",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"20", - X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"36",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"25",X"20", - X"00",X"21",X"20",X"20",X"00",X"2F",X"1B",X"21",X"20",X"20",X"2B",X"28",X"20",X"20",X"1C",X"00", - X"43",X"39",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"21",X"20", - X"20",X"20",X"2B",X"29",X"20",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"3C",X"00",X"00",X"32",X"21",X"10",X"08",X"0F",X"05",X"0E",X"09",X"18",X"7E",X"00",X"03", - X"0F",X"10",X"19",X"12",X"09",X"07",X"08",X"14",X"00",X"21",X"29",X"28",X"20",X"00",X"00",X"00", - X"43",X"3D",X"02",X"05",X"21",X"28",X"00",X"01",X"0D",X"13",X"14",X"01",X"12",X"00",X"05",X"0C", - X"05",X"03",X"14",X"12",X"0F",X"0E",X"09",X"03",X"13",X"00",X"03",X"0F",X"12",X"10",X"2A",X"00", - X"43",X"3E",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"10",X"08",X"0F",X"05",X"0E",X"09",X"18",X"00", - X"01",X"1A",X"2A",X"00",X"15",X"2A",X"13",X"2A",X"01",X"2A",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"28",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"10",X"15",X"13",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"0F",X"0E",X"0C",X"19",X"00",X"21", - X"10",X"0C",X"01",X"19",X"05",X"12",X"00",X"02",X"15",X"14",X"14",X"0F",X"0E",X"00",X"00",X"00", - X"43",X"28",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"01", - X"0D",X"05",X"00",X"00",X"0F",X"16",X"05",X"12",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"28",X"00",X"FF",X"FF",X"FF",X"64",X"65",X"64",X"65",X"64",X"65",X"60",X"61",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"79", - X"43",X"29",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"00",X"00",X"00",X"00",X"64",X"65",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7C",X"7D", - X"43",X"2A",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"64",X"65",X"64",X"65",X"60",X"61",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2B",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"00",X"68",X"00",X"68",X"00",X"68",X"68",X"68", - X"00",X"68",X"64",X"65",X"00",X"62",X"63",X"00",X"68",X"00",X"68",X"00",X"68",X"00",X"00",X"68", - X"43",X"2D",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"00",X"68",X"00",X"68",X"00",X"68",X"00",X"68", - X"00",X"68",X"00",X"00",X"00",X"68",X"9D",X"00",X"68",X"00",X"68",X"00",X"76",X"77",X"70",X"71", - X"43",X"2E",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"00",X"68",X"68",X"68",X"00",X"68",X"00",X"68", - X"00",X"68",X"62",X"63",X"00",X"68",X"76",X"77",X"68",X"00",X"68",X"00",X"00",X"64",X"65",X"00", - X"43",X"2F",X"00",X"00",X"00",X"00",X"64",X"65",X"00",X"68",X"00",X"68",X"00",X"68",X"00",X"68", - X"00",X"68",X"00",X"00",X"00",X"68",X"00",X"9D",X"68",X"00",X"68",X"00",X"74",X"75",X"72",X"73", - X"43",X"30",X"FF",X"FF",X"FF",X"FF",X"64",X"65",X"00",X"68",X"00",X"68",X"00",X"68",X"68",X"68", - X"00",X"68",X"64",X"65",X"00",X"68",X"00",X"66",X"67",X"00",X"68",X"00",X"68",X"00",X"00",X"68", - X"6C",X"6D",X"6E",X"6F",X"FF",X"FF",X"FF",X"FF",X"6C",X"6D",X"6E",X"6F",X"64",X"65",X"66",X"67", - X"63",X"FF",X"63",X"61",X"67",X"FF",X"67",X"65",X"6B",X"FF",X"6B",X"69",X"6F",X"FF",X"6F",X"6D", - X"80",X"83",X"83",X"85",X"81",X"8C",X"8C",X"86",X"81",X"8C",X"8C",X"86",X"82",X"84",X"84",X"87", - X"00",X"89",X"89",X"00",X"88",X"8D",X"8D",X"8B",X"88",X"8D",X"8D",X"8B",X"00",X"8A",X"8A",X"00", - X"00",X"00",X"00",X"00",X"00",X"80",X"85",X"00",X"00",X"82",X"87",X"00",X"00",X"00",X"00",X"00", - X"1B",X"80",X"1B",X"70",X"1B",X"60",X"1B",X"70",X"17",X"F0",X"17",X"F0",X"17",X"F0",X"17",X"F0", - X"43",X"2C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"21",X"00",X"0F",X"12",X"00",X"22",X"10", - X"0C",X"01",X"19",X"05",X"12",X"13",X"00",X"02",X"15",X"14",X"14",X"0F",X"0E",X"00",X"00",X"00", - X"41",X"54",X"76",X"7E",X"42",X"55",X"77",X"7F",X"41",X"56",X"74",X"7C",X"42",X"57",X"75",X"7D", - X"44",X"51",X"72",X"7A",X"45",X"52",X"73",X"7B",X"46",X"51",X"70",X"78",X"47",X"52",X"71",X"79", - X"41",X"51",X"70",X"78",X"42",X"52",X"71",X"79",X"41",X"51",X"72",X"7A",X"42",X"52",X"73",X"7B", - X"41",X"51",X"74",X"7C",X"42",X"52",X"75",X"7D",X"41",X"51",X"76",X"7E",X"42",X"52",X"77",X"7F", - X"00",X"01",X"00",X"06",X"00",X"02",X"03",X"04",X"00",X"01",X"00",X"08",X"00",X"02",X"03",X"04", - X"00",X"00",X"07",X"00",X"01",X"02",X"00",X"09",X"00",X"03",X"04",X"00",X"00",X"03",X"04",X"00", - X"00",X"01",X"00",X"02",X"00",X"03",X"0A",X"00",X"04",X"00",X"00",X"01",X"02",X"00",X"06",X"00", - X"03",X"04",X"00",X"00",X"01",X"00",X"02",X"00",X"03",X"00",X"04",X"00",X"03",X"05",X"00",X"00", - X"00",X"00",X"07",X"00",X"01",X"00",X"02",X"00",X"00",X"05",X"00",X"00",X"03",X"00",X"04",X"01", - X"02",X"00",X"03",X"00",X"08",X"04",X"00",X"01",X"02",X"06",X"00",X"03",X"00",X"04",X"00",X"02", - X"01",X"02",X"03",X"00",X"05",X"00",X"00",X"04",X"00",X"01",X"02",X"00",X"00",X"03",X"04",X"0B", - X"00",X"01",X"00",X"02",X"00",X"03",X"00",X"00",X"04",X"00",X"00",X"09",X"00",X"00",X"02",X"00", - X"07",X"00",X"00",X"01",X"00",X"00",X"02",X"00",X"00",X"03",X"00",X"08",X"04",X"00",X"01",X"00", - X"00",X"06",X"00",X"01",X"00",X"02",X"00",X"01",X"03",X"04",X"01",X"03",X"01",X"02",X"03",X"04", - X"00",X"05",X"00",X"01",X"02",X"00",X"09",X"00",X"03",X"04",X"00",X"01",X"00",X"01",X"02",X"03", - X"04",X"00",X"02",X"00",X"00",X"01",X"02",X"00",X"03",X"04",X"00",X"06",X"00",X"00",X"01",X"00", - X"00",X"01",X"02",X"00",X"05",X"00",X"00",X"03",X"00",X"04",X"00",X"07",X"00",X"01",X"00",X"02", - X"00",X"00",X"03",X"00",X"04",X"00",X"04",X"00",X"0A",X"00",X"01",X"00",X"02",X"00",X"03",X"00", - X"01",X"00",X"07",X"00",X"02",X"00",X"03",X"04",X"00",X"05",X"00",X"01",X"00",X"02",X"00",X"00", - X"08",X"03",X"04",X"00",X"01",X"00",X"02",X"00",X"03",X"00",X"04",X"00",X"00",X"06",X"00",X"03", - X"0C",X"0D",X"0C",X"0F",X"07",X"07",X"01",X"00",X"00",X"4C",X"4D",X"4E",X"4F",X"4F",X"4E",X"4D", - X"4C",X"00",X"00",X"1F",X"0E",X"06",X"0D",X"01",X"0E",X"05",X"08",X"0C",X"0E",X"0C",X"0A",X"00", - X"00",X"4D",X"4F",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"4F",X"4D",X"00",X"00",X"06", - X"0B",X"0D",X"08",X"0E",X"03",X"02",X"00",X"01",X"00",X"4C",X"4F",X"5E",X"5E",X"5E",X"5E",X"5E", - X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"4F",X"4C",X"00",X"09",X"07",X"0A",X"03",X"04",X"00", - X"0A",X"00",X"4D",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E", - X"5E",X"5E",X"5E",X"4D",X"00",X"00",X"0E",X"0F",X"08",X"08",X"00",X"5C",X"60",X"6A",X"60",X"6A", - X"60",X"6A",X"60",X"6A",X"60",X"6A",X"60",X"6A",X"60",X"6A",X"60",X"6A",X"60",X"6A",X"5D",X"00", - X"01",X"02",X"02",X"06",X"01",X"00",X"00",X"00",X"58",X"59",X"5A",X"5B",X"5B",X"5B",X"7E",X"7F", - X"5B",X"5B",X"5B",X"4A",X"49",X"48",X"00",X"00",X"00",X"03",X"0E",X"0B",X"0D",X"05",X"04",X"05", - X"0A",X"08",X"00",X"00",X"58",X"59",X"5A",X"4B",X"76",X"77",X"4B",X"4A",X"49",X"48",X"00",X"00", - X"01",X"03",X"0F",X"02",X"03",X"00",X"00",X"03",X"03",X"07",X"02",X"0A",X"03",X"07",X"00",X"00", - X"58",X"50",X"51",X"52",X"53",X"48",X"00",X"00",X"0B",X"01",X"02",X"03",X"0F",X"0E",X"0C",X"02", - X"05",X"0C",X"06",X"00",X"04",X"06",X"07",X"0E",X"0F",X"09",X"00",X"40",X"41",X"42",X"43",X"00", - X"07",X"03",X"0A",X"08",X"0D",X"00",X"09",X"0B",X"0C",X"0A",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"3A",X"1D",X"43",X"D6",X"01",X"C8",X"32",X"8F",X"43",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"30",X"21",X"31",X"22",X"32",X"23",X"33",X"24",X"34",X"25",X"35",X"26",X"36",X"27",X"37", - X"28",X"38",X"29",X"39",X"2A",X"3A",X"2B",X"3B",X"2C",X"3C",X"2D",X"3D",X"2E",X"3E",X"2F",X"3F", - X"49",X"48",X"4A",X"4B",X"4A",X"49",X"4A",X"49",X"48",X"4A",X"48",X"49",X"4B",X"48",X"4A",X"48", - X"4A",X"49",X"4B",X"49",X"4B",X"4A",X"49",X"48",X"49",X"49",X"4A",X"4A",X"48",X"49",X"4A",X"48", - X"A0",X"60",X"40",X"00",X"E0",X"C0",X"C0",X"60",X"80",X"20",X"60",X"40",X"20",X"40",X"00",X"80", - X"40",X"00",X"20",X"E0",X"00",X"60",X"00",X"A0",X"E0",X"20",X"80",X"00",X"C0",X"80",X"A0",X"E0", - X"00",X"04",X"08",X"0C",X"10",X"14",X"18",X"1C",X"00",X"08",X"10",X"18",X"04",X"0C",X"14",X"1C", - X"00",X"0C",X"18",X"04",X"04",X"1C",X"08",X"14",X"00",X"10",X"04",X"14",X"08",X"18",X"0C",X"1C", - X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1C",X"1D",X"1E",X"1F", - X"10",X"12",X"14",X"16",X"18",X"1A",X"1C",X"1E",X"11",X"13",X"15",X"17",X"19",X"1B",X"1D",X"1F", - X"4A",X"4B",X"49",X"4A",X"48",X"4A",X"48",X"49",X"49",X"4A",X"49",X"4B",X"48",X"4B",X"4A",X"4A", - X"48",X"49",X"48",X"4A",X"48",X"48",X"49",X"4A",X"49",X"49",X"4A",X"48",X"4A",X"49",X"4B",X"48", - X"00",X"20",X"60",X"40",X"E0",X"80",X"20",X"60",X"40",X"A0",X"00",X"00",X"40",X"20",X"C0",X"20", - X"A0",X"80",X"E0",X"40",X"60",X"C0",X"20",X"A0",X"E0",X"40",X"60",X"C0",X"20",X"40",X"20",X"80", - X"11",X"3D",X"43",X"01",X"1A",X"00",X"1A",X"80",X"47",X"CD",X"17",X"02",X"0D",X"C2",X"E6",X"1E", - X"1A",X"80",X"C6",X"27",X"21",X"89",X"43",X"86",X"77",X"00",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"03",X"00",X"00",X"00", - X"00",X"04",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"05",X"00",X"02",X"00",X"03",X"00", - X"00",X"00",X"04",X"00",X"07",X"00",X"00",X"00",X"06",X"00",X"01",X"00",X"02",X"0C",X"00",X"03", - X"04",X"00",X"00",X"01",X"00",X"08",X"00",X"00",X"02",X"00",X"0C",X"03",X"04",X"0E",X"00",X"00", - X"00",X"01",X"02",X"00",X"0D",X"03",X"04",X"0F",X"01",X"0C",X"07",X"0A",X"02",X"0D",X"03",X"08", - X"06",X"0C",X"04",X"09",X"05",X"0F",X"01",X"02",X"0D",X"03",X"0C",X"04",X"0D",X"05",X"0F",X"0C", - X"01",X"02",X"0E",X"0C",X"03",X"0F",X"0D",X"05",X"0E",X"0D",X"0C",X"0F",X"0D",X"04",X"0C",X"01", - X"0E",X"05",X"0F",X"0D",X"07",X"0C",X"06",X"0E",X"0D",X"0F",X"09",X"0C",X"0F",X"0D",X"0E",X"0D", - X"02",X"0D",X"0C",X"0F",X"05",X"0E",X"0D",X"0C",X"0F",X"06",X"0E",X"0F",X"0C",X"0D",X"0F",X"0C", - X"06",X"0D",X"04",X"0B",X"0C",X"0F",X"05",X"0D",X"05",X"03",X"0E",X"07",X"0C",X"0D",X"04",X"05", - X"01",X"02",X"0E",X"03",X"0C",X"04",X"0F",X"05",X"08",X"0C",X"07",X"01",X"0D",X"04",X"0E",X"02", - X"0C",X"01",X"0F",X"03",X"05",X"0D",X"00",X"0E",X"00",X"09",X"0C",X"06",X"0D",X"00",X"01",X"02", - X"01",X"02",X"03",X"00",X"00",X"0D",X"00",X"0A",X"00",X"00",X"00",X"0E",X"00",X"05",X"00",X"08", - X"00",X"0C",X"00",X"00",X"03",X"00",X"00",X"07",X"00",X"00",X"00",X"04",X"00",X"00",X"06",X"00", - X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"03",X"00",X"00", - X"00",X"04",X"00",X"05",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"02",X"00", - X"CD",X"76",X"08",X"CD",X"F0",X"0D",X"CD",X"A0",X"24",X"21",X"5F",X"43",X"7E",X"E6",X"03",X"47", - X"34",X"3A",X"BA",X"43",X"A7",X"CA",X"BA",X"21",X"FE",X"05",X"D2",X"30",X"21",X"2D",X"78",X"A7", - X"C2",X"25",X"20",X"36",X"FF",X"7E",X"A7",X"CA",X"30",X"21",X"C3",X"46",X"21",X"FF",X"FF",X"FF", - X"E6",X"03",X"FE",X"01",X"11",X"50",X"1B",X"C3",X"AC",X"23",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"AF",X"43",X"3A",X"B9",X"43",X"4F",X"BE",X"C0",X"7E",X"2C",X"96",X"2D",X"77",X"2C",X"2C", - X"34",X"7E",X"21",X"80",X"1E",X"E6",X"1F",X"85",X"6F",X"46",X"C6",X"20",X"6F",X"56",X"C6",X"20", - X"6F",X"5E",X"79",X"0F",X"0F",X"0F",X"E6",X"1F",X"83",X"3C",X"5F",X"78",X"12",X"C9",X"C9",X"FF", - X"7B",X"D6",X"0A",X"C6",X"C0",X"4F",X"7A",X"CE",X"00",X"47",X"7E",X"11",X"00",X"28",X"21",X"00", - X"29",X"C3",X"85",X"20",X"FF",X"D6",X"20",X"07",X"07",X"00",X"E6",X"E0",X"6F",X"3E",X"E0",X"95", - X"6F",X"3E",X"3F",X"91",X"3E",X"43",X"98",X"D2",X"B0",X"20",X"23",X"23",X"7B",X"C6",X"10",X"5F", - X"79",X"D6",X"20",X"4F",X"78",X"DE",X"00",X"47",X"C3",X"91",X"20",X"FF",X"FF",X"FF",X"FF",X"FF", - X"C5",X"7E",X"E3",X"06",X"08",X"36",X"00",X"0F",X"D2",X"BF",X"20",X"EB",X"4E",X"EB",X"71",X"23", - X"13",X"05",X"C2",X"B5",X"20",X"E3",X"23",X"7D",X"0F",X"DA",X"B1",X"20",X"7D",X"E6",X"1F",X"CA", - X"E1",X"20",X"E3",X"7D",X"D6",X"30",X"6F",X"7C",X"DE",X"00",X"67",X"E3",X"FE",X"3F",X"C2",X"B1", - X"20",X"C1",X"C9",X"20",X"FF",X"FF",X"FF",X"FF",X"47",X"7A",X"C6",X"08",X"57",X"CD",X"1C",X"21", - X"0F",X"0F",X"0F",X"83",X"E6",X"1F",X"4F",X"7B",X"E6",X"E0",X"B1",X"5F",X"78",X"0F",X"0F",X"E6", - X"0E",X"C6",X"90",X"6F",X"26",X"1B",X"7E",X"2C",X"6E",X"67",X"01",X"04",X"04",X"C3",X"D6",X"0A", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"21",X"B9",X"43",X"7E", - X"FE",X"10",X"D8",X"FE",X"30",X"D0",X"3E",X"10",X"77",X"32",X"00",X"58",X"C9",X"FF",X"FF",X"FF", - X"78",X"A7",X"CA",X"50",X"21",X"FE",X"01",X"CA",X"60",X"21",X"FE",X"02",X"CA",X"70",X"21",X"C3", - X"80",X"21",X"90",X"A5",X"50",X"60",X"78",X"0F",X"D2",X"90",X"21",X"C3",X"A5",X"21",X"F0",X"F9", - X"CD",X"50",X"0A",X"CD",X"00",X"30",X"C3",X"00",X"0F",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"C4",X"24",X"CD",X"40",X"0C",X"CD",X"1C",X"0D",X"C3",X"C0",X"0F",X"FF",X"FF",X"FF",X"FF", - X"CD",X"70",X"0D",X"C3",X"60",X"25",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"C4",X"24",X"CD",X"40",X"0C",X"CD",X"6C",X"0A",X"C3",X"C0",X"0F",X"FF",X"FF",X"FF",X"FF", - X"CD",X"50",X"0A",X"CD",X"00",X"30",X"CD",X"00",X"0F",X"CD",X"60",X"25",X"C3",X"40",X"0C",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"CD",X"1C",X"0D",X"CD",X"70",X"0D",X"CD",X"6C",X"0A",X"CD",X"C0", - X"0F",X"C3",X"C4",X"24",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"78",X"0F",X"D2",X"04",X"22",X"CD", - X"40",X"0C",X"CD",X"C0",X"0F",X"CD",X"C4",X"24",X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"0B",X"DA", - X"04",X"22",X"3E",X"10",X"32",X"BA",X"43",X"C3",X"26",X"05",X"FF",X"FF",X"7E",X"00",X"47",X"21", - X"73",X"4B",X"E6",X"07",X"77",X"2D",X"36",X"EF",X"2D",X"36",X"49",X"2D",X"78",X"E6",X"F8",X"0F", - X"0F",X"0F",X"C6",X"3A",X"5F",X"16",X"23",X"1A",X"77",X"CD",X"C0",X"34",X"C3",X"E0",X"1E",X"FF", - X"FF",X"FF",X"FF",X"FF",X"21",X"B6",X"43",X"35",X"7E",X"FE",X"A0",X"D0",X"2E",X"A4",X"36",X"02", - X"2E",X"A6",X"36",X"00",X"2E",X"B8",X"34",X"7E",X"E6",X"0E",X"0F",X"C6",X"60",X"5F",X"16",X"17", - X"2C",X"2C",X"1A",X"A7",X"F2",X"2A",X"22",X"2C",X"E6",X"7F",X"77",X"C3",X"80",X"03",X"FF",X"FF", - X"21",X"9C",X"43",X"7E",X"34",X"00",X"0F",X"E6",X"3F",X"FE",X"0D",X"CA",X"92",X"22",X"06",X"1F", - X"DA",X"60",X"22",X"06",X"00",X"D6",X"0E",X"FE",X"0D",X"C2",X"60",X"22",X"21",X"B8",X"43",X"34", - X"2E",X"A4",X"36",X"02",X"C9",X"58",X"2E",X"A4",X"36",X"02",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"4F",X"0F",X"0F",X"0F",X"57",X"E6",X"1F",X"5F",X"7A",X"E6",X"E0",X"C6",X"B0",X"6F",X"7B",X"CE", - X"41",X"67",X"7D",X"91",X"6F",X"79",X"3C",X"4F",X"07",X"5F",X"51",X"70",X"23",X"70",X"23",X"15", - X"C2",X"7B",X"22",X"7D",X"91",X"91",X"D6",X"20",X"6F",X"7C",X"DE",X"00",X"67",X"1D",X"C2",X"7A", - X"22",X"C9",X"21",X"B8",X"43",X"7E",X"E6",X"08",X"CA",X"F0",X"22",X"21",X"00",X"1C",X"11",X"3F", - X"4B",X"06",X"47",X"7E",X"12",X"2C",X"1B",X"7E",X"12",X"2C",X"1B",X"78",X"BA",X"C2",X"A3",X"22", - X"C3",X"E0",X"22",X"FF",X"CD",X"7A",X"06",X"21",X"B4",X"43",X"35",X"7E",X"FE",X"28",X"C2",X"48", - X"08",X"2E",X"67",X"36",X"FF",X"C9",X"FF",X"FF",X"FF",X"FF",X"21",X"B4",X"43",X"7E",X"FE",X"C0", - X"C2",X"34",X"08",X"36",X"30",X"2E",X"67",X"36",X"FF",X"2E",X"BC",X"36",X"3F",X"C9",X"FF",X"FF", - X"3E",X"71",X"32",X"B9",X"43",X"32",X"00",X"58",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"A0",X"03",X"AF",X"C3",X"E2",X"22",X"FF",X"FF",X"FF",X"21",X"AA",X"4A",X"06",X"12",X"3A", - X"8A",X"48",X"4F",X"79",X"E6",X"03",X"07",X"07",X"57",X"4E",X"79",X"E6",X"0C",X"0F",X"0F",X"B2", - X"F6",X"60",X"77",X"7D",X"D6",X"20",X"6F",X"D2",X"1B",X"23",X"25",X"05",X"C2",X"03",X"23",X"C9", - X"FF",X"FF",X"21",X"A7",X"43",X"34",X"7E",X"E6",X"07",X"07",X"07",X"07",X"C6",X"C0",X"6F",X"26", - X"1B",X"11",X"A6",X"49",X"01",X"02",X"04",X"C3",X"D6",X"0A",X"01",X"02",X"03",X"04",X"05",X"06", - X"07",X"0A",X"07",X"0A",X"07",X"0A",X"07",X"0A",X"07",X"0A",X"09",X"08",X"04",X"03",X"02",X"01", - X"FF",X"1A",X"E6",X"08",X"C8",X"7E",X"2C",X"6E",X"C6",X"08",X"67",X"3A",X"B9",X"43",X"0F",X"0F", - X"0F",X"85",X"E6",X"1F",X"47",X"7D",X"E6",X"E0",X"B0",X"6F",X"7E",X"47",X"E6",X"FC",X"FE",X"4C", - X"CA",X"7B",X"23",X"E6",X"F0",X"FE",X"60",X"CA",X"98",X"23",X"C9",X"1A",X"E6",X"F7",X"12",X"3E", - X"FF",X"32",X"66",X"43",X"78",X"3D",X"77",X"FE",X"4B",X"C0",X"36",X"00",X"2D",X"7E",X"FE",X"5E", - X"C0",X"36",X"4F",X"C9",X"FF",X"FF",X"FF",X"FF",X"1A",X"E6",X"F7",X"12",X"1C",X"1C",X"1A",X"E6", - X"04",X"78",X"C2",X"30",X"20",X"E6",X"0C",X"FE",X"04",X"11",X"40",X"1B",X"CA",X"C0",X"23",X"78", - X"E6",X"0F",X"83",X"5F",X"1A",X"77",X"3E",X"FF",X"32",X"66",X"43",X"C9",X"FF",X"FF",X"FF",X"FF", - X"2D",X"7E",X"E6",X"F0",X"FE",X"70",X"C0",X"21",X"A4",X"43",X"36",X"06",X"2C",X"36",X"60",X"2E", - X"63",X"36",X"FF",X"C9",X"FF",X"FF",X"21",X"B8",X"43",X"7E",X"E6",X"0F",X"FE",X"01",X"CA",X"98", - X"3A",X"FE",X"03",X"CA",X"98",X"3A",X"FE",X"05",X"CA",X"D0",X"3A",X"FE",X"07",X"CA",X"D0",X"3A", - X"FE",X"09",X"D8",X"FE",X"0B",X"DA",X"02",X"3B",X"CD",X"02",X"3B",X"C3",X"98",X"3A",X"FF",X"FF", - X"CD",X"2C",X"24",X"CA",X"52",X"25",X"FE",X"20",X"DA",X"6A",X"24",X"CA",X"20",X"25",X"47",X"0F", - X"00",X"78",X"D2",X"E8",X"20",X"7B",X"D6",X"05",X"C6",X"C0",X"4F",X"7A",X"CE",X"00",X"47",X"7E", - X"11",X"00",X"2A",X"21",X"00",X"2B",X"C3",X"85",X"20",X"FF",X"FF",X"FF",X"21",X"B9",X"43",X"7E", - X"E6",X"F8",X"77",X"32",X"00",X"58",X"11",X"C6",X"41",X"0F",X"0F",X"0F",X"47",X"7B",X"90",X"E6", - X"1F",X"47",X"7B",X"E6",X"E0",X"B0",X"5F",X"2E",X"A5",X"35",X"7E",X"C9",X"21",X"A5",X"43",X"35", - X"7E",X"0F",X"DA",X"F0",X"06",X"A7",X"C0",X"2D",X"36",X"02",X"2E",X"B8",X"7E",X"E6",X"F0",X"C6", - X"10",X"77",X"2E",X"BA",X"36",X"10",X"C3",X"80",X"03",X"FF",X"01",X"14",X"09",X"11",X"C6",X"4A", - X"21",X"00",X"1C",X"C3",X"D6",X"0A",X"78",X"81",X"CD",X"95",X"24",X"2E",X"D3",X"77",X"21",X"BB", - X"43",X"3E",X"08",X"96",X"07",X"2E",X"9A",X"86",X"07",X"47",X"2E",X"6F",X"7E",X"E6",X"1E",X"80", - X"32",X"D1",X"4B",X"C9",X"1F",X"80",X"0D",X"C8",X"80",X"0D",X"C8",X"80",X"0D",X"C8",X"87",X"C9", - X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"08",X"D8",X"11",X"C4",X"43",X"21",X"E6",X"43",X"CD",X"51", - X"23",X"3A",X"9B",X"43",X"E6",X"03",X"FE",X"03",X"C0",X"C3",X"F2",X"24",X"CD",X"51",X"23",X"C9", - X"FF",X"FF",X"FF",X"FF",X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"08",X"DA",X"F0",X"06",X"CD",X"E0", - X"24",X"21",X"AA",X"43",X"34",X"7E",X"E6",X"03",X"CA",X"FA",X"22",X"C3",X"22",X"23",X"24",X"BF", - X"3A",X"AA",X"43",X"E6",X"0F",X"C0",X"3A",X"B9",X"43",X"FE",X"A0",X"D8",X"C3",X"7A",X"06",X"FA", - X"22",X"C3",X"CD",X"AA",X"30",X"C6",X"60",X"00",X"47",X"21",X"9B",X"43",X"E6",X"0E",X"A6",X"C0", - X"3A",X"9E",X"43",X"B8",X"D0",X"3A",X"9F",X"43",X"B8",X"D8",X"78",X"D6",X"04",X"47",X"3A",X"B9", - X"43",X"2F",X"3C",X"E6",X"F8",X"C6",X"48",X"4F",X"E5",X"E5",X"C3",X"B7",X"25",X"FF",X"FF",X"FF", - X"D5",X"CD",X"80",X"03",X"D1",X"3A",X"B9",X"43",X"C6",X"60",X"0F",X"47",X"3A",X"B8",X"43",X"E6", - X"F0",X"80",X"06",X"90",X"DA",X"3D",X"25",X"FE",X"90",X"D2",X"3D",X"25",X"47",X"AF",X"78",X"27", - X"21",X"9D",X"43",X"77",X"2C",X"36",X"00",X"7B",X"D6",X"5E",X"5F",X"06",X"04",X"C3",X"C4",X"00", - X"32",X"80",X"2E",X"A4",X"36",X"07",X"2C",X"36",X"40",X"2E",X"6B",X"36",X"FF",X"C9",X"FF",X"FF", - X"21",X"93",X"43",X"7E",X"E6",X"01",X"07",X"07",X"07",X"07",X"07",X"C6",X"70",X"6F",X"26",X"4B", - X"1E",X"08",X"3A",X"57",X"43",X"07",X"07",X"07",X"00",X"C6",X"AD",X"57",X"3A",X"9F",X"43",X"C6", - X"03",X"4F",X"3A",X"9E",X"43",X"D6",X"0A",X"47",X"E5",X"CD",X"96",X"25",X"E1",X"7D",X"C6",X"04", - X"6F",X"1D",X"C2",X"88",X"25",X"C9",X"7E",X"E6",X"08",X"C8",X"2C",X"7E",X"FE",X"08",X"C8",X"FE", - X"88",X"D0",X"2C",X"7E",X"B8",X"D8",X"B9",X"D0",X"2C",X"7E",X"BA",X"D0",X"FE",X"80",X"D8",X"00", - X"00",X"00",X"00",X"00",X"4F",X"2D",X"46",X"3A",X"B8",X"43",X"16",X"03",X"FE",X"10",X"DA",X"CA", - X"25",X"16",X"04",X"FE",X"20",X"DA",X"CA",X"25",X"16",X"05",X"21",X"CC",X"43",X"7E",X"E6",X"08", - X"CA",X"E0",X"25",X"7D",X"C6",X"04",X"6F",X"15",X"C2",X"CD",X"25",X"E1",X"E1",X"C9",X"FF",X"FF", - X"78",X"C6",X"04",X"47",X"79",X"C6",X"0C",X"4F",X"36",X"08",X"2C",X"78",X"0F",X"E6",X"03",X"57", - X"79",X"E6",X"04",X"82",X"C6",X"58",X"77",X"2C",X"70",X"2C",X"71",X"E1",X"E1",X"C9",X"FF",X"FF", - X"00",X"00",X"00",X"00",X"00",X"3A",X"B9",X"43",X"2F",X"0F",X"0F",X"0F",X"E6",X"1F",X"21",X"D2", - X"4B",X"77",X"2C",X"3A",X"D1",X"4B",X"BE",X"DA",X"50",X"26",X"3A",X"D5",X"4B",X"57",X"E6",X"03", - X"5F",X"3A",X"9B",X"43",X"07",X"07",X"E6",X"0C",X"83",X"C6",X"D0",X"6F",X"26",X"3E",X"7A",X"0F", - X"0F",X"E6",X"07",X"86",X"57",X"3A",X"B9",X"43",X"92",X"32",X"B9",X"43",X"32",X"00",X"58",X"3A", - X"9B",X"43",X"0F",X"D2",X"D0",X"26",X"CD",X"68",X"26",X"C3",X"AA",X"26",X"C2",X"3A",X"26",X"3A", - X"2C",X"3A",X"9B",X"43",X"07",X"07",X"E6",X"0C",X"86",X"C6",X"D0",X"6F",X"26",X"3E",X"3A",X"B9", - X"43",X"86",X"C3",X"39",X"26",X"D2",X"AE",X"26",X"3A",X"6E",X"43",X"00",X"47",X"3A",X"9A",X"43", - X"FE",X"18",X"DA",X"76",X"26",X"04",X"FE",X"10",X"DA",X"7C",X"26",X"04",X"3A",X"BA",X"43",X"FE", - X"03",X"D2",X"85",X"26",X"04",X"3A",X"D6",X"4B",X"C6",X"E0",X"6F",X"26",X"3E",X"78",X"BE",X"DA", - X"93",X"26",X"7E",X"57",X"3A",X"BB",X"43",X"FE",X"04",X"D2",X"9D",X"26",X"14",X"FE",X"02",X"D2", - X"A3",X"26",X"14",X"7A",X"32",X"D5",X"4B",X"C9",X"00",X"58",X"21",X"D3",X"4B",X"7E",X"35",X"A7", - X"C0",X"34",X"2E",X"D6",X"7E",X"FE",X"16",X"D0",X"FE",X"08",X"D8",X"2C",X"96",X"07",X"47",X"3A", - X"6F",X"43",X"E6",X"03",X"2E",X"D4",X"77",X"2F",X"E6",X"03",X"3C",X"4F",X"C3",X"76",X"24",X"C9", - X"21",X"A8",X"4B",X"01",X"00",X"08",X"11",X"00",X"80",X"7E",X"A7",X"CA",X"E5",X"26",X"7A",X"07", - X"D2",X"E4",X"26",X"51",X"59",X"0C",X"7D",X"90",X"6F",X"FE",X"68",X"C2",X"D9",X"26",X"3A",X"D2", - X"4B",X"82",X"83",X"E6",X"1F",X"32",X"D6",X"4B",X"7B",X"92",X"32",X"D7",X"4B",X"C9",X"FF",X"FF", - X"21",X"A2",X"43",X"7E",X"A7",X"C8",X"2C",X"7E",X"E6",X"01",X"07",X"07",X"C6",X"83",X"6F",X"3E", - X"FF",X"32",X"97",X"43",X"11",X"70",X"43",X"CD",X"48",X"27",X"1C",X"1C",X"1C",X"7B",X"FE",X"80", - X"C2",X"17",X"27",X"1E",X"9D",X"3A",X"A4",X"43",X"FE",X"06",X"C2",X"39",X"27",X"1A",X"47",X"0E", - X"00",X"CD",X"20",X"02",X"AF",X"12",X"32",X"97",X"43",X"3A",X"97",X"43",X"A7",X"CC",X"68",X"27", - X"CD",X"A8",X"27",X"C3",X"10",X"3A",X"FF",X"FF",X"1A",X"1C",X"FE",X"01",X"C0",X"1A",X"A7",X"C8", - X"0F",X"0F",X"0F",X"0F",X"47",X"E6",X"F0",X"4F",X"78",X"E6",X"0F",X"47",X"CD",X"20",X"02",X"AF", - X"12",X"32",X"97",X"43",X"C9",X"FF",X"FF",X"FF",X"E5",X"11",X"61",X"42",X"06",X"06",X"3A",X"A3", - X"43",X"A7",X"CA",X"78",X"27",X"11",X"21",X"40",X"CD",X"C4",X"00",X"E1",X"11",X"BD",X"43",X"EB", - X"7E",X"2C",X"B6",X"C8",X"2C",X"EB",X"CD",X"14",X"03",X"D0",X"3A",X"A3",X"43",X"C6",X"90",X"6F", - X"34",X"CD",X"67",X"03",X"3E",X"FF",X"32",X"6A",X"43",X"2E",X"BE",X"7E",X"36",X"00",X"0F",X"0F", - X"0F",X"0F",X"2D",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"8C",X"43",X"7E",X"32",X"00",X"60",X"2C", - X"7E",X"32",X"00",X"68",X"F6",X"0F",X"77",X"2D",X"36",X"0F",X"C9",X"FF",X"FF",X"21",X"63",X"43", - X"7E",X"A7",X"C2",X"E2",X"27",X"2E",X"61",X"7E",X"A7",X"C8",X"FE",X"19",X"D2",X"D8",X"27",X"35", - X"2E",X"8C",X"7E",X"F6",X"40",X"77",X"C9",X"77",X"36",X"18",X"2E",X"8C",X"7E",X"E6",X"BF",X"77", - X"C9",X"36",X"FE",X"40",X"DA",X"E9",X"27",X"36",X"40",X"35",X"2E",X"8C",X"36",X"8F",X"C9",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"32",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"42",X"42", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E1",X"00",X"00",X"E2",X"00",X"00", - X"32",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"40",X"00",X"00",X"C3", - X"00",X"00",X"00",X"00",X"00",X"00",X"DF",X"00",X"00",X"E2",X"00",X"00",X"E0",X"00",X"E1",X"00", - X"00",X"30",X"00",X"00",X"00",X"00",X"DE",X"00",X"00",X"00",X"C2",X"00",X"40",X"00",X"E0",X"00", - X"00",X"00",X"00",X"30",X"00",X"30",X"00",X"5A",X"00",X"00",X"E1",X"00",X"40",X"00",X"E2",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"C1",X"3E",X"00",X"E0",X"00",X"40",X"C2",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"5A",X"C1",X"3E",X"C8",X"D8",X"00",X"00", - X"E0",X"E1",X"C2",X"E2",X"E0",X"00",X"E1",X"00",X"C2",X"00",X"E2",X"CE",X"CA",X"DA",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"CF",X"CF",X"C3",X"3F",X"C2",X"41",X"E0",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"DE",X"00",X"3F",X"00",X"C2",X"41",X"00",X"E1",X"00", - X"00",X"00",X"00",X"00",X"00",X"3D",X"DF",X"3D",X"00",X"00",X"E1",X"00",X"41",X"00",X"00",X"C2", - X"00",X"00",X"00",X"3D",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"41",X"00",X"00",X"E2", - X"00",X"00",X"3D",X"00",X"00",X"00",X"00",X"00",X"E2",X"00",X"00",X"00",X"00",X"4F",X"00",X"E0", - X"00",X"3B",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C2",X"00",X"00",X"00",X"4F",X"00",X"00", - X"00",X"00",X"3B",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"4D",X"4D", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"00",X"38", - X"00",X"34",X"00",X"28",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"02",X"00",X"00", - X"00",X"01",X"00",X"00",X"12",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"80",X"48",X"00",X"04", - X"40",X"08",X"00",X"50",X"00",X"00",X"80",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"20",X"44",X"00",X"00",X"00",X"02", - X"10",X"00",X"00",X"04",X"00",X"48",X"20",X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"44",X"08",X"00",X"00",X"01",X"00",X"00", - X"08",X"00",X"00",X"02",X"00",X"00",X"00",X"84",X"08",X"00",X"00",X"20",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"42",X"02",X"00",X"80",X"00",X"00",X"00",X"00",X"00", - X"04",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"82",X"04",X"00",X"00",X"20",X"00",X"00", - X"00",X"40",X"00",X"00",X"01",X"82",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"02",X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"81",X"02",X"00",X"00",X"40", - X"02",X"80",X"00",X"04",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"01",X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"D2",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"DE",X"00",X"5E",X"E0",X"00",X"00",X"E1",X"00",X"00",X"00",X"00", - X"00",X"00",X"C1",X"00",X"00",X"CF",X"53",X"E2",X"00",X"D2",X"E0",X"00",X"00",X"D0",X"00",X"00", - X"00",X"00",X"00",X"DE",X"00",X"CE",X"53",X"E1",X"D1",X"E3",X"00",X"E1",X"D3",X"00",X"00",X"00", - X"00",X"00",X"CF",X"C0",X"DE",X"DF",X"53",X"D3",X"E2",X"00",X"E2",X"D2",X"00",X"5E",X"E2",X"00", - X"00",X"00",X"00",X"CE",X"C1",X"C2",X"DE",X"D2",X"E1",X"E3",X"D1",X"00",X"D2",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"DF",X"DE",X"C2",X"CF",X"E0",X"D0",X"E2",X"E1",X"C2",X"C3",X"00",X"00", - X"DF",X"DE",X"CF",X"CE",X"DF",X"DE",X"CF",X"C8",X"D8",X"5E",X"CE",X"00",X"CF",X"DE",X"DF",X"CE", - X"E0",X"E3",X"E2",X"E1",X"00",X"E0",X"D1",X"CA",X"DA",X"D1",X"D2",X"D3",X"D0",X"D1",X"D2",X"D3", - X"00",X"00",X"00",X"00",X"E3",X"D2",X"CE",X"D2",X"E2",X"E0",X"D3",X"D1",X"D3",X"00",X"00",X"00", - X"00",X"00",X"00",X"E2",X"D3",X"CF",X"DF",X"E1",X"D0",X"E3",X"E1",X"D2",X"00",X"00",X"00",X"00", - X"00",X"00",X"E1",X"D0",X"DE",X"00",X"DE",X"E2",X"00",X"D3",X"53",X"E2",X"5E",X"C1",X"C0",X"00", - X"00",X"00",X"00",X"DF",X"00",X"00",X"CF",X"5E",X"D1",X"D2",X"00",X"53",X"E3",X"00",X"00",X"00", - X"00",X"00",X"CE",X"00",X"CF",X"00",X"CE",X"D2",X"D2",X"00",X"53",X"00",X"5E",X"E0",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"DE",X"00",X"E1",X"D3",X"00",X"E2",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"5E",X"D0",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"01",X"40",X"02",X"80",X"05", - X"A0",X"01",X"40",X"02",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"01",X"20",X"04",X"00",X"01",X"40",X"12", - X"48",X"02",X"80",X"01",X"20",X"04",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"02",X"10",X"08",X"00",X"01",X"80",X"04",X"A0",X"21", - X"84",X"05",X"20",X"02",X"80",X"01",X"10",X"08",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00", - X"00",X"00",X"80",X"00",X"00",X"04",X"08",X"10",X"00",X"01",X"40",X"00",X"40",X"0A",X"10",X"40", - X"02",X"08",X"40",X"00",X"10",X"04",X"80",X"02",X"08",X"10",X"00",X"00",X"00",X"01",X"00",X"00", - X"80",X"00",X"00",X"08",X"04",X"20",X"00",X"02",X"20",X"00",X"20",X"14",X"00",X"01",X"08",X"80", - X"01",X"10",X"80",X"02",X"20",X"00",X"08",X"04",X"80",X"02",X"04",X"20",X"00",X"00",X"00",X"01", - X"01",X"01",X"01",X"01",X"01",X"04",X"20",X"00",X"10",X"28",X"80",X"02",X"04",X"00",X"00",X"04", - X"20",X"20",X"00",X"04",X"40",X"01",X"10",X"00",X"04",X"08",X"80",X"04",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"08",X"20",X"00",X"88",X"10",X"00",X"44",X"00",X"00",X"00",X"10",X"02",X"00", - X"08",X"40",X"00",X"00",X"00",X"08",X"40",X"00",X"08",X"01",X"00",X"10",X"80",X"04",X"00",X"00", - X"00",X"00",X"20",X"00",X"84",X"20",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"20",X"01",X"00", - X"04",X"80",X"00",X"00",X"00",X"00",X"00",X"10",X"40",X"00",X"04",X"01",X"00",X"00",X"80",X"00", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"0A",X"0A",X"0A",X"0A",X"0A",X"0A",X"0A",X"06",X"06",X"1E", - X"03",X"03",X"1F",X"05",X"05",X"1C",X"04",X"04",X"04",X"1D",X"06",X"06",X"1A",X"04",X"04",X"04", - X"1B",X"05",X"05",X"05",X"05",X"18",X"1F",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07", - X"00",X"FF",X"FF",X"FF",X"05",X"05",X"1C",X"04",X"1D",X"0A",X"0A",X"0A",X"0A",X"0A",X"0A",X"06", - X"06",X"1E",X"03",X"03",X"1F",X"05",X"1C",X"04",X"04",X"1D",X"0A",X"06",X"06",X"1E",X"03",X"03", - X"1F",X"05",X"1C",X"04",X"04",X"1D",X"0A",X"06",X"06",X"1E",X"03",X"03",X"1F",X"05",X"1C",X"04", - X"04",X"1D",X"0A",X"06",X"1E",X"03",X"1F",X"05",X"1C",X"04",X"1D",X"06",X"1E",X"03",X"03",X"03", - X"03",X"15",X"16",X"17",X"01",X"01",X"05",X"05",X"01",X"01",X"05",X"05",X"01",X"01",X"05",X"05", - X"01",X"01",X"05",X"05",X"02",X"02",X"18",X"07",X"07",X"07",X"00",X"FF",X"FF",X"FF",X"FF",X"FF", - X"1C",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"1D", - X"06",X"06",X"06",X"06",X"06",X"06",X"06",X"1E",X"03",X"03",X"03",X"03",X"03",X"03",X"1F",X"05", - X"05",X"05",X"05",X"1C",X"04",X"04",X"1D",X"06",X"09",X"09",X"09",X"1E",X"03",X"07",X"07",X"08", - X"08",X"07",X"07",X"08",X"07",X"00",X"FF",X"FF",X"05",X"05",X"05",X"05",X"1C",X"04",X"04",X"04", - X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"1D",X"09",X"09",X"09",X"09", - X"0A",X"0A",X"0A",X"09",X"0A",X"0A",X"06",X"1E",X"03",X"03",X"03",X"1F",X"05",X"05",X"18",X"03", - X"19",X"06",X"06",X"1E",X"03",X"03",X"1F",X"05",X"05",X"05",X"05",X"05",X"05",X"05",X"00",X"FF", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"06",X"1E",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03", - X"03",X"03",X"03",X"03",X"03",X"03",X"1F",X"05",X"05",X"1C",X"04",X"04",X"04",X"04",X"04",X"04", - X"04",X"04",X"04",X"04",X"1D",X"06",X"06",X"1E",X"03",X"03",X"03",X"03",X"03",X"03",X"1F",X"05", - X"05",X"05",X"05",X"05",X"1C",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"1B", - X"00",X"FF",X"FF",X"FF",X"05",X"05",X"05",X"18",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03", - X"03",X"19",X"06",X"06",X"1A",X"04",X"04",X"1B",X"05",X"05",X"18",X"03",X"03",X"03",X"03",X"03", - X"03",X"03",X"19",X"06",X"06",X"06",X"06",X"06",X"06",X"06",X"06",X"06",X"06",X"1A",X"04",X"04", - X"1B",X"05",X"05",X"1C",X"04",X"04",X"1D",X"06",X"06",X"1A",X"04",X"04",X"1B",X"05",X"05",X"05", - X"05",X"05",X"05",X"05",X"00",X"FF",X"FF",X"FF",X"1C",X"04",X"04",X"1D",X"06",X"06",X"09",X"0A", - X"0A",X"09",X"09",X"09",X"16",X"17",X"14",X"03",X"03",X"03",X"1F",X"05",X"05",X"1C",X"04",X"04", - X"1D",X"06",X"06",X"1E",X"03",X"03",X"03",X"03",X"07",X"07",X"08",X"08",X"07",X"07",X"05",X"05", - X"1C",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"1D",X"1A",X"04",X"1B",X"00",X"FF",X"FF",X"FF", - X"14",X"03",X"03",X"19",X"06",X"0A",X"0A",X"09",X"09",X"09",X"0A",X"12",X"13",X"10",X"11",X"12", - X"13",X"10",X"11",X"12",X"13",X"10",X"04",X"04",X"04",X"04",X"1B",X"05",X"18",X"03",X"19",X"06", - X"1A",X"04",X"1B",X"05",X"18",X"07",X"07",X"07",X"08",X"08",X"07",X"07",X"07",X"03",X"03",X"19", - X"0D",X"0E",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"0B",X"0C",X"0D",X"0E",X"02",X"02",X"02",X"02",X"0B",X"0C",X"0D",X"0E",X"01",X"01",X"14",X"15", - X"16",X"17",X"01",X"01",X"05",X"05",X"05",X"05",X"02",X"02",X"02",X"02",X"00",X"FF",X"FF",X"FF", - X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"0D",X"0E",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02", - X"05",X"05",X"01",X"05",X"05",X"01",X"05",X"05",X"01",X"05",X"05",X"01",X"00",X"FF",X"FF",X"FF", - X"0B",X"0C",X"0D",X"0E",X"01",X"01",X"01",X"18",X"03",X"19",X"06",X"06",X"1A",X"04",X"1B",X"05", - X"18",X"03",X"19",X"06",X"06",X"1A",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"1B", - X"05",X"05",X"05",X"01",X"01",X"01",X"01",X"01",X"00",X"FF",X"FF",X"FF",X"0B",X"0C",X"0D",X"0E", - X"01",X"01",X"0B",X"0C",X"0D",X"0E",X"01",X"01",X"05",X"05",X"05",X"05",X"01",X"01",X"0B",X"0C", - X"0D",X"0E",X"01",X"01",X"07",X"08",X"08",X"07",X"08",X"08",X"08",X"07",X"00",X"FF",X"FF",X"FF", - X"14",X"15",X"16",X"17",X"14",X"15",X"16",X"17",X"14",X"03",X"03",X"03",X"03",X"03",X"03",X"03", - X"03",X"03",X"03",X"03",X"03",X"19",X"09",X"0A",X"0A",X"09",X"09",X"0A",X"0A",X"12",X"13",X"08", - X"08",X"07",X"07",X"08",X"08",X"08",X"08",X"04",X"04",X"04",X"11",X"12",X"13",X"10",X"11",X"12", - X"13",X"00",X"FF",X"FF",X"10",X"11",X"12",X"13",X"10",X"11",X"12",X"13",X"10",X"04",X"04",X"04", - X"04",X"04",X"04",X"04",X"04",X"04",X"0A",X"0A",X"0A",X"09",X"0A",X"09",X"0A",X"09",X"16",X"17", - X"14",X"03",X"03",X"03",X"07",X"07",X"07",X"07",X"03",X"19",X"06",X"1A",X"04",X"1B",X"05",X"18", - X"07",X"07",X"07",X"07",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"05",X"1C",X"04",X"1D",X"06",X"06",X"06",X"06",X"06",X"09",X"09",X"09",X"0A",X"0A",X"0A",X"09", - X"09",X"16",X"17",X"14",X"1F",X"05",X"18",X"03",X"19",X"06",X"1E",X"03",X"1F",X"05",X"18",X"03", - X"19",X"06",X"1E",X"03",X"1F",X"05",X"05",X"1C",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08", - X"00",X"FF",X"FF",X"FF",X"05",X"18",X"03",X"19",X"06",X"06",X"06",X"06",X"0A",X"0A",X"09",X"09", - X"0A",X"0A",X"09",X"0A",X"0A",X"12",X"13",X"10",X"1B",X"05",X"1C",X"04",X"1D",X"1E",X"1F",X"1C", - X"04",X"1D",X"06",X"1A",X"04",X"04",X"1B",X"05",X"18",X"07",X"07",X"07",X"07",X"08",X"07",X"07", - X"07",X"07",X"00",X"FF",X"0B",X"0C",X"0D",X"0E",X"0B",X"0C",X"1E",X"03",X"19",X"06",X"1E",X"03", - X"19",X"06",X"1E",X"03",X"19",X"06",X"1E",X"1F",X"1C",X"1D",X"1E",X"03",X"03",X"03",X"1F",X"05", - X"18",X"03",X"19",X"06",X"1E",X"03",X"1F",X"05",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"07", - X"07",X"08",X"08",X"08",X"08",X"08",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"05",X"05",X"18",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"19",X"06",X"06",X"06",X"06", - X"06",X"06",X"06",X"1A",X"04",X"1B",X"05",X"18",X"03",X"03",X"03",X"03",X"19",X"06",X"06",X"06", - X"1A",X"04",X"1B",X"05",X"18",X"03",X"03",X"03",X"03",X"19",X"06",X"06",X"06",X"1A",X"04",X"1B", - X"05",X"18",X"03",X"03",X"03",X"03",X"19",X"06",X"06",X"06",X"1A",X"04",X"1B",X"05",X"18",X"03", - X"03",X"19",X"06",X"06",X"1A",X"11",X"12",X"13",X"02",X"02",X"02",X"05",X"05",X"02",X"02",X"02", - X"05",X"05",X"02",X"02",X"02",X"05",X"1C",X"08",X"08",X"07",X"07",X"08",X"08",X"08",X"00",X"FF", - X"21",X"93",X"43",X"7E",X"34",X"E6",X"07",X"21",X"18",X"30",X"07",X"85",X"6F",X"7E",X"23",X"6E", - X"67",X"E9",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"32",X"64",X"30",X"28",X"30",X"BA",X"31",X"24", - X"31",X"5A",X"31",X"B4",X"32",X"2C",X"30",X"12",X"21",X"57",X"43",X"7E",X"FE",X"03",X"D0",X"2E", - X"50",X"7E",X"FE",X"04",X"D0",X"2E",X"58",X"7E",X"A7",X"CA",X"5C",X"30",X"35",X"C0",X"2D",X"34", - X"2E",X"50",X"36",X"04",X"2E",X"53",X"36",X"10",X"2C",X"36",X"50",X"2E",X"51",X"36",X"2E",X"2C", - X"36",X"00",X"3A",X"C2",X"43",X"0F",X"D8",X"36",X"40",X"C9",X"FF",X"FF",X"CD",X"74",X"30",X"21", - X"57",X"43",X"7E",X"07",X"07",X"00",X"00",X"81",X"C6",X"07",X"2E",X"58",X"77",X"C9",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"21",X"B8",X"43",X"7E",X"0F",X"00",X"E6",X"07",X"47",X"3E",X"07",X"90", - X"4F",X"7E",X"FE",X"80",X"DA",X"89",X"30",X"3E",X"70",X"0F",X"0F",X"0F",X"0F",X"E6",X"07",X"47", - X"3E",X"07",X"90",X"81",X"4F",X"3A",X"BA",X"43",X"D6",X"05",X"D2",X"9F",X"30",X"3E",X"10",X"81", - X"4F",X"CD",X"AA",X"30",X"E6",X"07",X"81",X"4F",X"C9",X"FF",X"21",X"9B",X"43",X"7E",X"07",X"07", - X"07",X"E6",X"07",X"2E",X"C2",X"86",X"E6",X"0F",X"C9",X"C0",X"21",X"58",X"43",X"CD",X"DA",X"30", - X"CD",X"DA",X"30",X"CD",X"DA",X"30",X"2E",X"50",X"7E",X"A7",X"C0",X"2E",X"55",X"7E",X"A7",X"CA", - X"E4",X"30",X"35",X"C0",X"2E",X"50",X"36",X"01",X"C9",X"FE",X"2C",X"7E",X"A7",X"C8",X"35",X"C9", - X"7E",X"FE",X"01",X"D0",X"CD",X"74",X"30",X"21",X"9A",X"43",X"7E",X"FE",X"10",X"DA",X"F2",X"30", - X"3E",X"0F",X"47",X"3E",X"0F",X"90",X"81",X"4F",X"06",X"01",X"2E",X"58",X"CD",X"12",X"31",X"CD", - X"12",X"31",X"CD",X"12",X"31",X"79",X"0F",X"0F",X"E6",X"3F",X"C6",X"01",X"2E",X"55",X"77",X"C9", - X"21",X"50",X"2C",X"7E",X"A7",X"C0",X"79",X"0F",X"E6",X"7F",X"4F",X"78",X"A7",X"C8",X"05",X"36", - X"0C",X"C9",X"86",X"47",X"21",X"50",X"43",X"7E",X"FE",X"01",X"C0",X"36",X"02",X"2E",X"B8",X"7E", - X"0F",X"0F",X"E6",X"0F",X"C6",X"05",X"FE",X"11",X"DA",X"3D",X"31",X"3E",X"05",X"2E",X"57",X"96", - X"47",X"CD",X"AA",X"30",X"3C",X"B8",X"DA",X"4B",X"31",X"3E",X"01",X"2E",X"53",X"77",X"C9",X"0A", - X"0C",X"0B",X"0C",X"0B",X"0E",X"0F",X"0E",X"0F",X"FF",X"FF",X"21",X"50",X"43",X"7E",X"FE",X"02", - X"C0",X"CD",X"AA",X"30",X"00",X"47",X"07",X"C6",X"50",X"6F",X"26",X"4B",X"78",X"07",X"07",X"C6", - X"70",X"5F",X"16",X"4B",X"0E",X"10",X"79",X"90",X"47",X"CD",X"92",X"31",X"13",X"13",X"13",X"13", - X"23",X"23",X"05",X"C2",X"8A",X"31",X"1E",X"70",X"2E",X"50",X"0D",X"C2",X"79",X"31",X"C9",X"FF", - X"FF",X"FF",X"1A",X"E6",X"08",X"C8",X"3A",X"94",X"43",X"BE",X"C0",X"3A",X"56",X"43",X"2C",X"46", - X"2D",X"B8",X"C0",X"7D",X"32",X"54",X"43",X"3E",X"03",X"32",X"50",X"43",X"E1",X"C9",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"3A",X"50",X"43",X"FE",X"03",X"C0",X"3A",X"54",X"43",X"D6",X"50",X"07", - X"C6",X"72",X"6F",X"26",X"4B",X"46",X"2C",X"56",X"3A",X"C2",X"43",X"0E",X"04",X"B8",X"D2",X"D6", - X"31",X"4F",X"78",X"41",X"0E",X"00",X"90",X"07",X"07",X"07",X"E6",X"07",X"C6",X"00",X"6F",X"26", - X"33",X"7E",X"81",X"07",X"07",X"4F",X"00",X"00",X"00",X"3A",X"57",X"43",X"47",X"CD",X"10",X"32", - X"79",X"80",X"C6",X"10",X"6F",X"26",X"33",X"4E",X"CD",X"AA",X"30",X"E6",X"06",X"81",X"6F",X"26", - X"33",X"7E",X"2C",X"46",X"21",X"50",X"43",X"36",X"05",X"2C",X"77",X"2C",X"70",X"C9",X"81",X"6F", - X"3A",X"53",X"43",X"FE",X"01",X"C0",X"7A",X"06",X"00",X"FE",X"58",X"D8",X"06",X"01",X"FE",X"78", - X"D8",X"06",X"02",X"FE",X"98",X"D8",X"06",X"03",X"C9",X"C0",X"21",X"50",X"3A",X"50",X"43",X"FE", - X"04",X"C0",X"21",X"50",X"4B",X"11",X"70",X"4B",X"3A",X"56",X"43",X"4F",X"3A",X"94",X"43",X"47", - X"1A",X"E6",X"08",X"CA",X"4E",X"32",X"7E",X"B8",X"C0",X"2C",X"7E",X"2D",X"B9",X"C0",X"2C",X"2C", - X"7B",X"C6",X"04",X"5F",X"FE",X"B0",X"C2",X"40",X"32",X"3E",X"06",X"32",X"50",X"43",X"C9",X"3C", - X"E6",X"0F",X"77",X"2E",X"21",X"95",X"43",X"7E",X"32",X"56",X"43",X"3C",X"E6",X"0F",X"77",X"2E", - X"50",X"7E",X"FE",X"05",X"D8",X"36",X"00",X"2E",X"53",X"4E",X"2C",X"6E",X"26",X"4B",X"3A",X"56", - X"43",X"57",X"3A",X"94",X"43",X"5F",X"7D",X"D6",X"50",X"0F",X"47",X"3E",X"10",X"90",X"47",X"7E", - X"2C",X"BB",X"C2",X"A4",X"32",X"7E",X"BA",X"C2",X"A4",X"32",X"2D",X"3A",X"51",X"43",X"77",X"2C", - X"3A",X"52",X"43",X"77",X"2C",X"05",X"C2",X"AB",X"32",X"2E",X"50",X"0D",X"C2",X"8F",X"32",X"C9", - X"21",X"50",X"43",X"06",X"30",X"CD",X"D8",X"05",X"2E",X"9A",X"06",X"04",X"CD",X"D8",X"05",X"3A", - X"BB",X"43",X"A7",X"C8",X"07",X"07",X"07",X"4F",X"21",X"70",X"4B",X"06",X"40",X"CD",X"D8",X"05", - X"16",X"4B",X"26",X"3F",X"3E",X"40",X"91",X"C6",X"70",X"5F",X"C6",X"10",X"6F",X"41",X"3A",X"B8", - X"43",X"0F",X"0F",X"D2",X"E0",X"05",X"7D",X"C6",X"40",X"6F",X"C3",X"E0",X"05",X"CD",X"E0",X"05", - X"C3",X"A0",X"03",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"01",X"02",X"02",X"03",X"03",X"03",X"03",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"88",X"90",X"98",X"A0",X"68",X"70",X"78",X"80",X"48",X"50",X"58",X"60",X"48",X"30",X"38",X"40", - X"88",X"90",X"98",X"A0",X"A8",X"B0",X"B8",X"C0",X"C8",X"D0",X"D8",X"E0",X"C8",X"E8",X"F0",X"F8", - X"11",X"30",X"2C",X"00",X"2F",X"A0",X"2C",X"00",X"2E",X"C4",X"2F",X"A0",X"2F",X"34",X"2F",X"A0", - X"2C",X"C8",X"2E",X"C4",X"2E",X"20",X"2E",X"C4",X"11",X"30",X"13",X"9C",X"13",X"D0",X"2C",X"00", - X"11",X"30",X"13",X"28",X"2C",X"00",X"2F",X"34",X"11",X"A4",X"2C",X"90",X"2F",X"34",X"2F",X"A0", - X"2C",X"90",X"2C",X"C8",X"2E",X"20",X"2E",X"C4",X"11",X"60",X"13",X"54",X"13",X"9C",X"13",X"D0", - X"10",X"20",X"10",X"64",X"11",X"A4",X"13",X"28",X"10",X"20",X"11",X"A4",X"12",X"00",X"2F",X"34", - X"2C",X"90",X"2C",X"C8",X"2D",X"C0",X"2E",X"20",X"11",X"60",X"12",X"44",X"12",X"88",X"13",X"54", - X"10",X"20",X"10",X"64",X"12",X"00",X"12",X"44",X"10",X"20",X"12",X"00",X"10",X"20",X"12",X"00", - X"10",X"A8",X"2D",X"88",X"10",X"A8",X"2D",X"C0",X"11",X"D0",X"12",X"CA",X"13",X"00",X"13",X"54", - X"10",X"20",X"10",X"64",X"10",X"D4",X"13",X"00",X"10",X"20",X"10",X"D4",X"12",X"00",X"2F",X"00", - X"2D",X"00",X"2D",X"44",X"2D",X"88",X"2E",X"6C",X"11",X"00",X"11",X"D0",X"12",X"CA",X"2F",X"64", - X"11",X"00",X"13",X"00",X"2F",X"64",X"2F",X"00",X"10",X"D4",X"2D",X"00",X"2F",X"00",X"2C",X"34", - X"2D",X"00",X"2D",X"44",X"2E",X"6C",X"2E",X"90",X"11",X"00",X"2C",X"34",X"2F",X"64",X"2F",X"64", - X"2E",X"90",X"2F",X"00",X"2C",X"34",X"2C",X"34",X"2D",X"44",X"2E",X"6C",X"2E",X"90",X"2E",X"90", - X"CD",X"76",X"08",X"CD",X"00",X"38",X"CD",X"00",X"26",X"CD",X"00",X"38",X"CD",X"80",X"39",X"3A", - X"BB",X"43",X"A7",X"CA",X"62",X"34",X"FE",X"04",X"D2",X"38",X"34",X"CD",X"74",X"34",X"CD",X"86", - X"34",X"CD",X"60",X"35",X"CD",X"98",X"34",X"CD",X"AA",X"34",X"3A",X"9B",X"43",X"0F",X"DA",X"C0", - X"0F",X"CD",X"30",X"39",X"C3",X"40",X"0C",X"FF",X"3A",X"9B",X"43",X"0F",X"DA",X"52",X"34",X"CD", - X"74",X"34",X"CD",X"60",X"35",X"CD",X"98",X"34",X"CD",X"30",X"39",X"C3",X"40",X"0C",X"FF",X"FF", - X"FF",X"FF",X"CD",X"86",X"34",X"CD",X"60",X"35",X"CD",X"AA",X"34",X"C3",X"C0",X"0F",X"FF",X"FF", - X"FF",X"FF",X"3A",X"9B",X"43",X"0F",X"D8",X"CD",X"40",X"0C",X"CD",X"C0",X"0F",X"C3",X"04",X"22", - X"FF",X"FF",X"FF",X"FF",X"21",X"70",X"4B",X"E5",X"CD",X"C0",X"34",X"E1",X"7D",X"C6",X"08",X"6F", - X"FE",X"90",X"C2",X"77",X"34",X"C9",X"21",X"90",X"4B",X"E5",X"CD",X"C0",X"34",X"E1",X"7D",X"C6", - X"08",X"6F",X"FE",X"B0",X"C2",X"89",X"34",X"C9",X"21",X"70",X"4B",X"E5",X"CD",X"B0",X"35",X"E1", - X"7D",X"C6",X"08",X"6F",X"FE",X"90",X"C2",X"9B",X"34",X"C9",X"21",X"90",X"4B",X"E5",X"CD",X"B0", - X"35",X"E1",X"7D",X"C6",X"08",X"6F",X"FE",X"B0",X"C2",X"AD",X"34",X"C9",X"FF",X"FF",X"FF",X"FF", - X"7E",X"A7",X"C8",X"47",X"C6",X"C0",X"5F",X"16",X"3E",X"1A",X"4F",X"2C",X"56",X"2C",X"5E",X"2C", - X"78",X"07",X"07",X"07",X"86",X"E6",X"7E",X"6F",X"26",X"3E",X"7E",X"2C",X"6E",X"67",X"7A",X"FE", - X"4B",X"C2",X"0C",X"35",X"7B",X"FE",X"50",X"DA",X"0C",X"35",X"06",X"08",X"2C",X"2C",X"D6",X"20", - X"5F",X"FE",X"50",X"DA",X"09",X"35",X"06",X"10",X"2C",X"2C",X"D6",X"20",X"5F",X"FE",X"50",X"DA", - X"09",X"35",X"06",X"18",X"2C",X"2C",X"D6",X"20",X"5F",X"79",X"80",X"4F",X"06",X"35",X"C5",X"01", - X"DF",X"FF",X"EB",X"36",X"00",X"23",X"36",X"00",X"09",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"36",X"00",X"23",X"36",X"00",X"C9",X"FF",X"FF", - X"CD",X"AA",X"30",X"47",X"07",X"07",X"4F",X"07",X"07",X"B0",X"32",X"6F",X"43",X"3A",X"B8",X"43", - X"FE",X"40",X"DA",X"77",X"35",X"3E",X"30",X"E6",X"30",X"0F",X"47",X"3A",X"BB",X"43",X"3D",X"FE", - X"04",X"DA",X"86",X"35",X"3E",X"03",X"07",X"B0",X"47",X"3A",X"9A",X"43",X"07",X"07",X"E6",X"20", - X"B0",X"C6",X"80",X"6F",X"26",X"3E",X"7E",X"32",X"6E",X"43",X"2C",X"7E",X"81",X"E6",X"F8",X"32", - X"6D",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"7E",X"A7",X"C8",X"47",X"2C",X"2C",X"2C",X"2C",X"7E",X"A7",X"CA",X"BE",X"35",X"35",X"EB",X"D5", - X"78",X"07",X"07",X"07",X"6F",X"26",X"3F",X"46",X"23",X"4E",X"C5",X"23",X"46",X"23",X"4E",X"C5", - X"23",X"46",X"23",X"4E",X"C5",X"23",X"46",X"23",X"4E",X"C5",X"EB",X"C9",X"FF",X"FF",X"FF",X"FF", - X"2C",X"2C",X"7E",X"FE",X"10",X"D2",X"28",X"36",X"47",X"2D",X"86",X"77",X"2D",X"2D",X"78",X"86", - X"77",X"FE",X"08",X"DA",X"6A",X"36",X"E6",X"07",X"77",X"2D",X"7E",X"D6",X"20",X"77",X"D2",X"04", - X"36",X"2D",X"35",X"2C",X"2C",X"2C",X"2C",X"4E",X"2C",X"2C",X"7E",X"2D",X"36",X"10",X"91",X"CA", - X"72",X"36",X"3D",X"0F",X"0F",X"0F",X"E6",X"1F",X"B8",X"3C",X"77",X"D8",X"3A",X"6E",X"43",X"77", - X"B8",X"C8",X"04",X"70",X"C9",X"FF",X"FF",X"FF",X"E6",X"0F",X"CA",X"44",X"37",X"47",X"2D",X"7E", - X"90",X"77",X"2D",X"2D",X"7E",X"90",X"77",X"D2",X"95",X"36",X"E6",X"07",X"77",X"2D",X"7E",X"C6", - X"20",X"77",X"D2",X"48",X"36",X"2D",X"34",X"2C",X"2C",X"2C",X"2C",X"7E",X"2C",X"2C",X"96",X"0F", - X"0F",X"0F",X"E6",X"1F",X"B8",X"3C",X"2D",X"DA",X"63",X"36",X"3A",X"6E",X"43",X"B8",X"CA",X"63", - X"36",X"78",X"3C",X"F6",X"10",X"77",X"C9",X"77",X"C9",X"FF",X"78",X"A7",X"C0",X"2C",X"2C",X"2C", - X"34",X"C9",X"2D",X"46",X"2C",X"2C",X"3A",X"C2",X"43",X"E6",X"F8",X"B8",X"D2",X"80",X"36",X"47", - X"3A",X"6D",X"43",X"4F",X"C6",X"08",X"32",X"6D",X"43",X"78",X"91",X"36",X"08",X"D8",X"FE",X"08", - X"D8",X"77",X"C9",X"D8",X"FE",X"2C",X"2C",X"46",X"2C",X"2C",X"7E",X"B8",X"C0",X"2D",X"36",X"00", - X"2C",X"3A",X"C2",X"43",X"E6",X"F8",X"B8",X"DA",X"AB",X"36",X"47",X"3A",X"6D",X"43",X"C6",X"08", - X"32",X"6D",X"43",X"80",X"36",X"C8",X"D8",X"FE",X"C8",X"D0",X"77",X"C9",X"77",X"C9",X"FF",X"FF", - X"7E",X"0F",X"D8",X"2D",X"7E",X"3C",X"E6",X"07",X"77",X"C9",X"FF",X"FF",X"D1",X"C1",X"E1",X"C9", - X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"01",X"32",X"68",X"43",X"C9",X"FF",X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"0F",X"C0",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"02",X"32",X"68",X"43",X"C9",X"FF",X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"0F",X"C0",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"04",X"32",X"68",X"43",X"3A",X"6F",X"43",X"A3",X"E6",X"F0",X"C0",X"7B",X"E6",X"0F", - X"77",X"2C",X"2C",X"2C",X"2C",X"71",X"3A",X"68",X"43",X"F6",X"08",X"32",X"68",X"43",X"C9",X"FF", - X"FF",X"FF",X"FF",X"FF",X"36",X"11",X"2D",X"35",X"2D",X"2D",X"36",X"07",X"2D",X"7E",X"C6",X"20", - X"77",X"D0",X"2D",X"34",X"C9",X"FF",X"FF",X"FF",X"7E",X"A7",X"C8",X"35",X"CA",X"CC",X"37",X"7E", - X"0F",X"D2",X"B0",X"37",X"3E",X"0F",X"96",X"E6",X"0E",X"07",X"07",X"07",X"07",X"2C",X"2C",X"56", - X"2C",X"5E",X"F5",X"D5",X"01",X"DF",X"FF",X"CD",X"96",X"37",X"D1",X"F1",X"2F",X"6F",X"26",X"FF", - X"23",X"19",X"EB",X"21",X"A0",X"BF",X"19",X"D0",X"EB",X"11",X"D6",X"17",X"36",X"00",X"23",X"36", - X"00",X"09",X"C3",X"40",X"35",X"FF",X"C6",X"60",X"6F",X"26",X"00",X"D2",X"9F",X"37",X"24",X"19", - X"EB",X"21",X"C0",X"BC",X"19",X"D8",X"EB",X"11",X"D0",X"17",X"C3",X"40",X"35",X"FF",X"FF",X"FF", - X"2C",X"7E",X"27",X"77",X"2C",X"56",X"2C",X"5E",X"2D",X"2D",X"00",X"CD",X"17",X"02",X"3E",X"20", - X"12",X"CD",X"10",X"02",X"06",X"02",X"C3",X"C4",X"00",X"FF",X"FF",X"FF",X"2C",X"2C",X"2C",X"7E", - X"E6",X"1F",X"C6",X"20",X"6F",X"26",X"43",X"01",X"DF",X"FF",X"11",X"1A",X"00",X"72",X"23",X"72", - X"09",X"1D",X"C2",X"DD",X"37",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"3A",X"C4",X"43",X"E6",X"08",X"C8",X"3A",X"E6",X"43",X"C6",X"08",X"57",X"3A",X"D2",X"4B",X"5F", - X"3A",X"E7",X"43",X"E6",X"E0",X"47",X"3A",X"E7",X"43",X"93",X"00",X"E6",X"1F",X"B0",X"5F",X"1A", - X"D6",X"90",X"D8",X"47",X"3A",X"C6",X"43",X"E6",X"07",X"C6",X"00",X"6F",X"26",X"3E",X"4E",X"7B", - X"E6",X"0E",X"07",X"07",X"5F",X"3E",X"A8",X"93",X"5F",X"16",X"4B",X"78",X"FE",X"50",X"DC",X"44", - X"38",X"C3",X"1C",X"39",X"C6",X"60",X"6F",X"26",X"3B",X"7E",X"A1",X"C8",X"CD",X"A1",X"38",X"EB", - X"7E",X"36",X"00",X"2C",X"2C",X"2C",X"2C",X"56",X"E1",X"21",X"BB",X"43",X"35",X"FE",X"0B",X"DA", - X"94",X"38",X"5F",X"3E",X"FF",X"32",X"69",X"43",X"21",X"78",X"43",X"01",X"10",X"10",X"7B",X"FE", - X"0F",X"CA",X"FB",X"38",X"7A",X"0F",X"E6",X"7C",X"C6",X"30",X"4F",X"7B",X"FE",X"0E",X"CA",X"FB", - X"38",X"79",X"0F",X"4F",X"7B",X"FE",X"0C",X"D2",X"FB",X"38",X"79",X"0F",X"4F",X"C3",X"FB",X"38", - X"FF",X"FF",X"FF",X"FF",X"01",X"05",X"0D",X"3E",X"FF",X"32",X"64",X"43",X"C3",X"F8",X"38",X"FF", - X"FF",X"D5",X"0E",X"20",X"EB",X"23",X"56",X"23",X"5E",X"3A",X"8C",X"19",X"C6",X"DE",X"6F",X"26", - X"17",X"CD",X"DE",X"34",X"D1",X"C9",X"35",X"D1",X"C9",X"FF",X"FF",X"FF",X"C6",X"B0",X"6F",X"26", - X"3B",X"7E",X"A1",X"C8",X"CD",X"A1",X"38",X"1A",X"D6",X"0B",X"DA",X"E9",X"38",X"FE",X"03",X"D2", - X"E9",X"38",X"47",X"62",X"7B",X"C6",X"05",X"6F",X"3A",X"C6",X"43",X"BE",X"17",X"07",X"07",X"E6", - X"04",X"B0",X"C6",X"B8",X"6F",X"26",X"3D",X"7E",X"12",X"3E",X"FF",X"32",X"66",X"43",X"01",X"02", - X"07",X"C3",X"F8",X"38",X"FF",X"FF",X"FF",X"FF",X"21",X"70",X"43",X"AF",X"BE",X"CA",X"06",X"39", - X"2C",X"2C",X"2C",X"2C",X"BE",X"C0",X"70",X"2C",X"71",X"2C",X"3A",X"E6",X"43",X"77",X"2C",X"3A", - X"E7",X"43",X"77",X"3A",X"C4",X"43",X"E6",X"F7",X"32",X"C4",X"43",X"C9",X"78",X"FE",X"20",X"D2", - X"BC",X"38",X"C9",X"C8",X"35",X"2E",X"8D",X"7E",X"E6",X"3F",X"F6",X"80",X"77",X"C9",X"C9",X"FF", - X"3A",X"D2",X"4B",X"E6",X"1E",X"C6",X"C0",X"6F",X"26",X"3D",X"5E",X"2C",X"6E",X"26",X"4B",X"CD", - X"00",X"3A",X"3A",X"9F",X"43",X"82",X"4F",X"3A",X"9E",X"43",X"92",X"47",X"E5",X"CD",X"5C",X"39", - X"E1",X"7D",X"C6",X"08",X"6F",X"1D",X"C2",X"4C",X"39",X"C9",X"FF",X"FF",X"7E",X"FE",X"05",X"D8", - X"7D",X"C6",X"05",X"6F",X"7E",X"B8",X"D8",X"B9",X"D0",X"D6",X"04",X"47",X"2D",X"2D",X"2D",X"3A", - X"D2",X"4B",X"86",X"E6",X"1F",X"07",X"07",X"07",X"C6",X"08",X"4F",X"C3",X"B7",X"25",X"FF",X"FF", - X"3A",X"D2",X"4B",X"D6",X"0C",X"D8",X"FE",X"10",X"D0",X"21",X"C4",X"43",X"11",X"C0",X"4B",X"06", - X"04",X"CD",X"E0",X"05",X"2E",X"E6",X"06",X"02",X"CD",X"E0",X"05",X"2E",X"E2",X"11",X"E6",X"43", - X"06",X"02",X"CD",X"E0",X"05",X"2E",X"C4",X"36",X"08",X"11",X"9E",X"43",X"3A",X"9B",X"43",X"0F", - X"DA",X"BF",X"39",X"1C",X"2E",X"E7",X"7E",X"D6",X"20",X"77",X"2D",X"7E",X"DE",X"00",X"77",X"1A", - X"32",X"C6",X"43",X"CD",X"00",X"38",X"21",X"C4",X"43",X"7E",X"E6",X"08",X"CA",X"F0",X"39",X"21", - X"E7",X"43",X"34",X"7E",X"E6",X"1F",X"FE",X"1D",X"DA",X"C3",X"39",X"21",X"C0",X"4B",X"11",X"C4", - X"43",X"06",X"04",X"CD",X"E0",X"05",X"1E",X"E6",X"06",X"02",X"C3",X"E0",X"05",X"FF",X"FF",X"FF", - X"2E",X"A6",X"7E",X"FE",X"C0",X"DA",X"C4",X"0C",X"D6",X"01",X"77",X"C3",X"DB",X"39",X"FF",X"FF", - X"3A",X"BB",X"43",X"D6",X"0C",X"2F",X"3C",X"57",X"3A",X"9B",X"43",X"0F",X"0F",X"D8",X"E1",X"C9", - X"21",X"B8",X"43",X"7E",X"A7",X"C2",X"43",X"3B",X"2E",X"8D",X"36",X"CF",X"C9",X"21",X"69",X"43", - X"7E",X"A7",X"CA",X"40",X"3A",X"FE",X"20",X"DA",X"2C",X"3A",X"36",X"20",X"35",X"7E",X"07",X"07", - X"00",X"2F",X"E6",X"0E",X"2E",X"8D",X"77",X"2E",X"68",X"36",X"00",X"2E",X"66",X"36",X"00",X"C9", - X"2E",X"64",X"7E",X"A7",X"CA",X"62",X"3A",X"FE",X"10",X"DA",X"4E",X"3A",X"36",X"10",X"35",X"7E", - X"0F",X"00",X"00",X"2F",X"E6",X"07",X"F6",X"10",X"2E",X"8C",X"77",X"2E",X"66",X"36",X"00",X"C9", - X"0F",X"00",X"2E",X"66",X"7E",X"A7",X"C8",X"FE",X"10",X"DA",X"78",X"3A",X"36",X"10",X"3A",X"B8", - X"43",X"E6",X"08",X"CA",X"78",X"3A",X"36",X"05",X"35",X"2E",X"8C",X"7E",X"E6",X"08",X"F6",X"04", - X"77",X"C9",X"21",X"9A",X"43",X"7E",X"FE",X"03",X"D8",X"2E",X"8D",X"7E",X"E6",X"3F",X"77",X"C9", - X"21",X"6B",X"43",X"7E",X"A7",X"C3",X"23",X"39",X"21",X"70",X"4B",X"01",X"00",X"08",X"11",X"B0", - X"03",X"7E",X"2C",X"A0",X"CA",X"AE",X"3A",X"7E",X"FE",X"28",X"DA",X"AE",X"3A",X"0C",X"7D",X"82", - X"6F",X"BB",X"C2",X"A1",X"3A",X"79",X"A7",X"C8",X"FE",X"08",X"DA",X"BF",X"3A",X"3E",X"08",X"C6", - X"25",X"4F",X"21",X"8C",X"43",X"7E",X"E6",X"C0",X"B1",X"77",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"8E",X"43",X"7E",X"E6",X"01",X"07",X"07",X"F6",X"20",X"47",X"2D",X"7E",X"E6",X"C0",X"B0", - X"77",X"2E",X"96",X"7E",X"34",X"A7",X"CA",X"F8",X"3A",X"3A",X"D6",X"4B",X"C6",X"E0",X"5F",X"16", - X"3D",X"1A",X"BE",X"D0",X"36",X"00",X"C9",X"5F",X"2E",X"8E",X"34",X"2D",X"7E",X"F6",X"10",X"77", - X"C9",X"8E",X"21",X"9A",X"43",X"7E",X"FE",X"02",X"D0",X"2C",X"7E",X"47",X"E6",X"60",X"2E",X"8D", - X"36",X"0A",X"C0",X"78",X"E6",X"02",X"C6",X"1C",X"77",X"C9",X"78",X"21",X"62",X"43",X"7E",X"A7", - X"C8",X"FE",X"40",X"DA",X"28",X"3B",X"36",X"40",X"35",X"7E",X"E6",X"06",X"07",X"00",X"2E",X"8D", - X"77",X"C9",X"FF",X"21",X"6A",X"43",X"7E",X"A7",X"C8",X"35",X"E6",X"08",X"F6",X"07",X"2E",X"8D", - X"77",X"C9",X"8D",X"21",X"A4",X"43",X"7E",X"FE",X"03",X"CC",X"D6",X"23",X"CD",X"33",X"3B",X"CD", - X"1B",X"3B",X"CD",X"1D",X"3A",X"CD",X"BD",X"27",X"CD",X"82",X"3A",X"C3",X"90",X"3A",X"FF",X"FF", - X"1F",X"7C",X"F0",X"01",X"C0",X"07",X"7F",X"FC",X"F0",X"07",X"C0",X"1F",X"FF",X"FC",X"03",X"F0", - X"0F",X"C0",X"3F",X"FC",X"1F",X"F0",X"07",X"FE",X"3F",X"F8",X"0F",X"FF",X"FF",X"FC",X"1F",X"FF", - X"FC",X"1F",X"FC",X"1F",X"F0",X"7F",X"F0",X"7F",X"C0",X"FF",X"01",X"C0",X"FF",X"01",X"00",X"FF", - X"07",X"00",X"FF",X"07",X"FC",X"1F",X"FC",X"1F",X"F0",X"7F",X"F0",X"7F",X"C0",X"FF",X"01",X"C0", - X"FF",X"01",X"00",X"FF",X"07",X"FF",X"07",X"FC",X"1F",X"F8",X"0F",X"F0",X"C0",X"03",X"FF",X"FF", - X"03",X"E0",X"03",X"E0",X"0F",X"80",X"0F",X"00",X"3C",X"00",X"1E",X"3F",X"00",X"FC",X"F0",X"00", - X"7F",X"FE",X"00",X"F0",X"03",X"E0",X"00",X"00",X"0F",X"80",X"00",X"00",X"3F",X"00",X"FE",X"30", - X"00",X"06",X"FF",X"00",X"F8",X"00",X"00",X"03",X"E0",X"00",X"E0",X"08",X"20",X"04",X"C0",X"01", - X"E0",X"03",X"F8",X"0F",X"07",X"E0",X"3F",X"03",X"FF",X"FF",X"FF",X"3F",X"FC",X"FF",X"F8",X"FF", - X"FF",X"07",X"E0",X"1F",X"F0",X"FF",X"FC",X"FF",X"07",X"1E",X"FC",X"1F",X"1F",X"7F",X"FF",X"FF", - X"E8",X"00",X"E9",X"00",X"C4",X"C6",X"C5",X"C7",X"EA",X"00",X"EB",X"00",X"00",X"00",X"EC",X"00", - X"E9",X"00",X"C8",X"CA",X"C9",X"CB",X"EA",X"00",X"ED",X"00",X"00",X"00",X"EE",X"00",X"EF",X"00", - X"CC",X"CF",X"CD",X"D0",X"CE",X"D1",X"F0",X"00",X"F1",X"00",X"F2",X"00",X"EF",X"00",X"D2",X"00", - X"D3",X"D5",X"D4",X"D6",X"F0",X"00",X"F3",X"00",X"E8",X"00",X"E9",X"00",X"C4",X"C6",X"C5",X"C7", - X"00",X"00",X"EC",X"00",X"E9",X"00",X"C8",X"CA",X"C9",X"CB",X"00",X"00",X"EE",X"00",X"EF",X"00", - X"CC",X"CF",X"CD",X"D0",X"DD",X"D1",X"F2",X"00",X"EF",X"00",X"D2",X"00",X"D3",X"D5",X"DD",X"D6", - X"00",X"00",X"00",X"00",X"C4",X"C6",X"C5",X"C7",X"EA",X"00",X"EB",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"DB",X"CA",X"C9",X"CB",X"EA",X"00",X"ED",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"DC",X"CF",X"CD",X"D0",X"CE",X"D1",X"F0",X"00",X"F1",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"D3",X"D5",X"D4",X"D6",X"F0",X"00",X"F3",X"00",X"00",X"00",X"00",X"00",X"C4",X"C6",X"C5",X"C7", - X"00",X"00",X"00",X"00",X"00",X"00",X"DB",X"CA",X"C9",X"CB",X"00",X"00",X"00",X"00",X"00",X"00", - X"DC",X"CF",X"CD",X"D0",X"DD",X"D1",X"00",X"00",X"00",X"00",X"00",X"00",X"D3",X"D5",X"DD",X"D6", - X"00",X"00",X"DE",X"E2",X"AB",X"B2",X"AC",X"B3",X"DF",X"E3",X"00",X"00",X"00",X"00",X"00",X"E5", - X"B4",X"B6",X"B5",X"B7",X"E4",X"E6",X"00",X"00",X"00",X"00",X"00",X"00",X"B8",X"BB",X"B9",X"BC", - X"BA",X"BD",X"00",X"00",X"00",X"00",X"00",X"00",X"BE",X"C1",X"BF",X"C2",X"C0",X"C3",X"00",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"00",X"00",X"FA",X"FC",X"D7",X"D9",X"D8",X"DA",X"FB",X"FD",X"00",X"00",X"F4",X"F6",X"F5",X"00", - X"C4",X"C6",X"C5",X"C7",X"F7",X"00",X"F8",X"F9",X"00",X"00",X"00",X"00",X"A7",X"A9",X"A8",X"AA", - X"00",X"00",X"00",X"00",X"00",X"00",X"AB",X"AD",X"AC",X"AE",X"00",X"00",X"00",X"00",X"DE",X"00", - X"AB",X"B0",X"AC",X"B1",X"DF",X"00",X"00",X"00",X"DE",X"E0",X"AB",X"B2",X"AC",X"B3",X"DF",X"E1", - X"00",X"00",X"9D",X"00",X"9E",X"00",X"00",X"00",X"00",X"00",X"9F",X"00",X"A0",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"9C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"A3",X"A5",X"A4",X"A6", - X"00",X"00",X"9C",X"00",X"00",X"00",X"00",X"00",X"9D",X"00",X"9E",X"00",X"00",X"00",X"9F",X"00", - X"A0",X"00",X"00",X"00",X"A1",X"00",X"A2",X"00",X"00",X"00",X"96",X"00",X"00",X"00",X"00",X"00", - X"97",X"00",X"93",X"00",X"00",X"00",X"98",X"00",X"99",X"00",X"00",X"00",X"9A",X"00",X"9B",X"00", - X"00",X"00",X"90",X"00",X"00",X"00",X"00",X"00",X"91",X"00",X"00",X"00",X"00",X"00",X"92",X"00", - X"93",X"00",X"00",X"00",X"94",X"00",X"95",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"08",X"00", - X"00",X"00",X"0A",X"00",X"00",X"00",X"0B",X"00",X"0C",X"0C",X"0E",X"FF",X"0D",X"0E",X"0D",X"FF", - X"06",X"70",X"07",X"70",X"08",X"70",X"08",X"70",X"08",X"70",X"07",X"78",X"06",X"80",X"05",X"88", - X"04",X"90",X"03",X"98",X"02",X"A0",X"01",X"A8",X"02",X"70",X"03",X"70",X"04",X"70",X"05",X"70", - X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"34",X"2C",X"26",X"20",X"1C",X"18",X"14",X"12",X"0F", - X"0D",X"0B",X"09",X"08",X"07",X"06",X"05",X"04",X"03",X"02",X"02",X"02",X"02",X"02",X"02",X"02", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"3D",X"A8",X"3D",X"AC",X"3D",X"B0",X"3D",X"B4", - X"3D",X"90",X"3D",X"96",X"3D",X"9C",X"3D",X"A2",X"3D",X"78",X"3D",X"7E",X"3D",X"84",X"3D",X"8A", - X"3D",X"60",X"3D",X"66",X"3D",X"6C",X"3D",X"72",X"3D",X"40",X"3D",X"48",X"3D",X"50",X"3D",X"58", - X"3D",X"18",X"3D",X"22",X"3D",X"2C",X"3D",X"36",X"3C",X"C0",X"3D",X"00",X"3D",X"0C",X"3C",X"00", - X"3D",X"58",X"3D",X"50",X"3D",X"48",X"3D",X"40",X"3D",X"36",X"3D",X"2C",X"3D",X"22",X"3D",X"18", - X"3C",X"00",X"3D",X"0C",X"3D",X"00",X"3C",X"C0",X"3C",X"00",X"3C",X"0E",X"3C",X"1C",X"3C",X"2A", - X"3C",X"38",X"3C",X"42",X"3C",X"4C",X"3C",X"56",X"3C",X"60",X"3C",X"6E",X"3C",X"7C",X"3C",X"8A", - X"3C",X"98",X"3C",X"A2",X"3C",X"AC",X"3C",X"B6",X"3C",X"C0",X"3C",X"CC",X"3C",X"D8",X"3C",X"E4", - X"05",X"40",X"05",X"20",X"04",X"30",X"04",X"10",X"06",X"48",X"06",X"28",X"05",X"38",X"05",X"18", - X"07",X"50",X"07",X"30",X"06",X"40",X"06",X"20",X"08",X"58",X"08",X"38",X"07",X"48",X"07",X"28", - X"06",X"10",X"05",X"20",X"05",X"30",X"05",X"40",X"08",X"18",X"07",X"28",X"07",X"38",X"06",X"48", - X"08",X"20",X"07",X"30",X"07",X"40",X"07",X"50",X"08",X"30",X"08",X"40",X"08",X"50",X"08",X"60", - X"FF",X"48",X"40",X"40",X"40",X"38",X"30",X"28",X"38",X"30",X"28",X"20",X"30",X"20",X"30",X"28", - X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"01",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"01", - X"05",X"04",X"03",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"02",X"02", - X"02",X"02",X"03",X"03",X"03",X"04",X"04",X"04",X"05",X"05",X"06",X"06",X"07",X"08",X"07",X"06", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"20",X"FF",X"02",X"FF",X"36",X"D2",X"36",X"C0", - X"20",X"FF",X"03",X"FF",X"36",X"D2",X"35",X"E0",X"30",X"FF",X"04",X"FF",X"36",X"D2",X"35",X"E0", - X"10",X"FF",X"05",X"FF",X"36",X"EA",X"35",X"E0",X"10",X"FF",X"06",X"FF",X"36",X"EA",X"36",X"C0", - X"10",X"60",X"07",X"1F",X"37",X"0A",X"36",X"C0",X"F0",X"10",X"0B",X"1A",X"37",X"0A",X"36",X"C0", - X"40",X"FF",X"04",X"FF",X"36",X"EA",X"36",X"C0",X"10",X"FF",X"08",X"FF",X"36",X"EA",X"36",X"C0", - X"40",X"10",X"0F",X"17",X"37",X"0A",X"36",X"C0",X"10",X"FF",X"0A",X"FF",X"36",X"EA",X"35",X"E0", - X"FF",X"FF",X"FF",X"FF",X"36",X"CC",X"35",X"E0",X"FF",X"FF",X"FF",X"FF",X"36",X"CC",X"35",X"E0", - X"10",X"FF",X"06",X"FF",X"36",X"EA",X"35",X"E0",X"10",X"10",X"07",X"79",X"37",X"0A",X"35",X"E0", - X"01",X"48",X"EE",X"00",X"10",X"B0",X"10",X"20",X"01",X"49",X"2C",X"00",X"10",X"A0",X"00",X"B0", - X"01",X"49",X"6A",X"00",X"10",X"90",X"00",X"B8",X"01",X"49",X"A8",X"00",X"10",X"80",X"00",X"C0", - X"01",X"49",X"E6",X"00",X"10",X"70",X"00",X"C8",X"01",X"4A",X"24",X"00",X"10",X"60",X"00",X"C8", - X"01",X"4A",X"62",X"00",X"10",X"50",X"00",X"C8",X"01",X"4A",X"A0",X"00",X"10",X"40",X"00",X"C8", - X"01",X"4A",X"CE",X"00",X"10",X"38",X"00",X"B0",X"01",X"48",X"CC",X"00",X"10",X"B8",X"10",X"20", - X"01",X"4A",X"CA",X"00",X"10",X"38",X"00",X"B8",X"01",X"48",X"C8",X"00",X"10",X"B8",X"10",X"18", - X"01",X"4A",X"C6",X"00",X"10",X"38",X"00",X"C0",X"01",X"48",X"C4",X"00",X"10",X"B8",X"10",X"10", - X"01",X"4A",X"C2",X"00",X"10",X"38",X"00",X"C8",X"01",X"48",X"C0",X"00",X"10",X"B8",X"10",X"08"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_video.vhd b/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_video.vhd deleted file mode 100644 index 9f7ac60d..00000000 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix_video.vhd +++ /dev/null @@ -1,160 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix video generator by Dar (darfpga@aol.fr) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_video is -port( - clk11 : in std_logic; - reset : in std_logic; - ce_pix : out std_logic; - hcnt : out std_logic_vector(9 downto 1); - vcnt : out std_logic_vector(8 downto 1); - sync_hs : out std_logic; - sync_vs : out std_logic; - adrsel : out std_logic; - rdy : out std_logic; - vblank : out std_logic; - hblank_frgrd : out std_logic; - hblank_bkgrd : out std_logic -); -end phoenix_video; - -architecture struct of phoenix_video is - signal hclk_i : std_logic := '0'; - signal hstb_i : std_logic := '0'; - signal hcnt_i : unsigned(9 downto 1) := (others=>'0'); - signal vcnt_i : unsigned(9 downto 1) := (others=>'0'); - signal vcnt2 : std_logic_vector(8 downto 1) := (others=>'0'); - signal vblank_n : std_logic := '0'; - - signal rdy1_i : std_logic; - signal rdy2_i : std_logic; - signal j1 : std_logic; - signal k1 : std_logic; - signal q1 : std_logic; - signal j2 : std_logic; - signal k2 : std_logic; - signal q2 : std_logic; - -begin - --- horizontal counter clock (pixel clock) -process(clk11) begin - if falling_edge(clk11) then - hclk_i <= not hclk_i; - end if; -end process; - --- horizontal counter from 0x0A0 to 0x1FF : 352 pixels -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if reset = '1' then - hcnt_i <= (others=>'0'); - vcnt_i <= (others=>'0'); - else - hcnt_i <= hcnt_i +1; - if hcnt_i = 511 then - hcnt_i <= to_unsigned(160,9); - vcnt_i <= vcnt_i +1; - if vcnt_i = 261 then - vcnt_i <= to_unsigned(0,9); - end if; - end if; - end if; - end if; - end if; -end process; - --- vertical counter clock (line clock) = hblank -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if (hcnt_i(3) and hcnt_i(2) and hcnt_i(1)) = '1' then hstb_i <= not hcnt_i(9); end if; - end if; - end if; -end process; - --- vertical blanking -vblank_n <= - not(vcnt2(8) and vcnt2(7)) - or - ( not - ( not (vcnt2(8) and vcnt2(7) and not vcnt2(6) and not vcnt2(5) and not vcnt2(4)) - and - not (vcnt2(8) and vcnt2(7) and not vcnt2(6) and not vcnt2(5) and vcnt2(4)) - ) -); - --- ready signal for microprocessor -rdy1_i <= not( not(hcnt_i(9)) and not hcnt_i(7) and hcnt_i(6) and not hcnt_i(5)); -rdy2_i <= not( not(hcnt_i(9)) and hcnt_i(7) and hcnt_i(6) and hcnt_i(5)); - --- background horizontal blanking -j1 <= hcnt_i(6) and hcnt_i(4); -k1 <= hstb_i; - -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if (j1 xor k1) = '1' then - q1 <= j1; - elsif j1 = '1' then - q1 <= not q1; - else - q1 <= q1; - end if; - end if; - end if; -end process; - -j2 <= not hcnt_i(6) and hcnt_i(5); -k2 <= hcnt_i(8) and hcnt_i(7) and hcnt_i(6) and hcnt_i(4); - -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if (j2 xor k2) = '1' then - q2 <= j2; - elsif j2 = '1' then - q2 <= not q2; - else - q2 <= q2; - end if; - end if; - end if; -end process; - --- output -ce_pix <= hclk_i; -hcnt <= std_logic_vector(hcnt_i); -vcnt2 <= std_logic_vector(vcnt_i(8 downto 1)) when vcnt_i < 255 else "11111111"; -vcnt <= vcnt2; ---sync <= not(sync1_i xor sync2_i) ; original syncs -rdy <= not(vblank_n and (not (rdy1_i and rdy2_i and not hcnt_i(9)))); -adrsel <= vblank_n and hcnt_i(9); - -vblank <= not vblank_n; -hblank_frgrd <= hstb_i; -hblank_bkgrd <= not(hcnt_i(9) and q1) and not(hcnt_i(9) and (q2)); - -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if hcnt_i = 191 then - sync_hs <= '1'; - if vcnt_i = 230 then sync_vs <= '1'; end if; - if vcnt_i = 237 then sync_vs <= '0'; end if; - end if; - if hcnt_i = 217 then sync_hs <= '0'; end if; - end if; - end if; -end process; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.qpf b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.qpf deleted file mode 100644 index 19725409..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.qpf +++ /dev/null @@ -1,30 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# 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 = 02:40:30 January 25, 2017 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "13.1" -DATE = "02:40:30 January 25, 2017" - -# Revisions - -PROJECT_REVISION = "Pleiads_mist" \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.qsf b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.qsf deleted file mode 100644 index f77d56fe..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.qsf +++ /dev/null @@ -1,419 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2014 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.4 Build 182 03/12/2014 SJ Web Edition -# Date created = 16:54:40 June 25, 2019 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# Pleiads_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 13.1 -set_global_assignment -name PROJECT_CREATION_TIME_DATE "21:40:24 MAY 17, 2014" -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS ON -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_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 "pll27:pll|altpll:altpll_component" - -# Classic Timing Assignments -# ========================== -set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 - -# Analysis & Synthesis Assignments -# ================================ -set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED -set_global_assignment -name FAMILY "Cyclone III" -set_global_assignment -name TOP_LEVEL_ENTITY Pleiads_MiST -set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 -set_global_assignment -name ALLOW_POWER_UP_DONT_CARE ON -set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON -set_global_assignment -name SAVE_DISK_SPACE OFF -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 - -# Fitter Assignments -# ================== -set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE OPTIMISTIC -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON -set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING ON -set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON -set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON -set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON -set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT EXTRA -set_global_assignment -name DEVICE EP3C25E144C8 -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON -set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF -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" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS" -set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON -set_global_assignment -name FITTER_EFFORT "STANDARD FIT" - -# Assembler Assignments -# ===================== -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name USE_CONFIGURATION_DEVICE OFF - -# SignalTap II Assignments -# ======================== -set_global_assignment -name ENABLE_SIGNALTAP OFF -set_global_assignment -name USE_SIGNALTAP_FILE stp1.stp - -# 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 ENTITY(Pleiades_MiST) - - # Pin & Location Assignments - # ========================== - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[0] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[1] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[2] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[3] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[4] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[5] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[6] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[7] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[8] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[9] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[10] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[11] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[12] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[13] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[14] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[15] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[0] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[1] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[2] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[3] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[4] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[5] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[6] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[7] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[8] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[9] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[10] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[11] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[12] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[0] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[1] - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQMH - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQML - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nRAS - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCAS - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nWE - set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCS - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[0] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[1] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[2] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[3] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[4] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[5] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[6] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[7] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[8] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[9] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[10] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[11] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[12] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[13] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[14] - set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[15] - - # Fitter Assignments - # ================== - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[6] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[7] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[8] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[9] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[10] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[11] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_A[12] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[6] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[7] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[8] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[9] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[10] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[11] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[12] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[13] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[14] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQ[15] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_BA[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_BA[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQML - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_DQMH - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nRAS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nCAS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nWE - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_nCS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_CKE - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SDRAM_CLK - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[5] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[4] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[3] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[2] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[1] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B[0] - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_HS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_VS - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to LED - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_L - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to AUDIO_R - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_DO - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to CONF_DATA0 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_L - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUDIO_R - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_27 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CONF_DATA0 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LED - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_DI - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_DO - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SCK - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SS2 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SPI_SS3 - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_HS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_VS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[6] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[7] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[8] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[9] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[10] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[11] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_A[12] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[2] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[3] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[4] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[5] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[6] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[7] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[8] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[9] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[10] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[11] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[12] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[13] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[14] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQ[15] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_BA[0] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_BA[1] - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQMH - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_DQML - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nRAS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nCAS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nWE - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_nCS - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_CKE - set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SDRAM_CLK - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to CLOCK_27 - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_DI - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_SCK - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_SS2 - set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SPI_SS3 - - # start DESIGN_PARTITION(Top) - # --------------------------- - - # Incremental Compilation Assignments - # =================================== - 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 - - # end DESIGN_PARTITION(Top) - # ------------------------- - -# end ENTITY(Pleiades_MiST) -# ------------------------- -set_global_assignment -name SYSTEMVERILOG_FILE rtl/Pleiads_MiST.sv -set_global_assignment -name VHDL_FILE rtl/phoenix.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_effect3.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_effect2.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_effect1.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_video.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_music.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prog.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ic40.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ic39.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ic24.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ic23.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/col_l.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/col_h.vhd -set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd -set_global_assignment -name VHDL_FILE rtl/pll.vhd -set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip -set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.sdc b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.sdc deleted file mode 100644 index ea8cd2c9..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/Pleiads_mist.sdc +++ /dev/null @@ -1,42 +0,0 @@ -#************************************************************ -# THIS IS A WIZARD-GENERATED FILE. -# -# Version 13.1.4 Build 182 03/12/2014 SJ Full Version -# -#************************************************************ - -# Copyright (C) 1991-2014 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. - - - -# Clock constraints - -create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_ports {SPI_SCK}] - -# Automatically constrain PLL and other generated clocks -derive_pll_clocks -create_base_clocks - -# Automatically calculate clock uncertainty to jitter and other effects. -derive_clock_uncertainty - -set_clock_groups -asynchronous -group [get_clocks {SPI_SCK}] -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[*]}] - -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {AUDIO_L}] -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {AUDIO_R}] -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {LED}] -set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {VGA_*}] - -set_multicycle_path -to {VGA_*[*]} -setup 2 -set_multicycle_path -to {VGA_*[*]} -hold 1 diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/README.txt b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/README.txt deleted file mode 100644 index 5c1b0a87..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/README.txt +++ /dev/null @@ -1,24 +0,0 @@ ---------------------------------------------------------------------------------- --- --- Arcade: Pleiads for MiST by Gehstock --- 25 June 2019 --- ---------------------------------------------------------------------------------- --- Copyright (c) DAR - Feb 2016 --- https://sourceforge.net/projects/darfpga/files/Software%20VHDL/phoenix/ ---------------------------------------------------------------------------------- --- --- Only controls and OSD are rotated on VGA output. --- --- --- Keyboard inputs : --- --- ESC : Coin --- F1 : Start 1 player --- F2 : Start 2 players --- SPACE : Fire --- ARROW KEYS : Movement/Shield --- --- Joystick support. --- ---------------------------------------------------------------------------------- diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/clean.bat b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/clean.bat deleted file mode 100644 index b98ca391..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/clean.bat +++ /dev/null @@ -1,16 +0,0 @@ -@echo off -del /s *.bak -del /s *.orig -del /s *.rej -rmdir /s /q db -rmdir /s /q incremental_db -rmdir /s /q output_files -rmdir /s /q simulation -rmdir /s /q greybox_tmp -del PLLJ_PLLSPE_INFO.txt -del /s /q build_id.v -del *.qws -del *.ppf -del *.qip -del *.ddb -pause diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/Pleiads_MiST.sv b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/Pleiads_MiST.sv deleted file mode 100644 index 19316834..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/Pleiads_MiST.sv +++ /dev/null @@ -1,169 +0,0 @@ -//============================================================================ -// Arcade: Pleiads -// -//------------------------------------------------------------------------------- -// DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) (April 2016) -// http://darfpga.blogspot.fr -// -// -//------------------------------------------------------------------------------- - -module Pleiads_MiST -( - output LED, - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - output VGA_HS, - output VGA_VS, - output AUDIO_L, - output AUDIO_R, - input SPI_SCK, - output SPI_DO, - input SPI_DI, - input SPI_SS2, - input SPI_SS3, - input CONF_DATA0, - input CLOCK_27 -); - -`include "rtl\build_id.v" - -localparam CONF_STR = { - "Pleiads;;", - "O2,Rotate Controls,Off,On;", - "O34,Scanlines,Off,25%,50%,75%;", - "O5,Blend,Off,On;", - "T0,Reset;", - "V,v1.21.",`BUILD_DATE -}; - -wire rotate = status[2]; -wire [1:0] scanlines = status[4:3]; -wire blend = status[5]; - -assign LED = 1; -assign AUDIO_R = AUDIO_L; - -wire clk_sys, clk_22; -wire pll_locked; -pll pll( - .inclk0(CLOCK_27), - .areset(0), - .c0(clk_sys), - .c1(clk_22) - ); - -wire [31:0] status; -wire [1:0] buttons; -wire [1:0] switches; -wire [7:0] joystick_0; -wire [7:0] joystick_1; -wire scandoublerD; -wire ypbpr; -wire [11:0] audio; -wire hb1, hb2, vb; -wire blankn = ~((hb1 & hb2) | vb); -wire hs, vs; -wire [1:0] r,g,b; -wire key_pressed; -wire [7:0] key_code; -wire key_strobe; - -phoenix phoenix( - .clk(clk_sys), - .reset(status[0] | buttons[1]), - .dip_switch(8'b00001111), - .btn_coin(m_coin1 | m_coin2), - .btn_player_start({m_two_players,m_one_player}), - .btn_left(m_left), - .btn_right(m_right), - .btn_barrier(m_fireB), - .btn_fire(m_fireA), - .video_r(r), - .video_g(g), - .video_b(b), - .video_hs(hs), - .video_vs(vs), - .video_vblank(vb), - .video_hblank_bg(hb1), - .video_hblank_fg(hb2), - .audio_select("000"), - .audio(audio) - ); - -mist_video #(.COLOR_DEPTH(2), .SD_HCNT_WIDTH(10)) mist_video( - .clk_sys(clk_22), - .SPI_SCK(SPI_SCK), - .SPI_SS3(SPI_SS3), - .SPI_DI(SPI_DI), - .R(blankn ? r : 0), - .G(blankn ? g : 0), - .B(blankn ? b : 0), - .HSync(~hs), - .VSync(~vs), - .VGA_R(VGA_R), - .VGA_G(VGA_G), - .VGA_B(VGA_B), - .VGA_VS(VGA_VS), - .VGA_HS(VGA_HS), - .ce_divider(1'b1), - .blend(blend), - .rotate({1'b1,rotate}), - .scandoubler_disable(scandoublerD), - .scanlines(scanlines), - .ypbpr(ypbpr) - ); - -user_io #( - .STRLEN(($size(CONF_STR)>>3))) -user_io( - .clk_sys (clk_sys ), - .conf_str (CONF_STR ), - .SPI_CLK (SPI_SCK ), - .SPI_SS_IO (CONF_DATA0 ), - .SPI_MISO (SPI_DO ), - .SPI_MOSI (SPI_DI ), - .buttons (buttons ), - .switches (switches ), - .scandoubler_disable (scandoublerD ), - .ypbpr (ypbpr ), - .key_strobe (key_strobe ), - .key_pressed (key_pressed ), - .key_code (key_code ), - .joystick_0 (joystick_0 ), - .joystick_1 (joystick_1 ), - .status (status ) - ); - - -dac #( - .C_bits(15)) -dac( - .clk_i(clk_sys), - .res_n_i(1), - .dac_i({audio, 3'b000}), - .dac_o(AUDIO_L) - ); - -wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF; -wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F; -wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players; - -arcade_inputs inputs ( - .clk ( clk_sys ), - .key_strobe ( key_strobe ), - .key_pressed ( key_pressed ), - .key_code ( key_code ), - .joystick_0 ( joystick_0 ), - .joystick_1 ( joystick_1 ), - .rotate ( rotate ), - .orientation ( 2'b11 ), - .joyswap ( 1'b0 ), - .oneplayer ( 1'b1 ), - .controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ), - .player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ), - .player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} ) -); - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/col_h.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/col_h.vhd deleted file mode 100644 index af04639c..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/col_h.vhd +++ /dev/null @@ -1,38 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity col_h is -port ( - clk : in std_logic; - addr : in std_logic_vector(7 downto 0); - data : out std_logic_vector(3 downto 0) -); -end entity; - -architecture prom of col_h is - type rom is array(0 to 255) of std_logic_vector(3 downto 0); - signal rom_data: rom := ( - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0100","0100","0110","0100","0100","0100","0100", - "0001","0001","0010","0010","0011","0011","0011","0011","0110","0110","0011","0001","0001","0001","0001","0001", - "0000","0000","0000","0000","0000","0000","0000","0000","0100","0001","0001","0000","0000","0100","0011","0011", - "0010","0101","0101","0100","0100","0011","0111","0111","0110","0111","0111","0101","0101","0101","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0100","0110","0011","0011","0011","0011", - "0001","0101","0010","0101","0101","0101","0101","0101","0110","0101","0011","0001","0100","0100","0100","0100", - "0000","0000","0000","0000","0000","0000","0000","0000","0100","0001","0001","0010","0010","0100","0011","0011", - "0010","0101","0101","0001","0001","0011","0111","0111","0110","0111","0111","0111","0111","0101","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0010","0010","0101","0101","0101","0101", - "0000","0001","0010","0010","0000","0000","0000","0000","0000","0010","0011","0101","0010","0010","0010","0010", - "0000","0000","0000","0000","0000","0000","0000","0000","0100","0001","0001","0000","0000","0001","0011","0011", - "0010","0101","0101","0011","0011","0100","0111","0111","0110","0111","0111","0111","0111","0010","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0100","0100","0100","0001","0001","0001","0001", - "0001","0110","0010","0101","0110","0110","0110","0110","0110","0011","0011","0001","0111","0111","0111","0111", - "0000","0000","0000","0000","0000","0000","0000","0000","0100","0001","0001","0001","0001","0001","0011","0011", - "0010","0101","0101","0100","0100","0100","0111","0111","0110","0111","0111","0101","0101","0010","0101","0101"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/col_l.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/col_l.vhd deleted file mode 100644 index 7de3ccb2..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/col_l.vhd +++ /dev/null @@ -1,38 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity col_l is -port ( - clk : in std_logic; - addr : in std_logic_vector(7 downto 0); - data : out std_logic_vector(3 downto 0) -); -end entity; - -architecture prom of col_l is - type rom is array(0 to 255) of std_logic_vector(3 downto 0); - signal rom_data: rom := ( - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0100","0101","0110","0100","0100","0100","0100", - "0001","0001","0110","0010","0011","0011","0011","0011","0110","0110","0011","0001","0001","0001","0001","0001", - "0000","0000","0000","0000","0000","0000","0000","0000","0110","0001","0001","0000","0000","0100","0011","0011", - "0110","0101","0101","0100","0100","0011","0111","0111","0110","0111","0111","0101","0101","0101","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0101","0110","0011","0011","0011","0011", - "0001","0101","0110","0101","0101","0101","0101","0101","0110","0101","0011","0011","0100","0100","0100","0100", - "0000","0000","0000","0000","0000","0000","0000","0000","0110","0001","0001","0110","0110","0100","0011","0011", - "0110","0101","0101","0001","0001","0011","0111","0111","0110","0111","0111","0111","0111","0101","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0010","0010","0010","0101","0101","0101","0101", - "0001","0001","0010","0010","0000","0000","0000","0000","0110","0010","0011","0101","0010","0010","0010","0010", - "0000","0000","0000","0000","0000","0000","0000","0000","0110","0001","0001","0000","0000","0001","0011","0011", - "0110","0101","0101","0011","0011","0100","0111","0111","0110","0111","0111","0111","0111","0010","0101","0101", - "0000","0000","0000","0000","0000","0000","0000","0000","0010","0100","0101","0111","0001","0001","0001","0001", - "0001","0110","0110","0101","0110","0110","0110","0110","0110","0011","0011","0011","0111","0111","0111","0111", - "0000","0000","0000","0000","0000","0000","0000","0000","0110","0001","0001","0011","0011","0001","0011","0011", - "0110","0101","0101","0100","0100","0100","0111","0111","0110","0111","0111","0101","0101","0010","0101","0101"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic23.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic23.vhd deleted file mode 100644 index ae4f4bd6..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic23.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity ic23 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of ic23 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7E",X"58",X"14",X"6D",X"FA",X"F0",X"E0",X"90", - X"0B",X"31",X"99",X"09",X"EB",X"FA",X"58",X"3F",X"10",X"10",X"90",X"70",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"0F",X"08",X"08",X"04",X"FF",X"FF",X"FF",X"7E",X"3F",X"1C",X"88",X"E4", - X"E0",X"F8",X"FC",X"FE",X"FE",X"FF",X"FF",X"FF",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"4A",X"0F",X"1F",X"3E",X"F4",X"D2",X"80",X"00",X"83",X"2B",X"3F",X"7E",X"F4",X"90",X"02", - X"06",X"07",X"37",X"53",X"B8",X"D8",X"24",X"D0",X"21",X"5C",X"39",X"2A",X"7C",X"EC",X"E2",X"40", - X"00",X"8A",X"AD",X"FF",X"FF",X"66",X"29",X"04",X"90",X"40",X"91",X"7F",X"FF",X"EA",X"10",X"40", - X"9A",X"7C",X"3D",X"98",X"32",X"38",X"1C",X"18",X"24",X"1C",X"38",X"10",X"39",X"5C",X"BA",X"10", - X"3E",X"99",X"FE",X"E0",X"16",X"C0",X"20",X"00",X"06",X"0F",X"1F",X"3E",X"7D",X"FB",X"F0",X"47", - X"02",X"30",X"0C",X"8E",X"1F",X"E1",X"BC",X"78",X"76",X"ED",X"BD",X"7F",X"D7",X"C9",X"E4",X"71", - X"09",X"03",X"66",X"1F",X"BA",X"64",X"58",X"30",X"E3",X"F1",X"F8",X"7C",X"7E",X"3F",X"1F",X"07", - X"17",X"1F",X"FF",X"7F",X"3F",X"9F",X"8F",X"C7",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", - X"80",X"E2",X"F4",X"5D",X"1E",X"0A",X"2A",X"10",X"08",X"62",X"78",X"BE",X"5F",X"0B",X"41",X"00", - X"24",X"4E",X"BC",X"72",X"3E",X"77",X"65",X"20",X"40",X"12",X"38",X"3C",X"9C",X"18",X"21",X"00", - X"02",X"10",X"44",X"18",X"31",X"80",X"08",X"40",X"20",X"04",X"50",X"12",X"08",X"24",X"01",X"10", - X"00",X"09",X"00",X"40",X"00",X"02",X"20",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00", - X"C0",X"E0",X"FC",X"FF",X"F8",X"E0",X"C0",X"80",X"C0",X"E0",X"C0",X"80",X"C0",X"E0",X"E0",X"C0", - X"C0",X"C0",X"E0",X"F0",X"F0",X"E0",X"C0",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"E0",X"C0",X"C0",X"C0",X"80",X"80",X"80",X"80",X"E0",X"E0",X"F0",X"F0",X"F0",X"F0",X"E0",X"E0", - X"F0",X"F0",X"F8",X"F8",X"F8",X"F8",X"F0",X"F0",X"80",X"80",X"80",X"C0",X"C0",X"C0",X"E0",X"E0", - X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"1C",X"08",X"00",X"00",X"00", - X"00",X"08",X"08",X"3E",X"08",X"08",X"00",X"00",X"08",X"08",X"1C",X"7F",X"1C",X"08",X"08",X"00", - X"44",X"AA",X"AA",X"01",X"01",X"AA",X"AA",X"44",X"44",X"AA",X"82",X"01",X"01",X"82",X"AA",X"44", - X"44",X"82",X"82",X"01",X"01",X"82",X"82",X"44",X"40",X"80",X"80",X"00",X"00",X"80",X"80",X"00", - X"3C",X"6E",X"EF",X"EF",X"EF",X"EF",X"6E",X"3C",X"3C",X"66",X"E7",X"E7",X"E7",X"E7",X"66",X"3C", - X"3C",X"66",X"C3",X"C3",X"C3",X"C3",X"66",X"3C",X"E8",X"D0",X"F0",X"5E",X"70",X"30",X"30",X"10", - X"E8",X"C8",X"E4",X"C3",X"E3",X"C4",X"E8",X"C8",X"10",X"30",X"30",X"70",X"7E",X"D0",X"F0",X"C8", - X"73",X"06",X"04",X"0C",X"1E",X"30",X"7C",X"C0",X"18",X"18",X"70",X"00",X"00",X"70",X"18",X"18", - X"C0",X"7C",X"30",X"1E",X"0C",X"04",X"06",X"73",X"E0",X"E0",X"E0",X"E0",X"C0",X"C0",X"C0",X"C0", - X"C5",X"AB",X"AD",X"9D",X"9C",X"B4",X"B4",X"F0",X"F0",X"B4",X"B4",X"9C",X"9D",X"AD",X"AB",X"C5", - X"C0",X"C0",X"C0",X"C0",X"E0",X"E0",X"E0",X"E0",X"80",X"84",X"48",X"30",X"1F",X"30",X"48",X"84", - X"18",X"24",X"24",X"24",X"24",X"24",X"24",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"90",X"F0",X"F8",X"3F",X"00",X"00",X"00",X"00",X"00",X"02",X"3C",X"CC",X"14",X"24",X"48",X"88", - X"FF",X"FF",X"C1",X"80",X"80",X"00",X"00",X"00",X"08",X"08",X"08",X"0C",X"8F",X"8E",X"C6",X"FF", - X"08",X"08",X"D0",X"E0",X"78",X"1E",X"00",X"00",X"C0",X"80",X"80",X"E0",X"1B",X"0C",X"34",X"C4", - X"FF",X"FF",X"C3",X"81",X"80",X"00",X"00",X"00",X"00",X"01",X"01",X"03",X"83",X"83",X"C7",X"FF", - X"FF",X"08",X"10",X"20",X"C0",X"C0",X"60",X"30",X"00",X"30",X"60",X"C0",X"C0",X"A0",X"10",X"08", - X"FF",X"FF",X"C7",X"83",X"81",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"81",X"83",X"C7",X"FF", - X"C0",X"00",X"00",X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"00",X"00",X"C0",X"FF", - X"1F",X"7E",X"3C",X"78",X"F0",X"FC",X"00",X"00",X"00",X"FC",X"F0",X"78",X"3C",X"FE",X"1F",X"FF", - X"1C",X"3E",X"7F",X"1F",X"7F",X"3E",X"1C",X"00",X"00",X"60",X"70",X"FF",X"70",X"60",X"00",X"00", - X"00",X"00",X"7E",X"07",X"7E",X"00",X"00",X"00",X"00",X"E0",X"F0",X"A0",X"00",X"00",X"00",X"00", - X"A0",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"F8",X"F4",X"E0",X"40",X"00",X"00",X"00",X"00", - X"00",X"00",X"60",X"80",X"10",X"00",X"00",X"00",X"0C",X"0E",X"5F",X"FB",X"B9",X"C8",X"E4",X"60", - X"00",X"0C",X"0E",X"2F",X"7F",X"7E",X"F2",X"FF",X"D0",X"A0",X"08",X"00",X"00",X"00",X"00",X"00", - X"FB",X"F0",X"D0",X"40",X"20",X"00",X"00",X"00",X"30",X"78",X"68",X"C0",X"40",X"00",X"00",X"00", - X"1E",X"3E",X"7F",X"FF",X"F5",X"F2",X"6A",X"B0",X"00",X"1C",X"3E",X"7F",X"7F",X"7A",X"FA",X"F0", - X"00",X"00",X"00",X"00",X"2A",X"00",X"00",X"00",X"00",X"00",X"00",X"2A",X"2A",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"E8",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"DC",X"08",X"00",X"00", - X"00",X"00",X"00",X"1C",X"DC",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"57",X"07",X"57",X"07",X"57",X"07",X"56",X"FC",X"55",X"00",X"55",X"00",X"55",X"00",X"55",X"FF", - X"01",X"03",X"FF",X"FF",X"57",X"07",X"57",X"07",X"00",X"00",X"FF",X"FF",X"55",X"00",X"55",X"00", - X"00",X"00",X"FC",X"FF",X"FF",X"FC",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00", - X"00",X"00",X"FF",X"00",X"AA",X"00",X"00",X"00",X"00",X"FF",X"00",X"2A",X"00",X"54",X"00",X"00", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"2A",X"00",X"00",X"00",X"00", - X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"04",X"04",X"06",X"06",X"07",X"07",X"00",X"00", - X"FF",X"FC",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"FC", - X"FF",X"6F",X"C7",X"07",X"0F",X"1F",X"3E",X"00",X"00",X"00",X"3E",X"1F",X"0F",X"07",X"C7",X"6F", - X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"79",X"00",X"F0",X"00",X"00",X"00",X"00",X"F8",X"00",X"F8",X"00",X"00",X"00",X"00",X"F0",X"00", - X"00",X"80",X"80",X"C0",X"E0",X"C0",X"80",X"80",X"00",X"80",X"80",X"C4",X"EE",X"C4",X"80",X"80", - X"00",X"80",X"80",X"CE",X"EE",X"CE",X"80",X"80",X"00",X"80",X"8E",X"DF",X"FF",X"DF",X"8E",X"80", - X"FE",X"88",X"88",X"90",X"E0",X"80",X"80",X"00",X"00",X"00",X"80",X"80",X"E0",X"90",X"88",X"88", - X"3F",X"08",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"08",X"08", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80", - X"03",X"0C",X"30",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"0C",X"30",X"C0", - X"0F",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"F0",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"0F",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"F0", - X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01",X"80",X"40",X"20",X"10",X"08",X"04",X"02",X"01", - X"00",X"00",X"00",X"00",X"C0",X"30",X"0C",X"03",X"C0",X"30",X"0C",X"03",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"0F",X"00",X"00",X"00",X"00",X"F0",X"0F",X"00",X"00", - X"00",X"00",X"F0",X"0F",X"00",X"00",X"00",X"00",X"F0",X"0F",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"C0",X"E0",X"C0",X"80",X"80",X"80",X"00",X"E0",X"C0",X"80",X"80",X"80",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"C0",X"00",X"00",X"80",X"80",X"80",X"C0",X"E0",X"C0", - X"80",X"80",X"80",X"C0",X"E0",X"C0",X"80",X"80",X"A0",X"F0",X"60",X"C0",X"80",X"80",X"80",X"00", - X"00",X"00",X"80",X"80",X"80",X"C0",X"60",X"F0",X"60",X"C0",X"80",X"80",X"80",X"00",X"00",X"00", - X"80",X"80",X"80",X"C0",X"60",X"F0",X"A0",X"F0",X"80",X"C0",X"60",X"F0",X"A0",X"F0",X"60",X"C0", - X"60",X"F0",X"A0",X"F0",X"60",X"C0",X"80",X"80",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"C0", - X"E0",X"70",X"78",X"EE",X"B8",X"EE",X"78",X"70",X"78",X"EE",X"B8",X"EE",X"78",X"70",X"E0",X"C0", - X"80",X"80",X"80",X"80",X"C0",X"C0",X"E0",X"70",X"B8",X"EE",X"78",X"70",X"E0",X"C0",X"C0",X"80", - X"80",X"80",X"C0",X"C0",X"E0",X"70",X"78",X"EE",X"78",X"70",X"E0",X"C0",X"C0",X"80",X"80",X"80", - X"C0",X"C0",X"E0",X"70",X"78",X"EE",X"B8",X"EE",X"70",X"5E",X"E0",X"E0",X"C0",X"C0",X"80",X"80", - X"00",X"80",X"80",X"C0",X"C0",X"E0",X"F0",X"5E",X"03",X"07",X"03",X"01",X"03",X"01",X"03",X"03", - X"03",X"03",X"03",X"01",X"03",X"01",X"03",X"07",X"7F",X"70",X"7F",X"D0",X"F8",X"E0",X"C0",X"80", - X"00",X"00",X"00",X"80",X"C0",X"E0",X"F8",X"D0",X"1E",X"0F",X"1E",X"0C",X"07",X"03",X"0F",X"07", - X"0E",X"07",X"0F",X"07",X"0F",X"03",X"07",X"0C",X"18",X"0C",X"18",X"0C",X"07",X"03",X"0F",X"07", - X"F0",X"FF",X"D0",X"F8",X"E0",X"C0",X"80",X"80",X"00",X"00",X"00",X"00",X"80",X"F0",X"A0",X"FE", - X"3C",X"1E",X"3C",X"1D",X"0F",X"07",X"0F",X"03",X"18",X"3C",X"1C",X"3E",X"1F",X"3F",X"0F",X"19", - X"F0",X"FE",X"A0",X"F0",X"80",X"00",X"00",X"00",X"80",X"80",X"80",X"C0",X"E0",X"F8",X"D0",X"FF", - X"3C",X"19",X"0F",X"3F",X"1F",X"3E",X"1C",X"3C",X"07",X"03",X"0F",X"07",X"0F",X"1D",X"3C",X"1E", - X"D0",X"F8",X"E0",X"C0",X"80",X"80",X"80",X"80",X"00",X"00",X"80",X"F0",X"A0",X"FE",X"F0",X"FF", - X"3C",X"1D",X"0F",X"07",X"0F",X"03",X"07",X"03",X"1C",X"3E",X"1F",X"3F",X"0F",X"19",X"3C",X"1E", - X"A0",X"F0",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"F8",X"D0",X"FF",X"F0",X"FE", - X"0F",X"3F",X"1F",X"3E",X"1C",X"3C",X"18",X"38",X"0F",X"07",X"0F",X"1D",X"3C",X"1E",X"3C",X"19", - X"80",X"F0",X"A0",X"FE",X"F0",X"FF",X"D0",X"F8",X"0F",X"07",X"0F",X"03",X"07",X"03",X"07",X"03", - X"1F",X"3F",X"0F",X"19",X"3C",X"1E",X"3C",X"1D",X"E0",X"F8",X"D0",X"FF",X"F0",X"FE",X"A0",X"F0", - X"1F",X"3E",X"1C",X"3C",X"18",X"38",X"30",X"70",X"0F",X"1D",X"3C",X"1E",X"3C",X"19",X"0F",X"3F", - X"A0",X"FE",X"F0",X"FF",X"D0",X"F8",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"F0", - X"0F",X"19",X"3C",X"1E",X"3C",X"1D",X"0F",X"07",X"30",X"38",X"18",X"3C",X"1C",X"3E",X"1F",X"3F", - X"D0",X"FF",X"F0",X"FE",X"A0",X"F0",X"80",X"00",X"80",X"80",X"80",X"80",X"80",X"C0",X"E0",X"F8", - X"3C",X"1E",X"3C",X"19",X"0F",X"3F",X"1F",X"3E",X"07",X"03",X"07",X"03",X"0F",X"07",X"0F",X"1D", - X"30",X"B0",X"E0",X"E0",X"C0",X"E0",X"F8",X"D0",X"90",X"A0",X"F0",X"E0",X"E0",X"E0",X"F8",X"D0", - X"A4",X"EC",X"C8",X"90",X"AC",X"08",X"98",X"50",X"C4",X"8C",X"A8",X"14",X"3C",X"64",X"5C",X"98", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"02",X"06",X"06",X"0A",X"0A",X"12",X"34",X"08",X"0A",X"0F",X"0F",X"0E",X"0E",X"0E",X"06", - X"03",X"07",X"0D",X"2A",X"3A",X"3A",X"76",X"D6",X"08",X"09",X"0E",X"0F",X"0F",X"0E",X"0C",X"06", - X"48",X"6C",X"3C",X"1C",X"1E",X"0E",X"06",X"02",X"00",X"80",X"80",X"60",X"30",X"98",X"90",X"D8", - X"8E",X"C6",X"44",X"56",X"72",X"2B",X"0B",X"06",X"00",X"80",X"E0",X"A0",X"B8",X"1C",X"1C",X"08", - X"0A",X"01",X"0C",X"04",X"0E",X"0E",X"0D",X"0C",X"0E",X"07",X"09",X"00",X"08",X"0C",X"0D",X"0F", - X"03",X"03",X"03",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"03",X"03", - X"0C",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"0F",X"07",X"0E",X"06",X"0E",X"0C",X"0C",X"0C", - X"08",X"08",X"0C",X"0C",X"0C",X"0C",X"0E",X"06",X"80",X"C0",X"C0",X"C0",X"60",X"60",X"60",X"70", - X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"07",X"03",X"07",X"03",X"03",X"03",X"03",X"03", - X"C0",X"C0",X"60",X"60",X"60",X"70",X"30",X"38",X"C0",X"C0",X"80",X"80",X"80",X"00",X"00",X"00", - X"18",X"38",X"30",X"70",X"60",X"60",X"60",X"C0",X"03",X"03",X"03",X"03",X"03",X"03",X"07",X"03", - X"00",X"01",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"00",X"00", - X"60",X"60",X"60",X"70",X"30",X"38",X"18",X"3C",X"30",X"70",X"60",X"60",X"60",X"C0",X"C0",X"C0", - X"03",X"03",X"03",X"03",X"07",X"03",X"07",X"03",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"03", - X"03",X"03",X"03",X"03",X"03",X"01",X"01",X"01",X"60",X"70",X"30",X"38",X"18",X"3C",X"1C",X"3E", - X"80",X"80",X"80",X"C0",X"C0",X"C0",X"60",X"60",X"60",X"60",X"60",X"C0",X"C0",X"C0",X"80",X"80", - X"03",X"03",X"07",X"03",X"07",X"03",X"0F",X"07",X"01",X"01",X"03",X"03",X"03",X"03",X"03",X"03", - X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"0F",X"03",X"07",X"03",X"07",X"03",X"03",X"03", - X"00",X"00",X"00",X"08",X"08",X"08",X"08",X"08",X"1C",X"3C",X"18",X"38",X"30",X"70",X"60",X"60", - X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00", - X"80",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"E0",X"C0",X"C0",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80", - X"00",X"00",X"80",X"80",X"80",X"80",X"C0",X"C0",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic24.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic24.vhd deleted file mode 100644 index aa0a30df..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic24.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity ic24 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of ic24 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"B1",X"E0",X"A0",X"88",X"60",X"84",X"00", - X"00",X"01",X"08",X"01",X"88",X"44",X"F4",X"C8",X"18",X"1C",X"9C",X"FE",X"FE",X"7E",X"1E",X"00", - X"00",X"78",X"7E",X"7F",X"7F",X"38",X"38",X"1C",X"20",X"10",X"88",X"C1",X"E1",X"70",X"38",X"1C", - X"00",X"00",X"20",X"90",X"48",X"24",X"90",X"48",X"0E",X"07",X"03",X"01",X"00",X"00",X"00",X"00", - X"00",X"00",X"02",X"0C",X"18",X"20",X"00",X"00",X"00",X"00",X"00",X"0E",X"24",X"00",X"00",X"00", - X"00",X"02",X"02",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"28",X"60",X"C0",X"00", - X"00",X"00",X"00",X"46",X"23",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"68",X"00",X"00",X"00", - X"00",X"00",X"08",X"08",X"10",X"08",X"08",X"00",X"00",X"08",X"08",X"00",X"10",X"08",X"00",X"00", - X"C8",X"F0",X"44",X"00",X"00",X"80",X"00",X"00",X"5F",X"7F",X"FF",X"FF",X"FE",X"FD",X"FF",X"FC", - X"00",X"00",X"00",X"04",X"02",X"0E",X"13",X"27",X"08",X"56",X"13",X"00",X"40",X"00",X"40",X"00", - X"00",X"00",X"01",X"08",X"11",X"03",X"07",X"1D",X"0E",X"07",X"13",X"09",X"04",X"02",X"00",X"00", - X"10",X"00",X"80",X"C4",X"E2",X"71",X"38",X"1C",X"00",X"00",X"00",X"00",X"80",X"C0",X"60",X"30", - X"00",X"40",X"40",X"14",X"08",X"00",X"00",X"00",X"00",X"00",X"20",X"18",X"02",X"00",X"00",X"00", - X"00",X"04",X"00",X"3C",X"14",X"20",X"00",X"00",X"00",X"00",X"10",X"08",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"60",X"3C",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00", - X"00",X"00",X"08",X"1C",X"08",X"00",X"00",X"00",X"00",X"00",X"1C",X"1C",X"1C",X"00",X"00",X"00", - X"BB",X"55",X"55",X"E6",X"E6",X"55",X"55",X"BB",X"BB",X"55",X"65",X"C2",X"C2",X"65",X"55",X"BB", - X"BB",X"65",X"41",X"80",X"80",X"41",X"65",X"BB",X"83",X"01",X"00",X"80",X"80",X"00",X"01",X"83", - X"3C",X"42",X"91",X"91",X"91",X"91",X"42",X"3C",X"3C",X"42",X"99",X"99",X"99",X"99",X"42",X"3C", - X"3C",X"42",X"99",X"BD",X"BD",X"99",X"42",X"3C",X"98",X"90",X"D0",X"51",X"70",X"30",X"30",X"10", - X"18",X"18",X"1C",X"1F",X"1F",X"1C",X"18",X"18",X"10",X"30",X"30",X"70",X"51",X"D0",X"90",X"98", - X"8F",X"FE",X"FC",X"FC",X"F8",X"F0",X"E0",X"C0",X"87",X"87",X"8F",X"FC",X"FF",X"8C",X"87",X"87", - X"C0",X"E0",X"F0",X"F8",X"FC",X"FC",X"FE",X"8F",X"E0",X"E0",X"E0",X"E0",X"C0",X"C0",X"C0",X"C0", - X"BB",X"D6",X"D4",X"E8",X"F8",X"D0",X"F0",X"B0",X"B0",X"F0",X"D0",X"F8",X"E8",X"D4",X"D6",X"BB", - X"C0",X"C0",X"C0",X"C0",X"E0",X"E0",X"E0",X"E0",X"80",X"84",X"C8",X"F0",X"F0",X"F0",X"C8",X"84", - X"18",X"3C",X"3C",X"3C",X"3C",X"3C",X"3C",X"18",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"EC",X"EE",X"FF",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"E0",X"D0",X"B0",X"74", - X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"0F",X"0F",X"0C",X"0F",X"07",X"07", - X"F0",X"F4",X"EC",X"FE",X"7E",X"1E",X"00",X"00",X"C0",X"C0",X"E0",X"00",X"E0",X"F0",X"C8",X"38", - X"07",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"03",X"03",X"03",X"07",X"07", - X"00",X"F0",X"E8",X"D8",X"B0",X"F0",X"70",X"30",X"00",X"30",X"70",X"F0",X"B8",X"D8",X"E8",X"F0", - X"07",X"07",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"07",X"07", - X"0C",X"18",X"31",X"79",X"01",X"01",X"FF",X"FF",X"00",X"00",X"00",X"78",X"30",X"18",X"0C",X"00", - X"00",X"F8",X"00",X"00",X"00",X"FC",X"FF",X"FF",X"00",X"FC",X"00",X"00",X"00",X"F8",X"00",X"FC", - X"DC",X"3E",X"7F",X"FF",X"7F",X"3E",X"DC",X"00",X"00",X"60",X"70",X"00",X"70",X"60",X"00",X"00", - X"E0",X"78",X"00",X"F8",X"00",X"78",X"E0",X"00",X"0E",X"5E",X"0C",X"58",X"F8",X"F0",X"B0",X"80", - X"FE",X"F8",X"FC",X"FE",X"7E",X"3C",X"30",X"00",X"6F",X"DF",X"FE",X"FE",X"EE",X"CC",X"00",X"00", - X"37",X"7F",X"9E",X"78",X"FC",X"FC",X"B8",X"90",X"00",X"00",X"00",X"04",X"26",X"37",X"9F",X"FF", - X"00",X"00",X"00",X"02",X"04",X"29",X"0D",X"12",X"EF",X"7E",X"FE",X"FC",X"7C",X"30",X"00",X"00", - X"2E",X"7F",X"EF",X"FE",X"FA",X"78",X"30",X"00",X"02",X"07",X"17",X"3E",X"B8",X"FC",X"EC",X"40", - X"00",X"18",X"00",X"0C",X"2A",X"9D",X"95",X"EF",X"00",X"00",X"14",X"00",X"28",X"05",X"0F",X"3F", - X"00",X"00",X"00",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00", - X"00",X"00",X"00",X"1C",X"1C",X"1C",X"00",X"00",X"00",X"00",X"08",X"1C",X"3E",X"1C",X"08",X"00", - X"00",X"00",X"1C",X"3E",X"3E",X"3E",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"F8",X"F8",X"F8",X"F8",X"F8",X"F8",X"F8",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00", - X"FE",X"FC",X"00",X"00",X"F8",X"F8",X"F8",X"F8",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"00",X"00",X"00",X"50",X"50",X"03",X"FC",X"00",X"00",X"00",X"00",X"54",X"54",X"00",X"00",X"FF", - X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"00",X"00",X"54",X"54",X"00",X"54",X"54",X"00",X"FF",X"00",X"FF",X"FF",X"FF",X"00",X"00",X"00", - X"FF",X"00",X"00",X"00",X"2A",X"00",X"00",X"FF",X"04",X"04",X"06",X"06",X"07",X"07",X"FF",X"00", - X"F0",X"00",X"00",X"30",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"C0",X"00",X"30",X"00",X"00", - X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"3F",X"00",X"3F",X"00",X"00",X"00",X"01",X"00",X"00", - X"1F",X"F0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"F0", - X"7E",X"3F",X"FF",X"7F",X"7C",X"70",X"60",X"00",X"00",X"00",X"60",X"70",X"7C",X"7F",X"FF",X"3F", - X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00",X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00", - X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00",X"00",X"00",X"0E",X"1F",X"1F",X"1F",X"0E",X"00", - X"F7",X"81",X"81",X"82",X"02",X"84",X"A8",X"E0",X"00",X"E0",X"98",X"84",X"02",X"82",X"81",X"81", - X"77",X"40",X"40",X"20",X"20",X"10",X"0C",X"03",X"00",X"03",X"0C",X"10",X"20",X"20",X"40",X"40", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"80",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"00", - X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"40",X"10",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"10",X"40",X"10",X"00",X"00",X"00",X"10",X"40",X"10",X"00",X"00", - X"00",X"10",X"40",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"16",X"40",X"16",X"00",X"00",X"00",X"16",X"40",X"16",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"16",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"96",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"80",X"00",X"00",X"96",X"40",X"96",X"80",X"AE",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"AE",X"00",X"04",X"00",X"00",X"02",X"00",X"02",X"00", - X"00",X"00",X"02",X"00",X"02",X"00",X"00",X"04",X"8F",X"80",X"8F",X"20",X"18",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"19",X"00",X"19",X"03",X"00",X"00",X"0C",X"00", - X"0C",X"00",X"0C",X"00",X"0C",X"00",X"00",X"03",X"17",X"03",X"17",X"03",X"00",X"00",X"0C",X"00", - X"00",X"0F",X"20",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"40",X"1E", - X"33",X"01",X"33",X"02",X"00",X"00",X"0C",X"00",X"00",X"30",X"00",X"30",X"00",X"30",X"00",X"06", - X"00",X"1E",X"40",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"0F", - X"33",X"06",X"00",X"30",X"00",X"30",X"00",X"30",X"06",X"00",X"0C",X"00",X"00",X"02",X"33",X"01", - X"20",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"40",X"1E",X"00",X"0F", - X"33",X"02",X"00",X"00",X"0C",X"00",X"06",X"00",X"00",X"30",X"00",X"30",X"00",X"06",X"33",X"01", - X"40",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"20",X"0F",X"00",X"1E", - X"00",X"30",X"00",X"30",X"00",X"30",X"00",X"00",X"0C",X"00",X"00",X"02",X"33",X"01",X"33",X"06", - X"00",X"30",X"40",X"1E",X"00",X"0F",X"20",X"18",X"00",X"00",X"0C",X"00",X"06",X"00",X"06",X"00", - X"00",X"30",X"00",X"06",X"33",X"01",X"33",X"02",X"00",X"18",X"20",X"0F",X"00",X"1E",X"40",X"30", - X"00",X"30",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"02",X"33",X"01",X"33",X"06",X"00",X"30", - X"40",X"1E",X"00",X"0F",X"20",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30", - X"00",X"06",X"33",X"01",X"33",X"02",X"00",X"00",X"00",X"00",X"00",X"30",X"00",X"30",X"00",X"30", - X"20",X"0F",X"00",X"1E",X"40",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18", - X"33",X"01",X"33",X"06",X"00",X"30",X"00",X"30",X"06",X"00",X"06",X"00",X"0C",X"00",X"00",X"02", - X"F0",X"F0",X"E0",X"E0",X"00",X"00",X"18",X"20",X"F0",X"E0",X"F0",X"60",X"60",X"00",X"18",X"20", - X"BC",X"FC",X"F8",X"F2",X"EC",X"F8",X"F8",X"F0",X"FC",X"FC",X"FC",X"F4",X"FC",X"FC",X"FC",X"F8", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"02",X"16",X"06",X"0E",X"0E",X"1E",X"3C",X"00",X"02",X"03",X"03",X"03",X"03",X"01",X"01", - X"03",X"07",X"4F",X"2E",X"3E",X"3E",X"7E",X"FE",X"00",X"01",X"03",X"03",X"03",X"03",X"03",X"01", - X"78",X"7C",X"3C",X"1C",X"1E",X"0E",X"26",X"02",X"00",X"80",X"80",X"E0",X"F0",X"F8",X"F4",X"F8", - X"FE",X"FE",X"73",X"7E",X"7E",X"AF",X"0F",X"06",X"00",X"80",X"E4",X"E0",X"F8",X"FC",X"FC",X"F8", - X"02",X"07",X"07",X"07",X"03",X"03",X"01",X"00",X"02",X"03",X"07",X"07",X"07",X"07",X"07",X"03", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"00",X"0C",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"00",X"06",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"06",X"00",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"00",X"30", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"06",X"00",X"06",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"00",X"06",X"00",X"06",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic39.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic39.vhd deleted file mode 100644 index b0ce1ba8..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic39.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity ic39 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of ic39 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7C",X"12",X"12",X"12",X"7E",X"7C",X"00", - X"00",X"34",X"4A",X"4A",X"4A",X"7E",X"7E",X"00",X"00",X"24",X"42",X"42",X"42",X"7E",X"3C",X"00", - X"00",X"3C",X"42",X"42",X"42",X"7E",X"7E",X"00",X"00",X"42",X"4A",X"4A",X"4A",X"7E",X"7E",X"00", - X"00",X"02",X"0A",X"0A",X"0A",X"7E",X"7E",X"00",X"00",X"34",X"52",X"52",X"42",X"7E",X"3C",X"00", - X"00",X"7E",X"08",X"08",X"08",X"7E",X"7E",X"00",X"00",X"42",X"42",X"7E",X"7E",X"42",X"42",X"00", - X"00",X"7E",X"7E",X"7E",X"40",X"40",X"30",X"00",X"00",X"42",X"24",X"18",X"08",X"7E",X"7E",X"00", - X"00",X"40",X"40",X"40",X"40",X"7E",X"7E",X"00",X"00",X"7E",X"02",X"7C",X"02",X"7E",X"7E",X"00", - X"00",X"7E",X"20",X"18",X"04",X"7E",X"7E",X"00",X"00",X"3C",X"42",X"42",X"42",X"7E",X"3C",X"00", - X"00",X"0C",X"12",X"12",X"12",X"7E",X"7E",X"00",X"00",X"40",X"3C",X"62",X"42",X"7E",X"3C",X"00", - X"00",X"44",X"2A",X"1A",X"0A",X"7E",X"7E",X"00",X"00",X"34",X"72",X"4A",X"4A",X"4E",X"2C",X"00", - X"00",X"02",X"02",X"7E",X"7E",X"02",X"02",X"00",X"00",X"3E",X"40",X"40",X"40",X"7E",X"7E",X"00", - X"00",X"1E",X"20",X"40",X"20",X"3E",X"1E",X"00",X"00",X"3E",X"40",X"38",X"40",X"7E",X"3E",X"00", - X"00",X"42",X"26",X"1C",X"38",X"74",X"62",X"00",X"00",X"06",X"08",X"70",X"08",X"0E",X"06",X"00", - X"00",X"42",X"46",X"4E",X"5A",X"72",X"62",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", - X"00",X"00",X"18",X"24",X"24",X"18",X"00",X"00",X"00",X"00",X"42",X"66",X"3C",X"18",X"00",X"00", - X"00",X"00",X"00",X"18",X"3C",X"66",X"42",X"00",X"00",X"00",X"24",X"18",X"7E",X"18",X"24",X"00", - X"00",X"00",X"3C",X"46",X"4A",X"52",X"3C",X"00",X"00",X"00",X"40",X"40",X"7E",X"42",X"44",X"00", - X"00",X"00",X"64",X"4A",X"52",X"62",X"44",X"00",X"00",X"00",X"34",X"4A",X"4A",X"4A",X"42",X"00", - X"00",X"00",X"08",X"7E",X"08",X"08",X"0E",X"00",X"00",X"00",X"30",X"4A",X"4A",X"4A",X"4E",X"00", - X"00",X"00",X"30",X"4A",X"4A",X"4A",X"3C",X"00",X"00",X"00",X"06",X"1A",X"32",X"62",X"06",X"00", - X"00",X"00",X"34",X"4A",X"4A",X"4A",X"34",X"00",X"00",X"00",X"3C",X"52",X"52",X"52",X"0C",X"00", - X"00",X"00",X"60",X"F8",X"FF",X"F8",X"60",X"00",X"00",X"00",X"08",X"08",X"08",X"08",X"08",X"00", - X"3C",X"42",X"81",X"81",X"81",X"81",X"42",X"3C",X"00",X"18",X"3C",X"66",X"66",X"3C",X"18",X"00", - X"00",X"3C",X"42",X"5A",X"5A",X"42",X"3C",X"00",X"00",X"00",X"06",X"09",X"51",X"01",X"02",X"00", - X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"FF", - X"00",X"40",X"12",X"4B",X"A7",X"14",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"C0",X"FF",X"C0", - X"80",X"50",X"2C",X"54",X"A3",X"04",X"10",X"40",X"00",X"00",X"00",X"00",X"C0",X"FF",X"C0",X"00", - X"AB",X"55",X"23",X"0C",X"04",X"10",X"00",X"00",X"00",X"00",X"00",X"C0",X"FF",X"C0",X"00",X"00", - X"00",X"00",X"C0",X"FF",X"C0",X"00",X"00",X"00",X"00",X"00",X"10",X"04",X"0C",X"02",X"AA",X"5D", - X"00",X"C0",X"FF",X"C0",X"00",X"00",X"00",X"00",X"1D",X"23",X"48",X"0C",X"00",X"00",X"00",X"00", - X"C0",X"FF",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"08",X"80",X"11",X"2B", - X"FF",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0", - X"FF",X"7F",X"7C",X"78",X"78",X"00",X"00",X"00",X"00",X"00",X"78",X"78",X"7C",X"7F",X"FF",X"FF", - X"7F",X"7C",X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"7C",X"7F",X"FF",X"FF",X"FF", - X"7C",X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"7C",X"7F",X"FF",X"FF",X"FF",X"7F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"7E",X"FF",X"FF",X"FF",X"7E",X"78", - X"78",X"7E",X"FF",X"FF",X"FF",X"7E",X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"7F",X"FF",X"FF",X"FF",X"7F",X"7C",X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"7C", - X"FF",X"FF",X"FF",X"7F",X"7C",X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"7C",X"7F", - X"FF",X"FF",X"7F",X"7C",X"78",X"78",X"00",X"00",X"00",X"00",X"00",X"78",X"78",X"7C",X"7F",X"FF", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", - X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00", - X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"00",X"03",X"0E",X"03",X"00", - X"00",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"03",X"0E",X"03",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"30",X"E0",X"30",X"00", - X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"30",X"E0",X"30",X"00",X"00",X"00",X"00",X"00", - X"03",X"03",X"FF",X"FF",X"03",X"03",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E", - X"FF",X"FF",X"03",X"03",X"07",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"03",X"03", - X"03",X"03",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"03",X"03",X"FF",X"FF", - X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"03",X"03",X"FF",X"FF",X"03",X"03", - X"0C",X"0C",X"FC",X"FC",X"0C",X"0C",X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38", - X"FC",X"FC",X"0C",X"0C",X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"0C", - X"0C",X"0C",X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"0C",X"FC",X"FC", - X"38",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"38",X"0C",X"0C",X"FC",X"FC",X"0C",X"0C", - X"06",X"0F",X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C", - X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F", - X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F", - X"07",X"05",X"02",X"02",X"02",X"07",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F",X"0F",X"06", - X"00",X"18",X"3F",X"3F",X"18",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03", - X"3F",X"3F",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18", - X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"3F",X"3F", - X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"18",X"3F",X"3F",X"18",X"00", - X"30",X"30",X"F0",X"F0",X"30",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0", - X"F0",X"F0",X"30",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"30", - X"30",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"30",X"F0",X"F0", - X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"30",X"F0",X"F0",X"30",X"30", - X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80", - X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0", - X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0", - X"00",X"00",X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7B",X"87", - X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"09",X"01",X"01",X"09",X"0E",X"00",X"00", - X"22",X"22",X"03",X"03",X"22",X"22",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"7F", - X"04",X"08",X"0F",X"0F",X"08",X"84",X"87",X"7B",X"00",X"00",X"00",X"00",X"7F",X"7F",X"00",X"00", - X"00",X"00",X"FF",X"FF",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03", - X"FF",X"FF",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00", - X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"FF",X"FF", - X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"FF",X"FF",X"00",X"00", - X"78",X"7C",X"7C",X"7C",X"7C",X"78",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30", - X"7C",X"7C",X"7C",X"78",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"78",X"7C", - X"7C",X"78",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"78",X"7C",X"7C",X"7C", - X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"78",X"7C",X"7C",X"7C",X"7C",X"78", - X"E0",X"F0",X"F0",X"F0",X"F0",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0", - X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0", - X"F0",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"F0",X"F0", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"80", - X"1E",X"1F",X"1F",X"1F",X"1F",X"1E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C", - X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0", - X"07",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"07",X"07",X"07",X"07", - X"00",X"00",X"08",X"04",X"08",X"14",X"08",X"00",X"00",X"00",X"08",X"26",X"10",X"26",X"0C",X"00", - X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"2C",X"00",X"4D",X"20",X"14",X"00", - X"07",X"07",X"07",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"07",X"07", - X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01", - X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"07",X"07",X"07",X"07",X"07",X"07", - X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E", - X"0F",X"0F",X"0F",X"0F",X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"0F",X"0F", - X"1F",X"1F",X"1E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"1E",X"1F",X"1F",X"1F",X"1F", - X"0E",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0E",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"14",X"20",X"05",X"2A",X"00",X"32",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"8C",X"C2",X"C0",X"F0",X"3A",X"38",X"0C",X"46",X"0C",X"80",X"FC",X"FF",X"F0",X"82",X"F0",X"38", - X"05",X"1C",X"78",X"F2",X"F0",X"C4",X"98",X"72",X"3F",X"3D",X"2D",X"66",X"26",X"43",X"12",X"20", - X"3B",X"3B",X"75",X"EE",X"F5",X"3B",X"7B",X"9F",X"20",X"09",X"2C",X"84",X"44",X"ED",X"6D",X"7F", - X"E2",X"80",X"0C",X"1E",X"1E",X"8C",X"00",X"00",X"F8",X"78",X"B0",X"60",X"F3",X"DB",X"D8",X"30", - X"0C",X"1E",X"0C",X"80",X"C0",X"C0",X"64",X"B2",X"77",X"27",X"03",X"20",X"00",X"08",X"1C",X"08", - X"EF",X"F9",X"77",X"37",X"7C",X"DF",X"EB",X"7D",X"20",X"41",X"04",X"31",X"7B",X"71",X"33",X"6F", - X"00",X"00",X"04",X"00",X"24",X"0E",X"04",X"00",X"00",X"06",X"16",X"00",X"02",X"00",X"00",X"00", - X"00",X"00",X"40",X"00",X"00",X"68",X"00",X"00",X"00",X"60",X"F4",X"60",X"00",X"20",X"00",X"00", - X"B8",X"FC",X"4C",X"F8",X"F0",X"C8",X"C0",X"80",X"FC",X"3E",X"D6",X"DB",X"FB",X"F7",X"FE",X"DC", - X"C0",X"E8",X"E0",X"70",X"F8",X"F4",X"2C",X"F8",X"9F",X"BF",X"77",X"F7",X"E6",X"FC",X"F0",X"E2", - X"C0",X"E2",X"B8",X"9E",X"E7",X"97",X"D7",X"DF",X"E3",X"F3",X"7E",X"1E",X"0C",X"00",X"30",X"30", - X"00",X"C2",X"C0",X"18",X"3C",X"3E",X"62",X"C3",X"EB",X"FF",X"5F",X"DD",X"C3",X"B2",X"BE",X"1C", - X"1C",X"BD",X"E7",X"E3",X"D9",X"FD",X"FF",X"CF",X"30",X"FC",X"BE",X"3E",X"6E",X"DC",X"70",X"E0", - X"7E",X"77",X"B7",X"B7",X"77",X"EF",X"BE",X"BC",X"B0",X"E8",X"3C",X"9E",X"EE",X"EC",X"E8",X"FC", - X"7C",X"CF",X"F7",X"FE",X"6E",X"0F",X"0F",X"06",X"1F",X"7D",X"FB",X"B7",X"F3",X"D9",X"6F",X"3F", - X"0F",X"07",X"1C",X"7D",X"6B",X"3F",X"7F",X"3F",X"00",X"00",X"00",X"02",X"10",X"00",X"2E",X"0F", - X"6F",X"37",X"1F",X"14",X"0F",X"2F",X"07",X"03",X"37",X"7E",X"DF",X"DB",X"DB",X"69",X"3C",X"6F", - X"03",X"03",X"2B",X"1E",X"1E",X"25",X"3F",X"3B",X"F3",X"F3",X"F9",X"DF",X"6F",X"27",X"9F",X"0F", - X"0F",X"1F",X"3F",X"67",X"ED",X"D9",X"DB",X"FB",X"03",X"6E",X"F3",X"E7",X"F1",X"FE",X"1F",X"03", - X"B1",X"59",X"0C",X"24",X"02",X"00",X"00",X"00",X"77",X"CF",X"BB",X"80",X"EF",X"77",X"FA",X"3E", - X"01",X"00",X"02",X"04",X"7D",X"59",X"B7",X"FE",X"CB",X"F7",X"FF",X"FF",X"6C",X"9F",X"F3",X"7C", - X"6E",X"7F",X"07",X"FB",X"FD",X"BD",X"9F",X"DF",X"FF",X"FF",X"FE",X"63",X"CB",X"9D",X"FF",X"F3", - X"3C",X"FE",X"CF",X"BD",X"BD",X"F3",X"7E",X"18",X"19",X"3C",X"7E",X"5E",X"66",X"7E",X"9C",X"00", - X"06",X"00",X"78",X"7C",X"65",X"3C",X"00",X"02",X"00",X"01",X"18",X"3C",X"3C",X"18",X"02",X"40"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic40.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic40.vhd deleted file mode 100644 index 41a5854e..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/ic40.vhd +++ /dev/null @@ -1,150 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity ic40 is -port ( - clk : in std_logic; - addr : in std_logic_vector(10 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of ic40 is - type rom is array(0 to 2047) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"18",X"7E",X"18",X"24",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"F0",X"00",X"00",X"1F",X"00",X"00",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"24",X"42",X"42",X"3C",X"00",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", - X"00",X"00",X"3C",X"3C",X"3C",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", - X"00",X"00",X"26",X"05",X"2A",X"A4",X"50",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", - X"00",X"40",X"B4",X"19",X"85",X"52",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00", - X"8D",X"17",X"00",X"44",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"08",X"04",X"40",X"0B",X"06", - X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"57",X"A2",X"4C",X"04",X"10",X"00",X"00",X"00", - X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"04",X"0C",X"02",X"52",X"BD", - X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"C3", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"C3",X"00", - X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"C3",X"00",X"00", - X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"C3",X"00",X"00",X"00", - X"00",X"00",X"00",X"C3",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", - X"00",X"00",X"C3",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00", - X"00",X"C3",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"C3",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", - X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00", - X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00", - X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"03",X"0E",X"03",X"00",X"00",X"00",X"00",X"00",X"0E",X"00",X"00", - X"00",X"00",X"03",X"0E",X"03",X"00",X"00",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"30",X"E0",X"30",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00", - X"00",X"00",X"30",X"E0",X"30",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", - X"0C",X"0C",X"80",X"80",X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"80",X"80",X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0C", - X"0C",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0C",X"80",X"80", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0C",X"0C",X"80",X"80",X"0C",X"0C", - X"30",X"30",X"00",X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30", - X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00",X"30",X"30", - X"06",X"0F",X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C", - X"1F",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F", - X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F", - X"07",X"05",X"02",X"02",X"05",X"07",X"00",X"00",X"00",X"00",X"06",X"0F",X"1F",X"1F",X"0F",X"06", - X"00",X"18",X"3C",X"3C",X"18",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03",X"00",X"00", - X"3C",X"3C",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18", - X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"3C",X"3C", - X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"18",X"3C",X"3C",X"18",X"00", - X"C0",X"C0",X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0", - X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"00",X"00",X"C0",X"C0", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"78",X"84", - X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"09",X"01",X"01",X"09",X"0E",X"00",X"00", - X"22",X"22",X"02",X"02",X"22",X"22",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60", - X"07",X"0B",X"08",X"08",X"0B",X"87",X"84",X"78",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"00", - X"03",X"03",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03", - X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03", - X"00",X"30",X"00",X"00",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"82",X"82",X"B2",X"84",X"48",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"48",X"84",X"B2", - X"B3",X"86",X"CC",X"78",X"30",X"00",X"00",X"00",X"00",X"30",X"78",X"CC",X"86",X"B3",X"83",X"83", - X"48",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"48",X"84",X"82",X"82",X"82",X"82",X"84", - X"00",X"C0",X"00",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", - X"CC",X"18",X"30",X"E0",X"C0",X"00",X"00",X"00",X"00",X"C0",X"E0",X"30",X"18",X"CC",X"0C",X"0C", - X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20",X"20",X"20",X"20",X"40", - X"00",X"0C",X"00",X"00",X"0C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"30",X"60",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"60",X"30",X"30",X"30", - X"0B",X"08",X"0C",X"07",X"03",X"00",X"00",X"00",X"00",X"03",X"07",X"0C",X"08",X"0B",X"08",X"08", - X"00",X"00",X"08",X"10",X"22",X"14",X"00",X"00",X"00",X"00",X"1C",X"22",X"2A",X"02",X"14",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"08",X"12",X"69",X"2A",X"04",X"08", - X"08",X"08",X"0B",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"08",X"0B", - X"06",X"06",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"06",X"06",X"06",X"06", - X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"08",X"0B",X"08",X"08",X"0B",X"08", - X"8C",X"6C",X"10",X"10",X"6C",X"8C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"10",X"10",X"2C",X"4C",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"6C", - X"4C",X"8C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"4C",X"20",X"20", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"4C",X"2C",X"10",X"10",X"6C",X"8C", - X"E3",X"00",X"00",X"00",X"00",X"E3",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C", - X"E0",X"00",X"10",X"10",X"08",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"1C", - X"CC",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"CC",X"30",X"30", - X"00",X"10",X"0A",X"55",X"02",X"55",X"22",X"08",X"07",X"08",X"10",X"10",X"00",X"E0",X"1C",X"03", - X"00",X"80",X"40",X"20",X"10",X"08",X"44",X"00",X"04",X"00",X"80",X"EA",X"80",X"01",X"A0",X"10", - X"44",X"00",X"10",X"62",X"C0",X"80",X"08",X"20",X"12",X"09",X"20",X"04",X"80",X"42",X"00",X"20", - X"97",X"15",X"0A",X"51",X"1B",X"24",X"0E",X"0B",X"24",X"80",X"28",X"80",X"04",X"04",X"01",X"2A", - X"00",X"10",X"00",X"4C",X"0C",X"00",X"00",X"20",X"80",X"C0",X"42",X"80",X"21",X"62",X"E0",X"C0", - X"00",X"4C",X"01",X"00",X"08",X"00",X"84",X"C0",X"00",X"00",X"00",X"20",X"02",X"40",X"08",X"00", - X"06",X"0E",X"18",X"98",X"03",X"20",X"14",X"02",X"08",X"40",X"04",X"00",X"00",X"09",X"1C",X"30", - X"00",X"00",X"04",X"00",X"04",X"0E",X"14",X"00",X"00",X"10",X"00",X"02",X"00",X"00",X"00",X"00", - X"00",X"00",X"40",X"10",X"00",X"68",X"60",X"00",X"04",X"00",X"00",X"08",X"80",X"00",X"00",X"00", - X"48",X"18",X"30",X"00",X"00",X"10",X"40",X"00",X"00",X"C0",X"E8",X"2C",X"0C",X"18",X"00",X"00", - X"00",X"20",X"80",X"C0",X"00",X"DA",X"D0",X"80",X"20",X"C0",X"88",X"18",X"38",X"30",X"00",X"00", - X"00",X"00",X"40",X"70",X"18",X"68",X"28",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30", - X"00",X"C0",X"40",X"00",X"00",X"00",X"00",X"18",X"14",X"A0",X"B0",X"3A",X"3C",X"1C",X"00",X"00", - X"00",X"00",X"18",X"3C",X"36",X"62",X"00",X"00",X"20",X"60",X"60",X"E0",X"D0",X"20",X"80",X"00", - X"80",X"8C",X"4C",X"4C",X"8C",X"18",X"40",X"40",X"00",X"80",X"E0",X"60",X"30",X"30",X"10",X"00", - X"33",X"3C",X"0C",X"01",X"01",X"00",X"20",X"80",X"00",X"02",X"06",X"4C",X"0E",X"27",X"10",X"00", - X"40",X"00",X"83",X"03",X"16",X"24",X"00",X"00",X"00",X"68",X"60",X"02",X"10",X"00",X"00",X"00", - X"1C",X"1E",X"00",X"03",X"00",X"00",X"10",X"00",X"08",X"00",X"24",X"26",X"26",X"17",X"03",X"00", - X"00",X"02",X"00",X"01",X"01",X"1A",X"10",X"04",X"0C",X"0E",X"27",X"20",X"30",X"18",X"80",X"40", - X"00",X"40",X"00",X"18",X"1A",X"26",X"2C",X"0C",X"01",X"1E",X"3F",X"3E",X"1F",X"0F",X"02",X"01", - X"20",X"10",X"08",X"24",X"00",X"41",X"00",X"00",X"0E",X"39",X"FC",X"FF",X"3B",X"28",X"98",X"22", - X"01",X"00",X"02",X"00",X"08",X"40",X"31",X"CE",X"76",X"3C",X"08",X"00",X"93",X"60",X"0C",X"03", - X"11",X"00",X"38",X"04",X"02",X"40",X"E0",X"60",X"00",X"18",X"21",X"9C",X"34",X"62",X"00",X"0C", - X"00",X"00",X"30",X"46",X"4E",X"1C",X"00",X"00",X"00",X"00",X"00",X"30",X"1C",X"00",X"81",X"00", - X"20",X"00",X"00",X"30",X"19",X"00",X"40",X"00",X"00",X"01",X"00",X"98",X"18",X"00",X"00",X"00"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/prog.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/prog.vhd deleted file mode 100644 index e70019d0..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/ROM/prog.vhd +++ /dev/null @@ -1,1046 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity prog is -port ( - clk : in std_logic; - addr : in std_logic_vector(13 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of prog is - type rom is array(0 to 16383) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"FF",X"4B",X"26",X"50",X"36",X"00",X"CD", - X"52",X"05",X"21",X"00",X"18",X"0E",X"03",X"CD",X"D0",X"01",X"CD",X"80",X"00",X"3A",X"A2",X"43", - X"A7",X"CA",X"2D",X"00",X"CD",X"00",X"04",X"CD",X"00",X"27",X"C3",X"1A",X"00",X"3A",X"00",X"78", - X"E6",X"40",X"CA",X"E0",X"03",X"CD",X"40",X"27",X"00",X"CD",X"60",X"17",X"A7",X"CA",X"46",X"00", - X"CD",X"88",X"02",X"C3",X"1A",X"00",X"CD",X"E3",X"00",X"C3",X"1A",X"00",X"FF",X"FF",X"FF",X"FF", - X"26",X"68",X"36",X"00",X"26",X"60",X"36",X"00",X"26",X"58",X"36",X"00",X"CD",X"6B",X"00",X"26", - X"50",X"36",X"01",X"CD",X"6B",X"00",X"26",X"50",X"36",X"00",X"C9",X"21",X"F8",X"4B",X"3E",X"3F", - X"36",X"00",X"2B",X"BC",X"C2",X"70",X"00",X"C9",X"CD",X"00",X"08",X"C3",X"BC",X"06",X"FF",X"FF", - X"26",X"78",X"7E",X"E6",X"80",X"CA",X"80",X"00",X"7E",X"E6",X"80",X"C2",X"88",X"00",X"26",X"70", - X"7E",X"21",X"A0",X"43",X"46",X"77",X"2C",X"70",X"2E",X"9B",X"CD",X"00",X"02",X"2E",X"8F",X"7E", - X"FE",X"09",X"C8",X"D2",X"00",X"00",X"06",X"01",X"CD",X"BB",X"00",X"C8",X"2E",X"8F",X"34",X"7E", - X"C6",X"20",X"32",X"42",X"41",X"C9",X"00",X"C9",X"00",X"C9",X"FF",X"21",X"A0",X"43",X"7E",X"2F", - X"A0",X"2C",X"A6",X"C9",X"7E",X"E6",X"0F",X"F6",X"20",X"12",X"CD",X"10",X"02",X"05",X"C8",X"7E", - X"0F",X"0F",X"0F",X"0F",X"E6",X"0F",X"F6",X"20",X"12",X"CD",X"10",X"02",X"2B",X"05",X"C2",X"C4", - X"00",X"C9",X"FF",X"21",X"99",X"43",X"CD",X"00",X"02",X"01",X"01",X"00",X"CD",X"58",X"02",X"CA", - X"E1",X"01",X"01",X"02",X"00",X"11",X"1F",X"01",X"CD",X"60",X"02",X"D2",X"96",X"01",X"01",X"20", - X"01",X"CD",X"58",X"02",X"CA",X"88",X"06",X"0E",X"B0",X"CD",X"58",X"02",X"CA",X"E1",X"01",X"0E", - X"C0",X"11",X"E0",X"01",X"CD",X"60",X"02",X"D2",X"0C",X"1B",X"01",X"00",X"02",X"11",X"C0",X"03", - X"CD",X"60",X"02",X"D2",X"D0",X"1A",X"01",X"00",X"04",X"11",X"AF",X"04",X"CD",X"60",X"02",X"D2", - X"C0",X"03",X"01",X"E6",X"04",X"11",X"FF",X"FF",X"CD",X"60",X"02",X"D2",X"B0",X"03",X"C9",X"FF", - X"CD",X"A0",X"03",X"CD",X"80",X"00",X"CD",X"80",X"03",X"21",X"A3",X"43",X"36",X"02",X"2C",X"36", - X"00",X"00",X"00",X"00",X"2E",X"B8",X"06",X"08",X"CD",X"D8",X"05",X"2E",X"BA",X"36",X"10",X"2E", - X"BE",X"3A",X"00",X"78",X"E6",X"0C",X"07",X"07",X"C6",X"30",X"77",X"26",X"58",X"36",X"00",X"CD", - X"80",X"00",X"C9",X"7E",X"E6",X"7F",X"06",X"CE",X"FE",X"1F",X"D8",X"06",X"FE",X"C8",X"06",X"AE", - X"FE",X"5F",X"D8",X"06",X"FE",X"C8",X"06",X"CE",X"FE",X"7F",X"D8",X"06",X"FE",X"2D",X"7E",X"FE", - X"09",X"C0",X"06",X"7E",X"C9",X"FF",X"7E",X"E6",X"1F",X"FE",X"06",X"D8",X"5F",X"7E",X"E6",X"E0", - X"4F",X"2D",X"46",X"2E",X"A8",X"70",X"2C",X"71",X"01",X"60",X"18",X"CD",X"06",X"02",X"7E",X"2D", - X"66",X"6F",X"7B",X"56",X"2C",X"5E",X"2D",X"4F",X"85",X"6F",X"79",X"D6",X"06",X"4F",X"CA",X"C8", - X"01",X"CD",X"17",X"02",X"0D",X"C2",X"C1",X"01",X"7E",X"12",X"C3",X"40",X"17",X"C2",X"C0",X"01", - X"56",X"2C",X"5E",X"7D",X"C6",X"05",X"6F",X"06",X"1A",X"CD",X"ED",X"01",X"0D",X"C2",X"D0",X"01", - X"C9",X"CD",X"40",X"01",X"21",X"60",X"19",X"0E",X"03",X"C3",X"D0",X"01",X"FF",X"7E",X"12",X"23", - X"CD",X"17",X"02",X"05",X"C2",X"ED",X"01",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"34",X"C0",X"2D",X"34",X"2C",X"C9",X"7E",X"81",X"77",X"2D",X"7E",X"88",X"77",X"2C",X"C9",X"FF", - X"7B",X"C6",X"20",X"5F",X"D0",X"14",X"C9",X"7B",X"D6",X"20",X"5F",X"D0",X"15",X"C9",X"FF",X"FF", - X"AF",X"7E",X"81",X"27",X"77",X"2D",X"7E",X"88",X"27",X"77",X"2D",X"7E",X"CE",X"00",X"27",X"77", - X"2C",X"2C",X"C9",X"FF",X"FF",X"FF",X"37",X"3E",X"99",X"CE",X"00",X"91",X"86",X"27",X"77",X"2D", - X"3E",X"99",X"CE",X"00",X"90",X"86",X"27",X"77",X"2D",X"3E",X"99",X"CE",X"00",X"86",X"27",X"77", - X"2C",X"2C",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"7E",X"B9",X"C0",X"2D",X"7E",X"2C",X"B8",X"C9", - X"CD",X"70",X"02",X"D8",X"CD",X"77",X"02",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"7E",X"91",X"2D",X"7E",X"98",X"2C",X"C9",X"7B",X"96",X"2D",X"7A",X"9E",X"2C",X"C9",X"FF",X"FF", - X"7D",X"B9",X"C0",X"7C",X"B8",X"C9",X"FF",X"FF",X"CD",X"40",X"01",X"21",X"C0",X"19",X"0E",X"02", - X"CD",X"D0",X"01",X"0E",X"02",X"CD",X"60",X"17",X"FE",X"02",X"DA",X"A7",X"02",X"21",X"A0",X"1B", - X"0E",X"01",X"CD",X"D0",X"01",X"0E",X"06",X"3A",X"00",X"70",X"2F",X"A1",X"C8",X"CD",X"CB",X"02", - X"CD",X"F0",X"02",X"CD",X"2E",X"03",X"CD",X"50",X"03",X"CD",X"40",X"01",X"26",X"50",X"36",X"01", - X"CD",X"40",X"01",X"26",X"50",X"36",X"00",X"C9",X"FF",X"FF",X"FF",X"0E",X"01",X"FE",X"02",X"CA", - X"D4",X"02",X"0E",X"02",X"21",X"A2",X"43",X"71",X"3A",X"00",X"78",X"E6",X"10",X"CA",X"E3",X"02", - X"79",X"07",X"4F",X"2E",X"8F",X"7E",X"91",X"77",X"C6",X"20",X"32",X"42",X"41",X"C9",X"FF",X"FF", - X"11",X"83",X"43",X"21",X"8B",X"43",X"CD",X"14",X"03",X"D4",X"20",X"03",X"1E",X"87",X"2E",X"FF", - X"CD",X"14",X"03",X"D4",X"20",X"03",X"2E",X"8B",X"11",X"41",X"41",X"06",X"06",X"CD",X"C4",X"00", - X"C9",X"FF",X"FF",X"FF",X"1A",X"96",X"1D",X"2D",X"1A",X"9E",X"1D",X"2D",X"1A",X"9E",X"C9",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23",X"1A",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"80", - X"43",X"36",X"00",X"23",X"7D",X"FE",X"88",X"C2",X"31",X"03",X"2E",X"83",X"11",X"61",X"42",X"06", - X"06",X"CD",X"C4",X"00",X"2E",X"87",X"11",X"21",X"40",X"06",X"06",X"CD",X"C4",X"00",X"C9",X"FF", - X"3A",X"00",X"78",X"E6",X"03",X"C6",X"03",X"47",X"21",X"90",X"43",X"70",X"2E",X"A2",X"7E",X"FE", - X"01",X"CA",X"67",X"03",X"2E",X"91",X"70",X"2E",X"90",X"7E",X"F6",X"20",X"32",X"A2",X"42",X"2C", - X"7E",X"F6",X"20",X"32",X"62",X"40",X"C9",X"21",X"8C",X"43",X"77",X"2C",X"77",X"C9",X"FF",X"FF", - X"21",X"3F",X"43",X"11",X"1F",X"00",X"01",X"3F",X"03",X"72",X"2B",X"72",X"2B",X"7D",X"A3",X"B8", - X"C2",X"89",X"03",X"72",X"2B",X"2B",X"2B",X"2B",X"7C",X"B9",X"C2",X"89",X"03",X"C9",X"FF",X"FF", - X"21",X"3F",X"4B",X"11",X"47",X"00",X"72",X"2B",X"72",X"2B",X"7C",X"BB",X"C2",X"A6",X"03",X"C9", - X"CD",X"73",X"01",X"21",X"A0",X"43",X"7E",X"E6",X"01",X"B0",X"77",X"C3",X"00",X"04",X"FF",X"FF", - X"7E",X"0F",X"E6",X"1C",X"FE",X"10",X"DA",X"CC",X"03",X"2F",X"E6",X"0C",X"F6",X"20",X"6F",X"26", - X"14",X"11",X"52",X"42",X"E5",X"CD",X"DC",X"07",X"E1",X"11",X"32",X"41",X"C3",X"DC",X"07",X"FF", - X"3E",X"0F",X"21",X"8C",X"43",X"77",X"32",X"00",X"60",X"3E",X"8F",X"2C",X"77",X"32",X"00",X"68", - X"3E",X"7F",X"30",X"C3",X"38",X"00",X"2E",X"BA",X"72",X"2C",X"73",X"C3",X"80",X"03",X"80",X"FF", - X"21",X"0E",X"04",X"3A",X"A4",X"43",X"07",X"85",X"6F",X"7E",X"2C",X"6E",X"67",X"E9",X"04",X"30", - X"04",X"AC",X"05",X"10",X"00",X"78",X"0A",X"EA",X"0B",X"60",X"24",X"00",X"05",X"D0",X"FF",X"FF", - X"04",X"04",X"00",X"00",X"06",X"02",X"04",X"00",X"06",X"06",X"02",X"02",X"02",X"04",X"06",X"04", - X"21",X"A4",X"43",X"36",X"01",X"2C",X"36",X"80",X"2E",X"A3",X"7E",X"36",X"00",X"FE",X"02",X"C8", - X"77",X"2D",X"7E",X"FE",X"01",X"C8",X"2C",X"7E",X"A7",X"CA",X"A0",X"04",X"2E",X"90",X"7E",X"A7", - X"C8",X"2E",X"A3",X"36",X"00",X"01",X"00",X"01",X"CD",X"60",X"04",X"C9",X"FF",X"FF",X"FF",X"FF", - X"21",X"00",X"50",X"11",X"20",X"43",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"E6",X"03",X"C2",X"66", - X"04",X"7B",X"E6",X"F0",X"D6",X"20",X"5F",X"D2",X"66",X"04",X"15",X"7A",X"FE",X"3F",X"C2",X"66", - X"04",X"11",X"80",X"43",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"FE",X"B8",X"C2",X"84",X"04",X"11", - X"C0",X"4B",X"70",X"1A",X"71",X"12",X"1C",X"7B",X"FE",X"00",X"C2",X"92",X"04",X"C9",X"FF",X"FF", - X"2E",X"A3",X"36",X"01",X"01",X"01",X"00",X"CD",X"60",X"04",X"C9",X"FF",X"21",X"A5",X"43",X"35", - X"7E",X"2D",X"36",X"02",X"A7",X"C8",X"36",X"01",X"FE",X"7F",X"CA",X"F0",X"07",X"2E",X"9A",X"36", - X"00",X"2C",X"36",X"00",X"E6",X"08",X"C2",X"E6",X"04",X"CD",X"08",X"05",X"00",X"21",X"A3",X"43", - X"7E",X"A7",X"2E",X"83",X"11",X"61",X"42",X"CA",X"DF",X"04",X"2E",X"87",X"11",X"21",X"40",X"06", - X"06",X"CD",X"C4",X"00",X"C9",X"FF",X"21",X"A3",X"43",X"7E",X"A7",X"11",X"61",X"42",X"CA",X"F4", - X"04",X"11",X"21",X"40",X"06",X"06",X"CD",X"FB",X"04",X"C9",X"FF",X"3E",X"00",X"12",X"CD",X"10", - X"02",X"05",X"C2",X"FB",X"04",X"C9",X"FF",X"FF",X"21",X"00",X"18",X"0E",X"01",X"C3",X"D0",X"01", - X"21",X"A4",X"43",X"36",X"03",X"CD",X"EA",X"05",X"CD",X"80",X"05",X"CD",X"B8",X"05",X"3A",X"BB", - X"43",X"A7",X"C8",X"C3",X"C4",X"32",X"FF",X"FF",X"FF",X"FF",X"21",X"38",X"05",X"11",X"C0",X"43", - X"06",X"04",X"CD",X"E0",X"05",X"C3",X"A0",X"09",X"0C",X"10",X"64",X"D8",X"CD",X"42",X"05",X"C3", - X"17",X"06",X"21",X"B0",X"43",X"56",X"2C",X"5E",X"21",X"40",X"1B",X"01",X"0B",X"04",X"C3",X"D6", - X"0A",X"05",X"16",X"70",X"1A",X"E6",X"08",X"C0",X"36",X"30",X"1A",X"E6",X"08",X"C8",X"36",X"0C", - X"1A",X"E6",X"08",X"C8",X"36",X"20",X"36",X"20",X"1A",X"E6",X"08",X"C0",X"C3",X"50",X"00",X"20", - X"21",X"A2",X"43",X"7E",X"A7",X"C8",X"2E",X"B5",X"3A",X"83",X"43",X"E6",X"70",X"86",X"77",X"C9", - X"21",X"B8",X"43",X"7E",X"E6",X"06",X"07",X"07",X"C6",X"98",X"6F",X"26",X"05",X"11",X"B0",X"43", - X"06",X"08",X"CD",X"E0",X"05",X"C3",X"70",X"05",X"4B",X"3F",X"1D",X"D8",X"29",X"00",X"20",X"00", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"20",X"00",X"4A",X"46",X"1B",X"40",X"29",X"80",X"0C",X"00", - X"4B",X"3F",X"1C",X"20",X"FF",X"FF",X"20",X"00",X"21",X"70",X"4B",X"06",X"08",X"36",X"04",X"2C", - X"36",X"08",X"2C",X"36",X"80",X"2C",X"36",X"80",X"2C",X"05",X"C2",X"BD",X"05",X"C9",X"FF",X"FF", - X"CD",X"F4",X"31",X"C3",X"BC",X"06",X"FF",X"FF",X"AF",X"77",X"23",X"05",X"C2",X"D9",X"05",X"C9", - X"7E",X"12",X"23",X"13",X"05",X"C2",X"E0",X"05",X"C9",X"FF",X"21",X"C4",X"43",X"06",X"3C",X"CD", - X"D8",X"05",X"21",X"50",X"43",X"06",X"30",X"CD",X"D8",X"05",X"2E",X"92",X"06",X"06",X"CD",X"D8", - X"05",X"2E",X"9A",X"06",X"04",X"CD",X"D8",X"05",X"21",X"50",X"4B",X"06",X"9C",X"C3",X"D8",X"05", - X"FF",X"FF",X"FF",X"FF",X"CD",X"50",X"06",X"AF",X"32",X"00",X"58",X"32",X"B9",X"43",X"21",X"B6", - X"43",X"35",X"C0",X"2E",X"A4",X"36",X"02",X"2E",X"B8",X"7E",X"34",X"E6",X"0F",X"C0",X"11",X"3B", - X"4A",X"01",X"0A",X"05",X"C5",X"D5",X"3E",X"00",X"12",X"13",X"05",X"C2",X"36",X"06",X"D1",X"C1", - X"CD",X"17",X"02",X"0D",X"C2",X"34",X"06",X"C9",X"AF",X"2C",X"77",X"32",X"00",X"58",X"C9",X"FF", - X"21",X"B0",X"43",X"56",X"2C",X"5E",X"2C",X"7E",X"2C",X"6E",X"67",X"7E",X"06",X"01",X"A7",X"C2", - X"64",X"06",X"23",X"46",X"FE",X"3F",X"C2",X"6B",X"06",X"23",X"46",X"4F",X"23",X"79",X"12",X"CD", - X"17",X"02",X"05",X"C2",X"6D",X"06",X"7A",X"FE",X"47",X"C2",X"5B",X"06",X"EB",X"21",X"B1",X"43", - X"35",X"2C",X"72",X"2C",X"73",X"C9",X"47",X"20",X"01",X"06",X"02",X"11",X"F0",X"42",X"21",X"B0", - X"06",X"CD",X"D6",X"0A",X"21",X"B0",X"43",X"36",X"4B",X"23",X"36",X"3A",X"23",X"36",X"16",X"23", - X"36",X"40",X"3E",X"09",X"F5",X"CD",X"50",X"06",X"F1",X"3D",X"C2",X"A4",X"06",X"C9",X"FF",X"FF", - X"60",X"70",X"61",X"00",X"C0",X"C8",X"C1",X"C9",X"A2",X"00",X"A3",X"00",X"21",X"B8",X"43",X"7E", - X"07",X"E6",X"0C",X"47",X"FE",X"0C",X"CA",X"EA",X"06",X"2C",X"2C",X"7E",X"2C",X"86",X"3D",X"FE", - X"03",X"DA",X"D6",X"06",X"3E",X"03",X"B0",X"C6",X"20",X"6F",X"26",X"04",X"46",X"3A",X"A3",X"43", - X"E6",X"01",X"B0",X"32",X"00",X"50",X"C9",X"FF",X"CD",X"F4",X"7E",X"E6",X"10",X"0F",X"0F",X"0F", - X"B0",X"47",X"2E",X"A4",X"7E",X"FE",X"07",X"C2",X"FB",X"06",X"04",X"78",X"C3",X"D7",X"06",X"FF", - X"01",X"C0",X"43",X"11",X"E0",X"43",X"CD",X"18",X"07",X"79",X"C6",X"04",X"4F",X"C6",X"20",X"5F", - X"50",X"FE",X"EC",X"C2",X"06",X"07",X"C9",X"C9",X"CD",X"20",X"07",X"C3",X"40",X"07",X"E6",X"EF", - X"0A",X"67",X"E6",X"10",X"C8",X"7C",X"E6",X"EF",X"02",X"07",X"07",X"07",X"E6",X"07",X"C6",X"38", - X"6F",X"26",X"07",X"6E",X"E9",X"6C",X"FF",X"8A",X"63",X"79",X"FF",X"9E",X"BE",X"FF",X"FF",X"FF", - X"0A",X"67",X"E6",X"08",X"C8",X"7C",X"E6",X"07",X"67",X"0F",X"0F",X"0F",X"B4",X"F6",X"18",X"02", - X"03",X"7C",X"C6",X"5B",X"6F",X"26",X"07",X"6E",X"E9",X"5E",X"0A",X"6D",X"88",X"FF",X"AA",X"D2", - X"FF",X"FF",X"FF",X"EB",X"56",X"23",X"5E",X"2B",X"AF",X"12",X"EB",X"C9",X"EB",X"EB",X"23",X"23", - X"56",X"23",X"5E",X"0A",X"12",X"0B",X"C9",X"12",X"23",X"EB",X"56",X"23",X"5E",X"2B",X"AF",X"12", - X"CD",X"17",X"02",X"AF",X"12",X"EB",X"C9",X"23",X"EB",X"23",X"23",X"56",X"23",X"5E",X"0A",X"6F", - X"26",X"14",X"7E",X"12",X"23",X"CD",X"17",X"02",X"7E",X"12",X"0B",X"C9",X"FF",X"EB",X"EB",X"56", - X"23",X"5E",X"2B",X"AF",X"12",X"13",X"12",X"EB",X"C9",X"FF",X"EB",X"23",X"23",X"56",X"23",X"5E", - X"0A",X"6F",X"26",X"14",X"7E",X"12",X"23",X"13",X"7E",X"12",X"0B",X"C9",X"23",X"13",X"EB",X"56", - X"23",X"5E",X"2B",X"AF",X"12",X"13",X"12",X"CD",X"17",X"02",X"AF",X"12",X"1B",X"12",X"EB",X"C9", - X"CD",X"4C",X"EB",X"23",X"23",X"56",X"23",X"5E",X"0A",X"6F",X"26",X"14",X"7E",X"12",X"23",X"13", - X"7E",X"12",X"23",X"1B",X"CD",X"17",X"02",X"7E",X"12",X"23",X"13",X"7E",X"12",X"0B",X"C9",X"FF", - X"3A",X"B9",X"43",X"32",X"00",X"58",X"CD",X"80",X"03",X"C3",X"2A",X"05",X"FF",X"FF",X"FF",X"FF", - X"21",X"14",X"08",X"3A",X"B8",X"43",X"07",X"E6",X"1E",X"85",X"6F",X"7E",X"2C",X"6E",X"67",X"E9", - X"FF",X"FF",X"FF",X"FF",X"06",X"14",X"08",X"34",X"22",X"80",X"34",X"00",X"05",X"3C",X"08",X"34", - X"23",X"60",X"23",X"90",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"CD",X"76",X"08",X"CD",X"F0",X"0D",X"CD",X"AB",X"23",X"21",X"92",X"43", - X"46",X"34",X"3A",X"BA",X"43",X"A7",X"CA",X"F6",X"21",X"FE",X"02",X"DC",X"58",X"0D",X"78",X"0F", - X"DA",X"64",X"08",X"CD",X"50",X"0A",X"CD",X"00",X"30",X"CD",X"08",X"0F",X"CD",X"50",X"25",X"C3", - X"40",X"0C",X"FF",X"FF",X"CD",X"1C",X"0D",X"CD",X"70",X"0D",X"CD",X"6C",X"0A",X"CD",X"78",X"0F", - X"C3",X"80",X"20",X"FF",X"FF",X"FF",X"CD",X"00",X"07",X"CD",X"86",X"08",X"CD",X"A0",X"08",X"CD", - X"A0",X"09",X"CD",X"7A",X"09",X"C9",X"21",X"EB",X"43",X"06",X"03",X"56",X"2B",X"5E",X"2B",X"72", - X"2B",X"73",X"2B",X"05",X"C2",X"8B",X"08",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"CD",X"E0",X"08",X"21",X"C4",X"43",X"CD",X"30",X"09",X"21",X"C8",X"43",X"3A",X"B8",X"43",X"E6", - X"0F",X"FE",X"05",X"CA",X"30",X"09",X"7E",X"E6",X"08",X"C2",X"64",X"09",X"C9",X"FF",X"FF",X"FF", - X"CD",X"50",X"0A",X"CD",X"00",X"30",X"CD",X"08",X"0F",X"CD",X"1C",X"0D",X"CD",X"70",X"0D",X"CD", - X"6C",X"0A",X"3A",X"92",X"43",X"0F",X"DA",X"5C",X"08",X"C3",X"6D",X"08",X"CD",X"EA",X"08",X"CD", - X"21",X"B8",X"43",X"7E",X"E6",X"0F",X"FE",X"06",X"D2",X"B0",X"22",X"2E",X"C2",X"CD",X"F8",X"08", - X"01",X"00",X"16",X"C3",X"26",X"09",X"FF",X"FF",X"3A",X"A0",X"43",X"2F",X"E6",X"60",X"C8",X"E6", - X"40",X"CA",X"0A",X"09",X"7E",X"FE",X"09",X"D8",X"35",X"C9",X"7E",X"FE",X"C0",X"D0",X"34",X"C9", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"7E",X"E6",X"07",X"81",X"4F",X"0A",X"2D",X"77",X"C9",X"FF", - X"7E",X"E6",X"08",X"C2",X"64",X"09",X"EB",X"06",X"10",X"CD",X"BB",X"00",X"C8",X"7E",X"E6",X"EF", - X"77",X"1A",X"F6",X"08",X"12",X"13",X"13",X"3A",X"C2",X"43",X"C6",X"04",X"12",X"13",X"3A",X"C3", - X"43",X"D6",X"08",X"12",X"1B",X"EB",X"01",X"20",X"16",X"CD",X"26",X"09",X"3E",X"30",X"32",X"61", - X"43",X"C9",X"FF",X"FF",X"2C",X"2C",X"2C",X"7E",X"D6",X"08",X"77",X"FE",X"1F",X"D0",X"2D",X"2D", - X"2D",X"7E",X"E6",X"F7",X"77",X"C9",X"FF",X"FF",X"7E",X"E6",X"3A",X"C2",X"43",X"47",X"E6",X"07", - X"07",X"21",X"38",X"0B",X"85",X"6F",X"78",X"96",X"32",X"9E",X"43",X"23",X"78",X"86",X"32",X"9F", - X"43",X"C9",X"32",X"9F",X"43",X"C9",X"C6",X"00",X"11",X"65",X"41",X"06",X"04",X"C3",X"C4",X"00", - X"01",X"C2",X"43",X"11",X"E2",X"43",X"CD",X"BA",X"09",X"0E",X"C6",X"1E",X"E6",X"CD",X"BA",X"09", - X"0E",X"CA",X"1E",X"EA",X"C3",X"BA",X"09",X"FF",X"FF",X"FF",X"21",X"00",X"0A",X"0A",X"E6",X"F8", - X"0F",X"0F",X"85",X"6F",X"7E",X"12",X"03",X"13",X"23",X"0A",X"E6",X"F8",X"0F",X"0F",X"0F",X"86", - X"12",X"C9",X"FF",X"FF",X"3A",X"B8",X"43",X"0F",X"0F",X"0F",X"0F",X"E6",X"07",X"3C",X"47",X"0E", - X"00",X"16",X"05",X"3A",X"BC",X"43",X"0F",X"5F",X"D2",X"F0",X"09",X"78",X"81",X"27",X"47",X"4F", - X"7B",X"15",X"C2",X"E6",X"09",X"21",X"DE",X"4B",X"71",X"2C",X"36",X"00",X"C3",X"98",X"09",X"00", - X"43",X"20",X"43",X"00",X"42",X"E0",X"42",X"C0",X"42",X"A0",X"42",X"80",X"42",X"60",X"42",X"40", - X"42",X"20",X"42",X"00",X"41",X"E0",X"41",X"C0",X"41",X"A0",X"41",X"80",X"41",X"60",X"41",X"40", - X"41",X"20",X"41",X"00",X"40",X"E0",X"40",X"C0",X"40",X"A0",X"40",X"80",X"40",X"60",X"40",X"40", - X"40",X"20",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"2C",X"2C",X"2D",X"2E",X"2D",X"2E",X"2F",X"2F",X"30",X"31",X"32",X"31",X"30",X"31",X"2C",X"33", - X"01",X"70",X"4B",X"11",X"B0",X"4B",X"C5",X"CD",X"18",X"07",X"C1",X"79",X"C6",X"04",X"4F",X"C6", - X"40",X"5F",X"50",X"FE",X"D0",X"C2",X"56",X"0A",X"C9",X"FF",X"FF",X"FF",X"01",X"70",X"4B",X"11", - X"B3",X"4B",X"C5",X"D5",X"0A",X"E6",X"18",X"CA",X"8A",X"0A",X"EB",X"56",X"2B",X"5E",X"2B",X"72", - X"2B",X"73",X"EB",X"13",X"13",X"03",X"03",X"CD",X"BA",X"09",X"D1",X"C1",X"79",X"C6",X"04",X"4F", - X"7B",X"C6",X"04",X"5F",X"FE",X"D3",X"C2",X"72",X"0A",X"C9",X"FF",X"FF",X"21",X"DB",X"4B",X"01", - X"D4",X"4B",X"0A",X"FE",X"48",X"C2",X"E6",X"0E",X"36",X"04",X"EB",X"13",X"0B",X"CD",X"BA",X"09", - X"1B",X"3E",X"49",X"12",X"3A",X"D2",X"4B",X"32",X"62",X"43",X"C9",X"FF",X"21",X"DD",X"4B",X"5E", - X"2D",X"56",X"2D",X"1A",X"C6",X"14",X"86",X"6F",X"26",X"0A",X"7E",X"12",X"3A",X"DB",X"4B",X"A7", - X"C2",X"90",X"0E",X"C9",X"FF",X"FF",X"D5",X"C5",X"7E",X"12",X"23",X"13",X"05",X"C2",X"D8",X"0A", - X"C1",X"D1",X"CD",X"17",X"02",X"0D",X"C2",X"D6",X"0A",X"C9",X"21",X"E2",X"43",X"56",X"2C",X"5E", - X"2E",X"A5",X"35",X"7E",X"CA",X"15",X"0B",X"FE",X"1F",X"DA",X"80",X"03",X"CA",X"A0",X"0B",X"D6", - X"20",X"C3",X"B8",X"0B",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"2D",X"36",X"05",X"2D",X"7E",X"C6",X"90",X"6F",X"7E",X"A7",X"C8", - X"35",X"E5",X"CD",X"67",X"03",X"E1",X"7E",X"A7",X"C8",X"2E",X"A4",X"36",X"00",X"C9",X"FF",X"FF", - X"FF",X"F0",X"E0",X"B0",X"C0",X"D0",X"C0",X"B0",X"00",X"08",X"01",X"09",X"01",X"09",X"02",X"0A", - X"02",X"0A",X"01",X"09",X"01",X"09",X"00",X"08",X"2E",X"BA",X"36",X"21",X"B8",X"43",X"7E",X"FE", - X"10",X"D8",X"78",X"87",X"27",X"47",X"7E",X"FE",X"30",X"D8",X"78",X"87",X"27",X"47",X"C9",X"FF", - X"21",X"A5",X"43",X"34",X"7E",X"FE",X"40",X"CA",X"A0",X"03",X"21",X"00",X"1A",X"0E",X"01",X"FE", - X"80",X"C2",X"95",X"0B",X"21",X"A4",X"43",X"36",X"00",X"2E",X"90",X"7E",X"2C",X"B6",X"C0",X"AF", - X"2E",X"98",X"77",X"2C",X"77",X"2E",X"A2",X"77",X"2C",X"7E",X"A7",X"C8",X"36",X"00",X"01",X"00", - X"01",X"CD",X"60",X"04",X"C9",X"CD",X"D0",X"01",X"CD",X"E4",X"01",X"C3",X"88",X"16",X"FF",X"FF", - X"21",X"B8",X"43",X"7E",X"E6",X"0E",X"C8",X"FE",X"04",X"DA",X"AD",X"0B",X"35",X"2C",X"AF",X"77", - X"32",X"00",X"58",X"C3",X"A0",X"03",X"FF",X"FF",X"0F",X"DA",X"78",X"0F",X"E6",X"7E",X"C6",X"A0", - X"6F",X"26",X"2A",X"7E",X"23",X"6E",X"67",X"FE",X"17",X"CA",X"DC",X"0B",X"01",X"1F",X"00",X"EB", - X"09",X"EB",X"01",X"04",X"03",X"C3",X"D6",X"0A",X"FF",X"FF",X"FF",X"FF",X"01",X"5D",X"00",X"EB", - X"09",X"EB",X"01",X"08",X"06",X"CD",X"EE",X"0B",X"CD",X"EE",X"0B",X"C3",X"D6",X"0A",X"7A",X"FE", - X"43",X"C0",X"7B",X"FE",X"40",X"D8",X"D6",X"20",X"5F",X"7D",X"80",X"6F",X"0D",X"C9",X"FF",X"FE", - X"7E",X"D6",X"03",X"BA",X"D0",X"C6",X"05",X"BA",X"D8",X"23",X"7E",X"2B",X"D6",X"08",X"BB",X"D0", - X"C6",X"10",X"BB",X"D8",X"2B",X"7E",X"23",X"11",X"08",X"39",X"FE",X"30",X"DA",X"2A",X"0C",X"11", - X"03",X"53",X"FE",X"C0",X"DA",X"2A",X"0C",X"11",X"15",X"1F",X"3A",X"BA",X"43",X"FE",X"02",X"D2", - X"A4",X"0E",X"3A",X"B8",X"43",X"E6",X"70",X"C6",X"10",X"83",X"5F",X"16",X"1A",X"C3",X"A4",X"0E", - X"21",X"FF",X"43",X"06",X"05",X"CD",X"8B",X"08",X"CD",X"56",X"0C",X"CD",X"6B",X"0C",X"CD",X"D8", - X"0C",X"C9",X"FF",X"FF",X"FF",X"FF",X"21",X"CC",X"43",X"E5",X"CD",X"84",X"0C",X"E1",X"7D",X"C6", - X"04",X"6F",X"FE",X"E0",X"C2",X"59",X"0C",X"C9",X"FF",X"FF",X"FF",X"01",X"CE",X"43",X"11",X"EE", - X"43",X"CD",X"BA",X"09",X"03",X"03",X"03",X"13",X"13",X"13",X"79",X"FE",X"E2",X"C2",X"71",X"0C", - X"C9",X"FF",X"FF",X"FF",X"7E",X"E6",X"08",X"C8",X"00",X"00",X"2C",X"7E",X"EE",X"04",X"77",X"2C", - X"2C",X"7E",X"C6",X"04",X"77",X"FE",X"F9",X"D2",X"6E",X"09",X"2D",X"47",X"CD",X"B4",X"0C",X"78", - X"FE",X"B0",X"D8",X"C3",X"00",X"20",X"4E",X"0A",X"EB",X"2C",X"FE",X"E8",X"D2",X"6E",X"09",X"C9", - X"FF",X"FF",X"FF",X"FF",X"FE",X"DC",X"D8",X"FE",X"E9",X"D0",X"3A",X"9F",X"43",X"BE",X"D8",X"3A", - X"9E",X"43",X"BE",X"D0",X"3E",X"04",X"32",X"A4",X"43",X"3E",X"60",X"32",X"A5",X"43",X"3E",X"FF", - X"32",X"63",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"01",X"CC",X"43",X"11",X"EC",X"43",X"C5",X"CD", - X"18",X"07",X"C1",X"79",X"C6",X"04",X"4F",X"C6",X"20",X"5F",X"50",X"A7",X"C2",X"DE",X"0C",X"C9", - X"21",X"DC",X"4B",X"36",X"49",X"2C",X"36",X"A9",X"21",X"9D",X"43",X"3A",X"DE",X"4B",X"77",X"2E", - X"A4",X"36",X"06",X"2C",X"36",X"60",X"2E",X"63",X"36",X"FF",X"2E",X"B8",X"34",X"E1",X"E1",X"C9", - X"CD",X"80",X"00",X"CD",X"A0",X"03",X"E1",X"E1",X"C9",X"FF",X"FF",X"FF",X"01",X"70",X"4B",X"21", - X"50",X"4B",X"CD",X"30",X"0D",X"0C",X"0C",X"2C",X"3E",X"90",X"B9",X"C2",X"22",X"0D",X"C9",X"FF", - X"56",X"23",X"0A",X"03",X"03",X"E6",X"08",X"C8",X"5E",X"EB",X"7E",X"07",X"C6",X"00",X"6F",X"26", - X"17",X"0A",X"86",X"02",X"03",X"23",X"0A",X"86",X"02",X"EB",X"57",X"0B",X"0A",X"B2",X"E6",X"07", - X"C0",X"34",X"C0",X"2D",X"34",X"2C",X"C9",X"EB",X"2E",X"94",X"78",X"0F",X"DA",X"61",X"0D",X"36", - X"01",X"7E",X"A7",X"C8",X"2E",X"B8",X"7E",X"E6",X"F0",X"C8",X"E1",X"C3",X"C0",X"08",X"FF",X"FF", - X"01",X"70",X"4B",X"21",X"50",X"4B",X"CD",X"86",X"0D",X"79",X"C6",X"04",X"4F",X"3E",X"90",X"B9", - X"C2",X"76",X"0D",X"C9",X"FF",X"FF",X"56",X"23",X"5E",X"23",X"0A",X"E6",X"08",X"C8",X"EB",X"7E", - X"A7",X"CA",X"D8",X"0D",X"07",X"C6",X"C0",X"6F",X"26",X"16",X"03",X"03",X"03",X"7E",X"23",X"0F", - X"DA",X"B4",X"0D",X"0F",X"DA",X"C6",X"0D",X"0A",X"0F",X"E6",X"03",X"86",X"0B",X"C3",X"CC",X"0D", - X"0F",X"E6",X"03",X"86",X"0A",X"0F",X"E6",X"03",X"86",X"67",X"0B",X"0A",X"07",X"E6",X"0C",X"84", - X"C3",X"CC",X"0D",X"E6",X"04",X"84",X"0B",X"0A",X"0F",X"E6",X"03",X"86",X"6F",X"26",X"16",X"7E", - X"0B",X"02",X"0B",X"EB",X"C9",X"7E",X"0B",X"02",X"0A",X"E6",X"F7",X"02",X"EB",X"C9",X"1B",X"1B", - X"3A",X"94",X"43",X"12",X"67",X"13",X"36",X"00",X"C9",X"12",X"6F",X"13",X"7E",X"C9",X"FF",X"FF", - X"01",X"C4",X"43",X"21",X"E6",X"43",X"CD",X"04",X"0E",X"01",X"C8",X"43",X"21",X"EA",X"43",X"CD", - X"04",X"0E",X"C9",X"CC",X"0A",X"E6",X"08",X"C8",X"7E",X"C6",X"08",X"57",X"2C",X"5E",X"1A",X"D6", - X"2C",X"FE",X"12",X"CA",X"3C",X"0E",X"DA",X"50",X"0E",X"2D",X"56",X"1A",X"FE",X"60",X"D8",X"FE", - X"D0",X"D0",X"E6",X"07",X"07",X"07",X"C6",X"C0",X"6F",X"26",X"2A",X"03",X"03",X"0A",X"E6",X"07", - X"BE",X"D0",X"23",X"BE",X"D8",X"C3",X"70",X"0E",X"FF",X"FF",X"FF",X"FF",X"AF",X"12",X"0A",X"E6", - X"F7",X"02",X"2D",X"56",X"3E",X"FF",X"32",X"66",X"43",X"06",X"88",X"C3",X"2D",X"20",X"23",X"3E", - X"FE",X"03",X"C2",X"3E",X"0E",X"E5",X"7B",X"D6",X"69",X"07",X"07",X"07",X"6F",X"26",X"3E",X"7E", - X"21",X"BC",X"43",X"B6",X"77",X"E1",X"FE",X"1F",X"CA",X"F8",X"0C",X"C3",X"3E",X"0E",X"FF",X"FF", - X"23",X"0A",X"E6",X"F8",X"86",X"57",X"03",X"0A",X"E6",X"F8",X"5F",X"21",X"70",X"4B",X"7E",X"23", - X"23",X"E6",X"08",X"C4",X"00",X"0C",X"23",X"23",X"3E",X"90",X"BD",X"C2",X"7E",X"0E",X"C9",X"FF", - X"3A",X"92",X"43",X"E6",X"0C",X"0F",X"0F",X"C6",X"48",X"6F",X"26",X"0A",X"7E",X"32",X"A6",X"49", - X"C9",X"02",X"0C",X"00",X"2B",X"2B",X"0B",X"0B",X"0B",X"0A",X"E6",X"F7",X"02",X"7E",X"E6",X"F7", - X"77",X"7D",X"C6",X"42",X"6F",X"46",X"23",X"4E",X"21",X"70",X"43",X"7E",X"E6",X"1F",X"CA",X"D5", - X"0E",X"2E",X"74",X"7E",X"E6",X"1F",X"CA",X"D5",X"0E",X"2E",X"78",X"7E",X"E6",X"1F",X"CA",X"D5", - X"0E",X"2E",X"7C",X"00",X"00",X"72",X"2C",X"73",X"2C",X"70",X"2C",X"71",X"CD",X"F0",X"0E",X"00", - X"2E",X"BA",X"35",X"E1",X"E1",X"E9",X"36",X"00",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"2E",X"64",X"7B",X"FE",X"10",X"DA",X"FA",X"0E",X"2E",X"69",X"36",X"FF",X"C9",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"21",X"E2",X"43",X"56",X"2C",X"5E",X"01",X"02", - X"02",X"CD",X"56",X"0F",X"C8",X"00",X"00",X"21",X"9E",X"43",X"7E",X"D6",X"0A",X"47",X"2C",X"4E", - X"21",X"70",X"4B",X"7E",X"2C",X"2C",X"E6",X"08",X"C4",X"38",X"0F",X"2C",X"2C",X"3E",X"90",X"BD", - X"C2",X"23",X"0F",X"C9",X"FF",X"FF",X"FF",X"FF",X"2C",X"7E",X"2D",X"FE",X"D4",X"D8",X"FE",X"E7", - X"D0",X"7E",X"B9",X"D0",X"B8",X"D8",X"CD",X"C4",X"0C",X"11",X"05",X"39",X"2B",X"2B",X"C3",X"AD", - X"0E",X"AD",X"0E",X"FF",X"FF",X"FF",X"C5",X"D5",X"1A",X"FE",X"60",X"DA",X"63",X"0F",X"FE",X"D0", - X"DA",X"72",X"0F",X"13",X"05",X"C2",X"58",X"0F",X"D1",X"C1",X"CD",X"17",X"02",X"0D",X"C2",X"56", - X"0F",X"C9",X"D1",X"C1",X"C9",X"E2",X"56",X"2C",X"21",X"70",X"43",X"CD",X"C0",X"2F",X"21",X"74", - X"43",X"CD",X"C0",X"2F",X"21",X"78",X"43",X"CD",X"C0",X"2F",X"21",X"7C",X"43",X"C3",X"C0",X"2F", - X"7E",X"E6",X"1F",X"C8",X"35",X"7E",X"E6",X"FE",X"2C",X"2C",X"56",X"2C",X"5E",X"6F",X"26",X"2A", - X"7E",X"2C",X"4E",X"6F",X"26",X"15",X"06",X"00",X"EB",X"09",X"EB",X"3E",X"A0",X"91",X"0F",X"4F", - X"06",X"35",X"C5",X"01",X"08",X"00",X"C3",X"BC",X"0F",X"C3",X"AD",X"0E",X"7A",X"FE",X"43",X"C2", - X"E9",X"0F",X"7B",X"FE",X"40",X"DA",X"E9",X"0F",X"D6",X"20",X"5F",X"2C",X"2C",X"41",X"FE",X"40", - X"DA",X"E9",X"0F",X"D6",X"20",X"5F",X"2C",X"2C",X"78",X"81",X"47",X"7B",X"FE",X"40",X"DA",X"E9", - X"0F",X"D6",X"20",X"5F",X"2C",X"2C",X"78",X"81",X"47",X"E3",X"7D",X"80",X"6F",X"E3",X"01",X"DF", - X"FF",X"EB",X"C9",X"00",X"C3",X"40",X"35",X"68",X"3E",X"05",X"32",X"96",X"43",X"C3",X"A4",X"0E", - X"05",X"1A",X"1A",X"1B",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10",X"11",X"12",X"12",X"13", - X"14",X"15",X"16",X"16",X"17",X"17",X"17",X"17",X"16",X"0F",X"0F",X"12",X"12",X"11",X"11",X"11", - X"11",X"00",X"FF",X"FF",X"05",X"1D",X"1E",X"1F",X"10",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"1A", - X"19",X"18",X"18",X"17",X"16",X"15",X"14",X"13",X"12",X"11",X"10",X"10",X"11",X"12",X"12",X"13", - X"0F",X"0F",X"15",X"16",X"16",X"16",X"17",X"17",X"17",X"17",X"00",X"FF",X"05",X"1C",X"1C",X"1C", - X"1D",X"1D",X"1E",X"1E",X"1E",X"1E",X"1F",X"1F",X"10",X"10",X"10",X"10",X"11",X"12",X"12",X"13", - X"0F",X"0F",X"0F",X"14",X"15",X"15",X"15",X"16",X"16",X"16",X"16",X"17",X"17",X"17",X"17",X"17", - X"17",X"00",X"FF",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10",X"10", - X"10",X"10",X"11",X"12",X"12",X"13",X"14",X"14",X"14",X"14",X"15",X"16",X"16",X"17",X"18",X"18", - X"18",X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"11", - X"12",X"13",X"14",X"14",X"0F",X"06",X"00",X"FF",X"05",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10", - X"10",X"11",X"12",X"13",X"14",X"14",X"14",X"14",X"04",X"02",X"02",X"02",X"02",X"03",X"1C",X"1C", - X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"11",X"12",X"12",X"13",X"14",X"14",X"06",X"00",X"FF", - X"05",X"1F",X"1F",X"1E",X"1E",X"1E",X"1D",X"1C",X"1C",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"18", - X"17",X"16",X"15",X"14",X"0F",X"06",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08", - X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"00",X"FF",X"0E",X"0E",X"0E",X"0E", - X"0E",X"0E",X"0E",X"05",X"1C",X"1B",X"1A",X"1A",X"19",X"18",X"18",X"18",X"17",X"16",X"16",X"15", - X"0F",X"0F",X"0F",X"13",X"13",X"12",X"12",X"12",X"12",X"11",X"11",X"11",X"11",X"11",X"11",X"11", - X"11",X"00",X"FF",X"FF",X"05",X"1C",X"1C",X"1B",X"1A",X"1A",X"19",X"18",X"19",X"1A",X"1B",X"1C", - X"1D",X"1E",X"1F",X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17",X"18",X"17",X"16",X"16",X"15", - X"14",X"14",X"14",X"13",X"13",X"12",X"12",X"12",X"12",X"11",X"11",X"11",X"00",X"FF",X"05",X"1D", - X"1D",X"1D",X"1D",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"18",X"18",X"18",X"17",X"16",X"15",X"14", - X"14",X"13",X"13",X"13",X"13",X"0F",X"04",X"02",X"02",X"02",X"02",X"03",X"1C",X"1B",X"1B",X"1B", - X"1B",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"10",X"11",X"12",X"13",X"14",X"14",X"15", - X"15",X"15",X"15",X"06",X"00",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1C",X"1C",X"1B",X"1B",X"1A", - X"1A",X"19",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"15",X"14",X"14",X"14",X"13",X"13",X"12", - X"12",X"11",X"10",X"1F",X"1E",X"1E",X"1D",X"1D",X"1C",X"1C",X"1C",X"1B",X"1B",X"1A",X"1A",X"19", - X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"15",X"14",X"14",X"0F",X"0F",X"0F",X"0F",X"06",X"00", - X"FF",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1C",X"1C",X"1B",X"1A",X"1A",X"1A",X"19",X"18",X"18", - X"18",X"18",X"18",X"17",X"16",X"16",X"16",X"15",X"0F",X"0F",X"0F",X"14",X"13",X"13",X"12",X"12", - X"12",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"FF",X"05",X"1C",X"1C",X"1C",X"1C",X"1B", - X"1B",X"1A",X"1A",X"19",X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"14",X"0F",X"0F", - X"0F",X"0F",X"04",X"01",X"01",X"01",X"01",X"01",X"03",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"11", - X"12",X"13",X"14",X"14",X"06",X"00",X"FF",X"FF",X"05",X"19",X"19",X"1A",X"1A",X"1A",X"1B",X"1B", - X"1C",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"11",X"12",X"13",X"14",X"0F",X"06",X"0B", - X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0A",X"09",X"08",X"08",X"08", - X"08",X"08",X"08",X"08",X"00",X"FF",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"05",X"1C",X"1D", - X"1E",X"1E",X"1F",X"10",X"10",X"10",X"10",X"11",X"12",X"12",X"13",X"0F",X"0F",X"0F",X"14",X"15", - X"16",X"16",X"16",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"00",X"FF",X"FF", - X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"16",X"15",X"14",X"14",X"14",X"13",X"12", - X"12",X"11",X"10",X"10",X"10",X"1F",X"1E",X"1D",X"1C",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"17", - X"16",X"0F",X"0F",X"13",X"12",X"11",X"11",X"11",X"11",X"11",X"11",X"10",X"10",X"10",X"1F",X"1F", - X"00",X"FF",X"17",X"17",X"17",X"17",X"17",X"17",X"17",X"16",X"16",X"16",X"15",X"14",X"14",X"13", - X"12",X"12",X"11",X"10",X"10",X"1F",X"1E",X"1E",X"1D",X"1C",X"1C",X"1B",X"1A",X"1A",X"19",X"18", - X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"0F",X"0F",X"0F",X"13",X"12",X"12",X"11",X"11", - X"11",X"11",X"10",X"10",X"10",X"10",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"00",X"FF",X"FF",X"FF", - X"15",X"15",X"15",X"15",X"15",X"15",X"15",X"16",X"16",X"17",X"18",X"18",X"18",X"19",X"1A",X"1B", - X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"10",X"11",X"12",X"12",X"13",X"0F",X"0F",X"0F",X"0F",X"15", - X"16",X"16",X"17",X"18",X"18",X"18",X"19",X"19",X"19",X"19",X"19",X"19",X"00",X"FF",X"15",X"15", - X"16",X"16",X"16",X"16",X"17",X"17",X"18",X"18",X"18",X"18",X"19",X"1A",X"1B",X"1B",X"0F",X"0F", - X"0F",X"0F",X"0F",X"13",X"13",X"12",X"12",X"11",X"10",X"10",X"10",X"10",X"1F",X"1E",X"1D",X"0F", - X"0F",X"0F",X"0F",X"15",X"16",X"16",X"17",X"17",X"18",X"18",X"18",X"19",X"19",X"1A",X"19",X"18", - X"17",X"17",X"00",X"FF",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"16",X"17",X"18", - X"19",X"1A",X"1B",X"05",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07", - X"07",X"09",X"09",X"09",X"0A",X"0A",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0B",X"00",X"17",X"17",X"00",X"FF",X"FF",X"17",X"17",X"17",X"17",X"16",X"16",X"16",X"15", - X"14",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"19",X"17",X"15",X"13",X"13",X"14", - X"14",X"14",X"14",X"04",X"01",X"01",X"01",X"01",X"01",X"01",X"03",X"1C",X"1D",X"1E",X"1F",X"1F", - X"00",X"FF",X"15",X"15",X"15",X"15",X"15",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1D",X"1D", - X"1D",X"1E",X"1F",X"10",X"11",X"13",X"14",X"14",X"15",X"15",X"15",X"15",X"0F",X"0F",X"04",X"02", - X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"03",X"1B",X"1B",X"19",X"19",X"19",X"19",X"00",X"FF", - X"17",X"17",X"17",X"17",X"17",X"16",X"15",X"14",X"14",X"14",X"13",X"12",X"11",X"10",X"10",X"1F", - X"1E",X"1D",X"1C",X"1B",X"1A",X"19",X"18",X"18",X"17",X"17",X"16",X"16",X"15",X"15",X"0F",X"0F", - X"0F",X"04",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"00",X"FF",X"FF", - X"30",X"40",X"31",X"41",X"00",X"42",X"33",X"43",X"00",X"44",X"35",X"45",X"00",X"46",X"37",X"47", - X"38",X"48",X"00",X"49",X"3A",X"4A",X"00",X"4B",X"3C",X"4C",X"00",X"4D",X"3E",X"4E",X"3F",X"4F", - X"C0",X"C8",X"C1",X"C9",X"C2",X"CA",X"C3",X"CB",X"C4",X"CC",X"C5",X"CD",X"C6",X"00",X"C7",X"CF", - X"60",X"76",X"61",X"00",X"68",X"93",X"69",X"00",X"80",X"94",X"81",X"71",X"88",X"96",X"89",X"91", - X"60",X"70",X"61",X"00",X"68",X"70",X"69",X"00",X"80",X"70",X"81",X"00",X"88",X"79",X"89",X"99", - X"A0",X"00",X"A1",X"00",X"A2",X"00",X"A3",X"00",X"A4",X"00",X"A5",X"00",X"A6",X"00",X"A7",X"00", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"60",X"70",X"61",X"00",X"68",X"78",X"69",X"00",X"80",X"90",X"81",X"00",X"88",X"98",X"89",X"99", - X"62",X"72",X"63",X"73",X"6A",X"7A",X"6B",X"7B",X"82",X"92",X"83",X"00",X"8A",X"9A",X"8B",X"9B", - X"64",X"74",X"65",X"75",X"6C",X"7C",X"6D",X"7D",X"84",X"00",X"85",X"95",X"8C",X"9C",X"8D",X"9D", - X"66",X"00",X"67",X"77",X"6E",X"00",X"6F",X"7F",X"86",X"00",X"87",X"97",X"8E",X"9E",X"8F",X"9F", - X"B0",X"00",X"B1",X"00",X"A0",X"00",X"A1",X"00",X"A8",X"B8",X"A9",X"00",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"A2",X"00",X"A3",X"00",X"FF",X"FF",X"FF",X"FF",X"AA",X"BA",X"AB",X"BB", - X"FF",X"FF",X"FF",X"FF",X"A4",X"00",X"A5",X"00",X"AC",X"BC",X"AD",X"BD",X"B2",X"B4",X"B3",X"B5", - X"FF",X"FF",X"FF",X"FF",X"A6",X"00",X"A7",X"00",X"FF",X"FF",X"FF",X"FF",X"AE",X"BE",X"AF",X"BF", - X"D6",X"DD",X"E9",X"EC",X"E3",X"F3",X"E1",X"F1",X"E4",X"F4",X"EB",X"EE",X"D8",X"EF",X"DF",X"DD", - X"E0",X"F0",X"E1",X"DA",X"E9",X"DA",X"EA",X"F1",X"E2",X"F2",X"DE",X"DC",X"00",X"00",X"D6",X"FF", - X"E9",X"EC",X"EA",X"ED",X"EB",X"EE",X"D8",X"EF",X"00",X"00",X"DF",X"DD",X"E0",X"F0",X"E1",X"F1", - X"E2",X"F2",X"DE",X"DC",X"00",X"00",X"D6",X"D9",X"D7",X"DA",X"D8",X"DB",X"00",X"00",X"D0",X"D3", - X"D1",X"D4",X"D2",X"D5",X"DF",X"FF",X"FE",X"FC",X"DE",X"FE",X"DC",X"B6",X"FF",X"CE",X"7E",X"FF", - X"00",X"DD",X"DF",X"FF",X"00",X"DC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"D6",X"D9",X"FF",X"E9",X"F9",X"EC",X"EB",X"FB",X"EE",X"D8",X"DB",X"EF",X"00",X"FE",X"DD",X"00", - X"E0",X"F0",X"FF",X"E2",X"F2",X"00",X"DC",X"00",X"00",X"00",X"FF",X"00",X"D0",X"D3",X"DF",X"D2", - X"D5",X"00",X"00",X"DC",X"00",X"00",X"00",X"00",X"D6",X"D9",X"00",X"D8",X"DB",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"DF",X"DD",X"00",X"DE",X"DC",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"D0",X"F6",X"DE",X"D1",X"F7",X"F5",X"D2",X"F8",X"DF",X"00",X"D0",X"D3",X"FF",X"D1",X"D4",X"00", - X"D2",X"D5",X"00",X"D6",X"D9",X"DF",X"D7",X"DA",X"00",X"D8",X"DB",X"00",X"DF",X"DD",X"00",X"DE", - X"FC",X"00",X"DD",X"DC",X"00",X"00",X"DE",X"00",X"DC",X"FE",X"00",X"00",X"DF",X"00",X"54",X"55", - X"56",X"57",X"58",X"00",X"59",X"5A",X"53",X"5C",X"5D",X"00",X"54",X"59",X"5B",X"57",X"5C",X"00", - X"55",X"5A",X"53",X"58",X"5D",X"00",X"00",X"54",X"00",X"53",X"57",X"00",X"00",X"56",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"10",X"14",X"18",X"1C",X"00",X"04",X"08",X"0C",X"20",X"24",X"28",X"2C",X"30",X"34",X"38",X"3C", - X"80",X"84",X"88",X"8C",X"90",X"94",X"98",X"9C",X"A0",X"A4",X"A8",X"AC",X"B0",X"B4",X"B8",X"BC", - X"50",X"51",X"52",X"53",X"54",X"55",X"56",X"57",X"40",X"44",X"48",X"4C",X"50",X"54",X"58",X"5C", - X"C0",X"C4",X"C8",X"FF",X"FF",X"D4",X"FF",X"DC",X"FF",X"E4",X"E8",X"EC",X"FF",X"F4",X"FF",X"FC", - X"00",X"02",X"6F",X"00",X"02",X"7E",X"7F",X"00",X"13",X"00",X"05",X"7C",X"7D",X"00",X"13",X"39", - X"3A",X"2C",X"2C",X"2C",X"2C",X"2C",X"3B",X"3C",X"00",X"11",X"00",X"02",X"3D",X"36",X"37",X"38", - X"3D",X"00",X"13",X"00",X"02",X"60",X"33",X"34",X"35",X"60",X"00",X"13",X"00",X"04",X"32",X"00", - X"15",X"00",X"03",X"DC",X"DD",X"A9",X"AA",X"DE",X"F4",X"00",X"11",X"FB",X"9C",X"FE",X"00",X"02", - X"A7",X"A8",X"00",X"13",X"00",X"1A",X"00",X"1A",X"AF",X"21",X"86",X"19",X"06",X"06",X"CD",X"B0", - X"16",X"21",X"F8",X"1A",X"06",X"08",X"CD",X"B0",X"16",X"21",X"95",X"0B",X"06",X"09",X"CD",X"B0", - X"16",X"C6",X"8A",X"4F",X"11",X"F1",X"37",X"19",X"7E",X"81",X"77",X"C9",X"32",X"23",X"41",X"C9", - X"86",X"23",X"05",X"C2",X"B0",X"16",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"02",X"08",X"02",X"08",X"04",X"0C",X"04",X"0C",X"04",X"28",X"04",X"28",X"02",X"2C", - X"01",X"30",X"01",X"30",X"01",X"30",X"01",X"30",X"02",X"2C",X"01",X"30",X"01",X"30",X"01",X"10", - X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10", - X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10",X"01",X"10", - X"FF",X"FF",X"01",X"00",X"FF",X"00",X"00",X"FF",X"00",X"01",X"00",X"FF",X"00",X"01",X"02",X"00", - X"04",X"02",X"02",X"02",X"FE",X"02",X"FC",X"02",X"FE",X"00",X"FC",X"FE",X"04",X"FE",X"00",X"01", - X"02",X"00",X"02",X"01",X"02",X"02",X"01",X"02",X"00",X"02",X"FF",X"02",X"FE",X"02",X"FE",X"01", - X"FE",X"00",X"FE",X"FF",X"FE",X"FE",X"FF",X"FE",X"00",X"FE",X"01",X"FE",X"02",X"FE",X"02",X"FF", - X"47",X"3A",X"00",X"78",X"E6",X"10",X"C8",X"EB",X"7A",X"FE",X"18",X"C0",X"7B",X"FE",X"95",X"36", - X"22",X"C8",X"FE",X"9A",X"36",X"13",X"C8",X"FE",X"B5",X"36",X"24",X"C8",X"70",X"C9",X"FE",X"FF", - X"3A",X"00",X"78",X"E6",X"10",X"3A",X"8F",X"43",X"C8",X"0F",X"E6",X"0F",X"C9",X"FF",X"FF",X"FF", - X"00",X"00",X"FE",X"DC",X"00",X"00",X"00",X"D6",X"D9",X"E5",X"DD",X"00",X"DD",X"E9",X"F9",X"E7", - X"EC",X"DE",X"FE",X"E3",X"FA",X"ED",X"F3",X"DF",X"00",X"E4",X"EA",X"F9",X"F4",X"FF",X"DD",X"EB", - X"FB",X"E8",X"EE",X"00",X"00",X"D8",X"DB",X"E6",X"EF",X"DC",X"00",X"00",X"FD",X"DE",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FD",X"DD",X"00",X"00",X"00",X"00",X"E0",X"E7", - X"F0",X"CE",X"00",X"FF",X"E1",X"F9",X"DA",X"00",X"00",X"00",X"EA",X"FA",X"F1",X"DC",X"00",X"DD", - X"E2",X"E8",X"F2",X"DF",X"00",X"00",X"FF",X"DF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"D6",X"D9",X"FF",X"00",X"00",X"00",X"E9",X"F9", - X"EC",X"00",X"00",X"00",X"EB",X"FB",X"EE",X"00",X"00",X"00",X"D8",X"DB",X"EF",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"20",X"FF",X"FF",X"FF",X"FF",X"00",X"13",X"03",X"0F",X"12",X"05",X"21",X"00",X"00",X"08", - X"09",X"2B",X"13",X"03",X"0F",X"12",X"05",X"00",X"00",X"13",X"03",X"0F",X"12",X"05",X"22",X"00", - X"43",X"21",X"FF",X"FF",X"FF",X"FF",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"00",X"00",X"20",X"20",X"20",X"20",X"20",X"20",X"00", - X"43",X"22",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"2A",X"20",X"00",X"00",X"00",X"00",X"00", - X"03",X"0F",X"09",X"0E",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"2A",X"20",X"00",X"00",X"00", - X"43",X"25",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"09",X"0E",X"13", - X"05",X"12",X"14",X"00",X"00",X"03",X"0F",X"09",X"0E",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"27",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"1F",X"00",X"21",X"10",X"0C",X"01",X"19", - X"05",X"12",X"00",X"00",X"00",X"21",X"03",X"0F",X"09",X"0E",X"00",X"00",X"1F",X"00",X"00",X"00", - X"43",X"29",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"1F",X"00",X"22",X"10",X"0C",X"01",X"19", - X"05",X"12",X"13",X"00",X"00",X"22",X"03",X"0F",X"09",X"0E",X"13",X"00",X"1F",X"00",X"00",X"00", - X"43",X"2D",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"13",X"03",X"0F",X"12",X"05",X"00",X"01", - X"16",X"05",X"12",X"01",X"07",X"05",X"00",X"14",X"01",X"02",X"0C",X"05",X"00",X"00",X"00",X"00", - X"43",X"30",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"23",X"20",X"00",X"28",X"20",X"00",X"21",X"25",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"33",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"25",X"20",X"00",X"21",X"20",X"20",X"2B",X"24",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"37",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"20",X"20",X"20",X"20",X"2B",X"29",X"26",X"20",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"3A",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"21",X"20",X"20",X"2B",X"26",X"20",X"20",X"00",X"25",X"20",X"20",X"2B",X"24",X"20",X"20",X"20", - X"43",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"2C", - X"00",X"00",X"21",X"29",X"28",X"21",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"3D",X"21",X"00",X"21",X"00",X"14",X"05",X"08",X"0B",X"01",X"0E",X"00",X"09",X"0E",X"14", - X"05",X"12",X"0E",X"01",X"14",X"09",X"0F",X"0E",X"01",X"0C",X"00",X"03",X"0F",X"12",X"10",X"7E", - X"43",X"3E",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"28",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"10",X"15",X"13",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"0F",X"0E",X"0C",X"19",X"00",X"21", - X"10",X"0C",X"01",X"19",X"05",X"12",X"00",X"02",X"15",X"14",X"14",X"0F",X"0E",X"00",X"00",X"00", - X"43",X"28",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"01", - X"0D",X"05",X"00",X"00",X"0F",X"16",X"05",X"12",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"65",X"00",X"00",X"00",X"6A",X"65", - X"65",X"6A",X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00",X"00",X"00", - X"00",X"00",X"65",X"00",X"00",X"00",X"00",X"00",X"00",X"65",X"65",X"65",X"65",X"65",X"65",X"65", - X"65",X"65",X"00",X"00",X"65",X"00",X"00",X"65",X"65",X"00",X"00",X"65",X"00",X"00",X"65",X"65", - X"65",X"65",X"65",X"65",X"65",X"65",X"6D",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"00",X"00", - X"65",X"00",X"00",X"00",X"6A",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65",X"65", - X"65",X"65",X"65",X"00",X"00",X"00",X"00",X"00",X"65",X"00",X"65",X"65",X"65",X"65",X"65",X"00", - X"6D",X"65",X"65",X"6D",X"00",X"65",X"6D",X"65",X"00",X"00",X"65",X"00",X"00",X"65",X"65",X"00", - X"00",X"65",X"00",X"00",X"65",X"6A",X"65",X"00",X"6A",X"65",X"65",X"6A",X"FF",X"FF",X"FF",X"FF", - X"43",X"0A",X"20",X"03",X"42",X"8A",X"35",X"03",X"42",X"0A",X"4A",X"03",X"41",X"8A",X"5F",X"01", - X"41",X"4A",X"66",X"03",X"40",X"CA",X"7B",X"03",X"40",X"4A",X"90",X"04",X"FF",X"FF",X"FF",X"FF", - X"21",X"E8",X"4B",X"35",X"CA",X"F8",X"1A",X"7E",X"2C",X"6E",X"26",X"1A",X"56",X"2C",X"5E",X"2C", - X"46",X"2C",X"4E",X"FE",X"20",X"C2",X"B8",X"0B",X"21",X"1E",X"08",X"19",X"EB",X"26",X"1A",X"68", - X"06",X"07",X"C3",X"D6",X"0A",X"6C",X"00",X"6C",X"34",X"2C",X"7E",X"FE",X"C8",X"CA",X"00",X"1C", - X"C6",X"04",X"77",X"2D",X"36",X"40",X"C3",X"80",X"03",X"C3",X"E4",X"01",X"CD",X"00",X"04",X"21", - X"E8",X"4B",X"36",X"40",X"2C",X"36",X"B0",X"21",X"A4",X"43",X"7E",X"FE",X"03",X"C8",X"36",X"02", - X"2E",X"BA",X"36",X"01",X"C9",X"FF",X"00",X"CD",X"BC",X"06",X"C3",X"2E",X"06",X"06",X"CF",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"CA",X"CB",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"39",X"00",X"00",X"00",X"3A",X"00",X"60",X"3D",X"2C", - X"00",X"33",X"36",X"2C",X"30",X"34",X"37",X"2C",X"00",X"35",X"38",X"2C",X"00",X"60",X"3D",X"2C", - X"00",X"00",X"00",X"3B",X"00",X"00",X"00",X"3C",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", - X"32",X"00",X"36",X"39",X"36",X"39",X"00",X"32",X"34",X"00",X"3B",X"3D",X"3B",X"3D",X"00",X"34", - X"43",X"2C",X"32",X"32",X"32",X"32",X"00",X"00",X"0F",X"0E",X"03",X"05",X"00",X"00",X"0D",X"0F", - X"12",X"05",X"00",X"00",X"03",X"08",X"01",X"0C",X"0C",X"05",X"0E",X"07",X"05",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"21",X"00",X"0F",X"12",X"00",X"22",X"10", - X"0C",X"01",X"19",X"05",X"12",X"13",X"00",X"02",X"15",X"14",X"14",X"0F",X"0E",X"00",X"00",X"00", - X"43",X"29",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"13",X"0F",X"13",X"00",X"00", - X"00",X"13",X"0F",X"13",X"00",X"00",X"00",X"13",X"0F",X"13",X"00",X"00",X"00",X"00",X"00",X"00", - X"43",X"2C",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"01",X"14",X"00",X"0F",X"0E",X"03",X"05",X"00", - X"12",X"05",X"14",X"15",X"12",X"0E",X"00",X"14",X"0F",X"00",X"05",X"01",X"12",X"14",X"08",X"00", - X"CD",X"46",X"01",X"CD",X"27",X"1B",X"CD",X"E4",X"01",X"11",X"5D",X"26",X"19",X"11",X"20",X"00", - X"3E",X"7B",X"06",X"1A",X"86",X"19",X"05",X"C2",X"14",X"1C",X"1E",X"24",X"19",X"86",X"77",X"C9", - X"3F",X"04",X"87",X"3F",X"10",X"8F",X"3F",X"04",X"00",X"04",X"86",X"00",X"10",X"8E",X"00",X"04", - X"3F",X"04",X"85",X"3F",X"10",X"8D",X"3F",X"04",X"00",X"04",X"84",X"00",X"10",X"8C",X"00",X"04", - X"3F",X"05",X"87",X"3F",X"0E",X"8F",X"3F",X"05",X"00",X"05",X"86",X"00",X"0E",X"8E",X"00",X"05", - X"3F",X"05",X"85",X"3F",X"0E",X"8D",X"3F",X"05",X"00",X"05",X"84",X"00",X"0E",X"8C",X"00",X"05", - X"3F",X"06",X"87",X"3F",X"0C",X"8F",X"3F",X"06",X"00",X"06",X"86",X"00",X"0C",X"8E",X"00",X"06", - X"83",X"3F",X"05",X"85",X"3F",X"0C",X"8D",X"3F",X"05",X"8B",X"82",X"00",X"05",X"84",X"00",X"0C", - X"8C",X"00",X"05",X"8A",X"3F",X"01",X"83",X"3F",X"05",X"87",X"3F",X"0A",X"8F",X"3F",X"05",X"8B", - X"3F",X"01",X"00",X"01",X"82",X"00",X"05",X"86",X"00",X"0A",X"8E",X"00",X"05",X"8A",X"00",X"01", - X"3F",X"02",X"83",X"3F",X"04",X"85",X"3F",X"0A",X"8D",X"3F",X"04",X"8B",X"3F",X"02",X"00",X"02", - X"82",X"00",X"04",X"84",X"00",X"0A",X"8C",X"00",X"04",X"8A",X"00",X"02",X"3F",X"03",X"83",X"3F", - X"04",X"87",X"3F",X"08",X"8F",X"3F",X"04",X"8B",X"3F",X"03",X"00",X"03",X"82",X"00",X"04",X"86", - X"00",X"08",X"8E",X"00",X"04",X"8A",X"00",X"03",X"3F",X"04",X"83",X"3F",X"03",X"85",X"3F",X"08", - X"8D",X"3F",X"03",X"8B",X"3F",X"04",X"00",X"04",X"82",X"00",X"03",X"84",X"00",X"08",X"8C",X"00", - X"03",X"8A",X"00",X"04",X"3F",X"05",X"83",X"3F",X"03",X"87",X"3F",X"06",X"8F",X"3F",X"03",X"8B", - X"3F",X"05",X"00",X"05",X"82",X"00",X"03",X"86",X"00",X"06",X"8E",X"00",X"03",X"8A",X"00",X"05", - X"3F",X"06",X"83",X"3F",X"02",X"85",X"3F",X"06",X"8D",X"3F",X"02",X"8B",X"3F",X"06",X"80",X"00", - X"05",X"82",X"00",X"02",X"84",X"00",X"06",X"8C",X"00",X"02",X"8A",X"00",X"05",X"88",X"78",X"81", - X"3F",X"05",X"83",X"3F",X"02",X"87",X"3F",X"04",X"8F",X"3F",X"02",X"8B",X"3F",X"05",X"89",X"78", - X"00",X"01",X"79",X"80",X"00",X"04",X"82",X"00",X"02",X"86",X"00",X"04",X"8E",X"00",X"02",X"8A", - X"00",X"04",X"88",X"79",X"00",X"01",X"00",X"02",X"7A",X"81",X"3F",X"04",X"83",X"3F",X"01",X"85", - X"3F",X"04",X"8D",X"3F",X"01",X"8B",X"3F",X"04",X"89",X"7A",X"00",X"02",X"00",X"03",X"7B",X"80", - X"00",X"03",X"82",X"00",X"01",X"84",X"00",X"04",X"8C",X"00",X"01",X"8A",X"00",X"03",X"88",X"7B", - X"00",X"03",X"00",X"04",X"78",X"81",X"3F",X"03",X"83",X"3F",X"01",X"87",X"3F",X"02",X"8F",X"3F", - X"01",X"8B",X"3F",X"03",X"89",X"78",X"00",X"04",X"00",X"05",X"79",X"80",X"00",X"02",X"82",X"00", - X"01",X"86",X"00",X"02",X"8E",X"00",X"01",X"8A",X"00",X"02",X"88",X"79",X"00",X"05",X"00",X"06", - X"7A",X"81",X"3F",X"02",X"83",X"85",X"3F",X"02",X"8D",X"8B",X"3F",X"02",X"89",X"7A",X"00",X"06", - X"00",X"07",X"7B",X"80",X"00",X"01",X"82",X"84",X"00",X"02",X"8C",X"8A",X"00",X"01",X"88",X"7B", - X"00",X"04",X"00",X"01",X"00",X"01",X"00",X"01",X"6E",X"6C",X"6B",X"00",X"05",X"78",X"81",X"3F", - X"01",X"83",X"87",X"8F",X"8B",X"3F",X"01",X"89",X"78",X"00",X"05",X"5F",X"65",X"67",X"6E",X"6C", - X"6B",X"00",X"06",X"79",X"80",X"82",X"86",X"8E",X"8A",X"88",X"79",X"00",X"06",X"5F",X"65",X"67", - X"6E",X"6C",X"6B",X"00",X"07",X"7A",X"81",X"83",X"8B",X"89",X"7A",X"00",X"07",X"5F",X"65",X"67", - X"6D",X"6C",X"6B",X"00",X"08",X"7B",X"7E",X"7F",X"7B",X"00",X"08",X"5E",X"65",X"67",X"6D",X"6C", - X"6A",X"00",X"09",X"7C",X"7D",X"00",X"09",X"5E",X"65",X"67",X"6D",X"6C",X"6A",X"00",X"02",X"42", - X"43",X"00",X"0B",X"52",X"52",X"52",X"52",X"00",X"02",X"64",X"66",X"6D",X"69",X"00",X"01",X"42", - X"43",X"40",X"41",X"00",X"0B",X"51",X"51",X"51",X"51",X"4E",X"4F",X"63",X"63",X"00",X"01",X"69", - X"00",X"01",X"40",X"41",X"00",X"0F",X"4E",X"4F",X"4C",X"4D",X"60",X"60",X"00",X"01",X"68",X"00", - X"03",X"50",X"50",X"50",X"50",X"50",X"50",X"00",X"09",X"4C",X"4D",X"00",X"04",X"00",X"01",X"63", - X"00",X"18",X"00",X"18",X"00",X"01",X"00",X"01",X"20",X"21",X"22",X"23",X"24",X"25",X"26",X"27", - X"23",X"21",X"24",X"25",X"26",X"26",X"27",X"22",X"24",X"21",X"25",X"25",X"26",X"27",X"23",X"20", - X"24",X"27",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"00",X"0C",X"19",X"1D",X"0F",X"1D", - X"1E",X"00",X"09",X"00",X"0C",X"1B",X"1F",X"1E",X"1B",X"1F",X"1C",X"00",X"08",X"00",X"0C",X"0D", - X"1D",X"19",X"0E",X"0A",X"08",X"0A",X"00",X"07",X"00",X"0C",X"1C",X"0C",X"1F",X"18",X"0F",X"0B", - X"1C",X"1A",X"00",X"06",X"00",X"0D",X"1B",X"00",X"02",X"1D",X"08",X"09",X"1E",X"1C",X"00",X"05", - X"00",X"0D",X"0A",X"1F",X"1B",X"18",X"13",X"14",X"0D",X"1D",X"0A",X"00",X"04",X"00",X"0E",X"1E", - X"1C",X"0C",X"10",X"11",X"12",X"19",X"0C",X"08",X"00",X"03",X"00",X"0F",X"08",X"1E",X"0B",X"01", - X"02",X"1D",X"18",X"1C",X"09",X"00",X"02",X"00",X"10",X"1B",X"09",X"08",X"0B",X"0E",X"00",X"01", - X"1F",X"0C",X"00",X"02",X"00",X"04",X"07",X"04",X"00",X"0B",X"08",X"0A",X"1C",X"09",X"1F",X"00", - X"01",X"19",X"08",X"00",X"01",X"00",X"03",X"15",X"16",X"17",X"00",X"0C",X"09",X"1E",X"08",X"1C", - X"1A",X"1D",X"0D",X"00",X"01",X"00",X"02",X"07",X"05",X"06",X"00",X"0E",X"1F",X"0B",X"09",X"1E", - X"1D",X"18",X"00",X"01",X"00",X"02",X"03",X"17",X"00",X"10",X"1E",X"1F",X"0F",X"0E",X"1B",X"00", - X"01",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"00",X"1A",X"10",X"4A",X"25",X"38",X"10",X"4A",X"A7", - X"48",X"10",X"48",X"E9",X"58",X"10",X"49",X"CB",X"68",X"10",X"4A",X"4D",X"78",X"10",X"49",X"4F", - X"00",X"00",X"49",X"60",X"10",X"00",X"4A",X"02",X"20",X"00",X"49",X"04",X"30",X"00",X"49",X"A6", - X"40",X"00",X"48",X"A8",X"50",X"00",X"4A",X"4A",X"60",X"00",X"49",X"6C",X"70",X"00",X"48",X"6E", - X"80",X"00",X"4A",X"F0",X"90",X"00",X"49",X"D2",X"A0",X"00",X"48",X"F4",X"B0",X"00",X"4A",X"76", - X"58",X"20",X"48",X"EB",X"70",X"20",X"4A",X"2E",X"80",X"20",X"49",X"50",X"88",X"20",X"4A",X"91", - X"C0",X"20",X"49",X"78",X"D0",X"20",X"48",X"BA",X"48",X"40",X"49",X"C9",X"C8",X"40",X"4A",X"19", - X"00",X"10",X"49",X"A0",X"10",X"10",X"49",X"22",X"20",X"10",X"4A",X"04",X"30",X"10",X"4A",X"66", - X"40",X"10",X"48",X"E8",X"50",X"10",X"49",X"CA",X"60",X"10",X"4A",X"4C",X"70",X"10",X"49",X"4E", - X"80",X"10",X"48",X"70",X"90",X"10",X"49",X"92",X"A0",X"10",X"4A",X"B4",X"B0",X"10",X"49",X"36", - X"60",X"10",X"48",X"CC",X"68",X"10",X"4A",X"ED",X"78",X"10",X"4A",X"0F",X"90",X"10",X"48",X"D2", - X"30",X"30",X"49",X"66",X"98",X"30",X"4A",X"33",X"B8",X"30",X"49",X"D7",X"C0",X"30",X"4A",X"F8", - X"7E",X"E6",X"02",X"C8",X"54",X"7D",X"C6",X"20",X"5F",X"1A",X"C6",X"08",X"47",X"13",X"1A",X"4F", - X"0A",X"FE",X"40",X"D8",X"FE",X"6F",X"D0",X"78",X"D6",X"08",X"57",X"59",X"2B",X"2B",X"7E",X"E6", - X"F7",X"77",X"0A",X"FE",X"50",X"DA",X"40",X"20",X"3E",X"00",X"02",X"06",X"88",X"21",X"90",X"4B", - X"0E",X"0F",X"CD",X"68",X"20",X"70",X"2C",X"2C",X"72",X"2C",X"73",X"C9",X"FF",X"FF",X"FF",X"FF", - X"E6",X"03",X"FE",X"02",X"C2",X"58",X"20",X"21",X"A0",X"4B",X"0E",X"FF",X"CD",X"68",X"20",X"36", - X"80",X"2C",X"2C",X"70",X"2C",X"73",X"C9",X"FF",X"3E",X"00",X"02",X"06",X"6B",X"C3",X"2D",X"20", - X"CD",X"76",X"08",X"C3",X"BC",X"33",X"FF",X"FF",X"7E",X"A1",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E", - X"A1",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E",X"A1",X"C8",X"2C",X"2C",X"2C",X"2C",X"C9",X"FF",X"FF", - X"3A",X"92",X"43",X"0F",X"0F",X"DA",X"9C",X"20",X"21",X"90",X"4B",X"E5",X"CD",X"B0",X"20",X"E1", - X"7D",X"C6",X"04",X"6F",X"FE",X"A0",X"C2",X"89",X"20",X"C9",X"FF",X"FF",X"21",X"A0",X"4B",X"E5", - X"CD",X"D4",X"20",X"E1",X"7D",X"C6",X"04",X"6F",X"FE",X"B0",X"C2",X"9F",X"20",X"C9",X"FF",X"FF", - X"7E",X"E6",X"0F",X"C8",X"35",X"7E",X"2C",X"2C",X"56",X"2C",X"5E",X"6F",X"26",X"2A",X"6E",X"26", - X"15",X"01",X"1E",X"00",X"EB",X"09",X"C3",X"26",X"21",X"21",X"C5",X"01",X"0C",X"00",X"C3",X"BC", - X"0F",X"FF",X"FF",X"FF",X"7E",X"A7",X"C8",X"35",X"7E",X"2C",X"2C",X"56",X"2C",X"5E",X"E6",X"07", - X"C6",X"F8",X"6F",X"26",X"20",X"6E",X"26",X"15",X"1B",X"1B",X"EB",X"01",X"DE",X"FF",X"C3",X"0C", - X"21",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"56",X"EB",X"E5",X"DF",X"D9",X"D3",X"CD",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"23", - X"1A",X"77",X"13",X"09",X"C9",X"D0",X"01",X"DE",X"FF",X"7C",X"FE",X"43",X"C2",X"00",X"21",X"7D", - X"FE",X"40",X"DA",X"00",X"21",X"D6",X"20",X"6F",X"1C",X"1C",X"1C",X"FE",X"40",X"DA",X"0C",X"21", - X"D6",X"20",X"6F",X"1C",X"1C",X"1C",X"C3",X"18",X"21",X"90",X"21",X"C3",X"A5",X"21",X"F0",X"F9", - X"21",X"B8",X"43",X"7E",X"E6",X"04",X"C0",X"00",X"00",X"2E",X"92",X"7E",X"21",X"92",X"43",X"7E", - X"FE",X"C0",X"D2",X"84",X"21",X"E6",X"04",X"47",X"7E",X"0F",X"0F",X"0F",X"4F",X"E6",X"18",X"C6", - X"30",X"80",X"6F",X"26",X"22",X"56",X"23",X"5E",X"23",X"79",X"E6",X"07",X"86",X"6F",X"26",X"22", - X"7E",X"12",X"C9",X"FF",X"0F",X"0F",X"0F",X"4F",X"7E",X"E6",X"04",X"C6",X"48",X"6F",X"26",X"22", - X"56",X"23",X"5E",X"23",X"79",X"E6",X"07",X"86",X"6F",X"26",X"22",X"6E",X"EB",X"7E",X"23",X"A6", - X"01",X"DF",X"FF",X"09",X"A6",X"23",X"A6",X"E6",X"F0",X"FE",X"40",X"C0",X"01",X"1F",X"00",X"09", - X"EB",X"3E",X"08",X"32",X"62",X"43",X"E5",X"CD",X"C0",X"21",X"E1",X"C3",X"DC",X"07",X"22",X"CD", - X"7D",X"FE",X"70",X"C0",X"21",X"C2",X"43",X"7E",X"FE",X"50",X"D0",X"2E",X"C8",X"7E",X"E6",X"08", - X"C0",X"7E",X"F6",X"08",X"77",X"23",X"36",X"57",X"23",X"01",X"B8",X"1F",X"7B",X"FE",X"D8",X"CA", - X"E5",X"21",X"01",X"C0",X"2F",X"70",X"23",X"71",X"2E",X"EA",X"36",X"00",X"2C",X"36",X"00",X"C9", - X"0F",X"0F",X"C6",X"3A",X"5F",X"16",X"78",X"0F",X"D2",X"04",X"22",X"CD",X"40",X"0C",X"CD",X"78", - X"0F",X"CD",X"80",X"20",X"21",X"94",X"43",X"34",X"7E",X"FE",X"60",X"D8",X"2E",X"A4",X"36",X"02", - X"2E",X"60",X"36",X"FF",X"2E",X"B8",X"E5",X"E5",X"7E",X"E6",X"0E",X"FE",X"04",X"CA",X"F0",X"0C", - X"E1",X"E1",X"34",X"FE",X"00",X"CA",X"74",X"22",X"2E",X"BA",X"36",X"10",X"C3",X"80",X"03",X"FF", - X"4A",X"A9",X"50",X"00",X"48",X"6E",X"50",X"00",X"48",X"38",X"58",X"00",X"48",X"18",X"58",X"00", - X"49",X"44",X"50",X"00",X"49",X"F2",X"50",X"00",X"4A",X"D8",X"60",X"00",X"4A",X"99",X"60",X"00", - X"29",X"2A",X"2B",X"2A",X"2B",X"2A",X"29",X"28",X"61",X"62",X"61",X"60",X"61",X"62",X"61",X"60", - X"6C",X"70",X"6C",X"68",X"6C",X"70",X"6C",X"68",X"40",X"42",X"41",X"43",X"44",X"46",X"45",X"47", - X"48",X"4A",X"49",X"4B",X"2E",X"BB",X"36",X"08",X"2C",X"36",X"00",X"C3",X"80",X"03",X"03",X"15", - X"21",X"B9",X"43",X"7E",X"0F",X"0F",X"0F",X"E6",X"1F",X"C6",X"20",X"5F",X"16",X"4B",X"3E",X"00", - X"12",X"CD",X"17",X"02",X"7A",X"FE",X"47",X"C2",X"8E",X"22",X"CD",X"60",X"20",X"21",X"9B",X"43", - X"7E",X"0F",X"D8",X"2E",X"B9",X"35",X"7E",X"32",X"00",X"58",X"C0",X"2D",X"34",X"C3",X"80",X"03", - X"CD",X"C0",X"22",X"CD",X"E6",X"22",X"01",X"00",X"16",X"21",X"C2",X"43",X"C3",X"26",X"09",X"FF", - X"21",X"9C",X"43",X"3A",X"A0",X"43",X"2F",X"E6",X"60",X"CA",X"D6",X"22",X"34",X"E6",X"40",X"C8", - X"35",X"35",X"C9",X"FF",X"FF",X"FF",X"3A",X"9B",X"43",X"0F",X"00",X"D0",X"7E",X"35",X"A7",X"F0", - X"34",X"34",X"C9",X"FF",X"FF",X"FF",X"21",X"9C",X"43",X"7E",X"A7",X"F2",X"0B",X"23",X"2F",X"3C", - X"FE",X"7C",X"DA",X"F9",X"22",X"3E",X"7C",X"36",X"84",X"CD",X"26",X"23",X"21",X"C2",X"43",X"7E", - X"91",X"77",X"FE",X"08",X"D0",X"36",X"08",X"C3",X"21",X"23",X"FF",X"FE",X"7C",X"DA",X"13",X"23", - X"3E",X"7C",X"77",X"CD",X"26",X"23",X"21",X"C2",X"43",X"7E",X"81",X"77",X"FE",X"C1",X"D8",X"36", - X"C0",X"2E",X"9C",X"36",X"00",X"C9",X"0F",X"0F",X"0F",X"4F",X"E6",X"07",X"C6",X"50",X"5F",X"16", - X"23",X"1A",X"47",X"79",X"0F",X"0F",X"0F",X"E6",X"01",X"4F",X"3A",X"9B",X"43",X"E6",X"07",X"C6", - X"58",X"5F",X"16",X"23",X"1A",X"A0",X"C8",X"0C",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"FE",X"E0",X"D0",X"A9",X"D4",X"E0",X"F8",X"80", - X"21",X"C0",X"1B",X"0E",X"02",X"CD",X"D0",X"01",X"CD",X"76",X"08",X"21",X"B9",X"43",X"3E",X"FF", - X"77",X"32",X"00",X"58",X"2E",X"94",X"34",X"7E",X"FE",X"01",X"C2",X"81",X"23",X"2E",X"67",X"36", - X"FF",X"FE",X"C0",X"C0",X"2E",X"B8",X"34",X"C3",X"80",X"03",X"36",X"00",X"2D",X"7E",X"FE",X"5E", - X"CD",X"F8",X"24",X"CD",X"A0",X"24",X"CD",X"60",X"20",X"CD",X"78",X"0F",X"CD",X"F0",X"32",X"CD", - X"A8",X"31",X"C3",X"76",X"32",X"FF",X"FF",X"FF",X"CD",X"76",X"08",X"21",X"B8",X"43",X"7E",X"E6", - X"04",X"47",X"2E",X"92",X"7E",X"E6",X"03",X"B0",X"07",X"C6",X"C4",X"6F",X"26",X"23",X"7E",X"2C", - X"6E",X"67",X"E9",X"FF",X"21",X"5C",X"24",X"30",X"24",X"3C",X"24",X"48",X"0A",X"9C",X"0A",X"BC", - X"09",X"D4",X"37",X"D0",X"FF",X"FF",X"21",X"B8",X"43",X"7E",X"E6",X"0F",X"FE",X"01",X"CA",X"98", - X"3A",X"FE",X"03",X"CA",X"98",X"3A",X"FE",X"05",X"CA",X"D0",X"3A",X"FE",X"07",X"CA",X"D0",X"3A", - X"FE",X"09",X"D8",X"FE",X"0B",X"DA",X"02",X"3B",X"CD",X"02",X"3B",X"FF",X"98",X"3F",X"FF",X"FF", - X"00",X"00",X"00",X"21",X"DC",X"4B",X"7E",X"D6",X"08",X"57",X"2C",X"5E",X"21",X"BA",X"43",X"36", - X"10",X"2E",X"A4",X"36",X"02",X"2C",X"35",X"7E",X"C8",X"2D",X"36",X"06",X"FE",X"1E",X"D8",X"CA", - X"80",X"03",X"FE",X"1F",X"CA",X"A0",X"03",X"D6",X"20",X"CD",X"B8",X"0B",X"C3",X"D4",X"09",X"7E", - X"21",X"70",X"4B",X"CD",X"54",X"24",X"2E",X"74",X"C3",X"54",X"24",X"FF",X"21",X"78",X"4B",X"CD", - X"54",X"24",X"2E",X"7C",X"C3",X"54",X"24",X"FF",X"21",X"80",X"4B",X"CD",X"54",X"24",X"2E",X"84", - X"C3",X"54",X"24",X"FF",X"7E",X"E6",X"08",X"C8",X"2C",X"7E",X"FE",X"28",X"D0",X"7D",X"C6",X"41", - X"6F",X"7E",X"C6",X"08",X"57",X"2C",X"7E",X"C6",X"02",X"5F",X"1A",X"A7",X"C0",X"3E",X"3E",X"12", - X"C9",X"00",X"1C",X"C3",X"D6",X"0A",X"78",X"81",X"CD",X"95",X"24",X"2E",X"D3",X"77",X"21",X"BB", - X"43",X"3E",X"08",X"96",X"07",X"2E",X"9A",X"86",X"07",X"47",X"2E",X"6F",X"7E",X"E6",X"1E",X"80", - X"32",X"D1",X"4B",X"C9",X"1F",X"80",X"0D",X"C8",X"80",X"0D",X"C8",X"80",X"0D",X"C8",X"87",X"C9", - X"21",X"95",X"43",X"7E",X"A7",X"C0",X"2E",X"B9",X"7E",X"A7",X"C2",X"B1",X"24",X"2E",X"95",X"36", - X"FF",X"47",X"2E",X"B8",X"7E",X"E6",X"F0",X"4F",X"21",X"60",X"1F",X"E5",X"CD",X"CD",X"24",X"E1", - X"7D",X"C6",X"04",X"6F",X"FE",X"00",X"C2",X"BB",X"24",X"C9",X"FF",X"FF",X"FF",X"7E",X"B8",X"C0", - X"2C",X"7E",X"A9",X"E6",X"10",X"C0",X"79",X"BE",X"D8",X"2C",X"56",X"2C",X"5E",X"7D",X"E6",X"04", - X"C6",X"EC",X"6F",X"26",X"24",X"CD",X"DC",X"07",X"03",X"C9",X"FF",X"FF",X"70",X"72",X"71",X"73", - X"74",X"76",X"75",X"77",X"FF",X"FF",X"FF",X"FF",X"CD",X"1A",X"25",X"79",X"A7",X"C8",X"21",X"B9", - X"43",X"7E",X"91",X"77",X"32",X"00",X"58",X"E6",X"07",X"C0",X"CD",X"50",X"06",X"21",X"B1",X"43", - X"7E",X"FE",X"1F",X"C0",X"36",X"3F",X"C9",X"FF",X"FF",X"FF",X"21",X"95",X"43",X"7E",X"2F",X"E6", - X"04",X"4F",X"2E",X"B9",X"7E",X"E6",X"C0",X"07",X"07",X"81",X"07",X"07",X"07",X"C3",X"26",X"23", - X"3A",X"00",X"70",X"2F",X"E6",X"10",X"0F",X"0F",X"0F",X"00",X"81",X"07",X"07",X"07",X"4F",X"FE", - X"40",X"DA",X"26",X"23",X"0E",X"40",X"C3",X"26",X"23",X"5E",X"5F",X"06",X"04",X"C3",X"C4",X"00", - X"21",X"BA",X"43",X"3E",X"20",X"96",X"0F",X"E6",X"0F",X"57",X"2E",X"9F",X"86",X"4F",X"2D",X"7E", - X"D6",X"0A",X"92",X"FE",X"E0",X"DA",X"69",X"25",X"AF",X"47",X"2E",X"9A",X"7E",X"82",X"FE",X"40", - X"DA",X"75",X"25",X"3E",X"40",X"C6",X"88",X"57",X"2E",X"92",X"7E",X"E6",X"06",X"07",X"C6",X"70", - X"6F",X"26",X"4B",X"E5",X"CD",X"94",X"25",X"E1",X"7D",X"C6",X"10",X"6F",X"E5",X"CD",X"94",X"25", - X"E1",X"C9",X"FF",X"FF",X"7E",X"E6",X"08",X"C8",X"2C",X"2C",X"7E",X"B8",X"D8",X"B9",X"D0",X"2D", - X"7E",X"FE",X"30",X"7A",X"D2",X"A9",X"25",X"C6",X"20",X"2C",X"2C",X"BE",X"D8",X"4E",X"2D",X"46", - X"C3",X"B7",X"25",X"00",X"4F",X"2D",X"46",X"3A",X"B8",X"43",X"16",X"03",X"FE",X"10",X"DA",X"CA", - X"25",X"16",X"04",X"FE",X"20",X"DA",X"CA",X"25",X"16",X"05",X"21",X"CC",X"43",X"7E",X"E6",X"08", - X"CA",X"E0",X"25",X"7D",X"C6",X"04",X"6F",X"15",X"C2",X"CD",X"25",X"E1",X"E1",X"C9",X"FF",X"FF", - X"78",X"C6",X"04",X"47",X"79",X"C6",X"0C",X"4F",X"36",X"08",X"2C",X"78",X"0F",X"E6",X"03",X"57", - X"79",X"E6",X"04",X"82",X"C6",X"58",X"77",X"2C",X"70",X"2C",X"71",X"E1",X"E1",X"C9",X"FF",X"FF", - X"00",X"00",X"00",X"00",X"00",X"3A",X"B9",X"43",X"2F",X"0F",X"0F",X"0F",X"E6",X"1F",X"21",X"D2", - X"4B",X"77",X"2C",X"3A",X"D1",X"4B",X"BE",X"DA",X"50",X"26",X"3A",X"D5",X"4B",X"57",X"E6",X"03", - X"5F",X"3A",X"9B",X"43",X"07",X"07",X"E6",X"0C",X"83",X"C6",X"D0",X"6F",X"26",X"3E",X"7A",X"0F", - X"0F",X"E6",X"07",X"86",X"57",X"3A",X"B9",X"43",X"92",X"32",X"B9",X"43",X"32",X"00",X"58",X"3A", - X"9B",X"43",X"0F",X"D2",X"D0",X"26",X"CD",X"68",X"26",X"C3",X"AA",X"26",X"C2",X"3A",X"26",X"3A", - X"2C",X"3A",X"9B",X"43",X"07",X"07",X"E6",X"0C",X"86",X"C6",X"D0",X"6F",X"26",X"3E",X"3A",X"B9", - X"43",X"86",X"C3",X"39",X"26",X"D2",X"AE",X"26",X"3A",X"6E",X"43",X"C6",X"02",X"47",X"3A",X"9A", - X"43",X"57",X"0F",X"0F",X"E6",X"0F",X"80",X"47",X"21",X"BB",X"43",X"3E",X"08",X"96",X"0F",X"E6", - X"03",X"80",X"47",X"5E",X"00",X"3A",X"D6",X"4B",X"C6",X"E0",X"6F",X"26",X"3E",X"78",X"BE",X"DA", - X"93",X"26",X"46",X"7A",X"E6",X"F8",X"80",X"47",X"7B",X"FE",X"04",X"D2",X"A4",X"26",X"2F",X"00", - X"E6",X"03",X"80",X"47",X"78",X"32",X"D5",X"4B",X"C9",X"58",X"21",X"D3",X"4B",X"7E",X"35",X"A7", - X"C0",X"34",X"2E",X"D6",X"7E",X"FE",X"0C",X"D0",X"FE",X"08",X"D8",X"2C",X"96",X"07",X"47",X"3A", - X"6F",X"43",X"E6",X"03",X"2E",X"D4",X"77",X"2F",X"E6",X"03",X"3C",X"4F",X"C3",X"76",X"24",X"C9", - X"21",X"A8",X"4B",X"01",X"00",X"08",X"11",X"00",X"80",X"7E",X"A7",X"CA",X"E5",X"26",X"7A",X"07", - X"D2",X"E4",X"26",X"51",X"59",X"0C",X"7D",X"90",X"6F",X"FE",X"68",X"C2",X"D9",X"26",X"3A",X"D2", - X"4B",X"82",X"83",X"E6",X"1F",X"32",X"D6",X"4B",X"7B",X"92",X"32",X"D7",X"4B",X"C9",X"FF",X"FF", - X"21",X"A2",X"43",X"7E",X"A7",X"C8",X"2C",X"7E",X"E6",X"01",X"07",X"07",X"C6",X"83",X"6F",X"3E", - X"FF",X"32",X"97",X"43",X"11",X"70",X"43",X"CD",X"48",X"27",X"1C",X"1C",X"1C",X"7B",X"FE",X"80", - X"C2",X"17",X"27",X"1E",X"9D",X"3A",X"A4",X"43",X"FE",X"06",X"DA",X"39",X"27",X"1A",X"47",X"0E", - X"00",X"CD",X"20",X"02",X"AF",X"12",X"32",X"97",X"43",X"3A",X"97",X"43",X"A7",X"CC",X"68",X"27", - X"CD",X"A8",X"27",X"C3",X"43",X"3B",X"FF",X"FF",X"1A",X"1C",X"E6",X"1F",X"FE",X"01",X"C0",X"1A", - X"A7",X"C8",X"0F",X"0F",X"0F",X"0F",X"47",X"E6",X"F0",X"4F",X"78",X"E6",X"0F",X"47",X"CD",X"20", - X"02",X"AF",X"12",X"32",X"97",X"43",X"C9",X"FF",X"E5",X"11",X"61",X"42",X"06",X"06",X"3A",X"A3", - X"43",X"A7",X"CA",X"78",X"27",X"11",X"21",X"40",X"CD",X"C4",X"00",X"E1",X"11",X"BD",X"43",X"EB", - X"7E",X"2C",X"B6",X"C8",X"2C",X"EB",X"CD",X"14",X"03",X"D0",X"3A",X"A3",X"43",X"C6",X"90",X"6F", - X"34",X"CD",X"67",X"03",X"3E",X"FF",X"32",X"6A",X"43",X"2E",X"BE",X"7E",X"36",X"00",X"0F",X"0F", - X"0F",X"0F",X"2D",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"8C",X"43",X"7E",X"32",X"00",X"60",X"2C", - X"7E",X"32",X"00",X"68",X"36",X"0F",X"2D",X"36",X"0F",X"C9",X"C9",X"FF",X"FF",X"21",X"63",X"43", - X"7E",X"A7",X"C8",X"FE",X"40",X"DA",X"CA",X"27",X"36",X"40",X"35",X"2E",X"8C",X"36",X"8F",X"E1", - X"C9",X"FF",X"21",X"61",X"43",X"06",X"7F",X"7E",X"A7",X"CA",X"E2",X"27",X"06",X"FF",X"3D",X"E6", - X"02",X"77",X"78",X"30",X"C9",X"E9",X"CD",X"7C",X"3D",X"CD",X"98",X"3D",X"78",X"A7",X"C8",X"21", - X"8D",X"43",X"36",X"2F",X"79",X"A7",X"C8",X"0F",X"E6",X"06",X"F6",X"20",X"77",X"C9",X"C9",X"FF", - X"10",X"24",X"10",X"00",X"10",X"24",X"10",X"4C",X"10",X"74",X"10",X"A8",X"10",X"74",X"10",X"A8", - X"10",X"D0",X"10",X"FC",X"10",X"D0",X"10",X"FC",X"10",X"D0",X"10",X"FC",X"10",X"D0",X"10",X"FC", - X"11",X"C2",X"11",X"24",X"11",X"C2",X"11",X"24",X"11",X"4E",X"11",X"86",X"11",X"4E",X"11",X"EA", - X"11",X"86",X"12",X"18",X"12",X"46",X"12",X"18",X"12",X"46",X"12",X"18",X"12",X"46",X"12",X"18", - X"2D",X"12",X"2C",X"00",X"2D",X"12",X"2C",X"00",X"2C",X"D4",X"2D",X"5C",X"2C",X"D4",X"2C",X"36", - X"2D",X"32",X"2C",X"64",X"2C",X"A8",X"2D",X"32",X"2C",X"A8",X"2C",X"64",X"2C",X"A8",X"2D",X"32", - X"12",X"70",X"13",X"78",X"12",X"70",X"13",X"78",X"12",X"A2",X"12",X"E0",X"13",X"A2",X"13",X"0E", - X"13",X"A2",X"13",X"D0",X"13",X"0E",X"13",X"44",X"13",X"0E",X"13",X"D0",X"13",X"44",X"13",X"0E", - X"2E",X"AE",X"2E",X"74",X"2E",X"AE",X"2E",X"56",X"2E",X"74",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C", - X"2E",X"74",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C",X"2E",X"EC",X"2E",X"8C", - X"2D",X"E8",X"2D",X"8A",X"2D",X"E8",X"2D",X"AC",X"2E",X"28",X"2D",X"C4",X"2E",X"28",X"2D",X"C4", - X"2D",X"AC",X"2D",X"C4",X"2E",X"28",X"2D",X"C4",X"2E",X"28",X"2D",X"C4",X"2E",X"28",X"2D",X"C4", - X"2C",X"00",X"2C",X"D4",X"2C",X"00",X"2F",X"6A",X"2F",X"94",X"2C",X"D4",X"2F",X"6A",X"2C",X"36", - X"2F",X"94",X"2C",X"64",X"2C",X"A8",X"2C",X"64",X"2C",X"A8",X"2F",X"94",X"2C",X"64",X"2C",X"A8", - X"12",X"70",X"12",X"A2",X"12",X"70",X"12",X"A2",X"2F",X"42",X"13",X"0E",X"12",X"E0",X"2F",X"1C", - X"13",X"0E",X"2F",X"1C",X"2F",X"42",X"13",X"44",X"13",X"44",X"2F",X"1C",X"2F",X"42",X"13",X"44", - X"41",X"30",X"00",X"18",X"31",X"28",X"C8",X"18",X"51",X"40",X"10",X"A0",X"13",X"20",X"C8",X"A0", - X"41",X"40",X"C8",X"28",X"61",X"40",X"00",X"28",X"12",X"20",X"60",X"A0",X"61",X"50",X"40",X"A0", - X"61",X"38",X"28",X"28",X"51",X"30",X"C8",X"38",X"13",X"20",X"00",X"18",X"15",X"40",X"00",X"A0", - X"61",X"50",X"C8",X"A0",X"41",X"20",X"28",X"28",X"31",X"20",X"A0",X"A0",X"13",X"20",X"C8",X"18", - X"13",X"04",X"00",X"18",X"51",X"30",X"08",X"18",X"13",X"04",X"C8",X"18",X"31",X"20",X"B8",X"18", - X"13",X"30",X"80",X"A0",X"51",X"28",X"C8",X"38",X"61",X"40",X"28",X"28",X"13",X"08",X"00",X"A0", - X"51",X"40",X"00",X"A0",X"13",X"08",X"70",X"A0",X"51",X"40",X"C8",X"A0",X"32",X"30",X"C8",X"18", - X"22",X"20",X"00",X"18",X"31",X"30",X"00",X"28",X"51",X"40",X"B8",X"A0",X"31",X"20",X"28",X"A0", - X"11",X"10",X"50",X"48",X"13",X"30",X"00",X"18",X"41",X"40",X"68",X"48",X"12",X"10",X"C8",X"18", - X"21",X"30",X"70",X"48",X"21",X"20",X"C8",X"38",X"31",X"30",X"60",X"48",X"11",X"10",X"00",X"28", - X"21",X"20",X"58",X"48",X"21",X"30",X"00",X"28",X"31",X"30",X"70",X"48",X"21",X"20",X"C8",X"28", - X"31",X"20",X"50",X"48",X"13",X"30",X"C8",X"18",X"21",X"20",X"68",X"48",X"21",X"40",X"00",X"18", - X"31",X"30",X"58",X"48",X"31",X"20",X"00",X"38",X"21",X"20",X"60",X"48",X"31",X"30",X"C8",X"38", - X"31",X"20",X"50",X"48",X"31",X"30",X"C8",X"28",X"21",X"20",X"58",X"48",X"31",X"30",X"00",X"38", - X"41",X"40",X"70",X"48",X"41",X"38",X"00",X"18",X"11",X"10",X"68",X"48",X"41",X"40",X"C8",X"18", - X"21",X"30",X"60",X"48",X"41",X"20",X"C8",X"18",X"31",X"30",X"70",X"48",X"13",X"20",X"00",X"18", - X"F2",X"20",X"50",X"20",X"4A",X"20",X"44",X"20",X"34",X"40",X"2A",X"40",X"1C",X"60",X"0E",X"60", - X"00",X"60",X"1C",X"60",X"00",X"60",X"0E",X"60",X"2A",X"40",X"3E",X"20",X"34",X"40",X"3E",X"20", - X"F2",X"20",X"50",X"20",X"4A",X"20",X"44",X"20",X"34",X"40",X"2A",X"40",X"1C",X"60",X"0E",X"60", - X"1C",X"60",X"2A",X"40",X"3E",X"20",X"34",X"40",X"3E",X"20",X"00",X"00",X"00",X"00",X"00",X"00", - X"F2",X"20",X"50",X"20",X"4A",X"20",X"44",X"20",X"34",X"40",X"2A",X"40",X"1C",X"60",X"2A",X"40", - X"34",X"40",X"3E",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"F2",X"C4",X"BB",X"B2",X"A9",X"A0",X"B2",X"A9",X"A0",X"B2",X"A9",X"A0",X"00",X"00",X"00",X"00", - X"F2",X"C4",X"BB",X"B2",X"BB",X"B2",X"A9",X"A0",X"A9",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", - X"F2",X"C4",X"BB",X"C4",X"B2",X"BB",X"A9",X"B2",X"A0",X"00",X"00",X"00",X"00",X"00",X"00",X"00", - X"56",X"EB",X"E5",X"D9",X"D3",X"CD",X"E5",X"EB",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"15",X"90",X"15",X"84",X"15",X"6C",X"17",X"CA",X"15",X"6C",X"17",X"CA",X"17",X"A0",X"17",X"70", - X"17",X"A0",X"17",X"70",X"17",X"CA",X"17",X"70",X"17",X"A0",X"17",X"CA",X"15",X"6C",X"15",X"78", - X"08",X"00",X"00",X"FF",X"02",X"00",X"F8",X"FF",X"08",X"02",X"02",X"FF",X"04",X"00",X"FA",X"FF", - X"08",X"04",X"04",X"FF",X"06",X"00",X"FC",X"FF",X"08",X"06",X"06",X"FF",X"08",X"00",X"FE",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"03",X"03",X"03",X"03",X"FF",X"FF",X"FF",X"03",X"02",X"02",X"02",X"02",X"03",X"FF", - X"03",X"02",X"02",X"01",X"01",X"02",X"02",X"03",X"03",X"02",X"01",X"00",X"00",X"01",X"02",X"03", - X"03",X"02",X"01",X"00",X"00",X"01",X"02",X"03",X"03",X"02",X"02",X"01",X"01",X"02",X"02",X"03", - X"FF",X"03",X"02",X"02",X"02",X"02",X"03",X"FF",X"FF",X"FF",X"03",X"03",X"03",X"03",X"FF",X"FF", - X"FF",X"FF",X"01",X"01",X"01",X"01",X"FF",X"FF",X"FF",X"01",X"03",X"03",X"03",X"03",X"01",X"FF", - X"01",X"03",X"03",X"00",X"00",X"03",X"03",X"01",X"01",X"03",X"00",X"02",X"02",X"00",X"03",X"01", - X"01",X"03",X"00",X"02",X"02",X"00",X"03",X"01",X"01",X"03",X"03",X"00",X"00",X"03",X"03",X"01", - X"FF",X"01",X"03",X"03",X"03",X"03",X"01",X"FF",X"FF",X"FF",X"01",X"01",X"01",X"01",X"FF",X"FF", - X"A0",X"42",X"04",X"00",X"AB",X"42",X"88",X"40",X"B6",X"41",X"88",X"00",X"A0",X"42",X"0C",X"40", - X"AB",X"42",X"46",X"00",X"B6",X"41",X"C6",X"40",X"A0",X"42",X"4A",X"00",X"A9",X"41",X"CA",X"40", - X"1B",X"1C",X"2E",X"2D",X"2E",X"2D",X"1C",X"1B",X"00",X"00",X"00",X"CE",X"B9",X"CE",X"B9",X"B7", - X"B6",X"B7",X"B6",X"00",X"00",X"00",X"FC",X"FD",X"FE",X"FF",X"FC",X"FD",X"FE",X"FF",X"00",X"00", - X"38",X"10",X"48",X"E7",X"48",X"20",X"48",X"49",X"68",X"30",X"4A",X"8D",X"C0",X"40",X"4A",X"98", - X"B0",X"50",X"49",X"76",X"90",X"60",X"48",X"72",X"50",X"70",X"49",X"6A",X"28",X"00",X"49",X"E5", - X"08",X"10",X"49",X"41",X"55",X"20",X"4A",X"0B",X"88",X"30",X"49",X"71",X"A8",X"40",X"4A",X"F5", - X"D0",X"50",X"48",X"77",X"78",X"60",X"48",X"6F",X"28",X"70",X"48",X"84",X"10",X"00",X"4A",X"FE", - X"12",X"12",X"11",X"10",X"1F",X"1E",X"1F",X"10",X"10",X"11",X"12",X"13",X"14",X"14",X"15",X"16", - X"17",X"18",X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"11",X"12",X"13", - X"14",X"0F",X"0F",X"0F",X"0F",X"15",X"16",X"17",X"18",X"17",X"16",X"15",X"15",X"16",X"17",X"18", - X"18",X"19",X"19",X"19",X"00",X"FF",X"13",X"13",X"13",X"14",X"14",X"15",X"15",X"14",X"14",X"13", - X"12",X"11",X"11",X"10",X"1F",X"1E",X"1E",X"1D",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"17",X"16", - X"15",X"0F",X"0F",X"13",X"12",X"12",X"11",X"11",X"11",X"11",X"10",X"10",X"1F",X"1F",X"1F",X"1F", - X"1F",X"00",X"FF",X"FF",X"13",X"13",X"13",X"12",X"12",X"12",X"11",X"10",X"10",X"10",X"10",X"1F", - X"1E",X"1D",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"11",X"12",X"13",X"14",X"14",X"15",X"16",X"17", - X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1B",X"1A",X"19",X"18",X"18",X"18",X"18",X"18",X"17",X"16", - X"15",X"0F",X"0F",X"0F",X"0F",X"13",X"13",X"12",X"12",X"12",X"12",X"11",X"11",X"11",X"11",X"10", - X"10",X"10",X"1F",X"1F",X"1F",X"00",X"FF",X"FF",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10", - X"10",X"10",X"10",X"11",X"13",X"14",X"15",X"17",X"18",X"17",X"16",X"15",X"0F",X"06",X"08",X"08", - X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"13",X"12",X"11",X"11",X"11",X"11",X"11", - X"11",X"11",X"00",X"FF",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"0E",X"0E",X"05", - X"1C",X"1B",X"1A",X"19",X"18",X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"13",X"12", - X"11",X"10",X"10",X"10",X"10",X"10",X"10",X"11",X"12",X"13",X"0F",X"06",X"0A",X"0A",X"0B",X"0B", - X"0B",X"0B",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0C",X"00",X"FF",X"FF",X"FF",X"FF", - X"FF",X"FF",X"11",X"11",X"12",X"12",X"13",X"13",X"14",X"14",X"14",X"0F",X"0F",X"0F",X"0F",X"0F", - X"0F",X"04",X"02",X"02",X"02",X"02",X"02",X"02",X"03",X"1C",X"1B",X"1A",X"1A",X"19",X"19",X"00", - X"FF",X"FF",X"11",X"11",X"12",X"12",X"13",X"13",X"14",X"15",X"17",X"18",X"19",X"1B",X"1C",X"1D", - X"1F",X"10",X"11",X"11",X"12",X"12",X"13",X"13",X"14",X"14",X"0F",X"0F",X"04",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"03",X"1C",X"1D",X"1E",X"1F",X"1F",X"00",X"FF",X"13",X"13",X"13",X"13", - X"13",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"1A",X"19",X"18",X"17",X"16",X"15", - X"14",X"14",X"14",X"13",X"13",X"0F",X"04",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"03",X"1C",X"1D",X"1E",X"1F",X"1F",X"1F",X"1F",X"00",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F", - X"0F",X"0F",X"06",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"07",X"09",X"0A",X"0B", - X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"00",X"FF",X"FF",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0A",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"00",X"FF",X"FF",X"1C",X"1C",X"1D",X"1E",X"1F",X"10",X"10",X"11",X"12",X"12",X"13",X"0F", - X"06",X"0B",X"0B",X"0B",X"0A",X"09",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0B",X"0B",X"0B",X"0B",X"00",X"FF",X"FF",X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17", - X"18",X"18",X"18",X"19",X"1A",X"1A",X"1B",X"1C",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10", - X"10",X"10",X"11",X"12",X"12",X"13",X"14",X"14",X"14",X"14",X"15",X"15",X"16",X"16",X"17",X"18", - X"18",X"18",X"19",X"1A",X"1A",X"0F",X"0F",X"0F",X"13",X"12",X"11",X"10",X"10",X"1F",X"1E",X"0F", - X"0F",X"16",X"17",X"17",X"17",X"17",X"00",X"FF",X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17", - X"18",X"18",X"18",X"19",X"1A",X"1B",X"1C",X"1C",X"1C",X"1D",X"1E",X"1E",X"1F",X"10",X"10",X"10", - X"11",X"12",X"12",X"13",X"0F",X"0F",X"0F",X"15",X"15",X"16",X"16",X"16",X"17",X"17",X"17",X"17", - X"17",X"17",X"17",X"17",X"00",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"06", - X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0A",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08", - X"08",X"00",X"FF",X"FF",X"08",X"08",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0B",X"0B",X"0B", - X"0B",X"0A",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"FF",X"FF",X"1C",X"1B",X"1A",X"19", - X"18",X"18",X"17",X"16",X"15",X"0F",X"06",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0A",X"09", - X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"FF",X"FF",X"16",X"15", - X"14",X"14",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1E",X"1D",X"1C",X"1C",X"1C",X"1B",X"1A",X"1A", - X"19",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"14",X"14",X"14",X"13",X"12",X"12",X"11", - X"11",X"10",X"10",X"10",X"1F",X"1E",X"1D",X"0F",X"0F",X"0F",X"15",X"16",X"17",X"18",X"18",X"18", - X"19",X"1A",X"0F",X"0F",X"0F",X"13",X"12",X"12",X"11",X"11",X"00",X"FF",X"16",X"15",X"14",X"14", - X"13",X"12",X"11",X"10",X"10",X"1F",X"1E",X"1D",X"1C",X"1C",X"1C",X"1C",X"1B",X"1A",X"1A",X"19", - X"18",X"18",X"18",X"18",X"17",X"16",X"16",X"15",X"14",X"14",X"14",X"13",X"13",X"12",X"12",X"12", - X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"FF",X"FF",X"15",X"15",X"15",X"15", - X"15",X"15",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1D",X"1E",X"1F",X"10",X"11",X"12",X"12", - X"13",X"0F",X"0F",X"0F",X"06",X"0B",X"0B",X"0B",X"0B",X"0D",X"0D",X"0D",X"0B",X"0B",X"0B",X"0B", - X"00",X"FF",X"0B",X"0B",X"0D",X"0D",X"0B",X"0D",X"0B",X"0D",X"0B",X"0B",X"0A",X"0A",X"0A",X"09", - X"09",X"09",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"08",X"09",X"0A",X"0B",X"0B",X"0D",X"0D", - X"0B",X"0B",X"0D",X"0D",X"0B",X"0B",X"0D",X"00",X"FF",X"FF",X"13",X"13",X"13",X"13",X"13",X"13", - X"13",X"13",X"12",X"11",X"10",X"1F",X"1E",X"1D",X"1C",X"1B",X"1A",X"19",X"18",X"17",X"16",X"15", - X"14",X"0F",X"0F",X"0F",X"0F",X"0F",X"06",X"09",X"08",X"08",X"0E",X"0E",X"0E",X"08",X"08",X"0E", - X"0E",X"00",X"FF",X"FF",X"11",X"10",X"1F",X"10",X"11",X"10",X"1F",X"10",X"11",X"10",X"1F",X"10", - X"11",X"11",X"12",X"0F",X"06",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0A", - X"09",X"08",X"08",X"08",X"0E",X"0E",X"0E",X"0E",X"08",X"08",X"08",X"0E",X"0E",X"00",X"FF",X"FF", - X"7E",X"E6",X"1F",X"C8",X"35",X"7E",X"CA",X"EC",X"2F",X"E6",X"E7",X"C2",X"95",X"0F",X"2C",X"46", - X"2C",X"56",X"2C",X"5E",X"7B",X"E6",X"1F",X"FE",X"04",X"D8",X"1D",X"21",X"E0",X"FF",X"19",X"36", - X"20",X"21",X"E2",X"4B",X"70",X"06",X"02",X"C3",X"C4",X"00",X"FF",X"FF",X"2C",X"2C",X"2C",X"7E", - X"E6",X"1F",X"FE",X"04",X"D8",X"35",X"2D",X"2D",X"2D",X"7E",X"C3",X"96",X"0F",X"FF",X"FF",X"FF", - X"21",X"93",X"43",X"7E",X"34",X"07",X"E6",X"06",X"C6",X"16",X"6F",X"26",X"30",X"7E",X"23",X"6E", - X"67",X"E9",X"FF",X"FF",X"FF",X"FF",X"30",X"20",X"30",X"A0",X"31",X"94",X"31",X"40",X"FF",X"FF", - X"21",X"D0",X"4B",X"7E",X"A7",X"C0",X"23",X"23",X"7E",X"A7",X"CA",X"3F",X"30",X"35",X"7E",X"E6", - X"03",X"C0",X"2D",X"7E",X"E6",X"F0",X"C8",X"7E",X"D6",X"10",X"77",X"2D",X"36",X"01",X"C9",X"3E", - X"FF",X"32",X"D9",X"4B",X"11",X"D1",X"4B",X"21",X"B4",X"43",X"7E",X"2C",X"6E",X"67",X"06",X"04", - X"CD",X"E0",X"05",X"7D",X"E6",X"7F",X"C2",X"5D",X"30",X"7D",X"C6",X"80",X"6F",X"7D",X"32",X"B5", - X"43",X"CD",X"78",X"30",X"0F",X"E6",X"3F",X"4F",X"21",X"D2",X"4B",X"7E",X"91",X"36",X"03",X"D8", - X"FE",X"04",X"D8",X"77",X"C9",X"FF",X"FF",X"FF",X"21",X"B8",X"43",X"7E",X"0F",X"0F",X"E6",X"1C", - X"4F",X"2C",X"2C",X"3E",X"10",X"96",X"81",X"4F",X"2E",X"9A",X"7E",X"0F",X"E6",X"7F",X"FE",X"20", - X"DA",X"95",X"30",X"3E",X"1F",X"81",X"4F",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"D0",X"4B",X"7E",X"FE",X"01",X"C0",X"21",X"70",X"4B",X"01",X"08",X"00",X"7E",X"E6",X"08", - X"CA",X"B4",X"30",X"04",X"2C",X"2C",X"2C",X"2C",X"0D",X"C2",X"AD",X"30",X"21",X"E4",X"4B",X"70", - X"21",X"D0",X"4B",X"36",X"00",X"3A",X"BA",X"43",X"90",X"C8",X"36",X"02",X"2C",X"47",X"7E",X"E6", - X"0F",X"2E",X"D7",X"77",X"B8",X"D8",X"70",X"C9",X"4B",X"7E",X"FE",X"02",X"C0",X"34",X"2E",X"D3", - X"3A",X"C2",X"43",X"96",X"16",X"00",X"D2",X"ED",X"30",X"2F",X"3C",X"16",X"20",X"47",X"0F",X"0F", - X"0F",X"E6",X"1F",X"5F",X"CD",X"78",X"30",X"0F",X"00",X"E6",X"3F",X"4F",X"78",X"E6",X"0F",X"91", - X"D2",X"05",X"31",X"3E",X"00",X"83",X"FE",X"20",X"DA",X"0D",X"31",X"3E",X"1F",X"E6",X"1E",X"B2", - X"47",X"21",X"D4",X"4B",X"7E",X"FE",X"40",X"3E",X"00",X"D2",X"1E",X"31",X"3E",X"40",X"B0",X"47", - X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"01",X"3E",X"00",X"CA",X"2E",X"31",X"3E",X"80",X"B0",X"5F", - X"16",X"28",X"2E",X"D5",X"1A",X"77",X"2C",X"1C",X"1A",X"77",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF", - X"21",X"D0",X"4B",X"7E",X"FE",X"03",X"C0",X"36",X"00",X"11",X"70",X"4B",X"01",X"50",X"4B",X"3A", - X"D3",X"4B",X"32",X"D8",X"4B",X"1A",X"E6",X"08",X"CA",X"6C",X"31",X"13",X"13",X"13",X"13",X"03", - X"03",X"00",X"00",X"7B",X"FE",X"90",X"C2",X"55",X"31",X"C9",X"FF",X"FF",X"1A",X"E6",X"F0",X"F6", - X"0C",X"12",X"13",X"13",X"2E",X"D8",X"7E",X"12",X"C6",X"10",X"77",X"13",X"2E",X"D4",X"7E",X"12", - X"23",X"7E",X"02",X"23",X"03",X"7E",X"02",X"13",X"03",X"23",X"35",X"C2",X"63",X"31",X"C9",X"00", - X"FF",X"FF",X"FF",X"FF",X"21",X"D0",X"4B",X"7E",X"FE",X"02",X"C0",X"34",X"2E",X"D9",X"34",X"C0", - X"C3",X"DE",X"30",X"FF",X"FF",X"FF",X"FF",X"FF",X"21",X"B9",X"43",X"7E",X"A7",X"C0",X"2E",X"B2", - X"7E",X"FE",X"1F",X"C0",X"2E",X"C2",X"7E",X"E6",X"07",X"C6",X"66",X"6F",X"26",X"32",X"46",X"3A", - X"B8",X"43",X"0F",X"0F",X"0F",X"0F",X"E6",X"0F",X"80",X"FE",X"08",X"DA",X"D0",X"31",X"3E",X"00", - X"47",X"0F",X"0F",X"0F",X"21",X"A5",X"43",X"77",X"2D",X"36",X"07",X"78",X"C6",X"6E",X"6F",X"26", - X"32",X"7E",X"21",X"9D",X"43",X"77",X"2C",X"36",X"00",X"11",X"79",X"41",X"06",X"04",X"CD",X"C4", - X"00",X"C3",X"00",X"07",X"C3",X"B4",X"32",X"35",X"CA",X"30",X"32",X"7E",X"E6",X"1F",X"CA",X"80", - X"03",X"FE",X"1F",X"C2",X"0B",X"32",X"3E",X"10",X"32",X"63",X"43",X"7E",X"0F",X"0F",X"E6",X"07", - X"4F",X"7E",X"E6",X"E0",X"0F",X"0F",X"0F",X"C6",X"80",X"6F",X"26",X"2B",X"06",X"2B",X"7E",X"81", - X"4F",X"23",X"56",X"23",X"5E",X"23",X"6E",X"26",X"2B",X"C3",X"40",X"32",X"FF",X"FF",X"FF",X"FF", - X"2E",X"A4",X"36",X"02",X"2E",X"B8",X"7E",X"E6",X"F0",X"C6",X"10",X"77",X"C3",X"80",X"03",X"FF", - X"D5",X"3E",X"00",X"12",X"7E",X"FE",X"FF",X"CA",X"50",X"32",X"C5",X"81",X"4F",X"0A",X"12",X"C1", - X"13",X"23",X"7D",X"E6",X"07",X"C2",X"41",X"32",X"D1",X"CD",X"17",X"02",X"7D",X"E6",X"3F",X"C2", - X"40",X"32",X"C9",X"FF",X"FF",X"FF",X"01",X"02",X"03",X"03",X"03",X"02",X"01",X"01",X"40",X"05", - X"10",X"15",X"20",X"25",X"30",X"35",X"21",X"95",X"43",X"7E",X"A7",X"C0",X"2E",X"B9",X"46",X"2D", - X"7E",X"2F",X"0F",X"E6",X"30",X"4F",X"7E",X"E6",X"10",X"07",X"C6",X"C0",X"6F",X"26",X"2B",X"E5", - X"CD",X"A0",X"32",X"E1",X"7D",X"C6",X"04",X"6F",X"E6",X"1F",X"C2",X"8F",X"32",X"C9",X"FF",X"FF", - X"7E",X"B8",X"C0",X"2C",X"3A",X"83",X"43",X"AE",X"A1",X"C0",X"2C",X"56",X"2C",X"5E",X"3E",X"6F", - X"12",X"C9",X"FF",X"FF",X"21",X"9B",X"43",X"7E",X"0F",X"D8",X"2E",X"A5",X"C3",X"F7",X"31",X"3A", - X"BB",X"43",X"A7",X"C8",X"07",X"07",X"07",X"4F",X"21",X"70",X"4B",X"06",X"80",X"CD",X"D8",X"05", - X"16",X"4B",X"26",X"3F",X"3E",X"40",X"91",X"C6",X"70",X"5F",X"C6",X"10",X"6F",X"41",X"3A",X"B8", - X"43",X"E6",X"10",X"CA",X"E0",X"05",X"7D",X"C6",X"40",X"6F",X"C3",X"E0",X"05",X"CD",X"E0",X"05", - X"21",X"E2",X"43",X"56",X"2C",X"5E",X"2E",X"B9",X"7E",X"C6",X"04",X"0F",X"0F",X"0F",X"83",X"E6", - X"1F",X"47",X"7B",X"E6",X"E0",X"B0",X"5F",X"7A",X"C6",X"08",X"57",X"01",X"02",X"02",X"C5",X"D5", - X"CD",X"2A",X"33",X"D1",X"C1",X"CD",X"9B",X"33",X"05",X"C2",X"0E",X"33",X"CD",X"F0",X"33",X"06", - X"02",X"0D",X"C2",X"0E",X"33",X"C3",X"90",X"37",X"FF",X"FF",X"1A",X"FE",X"6F",X"D8",X"16",X"A8", - X"CA",X"70",X"33",X"FE",X"7C",X"D0",X"FE",X"78",X"D2",X"42",X"33",X"E6",X"03",X"07",X"07",X"C6", - X"AC",X"57",X"CD",X"4C",X"33",X"C8",X"E1",X"E1",X"E1",X"C3",X"C4",X"0C",X"78",X"E6",X"01",X"47", - X"79",X"E6",X"01",X"07",X"B0",X"47",X"3A",X"B9",X"43",X"E6",X"04",X"B0",X"6F",X"26",X"3E",X"46", - X"3A",X"C2",X"43",X"0F",X"E6",X"03",X"82",X"6F",X"26",X"33",X"7E",X"A0",X"C9",X"FF",X"FF",X"FF", - X"CD",X"4C",X"33",X"C8",X"E1",X"E1",X"C1",X"AF",X"77",X"11",X"69",X"43",X"2F",X"12",X"21",X"70", - X"43",X"36",X"1A",X"2C",X"1E",X"B9",X"1A",X"2F",X"0F",X"E6",X"70",X"C6",X"10",X"77",X"2C",X"1E", - X"E2",X"1A",X"77",X"2C",X"1C",X"1A",X"3D",X"3D",X"77",X"C9",X"E1",X"2E",X"01",X"7B",X"85",X"E6", - X"1F",X"6F",X"7B",X"E6",X"E0",X"B5",X"5F",X"C9",X"FB",X"FA",X"EE",X"CC",X"33",X"3B",X"3A",X"EA", - X"BB",X"BB",X"FE",X"EF",X"1A",X"4A",X"CC",X"CC",X"BB",X"FA",X"EE",X"CC",X"21",X"E2",X"43",X"56", - X"2C",X"5E",X"13",X"13",X"2E",X"C2",X"7E",X"E6",X"06",X"47",X"2E",X"9B",X"7E",X"07",X"E6",X"08", - X"80",X"C6",X"70",X"6F",X"26",X"1B",X"CD",X"E6",X"33",X"3A",X"B8",X"43",X"E6",X"0F",X"FE",X"02", - X"C0",X"2D",X"1C",X"CD",X"10",X"02",X"7E",X"12",X"CD",X"17",X"02",X"2C",X"7E",X"12",X"C9",X"34", - X"2E",X"FE",X"CD",X"9D",X"33",X"C3",X"17",X"02",X"60",X"32",X"61",X"34",X"62",X"32",X"61",X"34", - X"CD",X"76",X"08",X"CD",X"00",X"38",X"CD",X"00",X"26",X"CD",X"00",X"38",X"CD",X"80",X"39",X"3A", - X"BB",X"43",X"A7",X"CA",X"62",X"34",X"FE",X"04",X"D2",X"38",X"34",X"CD",X"74",X"34",X"CD",X"86", - X"34",X"CD",X"60",X"35",X"CD",X"98",X"34",X"CD",X"AA",X"34",X"3A",X"9B",X"43",X"0F",X"DA",X"78", - X"0F",X"CD",X"30",X"39",X"C3",X"40",X"0C",X"FF",X"3A",X"9B",X"43",X"0F",X"DA",X"52",X"34",X"CD", - X"74",X"34",X"CD",X"60",X"35",X"CD",X"98",X"34",X"CD",X"30",X"39",X"C3",X"40",X"0C",X"FF",X"FF", - X"FF",X"FF",X"CD",X"86",X"34",X"CD",X"60",X"35",X"CD",X"AA",X"34",X"C3",X"78",X"0F",X"FF",X"FF", - X"FF",X"FF",X"3A",X"9B",X"43",X"0F",X"D8",X"CD",X"40",X"0C",X"CD",X"78",X"0F",X"C3",X"04",X"22", - X"FF",X"FF",X"FF",X"FF",X"21",X"70",X"4B",X"E5",X"CD",X"C0",X"34",X"E1",X"7D",X"C6",X"08",X"6F", - X"FE",X"90",X"C2",X"77",X"34",X"C9",X"21",X"90",X"4B",X"E5",X"CD",X"C0",X"34",X"E1",X"7D",X"C6", - X"08",X"6F",X"FE",X"B0",X"C2",X"89",X"34",X"C9",X"21",X"70",X"4B",X"E5",X"CD",X"B0",X"35",X"E1", - X"7D",X"C6",X"08",X"6F",X"FE",X"90",X"C2",X"9B",X"34",X"C9",X"21",X"90",X"4B",X"E5",X"CD",X"B0", - X"35",X"E1",X"7D",X"C6",X"08",X"6F",X"FE",X"B0",X"C2",X"AD",X"34",X"C9",X"FF",X"FF",X"FF",X"FF", - X"7E",X"A7",X"C8",X"47",X"C6",X"C0",X"5F",X"16",X"3E",X"1A",X"4F",X"2C",X"56",X"2C",X"5E",X"2C", - X"78",X"07",X"07",X"07",X"86",X"E6",X"7E",X"6F",X"26",X"3E",X"7E",X"2C",X"6E",X"67",X"7A",X"FE", - X"4B",X"C2",X"0C",X"35",X"7B",X"FE",X"50",X"DA",X"0C",X"35",X"06",X"08",X"2C",X"2C",X"D6",X"20", - X"5F",X"FE",X"50",X"DA",X"09",X"35",X"06",X"10",X"2C",X"2C",X"D6",X"20",X"5F",X"FE",X"50",X"DA", - X"09",X"35",X"06",X"18",X"2C",X"2C",X"D6",X"20",X"5F",X"79",X"80",X"4F",X"06",X"35",X"C5",X"01", - X"DF",X"FF",X"EB",X"36",X"00",X"23",X"36",X"00",X"09",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09", - X"1A",X"77",X"13",X"23",X"1A",X"77",X"13",X"09",X"36",X"00",X"23",X"36",X"00",X"C9",X"FF",X"FF", - X"CD",X"58",X"37",X"47",X"07",X"07",X"4F",X"07",X"07",X"B0",X"32",X"6F",X"43",X"3A",X"B8",X"43", - X"FE",X"40",X"DA",X"77",X"35",X"3E",X"30",X"E6",X"30",X"0F",X"47",X"3A",X"BB",X"43",X"3D",X"FE", - X"04",X"DA",X"86",X"35",X"3E",X"03",X"07",X"B0",X"47",X"3A",X"9A",X"43",X"07",X"07",X"E6",X"20", - X"B0",X"C6",X"80",X"6F",X"26",X"3E",X"7E",X"32",X"6E",X"43",X"2C",X"7E",X"81",X"E6",X"F8",X"32", - X"6D",X"43",X"C9",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", - X"7E",X"A7",X"C8",X"47",X"2C",X"2C",X"2C",X"2C",X"7E",X"A7",X"CA",X"BE",X"35",X"35",X"EB",X"D5", - X"78",X"07",X"07",X"07",X"6F",X"26",X"3F",X"46",X"23",X"4E",X"C5",X"23",X"46",X"23",X"4E",X"C5", - X"23",X"46",X"23",X"4E",X"C5",X"23",X"46",X"23",X"4E",X"C5",X"EB",X"C9",X"FF",X"FF",X"FF",X"FF", - X"2C",X"2C",X"7E",X"FE",X"10",X"D2",X"28",X"36",X"47",X"2D",X"86",X"77",X"2D",X"2D",X"78",X"86", - X"77",X"FE",X"08",X"DA",X"6A",X"36",X"E6",X"07",X"77",X"2D",X"7E",X"D6",X"20",X"77",X"D2",X"04", - X"36",X"2D",X"35",X"2C",X"2C",X"2C",X"2C",X"4E",X"2C",X"2C",X"7E",X"2D",X"36",X"10",X"91",X"CA", - X"72",X"36",X"3D",X"0F",X"0F",X"0F",X"E6",X"1F",X"B8",X"3C",X"77",X"D8",X"3A",X"6E",X"43",X"77", - X"B8",X"C8",X"04",X"70",X"C9",X"FF",X"FF",X"FF",X"E6",X"0F",X"CA",X"44",X"37",X"47",X"2D",X"7E", - X"90",X"77",X"2D",X"2D",X"7E",X"90",X"77",X"D2",X"95",X"36",X"E6",X"07",X"77",X"2D",X"7E",X"C6", - X"20",X"77",X"D2",X"48",X"36",X"2D",X"34",X"2C",X"2C",X"2C",X"2C",X"7E",X"2C",X"2C",X"96",X"0F", - X"0F",X"0F",X"E6",X"1F",X"B8",X"3C",X"2D",X"DA",X"63",X"36",X"3A",X"6E",X"43",X"B8",X"CA",X"63", - X"36",X"78",X"3C",X"F6",X"10",X"77",X"C9",X"77",X"C9",X"FF",X"78",X"A7",X"C0",X"2C",X"2C",X"2C", - X"34",X"C9",X"2D",X"46",X"2C",X"2C",X"3A",X"C2",X"43",X"E6",X"F8",X"B8",X"D2",X"80",X"36",X"47", - X"3A",X"6D",X"43",X"4F",X"C6",X"08",X"32",X"6D",X"43",X"78",X"91",X"36",X"08",X"D8",X"FE",X"08", - X"D8",X"77",X"C9",X"D8",X"FE",X"2C",X"2C",X"46",X"2C",X"2C",X"7E",X"B8",X"C0",X"2D",X"36",X"00", - X"2C",X"3A",X"C2",X"43",X"E6",X"F8",X"B8",X"DA",X"AB",X"36",X"47",X"3A",X"6D",X"43",X"C6",X"08", - X"32",X"6D",X"43",X"80",X"36",X"C8",X"D8",X"FE",X"C8",X"D0",X"77",X"C9",X"77",X"C9",X"FF",X"FF", - X"7E",X"0F",X"D8",X"2D",X"7E",X"3C",X"E6",X"07",X"77",X"C9",X"FF",X"FF",X"D1",X"C1",X"E1",X"C9", - X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"01",X"32",X"68",X"43",X"C9",X"FF",X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"0F",X"C0",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"02",X"32",X"68",X"43",X"C9",X"FF",X"FF",X"FF",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"0F",X"C0",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72",X"3A",X"68", - X"43",X"F6",X"04",X"32",X"68",X"43",X"3A",X"6F",X"43",X"A3",X"E6",X"F0",X"C0",X"7B",X"E6",X"0F", - X"77",X"2C",X"2C",X"2C",X"2C",X"71",X"3A",X"68",X"43",X"F6",X"08",X"32",X"68",X"43",X"C9",X"FF", - X"FF",X"FF",X"FF",X"FF",X"36",X"11",X"2D",X"35",X"2D",X"2D",X"36",X"07",X"2D",X"7E",X"C6",X"20", - X"77",X"D0",X"2D",X"34",X"C9",X"FF",X"FF",X"FF",X"21",X"9B",X"43",X"7E",X"07",X"07",X"07",X"E6", - X"07",X"2E",X"C2",X"86",X"E6",X"0F",X"C9",X"E6",X"0E",X"07",X"D1",X"C1",X"E1",X"7E",X"A7",X"C0", - X"2C",X"2C",X"7E",X"E6",X"10",X"C2",X"83",X"37",X"2D",X"2D",X"70",X"2D",X"2D",X"2D",X"2D",X"72", - X"C9",X"FF",X"FF",X"2D",X"2D",X"71",X"2D",X"2D",X"2D",X"2D",X"7B",X"E6",X"0F",X"77",X"C9",X"FF", - X"21",X"9B",X"43",X"7E",X"0F",X"D8",X"E6",X"03",X"07",X"07",X"C6",X"C0",X"6F",X"26",X"37",X"56", - X"23",X"4E",X"23",X"7E",X"23",X"6E",X"67",X"06",X"00",X"7E",X"E6",X"FC",X"FE",X"78",X"C2",X"B6", - X"37",X"7E",X"3C",X"E6",X"FB",X"77",X"09",X"15",X"C2",X"A9",X"37",X"C3",X"BC",X"33",X"FF",X"FF", - X"08",X"1F",X"48",X"07",X"08",X"21",X"4A",X"40",X"04",X"1F",X"49",X"1F",X"04",X"21",X"49",X"DC", - X"3A",X"92",X"43",X"E6",X"0C",X"0F",X"C6",X"F8",X"6F",X"26",X"33",X"7E",X"32",X"E7",X"49",X"32", - X"67",X"49",X"2C",X"56",X"21",X"6A",X"41",X"01",X"20",X"00",X"1E",X"05",X"3A",X"BC",X"43",X"70", - X"0F",X"DA",X"F5",X"37",X"72",X"09",X"1D",X"C2",X"EF",X"37",X"C9",X"34",X"62",X"32",X"61",X"34", - X"3A",X"C4",X"43",X"E6",X"08",X"C8",X"3A",X"E6",X"43",X"C6",X"08",X"57",X"3A",X"D2",X"4B",X"5F", - X"3A",X"E7",X"43",X"E6",X"E0",X"47",X"3A",X"E7",X"43",X"93",X"00",X"E6",X"1F",X"B0",X"5F",X"1A", - X"D6",X"90",X"D8",X"47",X"3A",X"C6",X"43",X"E6",X"07",X"C6",X"00",X"6F",X"26",X"3E",X"4E",X"7B", - X"E6",X"0E",X"07",X"07",X"5F",X"3E",X"A8",X"93",X"5F",X"16",X"4B",X"78",X"FE",X"40",X"DC",X"44", - X"38",X"C3",X"BA",X"38",X"C6",X"60",X"6F",X"26",X"3B",X"7E",X"A1",X"C8",X"CD",X"A1",X"38",X"EB", - X"7E",X"36",X"00",X"2C",X"2C",X"2C",X"2C",X"56",X"E1",X"21",X"BB",X"43",X"35",X"FE",X"08",X"DA", - X"80",X"38",X"5F",X"3E",X"FF",X"32",X"69",X"43",X"01",X"10",X"1F",X"7B",X"FE",X"0D",X"DA",X"FA", - X"38",X"0E",X"20",X"FE",X"0F",X"C2",X"FA",X"38",X"0E",X"40",X"C3",X"FA",X"38",X"0E",X"CA",X"FB", - X"01",X"05",X"39",X"3E",X"FF",X"32",X"64",X"43",X"C3",X"FA",X"38",X"FF",X"FF",X"FF",X"FF",X"FF", - X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0F",X"0F",X"0E",X"0E",X"0E",X"0E",X"0E",X"0F",X"0E",X"0F", - X"FF",X"D5",X"0E",X"20",X"EB",X"23",X"56",X"23",X"5E",X"3A",X"87",X"19",X"C6",X"EB",X"6F",X"26", - X"17",X"CD",X"DE",X"34",X"D1",X"C9",X"35",X"D1",X"C9",X"FF",X"78",X"FE",X"10",X"D8",X"C6",X"90", - X"6F",X"26",X"3B",X"7E",X"A1",X"C8",X"CD",X"A1",X"38",X"1A",X"D6",X"08",X"DA",X"EA",X"38",X"47", - X"62",X"7B",X"C6",X"05",X"6F",X"3A",X"C6",X"43",X"BE",X"17",X"07",X"07",X"07",X"E6",X"08",X"B0", - X"C6",X"90",X"6F",X"26",X"38",X"46",X"EB",X"CD",X"E0",X"3C",X"3E",X"FF",X"32",X"66",X"43",X"01", - X"02",X"53",X"C3",X"FA",X"38",X"53",X"C3",X"FA",X"38",X"FF",X"CD",X"14",X"39",X"70",X"2C",X"71", - X"2C",X"3A",X"E6",X"43",X"77",X"2C",X"3A",X"E7",X"43",X"77",X"3A",X"C4",X"43",X"E6",X"F7",X"32", - X"C4",X"43",X"C9",X"FF",X"21",X"70",X"43",X"7E",X"E6",X"1F",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E", - X"E6",X"1F",X"C8",X"2C",X"2C",X"2C",X"2C",X"7E",X"E6",X"1F",X"C8",X"2C",X"2C",X"2C",X"2C",X"C9", - X"3A",X"D2",X"4B",X"E6",X"1E",X"C6",X"C0",X"6F",X"26",X"3D",X"5E",X"2C",X"6E",X"26",X"4B",X"CD", - X"00",X"3A",X"3A",X"9F",X"43",X"82",X"4F",X"3A",X"9E",X"43",X"92",X"47",X"E5",X"CD",X"5C",X"39", - X"E1",X"7D",X"C6",X"08",X"6F",X"1D",X"C2",X"4C",X"39",X"C9",X"FF",X"FF",X"7E",X"FE",X"05",X"D8", - X"7D",X"C6",X"05",X"6F",X"7E",X"B8",X"D8",X"B9",X"D0",X"D6",X"04",X"47",X"2D",X"2D",X"2D",X"3A", - X"D2",X"4B",X"86",X"E6",X"1F",X"07",X"07",X"07",X"C6",X"08",X"4F",X"C3",X"B7",X"25",X"FF",X"FF", - X"3A",X"D2",X"4B",X"D6",X"0C",X"D8",X"FE",X"10",X"D0",X"21",X"C4",X"43",X"11",X"C0",X"4B",X"06", - X"04",X"CD",X"E0",X"05",X"2E",X"E6",X"06",X"02",X"CD",X"E0",X"05",X"2E",X"E2",X"11",X"E6",X"43", - X"06",X"02",X"CD",X"E0",X"05",X"2E",X"C4",X"36",X"08",X"11",X"9E",X"43",X"3A",X"9B",X"43",X"0F", - X"DA",X"BF",X"39",X"1C",X"2E",X"E7",X"7E",X"D6",X"20",X"77",X"2D",X"7E",X"DE",X"00",X"77",X"1A", - X"32",X"C6",X"43",X"CD",X"00",X"38",X"21",X"C4",X"43",X"7E",X"E6",X"08",X"CA",X"F0",X"39",X"21", - X"E7",X"43",X"34",X"7E",X"E6",X"1F",X"FE",X"1D",X"DA",X"C3",X"39",X"21",X"C0",X"4B",X"11",X"C4", - X"43",X"06",X"04",X"CD",X"E0",X"05",X"1E",X"E6",X"06",X"02",X"C3",X"E0",X"05",X"FF",X"FF",X"FF", - X"2E",X"A6",X"7E",X"FE",X"C0",X"DA",X"C4",X"0C",X"D6",X"01",X"77",X"C3",X"DB",X"39",X"FF",X"FF", - X"3A",X"BB",X"43",X"D6",X"0C",X"2F",X"3C",X"57",X"3A",X"9B",X"43",X"0F",X"0F",X"D8",X"E1",X"C9", - X"21",X"B8",X"11",X"8C",X"43",X"CD",X"2A",X"3A",X"CD",X"48",X"3A",X"21",X"66",X"43",X"7E",X"A7", - X"C8",X"36",X"00",X"1A",X"F6",X"40",X"12",X"C9",X"FF",X"FF",X"21",X"69",X"43",X"7E",X"A7",X"C8", - X"E6",X"3F",X"3D",X"77",X"0F",X"0F",X"0F",X"00",X"E6",X"07",X"47",X"7E",X"0F",X"E6",X"03",X"80", - X"47",X"1A",X"E6",X"F0",X"B0",X"12",X"C9",X"FF",X"21",X"64",X"43",X"7E",X"A7",X"C8",X"E6",X"1F", - X"3D",X"77",X"0F",X"0F",X"2F",X"E6",X"07",X"47",X"7E",X"07",X"E6",X"06",X"80",X"47",X"1A",X"E6", - X"F0",X"B0",X"12",X"C9",X"8C",X"77",X"C9",X"FE",X"10",X"DA",X"78",X"3A",X"36",X"10",X"3A",X"B8", - X"3A",X"A4",X"43",X"FE",X"03",X"C2",X"BD",X"27",X"3A",X"B8",X"43",X"E6",X"07",X"07",X"C6",X"8A", - X"6F",X"26",X"3A",X"7E",X"2C",X"6E",X"67",X"E9",X"C9",X"FF",X"3A",X"88",X"27",X"E6",X"3A",X"9A", - X"3A",X"D0",X"3A",X"88",X"27",X"E6",X"3A",X"B4",X"3A",X"E8",X"21",X"8C",X"43",X"36",X"AF",X"3A", - X"B9",X"43",X"FE",X"FD",X"D0",X"36",X"BF",X"E6",X"07",X"C8",X"36",X"7F",X"E6",X"01",X"C8",X"36", - X"3F",X"C9",X"21",X"2F",X"3A",X"9A",X"43",X"FE",X"02",X"D0",X"E6",X"0F",X"67",X"3A",X"9B",X"43", - X"E6",X"FC",X"6F",X"7E",X"E6",X"01",X"C8",X"3E",X"0D",X"32",X"8C",X"43",X"C9",X"FF",X"FF",X"FF", - X"3A",X"BB",X"43",X"A7",X"C8",X"21",X"8C",X"43",X"36",X"3F",X"3A",X"B9",X"43",X"FE",X"F0",X"D8", - X"E6",X"07",X"C0",X"36",X"2F",X"C9",X"C9",X"F7",X"CD",X"B4",X"3A",X"3A",X"95",X"43",X"A7",X"CA", - X"E0",X"3D",X"3A",X"9C",X"43",X"E6",X"7C",X"C8",X"0F",X"0F",X"32",X"8D",X"43",X"C9",X"77",X"C9", - X"06",X"00",X"21",X"B8",X"43",X"7E",X"E6",X"0E",X"FE",X"00",X"C8",X"06",X"40",X"FE",X"06",X"C8", - X"06",X"80",X"C9",X"06",X"80",X"C9",X"80",X"B6",X"77",X"C9",X"78",X"21",X"62",X"43",X"7E",X"A7", - X"C8",X"3D",X"E6",X"3F",X"77",X"07",X"00",X"E6",X"0C",X"47",X"2E",X"8D",X"7E",X"E6",X"F0",X"B0", - X"77",X"C9",X"C9",X"21",X"6A",X"43",X"7E",X"A7",X"C8",X"35",X"E6",X"08",X"F6",X"07",X"2E",X"8D", - X"77",X"C9",X"8D",X"CD",X"70",X"3A",X"CD",X"33",X"3B",X"CD",X"1B",X"3B",X"CD",X"12",X"3A",X"CD", - X"D2",X"27",X"CD",X"00",X"3B",X"2E",X"8D",X"7E",X"E6",X"3F",X"B0",X"77",X"C9",X"3A",X"FF",X"FF", - X"FE",X"F8",X"0F",X"3F",X"FF",X"FE",X"3F",X"F8",X"FF",X"FF",X"FF",X"0F",X"FF",X"FF",X"FF",X"FF", - X"0F",X"E0",X"3F",X"F8",X"0F",X"F8",X"0F",X"FC",X"07",X"FC",X"07",X"FC",X"F8",X"0F",X"F8",X"0F", - X"F8",X"0F",X"F8",X"0F",X"E0",X"3F",X"E0",X"3F",X"E0",X"3F",X"E0",X"3F",X"FF",X"80",X"FF",X"FF", - X"80",X"FF",X"FE",X"03",X"FE",X"03",X"FE",X"03",X"FE",X"03",X"07",X"07",X"00",X"00",X"00",X"00", - X"F0",X"1F",X"C0",X"07",X"F0",X"07",X"F0",X"03",X"F8",X"03",X"F8",X"03",X"07",X"F0",X"07",X"F0", - X"07",X"F0",X"07",X"F0",X"1F",X"C0",X"1F",X"C0",X"1F",X"C0",X"1F",X"C0",X"00",X"7F",X"00",X"00", - X"7F",X"00",X"01",X"FC",X"01",X"FC",X"01",X"FC",X"01",X"FC",X"F8",X"F8",X"FF",X"FF",X"00",X"00", - X"3F",X"FF",X"3F",X"FF",X"FC",X"FF",X"FE",X"FF",X"FF",X"FF",X"FE",X"7F",X"FE",X"FF",X"FF",X"FF", - X"FF",X"FF",X"FF",X"F8",X"FF",X"FF",X"7F",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"0F",X"FF",X"1F",X"00",X"80",X"E0",X"F8",X"FE",X"03",X"0F",X"3F",X"FF", - X"00",X"E0",X"F9",X"E1",X"AC",X"AE",X"AD",X"AF",X"00",X"E2",X"00",X"FD",X"00",X"00",X"00",X"E7", - X"F8",X"FF",X"B4",X"B6",X"B5",X"B7",X"00",X"E8",X"00",X"FE",X"00",X"00",X"FA",X"00",X"FC",X"EC", - X"FB",X"BD",X"BC",X"BE",X"00",X"ED",X"00",X"EE",X"00",X"00",X"F9",X"00",X"FD",X"F2",X"FA",X"F3", - X"C2",X"C4",X"C3",X"C5",X"00",X"DF",X"00",X"FC",X"00",X"FB",X"00",X"F5",X"C6",X"C8",X"C7",X"C9", - X"00",X"FF",X"00",X"F6",X"00",X"00",X"00",X"E3",X"00",X"E4",X"B0",X"B2",X"B1",X"B3",X"FC",X"E5", - X"00",X"E6",X"00",X"00",X"00",X"F9",X"00",X"E9",X"B8",X"BA",X"B9",X"BB",X"FD",X"EA",X"00",X"EB", - X"00",X"00",X"00",X"F8",X"00",X"EF",X"F8",X"C0",X"BF",X"C1",X"FE",X"F0",X"F8",X"F1",X"FC",X"00", - X"00",X"DC",X"00",X"DD",X"A7",X"A9",X"CA",X"AA",X"CC",X"D1",X"D0",X"F4",X"00",X"DC",X"00",X"DD", - X"A7",X"AB",X"CB",X"AA",X"CD",X"D3",X"D2",X"F4",X"D4",X"DC",X"D5",X"D8",X"A7",X"A9",X"A8",X"AA", - X"00",X"DE",X"00",X"F4",X"D6",X"DC",X"D7",X"D9",X"A7",X"AB",X"A8",X"AA",X"00",X"DE",X"00",X"F4", - X"D4",X"DC",X"D5",X"D8",X"A7",X"A9",X"CB",X"AA",X"CD",X"D3",X"D2",X"F4",X"D6",X"DC",X"D7",X"D9", - X"A7",X"AB",X"CA",X"AA",X"CC",X"D1",X"D0",X"F4",X"00",X"DC",X"00",X"DD",X"A7",X"A9",X"A8",X"AA", - X"00",X"DE",X"00",X"F4",X"00",X"E3",X"00",X"E4",X"B0",X"B2",X"AD",X"AF",X"00",X"E2",X"00",X"FD", - X"00",X"E0",X"F9",X"E1",X"AC",X"AE",X"B1",X"B3",X"FC",X"E5",X"00",X"E6",X"B8",X"BB",X"B9",X"BC", - X"7D",X"C6",X"05",X"6F",X"7E",X"E6",X"F8",X"2C",X"2C",X"BE",X"C8",X"2D",X"7E",X"E6",X"F0",X"77", - X"2D",X"7E",X"E6",X"F8",X"77",X"2D",X"36",X"80",X"2D",X"36",X"00",X"2D",X"2D",X"2D",X"70",X"C9", - X"00",X"00",X"00",X"00",X"90",X"00",X"FC",X"00",X"00",X"00",X"00",X"00",X"91",X"00",X"92",X"00", - X"00",X"00",X"00",X"00",X"F9",X"00",X"93",X"00",X"00",X"00",X"00",X"00",X"F8",X"00",X"94",X"00", - X"00",X"00",X"00",X"00",X"95",X"00",X"96",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"97",X"00", - X"98",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F9",X"00",X"99",X"00",X"FC",X"00",X"00",X"00", - X"00",X"00",X"F8",X"00",X"9A",X"00",X"9B",X"00",X"00",X"00",X"FB",X"00",X"9C",X"00",X"FE",X"00", - X"00",X"00",X"00",X"00",X"FA",X"00",X"9D",X"00",X"9E",X"00",X"00",X"00",X"00",X"00",X"F9",X"00", - X"9F",X"00",X"A0",X"00",X"FC",X"00",X"00",X"00",X"F8",X"00",X"A1",X"00",X"A2",X"00",X"FD",X"00", - X"00",X"00",X"00",X"DA",X"A3",X"A5",X"A4",X"A6",X"00",X"DB",X"00",X"00",X"21",X"D0",X"4B",X"7E", - X"FE",X"03",X"2E",X"E3",X"C2",X"89",X"3D",X"36",X"10",X"7E",X"A7",X"C8",X"35",X"2F",X"00",X"E6", - X"0F",X"F6",X"10",X"32",X"8D",X"43",X"E1",X"C9",X"21",X"70",X"4B",X"01",X"00",X"00",X"11",X"08", - X"08",X"7E",X"2C",X"A2",X"CA",X"AF",X"3D",X"04",X"7E",X"FE",X"30",X"D2",X"AF",X"3D",X"4F",X"2C", - X"2C",X"2C",X"1D",X"C2",X"A1",X"3D",X"C9",X"00",X"0C",X"0C",X"0E",X"FF",X"0D",X"0E",X"0D",X"FF", - X"06",X"70",X"07",X"70",X"08",X"70",X"07",X"78",X"06",X"80",X"05",X"88",X"04",X"90",X"03",X"98", - X"02",X"A0",X"01",X"A8",X"01",X"70",X"01",X"70",X"02",X"70",X"03",X"70",X"04",X"70",X"05",X"70", - X"21",X"8D",X"43",X"36",X"3F",X"3A",X"B9",X"43",X"FE",X"FC",X"D0",X"36",X"2F",X"E6",X"01",X"C8", - X"2D",X"7E",X"F6",X"40",X"77",X"C9",X"05",X"04",X"03",X"02",X"02",X"02",X"02",X"02",X"02",X"02", - X"01",X"02",X"04",X"08",X"10",X"20",X"40",X"80",X"3D",X"00",X"3D",X"08",X"3D",X"10",X"3D",X"18", - X"3D",X"20",X"3D",X"2A",X"3D",X"34",X"3D",X"3E",X"3D",X"48",X"3D",X"52",X"3D",X"5C",X"3D",X"66", - X"3D",X"48",X"3D",X"52",X"3D",X"5C",X"3D",X"70",X"3D",X"70",X"3D",X"70",X"3C",X"B8",X"3C",X"B8", - X"3D",X"70",X"3D",X"5C",X"3D",X"52",X"3D",X"48",X"3C",X"B8",X"3C",X"B8",X"3D",X"70",X"3D",X"70", - X"3C",X"B8",X"3C",X"C4",X"3C",X"B8",X"3C",X"D0",X"3C",X"46",X"3C",X"B8",X"3C",X"B8",X"3C",X"00", - X"3C",X"00",X"3C",X"B8",X"3C",X"B8",X"3C",X"46",X"3C",X"00",X"3C",X"0E",X"3C",X"1C",X"3C",X"2A", - X"3C",X"38",X"3C",X"46",X"3C",X"54",X"3C",X"62",X"3C",X"70",X"3C",X"70",X"3C",X"7C",X"3C",X"7C", - X"3C",X"88",X"3C",X"88",X"3C",X"94",X"3C",X"94",X"3C",X"A0",X"3C",X"A0",X"3C",X"AC",X"3C",X"AC", - X"04",X"40",X"03",X"20",X"02",X"30",X"02",X"10",X"05",X"48",X"04",X"28",X"03",X"38",X"02",X"18", - X"06",X"50",X"05",X"30",X"04",X"40",X"03",X"20",X"07",X"58",X"06",X"38",X"05",X"48",X"04",X"28", - X"05",X"10",X"04",X"20",X"03",X"30",X"03",X"40",X"06",X"18",X"05",X"28",X"04",X"38",X"03",X"48", - X"07",X"20",X"06",X"30",X"05",X"40",X"04",X"50",X"08",X"30",X"07",X"40",X"06",X"50",X"05",X"60", - X"FF",X"38",X"30",X"30",X"30",X"28",X"30",X"28",X"28",X"28",X"28",X"20",X"20",X"28",X"28",X"28", - X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"01",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"01", - X"14",X"15",X"16",X"10",X"08",X"04",X"00",X"00",X"00",X"01",X"01",X"02",X"02",X"03",X"03",X"04", - X"04",X"05",X"06",X"07",X"08",X"09",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",X"10",X"11",X"12",X"13", - X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"20",X"FF",X"02",X"FF",X"36",X"D2",X"35",X"E0", - X"30",X"FF",X"03",X"FF",X"36",X"D2",X"35",X"E0",X"10",X"FF",X"04",X"FF",X"36",X"EA",X"35",X"E0", - X"10",X"FF",X"05",X"FF",X"36",X"EA",X"36",X"C0",X"10",X"FF",X"08",X"FF",X"36",X"EA",X"36",X"C0", - X"30",X"FF",X"03",X"FF",X"36",X"EA",X"36",X"C0",X"10",X"FF",X"06",X"FF",X"36",X"EA",X"36",X"C0", - X"10",X"10",X"09",X"1A",X"37",X"6A",X"36",X"C0",X"10",X"10",X"0B",X"38",X"37",X"0A",X"36",X"C0", - X"10",X"10",X"0C",X"38",X"37",X"0A",X"36",X"C0",X"10",X"10",X"0A",X"77",X"37",X"0A",X"35",X"E0", - X"10",X"10",X"09",X"77",X"37",X"0A",X"35",X"E0",X"10",X"FF",X"08",X"FF",X"36",X"D2",X"36",X"C0", - X"10",X"FF",X"08",X"FF",X"36",X"D2",X"36",X"C0",X"10",X"FF",X"08",X"FF",X"36",X"D2",X"36",X"C0", - X"01",X"48",X"6E",X"00",X"10",X"D0",X"10",X"10",X"01",X"4A",X"8C",X"00",X"20",X"48",X"00",X"B8", - X"01",X"4A",X"2A",X"00",X"30",X"60",X"10",X"28",X"01",X"49",X"68",X"00",X"40",X"90",X"00",X"B0", - X"01",X"4A",X"E6",X"00",X"50",X"30",X"00",X"60",X"01",X"4A",X"84",X"00",X"60",X"48",X"00",X"A0", - X"01",X"48",X"C2",X"00",X"70",X"B8",X"10",X"80",X"01",X"49",X"40",X"00",X"80",X"98",X"10",X"40", - X"01",X"4B",X"2E",X"00",X"10",X"20",X"00",X"40",X"01",X"48",X"6C",X"00",X"20",X"D0",X"10",X"70", - X"01",X"4A",X"CA",X"00",X"30",X"38",X"00",X"58",X"01",X"48",X"C8",X"00",X"40",X"B8",X"10",X"58", - X"01",X"4A",X"66",X"00",X"50",X"50",X"00",X"70",X"01",X"49",X"24",X"00",X"60",X"A0",X"10",X"40", - X"01",X"4A",X"02",X"00",X"70",X"68",X"00",X"88",X"01",X"49",X"80",X"00",X"80",X"88",X"10",X"28"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/build_id.tcl b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/build_id.tcl deleted file mode 100644 index 938515d8..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/build_id.tcl +++ /dev/null @@ -1,35 +0,0 @@ -# ================================================================================ -# -# 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/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/gen_ram.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/gen_ram.vhd deleted file mode 100644 index 0794fdc0..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/gen_ram.vhd +++ /dev/null @@ -1,82 +0,0 @@ --- ----------------------------------------------------------------------- --- --- Syntiac's generic VHDL support files. --- --- ----------------------------------------------------------------------- --- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com) --- http://www.syntiac.com/fpga64.html --- --- Modified April 2016 by Dar (darfpga@aol.fr) --- http://darfpga.blogspot.fr --- Remove address register when writing --- --- ----------------------------------------------------------------------- --- --- gen_rwram.vhd --- --- ----------------------------------------------------------------------- --- --- generic ram. --- --- ----------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.numeric_std.ALL; - --- ----------------------------------------------------------------------- - -entity gen_ram is - generic ( - dWidth : integer := 8; - aWidth : integer := 10 - ); - port ( - clk : in std_logic; - we : in std_logic; - addr : in std_logic_vector((aWidth-1) downto 0); - d : in std_logic_vector((dWidth-1) downto 0); - q : out std_logic_vector((dWidth-1) downto 0) - ); -end entity; - --- ----------------------------------------------------------------------- - -architecture rtl of gen_ram is - subtype addressRange is integer range 0 to ((2**aWidth)-1); - type ramDef is array(addressRange) of std_logic_vector((dWidth-1) downto 0); - signal ram: ramDef; - - signal rAddrReg : std_logic_vector((aWidth-1) downto 0); - signal qReg : std_logic_vector((dWidth-1) downto 0); -begin --- ----------------------------------------------------------------------- --- Signals to entity interface --- ----------------------------------------------------------------------- - q <= qReg; - --- ----------------------------------------------------------------------- --- Memory write --- ----------------------------------------------------------------------- - process(clk) - begin - if rising_edge(clk) then - if we = '1' then - ram(to_integer(unsigned(addr))) <= d; - end if; - end if; - end process; - --- ----------------------------------------------------------------------- --- Memory read --- ----------------------------------------------------------------------- - process(clk) - begin - if rising_edge(clk) then --- qReg <= ram(to_integer(unsigned(rAddrReg))); --- rAddrReg <= addr; - qReg <= ram(to_integer(unsigned(addr))); - end if; - end process; -end architecture; - diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix.vhd deleted file mode 100644 index 185cdc4b..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix.vhd +++ /dev/null @@ -1,463 +0,0 @@ ---------------------------------------------------------------------------------- --- DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix is -generic ( - C_test_picture: boolean := false; - C_tile_rom: boolean := true; -- false: disable tile ROM to try game logic on small FPGA - -- reduce ROMs: 14 is normal game, 13 will draw initial screen, 12 will repeatedly blink 1 line of garbage - C_autofire: boolean := true; - -- C_audio: boolean := true; - C_prog_rom_addr_bits: integer range 12 to 14 := 14 -); -port( - clk : in std_logic; -- 11 MHz for TV, 25 MHz for VGA - reset : in std_logic; - ce_pix : out std_logic; - - dip_switch : in std_logic_vector(7 downto 0); - -- game controls, normal logic '1':pressed, '0':released - - btn_coin: in std_logic; - btn_player_start: in std_logic_vector(1 downto 0); - btn_fire, btn_left, btn_right, btn_barrier: in std_logic; - - video_r : out std_logic_vector(1 downto 0); - video_g : out std_logic_vector(1 downto 0); - video_b : out std_logic_vector(1 downto 0); - video_vblank, video_hblank_bg, video_hblank_fg: out std_logic; - video_hs : out std_logic; - video_vs : out std_logic; - - sound_fire : out std_logic; -- '1' when missile fires - sound_explode: out std_logic; -- '1' when ship explodes - sound_burn : out std_logic; -- bird burns - sound_fireball: out std_logic; -- bird explodes in 2 fireballs - sound_ab : out std_logic_vector(15 downto 0); - audio_select : in std_logic_vector(2 downto 0) := (others => '0'); - audio : out std_logic_vector(11 downto 0) -); -end phoenix; - -architecture struct of phoenix is - - signal reset_n: std_logic; - - signal hcnt : std_logic_vector(9 downto 1); - signal vcnt : std_logic_vector(8 downto 1); - signal sync : std_logic; - signal adrsel : std_logic; - signal rdy : std_logic := '1'; - signal vblank : std_logic; - signal hblank_bkgrd : std_logic; - signal hblank_frgrd : std_logic; - signal ce_pix1 : std_logic; - - signal cpu_ce : std_logic; - signal cpu_adr : std_logic_vector(15 downto 0); - signal cpu_di : std_logic_vector( 7 downto 0); - signal cpu_do : std_logic_vector( 7 downto 0); - signal cpu_wr_n : std_logic; - signal prog_do : std_logic_vector( 7 downto 0); - signal S_prog_rom_addr : std_logic_vector(13 downto 0); - - signal frgnd_horz_cnt : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_horz_cnt : std_logic_vector(7 downto 0) := (others =>'0'); - signal vert_cnt : std_logic_vector(7 downto 0) := (others =>'0'); - - signal frgnd_ram_adr: std_logic_vector(10 downto 0) := (others =>'0'); - signal bkgnd_ram_adr: std_logic_vector(10 downto 0) := (others =>'0'); - signal frgnd_ram_do : std_logic_vector( 7 downto 0) := (others =>'0'); - signal bkgnd_ram_do : std_logic_vector( 7 downto 0) := (others =>'0'); - signal frgnd_ram_we : std_logic := '0'; - signal bkgnd_ram_we : std_logic := '0'; - - signal frgnd_graph_adr : std_logic_vector(11 downto 0) := (others =>'0'); - signal bkgnd_graph_adr : std_logic_vector(11 downto 0) := (others =>'0'); - signal palette_adr : std_logic_vector( 7 downto 0) := (others =>'0'); - signal A11 : std_logic; - - signal frgnd_clk : std_logic; - signal bkgnd_clk : std_logic; - - signal frgnd_tile_id : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_tile_id : std_logic_vector(7 downto 0) := (others =>'0'); - - signal frgnd_bit0_graph : std_logic_vector(7 downto 0) := (others =>'0'); - signal frgnd_bit1_graph : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit0_graph : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit1_graph : std_logic_vector(7 downto 0) := (others =>'0'); - - signal frgnd_bit0_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - signal frgnd_bit1_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit0_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - signal bkgnd_bit1_graph_r : std_logic_vector(7 downto 0) := (others =>'0'); - - signal fr_bit0 : std_logic; - signal fr_bit1 : std_logic; - signal bk_bit0 : std_logic; - signal bk_bit1 : std_logic; - signal fr_lin : std_logic_vector(2 downto 0); - signal bk_lin : std_logic_vector(2 downto 0); - - signal color_set : std_logic_vector(1 downto 0); - signal color_id : std_logic_vector(5 downto 0); - signal rgb : std_logic_vector(7 downto 0); - - signal player2 : std_logic := '0'; - signal pl2_cocktail : std_logic := '0'; - signal bkgnd_offset : std_logic_vector(7 downto 0) := (others =>'0'); - signal sound_a : std_logic_vector(7 downto 0) := (others =>'0'); - signal sound_b : std_logic_vector(7 downto 0) := (others =>'0'); - - signal clk10 : std_logic; - signal snd1 : std_logic_vector( 7 downto 0) := (others =>'0'); - signal snd2 : std_logic_vector( 1 downto 0) := (others =>'0'); - signal snd3 : std_logic_vector( 7 downto 0) := (others =>'0'); - signal song : std_logic_vector( 7 downto 0) := (others =>'0'); - signal mixed : std_logic_vector(11 downto 0) := (others =>'0'); - signal sound_string : std_logic_vector(31 downto 0); - - signal coin : std_logic; - signal player_start : std_logic_vector(1 downto 0); - signal buttons : std_logic_vector(3 downto 0); - signal R_autofire : std_logic_vector(21 downto 0); -begin - --- game core uses inverted control logic -coin <= not btn_coin; -- insert coin -player_start <= not btn_player_start; -- select 1 or 2 players -buttons(1) <= not btn_right; -- Right -buttons(2) <= not btn_left; -- Left -buttons(3) <= not btn_barrier; -- Protection - -G_not_autofire: if not C_autofire generate - buttons(0) <= not btn_fire; -- Fire -end generate; - -G_yes_autofire: if C_autofire generate - process(clk) - begin - if rising_edge(clk) then - if btn_fire='1' then - R_autofire <= R_autofire-1; - else - R_autofire <= (others => '0'); - end if; - end if; - end process; - buttons(0) <= not R_autofire(R_autofire'high); -end generate; - - video: entity work.phoenix_video - port map - ( - clk11 => clk, - ce_pix => ce_pix1, - hcnt => hcnt, - vcnt => vcnt, - sync_hs => video_hs, - sync_vs => video_vs, - adrsel => adrsel, -- RAM address selector ('0')cpu / ('1')video_generator - rdy => rdy, -- Ready ('1')cpu can access RAMs read/write - vblank => vblank, - hblank_frgrd => hblank_frgrd, - hblank_bkgrd => hblank_bkgrd, - reset => reset - ); - reset_n <= not reset; - ce_pix <= ce_pix1; - - process(clk) - begin - if rising_edge(clk) then - cpu_ce <= not cpu_ce; - end if; - end process; - --- microprocessor 8085 -cpu8085 : entity work.T8080se -generic map -( - Mode => 2, - T2Write => 0 -) -port map( - RESET_n => reset_n, - CLK => clk, - CLKEN => cpu_ce, -- fixme: use it to make 5.5 MHz clock average - READY => rdy, - HOLD => '1', - INT => '1', - INTE => open, - DBIN => open, - SYNC => open, - VAIT => open, - HLDA => open, - WR_n => cpu_wr_n, - A => cpu_adr, - DI => cpu_di, - DO => cpu_do -); - --- mux prog, ram, vblank, switch... to processor data bus in -cpu_di <= prog_do when cpu_adr(15 downto 14) = "00" else - frgnd_ram_do when cpu_adr(13 downto 10) = 2#00_00# else - bkgnd_ram_do when cpu_adr(13 downto 10) = 2#00_10# else - buttons & '0' & player_start & coin when cpu_adr(13 downto 10) = 2#11_00# else--buttons & '1' - not vblank & dip_switch(6 downto 0) when cpu_adr(13 downto 10) = 2#11_10# else - x"FF"; - --- write enable to RAMs from cpu -frgnd_ram_we <= '1' when cpu_wr_n = '0' and cpu_adr(14 downto 10) = "10000" and adrsel = '0' else '0'; -bkgnd_ram_we <= '1' when cpu_wr_n = '0' and cpu_adr(14 downto 10) = "10010" and adrsel = '0' else '0'; - --- RAMs address mux cpu/video_generator, bank0 for player1, bank1 for player2 -frgnd_ram_adr <= player2 & cpu_adr(9 downto 0) when adrsel ='0' else player2 & vert_cnt(7 downto 3) & frgnd_horz_cnt(7 downto 3); -bkgnd_ram_adr <= player2 & cpu_adr(9 downto 0) when adrsel ='0' else player2 & vert_cnt(7 downto 3) & bkgnd_horz_cnt(7 downto 3); - --- demux cpu data to registers : background scrolling, sound control, --- player id (1/2), palette color set. -process (clk) -begin - if rising_edge(clk) then - if cpu_wr_n = '0' then - case cpu_adr(14 downto 10) is - when "10110" => bkgnd_offset <= cpu_do; - when "11000" => sound_b <= cpu_do; - when "11010" => sound_a <= cpu_do; - when "10100" => player2 <= cpu_do(0); - color_set <= cpu_do(2 downto 1); - A11 <= cpu_do(3); - when others => null; - end case; - end if; - end if; -end process; - --- player2 and cocktail mode (flip horizontal/vertical) -pl2_cocktail <= player2 and dip_switch(7); - --- horizontal scan video RAMs address background and foreground --- with flip and scroll offset -frgnd_horz_cnt <= hcnt(8 downto 1) when pl2_cocktail = '0' else not hcnt(8 downto 1); -bkgnd_horz_cnt <= frgnd_horz_cnt + bkgnd_offset; - --- vertical scan video RAMs address -vert_cnt <= vcnt(8 downto 1) when pl2_cocktail = '0' else not (vcnt(8 downto 1) + X"30"); - --- get tile_ids from RAMs -frgnd_tile_id <= frgnd_ram_do; -bkgnd_tile_id <= bkgnd_ram_do; - --- address graphix ROMs with tile_ids and line counter -frgnd_graph_adr <= A11 & frgnd_tile_id & vert_cnt(2 downto 0); -bkgnd_graph_adr <= A11 & bkgnd_tile_id & vert_cnt(2 downto 0); - --- latch foreground/background next graphix byte, high bit and low bit --- and palette_ids (fr_lin, bklin) -process (clk) -begin - if rising_edge(clk) then - if (pl2_cocktail = '0' and (frgnd_horz_cnt(2 downto 0) = "111")) or - (pl2_cocktail = '1' and (frgnd_horz_cnt(2 downto 0) = "000")) then - frgnd_bit0_graph_r <= frgnd_bit0_graph; - frgnd_bit1_graph_r <= frgnd_bit1_graph; - fr_lin <= frgnd_tile_id(7 downto 5); - end if; - if (pl2_cocktail = '0' and (bkgnd_horz_cnt(2 downto 0) = "111")) or - (pl2_cocktail = '1' and (bkgnd_horz_cnt(2 downto 0) = "000")) then - bkgnd_bit0_graph_r <= bkgnd_bit0_graph; - bkgnd_bit1_graph_r <= bkgnd_bit1_graph; - bk_lin <= bkgnd_tile_id(7 downto 5); - end if; - end if; -end process; - --- demux background and foreground pixel bits (0/1) from graphix byte with horizontal counter --- and apply horizontal and vertical blanking -fr_bit0 <= frgnd_bit0_graph_r(to_integer(unsigned(frgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_frgrd)= '0' else '0'; -fr_bit1 <= frgnd_bit1_graph_r(to_integer(unsigned(frgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_frgrd)= '0' else '0'; -bk_bit0 <= bkgnd_bit0_graph_r(to_integer(unsigned(bkgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_bkgrd)= '0' else '0'; -bk_bit1 <= bkgnd_bit1_graph_r(to_integer(unsigned(bkgnd_horz_cnt(2 downto 0)))) when (vblank or hblank_bkgrd)= '0' else '0'; - --- select pixel bits and palette_id with foreground priority -color_id <= (fr_bit0 or fr_bit1) & fr_bit1 & fr_bit0 & fr_lin when (fr_bit0 or fr_bit1) = '1' else - (fr_bit0 or fr_bit1) & bk_bit1 & bk_bit0 & bk_lin; - --- address palette with pixel bits color and color set -palette_adr <= color_set & color_id; - --- output video to top level -process(clk) begin - if rising_edge(clk) then - if ce_pix1='1' then - video_vblank <= vblank; - video_hblank_fg <= hblank_frgrd; - video_hblank_bg <= hblank_bkgrd; - if hcnt>=192 then - video_r <= rgb(4) & rgb(0); - video_g <= rgb(6) & rgb(2); - video_b <= rgb(5) & rgb(1); - else - video_r <= "00"; - video_g <= "00"; - video_b <= "00"; - end if; - end if; - end if; -end process; - -frgnd_bit0 : entity work.ic39 -port map( - clk => clk, - addr => frgnd_graph_adr(10 downto 0), - data => frgnd_bit0_graph - ); - -frgnd_bit1 : entity work.ic40 -port map( - clk => clk, - addr => frgnd_graph_adr(10 downto 0), - data => frgnd_bit1_graph - ); - -bkgnd_bit0 : entity work.ic23 -port map( - clk => clk, - addr => bkgnd_graph_adr(10 downto 0), - data => bkgnd_bit0_graph - ); - -bkgnd_bit1 : entity work.ic24 -port map( - clk => clk, - addr => bkgnd_graph_adr(10 downto 0), - data => bkgnd_bit1_graph - ); - -col_l : entity work.col_l -port map( - clk => clk, - addr => palette_adr(7 downto 0), - data => rgb(7 downto 4) - ); - -col_h : entity work.col_h -port map( - clk => clk, - addr => palette_adr(7 downto 0), - data => rgb(3 downto 0) - ); - - --- Program PROM -S_prog_rom_addr(C_prog_rom_addr_bits-1 downto 0) <= cpu_adr(C_prog_rom_addr_bits-1 downto 0); - -prog : entity work.prog -port map( - clk => clk, - addr => S_prog_rom_addr, - data => prog_do - ); - --- foreground RAM 0x4000-0x433F --- cpu working area 0x4340-0x43FF -frgnd_ram : entity work.gen_ram -generic map( dWidth => 8, aWidth => 11) -port map( - clk => clk, - we => frgnd_ram_we, - addr => frgnd_ram_adr, - d => cpu_do, - q => frgnd_ram_do -); - --- background RAM 0x4800-0x4B3F --- cpu working area 0x4B40-0x4BFF --- stack pointer downward from 0x4BFF -bkgnd_ram : entity work.gen_ram -generic map( dWidth => 8, aWidth => 11) -port map( - clk => clk, - we => bkgnd_ram_we, - addr => bkgnd_ram_adr, - d => cpu_do, - q => bkgnd_ram_do -); - - -effect1: entity work.phoenix_effect1 -port map -( - clk => clk, - reset => '0', - trigger => sound_a(4), - filter => sound_a(5), - divider => sound_a(3 downto 0), - snd => snd1 -); - -effect2 : entity work.phoenix_effect2 -port map -( - clk => clk, - reset => '0', - trigger1 => sound_b(4), - trigger2 => sound_b(5), - divider => sound_b(3 downto 0), - snd => snd2 -); - -effect3 : entity work.phoenix_effect3 -port map -( - clk => clk, - reset => '0', - trigger1 => sound_b(6), - trigger2 => sound_b(7), - snd => snd3 -); - -sound_burn <= sound_b(4); -sound_fire <= sound_b(6); -- '1' when fire sound -sound_explode <= sound_b(7); -- '1' when explode sound -sound_fireball <= sound_a(1) and not sound_a(0); -- ambiguity: mothership descend also triggers this -sound_ab <= sound_b & sound_a; - -music: entity work.phoenix_music -port map -( - clk => clk, - reset => '0', - trigger => sound_a(7), - sel_song => sound_a(6), - snd => song -); - --- mix effects and music -mixed <= std_logic_vector - ( - unsigned("00" & snd1 & "00") + - unsigned("0" & snd2 & "000000000") + - unsigned("00" & snd3 & "00") + - unsigned("00" & song & "00" ) - ); - --- select sound or/and effect -with audio_select select -audio <= "00" & snd1 & "00" when "100", - "0" & snd2 & "000000000" when "101", - "00" & snd3 & "00" when "110", - "00" & song & "00" when "111", - mixed when others; - - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect1.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect1.vhd deleted file mode 100644 index 43c9433b..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect1.vhd +++ /dev/null @@ -1,230 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix sound effect1 by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - --- this module generates sound how the birds fly --- how they burn and the ship's barrier activation sound --- it is most often heard module througut all levels of the game - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; -use ieee.math_real.all; - -entity phoenix_effect1 is -generic( - -- Command - Cmd_Fs: real := 11.0; -- MHz - Cmd_V: real := 12.0; -- V - Cmd_Vd: real := 0.46; -- V - Cmd_Vce: real := 0.2; -- V - Cmd_R1: real := 100.0; -- k - Cmd_R2: real := 33.0; -- k - Cmd_R3: real := 0.47; -- k - Cmd_C: real := 6.8; -- uF - Cmd_Div2n: integer := 8; -- bits divisor - Cmd_bits: integer := 16; -- bits counter - -- Oscillator - Osc_Fs: real := 11.0; -- MHz - Osc_Vb: real := 5.0; -- V - Osc_Vce: real := 0.2; -- V - Osc_R1: real := 47.0; -- k - Osc_R2: real := 47.0; -- k - Osc_C: real := 0.001; -- uF - Osc_Div2n: integer := 7; -- bits divisor - Osc_bits: integer := 6; -- bits counter - -- Filter - Filt_Fs: real := 11.0; -- MHz - Filt_V1: real := 5.0; -- V - Filt_V2: real := 0.0; -- V - Filt_R1: real := 100.0; -- k - Filt_R2: real := 10.0; -- k - Filt_C: real := 0.047; -- uF - Filt_Div2n: integer := 7; -- bits divisor - Filt_bits: integer := 8; -- bits counter - - Vmax: real := 5.0; -- V - Vmax_bits: integer := 16 -- number of bits to represent vmax -); -port( - clk : in std_logic; - reset : in std_logic; - trigger : in std_logic; - filter : in std_logic; - divider : in std_logic_vector(3 downto 0); - snd : out std_logic_vector(7 downto 0) -); -end phoenix_effect1; - -architecture struct of phoenix_effect1 is - --- integer representation of voltage, full range -constant IVmax: integer := integer(2**Vmax_bits)-1; --- command -- -constant Cmd_div: integer := integer(2**Cmd_Div2n); --- command charge -constant Cmd_VFc: real := (Cmd_V*Cmd_R2 + Cmd_Vd*Cmd_R1)/(Cmd_R1 + Cmd_R2); -- V -constant Cmd_RCc: real := Cmd_R1*Cmd_R2/(Cmd_R1 + Cmd_R2)*Cmd_C/1000.0; -- s -constant Cmd_ikc: integer := integer(Cmd_Fs * 1.0E6 * Cmd_RCc / 2.0**Cmd_Div2n); -constant Cmd_iVFc: integer := integer(Cmd_VFc * real(IVmax)/Vmax); --- command discharge -constant Cmd_VFd: real := (Cmd_V/Cmd_R1+Cmd_Vd/Cmd_R2+(Cmd_Vd+Cmd_Vce)/Cmd_R3)/(1.0/Cmd_R1+1.0/Cmd_R2+1.0/Cmd_R3); -- V -constant Cmd_RCd: real := 1.0/(1.0/Cmd_R1+1.0/Cmd_R2+1.0/Cmd_R3)*Cmd_C/1000.0; -- s -constant Cmd_ikd: integer := integer(Cmd_Fs * 1.0E6 * Cmd_RCd / 2.0**Cmd_Div2n); -constant Cmd_iVFd: integer := integer(Cmd_VFd * real(IVmax)/Vmax); - --- oscillator -constant Osc_div: integer := integer(2**Osc_Div2n); --- oscillator charge -constant Osc_VFc: real := Osc_Vb; -- V -constant Osc_RCc: real := (Osc_R1+Osc_R2)*Osc_C/1000.0; -- s -constant Osc_ikc: integer := integer(Osc_Fs * 1.0E6 * Osc_RCc / 2.0**Osc_Div2n); -constant Osc_iVFc: integer := integer(Osc_VFc * real(IVmax)/Vmax); --- oscillator discharge -constant Osc_VFd: real := Osc_Vce; -- V -constant Osc_RCd: real := Osc_R2*Osc_C/1000.0; -- s -constant Osc_ikd: integer := integer(Osc_Fs * 1.0E6 * Osc_RCd / 2.0**Osc_Div2n); -constant Osc_iVFd: integer := integer(Osc_VFd * real(IVmax)/Vmax); - --- filter -constant Filt_div: integer := integer(2**Filt_Div2n); --- filter charge -constant Filt_VFc: real := Filt_V1; -- V -constant Filt_RCc: real := 1.0/(1.0/Filt_R1+1.0/Filt_R2)*Filt_C/1000.0; -- s -constant Filt_ikc: integer := integer(Filt_Fs * 1.0E6 * Filt_RCc / 2.0**Filt_Div2n); -constant Filt_iVFc: integer := integer(Filt_VFc * real(IVmax)/Vmax); --- filter discharge -constant Filt_VFd: real := Filt_V2; -- V -constant Filt_RCd: real := Filt_RCc; -- s -constant Filt_ikd: integer := integer(Filt_Fs * 1.0E6 * Filt_RCd / 2.0**Filt_Div2n); -constant Filt_iVFd: integer := integer(Filt_VFd * real(IVmax)/Vmax); - -function imax(x,y: integer) return integer is begin - if x > y then - return x; - else - return y; - end if; -end imax; - -signal u_c1 : unsigned(15 downto 0) := (others => '0'); -signal u_c2 : unsigned(15 downto 0) := (others => '0'); -signal flip : std_logic := '0'; - -signal u_cf : unsigned(15 downto 0) := (others => '0'); -signal sound : std_logic := '0'; - -begin - --- Commande --- R1 = 100k, R2 = 33k, R3 = 0.47k C=6.8e-6 SR=10MHz --- Charge : VF1 = 43559, k1 = 6591 (R1//R2) --- Decharge : VF2 = 9300, k2 = 123 (R1//R2//R3) --- Div = 2^8 - -process (clk) - variable cnt: integer range 0 to imax(Cmd_ikc,Cmd_ikd) := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c1 <= (others => '0'); - else - cnt := cnt + 1; - if trigger = '1' then - if cnt = Cmd_ikc then - cnt := 0; - u_c1 <= u_c1 + (Cmd_iVFc - u_c1)/Cmd_div; - end if; - else - if cnt = Cmd_ikd then - cnt := 0; - u_c1 <= u_c1 - (u_c1 - Cmd_iVFd)/Cmd_div; - end if; - end if; - end if; - end if; -end process; - --- Oscillateur --- R1 = 47k, R2 = 47k, C=0.001e-6 SR=50MHz --- Charge : VF1 = 65535, k1 = 37 (R1+R2) --- Decharge : VF2 = 2621, k2 = 18 (R2) --- Div = 2^7 - --- Diviseur --- LS163 : Count up, Sync load when 0xF (no toggle sound if divider = 0xF) --- LS74 : Divide by 2 - -process (clk) - variable cnt: integer range 0 to imax(Osc_ikc,Osc_ikd) := 0; - variable cnt2: unsigned(3 downto 0) := (others => '0'); -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c2 <= (others => '0'); - flip <= '0'; - else - if u_c2 > u_c1 then flip <= '0'; end if; - if u_c2 < u_c1/2 then - flip <= '1'; - if flip = '0' then - cnt2 := cnt2 + 1; - if cnt2 = "0000" then - cnt2 := unsigned(divider); - if divider /= "1111" then sound <= not sound; end if; - end if; - end if; - end if; - cnt := cnt + 1; - if flip = '1' then - if cnt = Osc_ikc then - cnt := 0; - u_c2 <= u_c2 + (Osc_iVFc - u_c2)/Osc_div; - end if; - else - if cnt = Osc_ikd then - cnt := 0; - u_c2 <= u_c2 - (u_c2 - Osc_iVFd)/Osc_div; - end if; - end if; - end if; - end if; -end process; - --- filter --- R1 = 10k, R2 = 100k, C=0.047e-6, SR=10MHz --- Charge : VF1= 65535, k1 = 33 (R1//R2) --- Decharge : VF2= 0 , k2 = 33 (R1//R2) --- Div = 2^7 - -process (clk) - variable cnt: integer range 0 to imax(Filt_ikc,Filt_ikd) := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_cf <= (others => '0'); - else - cnt := cnt + 1; - if sound = '1' then - if cnt = Filt_ikc then - cnt := 0; - u_cf <= u_cf + (Filt_iVFc - u_cf)/Filt_div; - end if; - else - if cnt = Filt_ikd then - cnt := 0; - u_cf <= u_cf - (u_cf - Filt_iVFd)/Filt_div; - end if; - end if; - end if; - end if; -end process; - -with filter select snd <= std_logic_vector(u_cf(15 downto 8)) when '1', sound&"0000000" when others; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect2.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect2.vhd deleted file mode 100644 index 097f4aa9..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect2.vhd +++ /dev/null @@ -1,387 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix sound effect2 by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - --- this module outputs sound of mothership's descend --- it could be heard at beginning of level 5 --- the prrrrr...vioooouuuuu sound --- fixme: --- the VCO control levels are too coarse (quantized) --- frequency transitions are heard in large steps --- instead of continous sweep - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; -use ieee.math_real.all; - -entity phoenix_effect2 is -generic( - -- Oscillator 1 - Osc1_Fs: real := 11.0; -- MHz - Osc1_Vb: real := 5.0; -- V - Osc1_Vce: real := 0.2; -- V - Osc1_R1: real := 47.0; -- k - Osc1_R2: real := 100.0; -- k - Osc1_C1: real := 0.01; -- uF - Osc1_C2: real := 0.47; -- uF - Osc1_C3: real := 1.0; -- uF - Osc1_Div2n: integer := 8; -- bits divisor - Osc1_bits: integer := 16; -- bits counter - -- Oscillator 2 - Osc2_Fs: real := 11.0; -- MHz - Osc2_Vb: real := 5.0; -- V - Osc2_Vce: real := 0.2; -- V - Osc2_R1: real := 510.0; -- k - Osc2_R2: real := 510.0; -- k - Osc2_C: real := 1.0; -- uF - Osc2_Div2n: integer := 8; -- bits divisor - Osc2_bits: integer := 17; -- bits counter - -- Filter 2 - Filt2_Fs: real := 11.0; -- MHz - Filt2_V: real := 5.0; -- V - Filt2_R1: real := 10.0; -- k - Filt2_R2: real := 5.1; -- k - Filt2_R3: real := 5.1; -- k - Filt2_R4: real := 5.0; -- k - Filt2_R5: real := 10.0; -- k - Filt2_C: real := 100.0; -- uF - Filt2_Div2n: integer := 8; -- bits divisor - Filt2_bits: integer := 16; -- bits counter - -- Oscillator 3 - Osc3_Fs: real := 11.0; -- MHz - Osc3_Vb: real := 5.0; -- V - Osc3_Vce: real := 0.2; -- V - Osc3_R1: real := 20.0; -- k - Osc3_R2: real := 20.0; -- k - Osc3_C: real := 0.001; -- uF - Osc3_Div2n: integer := 6; -- bits divisor - Osc3_bits: integer := 6; -- bits counter - - C_flip1_0: integer := 22020; - C_flip1_1: integer := 33063; - C_flip1_scale: integer := 84; -- ?? - - - Vmax: real := 5.0; -- V - Vmax_bits: integer := 16 -- number of bits to represent Vmax -); - -port( - clk : in std_logic; - reset : in std_logic; - trigger1 : in std_logic; - trigger2 : in std_logic; - divider : in std_logic_vector(3 downto 0); - snd : out std_logic_vector(1 downto 0) -); -end phoenix_effect2; - -architecture struct of phoenix_effect2 is - -function imax(x,y: integer) return integer is begin - if x > y then - return x; - else - return y; - end if; -end imax; - --- integer representation of voltage, full range -constant IVmax: integer := integer(2**Vmax_bits)-1; --- Oscillator1 -- -constant Osc1_div: integer := integer(2**Osc1_Div2n); --- Oscillator1 charge/discharge voltages -constant Osc1_VFc: real := Osc1_Vb; -- V -constant Osc1_iVFc: integer := integer(Osc1_VFc * real(IVmax)/Vmax); -constant Osc1_VFd: real := Osc1_Vce; -- V -constant Osc1_iVFd: integer := integer(Osc1_VFd * real(IVmax)/Vmax); --- Oscillator1 charge/discharge time constants -constant Osc1_T0_RCc: real := (Osc1_R1+Osc1_R2)*Osc1_C1/1000.0; -- s -constant Osc1_T0_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T0_RCc / 2.0**Osc1_Div2n); -constant Osc1_T0_RCd: real := Osc1_R2*Osc1_C1/1000.0; -- s -constant Osc1_T0_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T0_RCd / 2.0**Osc1_Div2n); - -constant Osc1_T1_RCc: real := (Osc1_R1+Osc1_R2)*(Osc1_C1+Osc1_C2)/1000.0; -- s -constant Osc1_T1_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T1_RCc / 2.0**Osc1_Div2n); -constant Osc1_T1_RCd: real := Osc1_R2*(Osc1_C1+Osc1_C2)/1000.0; -- s -constant Osc1_T1_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T1_RCd / 2.0**Osc1_Div2n); - -constant Osc1_T2_RCc: real := (Osc1_R1+Osc1_R2)*(Osc1_C1+Osc1_C3)/1000.0; -- s -constant Osc1_T2_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T2_RCc / 2.0**Osc1_Div2n); -constant Osc1_T2_RCd: real := Osc1_R2*(Osc1_C1+Osc1_C3)/1000.0; -- s -constant Osc1_T2_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T2_RCd / 2.0**Osc1_Div2n); - -constant Osc1_T3_RCc: real := (Osc1_R1+Osc1_R2)*(Osc1_C1+Osc1_C2+Osc1_C3)/1000.0; -- s -constant Osc1_T3_ikc: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T3_RCc / 2.0**Osc1_Div2n); -constant Osc1_T3_RCd: real := Osc1_R2*(Osc1_C1+Osc1_C2+Osc1_C3)/1000.0; -- s -constant Osc1_T3_ikd: integer := integer(Osc1_Fs * 1.0E6 * Osc1_T3_RCd / 2.0**Osc1_Div2n); - -constant Osc1_ik_max: integer := imax( imax(Osc1_T1_ikc,Osc1_T1_ikd), imax(Osc1_T3_ikc,Osc1_T3_ikd)); - --- Oscillator2 -- -constant Osc2_div: integer := integer(2**Osc2_Div2n); --- Oscillator2 charge/discharge voltages -constant Osc2_VFc: real := Osc2_Vb; -- V -constant Osc2_iVFc: integer := integer(Osc2_VFc * real(IVmax)/Vmax); -constant Osc2_VFd: real := Osc2_Vce; -- V -constant Osc2_iVFd: integer := integer(Osc2_VFd * real(IVmax)/Vmax); --- Oscillator2 charge/discharge time constants -constant Osc2_RCc: real := (Osc2_R1+Osc2_R2)*Osc2_C/1000.0; -- s -constant Osc2_ikc: integer := integer(Osc2_Fs * 1.0E6 * Osc2_RCc / 2.0**Osc2_Div2n); -constant Osc2_RCd: real := Osc2_R2*Osc2_C/1000.0; -- s -constant Osc2_ikd: integer := integer(Osc2_Fs * 1.0E6 * Osc2_RCd / 2.0**Osc2_Div2n); - --- Filter2 -- -constant Filt2_div: integer := integer(2**Filt2_Div2n); -constant Filt2_R4p: real := 1.0/(1.0/Filt2_R1+1.0/Filt2_R4); -- k -constant Filt2_R5p: real := 1.0/(1.0/Filt2_R1+1.0/Filt2_R5); -- k -constant Filt2_Rp: real := 1.0/(1.0/Filt2_R3+1.0/Filt2_R4+1.0/Filt2_R5p); -- k -constant Filt2_Rs: real := 1.0/(1.0/Filt2_R2+1.0/Filt2_R3-Filt2_Rp/(Filt2_R3**2)); -- k -constant Filt2_RC: real := Filt2_Rs*Filt2_C/1000.0; -- s -constant Filt2_ik: integer := integer(Filt2_Fs*1.0E6*Filt2_RC / 2.0**Filt2_Div2n); --- Filter2 voltages -constant Filt2_V0: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R3*Filt2_R4); -- V -constant Filt2_iV0: integer := integer(Filt2_V0 * real(IVmax)/Vmax); -constant Filt2_V1: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R4p*Filt2_R3); -- V -constant Filt2_iV1: integer := integer(Filt2_V1 * real(IVmax)/Vmax); -constant Filt2_V2: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R3*Filt2_R4)+Filt2_V*Filt2_Rs/Filt2_R2; -- V -constant Filt2_iV2: integer := integer(Filt2_V2 * real(IVmax)/Vmax); -constant Filt2_V3: real := Filt2_V*Filt2_Rp*Filt2_Rs/(Filt2_R3*Filt2_R4p)+Filt2_V*Filt2_Rs/Filt2_R2; -- V -constant Filt2_iV3: integer := integer(Filt2_V3 * real(IVmax)/Vmax); - --- Oscillator3 -- -constant Osc3_div: integer := integer(2**Osc3_Div2n); --- Oscillator3 charge/discharge voltages -constant Osc3_VFc: real := Osc3_Vb; -- V -constant Osc3_iVFc: integer := integer(Osc3_VFc * real(IVmax)/Vmax); -constant Osc3_VFd: real := Osc3_Vce; -- V -constant Osc3_iVFd: integer := integer(Osc3_VFd * real(IVmax)/Vmax); --- Oscillator3 charge/discharge time constants -constant Osc3_RCc: real := (Osc3_R1+Osc3_R2)*Osc3_C/1000.0; -- s -constant Osc3_ikc: integer := integer(Osc3_Fs * 1.0E6 * Osc3_RCc / 2.0**Osc3_Div2n); -constant Osc3_RCd: real := Osc3_R2*Osc3_C/1000.0; -- s -constant Osc3_ikd: integer := integer(Osc3_Fs * 1.0E6 * Osc3_RCd / 2.0**Osc3_Div2n); - -signal u_c1 : unsigned(15 downto 0) := (others => '0'); -signal u_c2 : unsigned(15 downto 0) := (others => '0'); -signal u_c3 : unsigned(16 downto 0) := (others => '0'); -signal flip1 : std_logic := '0'; -signal flip2 : std_logic := '0'; -signal flip3 : std_logic := '0'; - -signal triggers : std_logic_vector(1 downto 0) := "00"; ---signal kc : unsigned(15 downto 0) := (others =>'0'); ---signal kd : unsigned(15 downto 0) := (others =>'0'); -signal kc : integer range 0 to Osc1_ik_max; -signal kd : integer range 0 to Osc1_ik_max; - -signal u_cf : unsigned(15 downto 0) := (others => '0'); -signal flips : std_logic_vector(1 downto 0) := "00"; -signal vf : unsigned(15 downto 0) := (others =>'0'); - -signal u_cf_scaled : unsigned(23 downto 0) := (others => '0'); -signal u_ctrl : unsigned(15 downto 0) := (others => '0'); - -signal sound: std_logic := '0'; - -begin - --- Oscillateur1 --- R1 = 47k, R2 = 100k, C1=0.01e-6, C2=0.047e-6, C3=1.000e-6 SR=10MHz --- Div = 2^8 - --- trigger = 00 --- Charge : VF1 = 65535, k1 = 57 (R1+R2, C1) --- Decharge : VF2 = 2621, k2 = 39 (R2, C1) --- trigger = 01 --- Charge : VF1 = 65535, k1 = 2756 (R1+R2, C1+C2) --- Decharge : VF2 = 2621, k2 = 1875 (R2, C1+C2) --- trigger = 10 --- Charge : VF1 = 65535, k1 = 5800 (R1+R2, C1+C3) --- Decharge : VF2 = 2621, k2 = 3945 (R2, C1+C3) --- trigger = 11 --- Charge : VF1 = 65535, k1 = 8498 (R1+R2, C1+C2+C3) --- Decharge : VF2 = 2621, k2 = 5781 (R2, C1+C2+C3) - -triggers <= trigger2 & trigger1; - -with triggers select -kc <= Osc1_T0_ikc when "00", - Osc1_T1_ikc when "01", - Osc1_T2_ikc when "10", - Osc1_T3_ikc when others; - -with triggers select -kd <= Osc1_T0_ikd when "00", - Osc1_T1_ikd when "01", - Osc1_T2_ikd when "10", - Osc1_T3_ikd when others; - -process (clk) - variable cnt: integer range 0 to Osc1_ik_max := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c1 <= (others => '0'); - else - if u_c1 > X"AAAA" then flip1 <= '0'; end if; - if u_c1 < X"5555" then flip1 <= '1'; end if; - cnt := cnt + 1; - if flip1 = '1' then - if cnt = kc then - cnt := 0; - u_c1 <= u_c1 + (Osc1_iVFc - u_c1)/Osc1_div; - end if; - else - if cnt = kd then - cnt := 0; - u_c1 <= u_c1 - (u_c1 - Osc1_iVFd)/Osc1_div; - end if; - end if; - end if; - end if; -end process; - --- Oscillateur2 --- R1 = 510k, R2 = 510k, C=1.000e-6, SR=10MHz --- Charge : VF1 = 65535, k1 = 39844 (R1+R2, C) --- Decharge : VF2 = 2621, k2 = 19922 (R2, C) --- Div = 2^8 - -process (clk) - variable cnt: integer range 0 to imax(Osc2_ikc,Osc2_ikd) := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c2 <= (others => '0'); - else - if u_c2 > X"AAAA" then flip2 <= '0'; end if; - if u_c2 < X"5555" then flip2 <= '1'; end if; - cnt := cnt + 1; - if flip2 = '1' then - if cnt = Osc2_ikc then - cnt := 0; - u_c2 <= u_c2 + (Osc2_iVFc - u_c2)/Osc2_div; - end if; - else - if cnt = Osc2_ikd then - cnt := 0; - u_c2 <= u_c2 - (u_c2 - Osc2_iVFd)/Osc2_div; - end if; - end if; - end if; - end if; -end process; - --- Filtre --- V1 = 5V --- R1 = 10k, R2 = 5.1k, R3 = 5.1k, R4 = 5k, R5 = 10k, C=100.0e-6, SR=10MHz --- Rp = R3//R4//R4//R1 = 1.68k --- Rs = 1/(1/R2 + 1/R3 - Rp/(R3*R3)) = 3.05k --- k = 11922 (Rs*C) --- Div = 2^8 - --- VF00 = 13159 (V*Rp*Rs)/(R4*R3) --- VF01 = 19738 (V*Rp*Rs)/(R4p*R3) --- VF10 = 52377 (V*Rp*Rs)/(R4*R3) + V*Rs/R2 --- VF11 = 58957 (V*Rp*Rs)/(R4p*R3) + V*Rs/R2 - -flips <= flip2 & flip1; - -with flips select - -vf <= to_unsigned(Filt2_iV0,16) when "00", - to_unsigned(Filt2_iV1,16) when "01", - to_unsigned(Filt2_iV2,16) when "10", - to_unsigned(Filt2_iV3,16) when others; - -process (clk) - variable cnt: integer range 0 to Filt2_ik := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_cf <= (others => '0'); - else - cnt := cnt + 1; - if vf > u_cf then - if cnt = Filt2_ik then - cnt := 0; - u_cf <= u_cf + (vf - u_cf)/Filt2_div; - end if; - else - if cnt = Filt2_ik then - cnt := 0; - u_cf <= u_cf - (u_cf - vf)/Filt2_div; - end if; - end if; - end if; - end if; -end process; - --- U_CTRL - --- flip1 = 0 u_ctrl = 5V*Rp/R4 + u_cf*Rp/R3 # 22020 + u_cf*84/256 --- flip1 = 1 u_ctrl = 5V*Rp/R4p + u_cf*Rp/R3 # 33063 + u_cf*84/256 - -u_cf_scaled <= u_cf*to_unsigned(C_flip1_scale,8); - -with flip1 select - u_ctrl <= to_unsigned(C_flip1_0,16)+u_cf_scaled(23 downto 8) when '0', - to_unsigned(C_flip1_1,16)+u_cf_scaled(23 downto 8) when others; - --- Oscillateur3 --- R1 = 20k, R2 = 20k, C=0.001e-6 SR=50MHz --- Charge : VF1 = 65535, k1 = 31 (R1+R2) --- Decharge : VF2 = 2621, k2 = 16 (R2) --- Div = 2^6 - --- Diviseur --- LS163 : Count up, Sync load when 0xF (no toggle sound if divider = 0xF) --- LS74 : Divide by 2 - -process (clk) - variable cnt: integer range 0 to imax(Osc3_ikc,Osc3_ikd) := 0; - variable cnt2: unsigned(3 downto 0) := (others => '0'); -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c3 <= (others => '0'); - flip3 <= '0'; - else - if u_c3 > u_ctrl then flip3 <= '0'; end if; - if u_c3 < u_ctrl/2 then - flip3 <= '1'; - if flip3 = '0' then - cnt2 := cnt2 + 1; - if cnt2 = "0000" then - cnt2 := unsigned(divider); - if divider /= "1111" then sound <= not sound; end if; - end if; - end if; - end if; - cnt := cnt + 1; - if flip3 = '1' then - if cnt = Osc3_ikc then - cnt := 0; - u_c3 <= u_c3 + (Osc3_iVFc - u_c3)/Osc3_div; - end if; - else - if cnt = Osc3_ikd then - cnt := 0; - u_c3 <= u_c3 - (u_c3 - Osc3_iVFd)/Osc3_div; - end if; - end if; - end if; - end if; -end process; - -with trigger2 select snd <= '0'&sound when '1', sound&'0' when others; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect3.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect3.vhd deleted file mode 100644 index c5bc2e77..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_effect3.vhd +++ /dev/null @@ -1,290 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix sound effect3 (noise) by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - --- this module generates noisy sound of ship missile shooting --- ship explosions and enemy mothership explosion --- it is often head throught all the levels of the game - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_effect3 is -generic( - -- Command 1 - Cmd1_Fs: real := 11.0; -- MHz - Cmd1_V: real := 5.0; -- V - Cmd1_Vd: real := 0.46; -- V - Cmd1_Vce: real := 0.2; -- V - Cmd1_R1: real := 1.0; -- k - Cmd1_R2: real := 0.33; -- k - Cmd1_R3: real := 20.0; -- k - Cmd1_C: real := 6.8; -- uF - Cmd1_Div2n: integer := 8; -- bits divisor - --Cmd1_bits: integer := 16; -- bits counter - -- Command 2 - Cmd2_Fs: real := 11.0; -- MHz - Cmd2_V: real := 5.0; -- V - Cmd2_Vd: real := 0.46; -- V - Cmd2_Vce: real := 0.2; -- V - Cmd2_R1: real := 1.0; -- k - Cmd2_R2: real := 0.33; -- k - Cmd2_R3: real := 47.0; -- k - Cmd2_C: real := 6.8; -- uF - Cmd2_Div2n: integer := 8; -- bits divisor - --Cmd2_bits: integer := 16; -- bits counter - -- Oscillator - Osc_Fs: real := 11.0; -- MHz - Osc_Vb: real := 5.0; -- V - Osc_Vce: real := 0.2; -- V - Oscmin_R1a: real := 47.0; -- k - Oscmin_R2: real := 0.33; -- k - Oscmin_C: real := 0.05; -- uF - Oscmin_bits: integer := 16; -- bits counter - Oscmax_R1a: real := 2.553; -- k - Oscmax_R2: real := 1.0; -- k - Oscmax_C: real := 0.05; -- uF - Osc_Div2n: integer := 7; -- bits divisor - --Osc_bits: integer := 16; -- bits counter - - C_commande2_chop_k: integer := 62500; - - Vmax: real := 5.0; -- V - Vmax_bits: integer := 16 -- number of bits to represent Vmax -); -port( - clk : in std_logic; - reset : in std_logic; - trigger1 : in std_logic; - trigger2 : in std_logic; - snd : out std_logic_vector(7 downto 0) -); -end phoenix_effect3; - -architecture struct of phoenix_effect3 is - --- integer representation of voltage, full range -constant IVmax: integer := integer(2**Vmax_bits)-1; --- Command1 -- -constant Cmd1_div: integer := integer(2**Cmd1_Div2n); --- Command1 charge/discharge voltages -constant Cmd1_VFc: real := Cmd1_V-Cmd1_Vd; -- V -constant Cmd1_iVFc: integer := integer(Cmd1_VFc * real(IVmax)/Vmax); -constant Cmd1_VFd: real := Cmd1_Vce+Cmd1_Vd; -- V -constant Cmd1_iVFd: integer := integer(Cmd1_VFd * real(IVmax)/Vmax); --- Command1 charge/discharge time constants -constant Cmd1_RCc: real := (Cmd1_R1+Cmd1_R2+Cmd1_R3)*Cmd1_C/1000.0; -- s -constant Cmd1_ikc: integer := integer(Cmd1_Fs * 1.0E6 * Cmd1_RCc / 2.0**Cmd1_Div2n); -constant Cmd1_RCd: real := Cmd1_R2*Cmd1_C/1000.0; -- s -constant Cmd1_ikd: integer := integer(Cmd1_Fs * 1.0E6 * Cmd1_RCd / 2.0**Cmd1_Div2n); --- Command2 -- -constant Cmd2_div: integer := integer(2**Cmd2_Div2n); --- Command2 charge/discharge voltages -constant Cmd2_VFc: real := (Cmd2_V-Cmd2_Vd)*Cmd2_R3/(Cmd2_R1+Cmd2_R2+Cmd2_R3); -- V -constant Cmd2_iVFc: integer := integer(Cmd2_VFc * real(IVmax)/Vmax); -constant Cmd2_VFd: real := 0.0; -- V -constant Cmd2_iVFd: integer := integer(Cmd2_VFd * real(IVmax)/Vmax); --- Command2 charge/discharge time constants -constant Cmd2_RCc: real := (Cmd2_R1+Cmd2_R2)*Cmd2_R3/(Cmd2_R1+Cmd2_R2+Cmd2_R3)*Cmd2_C/1000.0; -- s -constant Cmd2_ikc: integer := integer(Cmd2_Fs * 1.0E6 * Cmd2_RCc / 2.0**Cmd2_Div2n); -constant Cmd2_RCd: real := Cmd2_R3*Cmd2_C/1000.0; -- s -constant Cmd2_ikd: integer := integer(Cmd2_Fs * 1.0E6 * Cmd2_RCd / 2.0**Cmd2_Div2n); --- Oscillator -- -constant Osc_div: integer := integer(2**Osc_Div2n); --- Oscillator charge/discharge voltages -constant Osc_VFc: real := Osc_Vb; -- V -constant Osc_iVFc: integer := integer(Osc_VFc * real(IVmax)/Vmax); -constant Osc_VFd: real := Osc_Vce; -- V -constant Osc_iVFd: integer := integer(Osc_VFd * real(IVmax)/Vmax); --- Oscillator min charge/discharge time constants -constant Oscmin_RCc: real := (Oscmin_R1a+Oscmin_R2)*Oscmin_C/1000.0; -- s -constant Oscmin_ikc: integer := integer(Osc_Fs * 1.0E6 * Oscmin_RCc / 2.0**Osc_Div2n); -constant Oscmin_RCd: real := Oscmin_R2*Oscmin_C/1000.0; -- s -constant Oscmin_ikd: integer := integer(Osc_Fs * 1.0E6 * Oscmin_RCd / 2.0**Osc_Div2n); --- Oscillator max charge/discharge time constants -constant Oscmax_RCc: real := (Oscmax_R1a+Oscmax_R2)*Oscmax_C/1000.0; -- s -constant Oscmax_ikc: integer := integer(Osc_Fs * 1.0E6 * Oscmax_RCc / 2.0**Osc_Div2n); -constant Oscmax_RCd: real := Oscmax_R2*Oscmax_C/1000.0; -- s -constant Oscmax_ikd: integer := integer(Osc_Fs * 1.0E6 * Oscmax_RCd / 2.0**Osc_Div2n); - -function imax(x,y: integer) return integer is begin - if x > y then - return x; - else - return y; - end if; -end imax; - -signal u_c1 : unsigned(15 downto 0) := (others => '0'); -signal u_c2 : unsigned(15 downto 0) := (others => '0'); -signal u_c3 : unsigned(15 downto 0) := (others => '0'); -signal flip3 : std_logic := '0'; - -signal k_ch : unsigned(25 downto 0) := (others =>'0'); - -signal u_ctrl1 : unsigned(15 downto 0) := (others => '0'); -signal u_ctrl2 : unsigned(15 downto 0) := (others => '0'); -signal u_ctrl1_f : unsigned( 7 downto 0) := (others => '0'); -signal u_ctrl2_f : unsigned( 7 downto 0) := (others => '0'); -signal sound : unsigned( 7 downto 0) := (others => '0'); - -signal shift_reg : std_logic_vector(17 downto 0) := (others => '0'); - -begin - --- Commande1 --- R1 = 1k, R2 = 0.33k, R3 = 20k C=6.8e-6 SR=10MHz --- Charge : VF1 = 59507, k1 = 5666 (R1+R2+R3) --- Decharge : VF2 = 8651, k2 = 88 (R2) --- Div = 2^8 - -process (clk) - -- variable cnt : unsigned(15 downto 0) := (others => '0'); - variable cnt: integer range 0 to imax(Cmd1_ikc,Cmd1_ikd)*2 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c1 <= (others => '0'); - else - cnt := cnt + 1; - if trigger1 = '1' then - -- if cnt > C_commande1_k1 then - if cnt > Cmd1_ikc then - cnt := 0; - -- u_c1 <= u_c1 + (C_commande1_VF1 - u_c1)/256; - u_c1 <= u_c1 + (Cmd1_iVFc - u_c1)/Cmd1_div; - end if; - else - -- if cnt > C_commande1_k2 then - if cnt > Cmd1_ikd then - cnt := 0; - -- u_c1 <= u_c1 - (u_c1 - C_commande1_VF2)/256; - u_c1 <= u_c1 - (u_c1 - Cmd1_iVFd)/Cmd1_div; - end if; - end if; - end if; - end if; -end process; - --- Commande2 --- R1 = 1k, R2 = 0.33k, R3 = 47k C=6.8e-6 SR=10MHz --- Charge : VF1 = 57869, k1 = 344 (R1+R2)//R3 --- Decharge : VF2 = 0, k2 = 12484 (R3) --- Div = 2^8 - -process (clk) - -- variable cnt : unsigned(15 downto 0) := (others => '0'); - variable cnt: integer range 0 to imax(Cmd2_ikc,Cmd2_ikd)*2 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - -- cnt := (others => '0'); - cnt := 0; - u_c2 <= (others => '0'); - else - cnt := cnt + 1; - if trigger2 = '1' then - -- if cnt > C_commande2_k1 then - if cnt > Cmd2_ikc then - -- cnt := (others => '0'); - cnt := 0; - -- u_c2 <= u_c2 + (C_commande2_VF1 - u_c2)/256; - u_c2 <= u_c2 + (Cmd2_iVFc - u_c2)/Cmd2_div; - end if; - else - -- if cnt > C_commande2_k2 then - if cnt > Cmd2_ikd then - -- cnt := (others => '0'); - cnt := 0; - -- u_c2 <= u_c2 - (u_c2 - C_commande2_VF2)/256; - u_c2 <= u_c2 - (u_c2 - Cmd2_iVFd)/Cmd2_div; - end if; - end if; - end if; - end if; -end process; - --- control voltage from command1 is R3 voltage (not u_c1 voltage) -with trigger1 select --- u_ctrl1 <= (to_unsigned(C_commande1_VF1,16) - u_c1) when '1', (others=>'0') when others; -u_ctrl1 <= (to_unsigned(Cmd1_iVFc,16) - u_c1) when '1', (others=>'0') when others; - --- control voltage from command2 is u_c2 voltage -u_ctrl2 <= u_c2; - --- sum up and scaled both control voltages to vary R1 resistor of oscillator --- k_ch <= shift_right(((u_ctrl1/2 + u_ctrl2/2) * to_unsigned(C_oscillateur_min_k1-C_oscillateur_max_k1,10)),15) + C_oscillateur_max_k1; -k_ch <= shift_right(((u_ctrl1/2 + u_ctrl2/2) * to_unsigned(Oscmin_ikc-Oscmax_ikc,10)),15) + Oscmax_ikc; - --- Oscillateur --- R1 = 47k..2.533k, R2 = 1k, C=0.05e-6, SR=50MHz --- Charge : VF1 = 65536, k_ch = 938..69 (R1+R2, C) --- Decharge : VF2 = 2621, k2 = 20 (R2, C) --- Div = 2^7 - --- noise generator triggered by oscillator output - -process (clk) - variable cnt: integer range 0 to imax(imax(Oscmin_ikc,Oscmin_ikd), imax(Oscmax_ikc,Oscmax_ikd))+256 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - u_c3 <= (others => '0'); - else - if u_c3 > X"AAAA" then flip3 <= '0'; end if; - if u_c3 < X"5555" then - flip3 <= '1'; - if flip3 = '0' then - shift_reg <= shift_reg(16 downto 0) & not(shift_reg(17) xor shift_reg(16)); - end if; - end if; - cnt := cnt + 1; - if flip3 = '1' then - if cnt > k_ch then - cnt := 0; - u_c3 <= u_c3 + (Osc_iVFc - u_c3)/Osc_div; - end if; - else - if cnt > Oscmax_ikd then - cnt := 0; - u_c3 <= u_c3 - (u_c3 - Osc_iVFd)/Osc_div; - end if; - end if; - end if; - end if; -end process; - --- modulated (chop) command1 voltage with noise generator output -with shift_reg(17) xor shift_reg(16) select -u_ctrl1_f <= u_ctrl1(15 downto 8)/2 when '0', (others => '0') when others; - - --- modulated (chop) command2 voltage with noise generator output --- and add 400Hz filter (raw sub-sampling) --- f=10 MHz, k = 25000 -process (clk) - variable cnt : unsigned(15 downto 0) := (others => '0'); -begin - if rising_edge(clk) then - cnt := cnt + 1; - if cnt > C_commande2_chop_k then - cnt := (others => '0'); - if (shift_reg(17) xor shift_reg(16)) = '0' then - u_ctrl2_f <= u_ctrl2(15 downto 8)/2; - else - u_ctrl2_f <= (others => '0'); - end if; - end if; - end if; -end process; - --- mix modulated noises 1 and 2 -sound <= u_ctrl1_f + u_ctrl2_f; -snd <= std_logic_vector(sound); - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_mist.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_mist.vhd deleted file mode 100644 index f986972e..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_mist.vhd +++ /dev/null @@ -1,309 +0,0 @@ ---------------------------------------------------------------------------------- --- DE2-35 Top level for Phoenix by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr --- --- Main features --- PS2 keyboard input --- wm8731 sound output --- NO board SRAM used --- --- sw 0: on/off hdmi-audio --- --- Board switch : ---- todo fixme switches note --- 1 - 4 : dip switch --- 0-1 : lives 3-6 --- 3-2 : bonus life 30K-60K --- 4 : coin 1-2 --- 6-5 : unkonwn --- 7 : upright-cocktail --- 8 -10 : sound_select --- 0XX : all mixed (normal) --- 100 : sound1 only --- 101 : sound2 only --- 110 : sound3 only --- 111 : melody only --- Board key : --- 0 : reset --- ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_mist is -port -( - CLOCK_27 : in std_logic; - LED : out std_logic; - VGA_R : out std_logic_vector(5 downto 0); - VGA_G : out std_logic_vector(5 downto 0); - VGA_B : out std_logic_vector(5 downto 0); - VGA_HS : out std_logic; - VGA_VS : out std_logic; - SPI_SCK : in std_logic; - SPI_DI : in std_logic; - SPI_DO : out std_logic; - SPI_SS2 : in std_logic; - SPI_SS3 : in std_logic; - CONF_DATA0 : in std_logic; - AUDIO_L : out std_logic; - AUDIO_R : out std_logic -); -end; - -architecture struct of phoenix_mist is - - signal clk : std_logic; - signal clk_88m : std_logic; - signal reset : std_logic; - signal clock_stable : std_logic; - - signal audio : std_logic_vector(11 downto 0); - signal video_r, video_g, video_b: std_logic_vector(1 downto 0); - signal vsync, hsync : std_logic; - - signal dip_switch : std_logic_vector(7 downto 0);-- := (others => '0'); - signal status : std_logic_vector(31 downto 0); - signal buttons : std_logic_vector(1 downto 0); - signal scandoubler_disable : std_logic; - signal ypbpr : std_logic; - signal ce_pix : std_logic; - - signal scanlines : std_logic_vector(1 downto 0); - signal hq2x : std_logic; - - signal coin : std_logic; - signal player_start : std_logic_vector(1 downto 0); - signal button_left, button_right, button_protect, button_fire: std_logic; - signal joy0 : std_logic_vector(7 downto 0); - signal joy1 : std_logic_vector(7 downto 0); - signal ps2Clk : std_logic; - signal ps2Data : std_logic; - signal kbd_joy : std_logic_vector(7 downto 0); - signal upjoyL : std_logic; - signal upjoyR : std_logic; - signal upjoyB : std_logic; --- config string used by the io controller to fill the OSD - constant CONF_STR : string := "PHOENIX;;O4,Screen Direction,Upright,Normal;O67,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;T5,Reset;V,v1.1;"; - - function to_slv(s: string) return std_logic_vector is - constant ss: string(1 to s'length) := s; - variable rval: std_logic_vector(1 to 8 * s'length); - variable p: integer; - variable c: integer; - begin - for i in ss'range loop - p := 8 * i; - c := character'pos(ss(i)); - rval(p - 7 to p) := std_logic_vector(to_unsigned(c,8)); - end loop; - return rval; - end function; - - component mist_io - generic ( STRLEN : integer := 0 ); - port ( - clk_sys :in std_logic; - SPI_SCK, CONF_DATA0, SPI_DI :in std_logic; - SPI_DO : out std_logic; - conf_str : in std_logic_vector(8*STRLEN-1 downto 0); - buttons : out std_logic_vector(1 downto 0); - joystick_0 : out std_logic_vector(7 downto 0); - joystick_1 : out std_logic_vector(7 downto 0); - status : out std_logic_vector(31 downto 0); - scandoubler_disable, ypbpr : out std_logic; - ps2_kbd_clk : out std_logic; - ps2_kbd_data : out std_logic - ); - end component mist_io; - - component video_mixer - generic ( LINE_LENGTH : integer := 352; HALF_DEPTH : integer := 1 ); - port ( - clk_sys, ce_pix, ce_pix_actual : in std_logic; - SPI_SCK, SPI_SS3, SPI_DI : in std_logic; - scanlines : in std_logic_vector(1 downto 0); - scandoubler_disable, hq2x, ypbpr, ypbpr_full : in std_logic; - rotate : in std_logic_vector(1 downto 0); - R, G, B : in std_logic_vector(2 downto 0); - HSync, VSync, line_start, mono : in std_logic; - - VGA_R,VGA_G, VGA_B : out std_logic_vector(5 downto 0); - VGA_VS, VGA_HS : out std_logic - ); - end component video_mixer; - - component keyboard - PORT( - clk : in std_logic; - reset : in std_logic; - ps2_kbd_clk : in std_logic; - ps2_kbd_data : in std_logic; - joystick : out std_logic_vector (7 downto 0) - ); - end component; - - -begin - --- SWITCH 1: SWITCH 2: NUMBER OF SPACESHIPS: --- --------- --------- --------------------- --- OFF OFF 6 --- ON OFF 5 --- OFF ON 4 --- ON ON 3 --- FIRST FREE SECOND FREE --- SWITCH 3: SWITCH 4: SHIP SCORE: SHIP SCORE: --- --------- --------- ----------- ----------- --- OFF OFF 6,000 60,000 --- ON OFF 5,000 50,000 --- OFF ON 4,000 40,000 --- ON ON 3,000 30,000 - - --Cocktail,Factory,Factory,Factory,Bonus2,Bonus1,Ships2,Ships1 - dip_switch <= "00001111"; - - mist_io_inst : mist_io - generic map (STRLEN => CONF_STR'length) - port map ( - clk_sys => clk, - SPI_SCK => SPI_SCK, - CONF_DATA0 => CONF_DATA0, - SPI_DI => SPI_DI, - SPI_DO => SPI_DO, - conf_str => to_slv(CONF_STR), - buttons => buttons, - scandoubler_disable => scandoubler_disable, - ypbpr => ypbpr, - joystick_1 => joy1, - joystick_0 => joy0, - status => status, - ps2_kbd_clk => ps2Clk, - ps2_kbd_data => ps2Data - ); - - -- - -- Audio - -- - u_dac1 : entity work.dac - port map( - clk_i => clk_88m, - res_n_i => not reset, - dac_i => audio, - dac_o => AUDIO_L - ); - - u_dac2 : entity work.dac - port map( - clk_i => clk_88m, - res_n_i => not reset, - dac_i => audio, - dac_o => AUDIO_R - ); - - - pll: entity work.pll27 - port map( - inclk0 => CLOCK_27, - c0 => clk_88m, - c1 => clk, - locked => clock_stable - ); - - reset <= status(0) or status(5) or buttons(1) or not clock_stable; - - u_keyboard : keyboard - port map( - clk => clk, - reset => reset, - ps2_kbd_clk => ps2Clk, - ps2_kbd_data => ps2Data, - joystick => kbd_joy - ); - - process(clk_88m) - variable cnt: integer range 0 to 6000000 := 0; - begin - if rising_edge(clk_88m) then - if status(3 downto 1) /= "000" then - cnt := 0; - coin <= status(1); - player_start <= status(3 downto 2); - else - if cnt < 6000000 then - cnt := cnt + 1; - else - coin <= '0'; - player_start <= "00"; - end if; - end if; - end if; - end process; - - upjoyB <= joy0(2) or joy1(2) when status(4) = '0' else joy0(0) or joy1(0); - upjoyL <= joy0(1) or joy1(1) or kbd_joy(6) when status(4) = '0' else joy0(2) or joy1(2) or kbd_joy(5); - upjoyR <= joy0(0) or joy1(0) or kbd_joy(7) when status(4) = '0' else joy0(3) or joy1(3) or kbd_joy(4); - - phoenix : entity work.phoenix - port map - ( - clk => clk, - reset => reset, - ce_pix => ce_pix, - dip_switch => dip_switch, - btn_coin => kbd_joy(3) or coin,--ESC - btn_player_start(0) => kbd_joy(1) or player_start(0),--1 - btn_player_start(1) => kbd_joy(2) or player_start(1),--2 - btn_left => upjoyL, - btn_right => upjoyR, - btn_barrier => upjoyB or kbd_joy(2),--TAB - btn_fire => joy0(4) or joy1(4) or kbd_joy(0),--space - video_r => video_r, - video_g => video_g, - video_b => video_b, - video_hs => hsync, - video_vs => vsync, - audio_select => "000", - audio => audio - ); - - scanlines(0) <= '1' when status(7 downto 6) = "10" else '0'; - scanlines(1) <= '1' when status(7 downto 6) = "11" else '0'; - hq2x <= '1' when status(7 downto 6) = "01" else '0'; - - vmixer : video_mixer - port map ( - clk_sys => clk_88m, - ce_pix => ce_pix, - ce_pix_actual => ce_pix, - - SPI_SCK => SPI_SCK, - SPI_SS3 => SPI_SS3, - SPI_DI => SPI_DI, - rotate => '1' & not status(4), - scanlines => scanlines, - scandoubler_disable => scandoubler_disable, - hq2x => hq2x, - ypbpr => ypbpr, - ypbpr_full => '1', - - R => video_r & video_r(1), - G => video_g & video_g(1), - B => video_b & video_b(1), - HSync => hsync, - VSync => vsync, - line_start => '0', - mono => '0', - - VGA_R => VGA_R, - VGA_G => VGA_G, - VGA_B => VGA_B, - VGA_VS => VGA_VS, - VGA_HS => VGA_HS - ); - - LED <= '1'; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_music.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_music.vhd deleted file mode 100644 index 56d6c594..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_music.vhd +++ /dev/null @@ -1,241 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix music by Dar (darfpga@aol.fr) (April 2016) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; -use ieee.math_real.all; - -entity phoenix_music is -generic( - C_clk_freq: real := 11.0 -- MHz -); -port( - clk : in std_logic; - reset : in std_logic; - trigger : in std_logic; - sel_song : in std_logic; - snd : out std_logic_vector(7 downto 0) -); -end phoenix_music; - -architecture struct of phoenix_music is - -constant C_voice_attack: integer := integer(230.0 * C_clk_freq); -- larger value is faster -constant C_song0_tempo: integer := integer(2200.0 * C_clk_freq); -- larger value is faster -constant C_song1_tempo: integer := integer(1700.0 * C_clk_freq); -- larger value is faster -constant C_voice_down_rate: integer := integer(4000.0 / C_clk_freq); -- larger value is slower - -type voice_array is array (0 to 94) of integer range 0 to 127; --- main voice1 (Jeux Interdits) -constant voice1 : voice_array := ( -32,96,32,96,32,96,32,96,26,90,24,88,24,88,23,87,21,85,21,85,24,88,32,96,37,101,101,101,101,101,37,101,35,99,33,97,33,97,32,96,26,90,26,90,32,96,33,97,32,96,33,97,32,96,36,100,33,97,32,96,32,96,26,90,24,88,24,88,23,87,21,85,23,87,23,87,23,87,23,87,24,88,23,87,21,85,24,88,32,96,37,101,101,101,101); --- accompagnement voice1 -constant voice2 : voice_array := ( -5,69,69,69,69,69,16,80,80,80,80,80,8,72,8,72,8,72,16,80,80,80,80,80,5,69,5,8,16,21,5,69,69,69,69,69,17,81,81,81,81,81,10,74,74,74,74,74,16,80,80,80,80,80,16,80,80,80,80,80,8,72,72,72,72,72,5,69,69,69,69,69,7,71,71,71,71,71,17,81,81,81,8,72,5,69,16,80,8,72,5,69,69,69,69); - --- voice1, voice2 and voice3 value description --- bit3-bit0 : tone from 0(La/A) to 11(Sol/G#) --- bit5-bit4 : octave from 0(220Hz)to 2(880Hz) --- bit6 : 0 = strike (restart) the tone, 1 = don't strike (hold) the tone - -type voice_array2 is array (0 to 45) of integer range 0 to 127; --- main voice3 (La lettre a Elise) -constant voice3 : voice_array2 := ( -37,36,37,36,37,32,35,33,26,5,10,17,21,26,32,5,16,21,25,32,33,5,10,17,37,36,37,36,37,32,35,33,26,5,10,17,21,26,32,5,16,21,33,32,26,90); - -type period_array is array (0 to 11) of integer range 0 to 65535; --- Octave 220Hz @ 10MHz -constant tone_period : period_array := ( - 45455, -- ton 0 La (A ) - 42903, -- ton 1 La# (A#) - 40495, -- ton 2 Si (B ) - 38223, -- ton 3 Do (C ) - 36077, -- ton 4 Do# (C#) - 34052, -- ton 5 Re (D ) - 32141, -- ton 6 Re# (D#) - 30337, -- ton 7 Mi (E ) - 28635, -- ton 8 Fa (F ) - 27027, -- ton 9 Fa# (F#) - 25511, -- ton 10 Sol (G ) - 24079 -- ton 11 Sol# (G#) -); - -signal tempo_period : integer range 0 to C_song0_tempo := C_song1_tempo; --0.19s @ 100kHz - -signal voice1_tone : integer range 0 to 65535 := 0; -signal voice1_tone_div : integer range 0 to 65535 := 0; -signal voice1_code : unsigned(6 downto 0) := "0000000"; -signal voice1_vol : unsigned(7 downto 0) := "00000000"; -signal voice1_snd : std_logic := '0'; - -signal voice2_tone : integer range 0 to 65535 := 0; -signal voice2_tone_div : integer range 0 to 65535 := 0; -signal voice2_code : unsigned(6 downto 0) := "0000000"; -signal voice2_vol : unsigned(7 downto 0) := "00000000"; -signal voice2_snd : std_logic := '0'; - -signal snd1 : unsigned(7 downto 0) := "00000000"; -signal snd2 : unsigned(7 downto 0) := "00000000"; - -signal trigger_r : std_logic := '0'; -signal max_step : integer range 0 to 94 := 94; -signal sel_song_r: std_logic := '1'; - -begin - -process (clk) - variable cnt : integer range 0 to 127 := 0; - variable step : integer range 0 to 94 := 94; - variable tempo : integer range 0 to C_song0_tempo := 0; - variable voice1_code_v : unsigned(6 downto 0) := "0000000"; - variable voice2_code_v : unsigned(6 downto 0) := "0000000"; - variable voice1_down_rate : integer range 0 to C_voice_down_rate := 0; - variable voice2_down_rate : integer range 0 to C_voice_down_rate := 0; -begin - if rising_edge(clk) then - trigger_r <= trigger; - - if reset = '1' then - cnt := 0; - step := 94; - voice1_vol <= X"00"; - voice2_vol <= X"00"; - elsif trigger ='1' and trigger_r ='0' and step = 94 then -- restart music on edge trigger if not already playing - cnt := 0; - step := 0; - voice1_vol <= X"00"; - voice2_vol <= X"00"; - sel_song_r <= sel_song; - if sel_song = '1' then - max_step <= 94; - tempo_period <= C_song1_tempo; - else - max_step <= 46; - tempo_period <= C_song0_tempo; - end if; - else - cnt := cnt +1; - if cnt >= 100 then - cnt := 0; - tempo := tempo +1; - if tempo >= tempo_period then -- next beat - tempo := 0; - if step < max_step then -- if not end of music get next note - if sel_song_r = '1' then - voice1_code_v := to_unsigned(voice1(step),7); - voice2_code_v := to_unsigned(voice2(step),7); - else - voice1_code_v := to_unsigned(voice3(step),7); - voice2_code_v := to_unsigned(voice3(step),7); - end if; - voice1_code <= voice1_code_v; - voice2_code <= voice2_code_v; - step := step + 1; - else -- if end cut-off volume - voice1_vol <= X"00"; - voice2_vol <= X"00"; - step := 94; - end if; - end if; - if (step < 94) then -- if not end of music - -- manage voice1 volume - -- ramp up fast to xF0 at begining of beat when new strike - if (tempo < C_voice_attack) and (voice1_code_v(6)='0') then - if voice1_vol < X"F0" then voice1_vol <= voice1_vol + X"01"; end if; - voice1_down_rate := 0; - -- ramp down slowly after a while, down to x80 - else - if voice1_vol > X"80" then - voice1_down_rate := voice1_down_rate+1; - if voice1_down_rate >= C_voice_down_rate then - voice1_down_rate := 0; - voice1_vol <= voice1_vol - X"01"; - end if; - end if; - end if; - -- manage voice2 volume - if (tempo < C_voice_attack) and (voice2_code_v(6)='0') then - if voice2_vol < X"F0" then voice2_vol <= voice2_vol + X"01"; end if; - voice2_down_rate := 0; - else - if voice2_vol > X"80" then - voice2_down_rate := voice2_down_rate+1; - if voice2_down_rate >= C_voice_down_rate then - voice2_down_rate := 0; - voice2_vol <= voice2_vol - X"01"; - end if; - end if; - end if; - end if; - end if; - end if; - end if; -end process; - --- get voice1 raw tone -voice1_tone <= tone_period(to_integer(voice1_code(3 downto 0))); - --- get voice1 tone w.r.t octave -with voice1_code(5 downto 4) select -voice1_tone_div <= voice1_tone when "00", - voice1_tone/2 when "01", - voice1_tone/4 when others; - --- generate voice1 frequency -voice1_frequency: process (clk) - variable cnt : integer range 0 to 65535 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - else - cnt := cnt+1; - if cnt >= voice1_tone_div then - cnt := 0; - voice1_snd <= not voice1_snd; - end if; - end if; - end if; -end process; - --- get voice2 raw tone -voice2_tone <= tone_period(to_integer(voice2_code(3 downto 0))); - --- get voice2 tone w.r.t octave -with voice2_code(5 downto 4) select -voice2_tone_div <= voice2_tone when "00", - voice2_tone/2 when "01", - voice2_tone/4 when others; - --- generate voice2 frequency -voice2_frequency: process (clk) - variable cnt : integer range 0 to 65535 := 0; -begin - if rising_edge(clk) then - if reset = '1' then - cnt := 0; - else - cnt := cnt+1; - if cnt >= voice2_tone_div then - cnt := 0; - voice2_snd <= not voice2_snd; - end if; - end if; - end if; -end process; - --- modulate voice1 volume with voice1 frequency -with voice1_snd select snd1 <= voice1_vol when '1', X"00" when others; - --- modulate voice2 volume with voice2 frequency -with voice2_snd select snd2 <= voice2_vol when '1', X"00" when others; - --- mix voice1 and voice 2 -snd <= std_logic_vector(('0'&snd1(7 downto 1)) + ('0'&snd2(7 downto 1))); - -end struct; - diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_video.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_video.vhd deleted file mode 100644 index 9f7ac60d..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/phoenix_video.vhd +++ /dev/null @@ -1,160 +0,0 @@ ---------------------------------------------------------------------------------- --- Phoenix video generator by Dar (darfpga@aol.fr) --- http://darfpga.blogspot.fr ---------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.ALL; -use ieee.numeric_std.all; - -entity phoenix_video is -port( - clk11 : in std_logic; - reset : in std_logic; - ce_pix : out std_logic; - hcnt : out std_logic_vector(9 downto 1); - vcnt : out std_logic_vector(8 downto 1); - sync_hs : out std_logic; - sync_vs : out std_logic; - adrsel : out std_logic; - rdy : out std_logic; - vblank : out std_logic; - hblank_frgrd : out std_logic; - hblank_bkgrd : out std_logic -); -end phoenix_video; - -architecture struct of phoenix_video is - signal hclk_i : std_logic := '0'; - signal hstb_i : std_logic := '0'; - signal hcnt_i : unsigned(9 downto 1) := (others=>'0'); - signal vcnt_i : unsigned(9 downto 1) := (others=>'0'); - signal vcnt2 : std_logic_vector(8 downto 1) := (others=>'0'); - signal vblank_n : std_logic := '0'; - - signal rdy1_i : std_logic; - signal rdy2_i : std_logic; - signal j1 : std_logic; - signal k1 : std_logic; - signal q1 : std_logic; - signal j2 : std_logic; - signal k2 : std_logic; - signal q2 : std_logic; - -begin - --- horizontal counter clock (pixel clock) -process(clk11) begin - if falling_edge(clk11) then - hclk_i <= not hclk_i; - end if; -end process; - --- horizontal counter from 0x0A0 to 0x1FF : 352 pixels -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if reset = '1' then - hcnt_i <= (others=>'0'); - vcnt_i <= (others=>'0'); - else - hcnt_i <= hcnt_i +1; - if hcnt_i = 511 then - hcnt_i <= to_unsigned(160,9); - vcnt_i <= vcnt_i +1; - if vcnt_i = 261 then - vcnt_i <= to_unsigned(0,9); - end if; - end if; - end if; - end if; - end if; -end process; - --- vertical counter clock (line clock) = hblank -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if (hcnt_i(3) and hcnt_i(2) and hcnt_i(1)) = '1' then hstb_i <= not hcnt_i(9); end if; - end if; - end if; -end process; - --- vertical blanking -vblank_n <= - not(vcnt2(8) and vcnt2(7)) - or - ( not - ( not (vcnt2(8) and vcnt2(7) and not vcnt2(6) and not vcnt2(5) and not vcnt2(4)) - and - not (vcnt2(8) and vcnt2(7) and not vcnt2(6) and not vcnt2(5) and vcnt2(4)) - ) -); - --- ready signal for microprocessor -rdy1_i <= not( not(hcnt_i(9)) and not hcnt_i(7) and hcnt_i(6) and not hcnt_i(5)); -rdy2_i <= not( not(hcnt_i(9)) and hcnt_i(7) and hcnt_i(6) and hcnt_i(5)); - --- background horizontal blanking -j1 <= hcnt_i(6) and hcnt_i(4); -k1 <= hstb_i; - -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if (j1 xor k1) = '1' then - q1 <= j1; - elsif j1 = '1' then - q1 <= not q1; - else - q1 <= q1; - end if; - end if; - end if; -end process; - -j2 <= not hcnt_i(6) and hcnt_i(5); -k2 <= hcnt_i(8) and hcnt_i(7) and hcnt_i(6) and hcnt_i(4); - -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if (j2 xor k2) = '1' then - q2 <= j2; - elsif j2 = '1' then - q2 <= not q2; - else - q2 <= q2; - end if; - end if; - end if; -end process; - --- output -ce_pix <= hclk_i; -hcnt <= std_logic_vector(hcnt_i); -vcnt2 <= std_logic_vector(vcnt_i(8 downto 1)) when vcnt_i < 255 else "11111111"; -vcnt <= vcnt2; ---sync <= not(sync1_i xor sync2_i) ; original syncs -rdy <= not(vblank_n and (not (rdy1_i and rdy2_i and not hcnt_i(9)))); -adrsel <= vblank_n and hcnt_i(9); - -vblank <= not vblank_n; -hblank_frgrd <= hstb_i; -hblank_bkgrd <= not(hcnt_i(9) and q1) and not(hcnt_i(9) and (q2)); - -process(clk11) begin - if rising_edge(clk11) then - if hclk_i = '1' then - if hcnt_i = 191 then - sync_hs <= '1'; - if vcnt_i = 230 then sync_vs <= '1'; end if; - if vcnt_i = 237 then sync_vs <= '0'; end if; - end if; - if hcnt_i = 217 then sync_hs <= '0'; end if; - end if; - end if; -end process; - -end struct; diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/pll.qip b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/pll.qip deleted file mode 100644 index 48665362..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/pll.qip +++ /dev/null @@ -1,4 +0,0 @@ -set_global_assignment -name IP_TOOL_NAME "ALTPLL" -set_global_assignment -name IP_TOOL_VERSION "13.1" -set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] -set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/pll.vhd b/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/pll.vhd deleted file mode 100644 index 176b8cef..00000000 --- a/Arcade_MiST/Phoenix Hardware/Pleiads_MIST/rtl/pll.vhd +++ /dev/null @@ -1,387 +0,0 @@ --- megafunction wizard: %ALTPLL% --- GENERATION: STANDARD --- VERSION: WM1.0 --- MODULE: altpll - --- ============================================================ --- File Name: pll.vhd --- 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. - - -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.all; - -ENTITY pll IS - PORT - ( - areset : IN STD_LOGIC := '0'; - inclk0 : IN STD_LOGIC := '0'; - c0 : OUT STD_LOGIC ; - c1 : OUT STD_LOGIC - ); -END pll; - - -ARCHITECTURE SYN OF pll IS - - SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); - SIGNAL sub_wire1 : STD_LOGIC ; - SIGNAL sub_wire2 : STD_LOGIC ; - SIGNAL sub_wire3 : STD_LOGIC ; - SIGNAL sub_wire4 : STD_LOGIC_VECTOR (1 DOWNTO 0); - SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0); - SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); - - - - COMPONENT altpll - GENERIC ( - bandwidth_type : STRING; - clk0_divide_by : NATURAL; - clk0_duty_cycle : NATURAL; - clk0_multiply_by : NATURAL; - clk0_phase_shift : STRING; - clk1_divide_by : NATURAL; - clk1_duty_cycle : NATURAL; - clk1_multiply_by : NATURAL; - clk1_phase_shift : STRING; - compensate_clock : STRING; - inclk0_input_frequency : NATURAL; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - operation_mode : STRING; - pll_type : STRING; - port_activeclock : STRING; - port_areset : STRING; - port_clkbad0 : STRING; - port_clkbad1 : STRING; - port_clkloss : STRING; - port_clkswitch : STRING; - port_configupdate : STRING; - port_fbin : STRING; - port_inclk0 : STRING; - port_inclk1 : STRING; - port_locked : STRING; - port_pfdena : STRING; - port_phasecounterselect : STRING; - port_phasedone : STRING; - port_phasestep : STRING; - port_phaseupdown : STRING; - port_pllena : STRING; - port_scanaclr : STRING; - port_scanclk : STRING; - port_scanclkena : STRING; - port_scandata : STRING; - port_scandataout : STRING; - port_scandone : STRING; - port_scanread : STRING; - port_scanwrite : STRING; - port_clk0 : STRING; - port_clk1 : STRING; - port_clk2 : STRING; - port_clk3 : STRING; - port_clk4 : STRING; - port_clk5 : STRING; - port_clkena0 : STRING; - port_clkena1 : STRING; - port_clkena2 : STRING; - port_clkena3 : STRING; - port_clkena4 : STRING; - port_clkena5 : STRING; - port_extclk0 : STRING; - port_extclk1 : STRING; - port_extclk2 : STRING; - port_extclk3 : STRING; - width_clock : NATURAL - ); - PORT ( - areset : IN STD_LOGIC ; - clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); - inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - END COMPONENT; - -BEGIN - sub_wire5_bv(0 DOWNTO 0) <= "0"; - sub_wire5 <= To_stdlogicvector(sub_wire5_bv); - sub_wire2 <= sub_wire0(0); - sub_wire1 <= sub_wire0(1); - c1 <= sub_wire1; - c0 <= sub_wire2; - sub_wire3 <= inclk0; - sub_wire4 <= sub_wire5(0 DOWNTO 0) & sub_wire3; - - altpll_component : altpll - GENERIC MAP ( - bandwidth_type => "AUTO", - clk0_divide_by => 140, - clk0_duty_cycle => 50, - clk0_multiply_by => 57, - clk0_phase_shift => "0", - clk1_divide_by => 70, - clk1_duty_cycle => 50, - clk1_multiply_by => 57, - clk1_phase_shift => "0", - compensate_clock => "CLK0", - inclk0_input_frequency => 37037, - intended_device_family => "Cyclone III", - lpm_hint => "CBX_MODULE_PREFIX=pll", - lpm_type => "altpll", - operation_mode => "NORMAL", - pll_type => "AUTO", - port_activeclock => "PORT_UNUSED", - port_areset => "PORT_USED", - port_clkbad0 => "PORT_UNUSED", - port_clkbad1 => "PORT_UNUSED", - port_clkloss => "PORT_UNUSED", - port_clkswitch => "PORT_UNUSED", - port_configupdate => "PORT_UNUSED", - port_fbin => "PORT_UNUSED", - port_inclk0 => "PORT_USED", - port_inclk1 => "PORT_UNUSED", - port_locked => "PORT_UNUSED", - port_pfdena => "PORT_UNUSED", - port_phasecounterselect => "PORT_UNUSED", - port_phasedone => "PORT_UNUSED", - port_phasestep => "PORT_UNUSED", - port_phaseupdown => "PORT_UNUSED", - port_pllena => "PORT_UNUSED", - port_scanaclr => "PORT_UNUSED", - port_scanclk => "PORT_UNUSED", - port_scanclkena => "PORT_UNUSED", - port_scandata => "PORT_UNUSED", - port_scandataout => "PORT_UNUSED", - port_scandone => "PORT_UNUSED", - port_scanread => "PORT_UNUSED", - port_scanwrite => "PORT_UNUSED", - port_clk0 => "PORT_USED", - port_clk1 => "PORT_USED", - port_clk2 => "PORT_UNUSED", - port_clk3 => "PORT_UNUSED", - port_clk4 => "PORT_UNUSED", - port_clk5 => "PORT_UNUSED", - port_clkena0 => "PORT_UNUSED", - port_clkena1 => "PORT_UNUSED", - port_clkena2 => "PORT_UNUSED", - port_clkena3 => "PORT_UNUSED", - port_clkena4 => "PORT_UNUSED", - port_clkena5 => "PORT_UNUSED", - port_extclk0 => "PORT_UNUSED", - port_extclk1 => "PORT_UNUSED", - port_extclk2 => "PORT_UNUSED", - port_extclk3 => "PORT_UNUSED", - width_clock => 5 - ) - PORT MAP ( - areset => areset, - inclk => sub_wire4, - clk => sub_wire0 - ); - - - -END SYN; - --- ============================================================ --- CNX file retrieval info --- ============================================================ --- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" --- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" --- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" --- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" --- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" --- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" --- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" --- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" --- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" --- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" --- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" --- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" --- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "140" --- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "70" --- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "10.992857" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "21.985714" --- 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 "ps" --- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" --- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" --- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "57" --- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "57" --- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" --- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "11.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "22.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" --- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" --- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" --- 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: SWITCHOVER_COUNT_EDIT NUMERIC "1" --- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" --- Retrieval info: PRIVATE: USE_CLK0 STRING "1" --- Retrieval info: PRIVATE: USE_CLK1 STRING "1" --- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" --- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" --- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" --- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all --- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" --- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "140" --- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "57" --- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "70" --- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "57" --- Retrieval info: CONSTANT: CLK1_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_USED" --- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" --- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" --- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" --- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" --- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" --- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" --- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" --- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 --- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 --- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd 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.vhd FALSE --- Retrieval info: LIB_FILE: altera_mf --- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/README.txt b/Arcade_MiST/Phoenix Hardware/README.txt similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/README.txt rename to Arcade_MiST/Phoenix Hardware/README.txt diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/clean.bat b/Arcade_MiST/Phoenix Hardware/clean.bat similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/clean.bat rename to Arcade_MiST/Phoenix Hardware/clean.bat diff --git a/Arcade_MiST/Phoenix Hardware/meta/Capitol.mra b/Arcade_MiST/Phoenix Hardware/meta/Capitol.mra new file mode 100644 index 00000000..ccb0ece6 --- /dev/null +++ b/Arcade_MiST/Phoenix Hardware/meta/Capitol.mra @@ -0,0 +1,62 @@ + + Capitol + 0220 + capitol + 20200430150001 + 1981 + Universal Video Spiel + Space / Shooter + phoenix + + + + + + + + 01 + + + + + + + + + + + + + + + + + + + + 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 43 89 00 03 00 00 + 00 00 41 E1 00 01 20 20 + 00 00 41 C1 00 01 20 20 + 00 00 41 A1 00 01 20 20 + 00 00 41 81 00 01 20 20 + 00 00 41 61 00 01 20 20 + 00 00 41 41 00 01 20 20 + 00 00 43 81 00 03 00 00 + 00 00 43 01 00 01 20 20 + 00 00 42 E1 00 01 20 20 + 00 00 42 C1 00 01 20 20 + 00 00 42 A1 00 01 20 20 + 00 00 42 81 00 01 20 20 + 00 00 42 61 00 01 20 20 + 00 00 43 85 00 03 00 00 + 00 00 40 C1 00 01 20 20 + 00 00 40 A1 00 01 20 20 + 00 00 40 81 00 01 20 20 + 00 00 40 61 00 01 20 20 + 00 00 40 41 00 01 20 20 + 00 00 40 21 00 01 20 20 + + + + diff --git a/Arcade_MiST/Phoenix Hardware/meta/Phoenix (Amstar, Set 1).mra b/Arcade_MiST/Phoenix Hardware/meta/Phoenix (Amstar, Set 1).mra new file mode 100644 index 00000000..9bf85352 --- /dev/null +++ b/Arcade_MiST/Phoenix Hardware/meta/Phoenix (Amstar, Set 1).mra @@ -0,0 +1,94 @@ + + Phoenix + + no + no + Amstar, Set 1 + + + + 1980 + Amstar + Shooter - Gallery + + phoenix + phoenix + 0220 + phoenix + + + 15kHz + vertical (cw) + yes + + 2 (alternating) + 2-way horizontal + + 2 + + + + + + + + + 00 + + + + + + + + + + + + + + + + + + + + + + + + + + + 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 43 89 00 03 00 00 + 00 00 41 E1 00 01 20 20 + 00 00 41 C1 00 01 20 20 + 00 00 41 A1 00 01 20 20 + 00 00 41 81 00 01 20 20 + 00 00 41 61 00 01 20 20 + 00 00 41 41 00 01 20 20 + 00 00 43 81 00 03 00 00 + 00 00 43 01 00 01 20 20 + 00 00 42 E1 00 01 20 20 + 00 00 42 C1 00 01 20 20 + 00 00 42 A1 00 01 20 20 + 00 00 42 81 00 01 20 20 + 00 00 42 61 00 01 20 20 + 00 00 43 85 00 03 00 00 + 00 00 40 C1 00 01 20 20 + 00 00 40 A1 00 01 20 20 + 00 00 40 81 00 01 20 20 + 00 00 40 61 00 01 20 20 + 00 00 40 41 00 01 20 20 + 00 00 40 21 00 01 20 20 + + + + + + + + + 20210430005030 + \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/meta/Pleiads (Tehkan).mra b/Arcade_MiST/Phoenix Hardware/meta/Pleiads (Tehkan).mra new file mode 100644 index 00000000..6445d7b3 --- /dev/null +++ b/Arcade_MiST/Phoenix Hardware/meta/Pleiads (Tehkan).mra @@ -0,0 +1,62 @@ + + Pleiads (Tehkan) + 0220 + pleiads + 20200430150001 + 1981 + Tehkan + Space / Shooter + phoenix + + + + + + + + 01 + + + + + + + + + + + + + + + + + + + + 00 00 00 00 00 FF 00 02 00 02 00 01 00 FF 00 00 + 00 00 43 89 00 03 00 00 + 00 00 41 E1 00 01 20 20 + 00 00 41 C1 00 01 20 20 + 00 00 41 A1 00 01 20 20 + 00 00 41 81 00 01 20 20 + 00 00 41 61 00 01 20 20 + 00 00 41 41 00 01 20 20 + 00 00 43 81 00 03 00 00 + 00 00 43 01 00 01 20 20 + 00 00 42 E1 00 01 20 20 + 00 00 42 C1 00 01 20 20 + 00 00 42 A1 00 01 20 20 + 00 00 42 81 00 01 20 20 + 00 00 42 61 00 01 20 20 + 00 00 43 85 00 03 00 00 + 00 00 40 C1 00 01 20 20 + 00 00 40 A1 00 01 20 20 + 00 00 40 81 00 01 20 20 + 00 00 40 61 00 01 20 20 + 00 00 40 41 00 01 20 20 + 00 00 40 21 00 01 20 20 + + + + diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.qpf b/Arcade_MiST/Phoenix Hardware/phoenix_mist.qpf similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.qpf rename to Arcade_MiST/Phoenix Hardware/phoenix_mist.qpf diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.qsf b/Arcade_MiST/Phoenix Hardware/phoenix_mist.qsf similarity index 97% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.qsf rename to Arcade_MiST/Phoenix Hardware/phoenix_mist.qsf index 25cbcfc4..1d8758cc 100644 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.qsf +++ b/Arcade_MiST/Phoenix Hardware/phoenix_mist.qsf @@ -400,20 +400,14 @@ set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" - # ------------------------ set_global_assignment -name SYSTEMVERILOG_FILE rtl/Phoenix_MiST.sv set_global_assignment -name VHDL_FILE rtl/phoenix.vhd +set_global_assignment -name VHDL_FILE rtl/dpram.vhd set_global_assignment -name VHDL_FILE rtl/phoenix_effect3.vhd set_global_assignment -name VHDL_FILE rtl/phoenix_effect2.vhd set_global_assignment -name VHDL_FILE rtl/phoenix_effect1.vhd set_global_assignment -name VHDL_FILE rtl/phoenix_video.vhd -set_global_assignment -name VHDL_FILE rtl/phoenix_prog.vhd set_global_assignment -name VHDL_FILE rtl/phoenix_music.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prom_palette_ic41.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prom_palette_ic40.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prom_ic40.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prom_ic39.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prom_ic24.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/prom_ic23.vhd set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd set_global_assignment -name VHDL_FILE rtl/pll.vhd -set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip -set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip +set_global_assignment -name QIP_FILE ../../common/mist/mist.qip +set_global_assignment -name QIP_FILE ../../common/CPU/T80/T80.qip set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.sdc b/Arcade_MiST/Phoenix Hardware/phoenix_mist.sdc similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/phoenix_mist.sdc rename to Arcade_MiST/Phoenix Hardware/phoenix_mist.sdc diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/Phoenix_MiST.sv b/Arcade_MiST/Phoenix Hardware/rtl/Phoenix_MiST.sv similarity index 80% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/Phoenix_MiST.sv rename to Arcade_MiST/Phoenix Hardware/rtl/Phoenix_MiST.sv index 918496b9..22f197b7 100644 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/Phoenix_MiST.sv +++ b/Arcade_MiST/Phoenix Hardware/rtl/Phoenix_MiST.sv @@ -30,19 +30,21 @@ module Phoenix_MiST `include "rtl\build_id.v" localparam CONF_STR = { - "Phoenix;;", + "PHOENIX;;", "O2,Rotate Controls,Off,On;", "O34,Scanlines,Off,25%,50%,75%;", "O5,Blend,Off,On;", + "DIP;", "T0,Reset;", - "V,v1.21.",`BUILD_DATE + "V,v2,",`BUILD_DATE }; wire rotate = status[2]; wire [1:0] scanlines = status[4:3]; wire blend = status[5]; +wire [7:0] dsw = status[15:8]; -assign LED = 1; +assign LED = ~ioctl_downl; assign AUDIO_R = AUDIO_L; wire clk_sys, clk_22; @@ -54,6 +56,7 @@ pll pll( .c1(clk_22) ); +wire [6:0] core_mod; wire [31:0] status; wire [1:0] buttons; wire [1:0] switches; @@ -61,20 +64,31 @@ wire [7:0] joystick_0; wire [7:0] joystick_1; wire scandoublerD; wire ypbpr; +wire no_csync; +wire key_pressed; +wire [7:0] key_code; +wire key_strobe; + +wire ioctl_downl; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; + reg [11:0] audio; wire hb1, hb2, vb; wire blankn = ~((hb1 & hb2) | vb); wire hs, vs; wire [1:0] r,g,b; -wire key_pressed; -wire [7:0] key_code; -wire key_strobe; - +reg reset = 1; +always @(posedge clk_sys) reset <= status[0] | buttons[1] | ioctl_downl; phoenix phoenix( .clk(clk_sys), - .reset(status[0] | buttons[1]), - .dip_switch(8'b00001111), + .reset(reset), + .mod_pleiads(core_mod[0]), + .mod_survival(core_mod[1]), + .dip_switch(dsw), .btn_coin(m_coin1 | m_coin2), .btn_player_start({m_two_players,m_one_player}), .btn_left(m_left), @@ -90,9 +104,13 @@ phoenix phoenix( .video_hblank_bg(hb1), .video_hblank_fg(hb2), .audio_select("000"), - .audio(audio) + .audio(audio), + + .dl_addr(ioctl_addr[15:0]), + .dl_wr(ioctl_index == 0 && ioctl_wr && ioctl_downl), + .dl_data(ioctl_dout) ); - + mist_video #(.COLOR_DEPTH(2), .SD_HCNT_WIDTH(10)) mist_video( .clk_sys(clk_22), .SPI_SCK(SPI_SCK), @@ -113,7 +131,8 @@ mist_video #(.COLOR_DEPTH(2), .SD_HCNT_WIDTH(10)) mist_video( .rotate({1'b1,rotate}), .scandoubler_disable(scandoublerD), .scanlines(scanlines), - .ypbpr(ypbpr) + .ypbpr(ypbpr), + .no_csync(no_csync) ); user_io #( @@ -129,6 +148,8 @@ user_io( .switches (switches ), .scandoubler_disable (scandoublerD ), .ypbpr (ypbpr ), + .no_csync (no_csync ), + .core_mod (core_mod ), .key_strobe (key_strobe ), .key_pressed (key_pressed ), .key_code (key_code ), @@ -136,6 +157,18 @@ user_io( .joystick_1 (joystick_1 ), .status (status ) ); + +data_io data_io( + .clk_sys ( clk_sys ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS2 ( SPI_SS2 ), + .SPI_DI ( SPI_DI ), + .ioctl_download( ioctl_downl ), + .ioctl_index ( ioctl_index ), + .ioctl_wr ( ioctl_wr ), + .ioctl_addr ( ioctl_addr ), + .ioctl_dout ( ioctl_dout ) +); dac #( .C_bits(16)) diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/build_id.tcl b/Arcade_MiST/Phoenix Hardware/rtl/build_id.tcl similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/build_id.tcl rename to Arcade_MiST/Phoenix Hardware/rtl/build_id.tcl diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/gen_ram.vhd b/Arcade_MiST/Phoenix Hardware/rtl/dpram.vhd similarity index 55% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/gen_ram.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/dpram.vhd index 0794fdc0..284194c5 100644 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/gen_ram.vhd +++ b/Arcade_MiST/Phoenix Hardware/rtl/dpram.vhd @@ -12,7 +12,7 @@ -- -- ----------------------------------------------------------------------- -- --- gen_rwram.vhd +-- dpram.vhd -- -- ----------------------------------------------------------------------- -- @@ -26,57 +26,56 @@ use IEEE.numeric_std.ALL; -- ----------------------------------------------------------------------- -entity gen_ram is +entity dpram is generic ( dWidth : integer := 8; aWidth : integer := 10 ); port ( - clk : in std_logic; - we : in std_logic; - addr : in std_logic_vector((aWidth-1) downto 0); - d : in std_logic_vector((dWidth-1) downto 0); - q : out std_logic_vector((dWidth-1) downto 0) + clk_a : in std_logic; + we_a : in std_logic := '0'; + addr_a : in std_logic_vector((aWidth-1) downto 0); + d_a : in std_logic_vector((dWidth-1) downto 0) := (others => '0'); + q_a : out std_logic_vector((dWidth-1) downto 0); + + clk_b : in std_logic; + we_b : in std_logic := '0'; + addr_b : in std_logic_vector((aWidth-1) downto 0); + d_b : in std_logic_vector((dWidth-1) downto 0) := (others => '0'); + q_b : out std_logic_vector((dWidth-1) downto 0) ); end entity; -- ----------------------------------------------------------------------- -architecture rtl of gen_ram is +architecture rtl of dpram is subtype addressRange is integer range 0 to ((2**aWidth)-1); type ramDef is array(addressRange) of std_logic_vector((dWidth-1) downto 0); signal ram: ramDef; - - signal rAddrReg : std_logic_vector((aWidth-1) downto 0); - signal qReg : std_logic_vector((dWidth-1) downto 0); + signal addr_a_reg: std_logic_vector((aWidth-1) downto 0); + signal addr_b_reg: std_logic_vector((aWidth-1) downto 0); begin --- ----------------------------------------------------------------------- --- Signals to entity interface --- ----------------------------------------------------------------------- - q <= qReg; -- ----------------------------------------------------------------------- --- Memory write --- ----------------------------------------------------------------------- - process(clk) + process(clk_a) begin - if rising_edge(clk) then - if we = '1' then - ram(to_integer(unsigned(addr))) <= d; + if rising_edge(clk_a) then + if we_a = '1' then + ram(to_integer(unsigned(addr_a))) <= d_a; end if; + q_a <= ram(to_integer(unsigned(addr_a))); + end if; + end process; + + process(clk_b) + begin + if rising_edge(clk_b) then + if we_b = '1' then + ram(to_integer(unsigned(addr_b))) <= d_b; + end if; + q_b <= ram(to_integer(unsigned(addr_b))); end if; end process; --- ----------------------------------------------------------------------- --- Memory read --- ----------------------------------------------------------------------- - process(clk) - begin - if rising_edge(clk) then --- qReg <= ram(to_integer(unsigned(rAddrReg))); --- rAddrReg <= addr; - qReg <= ram(to_integer(unsigned(addr))); - end if; - end process; end architecture; diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/gen_ram.vhd b/Arcade_MiST/Phoenix Hardware/rtl/gen_ram.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/gen_ram.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/gen_ram.vhd diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix.vhd b/Arcade_MiST/Phoenix Hardware/rtl/phoenix.vhd similarity index 80% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/phoenix.vhd index 15421221..83a7986d 100644 --- a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/phoenix.vhd +++ b/Arcade_MiST/Phoenix Hardware/rtl/phoenix.vhd @@ -21,7 +21,9 @@ port( clk : in std_logic; -- 11 MHz for TV, 25 MHz for VGA reset : in std_logic; ce_pix : out std_logic; - + mod_pleiads : in std_logic; + mod_survival : in std_logic; + dip_switch : in std_logic_vector(7 downto 0); -- game controls, normal logic '1':pressed, '0':released @@ -42,7 +44,11 @@ port( sound_fireball: out std_logic; -- bird explodes in 2 fireballs sound_ab : out std_logic_vector(15 downto 0); audio_select : in std_logic_vector(2 downto 0) := (others => '0'); - audio : out std_logic_vector(11 downto 0) + audio : out std_logic_vector(11 downto 0); + + dl_addr : in std_logic_vector(15 downto 0); + dl_wr : in std_logic; + dl_data : in std_logic_vector(7 downto 0) ); end phoenix; @@ -106,7 +112,7 @@ architecture struct of phoenix is signal fr_lin : std_logic_vector(2 downto 0); signal bk_lin : std_logic_vector(2 downto 0); - signal color_set : std_logic; + signal color_set : std_logic_vector(1 downto 0); signal color_id : std_logic_vector(5 downto 0); signal rgb_0 : std_logic_vector(2 downto 0); signal rgb_1 : std_logic_vector(2 downto 0); @@ -129,6 +135,14 @@ architecture struct of phoenix is signal player_start : std_logic_vector(1 downto 0); signal buttons : std_logic_vector(3 downto 0); signal R_autofire : std_logic_vector(21 downto 0); + + signal prog_we : std_logic; + signal frgnd_bit0_we : std_logic; + signal frgnd_bit1_we : std_logic; + signal bkgnd_bit0_we : std_logic; + signal bkgnd_bit1_we : std_logic; + signal palette_0_we : std_logic; + signal palette_1_we : std_logic; begin -- game core uses inverted control logic @@ -234,7 +248,7 @@ begin when "11000" => sound_b <= cpu_do; when "11010" => sound_a <= cpu_do; when "10100" => player2 <= cpu_do(0); - color_set <= cpu_do(1); + color_set <= cpu_do(2 downto 1); when others => null; end case; end if; @@ -292,7 +306,7 @@ color_id <= (fr_bit0 or fr_bit1) & fr_bit1 & fr_bit0 & fr_lin when (fr_bit0 o (fr_bit0 or fr_bit1) & bk_bit1 & bk_bit0 & bk_lin; -- address palette with pixel bits color and color set -palette_adr <= '0' & color_set & color_id; +palette_adr <= (mod_pleiads and color_set(1)) & color_set(0) & color_id; -- output video to top level process(clk) begin @@ -315,52 +329,130 @@ process(clk) begin end process; G_yes_tile_rom: if C_tile_rom generate --- foreground graphix ROM bit0 -frgnd_bit0 : entity work.prom_ic39 +-- foreground graphix ROM bit0 - ic39 +frgnd_bit0_we <= '1' when dl_wr = '1' and dl_addr(15 downto 11) = "01010" else '0'; + +frgnd_bit0: entity work.dpram +generic map( + aWidth => 11 +) port map( - clk => clk, - addr => frgnd_graph_adr, - data => frgnd_bit0_graph + clk_a => clk, + we_a => '0', + addr_a => frgnd_graph_adr, + q_a => frgnd_bit0_graph, + + clk_b => clk, + addr_b => dl_addr(10 downto 0), + we_b => frgnd_bit0_we, + d_b => dl_data ); --- foreground graphix ROM bit1 -frgnd_bit1 : entity work.prom_ic40 +-- foreground graphix ROM bit1 - ic40 +frgnd_bit1_we <= '1' when dl_wr = '1' and dl_addr(15 downto 11) = "01011" else '0'; + +frgnd_bit1: entity work.dpram +generic map( + aWidth => 11 +) port map( - clk => clk, - addr => frgnd_graph_adr, - data => frgnd_bit1_graph + clk_a => clk, + we_a => '0', + addr_a => frgnd_graph_adr, + q_a => frgnd_bit1_graph, + + clk_b => clk, + addr_b => dl_addr(10 downto 0), + we_b => frgnd_bit1_we, + d_b => dl_data ); --- background graphix ROM bit0 -bkgnd_bit0 : entity work.prom_ic23 +-- background graphix ROM bit0 - ic23 +bkgnd_bit0_we <= '1' when dl_wr = '1' and dl_addr(15 downto 11) = "01000" else '0'; + +bkgdn_bit0: entity work.dpram +generic map( + aWidth => 11 +) port map( - clk => clk, - addr => bkgnd_graph_adr, - data => bkgnd_bit0_graph + clk_a => clk, + we_a => '0', + addr_a => bkgnd_graph_adr, + q_a => bkgnd_bit0_graph, + + clk_b => clk, + addr_b => dl_addr(10 downto 0), + we_b => bkgnd_bit0_we, + d_b => dl_data ); --- background graphix ROM bit1 -bkgnd_bit1 : entity work.prom_ic24 +-- background graphix ROM bit1 - ic24 +bkgnd_bit1_we <= '1' when dl_wr = '1' and dl_addr(15 downto 11) = "01001" else '0'; + +bkgdn_bit1: entity work.dpram +generic map( + aWidth => 11 +) port map( - clk => clk, - addr => bkgnd_graph_adr, - data => bkgnd_bit1_graph + clk_a => clk, + we_a => '0', + addr_a => bkgnd_graph_adr, + q_a => bkgnd_bit1_graph, + + clk_b => clk, + addr_b => dl_addr(10 downto 0), + we_b => bkgnd_bit1_we, + d_b => dl_data ); -- color palette ROM RBG low intensity -palette_0 : entity work.prom_palette_ic40 +--palette_0 : entity work.prom_palette_ic40 +--port map( +-- clk => clk, +-- addr => palette_adr(6 downto 0), +-- data => rgb_0 +--); +palette_0_we <= '1' when dl_wr = '1' and dl_addr(15 downto 8) = "01100000" else '0'; + +palette_0: entity work.dpram +generic map( + aWidth => 8 +) port map( - clk => clk, - addr => palette_adr(6 downto 0), - data => rgb_0 + clk_a => clk, + we_a => '0', + addr_a => palette_adr, + q_a(2 downto 0) => rgb_0, + + clk_b => clk, + addr_b => dl_addr(7 downto 0), + we_b => palette_0_we, + d_b => dl_data ); -- color palette ROM RBG high intensity -palette_1 : entity work.prom_palette_ic41 +--palette_1 : entity work.prom_palette_ic41 +--port map( +-- clk => clk, +-- addr => palette_adr(6 downto 0), +-- data => rgb_1 +--); +palette_1_we <= '1' when dl_wr = '1' and dl_addr(15 downto 8) = "01100001" else '0'; + +palette_1: entity work.dpram +generic map( + aWidth => 8 +) port map( - clk => clk, - addr => palette_adr(6 downto 0), - data => rgb_1 + clk_a => clk, + we_a => '0', + addr_a => palette_adr, + q_a(2 downto 0) => rgb_1, + + clk_b => clk, + addr_b => dl_addr(7 downto 0), + we_b => palette_1_we, + d_b => dl_data ); end generate; @@ -376,11 +468,22 @@ end generate; -- Program PROM S_prog_rom_addr(C_prog_rom_addr_bits-1 downto 0) <= cpu_adr(C_prog_rom_addr_bits-1 downto 0); -prog : entity work.phoenix_prog + +prog_we <= '1' when dl_wr = '1' and dl_addr(15 downto C_prog_rom_addr_bits) = 0 else '0'; +prog: entity work.dpram +generic map( + aWidth => C_prog_rom_addr_bits +) port map( - clk => clk, - addr => S_prog_rom_addr, - data => prog_do + clk_a => clk, + we_a => '0', + addr_a => S_prog_rom_addr, + q_a => prog_do, + + clk_b => clk, + addr_b => dl_addr(C_prog_rom_addr_bits-1 downto 0), + we_b => prog_we, + d_b => dl_data ); -- foreground RAM 0x4000-0x433F diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_effect1.vhd b/Arcade_MiST/Phoenix Hardware/rtl/phoenix_effect1.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_effect1.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/phoenix_effect1.vhd diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_effect2.vhd b/Arcade_MiST/Phoenix Hardware/rtl/phoenix_effect2.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_effect2.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/phoenix_effect2.vhd diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_effect3.vhd b/Arcade_MiST/Phoenix Hardware/rtl/phoenix_effect3.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_effect3.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/phoenix_effect3.vhd diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_music.vhd b/Arcade_MiST/Phoenix Hardware/rtl/phoenix_music.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_music.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/phoenix_music.vhd diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_video.vhd b/Arcade_MiST/Phoenix Hardware/rtl/phoenix_video.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/phoenix_video.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/phoenix_video.vhd diff --git a/Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/pll.qip b/Arcade_MiST/Phoenix Hardware/rtl/pll.qip similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Capitol_MIST/rtl/pll.qip rename to Arcade_MiST/Phoenix Hardware/rtl/pll.qip diff --git a/Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/pll.vhd b/Arcade_MiST/Phoenix Hardware/rtl/pll.vhd similarity index 100% rename from Arcade_MiST/Phoenix Hardware/Phoenix_MIST/rtl/pll.vhd rename to Arcade_MiST/Phoenix Hardware/rtl/pll.vhd diff --git a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Inferno.mra b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Inferno.mra index 36aaddbe..3aabd33a 100644 --- a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Inferno.mra +++ b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Inferno.mra @@ -5,7 +5,7 @@ 1980 Williams inferno - william2 + williams2 2 diff --git a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Joust 2 - Survival of the Fittest (revision 2).mra b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Joust 2 - Survival of the Fittest (revision 2).mra index 0544f3cd..e8dc3458 100644 --- a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Joust 2 - Survival of the Fittest (revision 2).mra +++ b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Joust 2 - Survival of the Fittest (revision 2).mra @@ -5,7 +5,7 @@ 1980 Williams joust2 - william2 + williams2 1 diff --git a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Mystic Marathon.mra b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Mystic Marathon.mra index c2006444..167d9c00 100644 --- a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Mystic Marathon.mra +++ b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Mystic Marathon.mra @@ -5,7 +5,7 @@ 1980 Williams mysticm - william2 + williams2 3 diff --git a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Turkey Shoot.mra b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Turkey Shoot.mra index a32e12ff..f439492d 100644 --- a/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Turkey Shoot.mra +++ b/Arcade_MiST/Williams 6809 rev.2 Hardware/meta/Turkey Shoot.mra @@ -5,7 +5,7 @@ 1980 Williams tshoot - william2 + williams2 0 diff --git a/common/CPU/MC8051/control_fsm_rtl.vhd b/common/CPU/MC8051/control_fsm_rtl.vhd index 8f1b79cd..64d8d444 100644 --- a/common/CPU/MC8051/control_fsm_rtl.vhd +++ b/common/CPU/MC8051/control_fsm_rtl.vhd @@ -337,7 +337,9 @@ begin else -- begin of starting the interrupt procedure -- saving the old adress - if intblock_i = '0' and + -- MJD 20220823, check for IC_RETI here since intblock_i does not get set + -- early enough, which causes incorrect PC restoration. + if intblock_i = '0' and s_instr_category /= IC_RETI and ((s_intpre='1' and state=FETCH) or s_intpre2='1') then if state=FETCH then s_intpre2_en <= '1'; diff --git a/common/CPU/v30/cpu.vhd b/common/CPU/v30/cpu.vhd index e896cf53..533b6981 100644 --- a/common/CPU/v30/cpu.vhd +++ b/common/CPU/v30/cpu.vhd @@ -2,10 +2,36 @@ library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; -use work.pexport.all; +package whatever is + type cpu_export_type is record + reg_ax : unsigned(15 downto 0); + reg_cx : unsigned(15 downto 0); + reg_dx : unsigned(15 downto 0); + reg_bx : unsigned(15 downto 0); + reg_sp : unsigned(15 downto 0); + reg_bp : unsigned(15 downto 0); + reg_si : unsigned(15 downto 0); + reg_di : unsigned(15 downto 0); + reg_es : unsigned(15 downto 0); + reg_cs : unsigned(15 downto 0); + reg_ss : unsigned(15 downto 0); + reg_ds : unsigned(15 downto 0); + reg_ip : unsigned(15 downto 0); + reg_f : unsigned(15 downto 0); + opcodebyte_last : std_logic_vector(7 downto 0); + end record; +end package; + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +-- use work.pexport.all; use work.pBus_savestates.all; use work.pReg_savestates.all; +use work.whatever.all; + entity cpu is port ( @@ -38,7 +64,10 @@ entity cpu is load_savestate : in std_logic; cpu_done : out std_logic := '0'; - cpu_export : out cpu_export_type; + cpu_export_opcode : out std_logic_vector(7 downto 0); + cpu_export_reg_cs : out unsigned(15 downto 0); + cpu_export_reg_ip : out unsigned(15 downto 0); + -- register RegBus_Din : out std_logic_vector(7 downto 0) := (others => '0'); @@ -236,6 +265,12 @@ architecture arch of cpu is ALU_OP_SXT, ALU_OP_DECADJUST, ALU_OP_ASCIIADJUST, + ALU_OP_SET1, + ALU_OP_CLR1, + ALU_OP_NOT1, + ALU_OP_TEST1, + ALU_OP_ROR4, + ALU_OP_ROL4, ALU_OP_NOTHING ); @@ -761,15 +796,25 @@ begin consumePrefetch <= 1; case (prefetchBuffer(15 downto 8)) is -- TEST1 - when x"10" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; + when x"10" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_NOP; aluop <= ALU_OP_TEST1; opsize <= 1; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; + when x"11" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_NOP; aluop <= ALU_OP_TEST1; opsize <= 2; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; + when x"18" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_NOP; aluop <= ALU_OP_TEST1; opsize <= 1; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; + when x"19" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_NOP; aluop <= ALU_OP_TEST1; opsize <= 2; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; -- CLR1 - when x"12" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; + when x"12" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_CLR1; opsize <= 1; useAluResult <= '1'; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"13" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_CLR1; opsize <= 2; useAluResult <= '1'; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"1a" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_CLR1; opsize <= 1; useAluResult <= '1'; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"1b" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_CLR1; opsize <= 2; useAluResult <= '1'; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; -- SET1 - when x"15" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; + when x"14" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_SET1; opsize <= 1; useAluResult <= '1'; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"15" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_SET1; opsize <= 2; useAluResult <= '1'; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"1c" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_SET1; opsize <= 1; useAluResult <= '1'; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"1d" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_SET1; opsize <= 2; useAluResult <= '1'; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; -- NOT1 - when x"16" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; - -- NOT1 - when x"17" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; + when x"16" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_NOT1; opsize <= 1; useAluResult <= '1'; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"17" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_NOT1; opsize <= 2; useAluResult <= '1'; source2 <= OPSOURCE_REG_cx; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"1e" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_NOT1; opsize <= 1; useAluResult <= '1'; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; + when x"1f" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_NOT1; opsize <= 2; useAluResult <= '1'; source2 <= OPSOURCE_FETCHVALUE8; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; -- ADD4S when x"20" => cpustage <= CPUSTAGE_EXECUTE; opcode <= OP_BCDSTRING; bcdOp <= BCD_OP_ADD; bcdOffset <= (others => '0'); regs.FlagCar <= '0'; regs.FlagZer <= '1'; -- SUB4S @@ -777,9 +822,9 @@ begin -- CMP4S when x"26" => cpustage <= CPUSTAGE_EXECUTE; opcode <= OP_BCDSTRING; bcdOp <= BCD_OP_CMP; bcdOffset <= (others => '0'); regs.FlagCar <= '0'; regs.FlagZer <= '1'; -- ROL4 - when x"28" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; + when x"28" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_ROL4; opsize <= 1; useAluResult <= '1'; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; -- ROR4 - when x"2a" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; + when x"2a" => cpustage <= CPUSTAGE_MODRM; opcode <= OP_MOVMEM; aluop <= ALU_OP_ROR4; opsize <= 1; useAluResult <= '1'; source1 <= OPSOURCE_MEM; optarget <= OPTARGET_MEM; -- INS when x"31" => cpustage <= CPUSTAGE_IDLE; cpu_done <= '1'; halt <= '1'; -- EXT @@ -844,7 +889,7 @@ begin when x"36" => prefixSegmentSS <= '1'; isPrefix := '1'; irqBlocked <= '1'; usePrefix := '1'; cpu_done <= '1'; newBuf := dbuf + 1; cpustage <= CPUSTAGE_IDLE; - when x"37" => opcode <= OP_MOVREG; aluop <= ALU_OP_ASCIIADJUST; useAluResult <= '1'; newDelay := 8; opsize <= 1; cpustage <= CPUSTAGE_EXECUTE; target_decode <= CPU_REG_ax; optarget <= OPTARGET_DECODE; adjustNegate <= '0'; + when x"37" => opcode <= OP_MOVREG; aluop <= ALU_OP_ASCIIADJUST; useAluResult <= '1'; newDelay := 8; opsize <= 2; cpustage <= CPUSTAGE_EXECUTE; target_decode <= CPU_REG_ax; optarget <= OPTARGET_DECODE; adjustNegate <= '0'; when x"38" => opcode <= OP_NOP; aluop <= ALU_OP_CMP; opsize <= 1; source1 <= OPSOURCE_MEM; source2 <= OPSOURCE_MODRM_REG; cpustage <= CPUSTAGE_MODRM; when x"39" => opcode <= OP_NOP; aluop <= ALU_OP_CMP; opsize <= 2; source1 <= OPSOURCE_MEM; source2 <= OPSOURCE_MODRM_REG; cpustage <= CPUSTAGE_MODRM; @@ -855,7 +900,7 @@ begin when x"3E" => prefixSegmentDS <= '1'; isPrefix := '1'; irqBlocked <= '1'; usePrefix := '1'; cpu_done <= '1'; newBuf := dbuf + 1; cpustage <= CPUSTAGE_IDLE; - when x"3F" => opcode <= OP_MOVREG; aluop <= ALU_OP_ASCIIADJUST; useAluResult <= '1'; newDelay := 8; opsize <= 1; cpustage <= CPUSTAGE_EXECUTE; target_decode <= CPU_REG_ax; optarget <= OPTARGET_DECODE; adjustNegate <= '1'; + when x"3F" => opcode <= OP_MOVREG; aluop <= ALU_OP_ASCIIADJUST; useAluResult <= '1'; newDelay := 8; opsize <= 2; cpustage <= CPUSTAGE_EXECUTE; target_decode <= CPU_REG_ax; optarget <= OPTARGET_DECODE; adjustNegate <= '1'; when x"40" => opcode <= OP_MOVREG; cpustage <= CPUSTAGE_EXECUTE; aluop <= ALU_OP_INC; source1 <= OPSOURCE_REG_ax; source2 <= OPSOURCE_IMMIDIATE; immidiate8 <= x"01"; target_decode <= CPU_REG_ax; optarget <= OPTARGET_DECODE; opsize <= 2; useAluResult <= '1'; when x"41" => opcode <= OP_MOVREG; cpustage <= CPUSTAGE_EXECUTE; aluop <= ALU_OP_INC; source1 <= OPSOURCE_REG_cx; source2 <= OPSOURCE_IMMIDIATE; immidiate8 <= x"01"; target_decode <= CPU_REG_cx; optarget <= OPTARGET_DECODE; opsize <= 2; useAluResult <= '1'; @@ -1133,313 +1178,300 @@ begin -- #################################################################################### when CPUSTAGE_MODRM => - - regs.reg_ip <= regs.reg_ip + 1; - consumePrefetch <= 1; - MODRM_mem := unsigned(prefetchBuffer(2 downto 0)); - MODRM_reg := unsigned(prefetchBuffer(5 downto 3)); - MODRM_mod := unsigned(prefetchBuffer(7 downto 6)); - - if (opcodebyte = x"8E" and MODRM_reg = 3) then irqBlocked <= '1'; end if; - - newModDelay := delay; - - if (MODRM_mod = 0 and MODRM_mem = 6) then - if (SLOWTIMING = '1') then newModDelay := newModDelay + 1; end if; - consumePrefetch <= 3; - regs.reg_ip <= regs.reg_ip + 3; - memAddr <= unsigned(prefetchBuffer(23 downto 8)); - else - varmemaddr := x"0000"; - case (to_integer(MODRM_mem)) is - when 0 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_bx + regs.reg_si; - when 1 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_bx + regs.reg_di; - when 2 => memSegment <= regs.reg_ss; varmemaddr := regs.reg_bp + regs.reg_si; - when 3 => memSegment <= regs.reg_ss; varmemaddr := regs.reg_bp + regs.reg_di; - when 4 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_si; - when 5 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_di; - when 6 => memSegment <= regs.reg_ss; varmemaddr := regs.reg_bp; - when 7 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_bx; - when others => null; - end case; - if (MODRM_mod = 1) then - if (SLOWTIMING = '1') then newModDelay := newModDelay + 1; end if; - consumePrefetch <= 2; - regs.reg_ip <= regs.reg_ip + 2; - varmemaddr := to_unsigned(to_integer(varmemaddr) + to_integer(signed(prefetchBuffer(15 downto 8))), 16); - elsif (MODRM_mod = 2) then + if (consumePrefetch = 0) then + regs.reg_ip <= regs.reg_ip + 1; + consumePrefetch <= 1; + MODRM_mem := unsigned(prefetchBuffer(2 downto 0)); + MODRM_reg := unsigned(prefetchBuffer(5 downto 3)); + MODRM_mod := unsigned(prefetchBuffer(7 downto 6)); + + if (opcodebyte = x"8E" and MODRM_reg = 3) then irqBlocked <= '1'; end if; + + newModDelay := delay; + + if (MODRM_mod = 0 and MODRM_mem = 6) then if (SLOWTIMING = '1') then newModDelay := newModDelay + 1; end if; consumePrefetch <= 3; regs.reg_ip <= regs.reg_ip + 3; - varmemaddr := varmemaddr + unsigned(prefetchBuffer(23 downto 8)); - end if; - memaddr <= varmemaddr; - end if; - - -- set target reg - varoptarget := optarget; - varsource1 := source1; - varsource2 := source2; - vartarget_reg := CPU_REG_NONE; - varpushlist := pushlist; - if (segmentaccess = '1') then - case (to_integer(MODRM_reg(1 downto 0))) is - when 0 => vartarget_reg := CPU_REG_es; - when 1 => vartarget_reg := CPU_REG_cs; - when 2 => vartarget_reg := CPU_REG_ss; - when 3 => vartarget_reg := CPU_REG_ds; - when others => null; - end case; - else - if (opsize = 1) then - case (to_integer(MODRM_reg)) is - when 0 => vartarget_reg := CPU_REG_al; - when 1 => vartarget_reg := CPU_REG_cl; - when 2 => vartarget_reg := CPU_REG_dl; - when 3 => vartarget_reg := CPU_REG_bl; - when 4 => vartarget_reg := CPU_REG_ah; - when 5 => vartarget_reg := CPU_REG_ch; - when 6 => vartarget_reg := CPU_REG_dh; - when 7 => vartarget_reg := CPU_REG_bh; - when others => null; - end case; - elsif (opsize = 2) then - case (to_integer(MODRM_reg)) is - when 0 => vartarget_reg := CPU_REG_ax; - when 1 => vartarget_reg := CPU_REG_cx; - when 2 => vartarget_reg := CPU_REG_dx; - when 3 => vartarget_reg := CPU_REG_bx; - when 4 => vartarget_reg := CPU_REG_sp; - when 5 => vartarget_reg := CPU_REG_bp; - when 6 => vartarget_reg := CPU_REG_si; - when 7 => vartarget_reg := CPU_REG_di; - when others => null; - end case; - end if; - end if; - target_reg <= vartarget_reg; - - -- get reg - if (segmentaccess = '1') then - case (to_integer(MODRM_reg(1 downto 0))) is - when 0 => MODRM_value_reg <= regs.reg_es; - when 1 => MODRM_value_reg <= regs.reg_cs; - when 2 => MODRM_value_reg <= regs.reg_ss; - when 3 => MODRM_value_reg <= regs.reg_ds; - when others => null; - end case; - else - if (opsize = 1) then - case (to_integer(MODRM_reg)) is - when 0 => MODRM_value_reg <= x"00" & regs.reg_ax( 7 downto 0); - when 1 => MODRM_value_reg <= x"00" & regs.reg_cx( 7 downto 0); - when 2 => MODRM_value_reg <= x"00" & regs.reg_dx( 7 downto 0); - when 3 => MODRM_value_reg <= x"00" & regs.reg_bx( 7 downto 0); - when 4 => MODRM_value_reg <= x"00" & regs.reg_ax(15 downto 8); - when 5 => MODRM_value_reg <= x"00" & regs.reg_cx(15 downto 8); - when 6 => MODRM_value_reg <= x"00" & regs.reg_dx(15 downto 8); - when 7 => MODRM_value_reg <= x"00" & regs.reg_bx(15 downto 8); - when others => null; - end case; - elsif (opsize = 2) then - case (to_integer(MODRM_reg)) is - when 0 => MODRM_value_reg <= regs.reg_ax; - when 1 => MODRM_value_reg <= regs.reg_cx; - when 2 => MODRM_value_reg <= regs.reg_dx; - when 3 => MODRM_value_reg <= regs.reg_bx; - when 4 => MODRM_value_reg <= regs.reg_sp; - when 5 => MODRM_value_reg <= regs.reg_bp; - when 6 => MODRM_value_reg <= regs.reg_si; - when 7 => MODRM_value_reg <= regs.reg_di; - when others => null; - end case; - end if; - end if; - - -- second decode - case (opcode) is - when OP_MEMIMM1 => - opcode <= OP_MOVMEM; - case (to_integer(MODRM_reg)) is - when 0 => aluop <= ALU_OP_ADD; - when 1 => aluop <= ALU_OP_OR; - when 2 => aluop <= ALU_OP_ADC; - when 3 => aluop <= ALU_OP_SBB; - when 4 => aluop <= ALU_OP_AND; - when 5 => aluop <= ALU_OP_SUB; - when 6 => aluop <= ALU_OP_XOR; - when 7 => aluop <= ALU_OP_CMP; opcode <= OP_NOP; - when others => null; - end case; - - when OP_MEMIMM2 => - opcode <= OP_MOVMEM; - case (to_integer(MODRM_reg)) is - when 0 => aluop <= ALU_OP_ROL; - when 1 => aluop <= ALU_OP_ROR; - when 2 => aluop <= ALU_OP_RCL; - when 3 => aluop <= ALU_OP_RCR; - when 4 => aluop <= ALU_OP_SHL; - when 5 => aluop <= ALU_OP_SHR; - when 6 => aluop <= ALU_OP_SAL; - when 7 => aluop <= ALU_OP_SAR; - when others => null; - end case; - - when OP_MEMIMM3 => - case (to_integer(MODRM_reg)) is - when 0 | 1 => - opcode <= OP_NOP; aluop <= ALU_OP_TST; - if (opsize = 2) then varsource2 := OPSOURCE_FETCHVALUE16; else varsource2 := OPSOURCE_FETCHVALUE8; end if; - dbuf <= dbuf + 1; - when 2 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_NOT; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; - when 3 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_NEG; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; - when 4 => opcode <= OP_NOP; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; aluop <= ALU_OP_MUL; useAluResult <= '1'; newModDelay := newModDelay + 2; - when 5 => opcode <= OP_NOP; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; aluop <= ALU_OP_MULI; useAluResult <= '1'; newModDelay := newModDelay + 2; - when 6 => opcode <= OP_DIV; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; - if (opsize = 1) then newModDelay := newModDelay + 2; else newModDelay := newModDelay + 11; end if; - when 7 => opcode <= OP_DIVI; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; - if (opsize = 1) then newModDelay := newModDelay + 4; else newModDelay := newModDelay + 12; end if; - when others => null; - end case; - - when OP_MEMIMM4 => - case (to_integer(MODRM_reg)) is - when 0 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_INC; varsource2 := OPSOURCE_IMMIDIATE; immidiate8 <= x"01"; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; - when 1 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_DEC; varsource2 := OPSOURCE_IMMIDIATE; immidiate8 <= x"01"; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; - when 2 => opcode <= OP_JUMPABS; newModDelay := newModDelay + 1; varpushlist := REGPOS_ip; - when 3 => opcode <= OP_JUMPFAR; varsource2 := OPSOURCE_MEM; varpushlist := REGPOS_cs or REGPOS_ip; newModDelay := newModDelay + 6; - when 4 => opcode <= OP_JUMPABS; newModDelay := newModDelay + 1; - when 5 => opcode <= OP_JUMPFAR; varsource2 := OPSOURCE_MEM; newModDelay := newModDelay + 6; - when 6 | 7 => opcode <= OP_NOP; varpushlist := REGPOS_mem; dbuf <= dbuf + 1; - when others => null; - end case; - - when others => null; - - end case; - - varfetchedSource1 := fetchedSource1; - varfetchedSource2 := fetchedSource2; - - --set target mem - if (varoptarget = OPTARGET_MEM and MODRM_mod = 3) then - target_reg2 <= vartarget_reg; - varoptarget := OPTARGET_MODRM_REG; - opcode <= OP_MOVREG; - if (opcodebyte = x"8F") then --special case: PopMem - opcode <= OP_NOP; - end if; - if (opcode = OP_MEMIMM1 and to_integer(MODRM_reg) = 7) then -- special case: CMP - opcode <= OP_NOP; - end if; - if (opsize = 1) then + memAddr <= unsigned(prefetchBuffer(23 downto 8)); + else + varmemaddr := x"0000"; case (to_integer(MODRM_mem)) is - when 0 => target_reg <= CPU_REG_al; - when 1 => target_reg <= CPU_REG_cl; - when 2 => target_reg <= CPU_REG_dl; - when 3 => target_reg <= CPU_REG_bl; - when 4 => target_reg <= CPU_REG_ah; - when 5 => target_reg <= CPU_REG_ch; - when 6 => target_reg <= CPU_REG_dh; - when 7 => target_reg <= CPU_REG_bh; + when 0 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_bx + regs.reg_si; + when 1 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_bx + regs.reg_di; + when 2 => memSegment <= regs.reg_ss; varmemaddr := regs.reg_bp + regs.reg_si; + when 3 => memSegment <= regs.reg_ss; varmemaddr := regs.reg_bp + regs.reg_di; + when 4 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_si; + when 5 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_di; + when 6 => memSegment <= regs.reg_ss; varmemaddr := regs.reg_bp; + when 7 => memSegment <= regs.reg_ds; varmemaddr := regs.reg_bx; when others => null; end case; - elsif (opsize = 2) then - case (to_integer(MODRM_mem)) is - when 0 => target_reg <= CPU_REG_ax; - when 1 => target_reg <= CPU_REG_cx; - when 2 => target_reg <= CPU_REG_dx; - when 3 => target_reg <= CPU_REG_bx; - when 4 => target_reg <= CPU_REG_sp; - when 5 => target_reg <= CPU_REG_bp; - when 6 => target_reg <= CPU_REG_si; - when 7 => target_reg <= CPU_REG_di; - when others => null; - end case; - end if; - - if (opcode = OP_MEMIMM1) then - varfetchedSource2 := '1'; - if (source2 = OPSOURCE_FETCHVALUE8) then - if (opsign = '1') then - fetch2Val <= unsigned(resize(signed(prefetchBuffer(15 downto 8)), 16)); - else - fetch2Val <= x"00" & unsigned(prefetchBuffer(15 downto 8)); - end if; + if (MODRM_mod = 1) then + if (SLOWTIMING = '1') then newModDelay := newModDelay + 1; end if; consumePrefetch <= 2; regs.reg_ip <= regs.reg_ip + 2; - else - fetch2Val <= unsigned(prefetchBuffer(23 downto 8)); + varmemaddr := to_unsigned(to_integer(varmemaddr) + to_integer(signed(prefetchBuffer(15 downto 8))), 16); + elsif (MODRM_mod = 2) then + if (SLOWTIMING = '1') then newModDelay := newModDelay + 1; end if; consumePrefetch <= 3; regs.reg_ip <= regs.reg_ip + 3; + varmemaddr := varmemaddr + unsigned(prefetchBuffer(23 downto 8)); + end if; + memaddr <= varmemaddr; + end if; + + -- set target reg + varoptarget := optarget; + varsource1 := source1; + varsource2 := source2; + vartarget_reg := CPU_REG_NONE; + varpushlist := pushlist; + if (segmentaccess = '1') then + case (to_integer(MODRM_reg(1 downto 0))) is + when 0 => vartarget_reg := CPU_REG_es; + when 1 => vartarget_reg := CPU_REG_cs; + when 2 => vartarget_reg := CPU_REG_ss; + when 3 => vartarget_reg := CPU_REG_ds; + when others => null; + end case; + else + if (opsize = 1) then + case (to_integer(MODRM_reg)) is + when 0 => vartarget_reg := CPU_REG_al; + when 1 => vartarget_reg := CPU_REG_cl; + when 2 => vartarget_reg := CPU_REG_dl; + when 3 => vartarget_reg := CPU_REG_bl; + when 4 => vartarget_reg := CPU_REG_ah; + when 5 => vartarget_reg := CPU_REG_ch; + when 6 => vartarget_reg := CPU_REG_dh; + when 7 => vartarget_reg := CPU_REG_bh; + when others => null; + end case; + elsif (opsize = 2) then + case (to_integer(MODRM_reg)) is + when 0 => vartarget_reg := CPU_REG_ax; + when 1 => vartarget_reg := CPU_REG_cx; + when 2 => vartarget_reg := CPU_REG_dx; + when 3 => vartarget_reg := CPU_REG_bx; + when 4 => vartarget_reg := CPU_REG_sp; + when 5 => vartarget_reg := CPU_REG_bp; + when 6 => vartarget_reg := CPU_REG_si; + when 7 => vartarget_reg := CPU_REG_di; + when others => null; + end case; + end if; + end if; + target_reg <= vartarget_reg; + + -- get reg + if (segmentaccess = '1') then + case (to_integer(MODRM_reg(1 downto 0))) is + when 0 => MODRM_value_reg <= regs.reg_es; + when 1 => MODRM_value_reg <= regs.reg_cs; + when 2 => MODRM_value_reg <= regs.reg_ss; + when 3 => MODRM_value_reg <= regs.reg_ds; + when others => null; + end case; + else + if (opsize = 1) then + case (to_integer(MODRM_reg)) is + when 0 => MODRM_value_reg <= x"00" & regs.reg_ax( 7 downto 0); + when 1 => MODRM_value_reg <= x"00" & regs.reg_cx( 7 downto 0); + when 2 => MODRM_value_reg <= x"00" & regs.reg_dx( 7 downto 0); + when 3 => MODRM_value_reg <= x"00" & regs.reg_bx( 7 downto 0); + when 4 => MODRM_value_reg <= x"00" & regs.reg_ax(15 downto 8); + when 5 => MODRM_value_reg <= x"00" & regs.reg_cx(15 downto 8); + when 6 => MODRM_value_reg <= x"00" & regs.reg_dx(15 downto 8); + when 7 => MODRM_value_reg <= x"00" & regs.reg_bx(15 downto 8); + when others => null; + end case; + elsif (opsize = 2) then + case (to_integer(MODRM_reg)) is + when 0 => MODRM_value_reg <= regs.reg_ax; + when 1 => MODRM_value_reg <= regs.reg_cx; + when 2 => MODRM_value_reg <= regs.reg_dx; + when 3 => MODRM_value_reg <= regs.reg_bx; + when 4 => MODRM_value_reg <= regs.reg_sp; + when 5 => MODRM_value_reg <= regs.reg_bp; + when 6 => MODRM_value_reg <= regs.reg_si; + when 7 => MODRM_value_reg <= regs.reg_di; + when others => null; + end case; end if; end if; - end if; - - optarget <= varoptarget; + -- second decode + case (opcode) is + when OP_MEMIMM1 => + opcode <= OP_MOVMEM; + case (to_integer(MODRM_reg)) is + when 0 => aluop <= ALU_OP_ADD; + when 1 => aluop <= ALU_OP_OR; + when 2 => aluop <= ALU_OP_ADC; + when 3 => aluop <= ALU_OP_SBB; + when 4 => aluop <= ALU_OP_AND; + when 5 => aluop <= ALU_OP_SUB; + when 6 => aluop <= ALU_OP_XOR; + when 7 => aluop <= ALU_OP_CMP; opcode <= OP_NOP; + when others => null; + end case; + + when OP_MEMIMM2 => + opcode <= OP_MOVMEM; + case (to_integer(MODRM_reg)) is + when 0 => aluop <= ALU_OP_ROL; + when 1 => aluop <= ALU_OP_ROR; + when 2 => aluop <= ALU_OP_RCL; + when 3 => aluop <= ALU_OP_RCR; + when 4 => aluop <= ALU_OP_SHL; + when 5 => aluop <= ALU_OP_SHR; + when 6 => aluop <= ALU_OP_SAL; + when 7 => aluop <= ALU_OP_SAR; + when others => null; + end case; + + when OP_MEMIMM3 => + case (to_integer(MODRM_reg)) is + when 0 | 1 => + opcode <= OP_NOP; aluop <= ALU_OP_TST; + if (opsize = 2) then varsource2 := OPSOURCE_FETCHVALUE16; else varsource2 := OPSOURCE_FETCHVALUE8; end if; + dbuf <= dbuf + 1; + when 2 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_NOT; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; + when 3 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_NEG; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; + when 4 => opcode <= OP_NOP; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; aluop <= ALU_OP_MUL; useAluResult <= '1'; newModDelay := newModDelay + 2; + when 5 => opcode <= OP_NOP; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; aluop <= ALU_OP_MULI; useAluResult <= '1'; newModDelay := newModDelay + 2; + when 6 => opcode <= OP_DIV; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; + if (opsize = 1) then newModDelay := newModDelay + 2; else newModDelay := newModDelay + 11; end if; + when 7 => opcode <= OP_DIVI; varsource1 := OPSOURCE_ACC; varsource2 := OPSOURCE_MEM; + if (opsize = 1) then newModDelay := newModDelay + 4; else newModDelay := newModDelay + 12; end if; + when others => null; + end case; + + when OP_MEMIMM4 => + case (to_integer(MODRM_reg)) is + when 0 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_INC; varsource2 := OPSOURCE_IMMIDIATE; immidiate8 <= x"01"; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; + when 1 => opcode <= OP_MOVMEM; varoptarget := OPTARGET_MEM; aluop <= ALU_OP_DEC; varsource2 := OPSOURCE_IMMIDIATE; immidiate8 <= x"01"; useAluResult <= '1'; if (MODRM_mod /= 3) then newModDelay := newModDelay + 1; end if; + when 2 => opcode <= OP_JUMPABS; newModDelay := newModDelay + 1; varpushlist := REGPOS_ip; + when 3 => opcode <= OP_JUMPFAR; varsource2 := OPSOURCE_MEM; varpushlist := REGPOS_cs or REGPOS_ip; newModDelay := newModDelay + 6; + when 4 => opcode <= OP_JUMPABS; newModDelay := newModDelay + 1; + when 5 => opcode <= OP_JUMPFAR; varsource2 := OPSOURCE_MEM; newModDelay := newModDelay + 6; + when 6 | 7 => opcode <= OP_NOP; varpushlist := REGPOS_mem; dbuf <= dbuf + 1; + when others => null; + end case; + + when others => null; - - -- instant fetching if memory access degrades to register access - fetchedRMMODData := x"0000"; - if (opsize = 1) then - case (to_integer(MODRM_mem)) is - when 0 => fetchedRMMODData := x"00" & regs.reg_ax( 7 downto 0); - when 1 => fetchedRMMODData := x"00" & regs.reg_cx( 7 downto 0); - when 2 => fetchedRMMODData := x"00" & regs.reg_dx( 7 downto 0); - when 3 => fetchedRMMODData := x"00" & regs.reg_bx( 7 downto 0); - when 4 => fetchedRMMODData := x"00" & regs.reg_ax(15 downto 8); - when 5 => fetchedRMMODData := x"00" & regs.reg_cx(15 downto 8); - when 6 => fetchedRMMODData := x"00" & regs.reg_dx(15 downto 8); - when 7 => fetchedRMMODData := x"00" & regs.reg_bx(15 downto 8); - when others => null; end case; - elsif (opsize = 2) then - case (to_integer(MODRM_mem)) is - when 0 => fetchedRMMODData := regs.reg_ax; - when 1 => fetchedRMMODData := regs.reg_cx; - when 2 => fetchedRMMODData := regs.reg_dx; - when 3 => fetchedRMMODData := regs.reg_bx; - when 4 => fetchedRMMODData := regs.reg_sp; - when 5 => fetchedRMMODData := regs.reg_bp; - when 6 => fetchedRMMODData := regs.reg_si; - when 7 => fetchedRMMODData := regs.reg_di; - when others => null; - end case; - end if; - if (varsource1 = OPSOURCE_MEM and MODRM_mod = 3) then varfetchedSource1 := '1'; memFetchValue1 <= fetchedRMMODData; end if; - if (varsource2 = OPSOURCE_MEM and MODRM_mod = 3) then varfetchedSource2 := '1'; memFetchValue2 <= fetchedRMMODData; end if; + varfetchedSource1 := fetchedSource1; + varfetchedSource2 := fetchedSource2; + + --set target mem + if (varoptarget = OPTARGET_MEM and MODRM_mod = 3) then + target_reg2 <= vartarget_reg; + varoptarget := OPTARGET_MODRM_REG; + opcode <= OP_MOVREG; + if (opcodebyte = x"8F") then --special case: PopMem + opcode <= OP_NOP; + end if; + if (opcode = OP_MEMIMM1 and to_integer(MODRM_reg) = 7) then -- special case: CMP + opcode <= OP_NOP; + end if; + if (opsize = 1) then + case (to_integer(MODRM_mem)) is + when 0 => target_reg <= CPU_REG_al; + when 1 => target_reg <= CPU_REG_cl; + when 2 => target_reg <= CPU_REG_dl; + when 3 => target_reg <= CPU_REG_bl; + when 4 => target_reg <= CPU_REG_ah; + when 5 => target_reg <= CPU_REG_ch; + when 6 => target_reg <= CPU_REG_dh; + when 7 => target_reg <= CPU_REG_bh; + when others => null; + end case; + elsif (opsize = 2) then + case (to_integer(MODRM_mem)) is + when 0 => target_reg <= CPU_REG_ax; + when 1 => target_reg <= CPU_REG_cx; + when 2 => target_reg <= CPU_REG_dx; + when 3 => target_reg <= CPU_REG_bx; + when 4 => target_reg <= CPU_REG_sp; + when 5 => target_reg <= CPU_REG_bp; + when 6 => target_reg <= CPU_REG_si; + when 7 => target_reg <= CPU_REG_di; + when others => null; + end case; + end if; + + if (opcode = OP_MEMIMM1) then + varfetchedSource2 := '1'; + if (source2 = OPSOURCE_FETCHVALUE8) then + if (opsign = '1') then + fetch2Val <= unsigned(resize(signed(prefetchBuffer(15 downto 8)), 16)); + else + fetch2Val <= x"00" & unsigned(prefetchBuffer(15 downto 8)); + end if; + consumePrefetch <= 2; + regs.reg_ip <= regs.reg_ip + 2; + else + fetch2Val <= unsigned(prefetchBuffer(23 downto 8)); + consumePrefetch <= 3; + regs.reg_ip <= regs.reg_ip + 3; + end if; + end if; + + end if; + + optarget <= varoptarget; + + + -- instant fetching if memory access degrades to register access + fetchedRMMODData := x"0000"; + if (opsize = 1) then + case (to_integer(MODRM_mem)) is + when 0 => fetchedRMMODData := x"00" & regs.reg_ax( 7 downto 0); + when 1 => fetchedRMMODData := x"00" & regs.reg_cx( 7 downto 0); + when 2 => fetchedRMMODData := x"00" & regs.reg_dx( 7 downto 0); + when 3 => fetchedRMMODData := x"00" & regs.reg_bx( 7 downto 0); + when 4 => fetchedRMMODData := x"00" & regs.reg_ax(15 downto 8); + when 5 => fetchedRMMODData := x"00" & regs.reg_cx(15 downto 8); + when 6 => fetchedRMMODData := x"00" & regs.reg_dx(15 downto 8); + when 7 => fetchedRMMODData := x"00" & regs.reg_bx(15 downto 8); + when others => null; + end case; + elsif (opsize = 2) then + case (to_integer(MODRM_mem)) is + when 0 => fetchedRMMODData := regs.reg_ax; + when 1 => fetchedRMMODData := regs.reg_cx; + when 2 => fetchedRMMODData := regs.reg_dx; + when 3 => fetchedRMMODData := regs.reg_bx; + when 4 => fetchedRMMODData := regs.reg_sp; + when 5 => fetchedRMMODData := regs.reg_bp; + when 6 => fetchedRMMODData := regs.reg_si; + when 7 => fetchedRMMODData := regs.reg_di; + when others => null; + end case; + end if; + + if (varsource1 = OPSOURCE_MEM and MODRM_mod = 3) then varfetchedSource1 := '1'; memFetchValue1 <= fetchedRMMODData; end if; + if (varsource2 = OPSOURCE_MEM and MODRM_mod = 3) then varfetchedSource2 := '1'; memFetchValue2 <= fetchedRMMODData; end if; - source1 <= varsource1; - source2 <= varsource2; - - fetchedSource1 <= varfetchedSource1; - fetchedSource2 <= varfetchedSource2; - - pushlist <= varpushlist; + source1 <= varsource1; + source2 <= varsource2; + + fetchedSource1 <= varfetchedSource1; + fetchedSource2 <= varfetchedSource2; + + pushlist <= varpushlist; - delay <= newModDelay; - - if (turbo = '1') then - delay <= 0; - end if; - - -- same as CPUSTAGE_CHECKDATAREADY - if (varfetchedSource1 = '0' and varsource1 <= OPSOURCE_FETCHVALUE8 ) then cpustage <= CPUSTAGE_FETCHDATA1_8; - elsif (varfetchedSource1 = '0' and varsource1 <= OPSOURCE_FETCHVALUE16) then cpustage <= CPUSTAGE_FETCHDATA1_16; - elsif (varfetchedSource1 = '0' and varsource1 <= OPSOURCE_MEM ) then cpustage <= CPUSTAGE_FETCHMEM_REQ; - - elsif (varfetchedSource2 = '0' and varsource2 <= OPSOURCE_FETCHVALUE8 ) then cpustage <= CPUSTAGE_FETCHDATA2_8; - elsif (varfetchedSource2 = '0' and varsource2 <= OPSOURCE_FETCHVALUE16) then cpustage <= CPUSTAGE_FETCHDATA2_16; - elsif (varfetchedSource2 = '0' and varsource2 <= OPSOURCE_MEM ) then cpustage <= CPUSTAGE_FETCHMEM_REQ; - - elsif (varpushlist /= x"0000") then cpustage <= CPUSTAGE_PUSH; - elsif (poplist /= x"0000") then cpustage <= CPUSTAGE_POP_REQ; - - else cpustage <= CPUSTAGE_EXECUTE; - end if; + delay <= newModDelay; + + if (turbo = '1') then + delay <= 0; + end if; + cpustage <= CPUSTAGE_CHECKDATAREADY; + end if; -- consumePrefetch = 0 -- #################################################################################### -- ############################## Source 1 + 2 ######################################## @@ -1888,6 +1920,7 @@ begin when OPSOURCE_STRINGLOAD1 => source2Val := stringLoad; when OPSOURCE_STRINGLOAD2 => source2Val := stringLoad2; when OPSOURCE_IMMIDIATE => source2Val := x"00" & immidiate8; + when OPSOURCE_REG_cx => source2Val := regs.reg_cx; when others => null; end case; @@ -1910,6 +1943,48 @@ begin if (aluop /= ALU_OP_NOTHING) then case (aluop) is + when ALU_OP_SET1 => + if (opsize = 1) then + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(2 downto 0))); + else + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(3 downto 0))); + end if; + result := source1Val or op2value; + + when ALU_OP_CLR1 => + if (opsize = 1) then + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(2 downto 0))); + else + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(3 downto 0))); + end if; + result := source1Val and (not op2value); + + when ALU_OP_TEST1 => + if (opsize = 1) then + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(2 downto 0))); + else + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(3 downto 0))); + end if; + result := source1Val and op2value; + regs.FlagCar <= '0'; regs.FlagOvf <= '0'; regs.FlagHaC <= '0'; + newZero := '1'; newParity := '1'; newSign := '1'; + + when ALU_OP_NOT1 => + if (opsize = 1) then + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(2 downto 0))); + else + op2value := shift_left(to_unsigned(1, 16), to_integer(source2Val(3 downto 0))); + end if; + result := source1Val xor op2value; + + when ALU_OP_ROR4 => + result := x"00" & regs.reg_ax(3 downto 0) & source1Val(7 downto 4); + regs.reg_ax(7 downto 0) <= regs.reg_ax(7 downto 4) & source1Val(3 downto 0); + + when ALU_OP_ROL4 => + result := x"00" & source1Val(3 downto 0) & regs.reg_ax(3 downto 0); + regs.reg_ax(7 downto 0) <= regs.reg_ax(7 downto 4) & source1Val(7 downto 4); + when ALU_OP_AND | ALU_OP_TST => result := source1Val and source2Val; regs.FlagCar <= '0'; regs.FlagOvf <= '0'; regs.FlagHaC <= '0'; @@ -3042,21 +3117,9 @@ begin remainder => DIVremainder ); - cpu_export.reg_ax <= regs.reg_ax; - cpu_export.reg_cx <= regs.reg_cx; - cpu_export.reg_dx <= regs.reg_dx; - cpu_export.reg_bx <= regs.reg_bx; - cpu_export.reg_sp <= regs.reg_sp; - cpu_export.reg_bp <= regs.reg_bp; - cpu_export.reg_si <= regs.reg_si; - cpu_export.reg_di <= regs.reg_di; - cpu_export.reg_es <= regs.reg_es; - cpu_export.reg_cs <= regs.reg_cs; - cpu_export.reg_ss <= regs.reg_ss; - cpu_export.reg_ds <= regs.reg_ds; - cpu_export.reg_ip <= regs.reg_ip; - cpu_export.reg_f <= reg_f ; - cpu_export.opcodebyte_last <= opcodebyte; + cpu_export_reg_cs <= regs.reg_cs; + cpu_export_reg_ip <= regs.reg_ip; + cpu_export_opcode <= opcodebyte; end architecture;