From ab489a805d460cc4cbbb2dfdf8aa03147c2a1953 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 9 Jun 2019 18:11:21 +0200 Subject: [PATCH] New Release : Defender --- .../Defender/Defender_MiST.qpf | 31 + .../Defender/Defender_MiST.qsf | 203 + .../Defender/Defender_MiST.sdc | 137 + .../Defender/ReadMe.txt | 17 + .../{Snapshot => Release}/DEFENDER.ROM | Bin .../Defender/Release/Defender_MiST.rbf | Bin 0 -> 257326 bytes .../Defender/Snapshot/Defender_MiST.rbf | Bin 257149 -> 0 bytes .../Defender/clean.bat | 15 + .../Defender/rtl/Defender_MiST.sv | 260 + .../Defender/rtl/YM2149.sv | 329 + .../Defender/rtl/build_id.tcl | 35 + .../Defender/rtl/cpu09l_128.vhd | 5906 +++++++++++++++++ .../Defender/rtl/cpu68.vhd | 3963 +++++++++++ .../Defender/rtl/dac.vhd | 48 + .../Defender/rtl/data_io.v | 115 + .../Defender/rtl/defender.vhd | 800 +++ .../Defender/rtl/defender_cmos_ram.vhd | 163 + .../Defender/rtl/defender_decoder_2.vhd | 54 + .../Defender/rtl/defender_decoder_3.vhd | 54 + .../Defender/rtl/defender_prog.vhd | 1686 +++++ .../Defender/rtl/defender_sound.vhd | 150 + .../Defender/rtl/defender_sound_board.vhd | 186 + .../Defender/rtl/gen_ram.vhd | 84 + .../Defender/rtl/pia6821.vhd | 553 ++ .../Defender/rtl/pll_mist.ppf | 14 + .../Defender/rtl/pll_mist.qip | 4 + .../Defender/rtl/pll_mist.vhd | 461 ++ .../rtl/proms/defender_unzip/DEFENDER.ROM | Bin 0 -> 26624 bytes .../rtl/proms/defender_unzip/decoder.2 | Bin 0 -> 512 bytes .../rtl/proms/defender_unzip/decoder.3 | Bin 0 -> 512 bytes .../rtl/proms/defender_unzip/defend.1 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.10 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.11 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.12 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.2 | Bin 0 -> 4096 bytes .../rtl/proms/defender_unzip/defend.3 | Bin 0 -> 4096 bytes .../rtl/proms/defender_unzip/defend.4 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.6 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.7 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.8 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.9 | Bin 0 -> 2048 bytes .../rtl/proms/defender_unzip/defend.snd | Bin 0 -> 2048 bytes .../defender_unzip/make_defender_proms.bat | 7 + .../proms/defender_unzip/make_vhdl_prom.exe | Bin 0 -> 119861 bytes .../binaries/linux32/duplicate_byte | Bin 0 -> 7356 bytes .../binaries/linux32/make_vhdl_prom | Bin 0 -> 11712 bytes .../binaries/win32/duplicate_byte.exe | Bin 0 -> 97353 bytes .../binaries/win32/make_vhdl_prom.exe | Bin 0 -> 100636 bytes .../binaries/win64/duplicate_byte.exe | Bin 0 -> 117095 bytes .../binaries/win64/make_vhdl_prom.exe | Bin 0 -> 119861 bytes .../tools_prom_src/src/doc_compilation.txt | 28 + .../proms/tools_prom_src/src/duplicate_byte.c | 37 + .../proms/tools_prom_src/src/make_vhdl_prom.c | 83 + .../Defender/rtl/sdram.sv | 254 + 54 files changed, 15677 insertions(+) create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qpf create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qsf create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.sdc create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/ReadMe.txt rename Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/{Snapshot => Release}/DEFENDER.ROM (100%) create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Release/Defender_MiST.rbf delete mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Snapshot/Defender_MiST.rbf create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/clean.bat create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/Defender_MiST.sv create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/YM2149.sv create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/build_id.tcl create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu09l_128.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu68.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/dac.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/data_io.v create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_cmos_ram.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_2.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_3.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_prog.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound_board.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/gen_ram.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pia6821.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.ppf create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.qip create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.vhd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/DEFENDER.ROM create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/decoder.2 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/decoder.3 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.1 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.10 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.11 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.12 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.2 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.3 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.4 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.6 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.7 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.8 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.9 create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.snd create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_defender_proms.bat create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_vhdl_prom.exe create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/linux32/duplicate_byte create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/linux32/make_vhdl_prom create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win32/duplicate_byte.exe create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win32/make_vhdl_prom.exe create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win64/duplicate_byte.exe create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win64/make_vhdl_prom.exe create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/src/doc_compilation.txt create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/src/duplicate_byte.c create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/src/make_vhdl_prom.c create mode 100644 Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/sdram.sv diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qpf b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qpf new file mode 100644 index 00000000..020bef32 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2017 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel MegaCore Function License Agreement, or other +# applicable license agreement, including, without limitation, +# that your use is for the sole purpose of programming logic +# devices manufactured by Intel and sold by Intel or its +# authorized distributors. Please refer to the applicable +# agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 17.0.1 Build 598 06/07/2017 SJ Standard Edition +# Date created = 04:04:47 October 16, 2017 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "17.0" +DATE = "04:04:47 October 16, 2017" + +# Revisions + +PROJECT_REVISION = "Defender_MiST" diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qsf b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qsf new file mode 100644 index 00000000..3090fd9d --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.qsf @@ -0,0 +1,203 @@ +# -------------------------------------------------------------------------- # +# +# 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:04:04 June 09, 2019 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# Defender_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_CREATION_TIME_DATE "21:22:13 JUNE 04, 2019" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 13.1 +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 +set_global_assignment -name SMART_RECOMPILE ON +set_global_assignment -name SYSTEMVERILOG_FILE rtl/Defender_MiST.sv +set_global_assignment -name VHDL_FILE rtl/defender.vhd +set_global_assignment -name VHDL_FILE rtl/defender_sound_board.vhd +set_global_assignment -name VHDL_FILE rtl/defender_sound.vhd +set_global_assignment -name VHDL_FILE rtl/defender_decoder_3.vhd +set_global_assignment -name VHDL_FILE rtl/defender_decoder_2.vhd +set_global_assignment -name VHDL_FILE rtl/defender_cmos_ram.vhd +set_global_assignment -name SYSTEMVERILOG_FILE rtl/YM2149.sv +set_global_assignment -name VHDL_FILE rtl/pia6821.vhd +set_global_assignment -name VHDL_FILE rtl/cpu68.vhd +set_global_assignment -name VHDL_FILE rtl/cpu09l_128.vhd +set_global_assignment -name QIP_FILE rtl/pll_mist.qip +set_global_assignment -name VERILOG_FILE rtl/data_io.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv +set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd +set_global_assignment -name VHDL_FILE rtl/dac.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 PLL_1 -to "pll:pll|altpll:altpll_component" +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 +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL ON + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone III" +set_global_assignment -name TOP_LEVEL_ENTITY Defender_MiST +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 + +# 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 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 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_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" + +# Assembler Assignments +# ===================== +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name GENERATE_RBF_FILE ON + +# Power Estimation Assignments +# ============================ +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "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(Defender_MiST) + + # 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(Defender_MiST) +# ------------------------- +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.sdc b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.sdc new file mode 100644 index 00000000..fca44902 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Defender_MiST.sdc @@ -0,0 +1,137 @@ +## 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}] + +#************************************************************** +# 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 {pll|altpll_component|auto_generated|pll1|clk[0]}] -max 6.4 [get_ports SDRAM_DQ[*]] +set_input_delay -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -min 3.2 [get_ports SDRAM_DQ[*]] + +#************************************************************** +# Set Output Delay +#************************************************************** + +set_output_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DO}] +set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[1]}] 1.000 [get_ports {AUDIO_L}] +set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[1]}] 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_output_delay -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -max 1.5 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] +set_output_delay -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -min -0.8 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] +set_output_delay -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -max 1.5 [get_ports {SDRAM_CLK}] +set_output_delay -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -min -0.8 [get_ports {SDRAM_CLK}] + +#************************************************************** +# 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 2 +set_multicycle_path -to {VGA_*[*]} -hold 1 + +set_multicycle_path -from [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {pll|altpll_component|auto_generated|pll1|clk[1]}] -setup 2 +set_multicycle_path -from [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -to [get_clocks {pll|altpll_component|auto_generated|pll1|clk[1]}] -hold 1 + +#************************************************************** +# Set Maximum Delay +#************************************************************** + + + +#************************************************************** +# Set Minimum Delay +#************************************************************** + + + +#************************************************************** +# Set Input Transition +#************************************************************** + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/ReadMe.txt b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/ReadMe.txt new file mode 100644 index 00000000..5e7bd428 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/ReadMe.txt @@ -0,0 +1,17 @@ +Williams Defender + +Port to MiST + +DEFENDER.ROM is required at the root of the SD-Card. + + Fire = Fire or Space + Thrust = Fire2 or ALT + Smart Bomb = Fire3 or CTRL + Hyperspace = Fire4 or 1 + Change Direction = Left or Right + Up = Up + Down = Down + + Advance = A + Auto up = U + Score_reset = H \ No newline at end of file diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Snapshot/DEFENDER.ROM b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Release/DEFENDER.ROM similarity index 100% rename from Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Snapshot/DEFENDER.ROM rename to Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Release/DEFENDER.ROM diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Release/Defender_MiST.rbf b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Release/Defender_MiST.rbf new file mode 100644 index 0000000000000000000000000000000000000000..4a74ef9764c1b19160686a8cbb2f4cc2fa95cf2f GIT binary patch literal 257326 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 literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Snapshot/Defender_MiST.rbf b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/Snapshot/Defender_MiST.rbf deleted file mode 100644 index c939836a2a114acdb70e378028eb236dd87d5887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257149 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 wiG<9FArr+qhM0GQGEg}Z> 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 OB*42SfVnonF}m5DW%=3nET*_V*9ROBU)3% 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 QGICRv*$>9%4o?k!1CO+)qW}N^ diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/clean.bat b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/clean.bat new file mode 100644 index 00000000..c9a2cb06 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/clean.bat @@ -0,0 +1,15 @@ +@echo off +del /s *.bak +del /s *.orig +del /s *.rej +rmdir /s /q db +rmdir /s /q incremental_db +rmdir /s /q output +rmdir /s /q simulation +rmdir /s /q greybox_tmp +del PLLJ_PLLSPE_INFO.txt +del *.qws +del *.ppf +del *.qip +del *.ddb +pause diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/Defender_MiST.sv b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/Defender_MiST.sv new file mode 100644 index 00000000..2b4d29f5 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/Defender_MiST.sv @@ -0,0 +1,260 @@ +//============================================================================ +// Arcade: Defender +// + +module Defender_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, + + 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" + +localparam CONF_STR = { + "DEFENDER;;", + "O34,Scanlines,Off,25%,50%,75%;", + "T6,Reset;", + "V,v1.0.0",`BUILD_DATE +}; + +assign LED = 1; + +wire clk_sys, clock_6, clock_1p79, clock_0p89; +wire pll_locked; +pll_mist pll( + .inclk0(CLOCK_27), + .areset(0), + .c0(clk_sys),//36 + .c1(clock_6),//6 + .c2(clock_1p79),//1.79 + .c3(clock_0p89),//0.89 + .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 [10:0] ps2_key; +wire [7:0] audio; +wire hs, vs; +wire blankn; +wire [2:0] g,b; +wire [1:0] r; + +wire [14:0] cart_addr; +wire [15:0] sdram_do; +wire cart_rd; +wire ioctl_downl; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; + +data_io data_io ( + .clk_sys ( clk_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 ) +); + +assign SDRAM_CLK = clk_sys; + +sdram cart +( + .*, + .init ( ~pll_locked ), + .clk ( clk_sys ), + .wtbt ( 2'b00 ), + .dout ( sdram_do ), + .din ( {ioctl_dout, ioctl_dout} ), + .addr ( ioctl_downl ? ioctl_addr : cart_addr ), + .we ( ioctl_downl & ioctl_wr ), + .rd ( !ioctl_downl), + .ready() +); + +reg reset = 1; +reg rom_loaded = 0; +always @(posedge clk_sys) begin + reg ioctl_downlD; + ioctl_downlD <= ioctl_downl; + + if (ioctl_downlD & ~ioctl_downl) rom_loaded <= 1; + reset <= status[0] | buttons[1] | status[6] | ~rom_loaded; +end + +defender defender ( + .clock_6 (clock_6), + .clk_1p79 (clock_1p79), + .clk_0p89 (clock_0p89), + .reset ( reset ), + + .video_r ( r ), + .video_g ( g ), + .video_b ( b ), + .video_hs ( hs ), + .video_vs ( vs ), + .video_blankn ( blankn ), + + .audio_out ( audio ), + + .roms_addr ( cart_addr ), + .roms_do ( sdram_do[7:0] ), + + .btn_two_players ( btn_two_players ), + .btn_one_player ( btn_one_player ), + .btn_left_coin ( btn_coin ), + + .btn_auto_up(btn_auto_up), + .btn_advance(btn_advance), + .btn_high_score_reset(btn_score_reset), + + + .btn_fire(m_fire1), + .btn_thrust(m_fire2), + .btn_smart_bomb(m_fire3), + .btn_hyperSpace(m_fire4), + .btn_reverse(m_left | m_right), + .btn_down(m_down), + .btn_up(m_up), + + .sw_coktail_table(1) +); + +mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video( + .clk_sys ( clk_sys ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS3 ( SPI_SS3 ), + .SPI_DI ( SPI_DI ), + .R ( blankn ? {r, r[1] } : 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 ), + .rotate ( {1'b1,status[2]} ), + .scandoubler_disable( scandoublerD ), + .scanlines ( status[4:3] ), + .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 ) + ); + +wire dac_o; +assign AUDIO_L = dac_o; +assign AUDIO_R = dac_o; + +dac #( + .C_bits(15)) +dac( + .clk_i(clk_sys), + .res_n_i(1), + .dac_i({audio,audio}), + .dac_o(dac_o) + ); + +wire m_up = btn_up | joystick_0[3] | joystick_1[3]; +wire m_down = btn_down | joystick_0[2] | joystick_1[2]; +wire m_left = btn_left | joystick_0[1] | joystick_1[1]; +wire m_right = btn_right | joystick_0[0] | joystick_1[0]; +wire m_fire1 = btn_fire1 | joystick_0[4] | joystick_1[4]; +wire m_fire2 = btn_fire2 | joystick_0[5] | joystick_1[5]; +wire m_fire3 = btn_fire3 | joystick_0[6] | joystick_1[6]; +wire m_fire4 = btn_fire4 | joystick_0[7] | joystick_1[7]; + +reg btn_one_player = 0; +reg btn_two_players = 0; +reg btn_left = 0; +reg btn_right = 0; +reg btn_down = 0; +reg btn_up = 0; +reg btn_fire1 = 0; +reg btn_fire2 = 0; +reg btn_fire3 = 0; +reg btn_fire4 = 0; +reg btn_coin = 0; +reg btn_advance = 0; +reg btn_auto_up = 0; +reg btn_score_reset = 0; +wire key_pressed; +wire [7:0] key_code; +wire key_strobe; + +always @(posedge clk_sys) begin + if(key_strobe) begin + case(key_code) + 'h75: btn_up <= key_pressed; // up + 'h72: btn_down <= key_pressed; // down + 'h6B: btn_left <= key_pressed; // left + 'h74: btn_right <= key_pressed; // right + 'h76: btn_coin <= key_pressed; // ESC + 'h05: btn_one_player <= key_pressed; // F1 + 'h06: btn_two_players <= key_pressed; // F2 + 'h12: btn_fire4 <= key_pressed; // l shift + 'h14: btn_fire3 <= key_pressed; // ctrl + 'h11: btn_fire2 <= key_pressed; // alt + 'h29: btn_fire1 <= key_pressed; // Space + 'h1C: btn_advance <= key_pressed; // A + 'h3C: btn_auto_up <= key_pressed; // U + 'h33: btn_score_reset <= key_pressed; // H + endcase + end +end + +endmodule diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/YM2149.sv b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/YM2149.sv new file mode 100644 index 00000000..eae73bb3 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/YM2149.sv @@ -0,0 +1,329 @@ +// +// Copyright (c) MikeJ - Jan 2005 +// Copyright (c) 2016-2018 Sorgelig +// +// All rights reserved +// +// Redistribution and use in source and synthezised forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// Redistributions in synthesized form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// Neither the name of the author nor the names of other contributors may +// be used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS CODE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + + +// BDIR BC MODE +// 0 0 inactive +// 0 1 read value +// 1 0 write value +// 1 1 set address +// + +module YM2149 +( + input CLK, // Global clock + input CE, // PSG Clock enable + input RESET, // Chip RESET (set all Registers to '0', active hi) + input BDIR, // Bus Direction (0 - read , 1 - write) + input BC, // Bus control + input A8, + input A9_L, + input [7:0] DI, // Data In + output [7:0] DO, // Data Out + output [7:0] CHANNEL_A, // PSG Output channel A + output [7:0] CHANNEL_B, // PSG Output channel B + output [7:0] CHANNEL_C, // PSG Output channel C + + input SEL, + input MODE, + + output [5:0] ACTIVE, + + input [7:0] IOA_in, + output [7:0] IOA_out, + + input [7:0] IOB_in, + output [7:0] IOB_out +); + +assign ACTIVE = ~ymreg[7][5:0]; +assign IOA_out = ymreg[7][6] ? ymreg[14] : 8'hff; +assign IOB_out = ymreg[7][7] ? ymreg[15] : 8'hff; + +reg [7:0] addr; +reg [7:0] ymreg[16]; +wire cs = !A9_L & A8; + +// Write to PSG +reg env_reset; +always @(posedge CLK) begin + if(RESET) begin + ymreg <= '{default:0}; + ymreg[7] <= '1; + addr <= '0; + env_reset <= 0; + end else begin + env_reset <= 0; + if(cs & BDIR) begin + if(BC) addr <= DI; + else if(!addr[7:4]) begin + ymreg[addr[3:0]] <= DI; + env_reset <= (addr == 13); + end + end + end +end + +// Read from PSG +assign DO = dout; +reg [7:0] dout; +always_comb begin + dout = 8'hFF; + if(cs & ~BDIR & BC & !addr[7:4]) begin + case(addr[3:0]) + 0: dout = ymreg[0]; + 1: dout = ymreg[1][3:0]; + 2: dout = ymreg[2]; + 3: dout = ymreg[3][3:0]; + 4: dout = ymreg[4]; + 5: dout = ymreg[5][3:0]; + 6: dout = ymreg[6][4:0]; + 7: dout = ymreg[7]; + 8: dout = ymreg[8][4:0]; + 9: dout = ymreg[9][4:0]; + 10: dout = ymreg[10][4:0]; + 11: dout = ymreg[11]; + 12: dout = ymreg[12]; + 13: dout = ymreg[13][3:0]; + 14: dout = ymreg[7][6] ? ymreg[14] : IOA_in; + 15: dout = ymreg[7][7] ? ymreg[15] : IOB_in; + endcase + end +end + +reg ena_div; +reg ena_div_noise; + +// p_divider +always @(posedge CLK) begin + reg [3:0] cnt_div; + reg noise_div; + + if(CE) begin + ena_div <= 0; + ena_div_noise <= 0; + if(!cnt_div) begin + cnt_div <= {SEL, 3'b111}; + ena_div <= 1; + + noise_div <= (~noise_div); + if (noise_div) ena_div_noise <= 1; + end else begin + cnt_div <= cnt_div - 1'b1; + end + end +end + + +reg [2:0] noise_gen_op; + +// p_noise_gen +always @(posedge CLK) begin + reg [16:0] poly17; + reg [4:0] noise_gen_cnt; + + if(CE) begin + if (ena_div_noise) begin + if (!ymreg[6][4:0] || noise_gen_cnt >= ymreg[6][4:0] - 1'd1) begin + noise_gen_cnt <= 0; + poly17 <= {(poly17[0] ^ poly17[2] ^ !poly17), poly17[16:1]}; + end else begin + noise_gen_cnt <= noise_gen_cnt + 1'd1; + end + noise_gen_op <= {3{poly17[0]}}; + end + end +end + +wire [11:0] tone_gen_freq[1:3]; +assign tone_gen_freq[1] = {ymreg[1][3:0], ymreg[0]}; +assign tone_gen_freq[2] = {ymreg[3][3:0], ymreg[2]}; +assign tone_gen_freq[3] = {ymreg[5][3:0], ymreg[4]}; + +reg [3:1] tone_gen_op; + +//p_tone_gens +always @(posedge CLK) begin + integer i; + reg [11:0] tone_gen_cnt[1:3]; + + if(CE) begin + // looks like real chips count up - we need to get the Exact behaviour .. + + for (i = 1; i <= 3; i = i + 1) begin + if(ena_div) begin + if (tone_gen_freq[i]) begin + if (tone_gen_cnt[i] >= (tone_gen_freq[i] - 1'd1)) begin + tone_gen_cnt[i] <= 0; + tone_gen_op[i] <= ~tone_gen_op[i]; + end else begin + tone_gen_cnt[i] <= tone_gen_cnt[i] + 1'd1; + end + end else begin + tone_gen_op[i] <= ymreg[7][i]; + tone_gen_cnt[i] <= 0; + end + end + end + end +end + +reg env_ena; +wire [15:0] env_gen_comp = {ymreg[12], ymreg[11]} ? {ymreg[12], ymreg[11]} - 1'd1 : 16'd0; + +//p_envelope_freq +always @(posedge CLK) begin + reg [15:0] env_gen_cnt; + + if(CE) begin + env_ena <= 0; + if(ena_div) begin + if (env_gen_cnt >= env_gen_comp) begin + env_gen_cnt <= 0; + env_ena <= 1; + end else begin + env_gen_cnt <= (env_gen_cnt + 1'd1); + end + end + end +end + +reg [4:0] env_vol; + +wire is_bot = (env_vol == 5'b00000); +wire is_bot_p1 = (env_vol == 5'b00001); +wire is_top_m1 = (env_vol == 5'b11110); +wire is_top = (env_vol == 5'b11111); + +always @(posedge CLK) begin + reg env_hold; + reg env_inc; + + // envelope shapes + // C AtAlH + // 0 0 x x \___ + // + // 0 1 x x /___ + // + // 1 0 0 0 \\\\ + // + // 1 0 0 1 \___ + // + // 1 0 1 0 \/\/ + // ___ + // 1 0 1 1 \ + // + // 1 1 0 0 //// + // ___ + // 1 1 0 1 / + // + // 1 1 1 0 /\/\ + // + // 1 1 1 1 /___ + + if(env_reset | RESET) begin + // load initial state + if(!ymreg[13][2]) begin // attack + env_vol <= 5'b11111; + env_inc <= 0; // -1 + end else begin + env_vol <= 5'b00000; + env_inc <= 1; // +1 + end + env_hold <= 0; + end + else if(CE) begin + if (env_ena) begin + if (!env_hold) begin + if (env_inc) env_vol <= (env_vol + 5'b00001); + else env_vol <= (env_vol + 5'b11111); + end + + // envelope shape control. + if(!ymreg[13][3]) begin + if(!env_inc) begin // down + if(is_bot_p1) env_hold <= 1; + end else if (is_top) env_hold <= 1; + end else if(ymreg[13][0]) begin // hold = 1 + if(!env_inc) begin // down + if(ymreg[13][1]) begin // alt + if(is_bot) env_hold <= 1; + end else if(is_bot_p1) env_hold <= 1; + end else if(ymreg[13][1]) begin // alt + if(is_top) env_hold <= 1; + end else if(is_top_m1) env_hold <= 1; + end else if(ymreg[13][1]) begin // alternate + if(env_inc == 1'b0) begin // down + if(is_bot_p1) env_hold <= 1; + if(is_bot) begin + env_hold <= 0; + env_inc <= 1; + end + end else begin + if(is_top_m1) env_hold <= 1; + if(is_top) begin + env_hold <= 0; + env_inc <= 0; + end + end + end + end + end +end + +reg [5:0] A,B,C; +always @(posedge CLK) begin + A <= {MODE, ~((ymreg[7][0] | tone_gen_op[1]) & (ymreg[7][3] | noise_gen_op[0])) ? 5'd0 : ymreg[8][4] ? env_vol[4:0] : { ymreg[8][3:0], ymreg[8][3]}}; + B <= {MODE, ~((ymreg[7][1] | tone_gen_op[2]) & (ymreg[7][4] | noise_gen_op[1])) ? 5'd0 : ymreg[9][4] ? env_vol[4:0] : { ymreg[9][3:0], ymreg[9][3]}}; + C <= {MODE, ~((ymreg[7][2] | tone_gen_op[3]) & (ymreg[7][5] | noise_gen_op[2])) ? 5'd0 : ymreg[10][4] ? env_vol[4:0] : {ymreg[10][3:0], ymreg[10][3]}}; +end + +wire [7:0] volTable[64] = '{ + //YM2149 + 8'h00, 8'h01, 8'h01, 8'h02, 8'h02, 8'h03, 8'h03, 8'h04, + 8'h06, 8'h07, 8'h09, 8'h0a, 8'h0c, 8'h0e, 8'h11, 8'h13, + 8'h17, 8'h1b, 8'h20, 8'h25, 8'h2c, 8'h35, 8'h3e, 8'h47, + 8'h54, 8'h66, 8'h77, 8'h88, 8'ha1, 8'hc0, 8'he0, 8'hff, + + //AY8910 + 8'h00, 8'h00, 8'h03, 8'h03, 8'h04, 8'h04, 8'h06, 8'h06, + 8'h0a, 8'h0a, 8'h0f, 8'h0f, 8'h15, 8'h15, 8'h22, 8'h22, + 8'h28, 8'h28, 8'h41, 8'h41, 8'h5b, 8'h5b, 8'h72, 8'h72, + 8'h90, 8'h90, 8'hb5, 8'hb5, 8'hd7, 8'hd7, 8'hff, 8'hff +}; + +assign CHANNEL_A = volTable[A]; +assign CHANNEL_B = volTable[B]; +assign CHANNEL_C = volTable[C]; + +endmodule diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/build_id.tcl b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/build_id.tcl new file mode 100644 index 00000000..938515d8 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/build_id.tcl @@ -0,0 +1,35 @@ +# ================================================================================ +# +# Build ID Verilog Module Script +# Jeff Wiencrot - 8/1/2011 +# +# Generates a Verilog module that contains a timestamp, +# from the current build. These values are available from the build_date, build_time, +# physical_address, and host_name output ports of the build_id module in the build_id.v +# Verilog source file. +# +# ================================================================================ + +proc generateBuildID_Verilog {} { + + # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) + set buildDate [ clock format [ clock seconds ] -format %y%m%d ] + set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + + # Create a Verilog file for output + set outputFileName "rtl/build_id.v" + set outputFile [open $outputFileName "w"] + + # Output the Verilog source + puts $outputFile "`define BUILD_DATE \"$buildDate\"" + puts $outputFile "`define BUILD_TIME \"$buildTime\"" + close $outputFile + + # Send confirmation message to the Messages window + post_message "Generated build identification Verilog module: [pwd]/$outputFileName" + post_message "Date: $buildDate" + post_message "Time: $buildTime" +} + +# Comment out this line to prevent the process from automatically executing when the file is sourced: +generateBuildID_Verilog \ No newline at end of file diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu09l_128.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu09l_128.vhd new file mode 100644 index 00000000..12039bde --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu09l_128.vhd @@ -0,0 +1,5906 @@ +--===========================================================================-- +-- -- +-- Synthesizable 6809 instruction compatible VHDL CPU core -- +-- -- +--===========================================================================-- +-- +-- File name : cpu09l.vhd +-- +-- Entity name : cpu09 +-- +-- Purpose : 6809 instruction compatible CPU core written in VHDL +-- with Last Instruction Cycle, bus available, bus status, +-- and instruction fetch signals. +-- Not cycle compatible with the original 6809 CPU +-- +-- Dependencies : ieee.std_logic_1164 +-- ieee.std_logic_unsigned +-- +-- Author : John E. Kent +-- +-- Email : dilbert57@opencores.org +-- +-- Web : http://opencores.org/project,system09 +-- +-- Description : VMA (valid memory address) is hight whenever a valid memory +-- access is made by an instruction fetch, interrupt vector fetch +-- or a data read or write otherwise it is low indicating an idle +-- bus cycle. +-- IFETCH (instruction fetch output) is high whenever an +-- instruction byte is read i.e. the program counter is applied +-- to the address bus. +-- LIC (last instruction cycle output) is normally low +-- but goes high on the last cycle of an instruction. +-- BA (bus available output) is normally low but goes high while +-- waiting in a Sync instruction state or the CPU is halted +-- i.e. a DMA grant. +-- BS (bus status output) is normally low but goes high during an +-- interrupt or reset vector fetch or the processor is halted +-- i.e. a DMA grant. +-- +-- Copyright (C) 2003 - 2010 John Kent +-- +-- 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 3 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, see . +-- +--===========================================================================-- +-- -- +-- Revision History -- +-- -- +--===========================================================================-- +-- +-- Version 0.1 - 26 June 2003 - John Kent +-- Added extra level in state stack +-- fixed some calls to the extended addressing state +-- +-- Version 0.2 - 5 Sept 2003 - John Kent +-- Fixed 16 bit indexed offset (was doing read rather than fetch) +-- Added/Fixed STY and STS instructions. +-- ORCC_STATE ANDed CC state rather than ORed it - Now fixed +-- CMPX Loaded ACCA and ACCB - Now fixed +-- +-- Version 1.0 - 6 Sep 2003 - John Kent +-- Initial release to Open Cores +-- reversed clock edge +-- +-- Version 1.1 - 29 November 2003 John kent +-- ACCA and ACCB indexed offsets are 2's complement. +-- ALU Right Mux now sign extends ACCA & ACCB offsets +-- Absolute Indirect addressing performed a read on the +-- second byte of the address rather than a fetch +-- so it formed an incorrect address. Now fixed. +-- +-- Version 1.2 - 29 November 2003 John Kent +-- LEAX and LEAY affect the Z bit only +-- LEAS and LEAU do not affect any condition codes +-- added an extra ALU control for LEA. +-- +-- Version 1.3 - 12 December 2003 John Kent +-- CWAI did not work, was missed a PUSH_ST on calling +-- the ANDCC_STATE. Thanks go to Ghassan Kraidy for +-- finding this fault. +-- +-- Version 1.4 - 12 December 2003 John Kent +-- Missing cc_ctrl assignment in otherwise case of +-- lea_state resulted in cc_ctrl being latched in +-- that state. +-- The otherwise statement should never be reached, +-- and has been fixed simply to resolve synthesis warnings. +-- +-- Version 1.5 - 17 january 2004 John kent +-- The clear instruction used "alu_ld8" to control the ALU +-- rather than "alu_clr". This mean the Carry was not being +-- cleared correctly. +-- +-- Version 1.6 - 24 January 2004 John Kent +-- Fixed problems in PSHU instruction +-- +-- Version 1.7 - 25 January 2004 John Kent +-- removed redundant "alu_inx" and "alu_dex' +-- Removed "test_alu" and "test_cc" +-- STD instruction did not set condition codes +-- JMP direct was not decoded properly +-- CLR direct performed an unwanted read cycle +-- Bogus "latch_md" in Page2 indexed addressing +-- +-- Version 1.8 - 27 January 2004 John Kent +-- CWAI in decode1_state should increment the PC. +-- ABX is supposed to be an unsigned addition. +-- Added extra ALU function +-- ASR8 slightly changed in the ALU. +-- +-- Version 1.9 - 20 August 2005 +-- LSR8 is now handled in ASR8 and ROR8 case in the ALU, +-- rather than LSR16. There was a problem with single +-- operand instructions using the MD register which is +-- sign extended on the first 8 bit fetch. +-- +-- Version 1.10 - 13 September 2005 +-- TFR & EXG instructions did not work for the Condition Code Register +-- An extra case has been added to the ALU for the alu_tfr control +-- to assign the left ALU input (alu_left) to the condition code +-- outputs (cc_out). +-- +-- Version 1.11 - 16 September 2005 +-- JSR ,X should not predecrement S before calculating the jump address. +-- The reason is that JSR [0,S] needs S to point to the top of the stack +-- to fetch a valid vector address. The solution is to have the addressing +-- mode microcode called before decrementing S and then decrementing S in +-- JSR_STATE. JSR_STATE in turn calls PUSH_RETURN_LO_STATE rather than +-- PUSH_RETURN_HI_STATE so that both the High & Low halves of the PC are +-- pushed on the stack. This adds one extra bus cycle, but resolves the +-- addressing conflict. I've also removed the pre-decement S in +-- JSR EXTENDED as it also calls JSR_STATE. +-- +-- Version 1.12 - 6th June 2006 +-- 6809 Programming reference manual says V is not affected by ASR, LSR and ROR +-- This is different to the 6800. CLR should reset the V bit. +-- +-- Version 1.13 - 7th July 2006 +-- Disable NMI on reset until S Stack pointer has been loaded. +-- Added nmi_enable signal in sp_reg process and nmi_handler process. +-- +-- Version 1.14 - 11th July 2006 +-- 1. Added new state to RTI called rti_entire_state. +-- This state tests the CC register after it has been loaded +-- from the stack. Previously the current CC was tested which +-- was incorrect. The Entire Flag should be set before the +-- interrupt stacks the CC. +-- 2. On bogus Interrupts, int_cc_state went to rti_state, +-- which was an enumerated state, but not defined anywhere. +-- rti_state has been changed to rti_cc_state so that bogus interrupt +-- will perform an RTI after entering that state. +-- 3. Sync should generate an interrupt if the interrupt masks +-- are cleared. If the interrupt masks are set, then an interrupt +-- will cause the the PC to advance to the next instruction. +-- Note that I don't wait for an interrupt to be asserted for +-- three clock cycles. +-- 4. Added new ALU control state "alu_mul". "alu_mul" is used in +-- the Multiply instruction replacing "alu_add16". This is similar +-- to "alu_add16" except it sets the Carry bit to B7 of the result +-- in ACCB, sets the Zero bit if the 16 bit result is zero, but +-- does not affect The Half carry (H), Negative (N) or Overflow (V) +-- flags. The logic was re-arranged so that it adds md or zero so +-- that the Carry condition code is set on zero multiplicands. +-- 5. DAA (Decimal Adjust Accumulator) should set the Negative (N) +-- and Zero Flags. It will also affect the Overflow (V) flag although +-- the operation is undefined. It's anyones guess what DAA does to V. +-- +-- Version 1.15 - 25th Feb 2007 - John Kent +-- line 9672 changed "if Halt <= '1' then" to "if Halt = '1' then" +-- Changed sensitivity lists. +-- +-- Version 1.16 - 5th February 2008 - John Kent +-- FIRQ interrupts should take priority over IRQ Interrupts. +-- This presumably means they should be tested for before IRQ +-- when they happen concurrently. +-- +-- Version 1.17 - 18th February 2008 - John Kent +-- NMI in CWAI should mask IRQ and FIRQ interrupts +-- +-- Version 1.18 - 21st February 2008 - John Kent +-- Removed default register settings in each case statement +-- and placed them at the beginning of the state sequencer. +-- Modified the SYNC instruction so that the interrupt vector(iv) +-- is not set unless an unmasked FIRQ or IRQ is received. +-- +-- Version 1.19 - 25th February 2008 - John Kent +-- Enumerated separate states for FIRQ/FAST and NMIIRQ/ENTIRE +-- Enumerated separate states for MASKI and MASKIF states +-- Removed code on BSR/JSR in fetch cycle +-- +-- Version 1.20 - 8th October 2011 - John Kent +-- added fetch output which should go high during the fetch cycle +-- +-- Version 1.21 - 8th October 2011 - John Kent +-- added Last Instruction Cycle signal +-- replaced fetch with ifetch (instruction fetch) signal +-- added ba & bs (bus available & bus status) signals +-- +-- Version 1.22 - 2011-10-29 John Kent +-- The halt state isn't correct. +-- The halt state is entered into from the fetch_state +-- It returned to the fetch state which may re-run an execute cycle +-- on the accumulator and it won't necessarily be the last instruction cycle +-- I've changed the halt state to return to the decode1_state +-- +-- Version 1.23 - 2011-10-30 John Kent +-- sample halt in the change_state process if lic is high (last instruction cycle) +-- +-- Version 1.24 - 2011-11-01 John Kent +-- Handle interrupts in change_state process +-- Sample interrupt inputs on last instruction cycle +-- Remove iv_ctrl and implement iv (interrupt vector) in change_state process. +-- Generate fic (first instruction cycle) from lic (last instruction cycle) +-- and use it to complete the dual operand execute cycle before servicing +-- halt or interrupts requests. +-- rename lic to lic_out on the entity declaration so that lic can be tested internally. +-- add int_firq1_state and int_nmirq1_state to allow for the dual operand execute cycle +-- integrated nmi_ctrl into change_state process +-- Reduces the microcode state stack to one entry (saved_state) +-- imm16_state jumps directly to the fetch_state +-- pull_return_lo states jumps directly to the fetch_state +-- duplicate andcc_state as cwai_state +-- rename exg1_state as exg2 state and duplicate tfr_state as exg1_state +-- +-- Version 1.25 - 2011-11-27 John Kent +-- Changed the microcode for saving registers on an interrupt into a microcode subroutine. +-- Removed SWI servicing from the change state process and made SWI, SWI2 & SWI3 +-- call the interrupt microcode subroutine. +-- Added additional states for nmi, and irq for interrupt servicing. +-- Added additional states for nmi/irq, firq, and swi interrupts to mask I & F flags. +-- +-- Version 1.26 - 2013-03-18 John Kent +-- pre-initialized cond_true variable to true in state sequencer +-- re-arranged change_state process slightly +-- +-- Version 1.27 - 2015-05-30 John Kent +-- Added test in state machine for masked IRQ and FIRQ in Sync_state. +-- +-- Version 1.28 - 2015-05-30 John Kent. +-- Moved IRQ and FIRQ test from state machine to the state sequencer Sync_state. +-- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity cpu09 is + port ( + clk : in std_logic; -- E clock input (falling edge) + rst : in std_logic; -- reset input (active high) + vma : out std_logic; -- valid memory address (active high) + lic_out : out std_logic; -- last instruction cycle (active high) + ifetch : out std_logic; -- instruction fetch cycle (active high) + opfetch : out std_logic; -- opcode fetch (active high) + ba : out std_logic; -- bus available (high on sync wait or DMA grant) + bs : out std_logic; -- bus status (high on interrupt or reset vector fetch or DMA grant) + addr : out std_logic_vector(15 downto 0); -- address bus output + rw : out std_logic; -- read not write output + data_out : out std_logic_vector(7 downto 0); -- data bus output + data_in : in std_logic_vector(7 downto 0); -- data bus input + irq : in std_logic; -- interrupt request input (active high) + firq : in std_logic; -- fast interrupt request input (active high) + nmi : in std_logic; -- non maskable interrupt request input (active high) + halt : in std_logic; -- halt input (active high) grants DMA + hold : in std_logic -- hold input (active high) extend bus cycle + ); +end cpu09; + +architecture rtl of cpu09 is + + constant EBIT : integer := 7; + constant FBIT : integer := 6; + constant HBIT : integer := 5; + constant IBIT : integer := 4; + constant NBIT : integer := 3; + constant ZBIT : integer := 2; + constant VBIT : integer := 1; + constant CBIT : integer := 0; + + -- + -- Interrupt vector modifiers + -- + constant RST_VEC : std_logic_vector(2 downto 0) := "111"; + constant NMI_VEC : std_logic_vector(2 downto 0) := "110"; + constant SWI_VEC : std_logic_vector(2 downto 0) := "101"; + constant IRQ_VEC : std_logic_vector(2 downto 0) := "100"; + constant FIRQ_VEC : std_logic_vector(2 downto 0) := "011"; + constant SWI2_VEC : std_logic_vector(2 downto 0) := "010"; + constant SWI3_VEC : std_logic_vector(2 downto 0) := "001"; + constant RESV_VEC : std_logic_vector(2 downto 0) := "000"; + + type state_type is (-- Start off in Reset + reset_state, + -- Fetch Interrupt Vectors (including reset) + vect_lo_state, vect_hi_state, vect_idle_state, + -- Fetch Instruction Cycle + fetch_state, + -- Decode Instruction Cycles + decode1_state, decode2_state, decode3_state, + -- Calculate Effective Address + imm16_state, + indexed_state, index8_state, index16_state, index16_2_state, + pcrel8_state, pcrel16_state, pcrel16_2_state, + indexaddr_state, indexaddr2_state, + postincr1_state, postincr2_state, + indirect_state, indirect2_state, indirect3_state, + extended_state, + -- single ops + single_op_read_state, + single_op_exec_state, + single_op_write_state, + -- Dual op states + dual_op_read8_state, dual_op_read16_state, dual_op_read16_2_state, + dual_op_write8_state, dual_op_write16_state, + -- + sync_state, halt_state, cwai_state, + -- + andcc_state, orcc_state, + tfr_state, + exg_state, exg1_state, exg2_state, + lea_state, + -- Multiplication + mul_state, mulea_state, muld_state, + mul0_state, mul1_state, mul2_state, mul3_state, + mul4_state, mul5_state, mul6_state, mul7_state, + -- Branches + lbranch_state, sbranch_state, + -- Jumps, Subroutine Calls and Returns + jsr_state, jmp_state, + push_return_hi_state, push_return_lo_state, + pull_return_hi_state, pull_return_lo_state, + -- Interrupt cycles + int_nmi_state, int_nmi1_state, + int_irq_state, int_irq1_state, + int_firq_state, int_firq1_state, + int_entire_state, int_fast_state, + int_pcl_state, int_pch_state, + int_upl_state, int_uph_state, + int_iyl_state, int_iyh_state, + int_ixl_state, int_ixh_state, + int_dp_state, + int_accb_state, int_acca_state, + int_cc_state, + int_cwai_state, + int_nmimask_state, int_firqmask_state, int_swimask_state, int_irqmask_state, + -- Return From Interrupt + rti_cc_state, rti_entire_state, + rti_acca_state, rti_accb_state, + rti_dp_state, + rti_ixl_state, rti_ixh_state, + rti_iyl_state, rti_iyh_state, + rti_upl_state, rti_uph_state, + rti_pcl_state, rti_pch_state, + -- Push Registers using SP + pshs_state, + pshs_pcl_state, pshs_pch_state, + pshs_upl_state, pshs_uph_state, + pshs_iyl_state, pshs_iyh_state, + pshs_ixl_state, pshs_ixh_state, + pshs_dp_state, + pshs_acca_state, pshs_accb_state, + pshs_cc_state, + -- Pull Registers using SP + puls_state, + puls_cc_state, + puls_acca_state, puls_accb_state, + puls_dp_state, + puls_ixl_state, puls_ixh_state, + puls_iyl_state, puls_iyh_state, + puls_upl_state, puls_uph_state, + puls_pcl_state, puls_pch_state, + -- Push Registers using UP + pshu_state, + pshu_pcl_state, pshu_pch_state, + pshu_spl_state, pshu_sph_state, + pshu_iyl_state, pshu_iyh_state, + pshu_ixl_state, pshu_ixh_state, + pshu_dp_state, + pshu_acca_state, pshu_accb_state, + pshu_cc_state, + -- Pull Registers using UP + pulu_state, + pulu_cc_state, + pulu_acca_state, pulu_accb_state, + pulu_dp_state, + pulu_ixl_state, pulu_ixh_state, + pulu_iyl_state, pulu_iyh_state, + pulu_spl_state, pulu_sph_state, + pulu_pcl_state, pulu_pch_state ); + + type st_type is (reset_st, push_st, idle_st ); + type iv_type is (latch_iv, swi3_iv, swi2_iv, firq_iv, irq_iv, swi_iv, nmi_iv, reset_iv); + type addr_type is (idle_ad, fetch_ad, read_ad, write_ad, pushu_ad, pullu_ad, pushs_ad, pulls_ad, int_hi_ad, int_lo_ad ); + type dout_type is (cc_dout, acca_dout, accb_dout, dp_dout, + ix_lo_dout, ix_hi_dout, iy_lo_dout, iy_hi_dout, + up_lo_dout, up_hi_dout, sp_lo_dout, sp_hi_dout, + pc_lo_dout, pc_hi_dout, md_lo_dout, md_hi_dout ); + type op_type is (reset_op, fetch_op, latch_op ); + type pre_type is (reset_pre, fetch_pre, latch_pre ); + type cc_type is (reset_cc, load_cc, pull_cc, latch_cc ); + type acca_type is (reset_acca, load_acca, load_hi_acca, pull_acca, latch_acca ); + type accb_type is (reset_accb, load_accb, pull_accb, latch_accb ); + type dp_type is (reset_dp, load_dp, pull_dp, latch_dp ); + type ix_type is (reset_ix, load_ix, pull_lo_ix, pull_hi_ix, latch_ix ); + type iy_type is (reset_iy, load_iy, pull_lo_iy, pull_hi_iy, latch_iy ); + type sp_type is (reset_sp, latch_sp, load_sp, pull_hi_sp, pull_lo_sp ); + type up_type is (reset_up, latch_up, load_up, pull_hi_up, pull_lo_up ); + type pc_type is (reset_pc, latch_pc, load_pc, pull_lo_pc, pull_hi_pc, incr_pc ); + type md_type is (reset_md, latch_md, load_md, fetch_first_md, fetch_next_md, shiftl_md ); + type ea_type is (reset_ea, latch_ea, load_ea, fetch_first_ea, fetch_next_ea ); + type left_type is (cc_left, acca_left, accb_left, dp_left, + ix_left, iy_left, up_left, sp_left, + accd_left, md_left, pc_left, ea_left ); + type right_type is (ea_right, zero_right, one_right, two_right, + acca_right, accb_right, accd_right, + md_right, md_sign5_right, md_sign8_right ); + type alu_type is (alu_add8, alu_sub8, alu_add16, alu_sub16, alu_adc, alu_sbc, + alu_and, alu_ora, alu_eor, + alu_tst, alu_inc, alu_dec, alu_clr, alu_neg, alu_com, + alu_lsr16, alu_lsl16, + alu_ror8, alu_rol8, alu_mul, + alu_asr8, alu_asl8, alu_lsr8, + alu_andcc, alu_orcc, alu_sex, alu_tfr, alu_abx, + alu_seif, alu_sei, alu_see, alu_cle, + alu_ld8, alu_st8, alu_ld16, alu_st16, alu_lea, alu_nop, alu_daa ); + + signal op_code: std_logic_vector(7 downto 0); + signal pre_code: std_logic_vector(7 downto 0); + signal acca: std_logic_vector(7 downto 0); + signal accb: std_logic_vector(7 downto 0); + signal cc: std_logic_vector(7 downto 0); + signal cc_out: std_logic_vector(7 downto 0); + signal dp: std_logic_vector(7 downto 0); + signal xreg: std_logic_vector(15 downto 0); + signal yreg: std_logic_vector(15 downto 0); + signal sp: std_logic_vector(15 downto 0); + signal up: std_logic_vector(15 downto 0); + signal ea: std_logic_vector(15 downto 0); + signal pc: std_logic_vector(15 downto 0); + signal md: std_logic_vector(15 downto 0); + signal left: std_logic_vector(15 downto 0); + signal right: std_logic_vector(15 downto 0); + signal out_alu: std_logic_vector(15 downto 0); + signal iv: std_logic_vector(2 downto 0); + signal nmi_req: std_logic; + signal nmi_ack: std_logic; + signal nmi_enable: std_logic; + signal fic: std_logic; -- first instruction cycle + signal lic: std_logic; -- last instruction cycle + + signal state: state_type; + signal next_state: state_type; + signal return_state: state_type; + signal saved_state: state_type; + signal st_ctrl: st_type; + signal iv_ctrl: iv_type; + signal pc_ctrl: pc_type; + signal ea_ctrl: ea_type; + signal op_ctrl: op_type; + signal pre_ctrl: pre_type; + signal md_ctrl: md_type; + signal acca_ctrl: acca_type; + signal accb_ctrl: accb_type; + signal ix_ctrl: ix_type; + signal iy_ctrl: iy_type; + signal cc_ctrl: cc_type; + signal dp_ctrl: dp_type; + signal sp_ctrl: sp_type; + signal up_ctrl: up_type; + signal left_ctrl: left_type; + signal right_ctrl: right_type; + signal alu_ctrl: alu_type; + signal addr_ctrl: addr_type; + signal dout_ctrl: dout_type; + + +begin + +---------------------------------- +-- +-- State machine stack +-- +---------------------------------- +--state_stack_proc: process( clk, hold, state_stack, st_ctrl, +-- return_state, fetch_state ) +state_stack_proc: process( clk, st_ctrl, return_state ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case st_ctrl is + when reset_st => + saved_state <= fetch_state; + when push_st => + saved_state <= return_state; + when others => + null; + end case; + end if; + end if; +end process; + +---------------------------------- +-- +-- Interrupt Vector control +-- +---------------------------------- +-- +int_vec_proc: process( clk, iv_ctrl ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case iv_ctrl is + when reset_iv => + iv <= RST_VEC; + when nmi_iv => + iv <= NMI_VEC; + when swi_iv => + iv <= SWI_VEC; + when irq_iv => + iv <= IRQ_VEC; + when firq_iv => + iv <= FIRQ_VEC; + when swi2_iv => + iv <= SWI2_VEC; + when swi3_iv => + iv <= SWI3_VEC; + when others => + null; + end case; + end if; -- hold + end if; -- clk +end process; + +---------------------------------- +-- +-- Program Counter Control +-- +---------------------------------- + +--pc_reg: process( clk, pc_ctrl, hold, pc, out_alu, data_in ) +pc_reg: process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case pc_ctrl is + when reset_pc => + pc <= (others=>'0'); + when load_pc => + pc <= out_alu(15 downto 0); + when pull_lo_pc => + pc(7 downto 0) <= data_in; + when pull_hi_pc => + pc(15 downto 8) <= data_in; + when incr_pc => + pc <= pc + 1; + when others => + null; + end case; + end if; + end if; +end process; + +---------------------------------- +-- +-- Effective Address Control +-- +---------------------------------- + +--ea_reg: process( clk, ea_ctrl, hold, ea, out_alu, data_in, dp ) +ea_reg: process( clk ) +begin + + if clk'event and clk = '0' then + if hold= '0' then + case ea_ctrl is + when reset_ea => + ea <= (others=>'0'); + when fetch_first_ea => + ea(7 downto 0) <= data_in; + ea(15 downto 8) <= dp; + when fetch_next_ea => + ea(15 downto 8) <= ea(7 downto 0); + ea(7 downto 0) <= data_in; + when load_ea => + ea <= out_alu(15 downto 0); + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- Accumulator A +-- +-------------------------------- +--acca_reg : process( clk, acca_ctrl, hold, out_alu, acca, data_in ) +acca_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case acca_ctrl is + when reset_acca => + acca <= (others=>'0'); + when load_acca => + acca <= out_alu(7 downto 0); + when load_hi_acca => + acca <= out_alu(15 downto 8); + when pull_acca => + acca <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- Accumulator B +-- +-------------------------------- +--accb_reg : process( clk, accb_ctrl, hold, out_alu, accb, data_in ) +accb_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case accb_ctrl is + when reset_accb => + accb <= (others=>'0'); + when load_accb => + accb <= out_alu(7 downto 0); + when pull_accb => + accb <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- X Index register +-- +-------------------------------- +--ix_reg : process( clk, ix_ctrl, hold, out_alu, xreg, data_in ) +ix_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case ix_ctrl is + when reset_ix => + xreg <= (others=>'0'); + when load_ix => + xreg <= out_alu(15 downto 0); + when pull_hi_ix => + xreg(15 downto 8) <= data_in; + when pull_lo_ix => + xreg(7 downto 0) <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- Y Index register +-- +-------------------------------- +--iy_reg : process( clk, iy_ctrl, hold, out_alu, yreg, data_in ) +iy_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case iy_ctrl is + when reset_iy => + yreg <= (others=>'0'); + when load_iy => + yreg <= out_alu(15 downto 0); + when pull_hi_iy => + yreg(15 downto 8) <= data_in; + when pull_lo_iy => + yreg(7 downto 0) <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- S stack pointer +-- +-------------------------------- +--sp_reg : process( clk, sp_ctrl, hold, sp, out_alu, data_in, nmi_enable ) +sp_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case sp_ctrl is + when reset_sp => + sp <= (others=>'0'); + nmi_enable <= '0'; + when load_sp => + sp <= out_alu(15 downto 0); + nmi_enable <= '1'; + when pull_hi_sp => + sp(15 downto 8) <= data_in; + when pull_lo_sp => + sp(7 downto 0) <= data_in; + nmi_enable <= '1'; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- U stack pointer +-- +-------------------------------- +--up_reg : process( clk, up_ctrl, hold, up, out_alu, data_in ) +up_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case up_ctrl is + when reset_up => + up <= (others=>'0'); + when load_up => + up <= out_alu(15 downto 0); + when pull_hi_up => + up(15 downto 8) <= data_in; + when pull_lo_up => + up(7 downto 0) <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- Memory Data +-- +-------------------------------- +--md_reg : process( clk, md_ctrl, hold, out_alu, data_in, md ) +md_reg : process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case md_ctrl is + when reset_md => + md <= (others=>'0'); + when load_md => + md <= out_alu(15 downto 0); + when fetch_first_md => -- sign extend md for branches + md(15 downto 8) <= data_in(7) & data_in(7) & data_in(7) & data_in(7) & + data_in(7) & data_in(7) & data_in(7) & data_in(7) ; + md(7 downto 0) <= data_in; + when fetch_next_md => + md(15 downto 8) <= md(7 downto 0); + md(7 downto 0) <= data_in; + when shiftl_md => + md(15 downto 1) <= md(14 downto 0); + md(0) <= '0'; + when others => + null; + end case; + end if; + end if; +end process; + + +---------------------------------- +-- +-- Condition Codes +-- +---------------------------------- + +--cc_reg: process( clk, cc_ctrl, hold, cc_out, cc, data_in ) +cc_reg: process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case cc_ctrl is + when reset_cc => + cc <= "11010000"; -- set EBIT, FBIT & IBIT + when load_cc => + cc <= cc_out; + when pull_cc => + cc <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +---------------------------------- +-- +-- Direct Page register +-- +---------------------------------- + +--dp_reg: process( clk, dp_ctrl, hold, out_alu, dp, data_in ) +dp_reg: process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case dp_ctrl is + when reset_dp => + dp <= (others=>'0'); + when load_dp => + dp <= out_alu(7 downto 0); + when pull_dp => + dp <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + + +---------------------------------- +-- +-- op code register +-- +---------------------------------- + +--op_reg: process( clk, op_ctrl, hold, op_code, data_in ) +op_reg: process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case op_ctrl is + when reset_op => + op_code <= "00010010"; + when fetch_op => + op_code <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + + +---------------------------------- +-- +-- pre byte op code register +-- +---------------------------------- + +--pre_reg: process( clk, pre_ctrl, hold, pre_code, data_in ) +pre_reg: process( clk ) +begin + if clk'event and clk = '0' then + if hold = '0' then + case pre_ctrl is + when reset_pre => + pre_code <= (others=>'0'); + when fetch_pre => + pre_code <= data_in; + when others => + null; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- state machine +-- +-------------------------------- + +--change_state: process( clk, rst, state, hold, next_state ) +change_state: process( clk ) +begin + if clk'event and clk = '0' then + if rst = '1' then + fic <= '0'; + nmi_ack <= '0'; + state <= reset_state; + elsif hold = '0' then + fic <= lic; + -- + -- nmi request is not cleared until nmi input goes low + -- + if (nmi_req = '0') and (nmi_ack='1') then + nmi_ack <= '0'; + end if; + + if (nmi_req = '1') and (nmi_ack = '0') and (state = int_nmimask_state) then + nmi_ack <= '1'; + end if; + + if lic = '1' then + if halt = '1' then + state <= halt_state; + + -- service non maskable interrupts + elsif (nmi_req = '1') and (nmi_ack = '0') then + state <= int_nmi_state; + -- + -- FIRQ & IRQ are level sensitive + -- + elsif (firq = '1') and (cc(FBIT) = '0') then + state <= int_firq_state; + + elsif (irq = '1') and (cc(IBIT) = '0') then + state <= int_irq_state; + -- + -- Version 1.27 2015-05-30 + -- Exit sync_state on masked interrupt. + -- + -- Version 1.28 2015-05-30 + -- Move this code to the state sequencer + -- near line 5566. + -- + -- elsif (state = sync_state) and ((firq = '1') or (irq = '1'))then + -- state <= fetch_state; + -- + else + state <= next_state; + end if; -- halt, nmi, firq, irq + else + state <= next_state; + end if; -- lic + end if; -- reset/hold + end if; -- clk +end process; + +------------------------------------ +-- +-- Detect Edge of NMI interrupt +-- +------------------------------------ + +--nmi_handler : process( clk, rst, nmi, nmi_ack, nmi_req, nmi_enable ) +nmi_handler : process( rst, clk ) +begin + if rst='1' then + nmi_req <= '0'; + elsif clk'event and clk='0' then + if (nmi='1') and (nmi_ack='0') and (nmi_enable='1') then + nmi_req <= '1'; + else + if (nmi='0') and (nmi_ack='1') then + nmi_req <= '0'; + end if; + end if; + end if; +end process; + + +---------------------------------- +-- +-- Address output multiplexer +-- +---------------------------------- + +addr_mux: process( addr_ctrl, pc, ea, up, sp, iv ) +begin + ifetch <= '0'; + vma <= '1'; + case addr_ctrl is + when fetch_ad => + addr <= pc; + rw <= '1'; + ifetch <= '1'; + when read_ad => + addr <= ea; + rw <= '1'; + when write_ad => + addr <= ea; + rw <= '0'; + when pushs_ad => + addr <= sp; + rw <= '0'; + when pulls_ad => + addr <= sp; + rw <= '1'; + when pushu_ad => + addr <= up; + rw <= '0'; + when pullu_ad => + addr <= up; + rw <= '1'; + when int_hi_ad => + addr <= "111111111111" & iv & "0"; + rw <= '1'; + when int_lo_ad => + addr <= "111111111111" & iv & "1"; + rw <= '1'; + when others => + addr <= "1111111111111111"; + rw <= '1'; + vma <= '0'; + end case; +end process; + +-------------------------------- +-- +-- Data Bus output +-- +-------------------------------- +dout_mux : process( dout_ctrl, md, acca, accb, dp, xreg, yreg, sp, up, pc, cc ) +begin + case dout_ctrl is + when cc_dout => -- condition code register + data_out <= cc; + when acca_dout => -- accumulator a + data_out <= acca; + when accb_dout => -- accumulator b + data_out <= accb; + when dp_dout => -- direct page register + data_out <= dp; + when ix_lo_dout => -- X index reg + data_out <= xreg(7 downto 0); + when ix_hi_dout => -- X index reg + data_out <= xreg(15 downto 8); + when iy_lo_dout => -- Y index reg + data_out <= yreg(7 downto 0); + when iy_hi_dout => -- Y index reg + data_out <= yreg(15 downto 8); + when up_lo_dout => -- U stack pointer + data_out <= up(7 downto 0); + when up_hi_dout => -- U stack pointer + data_out <= up(15 downto 8); + when sp_lo_dout => -- S stack pointer + data_out <= sp(7 downto 0); + when sp_hi_dout => -- S stack pointer + data_out <= sp(15 downto 8); + when md_lo_dout => -- alu output + data_out <= md(7 downto 0); + when md_hi_dout => -- alu output + data_out <= md(15 downto 8); + when pc_lo_dout => -- low order pc + data_out <= pc(7 downto 0); + when pc_hi_dout => -- high order pc + data_out <= pc(15 downto 8); + end case; +end process; + +---------------------------------- +-- +-- Left Mux +-- +---------------------------------- + +left_mux: process( left_ctrl, acca, accb, cc, dp, xreg, yreg, up, sp, pc, ea, md ) +begin + case left_ctrl is + when cc_left => + left(15 downto 8) <= "00000000"; + left(7 downto 0) <= cc; + when acca_left => + left(15 downto 8) <= "00000000"; + left(7 downto 0) <= acca; + when accb_left => + left(15 downto 8) <= "00000000"; + left(7 downto 0) <= accb; + when dp_left => + left(15 downto 8) <= "00000000"; + left(7 downto 0) <= dp; + when accd_left => + left(15 downto 8) <= acca; + left(7 downto 0) <= accb; + when md_left => + left <= md; + when ix_left => + left <= xreg; + when iy_left => + left <= yreg; + when sp_left => + left <= sp; + when up_left => + left <= up; + when pc_left => + left <= pc; + when others => +-- when ea_left => + left <= ea; + end case; +end process; + +---------------------------------- +-- +-- Right Mux +-- +---------------------------------- + +right_mux: process( right_ctrl, md, acca, accb, ea ) +begin + case right_ctrl is + when ea_right => + right <= ea; + when zero_right => + right <= "0000000000000000"; + when one_right => + right <= "0000000000000001"; + when two_right => + right <= "0000000000000010"; + when acca_right => + if acca(7) = '0' then + right <= "00000000" & acca(7 downto 0); + else + right <= "11111111" & acca(7 downto 0); + end if; + when accb_right => + if accb(7) = '0' then + right <= "00000000" & accb(7 downto 0); + else + right <= "11111111" & accb(7 downto 0); + end if; + when accd_right => + right <= acca & accb; + when md_sign5_right => + if md(4) = '0' then + right <= "00000000000" & md(4 downto 0); + else + right <= "11111111111" & md(4 downto 0); + end if; + when md_sign8_right => + if md(7) = '0' then + right <= "00000000" & md(7 downto 0); + else + right <= "11111111" & md(7 downto 0); + end if; + when others => +-- when md_right => + right <= md; + end case; +end process; + +---------------------------------- +-- +-- Arithmetic Logic Unit +-- +---------------------------------- + +alu: process( alu_ctrl, cc, left, right, out_alu, cc_out ) +variable valid_lo, valid_hi : boolean; +variable carry_in : std_logic; +variable daa_reg : std_logic_vector(7 downto 0); +begin + + case alu_ctrl is + when alu_adc | alu_sbc | + alu_rol8 | alu_ror8 => + carry_in := cc(CBIT); + when alu_asr8 => + carry_in := left(7); + when others => + carry_in := '0'; + end case; + + valid_lo := left(3 downto 0) <= 9; + valid_hi := left(7 downto 4) <= 9; + + -- + -- CBIT HBIT VHI VLO DAA + -- 0 0 0 0 66 (!VHI : hi_nybble>8) + -- 0 0 0 1 60 + -- 0 0 1 1 00 + -- 0 0 1 0 06 ( VHI : hi_nybble<=8) + -- + -- 0 1 1 0 06 + -- 0 1 1 1 06 + -- 0 1 0 1 66 + -- 0 1 0 0 66 + -- + -- 1 1 0 0 66 + -- 1 1 0 1 66 + -- 1 1 1 1 66 + -- 1 1 1 0 66 + -- + -- 1 0 1 0 66 + -- 1 0 1 1 60 + -- 1 0 0 1 60 + -- 1 0 0 0 66 + -- + -- 66 = (!VHI & !VLO) + (CBIT & HBIT) + (HBIT & !VHI) + (CBIT & !VLO) + -- = (CBIT & (HBIT + !VLO)) + (!VHI & (HBIT + !VLO)) + -- = (!VLO & (CBIT + !VHI)) + (HBIT & (CBIT + !VHI)) + -- 60 = (CBIT & !HBIT & VLO) + (!HBIT & !VHI & VLO) + -- = (!HBIT & VLO & (CBIT + !VHI)) + -- 06 = (!CBIT & VHI & (!VLO + VHI) + -- 00 = (!CBIT & !HBIT & VHI & VLO) + -- + if (cc(CBIT) = '0') then + -- CBIT=0 + if( cc(HBIT) = '0' ) then + -- HBIT=0 + if valid_lo then + -- lo <= 9 (no overflow in low nybble) + if valid_hi then + -- hi <= 9 (no overflow in either low or high nybble) + daa_reg := "00000000"; + else + -- hi > 9 (overflow in high nybble only) + daa_reg := "01100000"; + end if; + else + -- lo > 9 (overflow in low nybble) + -- + -- since there is already an overflow in the low nybble + -- you need to make room in the high nybble for the low nybble carry + -- so compare the high nybble with 8 rather than 9 + -- if the high nybble is 9 there will be an overflow on the high nybble + -- after the decimal adjust which means it will roll over to an invalid BCD digit + -- + if( left(7 downto 4) <= 8 ) then + -- hi <= 8 (overflow in low nybble only) + daa_reg := "00000110"; + else + -- hi > 8 (overflow in low and high nybble) + daa_reg := "01100110"; + end if; + end if; + else + -- HBIT=1 (overflow in low nybble) + if valid_hi then + -- hi <= 9 (overflow in low nybble only) + daa_reg := "00000110"; + else + -- hi > 9 (overflow in low and high nybble) + daa_reg := "01100110"; + end if; + end if; + else + -- CBIT=1 (carry => overflow in high nybble) + if ( cc(HBIT) = '0' )then + -- HBIT=0 (half carry clear => may or may not be an overflow in the low nybble) + if valid_lo then + -- lo <=9 (overflow in high nybble only) + daa_reg := "01100000"; + else + -- lo >9 (overflow in low and high nybble) + daa_reg := "01100110"; + end if; + else + -- HBIT=1 (overflow in low and high nybble) + daa_reg := "01100110"; + end if; + end if; + + case alu_ctrl is + when alu_add8 | alu_inc | + alu_add16 | alu_adc | alu_mul => + out_alu <= left + right + ("000000000000000" & carry_in); + when alu_sub8 | alu_dec | + alu_sub16 | alu_sbc => + out_alu <= left - right - ("000000000000000" & carry_in); + when alu_abx => + out_alu <= left + ("00000000" & right(7 downto 0)) ; + when alu_and => + out_alu <= left and right; -- and/bit + when alu_ora => + out_alu <= left or right; -- or + when alu_eor => + out_alu <= left xor right; -- eor/xor + when alu_lsl16 | alu_asl8 | alu_rol8 => + out_alu <= left(14 downto 0) & carry_in; -- rol8/asl8/lsl16 + when alu_lsr16 => + out_alu <= carry_in & left(15 downto 1); -- lsr16 + when alu_lsr8 | alu_asr8 | alu_ror8 => + out_alu <= "00000000" & carry_in & left(7 downto 1); -- ror8/asr8/lsr8 + when alu_neg => + out_alu <= right - left; -- neg (right=0) + when alu_com => + out_alu <= not left; + when alu_clr | alu_ld8 | alu_ld16 | alu_lea => + out_alu <= right; -- clr, ld + when alu_st8 | alu_st16 | alu_andcc | alu_orcc | alu_tfr => + out_alu <= left; + when alu_daa => + out_alu <= left + ("00000000" & daa_reg); + when alu_sex => + if left(7) = '0' then + out_alu <= "00000000" & left(7 downto 0); + else + out_alu <= "11111111" & left(7 downto 0); + end if; + when others => + out_alu <= left; -- nop + end case; + + -- + -- carry bit + -- + case alu_ctrl is + when alu_add8 | alu_adc => + cc_out(CBIT) <= (left(7) and right(7)) or + (left(7) and not out_alu(7)) or + (right(7) and not out_alu(7)); + when alu_sub8 | alu_sbc => + cc_out(CBIT) <= ((not left(7)) and right(7)) or + ((not left(7)) and out_alu(7)) or + (right(7) and out_alu(7)); + when alu_add16 => + cc_out(CBIT) <= (left(15) and right(15)) or + (left(15) and not out_alu(15)) or + (right(15) and not out_alu(15)); + when alu_sub16 => + cc_out(CBIT) <= ((not left(15)) and right(15)) or + ((not left(15)) and out_alu(15)) or + (right(15) and out_alu(15)); + when alu_ror8 | alu_lsr16 | alu_lsr8 | alu_asr8 => + cc_out(CBIT) <= left(0); + when alu_rol8 | alu_asl8 => + cc_out(CBIT) <= left(7); + when alu_lsl16 => + cc_out(CBIT) <= left(15); + when alu_com => + cc_out(CBIT) <= '1'; + when alu_neg | alu_clr => + cc_out(CBIT) <= out_alu(7) or out_alu(6) or out_alu(5) or out_alu(4) or + out_alu(3) or out_alu(2) or out_alu(1) or out_alu(0); + when alu_mul => + cc_out(CBIT) <= out_alu(7); + when alu_daa => + if ( daa_reg(7 downto 4) = "0110" ) then + cc_out(CBIT) <= '1'; + else + cc_out(CBIT) <= '0'; + end if; + when alu_andcc => + cc_out(CBIT) <= left(CBIT) and cc(CBIT); + when alu_orcc => + cc_out(CBIT) <= left(CBIT) or cc(CBIT); + when alu_tfr => + cc_out(CBIT) <= left(CBIT); + when others => + cc_out(CBIT) <= cc(CBIT); + end case; + -- + -- Zero flag + -- + case alu_ctrl is + when alu_add8 | alu_sub8 | + alu_adc | alu_sbc | + alu_and | alu_ora | alu_eor | + alu_inc | alu_dec | + alu_neg | alu_com | alu_clr | + alu_rol8 | alu_ror8 | alu_asr8 | alu_asl8 | alu_lsr8 | + alu_ld8 | alu_st8 | alu_sex | alu_daa => + cc_out(ZBIT) <= not( out_alu(7) or out_alu(6) or out_alu(5) or out_alu(4) or + out_alu(3) or out_alu(2) or out_alu(1) or out_alu(0) ); + when alu_add16 | alu_sub16 | alu_mul | + alu_lsl16 | alu_lsr16 | + alu_ld16 | alu_st16 | alu_lea => + cc_out(ZBIT) <= not( out_alu(15) or out_alu(14) or out_alu(13) or out_alu(12) or + out_alu(11) or out_alu(10) or out_alu(9) or out_alu(8) or + out_alu(7) or out_alu(6) or out_alu(5) or out_alu(4) or + out_alu(3) or out_alu(2) or out_alu(1) or out_alu(0) ); + when alu_andcc => + cc_out(ZBIT) <= left(ZBIT) and cc(ZBIT); + when alu_orcc => + cc_out(ZBIT) <= left(ZBIT) or cc(ZBIT); + when alu_tfr => + cc_out(ZBIT) <= left(ZBIT); + when others => + cc_out(ZBIT) <= cc(ZBIT); + end case; + + -- + -- negative flag + -- + case alu_ctrl is + when alu_add8 | alu_sub8 | + alu_adc | alu_sbc | + alu_and | alu_ora | alu_eor | + alu_rol8 | alu_ror8 | alu_asr8 | alu_asl8 | alu_lsr8 | + alu_inc | alu_dec | alu_neg | alu_com | alu_clr | + alu_ld8 | alu_st8 | alu_sex | alu_daa => + cc_out(NBIT) <= out_alu(7); + when alu_add16 | alu_sub16 | + alu_lsl16 | alu_lsr16 | + alu_ld16 | alu_st16 => + cc_out(NBIT) <= out_alu(15); + when alu_andcc => + cc_out(NBIT) <= left(NBIT) and cc(NBIT); + when alu_orcc => + cc_out(NBIT) <= left(NBIT) or cc(NBIT); + when alu_tfr => + cc_out(NBIT) <= left(NBIT); + when others => + cc_out(NBIT) <= cc(NBIT); + end case; + + -- + -- Interrupt mask flag + -- + case alu_ctrl is + when alu_andcc => + cc_out(IBIT) <= left(IBIT) and cc(IBIT); + when alu_orcc => + cc_out(IBIT) <= left(IBIT) or cc(IBIT); + when alu_tfr => + cc_out(IBIT) <= left(IBIT); + when alu_seif | alu_sei => + cc_out(IBIT) <= '1'; + when others => + cc_out(IBIT) <= cc(IBIT); -- interrupt mask + end case; + + -- + -- Half Carry flag + -- + case alu_ctrl is + when alu_add8 | alu_adc => + cc_out(HBIT) <= (left(3) and right(3)) or + (right(3) and not out_alu(3)) or + (left(3) and not out_alu(3)); + when alu_andcc => + cc_out(HBIT) <= left(HBIT) and cc(HBIT); + when alu_orcc => + cc_out(HBIT) <= left(HBIT) or cc(HBIT); + when alu_tfr => + cc_out(HBIT) <= left(HBIT); + when others => + cc_out(HBIT) <= cc(HBIT); + end case; + + -- + -- Overflow flag + -- + case alu_ctrl is + when alu_add8 | alu_adc => + cc_out(VBIT) <= (left(7) and right(7) and (not out_alu(7))) or + ((not left(7)) and (not right(7)) and out_alu(7)); + when alu_sub8 | alu_sbc => + cc_out(VBIT) <= (left(7) and (not right(7)) and (not out_alu(7))) or + ((not left(7)) and right(7) and out_alu(7)); + when alu_add16 => + cc_out(VBIT) <= (left(15) and right(15) and (not out_alu(15))) or + ((not left(15)) and (not right(15)) and out_alu(15)); + when alu_sub16 => + cc_out(VBIT) <= (left(15) and (not right(15)) and (not out_alu(15))) or + ((not left(15)) and right(15) and out_alu(15)); + when alu_inc => + cc_out(VBIT) <= ((not left(7)) and left(6) and left(5) and left(4) and + left(3) and left(2) and left(1) and left(0)); + when alu_dec | alu_neg => + cc_out(VBIT) <= (left(7) and (not left(6)) and (not left(5)) and (not left(4)) and + (not left(3)) and (not left(2)) and (not left(1)) and (not left(0))); +-- 6809 Programming reference manual says +-- V not affected by ASR, LSR and ROR +-- This is different to the 6800 +-- John Kent 6th June 2006 +-- when alu_asr8 => +-- cc_out(VBIT) <= left(0) xor left(7); +-- when alu_lsr8 | alu_lsr16 => +-- cc_out(VBIT) <= left(0); +-- when alu_ror8 => +-- cc_out(VBIT) <= left(0) xor cc(CBIT); + when alu_lsl16 => + cc_out(VBIT) <= left(15) xor left(14); + when alu_rol8 | alu_asl8 => + cc_out(VBIT) <= left(7) xor left(6); +-- +-- 11th July 2006 - John Kent +-- What DAA does with V is anyones guess +-- It is undefined in the 6809 programming manual +-- + when alu_daa => + cc_out(VBIT) <= left(7) xor out_alu(7) xor cc(CBIT); +-- CLR resets V Bit +-- John Kent 6th June 2006 + when alu_and | alu_ora | alu_eor | alu_com | alu_clr | + alu_st8 | alu_st16 | alu_ld8 | alu_ld16 | alu_sex => + cc_out(VBIT) <= '0'; + when alu_andcc => + cc_out(VBIT) <= left(VBIT) and cc(VBIT); + when alu_orcc => + cc_out(VBIT) <= left(VBIT) or cc(VBIT); + when alu_tfr => + cc_out(VBIT) <= left(VBIT); + when others => + cc_out(VBIT) <= cc(VBIT); + end case; + + case alu_ctrl is + when alu_andcc => + cc_out(FBIT) <= left(FBIT) and cc(FBIT); + when alu_orcc => + cc_out(FBIT) <= left(FBIT) or cc(FBIT); + when alu_tfr => + cc_out(FBIT) <= left(FBIT); + when alu_seif => + cc_out(FBIT) <= '1'; + when others => + cc_out(FBIT) <= cc(FBIT); + end case; + + case alu_ctrl is + when alu_andcc => + cc_out(EBIT) <= left(EBIT) and cc(EBIT); + when alu_orcc => + cc_out(EBIT) <= left(EBIT) or cc(EBIT); + when alu_tfr => + cc_out(EBIT) <= left(EBIT); + when alu_see => + cc_out(EBIT) <= '1'; + when alu_cle => + cc_out(EBIT) <= '0'; + when others => + cc_out(EBIT) <= cc(EBIT); + end case; +end process; + +------------------------------------ +-- +-- state sequencer +-- +------------------------------------ +process( state, saved_state, + op_code, pre_code, + cc, ea, md, iv, fic, halt, + nmi_req, firq, irq, lic ) +variable cond_true : boolean; -- variable used to evaluate coditional branches +begin + cond_true := (1=1); + ba <= '0'; + bs <= '0'; + lic <= '0'; + opfetch <= '0'; + iv_ctrl <= latch_iv; + -- Registers preserved + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + dp_ctrl <= latch_dp; + ix_ctrl <= latch_ix; + iy_ctrl <= latch_iy; + up_ctrl <= latch_up; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + ea_ctrl <= latch_ea; + op_ctrl <= latch_op; + pre_ctrl <= latch_pre; + -- ALU Idle + left_ctrl <= pc_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + -- Bus idle + addr_ctrl <= idle_ad; + dout_ctrl <= cc_dout; + -- Next State Fetch + st_ctrl <= idle_st; + return_state <= fetch_state; + next_state <= fetch_state; + + case state is + when reset_state => -- released from reset + -- reset the registers + iv_ctrl <= reset_iv; + op_ctrl <= reset_op; + pre_ctrl <= reset_pre; + cc_ctrl <= reset_cc; + acca_ctrl <= reset_acca; + accb_ctrl <= reset_accb; + dp_ctrl <= reset_dp; + ix_ctrl <= reset_ix; + iy_ctrl <= reset_iy; + up_ctrl <= reset_up; + sp_ctrl <= reset_sp; + pc_ctrl <= reset_pc; + ea_ctrl <= reset_ea; + md_ctrl <= reset_md; + st_ctrl <= reset_st; + next_state <= vect_hi_state; + + -- + -- Jump via interrupt vector + -- iv holds interrupt type + -- fetch PC hi from vector location + -- + when vect_hi_state => + -- fetch pc low interrupt vector + pc_ctrl <= pull_hi_pc; + addr_ctrl <= int_hi_ad; + bs <= '1'; + next_state <= vect_lo_state; + + -- + -- jump via interrupt vector + -- iv holds vector type + -- fetch PC lo from vector location + -- + when vect_lo_state => + -- fetch the vector low byte + pc_ctrl <= pull_lo_pc; + addr_ctrl <= int_lo_ad; + bs <= '1'; + next_state <= fetch_state; + + when vect_idle_state => + -- + -- Last Instruction Cycle for SWI, SWI2 & SWI3 + -- + if op_code = "00111111" then + lic <= '1'; + end if; + next_state <= fetch_state; + + -- + -- Here to fetch an instruction + -- PC points to opcode + -- + when fetch_state => + -- fetch the op code + opfetch <= '1'; + op_ctrl <= fetch_op; + pre_ctrl <= fetch_pre; + ea_ctrl <= reset_ea; + -- Fetch op code + addr_ctrl <= fetch_ad; + -- Advance the PC to fetch next instruction byte + pc_ctrl <= incr_pc; + next_state <= decode1_state; + + -- + -- Here to decode instruction + -- and fetch next byte of intruction + -- whether it be necessary or not + -- + when decode1_state => + -- fetch first byte of address or immediate data + ea_ctrl <= fetch_first_ea; + md_ctrl <= fetch_first_md; + addr_ctrl <= fetch_ad; + case op_code(7 downto 4) is + -- + -- direct single op (2 bytes) + -- 6809 => 6 cycles + -- cpu09 => 5 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 ea_hi=dp / ea_lo=(pc) / pc=pc+1 + -- 3 md_lo=(ea) / pc=pc + -- 4 alu_left=md / md=alu_out / pc=pc + -- 5 (ea)=md_lo / pc=pc + -- + -- Exception is JMP + -- 6809 => 3 cycles + -- cpu09 => 3 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 ea_hi=dp / ea_lo=(pc) / pc=pc+1 + -- 3 pc=ea + -- + when "0000" => + -- advance the PC + pc_ctrl <= incr_pc; + + case op_code(3 downto 0) is + when "1110" => -- jmp + next_state <= jmp_state; + + when "1111" => -- clr + next_state <= single_op_exec_state; + + when others => + next_state <= single_op_read_state; + + end case; + + -- acca / accb inherent instructions + when "0001" => + case op_code(3 downto 0) is + -- + -- Page2 pre byte + -- pre=(pc) / pc=pc+1 + -- op=(pc) / pc=pc+1 + -- + when "0000" => -- page2 + opfetch <= '1'; + op_ctrl <= fetch_op; + -- advance pc + pc_ctrl <= incr_pc; + next_state <= decode2_state; + + -- + -- Page3 pre byte + -- pre=(pc) / pc=pc+1 + -- op=(pc) / pc=pc+1 + -- + when "0001" => -- page3 + opfetch <= '1'; + op_ctrl <= fetch_op; + -- advance pc + pc_ctrl <= incr_pc; + next_state <= decode3_state; + + -- + -- nop - No operation ( 1 byte ) + -- 6809 => 2 cycles + -- cpu09 => 2 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 decode + -- + when "0010" => -- nop + lic <= '1'; + next_state <= fetch_state; + + -- + -- sync - halt execution until an interrupt is received + -- interrupt may be NMI, IRQ or FIRQ + -- program execution continues if the + -- interrupt is asserted for 3 clock cycles + -- note that registers are not pushed onto the stack + -- CPU09 => Interrupts need only be asserted for one clock cycle + -- + when "0011" => -- sync + next_state <= sync_state; + + -- + -- lbra -- long branch (3 bytes) + -- 6809 => 5 cycles + -- cpu09 => 4 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 md_hi=sign(pc) / md_lo=(pc) / pc=pc+1 + -- 3 md_hi=md_lo / md_lo=(pc) / pc=pc+1 + -- 4 pc=pc+md + -- + when "0110" => + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= lbranch_state; + + -- + -- lbsr - long branch to subroutine (3 bytes) + -- 6809 => 9 cycles + -- cpu09 => 6 cycles + -- 1 op=(pc) /pc=pc+1 + -- 2 md_hi=sign(pc) / md_lo=(pc) / pc=pc+1 / sp=sp-1 + -- 3 md_hi=md_lo / md_lo=(pc) / pc=pc+1 + -- 4 (sp)= pc_lo / sp=sp-1 / pc=pc + -- 5 (sp)=pc_hi / pc=pc + -- 6 pc=pc+md + -- + when "0111" => + -- pre decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= lbranch_state; + + -- + -- Decimal Adjust Accumulator + -- + when "1001" => -- daa + left_ctrl <= acca_left; + right_ctrl <= accb_right; + alu_ctrl <= alu_daa; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + lic <= '1'; + next_state <= fetch_state; + + -- + -- OR Condition Codes + -- + when "1010" => -- orcc + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= orcc_state; + + -- + -- AND Condition Codes + -- + when "1100" => -- andcc + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= andcc_state; + + -- + -- Sign Extend + -- + when "1101" => -- sex + left_ctrl <= accb_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_sex; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + lic <= '1'; + next_state <= fetch_state; + + -- + -- Exchange Registers + -- + when "1110" => -- exg + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= exg_state; + + -- + -- Transfer Registers + -- + when "1111" => -- tfr + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= tfr_state; + + when others => + -- increment the pc + pc_ctrl <= incr_pc; + lic <= '1'; + next_state <= fetch_state; + end case; + + -- + -- Short branch conditional + -- 6809 => always 3 cycles + -- cpu09 => always = 3 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 md_hi=sign(pc) / md_lo=(pc) / pc=pc+1 / test cc + -- 3 if cc tru pc=pc+md else pc=pc + -- + when "0010" => -- branch conditional + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= sbranch_state; + + -- + -- Single byte stack operators + -- Do not advance PC + -- + when "0011" => + -- + -- lea - load effective address (2+ bytes) + -- 6809 => 4 cycles + addressing mode + -- cpu09 => 4 cycles + addressing mode + -- 1 op=(pc) / pc=pc+1 + -- 2 md_lo=(pc) / pc=pc+1 + -- 3 calculate ea + -- 4 ix/iy/sp/up = ea + -- + case op_code(3 downto 0) is + when "0000" | -- leax + "0001" | -- leay + "0010" | -- leas + "0011" => -- leau + -- advance PC + pc_ctrl <= incr_pc; + st_ctrl <= push_st; + return_state <= lea_state; + next_state <= indexed_state; + + -- + -- pshs - push registers onto sp stack + -- 6809 => 5 cycles + registers + -- cpu09 => 3 cycles + registers + -- 1 op=(pc) / pc=pc+1 + -- 2 ea_lo=(pc) / pc=pc+1 + -- 3 if ea(7 downto 0) != "00000000" then sp=sp-1 + -- 4 if ea(7) = 1 (sp)=pcl, sp=sp-1 + -- 5 if ea(7) = 1 (sp)=pch + -- if ea(6 downto 0) != "0000000" then sp=sp-1 + -- 6 if ea(6) = 1 (sp)=upl, sp=sp-1 + -- 7 if ea(6) = 1 (sp)=uph + -- if ea(5 downto 0) != "000000" then sp=sp-1 + -- 8 if ea(5) = 1 (sp)=iyl, sp=sp-1 + -- 9 if ea(5) = 1 (sp)=iyh + -- if ea(4 downto 0) != "00000" then sp=sp-1 + -- 10 if ea(4) = 1 (sp)=ixl, sp=sp-1 + -- 11 if ea(4) = 1 (sp)=ixh + -- if ea(3 downto 0) != "0000" then sp=sp-1 + -- 12 if ea(3) = 1 (sp)=dp + -- if ea(2 downto 0) != "000" then sp=sp-1 + -- 13 if ea(2) = 1 (sp)=accb + -- if ea(1 downto 0) != "00" then sp=sp-1 + -- 14 if ea(1) = 1 (sp)=acca + -- if ea(0 downto 0) != "0" then sp=sp-1 + -- 15 if ea(0) = 1 (sp)=cc + -- + when "0100" => -- pshs + -- advance PC + pc_ctrl <= incr_pc; + next_state <= pshs_state; + + -- + -- puls - pull registers of sp stack + -- 6809 => 5 cycles + registers + -- cpu09 => 3 cycles + registers + -- + when "0101" => -- puls + -- advance PC + pc_ctrl <= incr_pc; + next_state <= puls_state; + + -- + -- pshu - push registers onto up stack + -- 6809 => 5 cycles + registers + -- cpu09 => 3 cycles + registers + -- + when "0110" => -- pshu + -- advance PC + pc_ctrl <= incr_pc; + next_state <= pshu_state; + + -- + -- pulu - pull registers of up stack + -- 6809 => 5 cycles + registers + -- cpu09 => 3 cycles + registers + -- + when "0111" => -- pulu + -- advance PC + pc_ctrl <= incr_pc; + next_state <= pulu_state; + + -- + -- rts - return from subroutine + -- 6809 => 5 cycles + -- cpu09 => 4 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 decode op + -- 3 pc_hi = (sp) / sp=sp+1 + -- 4 pc_lo = (sp) / sp=sp+1 + -- + when "1001" => + next_state <= pull_return_hi_state; + + -- + -- ADD accb to index register + -- *** Note: this is an unsigned addition. + -- does not affect any condition codes + -- 6809 => 3 cycles + -- cpu09 => 2 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 alu_left=ix / alu_right=accb / ix=alu_out / pc=pc + -- + when "1010" => -- abx + lic <= '1'; + left_ctrl <= ix_left; + right_ctrl <= accb_right; + alu_ctrl <= alu_abx; + ix_ctrl <= load_ix; + next_state <= fetch_state; + + -- + -- Return From Interrupt + -- + when "1011" => -- rti + next_state <= rti_cc_state; + + -- + -- CWAI + -- + when "1100" => -- cwai #$ + -- pre decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- increment pc + pc_ctrl <= incr_pc; + next_state <= cwai_state; + + -- + -- MUL Multiply + -- + when "1101" => -- mul + next_state <= mul_state; + + -- + -- SWI Software Interrupt + -- + when "1111" => -- swi + -- predecrement SP + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + iv_ctrl <= swi_iv; + st_ctrl <= push_st; + return_state <= int_swimask_state; + next_state <= int_entire_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + -- + -- Accumulator A Single operand + -- source = acca, dest = acca + -- Do not advance PC + -- Typically 2 cycles 1 bytes + -- 1 opcode fetch + -- 2 post byte fetch / instruction decode + -- Note that there is no post byte + -- so do not advance PC in decode cycle + -- Re-run opcode fetch cycle after decode + -- + when "0100" => -- acca single op + left_ctrl <= acca_left; + case op_code(3 downto 0) is + + when "0000" => -- neg + right_ctrl <= zero_right; + alu_ctrl <= alu_neg; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "0011" => -- com + right_ctrl <= zero_right; + alu_ctrl <= alu_com; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "0100" => -- lsr + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "0110" => -- ror + right_ctrl <= zero_right; + alu_ctrl <= alu_ror8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "0111" => -- asr + right_ctrl <= zero_right; + alu_ctrl <= alu_asr8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "1000" => -- asl + right_ctrl <= zero_right; + alu_ctrl <= alu_asl8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "1001" => -- rol + right_ctrl <= zero_right; + alu_ctrl <= alu_rol8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "1010" => -- dec + right_ctrl <= one_right; + alu_ctrl <= alu_dec; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "1011" => -- undefined + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + acca_ctrl <= latch_acca; + cc_ctrl <= latch_cc; + + when "1100" => -- inc + right_ctrl <= one_right; + alu_ctrl <= alu_inc; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when "1101" => -- tst + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + acca_ctrl <= latch_acca; + cc_ctrl <= load_cc; + + when "1110" => -- jmp (not defined) + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + acca_ctrl <= latch_acca; + cc_ctrl <= latch_cc; + + when "1111" => -- clr + right_ctrl <= zero_right; + alu_ctrl <= alu_clr; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + + when others => + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + acca_ctrl <= latch_acca; + cc_ctrl <= latch_cc; + + end case; + lic <= '1'; + next_state <= fetch_state; + + -- + -- Single Operand accb + -- source = accb, dest = accb + -- Typically 2 cycles 1 bytes + -- 1 opcode fetch + -- 2 post byte fetch / instruction decode + -- Note that there is no post byte + -- so do not advance PC in decode cycle + -- Re-run opcode fetch cycle after decode + -- + when "0101" => + left_ctrl <= accb_left; + case op_code(3 downto 0) is + when "0000" => -- neg + right_ctrl <= zero_right; + alu_ctrl <= alu_neg; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "0011" => -- com + right_ctrl <= zero_right; + alu_ctrl <= alu_com; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "0100" => -- lsr + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "0110" => -- ror + right_ctrl <= zero_right; + alu_ctrl <= alu_ror8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "0111" => -- asr + right_ctrl <= zero_right; + alu_ctrl <= alu_asr8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "1000" => -- asl + right_ctrl <= zero_right; + alu_ctrl <= alu_asl8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "1001" => -- rol + right_ctrl <= zero_right; + alu_ctrl <= alu_rol8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "1010" => -- dec + right_ctrl <= one_right; + alu_ctrl <= alu_dec; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "1011" => -- undefined + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + accb_ctrl <= latch_accb; + cc_ctrl <= latch_cc; + + when "1100" => -- inc + right_ctrl <= one_right; + alu_ctrl <= alu_inc; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when "1101" => -- tst + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + accb_ctrl <= latch_accb; + cc_ctrl <= load_cc; + + when "1110" => -- jmp (undefined) + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + accb_ctrl <= latch_accb; + cc_ctrl <= latch_cc; + + when "1111" => -- clr + right_ctrl <= zero_right; + alu_ctrl <= alu_clr; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + + when others => + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + accb_ctrl <= latch_accb; + cc_ctrl <= latch_cc; + end case; + lic <= '1'; + next_state <= fetch_state; + + -- + -- Single operand indexed + -- Two byte instruction so advance PC + -- EA should hold index offset + -- + when "0110" => -- indexed single op + -- increment the pc + pc_ctrl <= incr_pc; + st_ctrl <= push_st; + + case op_code(3 downto 0) is + when "1110" => -- jmp + return_state <= jmp_state; + + when "1111" => -- clr + return_state <= single_op_exec_state; + + when others => + return_state <= single_op_read_state; + + end case; + next_state <= indexed_state; + + -- + -- Single operand extended addressing + -- three byte instruction so advance the PC + -- Low order EA holds high order address + -- + when "0111" => -- extended single op + -- increment PC + pc_ctrl <= incr_pc; + st_ctrl <= push_st; + + case op_code(3 downto 0) is + when "1110" => -- jmp + return_state <= jmp_state; + + when "1111" => -- clr + return_state <= single_op_exec_state; + + when others => + return_state <= single_op_read_state; + + end case; + next_state <= extended_state; + + when "1000" => -- acca immediate + -- increment the pc + pc_ctrl <= incr_pc; + + case op_code(3 downto 0) is + when "0011" | -- subd # + "1100" | -- cmpx # + "1110" => -- ldx # + next_state <= imm16_state; + + -- + -- bsr offset - Branch to subroutine (2 bytes) + -- 6809 => 7 cycles + -- cpu09 => 5 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 md_hi=sign(pc) / md_lo=(pc) / sp=sp-1 / pc=pc+1 + -- 3 (sp)=pc_lo / sp=sp-1 + -- 4 (sp)=pc_hi + -- 5 pc=pc+md + -- + when "1101" => -- bsr + -- pre decrement SP + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- + st_ctrl <= push_st; + return_state <= sbranch_state; + next_state <= push_return_lo_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1001" => -- acca direct + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- subd + "1100" | -- cmpx + "1110" => -- ldx + next_state <= dual_op_read16_state; + + when "0111" => -- sta direct + next_state <= dual_op_write8_state; + + -- + -- jsr direct - Jump to subroutine in direct page (2 bytes) + -- 6809 => 7 cycles + -- cpu09 => 5 cycles + -- 1 op=(pc) / pc=pc+1 + -- 2 ea_hi=0 / ea_lo=(pc) / sp=sp-1 / pc=pc+1 + -- 3 (sp)=pc_lo / sp=sp-1 + -- 4 (sp)=pc_hi + -- 5 pc=ea + -- + when "1101" => -- jsr direct + -- pre decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- + st_ctrl <= push_st; + return_state <= jmp_state; + next_state <= push_return_lo_state; + + + when "1111" => -- stx direct + -- idle ALU + left_ctrl <= ix_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + sp_ctrl <= latch_sp; + next_state <= dual_op_write16_state; + + when others => + next_state <= dual_op_read8_state; + + end case; + + when "1010" => -- acca indexed + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- subd + "1100" | -- cmpx + "1110" => -- ldx + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= indexed_state; + + when "0111" => -- staa ,x + st_ctrl <= push_st; + return_state <= dual_op_write8_state; + next_state <= indexed_state; + + when "1101" => -- jsr ,x + -- DO NOT pre decrement SP + st_ctrl <= push_st; + return_state <= jsr_state; + next_state <= indexed_state; + + when "1111" => -- stx ,x + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= indexed_state; + + when others => + st_ctrl <= push_st; + return_state <= dual_op_read8_state; + next_state <= indexed_state; + + end case; + + when "1011" => -- acca extended + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- subd + "1100" | -- cmpx + "1110" => -- ldx + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= extended_state; + + when "0111" => -- staa > + st_ctrl <= push_st; + return_state <= dual_op_write8_state; + next_state <= extended_state; + + when "1101" => -- jsr >extended + -- DO NOT pre decrement sp + st_ctrl <= push_st; + return_state <= jsr_state; + next_state <= extended_state; + + when "1111" => -- stx > + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= extended_state; + + when others => + st_ctrl <= push_st; + return_state <= dual_op_read8_state; + next_state <= extended_state; + + end case; + + when "1100" => -- accb immediate + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- addd # + "1100" | -- ldd # + "1110" => -- ldu # + next_state <= imm16_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1101" => -- accb direct + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- addd + "1100" | -- ldd + "1110" => -- ldu + next_state <= dual_op_read16_state; + + when "0111" => -- stab direct + next_state <= dual_op_write8_state; + + when "1101" => -- std direct + next_state <= dual_op_write16_state; + + when "1111" => -- stu direct + next_state <= dual_op_write16_state; + + when others => + next_state <= dual_op_read8_state; + + end case; + + when "1110" => -- accb indexed + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- addd + "1100" | -- ldd + "1110" => -- ldu + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= indexed_state; + + when "0111" => -- stab indexed + st_ctrl <= push_st; + return_state <= dual_op_write8_state; + next_state <= indexed_state; + + when "1101" => -- std indexed + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= indexed_state; + + when "1111" => -- stu indexed + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= indexed_state; + + when others => + st_ctrl <= push_st; + return_state <= dual_op_read8_state; + next_state <= indexed_state; + + end case; + + when "1111" => -- accb extended + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- addd + "1100" | -- ldd + "1110" => -- ldu + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= extended_state; + + when "0111" => -- stab extended + st_ctrl <= push_st; + return_state <= dual_op_write8_state; + next_state <= extended_state; + + when "1101" => -- std extended + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= extended_state; + + when "1111" => -- stu extended + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= extended_state; + + when others => + st_ctrl <= push_st; + return_state <= dual_op_read8_state; + next_state <= extended_state; + end case; + -- + -- not sure why I need this + -- + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + -- + -- Here to decode prefix 2 instruction + -- and fetch next byte of intruction + -- whether it be necessary or not + -- + when decode2_state => + -- fetch first byte of address or immediate data + ea_ctrl <= fetch_first_ea; + md_ctrl <= fetch_first_md; + addr_ctrl <= fetch_ad; + case op_code(7 downto 4) is + -- + -- lbcc -- long branch conditional + -- 6809 => branch 6 cycles, no branch 5 cycles + -- cpu09 => always 5 cycles + -- 1 pre=(pc) / pc=pc+1 + -- 2 op=(pc) / pc=pc+1 + -- 3 md_hi=sign(pc) / md_lo=(pc) / pc=pc+1 + -- 4 md_hi=md_lo / md_lo=(pc) / pc=pc+1 + -- 5 if cond pc=pc+md else pc=pc + -- + when "0010" => + -- increment the pc + pc_ctrl <= incr_pc; + next_state <= lbranch_state; + + -- + -- Single byte stack operators + -- Do not advance PC + -- + when "0011" => + case op_code(3 downto 0) is + when "1111" => -- swi 2 + -- predecrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + iv_ctrl <= swi2_iv; + st_ctrl <= push_st; + return_state <= vect_hi_state; + next_state <= int_entire_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + when "1000" => -- acca immediate + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpd # + "1100" | -- cmpy # + "1110" => -- ldy # + next_state <= imm16_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1001" => -- acca direct + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpd < + "1100" | -- cmpy < + "1110" => -- ldy < + next_state <= dual_op_read16_state; + + when "1111" => -- sty < + next_state <= dual_op_write16_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1010" => -- acca indexed + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpd ,ind + "1100" | -- cmpy ,ind + "1110" => -- ldy ,ind + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= indexed_state; + + when "1111" => -- sty ,ind + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= indexed_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + when "1011" => -- acca extended + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpd < + "1100" | -- cmpy < + "1110" => -- ldy < + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= extended_state; + + when "1111" => -- sty > + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= extended_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1100" => -- accb immediate + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- undef # + "1100" | -- undef # + "1110" => -- lds # + next_state <= imm16_state; + + when others => + next_state <= fetch_state; + + end case; + + when "1101" => -- accb direct + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- undef < + "1100" | -- undef < + "1110" => -- lds < + next_state <= dual_op_read16_state; + + when "1111" => -- sts < + next_state <= dual_op_write16_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1110" => -- accb indexed + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- undef ,ind + "1100" | -- undef ,ind + "1110" => -- lds ,ind + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= indexed_state; + + when "1111" => -- sts ,ind + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= indexed_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1111" => -- accb extended + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- undef > + "1100" | -- undef > + "1110" => -- lds > + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= extended_state; + + when "1111" => -- sts > + st_ctrl <= push_st; + return_state <= dual_op_write16_state; + next_state <= extended_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + -- + -- Here to decode instruction + -- and fetch next byte of intruction + -- whether it be necessary or not + -- + when decode3_state => + ea_ctrl <= fetch_first_ea; + md_ctrl <= fetch_first_md; + addr_ctrl <= fetch_ad; + dout_ctrl <= md_lo_dout; + case op_code(7 downto 4) is + -- + -- Single byte stack operators + -- Do not advance PC + -- + when "0011" => + case op_code(3 downto 0) is + when "1111" => -- swi3 + -- predecrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + iv_ctrl <= swi3_iv; + st_ctrl <= push_st; + return_state <= vect_hi_state; + next_state <= int_entire_state; + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + when "1000" => -- acca immediate + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpu # + "1100" | -- cmps # + "1110" => -- undef # + next_state <= imm16_state; + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + when "1001" => -- acca direct + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpu < + "1100" | -- cmps < + "1110" => -- undef < + next_state <= dual_op_read16_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1010" => -- acca indexed + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpu ,X + "1100" | -- cmps ,X + "1110" => -- undef ,X + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= indexed_state; + + when others => + lic <= '1'; + next_state <= fetch_state; + + end case; + + when "1011" => -- acca extended + -- increment the pc + pc_ctrl <= incr_pc; + case op_code(3 downto 0) is + when "0011" | -- cmpu > + "1100" | -- cmps > + "1110" => -- undef > + st_ctrl <= push_st; + return_state <= dual_op_read16_state; + next_state <= extended_state; + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + + -- + -- here if ea holds low byte + -- Direct + -- Extended + -- Indexed + -- read memory location + -- + when single_op_read_state => + -- read memory into md + md_ctrl <= fetch_first_md; + addr_ctrl <= read_ad; + dout_ctrl <= md_lo_dout; + next_state <= single_op_exec_state; + + when single_op_exec_state => + case op_code(3 downto 0) is + when "0000" => -- neg + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_neg; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "0011" => -- com + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_com; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "0100" => -- lsr + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "0110" => -- ror + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_ror8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "0111" => -- asr + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_asr8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "1000" => -- asl + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_asl8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "1001" => -- rol + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_rol8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "1010" => -- dec + left_ctrl <= md_left; + right_ctrl <= one_right; + alu_ctrl <= alu_dec; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "1011" => -- undefined + lic <= '1'; + next_state <= fetch_state; + when "1100" => -- inc + left_ctrl <= md_left; + right_ctrl <= one_right; + alu_ctrl <= alu_inc; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when "1101" => -- tst + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + lic <= '1'; + next_state <= fetch_state; + when "1110" => -- jmp + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_ld16; + pc_ctrl <= load_pc; + lic <= '1'; + next_state <= fetch_state; + when "1111" => -- clr + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_clr; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= single_op_write_state; + when others => + lic <= '1'; + next_state <= fetch_state; + end case; + -- + -- single operand 8 bit write + -- Write low 8 bits of ALU output + -- EA holds address + -- MD holds data + -- + when single_op_write_state => + -- write ALU low byte output + addr_ctrl <= write_ad; + dout_ctrl <= md_lo_dout; + lic <= '1'; + next_state <= fetch_state; + + -- + -- here if ea holds address of low byte + -- read memory location + -- + when dual_op_read8_state => + -- read first data byte from ea + md_ctrl <= fetch_first_md; + addr_ctrl <= read_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- Here to read a 16 bit value into MD + -- pointed to by the EA register + -- The first byte is read + -- and the EA is incremented + -- + when dual_op_read16_state => + -- increment the effective address + left_ctrl <= ea_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- read the high byte of the 16 bit data + md_ctrl <= fetch_first_md; + addr_ctrl <= read_ad; + next_state <= dual_op_read16_2_state; + + -- + -- here to read the second byte + -- pointed to by EA into MD + -- + when dual_op_read16_2_state => + -- read the low byte of the 16 bit data + md_ctrl <= fetch_next_md; + addr_ctrl <= read_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- 16 bit Write state + -- EA hold address of memory to write to + -- Advance the effective address in ALU + -- decode op_code to determine which + -- register to write + -- + when dual_op_write16_state => + -- increment the effective address + left_ctrl <= ea_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- write the ALU hi byte at ea + addr_ctrl <= write_ad; + if op_code(6) = '0' then + case op_code(3 downto 0) is + when "1111" => -- stx / sty + case pre_code is + when "00010000" => -- page 2 -- sty + dout_ctrl <= iy_hi_dout; + when others => -- page 1 -- stx + dout_ctrl <= ix_hi_dout; + end case; + when others => + dout_ctrl <= md_hi_dout; + end case; + else + case op_code(3 downto 0) is + when "1101" => -- std + dout_ctrl <= acca_dout; -- acca is high byte of ACCD + when "1111" => -- stu / sts + case pre_code is + when "00010000" => -- page 2 -- sts + dout_ctrl <= sp_hi_dout; + when others => -- page 1 -- stu + dout_ctrl <= up_hi_dout; + end case; + when others => + dout_ctrl <= md_hi_dout; + end case; + end if; + next_state <= dual_op_write8_state; + + -- + -- Dual operand 8 bit write + -- Write 8 bit accumulator + -- or low byte of 16 bit register + -- EA holds address + -- decode opcode to determine + -- which register to apply to the bus + -- Also set the condition codes here + -- + when dual_op_write8_state => + if op_code(6) = '0' then + case op_code(3 downto 0) is + when "0111" => -- sta + dout_ctrl <= acca_dout; + when "1111" => -- stx / sty + case pre_code is + when "00010000" => -- page 2 -- sty + dout_ctrl <= iy_lo_dout; + when others => -- page 1 -- stx + dout_ctrl <= ix_lo_dout; + end case; + when others => + dout_ctrl <= md_lo_dout; + end case; + else + case op_code(3 downto 0) is + when "0111" => -- stb + dout_ctrl <= accb_dout; + when "1101" => -- std + dout_ctrl <= accb_dout; -- accb is low byte of accd + when "1111" => -- stu / sts + case pre_code is + when "00010000" => -- page 2 -- sts + dout_ctrl <= sp_lo_dout; + when others => -- page 1 -- stu + dout_ctrl <= up_lo_dout; + end case; + when others => + dout_ctrl <= md_lo_dout; + end case; + end if; + -- write ALU low byte output + addr_ctrl <= write_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- 16 bit immediate addressing mode + -- + when imm16_state => + -- increment pc + pc_ctrl <= incr_pc; + -- fetch next immediate byte + md_ctrl <= fetch_next_md; + addr_ctrl <= fetch_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- md & ea holds 8 bit index offset + -- calculate the effective memory address + -- using the alu + -- + when indexed_state => + -- + -- decode indexing mode + -- + if md(7) = '0' then + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= md_sign5_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + next_state <= saved_state; + + else + case md(3 downto 0) is + when "0000" => -- ,R+ + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + left_ctrl <= sp_left; + end case; + -- + right_ctrl <= zero_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + next_state <= postincr1_state; + + when "0001" => -- ,R++ + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + next_state <= postincr2_state; + + when "0010" => -- ,-R + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + ix_ctrl <= load_ix; + when "01" => + left_ctrl <= iy_left; + iy_ctrl <= load_iy; + when "10" => + left_ctrl <= up_left; + up_ctrl <= load_up; + when others => + -- when "11" => + left_ctrl <= sp_left; + sp_ctrl <= load_sp; + end case; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + ea_ctrl <= load_ea; + next_state <= saved_state; + + when "0011" => -- ,--R + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + ix_ctrl <= load_ix; + when "01" => + left_ctrl <= iy_left; + iy_ctrl <= load_iy; + when "10" => + left_ctrl <= up_left; + up_ctrl <= load_up; + when others => + -- when "11" => + left_ctrl <= sp_left; + sp_ctrl <= load_sp; + end case; + right_ctrl <= two_right; + alu_ctrl <= alu_sub16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "0100" => -- ,R (zero offset) + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "0101" => -- ACCB,R + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= accb_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "0110" => -- ACCA,R + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= acca_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "0111" => -- undefined + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "1000" => -- offset8,R + md_ctrl <= fetch_first_md; -- pick up 8 bit offset + addr_ctrl <= fetch_ad; + pc_ctrl <= incr_pc; + next_state <= index8_state; + + when "1001" => -- offset16,R + md_ctrl <= fetch_first_md; -- pick up first byte of 16 bit offset + addr_ctrl <= fetch_ad; + pc_ctrl <= incr_pc; + next_state <= index16_state; + + when "1010" => -- undefined + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "1011" => -- ACCD,R + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= accd_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when "1100" => -- offset8,PC + -- fetch 8 bit offset + md_ctrl <= fetch_first_md; + addr_ctrl <= fetch_ad; + pc_ctrl <= incr_pc; + next_state <= pcrel8_state; + + when "1101" => -- offset16,PC + -- fetch offset + md_ctrl <= fetch_first_md; + addr_ctrl <= fetch_ad; + pc_ctrl <= incr_pc; + next_state <= pcrel16_state; + + when "1110" => -- undefined + case md(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + when others => +-- when "1111" => -- [,address] + -- advance PC to pick up address + md_ctrl <= fetch_first_md; + addr_ctrl <= fetch_ad; + pc_ctrl <= incr_pc; + next_state <= indexaddr_state; + end case; + end if; + + -- load index register with ea plus one + when postincr1_state => + left_ctrl <= ea_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + case md(6 downto 5) is + when "00" => + ix_ctrl <= load_ix; + when "01" => + iy_ctrl <= load_iy; + when "10" => + up_ctrl <= load_up; + when others => + -- when "11" => + sp_ctrl <= load_sp; + end case; + -- return to previous state + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + -- load index register with ea plus two + when postincr2_state => + -- increment register by two (address) + left_ctrl <= ea_left; + right_ctrl <= two_right; + alu_ctrl <= alu_add16; + case md(6 downto 5) is + when "00" => + ix_ctrl <= load_ix; + when "01" => + iy_ctrl <= load_iy; + when "10" => + up_ctrl <= load_up; + when others => + -- when "11" => + sp_ctrl <= load_sp; + end case; + -- return to previous state + if md(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + -- + -- ea = index register + md (8 bit signed offset) + -- ea holds post byte + -- + when index8_state => + case ea(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + -- ea = index reg + md + right_ctrl <= md_sign8_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- return to previous state + if ea(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + -- fetch low byte of 16 bit indexed offset + when index16_state => + -- advance pc + pc_ctrl <= incr_pc; + -- fetch low byte + md_ctrl <= fetch_next_md; + addr_ctrl <= fetch_ad; + next_state <= index16_2_state; + + -- ea = index register + md (16 bit offset) + -- ea holds post byte + when index16_2_state => + case ea(6 downto 5) is + when "00" => + left_ctrl <= ix_left; + when "01" => + left_ctrl <= iy_left; + when "10" => + left_ctrl <= up_left; + when others => + -- when "11" => + left_ctrl <= sp_left; + end case; + -- ea = index reg + md + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- return to previous state + if ea(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + -- + -- pc relative with 8 bit signed offest + -- md holds signed offset + -- + when pcrel8_state => + -- ea = pc + signed md + left_ctrl <= pc_left; + right_ctrl <= md_sign8_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- return to previous state + if ea(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + -- pc relative addressing with 16 bit offset + -- pick up the low byte of the offset in md + -- advance the pc + when pcrel16_state => + -- advance pc + pc_ctrl <= incr_pc; + -- fetch low byte + md_ctrl <= fetch_next_md; + addr_ctrl <= fetch_ad; + next_state <= pcrel16_2_state; + + -- pc relative with16 bit signed offest + -- md holds signed offset + when pcrel16_2_state => + -- ea = pc + md + left_ctrl <= pc_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- return to previous state + if ea(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + -- indexed to address + -- pick up the low byte of the address + -- advance the pc + when indexaddr_state => + -- advance pc + pc_ctrl <= incr_pc; + -- fetch low byte + md_ctrl <= fetch_next_md; + addr_ctrl <= fetch_ad; + next_state <= indexaddr2_state; + + -- indexed to absolute address + -- md holds address + -- ea hold indexing mode byte + when indexaddr2_state => + -- ea = md + left_ctrl <= pc_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + ea_ctrl <= load_ea; + -- return to previous state + if ea(4) = '0' then + next_state <= saved_state; + else + next_state <= indirect_state; + end if; + + -- + -- load md with high byte of indirect address + -- pointed to by ea + -- increment ea + -- + when indirect_state => + -- increment ea + left_ctrl <= ea_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + ea_ctrl <= load_ea; + -- fetch high byte + md_ctrl <= fetch_first_md; + addr_ctrl <= read_ad; + next_state <= indirect2_state; + -- + -- load md with low byte of indirect address + -- pointed to by ea + -- ea has previously been incremented + -- + when indirect2_state => + -- fetch high byte + md_ctrl <= fetch_next_md; + addr_ctrl <= read_ad; + dout_ctrl <= md_lo_dout; + next_state <= indirect3_state; + -- + -- complete idirect addressing + -- by loading ea with md + -- + when indirect3_state => + -- load ea with md + left_ctrl <= ea_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + ea_ctrl <= load_ea; + -- return to previous state + next_state <= saved_state; + + -- + -- ea holds the low byte of the absolute address + -- Move ea low byte into ea high byte + -- load new ea low byte to for absolute 16 bit address + -- advance the program counter + -- + when extended_state => -- fetch ea low byte + -- increment pc + pc_ctrl <= incr_pc; + -- fetch next effective address bytes + ea_ctrl <= fetch_next_ea; + addr_ctrl <= fetch_ad; + -- return to previous state + next_state <= saved_state; + + when lea_state => -- here on load effective address + -- load index register with effective address + left_ctrl <= pc_left; + right_ctrl <= ea_right; + alu_ctrl <= alu_lea; + case op_code(3 downto 0) is + when "0000" => -- leax + cc_ctrl <= load_cc; + ix_ctrl <= load_ix; + when "0001" => -- leay + cc_ctrl <= load_cc; + iy_ctrl <= load_iy; + when "0010" => -- leas + sp_ctrl <= load_sp; + when "0011" => -- leau + up_ctrl <= load_up; + when others => + null; + end case; + lic <= '1'; + next_state <= fetch_state; + + -- + -- jump to subroutine + -- sp=sp-1 + -- call push_return_lo_state to save pc + -- return to jmp_state + -- + when jsr_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- call push_return_state + st_ctrl <= push_st; + return_state <= jmp_state; + next_state <= push_return_lo_state; + + -- + -- Load pc with ea + -- (JMP) + -- + when jmp_state => + -- load PC with effective address + left_ctrl <= pc_left; + right_ctrl <= ea_right; + alu_ctrl <= alu_ld16; + pc_ctrl <= load_pc; + lic <= '1'; + next_state <= fetch_state; + + -- + -- long branch or branch to subroutine + -- pick up next md byte + -- md_hi = md_lo + -- md_lo = (pc) + -- pc=pc+1 + -- if a lbsr push return address + -- continue to sbranch_state + -- to evaluate conditional branches + -- + when lbranch_state => + pc_ctrl <= incr_pc; + -- fetch the next byte into md_lo + md_ctrl <= fetch_next_md; + addr_ctrl <= fetch_ad; + -- if lbsr - push return address + -- then continue on to short branch + if op_code = "00010111" then + st_ctrl <= push_st; + return_state <= sbranch_state; + next_state <= push_return_lo_state; + else + next_state <= sbranch_state; + end if; + + -- + -- here to execute conditional branch + -- short conditional branch md = signed 8 bit offset + -- long branch md = 16 bit offset + -- + when sbranch_state => + left_ctrl <= pc_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + -- Test condition for branch + if op_code(7 downto 4) = "0010" then -- conditional branch + case op_code(3 downto 0) is + when "0000" => -- bra + cond_true := (1 = 1); + when "0001" => -- brn + cond_true := (1 = 0); + when "0010" => -- bhi + cond_true := ((cc(CBIT) or cc(ZBIT)) = '0'); + when "0011" => -- bls + cond_true := ((cc(CBIT) or cc(ZBIT)) = '1'); + when "0100" => -- bcc/bhs + cond_true := (cc(CBIT) = '0'); + when "0101" => -- bcs/blo + cond_true := (cc(CBIT) = '1'); + when "0110" => -- bne + cond_true := (cc(ZBIT) = '0'); + when "0111" => -- beq + cond_true := (cc(ZBIT) = '1'); + when "1000" => -- bvc + cond_true := (cc(VBIT) = '0'); + when "1001" => -- bvs + cond_true := (cc(VBIT) = '1'); + when "1010" => -- bpl + cond_true := (cc(NBIT) = '0'); + when "1011" => -- bmi + cond_true := (cc(NBIT) = '1'); + when "1100" => -- bge + cond_true := ((cc(NBIT) xor cc(VBIT)) = '0'); + when "1101" => -- blt + cond_true := ((cc(NBIT) xor cc(VBIT)) = '1'); + when "1110" => -- bgt + cond_true := ((cc(ZBIT) or (cc(NBIT) xor cc(VBIT))) = '0'); + when "1111" => -- ble + cond_true := ((cc(ZBIT) or (cc(NBIT) xor cc(VBIT))) = '1'); + when others => + null; + end case; + end if; + if cond_true then + pc_ctrl <= load_pc; + end if; + lic <= '1'; + next_state <= fetch_state; + + -- + -- push return address onto the S stack + -- + -- (sp) = pc_lo + -- sp = sp - 1 + -- + when push_return_lo_state => + -- decrement the sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write PC low + addr_ctrl <= pushs_ad; + dout_ctrl <= pc_lo_dout; + next_state <= push_return_hi_state; + + -- + -- push program counter hi byte onto the stack + -- (sp) = pc_hi + -- sp = sp + -- return to originating state + -- + when push_return_hi_state => + -- write pc hi bytes + addr_ctrl <= pushs_ad; + dout_ctrl <= pc_hi_dout; + next_state <= saved_state; + + -- + -- RTS pull return address from stack + -- + when pull_return_hi_state => + -- increment the sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read pc hi + pc_ctrl <= pull_hi_pc; + addr_ctrl <= pulls_ad; + next_state <= pull_return_lo_state; + + when pull_return_lo_state => + -- increment the SP + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read pc low + pc_ctrl <= pull_lo_pc; + addr_ctrl <= pulls_ad; + dout_ctrl <= pc_lo_dout; + -- + lic <= '1'; + next_state <= fetch_state; + + when andcc_state => + -- AND CC with md + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_andcc; + cc_ctrl <= load_cc; + -- + lic <= '1'; + next_state <= fetch_state; + + when orcc_state => + -- OR CC with md + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_orcc; + cc_ctrl <= load_cc; + -- + lic <= '1'; + next_state <= fetch_state; + + when tfr_state => + -- select source register + case md(7 downto 4) is + when "0000" => + left_ctrl <= accd_left; + when "0001" => + left_ctrl <= ix_left; + when "0010" => + left_ctrl <= iy_left; + when "0011" => + left_ctrl <= up_left; + when "0100" => + left_ctrl <= sp_left; + when "0101" => + left_ctrl <= pc_left; + when "1000" => + left_ctrl <= acca_left; + when "1001" => + left_ctrl <= accb_left; + when "1010" => + left_ctrl <= cc_left; + when "1011" => + left_ctrl <= dp_left; + when others => + left_ctrl <= md_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_tfr; + -- select destination register + case md(3 downto 0) is + when "0000" => -- accd + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + when "0001" => -- ix + ix_ctrl <= load_ix; + when "0010" => -- iy + iy_ctrl <= load_iy; + when "0011" => -- up + up_ctrl <= load_up; + when "0100" => -- sp + sp_ctrl <= load_sp; + when "0101" => -- pc + pc_ctrl <= load_pc; + when "1000" => -- acca + acca_ctrl <= load_acca; + when "1001" => -- accb + accb_ctrl <= load_accb; + when "1010" => -- cc + cc_ctrl <= load_cc; + when "1011" => --dp + dp_ctrl <= load_dp; + when others => + null; + end case; + -- + lic <= '1'; + next_state <= fetch_state; + + when exg_state => + -- save destination register + case md(3 downto 0) is + when "0000" => + left_ctrl <= accd_left; + when "0001" => + left_ctrl <= ix_left; + when "0010" => + left_ctrl <= iy_left; + when "0011" => + left_ctrl <= up_left; + when "0100" => + left_ctrl <= sp_left; + when "0101" => + left_ctrl <= pc_left; + when "1000" => + left_ctrl <= acca_left; + when "1001" => + left_ctrl <= accb_left; + when "1010" => + left_ctrl <= cc_left; + when "1011" => + left_ctrl <= dp_left; + when others => + left_ctrl <= md_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_tfr; + ea_ctrl <= load_ea; + -- call tranfer microcode + next_state <= exg1_state; + + when exg1_state => + -- select source register + case md(7 downto 4) is + when "0000" => + left_ctrl <= accd_left; + when "0001" => + left_ctrl <= ix_left; + when "0010" => + left_ctrl <= iy_left; + when "0011" => + left_ctrl <= up_left; + when "0100" => + left_ctrl <= sp_left; + when "0101" => + left_ctrl <= pc_left; + when "1000" => + left_ctrl <= acca_left; + when "1001" => + left_ctrl <= accb_left; + when "1010" => + left_ctrl <= cc_left; + when "1011" => + left_ctrl <= dp_left; + when others => + left_ctrl <= md_left; + end case; + right_ctrl <= zero_right; + alu_ctrl <= alu_tfr; + -- select destination register + case md(3 downto 0) is + when "0000" => -- accd + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + when "0001" => -- ix + ix_ctrl <= load_ix; + when "0010" => -- iy + iy_ctrl <= load_iy; + when "0011" => -- up + up_ctrl <= load_up; + when "0100" => -- sp + sp_ctrl <= load_sp; + when "0101" => -- pc + pc_ctrl <= load_pc; + when "1000" => -- acca + acca_ctrl <= load_acca; + when "1001" => -- accb + accb_ctrl <= load_accb; + when "1010" => -- cc + cc_ctrl <= load_cc; + when "1011" => --dp + dp_ctrl <= load_dp; + when others => + null; + end case; + next_state <= exg2_state; + + when exg2_state => + -- restore destination + left_ctrl <= ea_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_tfr; + -- save as source register + case md(7 downto 4) is + when "0000" => -- accd + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + when "0001" => -- ix + ix_ctrl <= load_ix; + when "0010" => -- iy + iy_ctrl <= load_iy; + when "0011" => -- up + up_ctrl <= load_up; + when "0100" => -- sp + sp_ctrl <= load_sp; + when "0101" => -- pc + pc_ctrl <= load_pc; + when "1000" => -- acca + acca_ctrl <= load_acca; + when "1001" => -- accb + accb_ctrl <= load_accb; + when "1010" => -- cc + cc_ctrl <= load_cc; + when "1011" => --dp + dp_ctrl <= load_dp; + when others => + null; + end case; + lic <= '1'; + next_state <= fetch_state; + + when mul_state => + -- move acca to md + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + md_ctrl <= load_md; + next_state <= mulea_state; + + when mulea_state => + -- move accb to ea + left_ctrl <= accb_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + ea_ctrl <= load_ea; + next_state <= muld_state; + + when muld_state => + -- clear accd + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_ld8; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + next_state <= mul0_state; + + when mul0_state => + -- if bit 0 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(0) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul1_state; + + when mul1_state => + -- if bit 1 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(1) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul2_state; + + when mul2_state => + -- if bit 2 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(2) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul3_state; + + when mul3_state => + -- if bit 3 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(3) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul4_state; + + when mul4_state => + -- if bit 4 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(4) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul5_state; + + when mul5_state => + -- if bit 5 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(5) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul6_state; + + when mul6_state => + -- if bit 6 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(6) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + next_state <= mul7_state; + + when mul7_state => + -- if bit 7 of ea set, add accd to md + left_ctrl <= accd_left; + if ea(7) = '1' then + right_ctrl <= md_right; + else + right_ctrl <= zero_right; + end if; + alu_ctrl <= alu_mul; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + md_ctrl <= shiftl_md; + lic <= '1'; + next_state <= fetch_state; + + -- + -- Enter here on pushs + -- ea holds post byte + -- + when pshs_state => + -- decrement sp if any registers to be pushed + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + -- idle address + addr_ctrl <= idle_ad; + dout_ctrl <= cc_dout; + if ea(7 downto 0) = "00000000" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + if ea(7) = '1' then + next_state <= pshs_pcl_state; + elsif ea(6) = '1' then + next_state <= pshs_upl_state; + elsif ea(5) = '1' then + next_state <= pshs_iyl_state; + elsif ea(4) = '1' then + next_state <= pshs_ixl_state; + elsif ea(3) = '1' then + next_state <= pshs_dp_state; + elsif ea(2) = '1' then + next_state <= pshs_accb_state; + elsif ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_pcl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write pc low + addr_ctrl <= pushs_ad; + dout_ctrl <= pc_lo_dout; + next_state <= pshs_pch_state; + + when pshs_pch_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(6 downto 0) = "0000000" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + -- write pc hi + addr_ctrl <= pushs_ad; + dout_ctrl <= pc_hi_dout; + if ea(6) = '1' then + next_state <= pshs_upl_state; + elsif ea(5) = '1' then + next_state <= pshs_iyl_state; + elsif ea(4) = '1' then + next_state <= pshs_ixl_state; + elsif ea(3) = '1' then + next_state <= pshs_dp_state; + elsif ea(2) = '1' then + next_state <= pshs_accb_state; + elsif ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + + when pshs_upl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write pc low + addr_ctrl <= pushs_ad; + dout_ctrl <= up_lo_dout; + next_state <= pshs_uph_state; + + when pshs_uph_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(5 downto 0) = "000000" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + -- write pc hi + addr_ctrl <= pushs_ad; + dout_ctrl <= up_hi_dout; + if ea(5) = '1' then + next_state <= pshs_iyl_state; + elsif ea(4) = '1' then + next_state <= pshs_ixl_state; + elsif ea(3) = '1' then + next_state <= pshs_dp_state; + elsif ea(2) = '1' then + next_state <= pshs_accb_state; + elsif ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_iyl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write iy low + addr_ctrl <= pushs_ad; + dout_ctrl <= iy_lo_dout; + next_state <= pshs_iyh_state; + + when pshs_iyh_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(4 downto 0) = "00000" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + -- write iy hi + addr_ctrl <= pushs_ad; + dout_ctrl <= iy_hi_dout; + if ea(4) = '1' then + next_state <= pshs_ixl_state; + elsif ea(3) = '1' then + next_state <= pshs_dp_state; + elsif ea(2) = '1' then + next_state <= pshs_accb_state; + elsif ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_ixl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write ix low + addr_ctrl <= pushs_ad; + dout_ctrl <= ix_lo_dout; + next_state <= pshs_ixh_state; + + when pshs_ixh_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(3 downto 0) = "0000" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + -- write ix hi + addr_ctrl <= pushs_ad; + dout_ctrl <= ix_hi_dout; + if ea(3) = '1' then + next_state <= pshs_dp_state; + elsif ea(2) = '1' then + next_state <= pshs_accb_state; + elsif ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_dp_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(2 downto 0) = "000" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + -- write dp + addr_ctrl <= pushs_ad; + dout_ctrl <= dp_dout; + if ea(2) = '1' then + next_state <= pshs_accb_state; + elsif ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_accb_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(1 downto 0) = "00" then + sp_ctrl <= latch_sp; + else + sp_ctrl <= load_sp; + end if; + -- write accb + addr_ctrl <= pushs_ad; + dout_ctrl <= accb_dout; + if ea(1) = '1' then + next_state <= pshs_acca_state; + elsif ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_acca_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(0) = '1' then + sp_ctrl <= load_sp; + else + sp_ctrl <= latch_sp; + end if; + -- write acca + addr_ctrl <= pushs_ad; + dout_ctrl <= acca_dout; + if ea(0) = '1' then + next_state <= pshs_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshs_cc_state => + -- idle sp + -- write cc + addr_ctrl <= pushs_ad; + dout_ctrl <= cc_dout; + lic <= '1'; + next_state <= fetch_state; + + -- + -- enter here on PULS + -- ea hold register mask + -- + when puls_state => + if ea(0) = '1' then + next_state <= puls_cc_state; + elsif ea(1) = '1' then + next_state <= puls_acca_state; + elsif ea(2) = '1' then + next_state <= puls_accb_state; + elsif ea(3) = '1' then + next_state <= puls_dp_state; + elsif ea(4) = '1' then + next_state <= puls_ixh_state; + elsif ea(5) = '1' then + next_state <= puls_iyh_state; + elsif ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_cc_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read cc + cc_ctrl <= pull_cc; + addr_ctrl <= pulls_ad; + if ea(1) = '1' then + next_state <= puls_acca_state; + elsif ea(2) = '1' then + next_state <= puls_accb_state; + elsif ea(3) = '1' then + next_state <= puls_dp_state; + elsif ea(4) = '1' then + next_state <= puls_ixh_state; + elsif ea(5) = '1' then + next_state <= puls_iyh_state; + elsif ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_acca_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read acca + acca_ctrl <= pull_acca; + addr_ctrl <= pulls_ad; + if ea(2) = '1' then + next_state <= puls_accb_state; + elsif ea(3) = '1' then + next_state <= puls_dp_state; + elsif ea(4) = '1' then + next_state <= puls_ixh_state; + elsif ea(5) = '1' then + next_state <= puls_iyh_state; + elsif ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_accb_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read accb + accb_ctrl <= pull_accb; + addr_ctrl <= pulls_ad; + if ea(3) = '1' then + next_state <= puls_dp_state; + elsif ea(4) = '1' then + next_state <= puls_ixh_state; + elsif ea(5) = '1' then + next_state <= puls_iyh_state; + elsif ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_dp_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read dp + dp_ctrl <= pull_dp; + addr_ctrl <= pulls_ad; + if ea(4) = '1' then + next_state <= puls_ixh_state; + elsif ea(5) = '1' then + next_state <= puls_iyh_state; + elsif ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_ixh_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- pull ix hi + ix_ctrl <= pull_hi_ix; + addr_ctrl <= pulls_ad; + next_state <= puls_ixl_state; + + when puls_ixl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read ix low + ix_ctrl <= pull_lo_ix; + addr_ctrl <= pulls_ad; + if ea(5) = '1' then + next_state <= puls_iyh_state; + elsif ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_iyh_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- pull iy hi + iy_ctrl <= pull_hi_iy; + addr_ctrl <= pulls_ad; + next_state <= puls_iyl_state; + + when puls_iyl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read iy low + iy_ctrl <= pull_lo_iy; + addr_ctrl <= pulls_ad; + if ea(6) = '1' then + next_state <= puls_uph_state; + elsif ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_uph_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- pull up hi + up_ctrl <= pull_hi_up; + addr_ctrl <= pulls_ad; + next_state <= puls_upl_state; + + when puls_upl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read up low + up_ctrl <= pull_lo_up; + addr_ctrl <= pulls_ad; + if ea(7) = '1' then + next_state <= puls_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when puls_pch_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- pull pc hi + pc_ctrl <= pull_hi_pc; + addr_ctrl <= pulls_ad; + next_state <= puls_pcl_state; + + when puls_pcl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read pc low + pc_ctrl <= pull_lo_pc; + addr_ctrl <= pulls_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- Enter here on pshu + -- ea holds post byte + -- + when pshu_state => + -- decrement up if any registers to be pushed + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(7 downto 0) = "00000000" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write idle bus + if ea(7) = '1' then + next_state <= pshu_pcl_state; + elsif ea(6) = '1' then + next_state <= pshu_spl_state; + elsif ea(5) = '1' then + next_state <= pshu_iyl_state; + elsif ea(4) = '1' then + next_state <= pshu_ixl_state; + elsif ea(3) = '1' then + next_state <= pshu_dp_state; + elsif ea(2) = '1' then + next_state <= pshu_accb_state; + elsif ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + -- + -- push PC onto U stack + -- + when pshu_pcl_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + up_ctrl <= load_up; + -- write pc low + addr_ctrl <= pushu_ad; + dout_ctrl <= pc_lo_dout; + next_state <= pshu_pch_state; + + when pshu_pch_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(6 downto 0) = "0000000" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write pc hi + addr_ctrl <= pushu_ad; + dout_ctrl <= pc_hi_dout; + if ea(6) = '1' then + next_state <= pshu_spl_state; + elsif ea(5) = '1' then + next_state <= pshu_iyl_state; + elsif ea(4) = '1' then + next_state <= pshu_ixl_state; + elsif ea(3) = '1' then + next_state <= pshu_dp_state; + elsif ea(2) = '1' then + next_state <= pshu_accb_state; + elsif ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_spl_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + up_ctrl <= load_up; + -- write sp low + addr_ctrl <= pushu_ad; + dout_ctrl <= sp_lo_dout; + next_state <= pshu_sph_state; + + when pshu_sph_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(5 downto 0) = "000000" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write sp hi + addr_ctrl <= pushu_ad; + dout_ctrl <= sp_hi_dout; + if ea(5) = '1' then + next_state <= pshu_iyl_state; + elsif ea(4) = '1' then + next_state <= pshu_ixl_state; + elsif ea(3) = '1' then + next_state <= pshu_dp_state; + elsif ea(2) = '1' then + next_state <= pshu_accb_state; + elsif ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_iyl_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + up_ctrl <= load_up; + -- write iy low + addr_ctrl <= pushu_ad; + dout_ctrl <= iy_lo_dout; + next_state <= pshu_iyh_state; + + when pshu_iyh_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(4 downto 0) = "00000" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write iy hi + addr_ctrl <= pushu_ad; + dout_ctrl <= iy_hi_dout; + if ea(4) = '1' then + next_state <= pshu_ixl_state; + elsif ea(3) = '1' then + next_state <= pshu_dp_state; + elsif ea(2) = '1' then + next_state <= pshu_accb_state; + elsif ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_ixl_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + up_ctrl <= load_up; + -- write ix low + addr_ctrl <= pushu_ad; + dout_ctrl <= ix_lo_dout; + next_state <= pshu_ixh_state; + + when pshu_ixh_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(3 downto 0) = "0000" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write ix hi + addr_ctrl <= pushu_ad; + dout_ctrl <= ix_hi_dout; + if ea(3) = '1' then + next_state <= pshu_dp_state; + elsif ea(2) = '1' then + next_state <= pshu_accb_state; + elsif ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_dp_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(2 downto 0) = "000" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write dp + addr_ctrl <= pushu_ad; + dout_ctrl <= dp_dout; + if ea(2) = '1' then + next_state <= pshu_accb_state; + elsif ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_accb_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(1 downto 0) = "00" then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write accb + addr_ctrl <= pushu_ad; + dout_ctrl <= accb_dout; + if ea(1) = '1' then + next_state <= pshu_acca_state; + elsif ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_acca_state => + -- decrement up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + if ea(0) = '0' then + up_ctrl <= latch_up; + else + up_ctrl <= load_up; + end if; + -- write acca + addr_ctrl <= pushu_ad; + dout_ctrl <= acca_dout; + if ea(0) = '1' then + next_state <= pshu_cc_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pshu_cc_state => + -- idle up + -- write cc + addr_ctrl <= pushu_ad; + dout_ctrl <= cc_dout; + lic <= '1'; + next_state <= fetch_state; + + -- + -- enter here on PULU + -- ea hold register mask + -- + when pulu_state => + -- idle UP + -- idle bus + if ea(0) = '1' then + next_state <= pulu_cc_state; + elsif ea(1) = '1' then + next_state <= pulu_acca_state; + elsif ea(2) = '1' then + next_state <= pulu_accb_state; + elsif ea(3) = '1' then + next_state <= pulu_dp_state; + elsif ea(4) = '1' then + next_state <= pulu_ixh_state; + elsif ea(5) = '1' then + next_state <= pulu_iyh_state; + elsif ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_cc_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read cc + cc_ctrl <= pull_cc; + addr_ctrl <= pullu_ad; + if ea(1) = '1' then + next_state <= pulu_acca_state; + elsif ea(2) = '1' then + next_state <= pulu_accb_state; + elsif ea(3) = '1' then + next_state <= pulu_dp_state; + elsif ea(4) = '1' then + next_state <= pulu_ixh_state; + elsif ea(5) = '1' then + next_state <= pulu_iyh_state; + elsif ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_acca_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read acca + acca_ctrl <= pull_acca; + addr_ctrl <= pullu_ad; + if ea(2) = '1' then + next_state <= pulu_accb_state; + elsif ea(3) = '1' then + next_state <= pulu_dp_state; + elsif ea(4) = '1' then + next_state <= pulu_ixh_state; + elsif ea(5) = '1' then + next_state <= pulu_iyh_state; + elsif ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_accb_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read accb + accb_ctrl <= pull_accb; + addr_ctrl <= pullu_ad; + if ea(3) = '1' then + next_state <= pulu_dp_state; + elsif ea(4) = '1' then + next_state <= pulu_ixh_state; + elsif ea(5) = '1' then + next_state <= pulu_iyh_state; + elsif ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_dp_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read dp + dp_ctrl <= pull_dp; + addr_ctrl <= pullu_ad; + if ea(4) = '1' then + next_state <= pulu_ixh_state; + elsif ea(5) = '1' then + next_state <= pulu_iyh_state; + elsif ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_ixh_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read ix hi + ix_ctrl <= pull_hi_ix; + addr_ctrl <= pullu_ad; + next_state <= pulu_ixl_state; + + when pulu_ixl_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read ix low + ix_ctrl <= pull_lo_ix; + addr_ctrl <= pullu_ad; + if ea(5) = '1' then + next_state <= pulu_iyh_state; + elsif ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_iyh_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read iy hi + iy_ctrl <= pull_hi_iy; + addr_ctrl <= pullu_ad; + next_state <= pulu_iyl_state; + + when pulu_iyl_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read iy low + iy_ctrl <= pull_lo_iy; + addr_ctrl <= pullu_ad; + if ea(6) = '1' then + next_state <= pulu_sph_state; + elsif ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_sph_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read sp hi + sp_ctrl <= pull_hi_sp; + addr_ctrl <= pullu_ad; + next_state <= pulu_spl_state; + + when pulu_spl_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read sp low + sp_ctrl <= pull_lo_sp; + addr_ctrl <= pullu_ad; + if ea(7) = '1' then + next_state <= pulu_pch_state; + else + lic <= '1'; + next_state <= fetch_state; + end if; + + when pulu_pch_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- pull pc hi + pc_ctrl <= pull_hi_pc; + addr_ctrl <= pullu_ad; + next_state <= pulu_pcl_state; + + when pulu_pcl_state => + -- increment up + left_ctrl <= up_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + up_ctrl <= load_up; + -- read pc low + pc_ctrl <= pull_lo_pc; + addr_ctrl <= pullu_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- pop the Condition codes + -- + when rti_cc_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read cc + cc_ctrl <= pull_cc; + addr_ctrl <= pulls_ad; + next_state <= rti_entire_state; + + -- + -- Added RTI cycle 11th July 2006 John Kent. + -- test the "Entire" Flag + -- that has just been popped off the stack + -- + when rti_entire_state => + -- + -- The Entire flag must be recovered from the stack + -- before testing. + -- + if cc(EBIT) = '1' then + next_state <= rti_acca_state; + else + next_state <= rti_pch_state; + end if; + + when rti_acca_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read acca + acca_ctrl <= pull_acca; + addr_ctrl <= pulls_ad; + next_state <= rti_accb_state; + + when rti_accb_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read accb + accb_ctrl <= pull_accb; + addr_ctrl <= pulls_ad; + next_state <= rti_dp_state; + + when rti_dp_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read dp + dp_ctrl <= pull_dp; + addr_ctrl <= pulls_ad; + next_state <= rti_ixh_state; + + when rti_ixh_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read ix hi + ix_ctrl <= pull_hi_ix; + addr_ctrl <= pulls_ad; + next_state <= rti_ixl_state; + + when rti_ixl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read ix low + ix_ctrl <= pull_lo_ix; + addr_ctrl <= pulls_ad; + next_state <= rti_iyh_state; + + when rti_iyh_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read iy hi + iy_ctrl <= pull_hi_iy; + addr_ctrl <= pulls_ad; + next_state <= rti_iyl_state; + + when rti_iyl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read iy low + iy_ctrl <= pull_lo_iy; + addr_ctrl <= pulls_ad; + next_state <= rti_uph_state; + + + when rti_uph_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read up hi + up_ctrl <= pull_hi_up; + addr_ctrl <= pulls_ad; + next_state <= rti_upl_state; + + when rti_upl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read up low + up_ctrl <= pull_lo_up; + addr_ctrl <= pulls_ad; + next_state <= rti_pch_state; + + when rti_pch_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- pull pc hi + pc_ctrl <= pull_hi_pc; + addr_ctrl <= pulls_ad; + next_state <= rti_pcl_state; + + when rti_pcl_state => + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- pull pc low + pc_ctrl <= pull_lo_pc; + addr_ctrl <= pulls_ad; + lic <= '1'; + next_state <= fetch_state; + + -- + -- here on NMI interrupt + -- Complete execute cycle of the last instruction. + -- If it was a dual operand instruction + -- + when int_nmi_state => + next_state <= int_nmi1_state; + + -- Idle bus cycle + when int_nmi1_state => + -- pre decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + iv_ctrl <= nmi_iv; + st_ctrl <= push_st; + return_state <= int_nmimask_state; + next_state <= int_entire_state; + + -- + -- here on IRQ interrupt + -- Complete execute cycle of the last instruction. + -- If it was a dual operand instruction + -- + when int_irq_state => + next_state <= int_irq1_state; + + -- pre decrement the sp + -- Idle bus cycle + when int_irq1_state => + -- pre decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + iv_ctrl <= irq_iv; + st_ctrl <= push_st; + return_state <= int_irqmask_state; + next_state <= int_entire_state; + + -- + -- here on FIRQ interrupt + -- Complete execution cycle of the last instruction + -- if it was a dual operand instruction + -- + when int_firq_state => + next_state <= int_firq1_state; + + -- Idle bus cycle + when int_firq1_state => + -- pre decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + iv_ctrl <= firq_iv; + st_ctrl <= push_st; + return_state <= int_firqmask_state; + next_state <= int_fast_state; + + -- + -- CWAI entry point + -- stack pointer already pre-decremented + -- mask condition codes + -- + when cwai_state => + -- AND CC with md + left_ctrl <= md_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_andcc; + cc_ctrl <= load_cc; + st_ctrl <= push_st; + return_state <= int_cwai_state; + next_state <= int_entire_state; + + -- + -- wait here for an interrupt + -- + when int_cwai_state => + if (nmi_req = '1') then + iv_ctrl <= nmi_iv; + next_state <= int_nmimask_state; + -- + -- FIRQ & IRQ are level sensitive + -- + elsif (firq = '1') and (cc(FBIT) = '0') then + iv_ctrl <= firq_iv; + next_state <= int_firqmask_state; + + elsif (irq = '1') and (cc(IBIT) = '0') then + iv_ctrl <= irq_iv; + next_state <= int_irqmask_state; + else + next_state <= int_cwai_state; + end if; + + -- + -- State to mask I Flag and F Flag (NMI) + -- + when int_nmimask_state => + alu_ctrl <= alu_seif; + cc_ctrl <= load_cc; + next_state <= vect_hi_state; + + -- + -- State to mask I Flag and F Flag (FIRQ) + -- + when int_firqmask_state => + alu_ctrl <= alu_seif; + cc_ctrl <= load_cc; + next_state <= vect_hi_state; + + + -- + -- State to mask I Flag and F Flag (SWI) + -- + when int_swimask_state => + alu_ctrl <= alu_seif; + cc_ctrl <= load_cc; + next_state <= vect_hi_state; + + -- + -- State to mask I Flag only (IRQ) + -- + when int_irqmask_state => + alu_ctrl <= alu_sei; + cc_ctrl <= load_cc; + next_state <= vect_hi_state; + + -- + -- set Entire Flag on SWI, SWI2, SWI3 and CWAI, IRQ and NMI + -- before stacking all registers + -- + when int_entire_state => + -- set entire flag + alu_ctrl <= alu_see; + cc_ctrl <= load_cc; + next_state <= int_pcl_state; + + -- + -- clear Entire Flag on FIRQ + -- before stacking all registers + -- + when int_fast_state => + -- clear entire flag + alu_ctrl <= alu_cle; + cc_ctrl <= load_cc; + next_state <= int_pcl_state; + + when int_pcl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write pc low + addr_ctrl <= pushs_ad; + dout_ctrl <= pc_lo_dout; + next_state <= int_pch_state; + + when int_pch_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write pc hi + addr_ctrl <= pushs_ad; + dout_ctrl <= pc_hi_dout; + if cc(EBIT) = '1' then + next_state <= int_upl_state; + else + next_state <= int_cc_state; + end if; + + when int_upl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write up low + addr_ctrl <= pushs_ad; + dout_ctrl <= up_lo_dout; + next_state <= int_uph_state; + + when int_uph_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write ix hi + addr_ctrl <= pushs_ad; + dout_ctrl <= up_hi_dout; + next_state <= int_iyl_state; + + when int_iyl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write ix low + addr_ctrl <= pushs_ad; + dout_ctrl <= iy_lo_dout; + next_state <= int_iyh_state; + + when int_iyh_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write ix hi + addr_ctrl <= pushs_ad; + dout_ctrl <= iy_hi_dout; + next_state <= int_ixl_state; + + when int_ixl_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write ix low + addr_ctrl <= pushs_ad; + dout_ctrl <= ix_lo_dout; + next_state <= int_ixh_state; + + when int_ixh_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write ix hi + addr_ctrl <= pushs_ad; + dout_ctrl <= ix_hi_dout; + next_state <= int_dp_state; + + when int_dp_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write accb + addr_ctrl <= pushs_ad; + dout_ctrl <= dp_dout; + next_state <= int_accb_state; + + when int_accb_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write accb + addr_ctrl <= pushs_ad; + dout_ctrl <= accb_dout; + next_state <= int_acca_state; + + when int_acca_state => + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= one_right; + alu_ctrl <= alu_sub16; + sp_ctrl <= load_sp; + -- write acca + addr_ctrl <= pushs_ad; + dout_ctrl <= acca_dout; + next_state <= int_cc_state; + + when int_cc_state => + -- write cc + addr_ctrl <= pushs_ad; + dout_ctrl <= cc_dout; + next_state <= saved_state; + + -- + -- According to the 6809 programming manual: + -- If an interrupt is received and is masked + -- or lasts for less than three cycles, the PC + -- will advance to the next instruction. + -- If an interrupt is unmasked and lasts + -- for more than three cycles, an interrupt + -- will be generated. + -- Note that I don't wait 3 clock cycles. + -- John Kent 11th July 2006 + -- + when sync_state => + lic <= '1'; + ba <= '1'; + -- + -- Version 1.28 2015-05-30 + -- Exit sync_state on interrupt. + -- If the interrupts are active + -- they will be caught in the state_machine process + -- and the interrupt service routine microcode will be executed. + -- Masked interrupts will exit the sync_state. + -- Moved from the state_machine process to the state_sequencer process + -- + if (firq = '1') or (irq = '1') then + next_state <= fetch_state; + else + next_state <= sync_state; + end if; + + when halt_state => + -- + -- 2011-10-30 John Kent + -- ba & bs should be high + ba <= '1'; + bs <= '1'; + if halt = '1' then + next_state <= halt_state; + else + next_state <= fetch_state; + end if; + + end case; + +-- +-- Ver 1.23 2011-10-30 John Kent +-- First instruction cycle might be +-- fetch_state +-- halt_state +-- int_nmirq_state +-- int_firq_state +-- + if fic = '1' then + -- + case op_code(7 downto 6) is + when "10" => -- acca + case op_code(3 downto 0) is + when "0000" => -- suba + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "0001" => -- cmpa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + when "0010" => -- sbca + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sbc; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "0011" => + case pre_code is + when "00010000" => -- page 2 -- cmpd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + when "00010001" => -- page 3 -- cmpu + left_ctrl <= up_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + when others => -- page 1 -- subd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + end case; + when "0100" => -- anda + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "0101" => -- bita + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + when "0110" => -- ldaa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "0111" => -- staa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + when "1000" => -- eora + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_eor; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "1001" => -- adca + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_adc; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "1010" => -- oraa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ora; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "1011" => -- adda + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + when "1100" => + case pre_code is + when "00010000" => -- page 2 -- cmpy + left_ctrl <= iy_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + when "00010001" => -- page 3 -- cmps + left_ctrl <= sp_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + when others => -- page 1 -- cmpx + left_ctrl <= ix_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + end case; + when "1101" => -- bsr / jsr + null; + when "1110" => -- ldx + case pre_code is + when "00010000" => -- page 2 -- ldy + left_ctrl <= iy_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + iy_ctrl <= load_iy; + when others => -- page 1 -- ldx + left_ctrl <= ix_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + ix_ctrl <= load_ix; + end case; + when "1111" => -- stx + case pre_code is + when "00010000" => -- page 2 -- sty + left_ctrl <= iy_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + when others => -- page 1 -- stx + left_ctrl <= ix_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + end case; + when others => + null; + end case; + when "11" => -- accb dual op + case op_code(3 downto 0) is + when "0000" => -- subb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "0001" => -- cmpb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + when "0010" => -- sbcb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sbc; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "0011" => -- addd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + when "0100" => -- andb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "0101" => -- bitb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + when "0110" => -- ldab + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld8; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "0111" => -- stab + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + when "1000" => -- eorb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_eor; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "1001" => -- adcb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_adc; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "1010" => -- orab + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ora; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "1011" => -- addb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add8; + cc_ctrl <= load_cc; + accb_ctrl <= load_accb; + when "1100" => -- ldd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + when "1101" => -- std + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + when "1110" => -- ldu + case pre_code is + when "00010000" => -- page 2 -- lds + left_ctrl <= sp_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + sp_ctrl <= load_sp; + when others => -- page 1 -- ldu + left_ctrl <= up_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + up_ctrl <= load_up; + end case; + when "1111" => + case pre_code is + when "00010000" => -- page 2 -- sts + left_ctrl <= sp_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + when others => -- page 1 -- stu + left_ctrl <= up_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + end case; + when others => + null; + end case; + when others => + null; + end case; + + end if; -- first instruction cycle (fic) + lic_out <= lic; +end process; + +end rtl; + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu68.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu68.vhd new file mode 100644 index 00000000..016bd9a9 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/cpu68.vhd @@ -0,0 +1,3963 @@ +--===========================================================================-- +-- +-- S Y N T H E Z I A B L E CPU68 C O R E +-- +-- www.OpenCores.Org - December 2002 +-- This core adheres to the GNU public license +-- +-- File name : cpu68.vhd +-- +-- Purpose : Implements a 6800 compatible CPU core with some +-- additional instructions found in the 6801 +-- +-- Dependencies : ieee.Std_Logic_1164 +-- ieee.std_logic_unsigned +-- +-- Author : John E. Kent +-- +--===========================================================================---- +-- +-- Revision History: +-- +-- Date: Revision Author +-- 22 Sep 2002 0.1 John Kent +-- +-- 30 Oct 2002 0.2 John Kent +-- made NMI edge triggered +-- +-- 30 Oct 2002 0.3 John Kent +-- more corrections to NMI +-- added wai_wait_state to prevent stack overflow on wai. +-- +-- 1 Nov 2002 0.4 John Kent +-- removed WAI states and integrated WAI with the interrupt service routine +-- replace Data out (do) and Data in (di) register with a single Memory Data (md) reg. +-- Added Multiply instruction states. +-- run ALU and CC out of CPU module for timing measurements. +-- +-- 3 Nov 2002 0.5 John Kent +-- Memory Data Register was not loaded on Store instructions +-- SEV and CLV were not defined in the ALU +-- Overflow Flag on NEG was incorrect +-- +-- 16th Feb 2003 0.6 John Kent +-- Rearranged the execution cycle for dual operand instructions +-- so that occurs during the following fetch cycle. +-- This allows the reduction of one clock cycle from dual operand +-- instruction. Note that this also necessitated re-arranging the +-- program counter so that it is no longer incremented in the ALU. +-- The effective address has also been re-arranged to include a +-- separate added. The STD (store accd) now sets the condition codes. +-- +-- 28th Jun 2003 0.7 John Kent +-- Added Hold and Halt signals. Hold is used to steal cycles from the +-- CPU or add wait states. Halt puts the CPU in the inactive state +-- and is only honoured in the fetch cycle. Both signals are active high. +-- +-- 9th Jan 2004 0.8 John Kent +-- Clear instruction did an alu_ld8 rather than an alu_clr, so +-- the carry bit was not cleared correctly. +-- This error was picked up by Michael Hassenfratz. +-- + +library ieee; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity cpu68 is + port ( + clk: in std_logic; + rst: in std_logic; + rw: out std_logic; + vma: out std_logic; + address: out std_logic_vector(15 downto 0); + data_in: in std_logic_vector(7 downto 0); + data_out: out std_logic_vector(7 downto 0); + hold: in std_logic; + halt: in std_logic; + irq: in std_logic; + nmi: in std_logic; + test_alu: out std_logic_vector(15 downto 0); + test_cc: out std_logic_vector(7 downto 0) + ); +end; + +architecture CPU_ARCH of cpu68 is + + constant SBIT : integer := 7; + constant XBIT : integer := 6; + constant HBIT : integer := 5; + constant IBIT : integer := 4; + constant NBIT : integer := 3; + constant ZBIT : integer := 2; + constant VBIT : integer := 1; + constant CBIT : integer := 0; + + type state_type is (reset_state, fetch_state, decode_state, + extended_state, indexed_state, read8_state, read16_state, immediate16_state, + write8_state, write16_state, + execute_state, halt_state, error_state, + mul_state, mulea_state, muld_state, + mul0_state, mul1_state, mul2_state, mul3_state, + mul4_state, mul5_state, mul6_state, mul7_state, + jmp_state, jsr_state, jsr1_state, + branch_state, bsr_state, bsr1_state, + rts_hi_state, rts_lo_state, + int_pcl_state, int_pch_state, + int_ixl_state, int_ixh_state, + int_cc_state, int_acca_state, int_accb_state, + int_wai_state, int_mask_state, + rti_state, rti_cc_state, rti_acca_state, rti_accb_state, + rti_ixl_state, rti_ixh_state, + rti_pcl_state, rti_pch_state, + pula_state, psha_state, pulb_state, pshb_state, + pulx_lo_state, pulx_hi_state, pshx_lo_state, pshx_hi_state, + vect_lo_state, vect_hi_state ); + type addr_type is (idle_ad, fetch_ad, read_ad, write_ad, push_ad, pull_ad, int_hi_ad, int_lo_ad ); + type dout_type is (md_lo_dout, md_hi_dout, acca_dout, accb_dout, ix_lo_dout, ix_hi_dout, cc_dout, pc_lo_dout, pc_hi_dout ); + type op_type is (reset_op, fetch_op, latch_op ); + type acca_type is (reset_acca, load_acca, load_hi_acca, pull_acca, latch_acca ); + type accb_type is (reset_accb, load_accb, pull_accb, latch_accb ); + type cc_type is (reset_cc, load_cc, pull_cc, latch_cc ); + type ix_type is (reset_ix, load_ix, pull_lo_ix, pull_hi_ix, latch_ix ); + type sp_type is (reset_sp, latch_sp, load_sp ); + type pc_type is (reset_pc, latch_pc, load_ea_pc, add_ea_pc, pull_lo_pc, pull_hi_pc, inc_pc ); + type md_type is (reset_md, latch_md, load_md, fetch_first_md, fetch_next_md, shiftl_md ); + type ea_type is (reset_ea, latch_ea, add_ix_ea, load_accb_ea, inc_ea, fetch_first_ea, fetch_next_ea ); + type iv_type is (reset_iv, latch_iv, swi_iv, nmi_iv, irq_iv ); + type nmi_type is (reset_nmi, set_nmi, latch_nmi ); + type left_type is (acca_left, accb_left, accd_left, md_left, ix_left, sp_left ); + type right_type is (md_right, zero_right, plus_one_right, accb_right ); + type alu_type is (alu_add8, alu_sub8, alu_add16, alu_sub16, alu_adc, alu_sbc, + alu_and, alu_ora, alu_eor, + alu_tst, alu_inc, alu_dec, alu_clr, alu_neg, alu_com, + alu_inx, alu_dex, alu_cpx, + alu_lsr16, alu_lsl16, + alu_ror8, alu_rol8, + alu_asr8, alu_asl8, alu_lsr8, + alu_sei, alu_cli, alu_sec, alu_clc, alu_sev, alu_clv, alu_tpa, alu_tap, + alu_ld8, alu_st8, alu_ld16, alu_st16, alu_nop, alu_daa ); + + signal op_code: std_logic_vector(7 downto 0); + signal acca: std_logic_vector(7 downto 0); + signal accb: std_logic_vector(7 downto 0); + signal cc: std_logic_vector(7 downto 0); + signal cc_out: std_logic_vector(7 downto 0); + signal xreg: std_logic_vector(15 downto 0); + signal sp: std_logic_vector(15 downto 0); + signal ea: std_logic_vector(15 downto 0); + signal pc: std_logic_vector(15 downto 0); + signal md: std_logic_vector(15 downto 0); + signal left: std_logic_vector(15 downto 0); + signal right: std_logic_vector(15 downto 0); + signal out_alu: std_logic_vector(15 downto 0); + signal iv: std_logic_vector(1 downto 0); + signal nmi_req: std_logic; + signal nmi_ack: std_logic; + + signal state: state_type; + signal next_state: state_type; + signal pc_ctrl: pc_type; + signal ea_ctrl: ea_type; + signal op_ctrl: op_type; + signal md_ctrl: md_type; + signal acca_ctrl: acca_type; + signal accb_ctrl: accb_type; + signal ix_ctrl: ix_type; + signal cc_ctrl: cc_type; + signal sp_ctrl: sp_type; + signal iv_ctrl: iv_type; + signal left_ctrl: left_type; + signal right_ctrl: right_type; + signal alu_ctrl: alu_type; + signal addr_ctrl: addr_type; + signal dout_ctrl: dout_type; + signal nmi_ctrl: nmi_type; + + +begin + +---------------------------------- +-- +-- Address bus multiplexer +-- +---------------------------------- + +addr_mux: process( clk, addr_ctrl, pc, ea, sp, iv ) +begin + case addr_ctrl is + when idle_ad => + address <= "1111111111111111"; + vma <= '0'; + rw <= '1'; + when fetch_ad => + address <= pc; + vma <= '1'; + rw <= '1'; + when read_ad => + address <= ea; + vma <= '1'; + rw <= '1'; + when write_ad => + address <= ea; + vma <= '1'; + rw <= '0'; + when push_ad => + address <= sp; + vma <= '1'; + rw <= '0'; + when pull_ad => + address <= sp; + vma <= '1'; + rw <= '1'; + when int_hi_ad => + address <= "1111111111111" & iv & "0"; + vma <= '1'; + rw <= '1'; + when int_lo_ad => + address <= "1111111111111" & iv & "1"; + vma <= '1'; + rw <= '1'; + when others => + address <= "1111111111111111"; + vma <= '0'; + rw <= '1'; + end case; +end process; + +-------------------------------- +-- +-- Data Bus output +-- +-------------------------------- +dout_mux : process( clk, dout_ctrl, md, acca, accb, xreg, pc, cc ) +begin + case dout_ctrl is + when md_hi_dout => -- alu output + data_out <= md(15 downto 8); + when md_lo_dout => + data_out <= md(7 downto 0); + when acca_dout => -- accumulator a + data_out <= acca; + when accb_dout => -- accumulator b + data_out <= accb; + when ix_lo_dout => -- index reg + data_out <= xreg(7 downto 0); + when ix_hi_dout => -- index reg + data_out <= xreg(15 downto 8); + when cc_dout => -- condition codes + data_out <= cc; + when pc_lo_dout => -- low order pc + data_out <= pc(7 downto 0); + when pc_hi_dout => -- high order pc + data_out <= pc(15 downto 8); + when others => + data_out <= "00000000"; + end case; +end process; + + +---------------------------------- +-- +-- Program Counter Control +-- +---------------------------------- + +pc_mux: process( clk, pc_ctrl, pc, out_alu, data_in, ea, hold ) +variable tempof : std_logic_vector(15 downto 0); +variable temppc : std_logic_vector(15 downto 0); +begin + case pc_ctrl is + when add_ea_pc => + if ea(7) = '0' then + tempof := "00000000" & ea(7 downto 0); + else + tempof := "11111111" & ea(7 downto 0); + end if; + when inc_pc => + tempof := "0000000000000001"; + when others => + tempof := "0000000000000000"; + end case; + + case pc_ctrl is + when reset_pc => + temppc := "1111111111111110"; + when load_ea_pc => + temppc := ea; + when pull_lo_pc => + temppc(7 downto 0) := data_in; + temppc(15 downto 8) := pc(15 downto 8); + when pull_hi_pc => + temppc(7 downto 0) := pc(7 downto 0); + temppc(15 downto 8) := data_in; + when others => + temppc := pc; + end case; + + if clk'event and clk = '0' then + if hold = '1' then + pc <= pc; + else + pc <= temppc + tempof; + end if; + end if; +end process; + +---------------------------------- +-- +-- Effective Address Control +-- +---------------------------------- + +ea_mux: process( clk, ea_ctrl, ea, out_alu, data_in, accb, xreg, hold ) +variable tempind : std_logic_vector(15 downto 0); +variable tempea : std_logic_vector(15 downto 0); +begin + case ea_ctrl is + when add_ix_ea => + tempind := "00000000" & ea(7 downto 0); + when inc_ea => + tempind := "0000000000000001"; + when others => + tempind := "0000000000000000"; + end case; + + case ea_ctrl is + when reset_ea => + tempea := "0000000000000000"; + when load_accb_ea => + tempea := "00000000" & accb(7 downto 0); + when add_ix_ea => + tempea := xreg; + when fetch_first_ea => + tempea(7 downto 0) := data_in; + tempea(15 downto 8) := "00000000"; + when fetch_next_ea => + tempea(7 downto 0) := data_in; + tempea(15 downto 8) := ea(7 downto 0); + when others => + tempea := ea; + end case; + + if clk'event and clk = '0' then + if hold = '1' then + ea <= ea; + else + ea <= tempea + tempind; + end if; + end if; +end process; + +-------------------------------- +-- +-- Accumulator A +-- +-------------------------------- +acca_mux : process( clk, acca_ctrl, out_alu, acca, data_in, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + acca <= acca; + else + case acca_ctrl is + when reset_acca => + acca <= "00000000"; + when load_acca => + acca <= out_alu(7 downto 0); + when load_hi_acca => + acca <= out_alu(15 downto 8); + when pull_acca => + acca <= data_in; + when others => +-- when latch_acca => + acca <= acca; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- Accumulator B +-- +-------------------------------- +accb_mux : process( clk, accb_ctrl, out_alu, accb, data_in, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + accb <= accb; + else + case accb_ctrl is + when reset_accb => + accb <= "00000000"; + when load_accb => + accb <= out_alu(7 downto 0); + when pull_accb => + accb <= data_in; + when others => +-- when latch_accb => + accb <= accb; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- X Index register +-- +-------------------------------- +ix_mux : process( clk, ix_ctrl, out_alu, xreg, data_in, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + xreg <= xreg; + else + case ix_ctrl is + when reset_ix => + xreg <= "0000000000000000"; + when load_ix => + xreg <= out_alu(15 downto 0); + when pull_hi_ix => + xreg(15 downto 8) <= data_in; + when pull_lo_ix => + xreg(7 downto 0) <= data_in; + when others => +-- when latch_ix => + xreg <= xreg; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- stack pointer +-- +-------------------------------- +sp_mux : process( clk, sp_ctrl, out_alu, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + sp <= sp; + else + case sp_ctrl is + when reset_sp => + sp <= "0000000000000000"; + when load_sp => + sp <= out_alu(15 downto 0); + when others => +-- when latch_sp => + sp <= sp; + end case; + end if; + end if; +end process; + +-------------------------------- +-- +-- Memory Data +-- +-------------------------------- +md_mux : process( clk, md_ctrl, out_alu, data_in, md, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + md <= md; + else + case md_ctrl is + when reset_md => + md <= "0000000000000000"; + when load_md => + md <= out_alu(15 downto 0); + when fetch_first_md => + md(15 downto 8) <= "00000000"; + md(7 downto 0) <= data_in; + when fetch_next_md => + md(15 downto 8) <= md(7 downto 0); + md(7 downto 0) <= data_in; + when shiftl_md => + md(15 downto 1) <= md(14 downto 0); + md(0) <= '0'; + when others => +-- when latch_md => + md <= md; + end case; + end if; + end if; +end process; + + +---------------------------------- +-- +-- Condition Codes +-- +---------------------------------- + +cc_mux: process( clk, cc_ctrl, cc_out, cc, data_in, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + cc <= cc; + else + case cc_ctrl is + when reset_cc => + cc <= "11000000"; + when load_cc => + cc <= cc_out; + when pull_cc => + cc <= data_in; + when others => +-- when latch_cc => + cc <= cc; + end case; + end if; + end if; +end process; + +---------------------------------- +-- +-- interrupt vector +-- +---------------------------------- + +iv_mux: process( clk, iv_ctrl, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + iv <= iv; + else + case iv_ctrl is + when reset_iv => + iv <= "11"; + when nmi_iv => + iv <= "10"; + when swi_iv => + iv <= "01"; + when irq_iv => + iv <= "00"; + when others => + iv <= iv; + end case; + end if; + end if; +end process; + +---------------------------------- +-- +-- op code fetch +-- +---------------------------------- + +op_fetch: process( clk, data_in, op_ctrl, op_code, hold ) +begin + if clk'event and clk = '0' then + if hold = '1' then + op_code <= op_code; + else + case op_ctrl is + when reset_op => + op_code <= "00000001"; -- nop + when fetch_op => + op_code <= data_in; + when others => +-- when latch_op => + op_code <= op_code; + end case; + end if; + end if; +end process; + +---------------------------------- +-- +-- Left Mux +-- +---------------------------------- + +left_mux: process( left_ctrl, acca, accb, xreg, sp, pc, ea, md ) +begin + case left_ctrl is + when acca_left => + left(15 downto 8) <= "00000000"; + left(7 downto 0) <= acca; + when accb_left => + left(15 downto 8) <= "00000000"; + left(7 downto 0) <= accb; + when accd_left => + left(15 downto 8) <= acca; + left(7 downto 0) <= accb; + when ix_left => + left <= xreg; + when sp_left => + left <= sp; + when others => +-- when md_left => + left <= md; + end case; +end process; +---------------------------------- +-- +-- Right Mux +-- +---------------------------------- + +right_mux: process( right_ctrl, data_in, md, accb, ea ) +begin + case right_ctrl is + when zero_right => + right <= "0000000000000000"; + when plus_one_right => + right <= "0000000000000001"; + when accb_right => + right <= "00000000" & accb; + when others => +-- when md_right => + right <= md; + end case; +end process; + +---------------------------------- +-- +-- Arithmetic Logic Unit +-- +---------------------------------- + +mux_alu: process( alu_ctrl, cc, left, right, out_alu, cc_out ) +variable valid_lo, valid_hi : boolean; +variable carry_in : std_logic; +variable daa_reg : std_logic_vector(7 downto 0); +begin + + case alu_ctrl is + when alu_adc | alu_sbc | + alu_rol8 | alu_ror8 => + carry_in := cc(CBIT); + when others => + carry_in := '0'; + end case; + + valid_lo := left(3 downto 0) <= 9; + valid_hi := left(7 downto 4) <= 9; + + if (cc(CBIT) = '0') then + if( cc(HBIT) = '1' ) then + if valid_hi then + daa_reg := "00000110"; + else + daa_reg := "01100110"; + end if; + else + if valid_lo then + if valid_hi then + daa_reg := "00000000"; + else + daa_reg := "01100000"; + end if; + else + if( left(7 downto 4) <= 8 ) then + daa_reg := "00000110"; + else + daa_reg := "01100110"; + end if; + end if; + end if; + else + if ( cc(HBIT) = '1' )then + daa_reg := "01100110"; + else + if valid_lo then + daa_reg := "01100000"; + else + daa_reg := "01100110"; + end if; + end if; + end if; + + case alu_ctrl is + when alu_add8 | alu_inc | + alu_add16 | alu_inx | + alu_adc => + out_alu <= left + right + ("000000000000000" & carry_in); + when alu_sub8 | alu_dec | + alu_sub16 | alu_dex | + alu_sbc | alu_cpx => + out_alu <= left - right - ("000000000000000" & carry_in); + when alu_and => + out_alu <= left and right; -- and/bit + when alu_ora => + out_alu <= left or right; -- or + when alu_eor => + out_alu <= left xor right; -- eor/xor + when alu_lsl16 | alu_asl8 | alu_rol8 => + out_alu <= left(14 downto 0) & carry_in; -- rol8/asl8/lsl16 + when alu_lsr16 | alu_lsr8 => + out_alu <= carry_in & left(15 downto 1); -- lsr + when alu_ror8 => + out_alu <= "00000000" & carry_in & left(7 downto 1); -- ror + when alu_asr8 => + out_alu <= "00000000" & left(7) & left(7 downto 1); -- asr + when alu_neg => + out_alu <= right - left; -- neg (right=0) + when alu_com => + out_alu <= not left; + when alu_clr | alu_ld8 | alu_ld16 => + out_alu <= right; -- clr, ld + when alu_st8 | alu_st16 => + out_alu <= left; + when alu_daa => + out_alu <= left + ("00000000" & daa_reg); + when alu_tpa => + out_alu <= "00000000" & cc; + when others => + out_alu <= left; -- nop + end case; + + -- + -- carry bit + -- + case alu_ctrl is + when alu_add8 | alu_adc => + cc_out(CBIT) <= (left(7) and right(7)) or + (left(7) and not out_alu(7)) or + (right(7) and not out_alu(7)); + when alu_sub8 | alu_sbc => + cc_out(CBIT) <= ((not left(7)) and right(7)) or + ((not left(7)) and out_alu(7)) or + (right(7) and out_alu(7)); + when alu_add16 => + cc_out(CBIT) <= (left(15) and right(15)) or + (left(15) and not out_alu(15)) or + (right(15) and not out_alu(15)); + when alu_sub16 => + cc_out(CBIT) <= ((not left(15)) and right(15)) or + ((not left(15)) and out_alu(15)) or + (right(15) and out_alu(15)); + when alu_ror8 | alu_lsr16 | alu_lsr8 | alu_asr8 => + cc_out(CBIT) <= left(0); + when alu_rol8 | alu_asl8 => + cc_out(CBIT) <= left(7); + when alu_lsl16 => + cc_out(CBIT) <= left(15); + when alu_com => + cc_out(CBIT) <= '1'; + when alu_neg | alu_clr => + cc_out(CBIT) <= out_alu(7) or out_alu(6) or out_alu(5) or out_alu(4) or + out_alu(3) or out_alu(2) or out_alu(1) or out_alu(0); + when alu_daa => + if ( daa_reg(7 downto 4) = "0110" ) then + cc_out(CBIT) <= '1'; + else + cc_out(CBIT) <= '0'; + end if; + when alu_sec => + cc_out(CBIT) <= '1'; + when alu_clc => + cc_out(CBIT) <= '0'; + when alu_tap => + cc_out(CBIT) <= left(CBIT); + when others => -- carry is not affected by cpx + cc_out(CBIT) <= cc(CBIT); + end case; + -- + -- Zero flag + -- + case alu_ctrl is + when alu_add8 | alu_sub8 | + alu_adc | alu_sbc | + alu_and | alu_ora | alu_eor | + alu_inc | alu_dec | + alu_neg | alu_com | alu_clr | + alu_rol8 | alu_ror8 | alu_asr8 | alu_asl8 | alu_lsr8 | + alu_ld8 | alu_st8 => + cc_out(ZBIT) <= not( out_alu(7) or out_alu(6) or out_alu(5) or out_alu(4) or + out_alu(3) or out_alu(2) or out_alu(1) or out_alu(0) ); + when alu_add16 | alu_sub16 | + alu_lsl16 | alu_lsr16 | + alu_inx | alu_dex | + alu_ld16 | alu_st16 | alu_cpx => + cc_out(ZBIT) <= not( out_alu(15) or out_alu(14) or out_alu(13) or out_alu(12) or + out_alu(11) or out_alu(10) or out_alu(9) or out_alu(8) or + out_alu(7) or out_alu(6) or out_alu(5) or out_alu(4) or + out_alu(3) or out_alu(2) or out_alu(1) or out_alu(0) ); + when alu_tap => + cc_out(ZBIT) <= left(ZBIT); + when others => + cc_out(ZBIT) <= cc(ZBIT); + end case; + + -- + -- negative flag + -- + case alu_ctrl is + when alu_add8 | alu_sub8 | + alu_adc | alu_sbc | + alu_and | alu_ora | alu_eor | + alu_rol8 | alu_ror8 | alu_asr8 | alu_asl8 | alu_lsr8 | + alu_inc | alu_dec | alu_neg | alu_com | alu_clr | + alu_ld8 | alu_st8 => + cc_out(NBIT) <= out_alu(7); + when alu_add16 | alu_sub16 | + alu_lsl16 | alu_lsr16 | + alu_ld16 | alu_st16 | alu_cpx => + cc_out(NBIT) <= out_alu(15); + when alu_tap => + cc_out(NBIT) <= left(NBIT); + when others => + cc_out(NBIT) <= cc(NBIT); + end case; + + -- + -- Interrupt mask flag + -- + case alu_ctrl is + when alu_sei => + cc_out(IBIT) <= '1'; -- set interrupt mask + when alu_cli => + cc_out(IBIT) <= '0'; -- clear interrupt mask + when alu_tap => + cc_out(IBIT) <= left(IBIT); + when others => + cc_out(IBIT) <= cc(IBIT); -- interrupt mask + end case; + + -- + -- Half Carry flag + -- + case alu_ctrl is + when alu_add8 | alu_adc => + cc_out(HBIT) <= (left(3) and right(3)) or + (right(3) and not out_alu(3)) or + (left(3) and not out_alu(3)); + when alu_tap => + cc_out(HBIT) <= left(HBIT); + when others => + cc_out(HBIT) <= cc(HBIT); + end case; + + -- + -- Overflow flag + -- + case alu_ctrl is + when alu_add8 | alu_adc => + cc_out(VBIT) <= (left(7) and right(7) and (not out_alu(7))) or + ((not left(7)) and (not right(7)) and out_alu(7)); + when alu_sub8 | alu_sbc => + cc_out(VBIT) <= (left(7) and (not right(7)) and (not out_alu(7))) or + ((not left(7)) and right(7) and out_alu(7)); + when alu_add16 => + cc_out(VBIT) <= (left(15) and right(15) and (not out_alu(15))) or + ((not left(15)) and (not right(15)) and out_alu(15)); + when alu_sub16 | alu_cpx => + cc_out(VBIT) <= (left(15) and (not right(15)) and (not out_alu(15))) or + ((not left(15)) and right(15) and out_alu(15)); + when alu_inc => + cc_out(VBIT) <= ((not left(7)) and left(6) and left(5) and left(4) and + left(3) and left(2) and left(1) and left(0)); + when alu_dec | alu_neg => + cc_out(VBIT) <= (left(7) and (not left(6)) and (not left(5)) and (not left(4)) and + (not left(3)) and (not left(2)) and (not left(1)) and (not left(0))); + when alu_asr8 => + cc_out(VBIT) <= left(0) xor left(7); + when alu_lsr8 | alu_lsr16 => + cc_out(VBIT) <= left(0); + when alu_ror8 => + cc_out(VBIT) <= left(0) xor cc(CBIT); + when alu_lsl16 => + cc_out(VBIT) <= left(15) xor left(14); + when alu_rol8 | alu_asl8 => + cc_out(VBIT) <= left(7) xor left(6); + when alu_tap => + cc_out(VBIT) <= left(VBIT); + when alu_and | alu_ora | alu_eor | alu_com | + alu_st8 | alu_st16 | alu_ld8 | alu_ld16 | + alu_clv => + cc_out(VBIT) <= '0'; + when alu_sev => + cc_out(VBIT) <= '1'; + when others => + cc_out(VBIT) <= cc(VBIT); + end case; + + case alu_ctrl is + when alu_tap => + cc_out(XBIT) <= cc(XBIT) and left(XBIT); + cc_out(SBIT) <= left(SBIT); + when others => + cc_out(XBIT) <= cc(XBIT) and left(XBIT); + cc_out(SBIT) <= cc(SBIT); + end case; + + test_alu <= out_alu; + test_cc <= cc_out; +end process; + +------------------------------------ +-- +-- Detect Edge of NMI interrupt +-- +------------------------------------ + +nmi_handler : process( clk, rst, nmi, nmi_ack ) +begin + if clk'event and clk='0' then + if hold = '1' then + nmi_req <= nmi_req; + else + if rst='1' then + nmi_req <= '0'; + else + if (nmi='1') and (nmi_ack='0') then + nmi_req <= '1'; + else + if (nmi='0') and (nmi_ack='1') then + nmi_req <= '0'; + else + nmi_req <= nmi_req; + end if; + end if; + end if; + end if; + end if; +end process; + +------------------------------------ +-- +-- Nmi mux +-- +------------------------------------ + +nmi_mux: process( clk, nmi_ctrl, nmi_ack, hold ) +begin + if clk'event and clk='0' then + if hold = '1' then + nmi_ack <= nmi_ack; + else + case nmi_ctrl is + when set_nmi => + nmi_ack <= '1'; + when reset_nmi => + nmi_ack <= '0'; + when others => +-- when latch_nmi => + nmi_ack <= nmi_ack; + end case; + end if; + end if; +end process; + +------------------------------------ +-- +-- state sequencer +-- +------------------------------------ +process( state, op_code, cc, ea, irq, nmi_req, nmi_ack, hold, halt ) + begin + case state is + when reset_state => -- released from reset + -- reset the registers + op_ctrl <= reset_op; + acca_ctrl <= reset_acca; + accb_ctrl <= reset_accb; + ix_ctrl <= reset_ix; + sp_ctrl <= reset_sp; + pc_ctrl <= reset_pc; + ea_ctrl <= reset_ea; + md_ctrl <= reset_md; + iv_ctrl <= reset_iv; + nmi_ctrl <= reset_nmi; + -- idle the ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= reset_cc; + -- idle the bus + dout_ctrl <= md_lo_dout; + addr_ctrl <= idle_ad; + next_state <= vect_hi_state; + + -- + -- Jump via interrupt vector + -- iv holds interrupt type + -- fetch PC hi from vector location + -- + when vect_hi_state => + -- default the registers + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + md_ctrl <= latch_md; + ea_ctrl <= latch_ea; + iv_ctrl <= latch_iv; + -- idle the ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- fetch pc low interrupt vector + pc_ctrl <= pull_hi_pc; + addr_ctrl <= int_hi_ad; + dout_ctrl <= pc_hi_dout; + next_state <= vect_lo_state; + -- + -- jump via interrupt vector + -- iv holds vector type + -- fetch PC lo from vector location + -- + when vect_lo_state => + -- default the registers + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + md_ctrl <= latch_md; + ea_ctrl <= latch_ea; + iv_ctrl <= latch_iv; + -- idle the ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- fetch the vector low byte + pc_ctrl <= pull_lo_pc; + addr_ctrl <= int_lo_ad; + dout_ctrl <= pc_lo_dout; + next_state <= fetch_state; + + -- + -- Here to fetch an instruction + -- PC points to opcode + -- Should service interrupt requests at this point + -- either from the timer + -- or from the external input. + -- + when fetch_state => + case op_code(7 downto 4) is + when "0000" | + "0001" | + "0010" | -- branch conditional + "0011" | + "0100" | -- acca single op + "0101" | -- accb single op + "0110" | -- indexed single op + "0111" => -- extended single op + -- idle ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + + when "1000" | -- acca immediate + "1001" | -- acca direct + "1010" | -- acca indexed + "1011" => -- acca extended + case op_code(3 downto 0) is + when "0000" => -- suba + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0001" => -- cmpa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0010" => -- sbca + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sbc; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0011" => -- subd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0100" => -- anda + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0101" => -- bita + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0110" => -- ldaa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0111" => -- staa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1000" => -- eora + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_eor; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1001" => -- adca + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_adc; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1010" => -- oraa + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ora; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1011" => -- adda + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1100" => -- cpx + left_ctrl <= ix_left; + right_ctrl <= md_right; + alu_ctrl <= alu_cpx; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1101" => -- bsr / jsr + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1110" => -- lds + left_ctrl <= sp_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + when "1111" => -- sts + left_ctrl <= sp_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when others => + left_ctrl <= acca_left; + right_ctrl <= md_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + end case; + when "1100" | -- accb immediate + "1101" | -- accb direct + "1110" | -- accb indexed + "1111" => -- accb extended + case op_code(3 downto 0) is + when "0000" => -- subb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0001" => -- cmpb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0010" => -- sbcb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_sbc; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0011" => -- addd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0100" => -- andb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0101" => -- bitb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_and; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0110" => -- ldab + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "0111" => -- stab + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1000" => -- eorb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_eor; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1001" => -- adcb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_adc; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1010" => -- orab + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ora; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1011" => -- addb + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1100" => -- ldd + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1101" => -- std + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when "1110" => -- ldx + left_ctrl <= ix_left; + right_ctrl <= md_right; + alu_ctrl <= alu_ld16; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= load_ix; + sp_ctrl <= latch_sp; + when "1111" => -- stx + left_ctrl <= ix_left; + right_ctrl <= md_right; + alu_ctrl <= alu_st16; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + when others => + left_ctrl <= accb_left; + right_ctrl <= md_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + end case; + when others => + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + end case; + md_ctrl <= latch_md; + -- fetch the op code + op_ctrl <= fetch_op; + ea_ctrl <= reset_ea; + addr_ctrl <= fetch_ad; + dout_ctrl <= md_lo_dout; + iv_ctrl <= latch_iv; + if halt = '1' then + pc_ctrl <= latch_pc; + nmi_ctrl <= latch_nmi; + next_state <= halt_state; + -- service non maskable interrupts + elsif (nmi_req = '1') and (nmi_ack = '0') then + pc_ctrl <= latch_pc; + nmi_ctrl <= set_nmi; + next_state <= int_pcl_state; + -- service maskable interrupts + else + -- + -- nmi request is not cleared until nmi input goes low + -- + if(nmi_req = '0') and (nmi_ack='1') then + nmi_ctrl <= reset_nmi; + else + nmi_ctrl <= latch_nmi; + end if; + -- + -- IRQ is level sensitive + -- + if (irq = '1') and (cc(IBIT) = '0') then + pc_ctrl <= latch_pc; + next_state <= int_pcl_state; + else + -- Advance the PC to fetch next instruction byte + pc_ctrl <= inc_pc; + next_state <= decode_state; + end if; + end if; + -- + -- Here to decode instruction + -- and fetch next byte of intruction + -- whether it be necessary or not + -- + when decode_state => + -- fetch first byte of address or immediate data + ea_ctrl <= fetch_first_ea; + addr_ctrl <= fetch_ad; + dout_ctrl <= md_lo_dout; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + iv_ctrl <= latch_iv; + case op_code(7 downto 4) is + when "0000" => + md_ctrl <= fetch_first_md; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + case op_code(3 downto 0) is + when "0001" => -- nop + left_ctrl <= accd_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "0100" => -- lsrd + left_ctrl <= accd_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + when "0101" => -- lsld + left_ctrl <= accd_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_lsl16; + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + ix_ctrl <= latch_ix; + when "0110" => -- tap + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_tap; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "0111" => -- tpa + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_tpa; + cc_ctrl <= latch_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "1000" => -- inx + left_ctrl <= ix_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_inx; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= load_ix; + when "1001" => -- dex + left_ctrl <= ix_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_dex; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= load_ix; + when "1010" => -- clv + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_clv; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "1011" => -- sev + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_sev; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "1100" => -- clc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_clc; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "1101" => -- sec + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_sec; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "1110" => -- cli + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_cli; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when "1111" => -- sei + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_sei; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + end case; + next_state <= fetch_state; + -- acca / accb inherent instructions + when "0001" => + md_ctrl <= fetch_first_md; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + left_ctrl <= acca_left; + right_ctrl <= accb_right; + case op_code(3 downto 0) is + when "0000" => -- sba + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + when "0001" => -- cba + alu_ctrl <= alu_sub8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + when "0110" => -- tab + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= load_accb; + when "0111" => -- tba + alu_ctrl <= alu_ld8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + when "1001" => -- daa + alu_ctrl <= alu_daa; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + when "1011" => -- aba + alu_ctrl <= alu_add8; + cc_ctrl <= load_cc; + acca_ctrl <= load_acca; + accb_ctrl <= latch_accb; + when others => + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end case; + next_state <= fetch_state; + when "0010" => -- branch conditional + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- increment the pc + pc_ctrl <= inc_pc; + case op_code(3 downto 0) is + when "0000" => -- bra + next_state <= branch_state; + when "0001" => -- brn + next_state <= fetch_state; + when "0010" => -- bhi + if (cc(CBIT) or cc(ZBIT)) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "0011" => -- bls + if (cc(CBIT) or cc(ZBIT)) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "0100" => -- bcc/bhs + if cc(CBIT) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "0101" => -- bcs/blo + if cc(CBIT) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "0110" => -- bne + if cc(ZBIT) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "0111" => -- beq + if cc(ZBIT) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1000" => -- bvc + if cc(VBIT) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1001" => -- bvs + if cc(VBIT) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1010" => -- bpl + if cc(NBIT) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1011" => -- bmi + if cc(NBIT) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1100" => -- bge + if (cc(NBIT) xor cc(VBIT)) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1101" => -- blt + if (cc(NBIT) xor cc(VBIT)) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1110" => -- bgt + if (cc(ZBIT) or (cc(NBIT) xor cc(VBIT))) = '0' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when "1111" => -- ble + if (cc(ZBIT) or (cc(NBIT) xor cc(VBIT))) = '1' then + next_state <= branch_state; + else + next_state <= fetch_state; + end if; + when others => + next_state <= fetch_state; + end case; + -- + -- Single byte stack operators + -- Do not advance PC + -- + when "0011" => + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + pc_ctrl <= latch_pc; + case op_code(3 downto 0) is + when "0000" => -- tsx + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= load_ix; + sp_ctrl <= latch_sp; + next_state <= fetch_state; + when "0001" => -- ins + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= fetch_state; + when "0010" => -- pula + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= pula_state; + when "0011" => -- pulb + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= pulb_state; + when "0100" => -- des + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= fetch_state; + when "0101" => -- txs + left_ctrl <= ix_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= fetch_state; + when "0110" => -- psha + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= psha_state; + when "0111" => -- pshb + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= pshb_state; + when "1000" => -- pulx + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= pulx_hi_state; + when "1001" => -- rts + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= rts_hi_state; + when "1010" => -- abx + left_ctrl <= ix_left; + right_ctrl <= accb_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= load_ix; + sp_ctrl <= latch_sp; + next_state <= fetch_state; + when "1011" => -- rti + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= load_sp; + next_state <= rti_cc_state; + when "1100" => -- pshx + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= pshx_lo_state; + when "1101" => -- mul + left_ctrl <= acca_left; + right_ctrl <= accb_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= mul_state; + when "1110" => -- wai + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= int_pcl_state; + when "1111" => -- swi + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= int_pcl_state; + when others => + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + next_state <= fetch_state; + end case; + -- + -- Accumulator A Single operand + -- source = Acc A dest = Acc A + -- Do not advance PC + -- + when "0100" => -- acca single op + md_ctrl <= fetch_first_md; + accb_ctrl <= latch_accb; + pc_ctrl <= latch_pc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + left_ctrl <= acca_left; + case op_code(3 downto 0) is + when "0000" => -- neg + right_ctrl <= zero_right; + alu_ctrl <= alu_neg; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "0011" => -- com + right_ctrl <= zero_right; + alu_ctrl <= alu_com; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "0100" => -- lsr + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "0110" => -- ror + right_ctrl <= zero_right; + alu_ctrl <= alu_ror8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "0111" => -- asr + right_ctrl <= zero_right; + alu_ctrl <= alu_asr8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "1000" => -- asl + right_ctrl <= zero_right; + alu_ctrl <= alu_asl8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "1001" => -- rol + right_ctrl <= zero_right; + alu_ctrl <= alu_rol8; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "1010" => -- dec + right_ctrl <= plus_one_right; + alu_ctrl <= alu_dec; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "1011" => -- undefined + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + acca_ctrl <= latch_acca; + cc_ctrl <= latch_cc; + when "1100" => -- inc + right_ctrl <= plus_one_right; + alu_ctrl <= alu_inc; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when "1101" => -- tst + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + acca_ctrl <= latch_acca; + cc_ctrl <= load_cc; + when "1110" => -- jmp + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + acca_ctrl <= latch_acca; + cc_ctrl <= latch_cc; + when "1111" => -- clr + right_ctrl <= zero_right; + alu_ctrl <= alu_clr; + acca_ctrl <= load_acca; + cc_ctrl <= load_cc; + when others => + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + acca_ctrl <= latch_acca; + cc_ctrl <= latch_cc; + end case; + next_state <= fetch_state; + -- + -- single operand acc b + -- Do not advance PC + -- + when "0101" => + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + pc_ctrl <= latch_pc; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + left_ctrl <= accb_left; + case op_code(3 downto 0) is + when "0000" => -- neg + right_ctrl <= zero_right; + alu_ctrl <= alu_neg; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "0011" => -- com + right_ctrl <= zero_right; + alu_ctrl <= alu_com; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "0100" => -- lsr + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "0110" => -- ror + right_ctrl <= zero_right; + alu_ctrl <= alu_ror8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "0111" => -- asr + right_ctrl <= zero_right; + alu_ctrl <= alu_asr8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "1000" => -- asl + right_ctrl <= zero_right; + alu_ctrl <= alu_asl8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "1001" => -- rol + right_ctrl <= zero_right; + alu_ctrl <= alu_rol8; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "1010" => -- dec + right_ctrl <= plus_one_right; + alu_ctrl <= alu_dec; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "1011" => -- undefined + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + accb_ctrl <= latch_accb; + cc_ctrl <= latch_cc; + when "1100" => -- inc + right_ctrl <= plus_one_right; + alu_ctrl <= alu_inc; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when "1101" => -- tst + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + accb_ctrl <= latch_accb; + cc_ctrl <= load_cc; + when "1110" => -- jmp + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + accb_ctrl <= latch_accb; + cc_ctrl <= latch_cc; + when "1111" => -- clr + right_ctrl <= zero_right; + alu_ctrl <= alu_clr; + accb_ctrl <= load_accb; + cc_ctrl <= load_cc; + when others => + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + accb_ctrl <= latch_accb; + cc_ctrl <= latch_cc; + end case; + next_state <= fetch_state; + -- + -- Single operand indexed + -- Two byte instruction so advance PC + -- EA should hold index offset + -- + when "0110" => -- indexed single op + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + next_state <= indexed_state; + -- + -- Single operand extended addressing + -- three byte instruction so advance the PC + -- Low order EA holds high order address + -- + when "0111" => -- extended single op + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + next_state <= extended_state; + + when "1000" => -- acca immediate + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + case op_code(3 downto 0) is + when "0011" | -- subdd # + "1100" | -- cpx # + "1110" => -- lds # + next_state <= immediate16_state; + when "1101" => -- bsr + next_state <= bsr_state; + when others => + next_state <= fetch_state; + end case; + + when "1001" => -- acca direct + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + pc_ctrl <= inc_pc; + case op_code(3 downto 0) is + when "0111" => -- staa direct + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1111" => -- sts direct + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when "1101" => -- jsr direct + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + next_state <= jsr_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + next_state <= read8_state; + end case; + + when "1010" => -- acca indexed + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + next_state <= indexed_state; + + when "1011" => -- acca extended + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + next_state <= extended_state; + + when "1100" => -- accb immediate + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + case op_code(3 downto 0) is + when "0011" | -- addd # + "1100" | -- ldd # + "1110" => -- ldx # + next_state <= immediate16_state; + when others => + next_state <= fetch_state; + end case; + + when "1101" => -- accb direct + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + pc_ctrl <= inc_pc; + case op_code(3 downto 0) is + when "0111" => -- stab direct + left_ctrl <= accb_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1101" => -- std direct + left_ctrl <= accd_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when "1111" => -- stx direct + left_ctrl <= ix_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + next_state <= read8_state; + end case; + + when "1110" => -- accb indexed + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + next_state <= indexed_state; + + when "1111" => -- accb extended + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- increment the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + next_state <= extended_state; + + when others => + md_ctrl <= fetch_first_md; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + -- idle the pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= latch_pc; + next_state <= fetch_state; + end case; + + when immediate16_state => + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + op_ctrl <= latch_op; + iv_ctrl <= latch_iv; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment pc + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= inc_pc; + -- fetch next immediate byte + md_ctrl <= fetch_next_md; + addr_ctrl <= fetch_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + -- + -- ea holds 8 bit index offet + -- calculate the effective memory address + -- using the alu + -- + when indexed_state => + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + -- calculate effective address from index reg + -- index offest is not sign extended + ea_ctrl <= add_ix_ea; + -- idle the bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + -- work out next state + case op_code(7 downto 4) is + when "0110" => -- single op indexed + md_ctrl <= latch_md; + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + case op_code(3 downto 0) is + when "1011" => -- undefined + next_state <= fetch_state; + when "1110" => -- jmp + next_state <= jmp_state; + when others => + next_state <= read8_state; + end case; + when "1010" => -- acca indexed + case op_code(3 downto 0) is + when "0111" => -- staa + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1101" => -- jsr + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= jsr_state; + when "1111" => -- sts + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= read8_state; + end case; + when "1110" => -- accb indexed + case op_code(3 downto 0) is + when "0111" => -- stab direct + left_ctrl <= accb_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1101" => -- std direct + left_ctrl <= accd_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when "1111" => -- stx direct + left_ctrl <= ix_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= read8_state; + end case; + when others => + md_ctrl <= latch_md; + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + next_state <= fetch_state; + end case; + -- + -- ea holds the low byte of the absolute address + -- Move ea low byte into ea high byte + -- load new ea low byte to for absolute 16 bit address + -- advance the program counter + -- + when extended_state => -- fetch ea low byte + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + -- increment pc + pc_ctrl <= inc_pc; + -- fetch next effective address bytes + ea_ctrl <= fetch_next_ea; + addr_ctrl <= fetch_ad; + dout_ctrl <= md_lo_dout; + -- work out the next state + case op_code(7 downto 4) is + when "0111" => -- single op extended + md_ctrl <= latch_md; + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + case op_code(3 downto 0) is + when "1011" => -- undefined + next_state <= fetch_state; + when "1110" => -- jmp + next_state <= jmp_state; + when others => + next_state <= read8_state; + end case; + when "1011" => -- acca extended + case op_code(3 downto 0) is + when "0111" => -- staa + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1101" => -- jsr + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= jsr_state; + when "1111" => -- sts + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= read8_state; + end case; + when "1111" => -- accb extended + case op_code(3 downto 0) is + when "0111" => -- stab + left_ctrl <= accb_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1101" => -- std + left_ctrl <= accd_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when "1111" => -- stx + left_ctrl <= ix_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= read8_state; + end case; + when others => + md_ctrl <= latch_md; + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + next_state <= fetch_state; + end case; + -- + -- here if ea holds low byte (direct page) + -- can enter here from extended addressing + -- read memory location + -- note that reads may be 8 or 16 bits + -- + when read8_state => -- read data + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + -- + addr_ctrl <= read_ad; + dout_ctrl <= md_lo_dout; + case op_code(7 downto 4) is + when "0110" | "0111" => -- single operand + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + ea_ctrl <= latch_ea; + next_state <= execute_state; + + when "1001" | "1010" | "1011" => -- acca + case op_code(3 downto 0) is + when "0011" | -- subd + "1110" | -- lds + "1100" => -- cpx + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + -- increment the effective address in case of 16 bit load + ea_ctrl <= inc_ea; + next_state <= read16_state; +-- when "0111" => -- staa +-- left_ctrl <= acca_left; +-- right_ctrl <= zero_right; +-- alu_ctrl <= alu_st8; +-- cc_ctrl <= latch_cc; +-- md_ctrl <= load_md; +-- ea_ctrl <= latch_ea; +-- next_state <= write8_state; +-- when "1101" => -- jsr +-- left_ctrl <= acca_left; +-- right_ctrl <= zero_right; +-- alu_ctrl <= alu_nop; +-- cc_ctrl <= latch_cc; +-- md_ctrl <= latch_md; +-- ea_ctrl <= latch_ea; +-- next_state <= jsr_state; +-- when "1111" => -- sts +-- left_ctrl <= sp_left; +-- right_ctrl <= zero_right; +-- alu_ctrl <= alu_st16; +-- cc_ctrl <= latch_cc; +-- md_ctrl <= load_md; +-- ea_ctrl <= latch_ea; +-- next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + ea_ctrl <= latch_ea; + next_state <= fetch_state; + end case; + + when "1101" | "1110" | "1111" => -- accb + case op_code(3 downto 0) is + when "0011" | -- addd + "1100" | -- ldd + "1110" => -- ldx + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + -- increment the effective address in case of 16 bit load + ea_ctrl <= inc_ea; + next_state <= read16_state; +-- when "0111" => -- stab +-- left_ctrl <= accb_left; +-- right_ctrl <= zero_right; +-- alu_ctrl <= alu_st8; +-- cc_ctrl <= latch_cc; +-- md_ctrl <= load_md; +-- ea_ctrl <= latch_ea; +-- next_state <= write8_state; +-- when "1101" => -- std +-- left_ctrl <= accd_left; +-- right_ctrl <= zero_right; +-- alu_ctrl <= alu_st16; +-- cc_ctrl <= latch_cc; +-- md_ctrl <= load_md; +-- ea_ctrl <= latch_ea; +-- next_state <= write16_state; +-- when "1111" => -- stx +-- left_ctrl <= ix_left; +-- right_ctrl <= zero_right; +-- alu_ctrl <= alu_st16; +-- cc_ctrl <= latch_cc; +-- md_ctrl <= load_md; +-- ea_ctrl <= latch_ea; +-- next_state <= write16_state; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + ea_ctrl <= latch_ea; + next_state <= execute_state; + end case; + when others => + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= fetch_first_md; + ea_ctrl <= latch_ea; + next_state <= fetch_state; + end case; + + when read16_state => -- read second data byte from ea + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- idle the effective address + ea_ctrl <= latch_ea; + -- read the low byte of the 16 bit data + md_ctrl <= fetch_next_md; + addr_ctrl <= read_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + -- + -- 16 bit Write state + -- write high byte of ALU output. + -- EA hold address of memory to write to + -- Advance the effective address in ALU + -- + when write16_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + -- increment the effective address + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + ea_ctrl <= inc_ea; + -- write the ALU hi byte to ea + addr_ctrl <= write_ad; + dout_ctrl <= md_hi_dout; + next_state <= write8_state; + -- + -- 8 bit write + -- Write low 8 bits of ALU output + -- + when write8_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- idle the ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- write ALU low byte output + addr_ctrl <= write_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + + when jmp_state => + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- load PC with effective address + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= load_ea_pc; + -- idle the bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + + when jsr_state => -- JSR + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write pc low + addr_ctrl <= push_ad; + dout_ctrl <= pc_lo_dout; + next_state <= jsr1_state; + + when jsr1_state => -- JSR + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write pc hi + addr_ctrl <= push_ad; + dout_ctrl <= pc_hi_dout; + next_state <= jmp_state; + + when branch_state => -- Bcc + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- calculate signed branch + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + pc_ctrl <= add_ea_pc; + -- idle the bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + + when bsr_state => -- BSR + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write pc low + addr_ctrl <= push_ad; + dout_ctrl <= pc_lo_dout; + next_state <= bsr1_state; + + when bsr1_state => -- BSR + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write pc hi + addr_ctrl <= push_ad; + dout_ctrl <= pc_hi_dout; + next_state <= branch_state; + + when rts_hi_state => -- RTS + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment the sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- read pc hi + pc_ctrl <= pull_hi_pc; + addr_ctrl <= pull_ad; + dout_ctrl <= pc_hi_dout; + next_state <= rts_lo_state; + + when rts_lo_state => -- RTS1 + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- idle the ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- read pc low + pc_ctrl <= pull_lo_pc; + addr_ctrl <= pull_ad; + dout_ctrl <= pc_lo_dout; + next_state <= fetch_state; + + when mul_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- move acca to md + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_st16; + cc_ctrl <= latch_cc; + md_ctrl <= load_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mulea_state; + + when mulea_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + md_ctrl <= latch_md; + -- idle ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- move accb to ea + ea_ctrl <= load_accb_ea; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= muld_state; + + when muld_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + md_ctrl <= latch_md; + -- clear accd + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_ld8; + cc_ctrl <= latch_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul0_state; + + when mul0_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 0 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(0) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul1_state; + + when mul1_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 1 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(1) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul2_state; + + when mul2_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 2 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(2) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul3_state; + + when mul3_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 3 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(3) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul4_state; + + when mul4_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 4 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(4) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul5_state; + + when mul5_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 5 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(5) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul6_state; + + when mul6_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 6 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(6) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= mul7_state; + + when mul7_state => + -- default + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- if bit 7 of ea set, add accd to md + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_add16; + if ea(7) = '1' then + cc_ctrl <= load_cc; + acca_ctrl <= load_hi_acca; + accb_ctrl <= load_accb; + else + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + end if; + md_ctrl <= shiftl_md; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + + when execute_state => -- execute single operand instruction + -- default + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + case op_code(7 downto 4) is + when "0110" | -- indexed single op + "0111" => -- extended single op + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + iv_ctrl <= latch_iv; + ea_ctrl <= latch_ea; + -- idle the bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + left_ctrl <= md_left; + case op_code(3 downto 0) is + when "0000" => -- neg + right_ctrl <= zero_right; + alu_ctrl <= alu_neg; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "0011" => -- com + right_ctrl <= zero_right; + alu_ctrl <= alu_com; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "0100" => -- lsr + right_ctrl <= zero_right; + alu_ctrl <= alu_lsr8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "0110" => -- ror + right_ctrl <= zero_right; + alu_ctrl <= alu_ror8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "0111" => -- asr + right_ctrl <= zero_right; + alu_ctrl <= alu_asr8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1000" => -- asl + right_ctrl <= zero_right; + alu_ctrl <= alu_asl8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1001" => -- rol + right_ctrl <= zero_right; + alu_ctrl <= alu_rol8; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1010" => -- dec + right_ctrl <= plus_one_right; + alu_ctrl <= alu_dec; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1011" => -- undefined + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= fetch_state; + when "1100" => -- inc + right_ctrl <= plus_one_right; + alu_ctrl <= alu_inc; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when "1101" => -- tst + right_ctrl <= zero_right; + alu_ctrl <= alu_st8; + cc_ctrl <= load_cc; + md_ctrl <= latch_md; + next_state <= fetch_state; + when "1110" => -- jmp + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= fetch_state; + when "1111" => -- clr + right_ctrl <= zero_right; + alu_ctrl <= alu_clr; + cc_ctrl <= load_cc; + md_ctrl <= load_md; + next_state <= write8_state; + when others => + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + md_ctrl <= latch_md; + next_state <= fetch_state; + end case; + + when others => + left_ctrl <= accd_left; + right_ctrl <= md_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + ea_ctrl <= latch_ea; + -- idle the bus + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= fetch_state; + end case; + + when psha_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write acca + addr_ctrl <= push_ad; + dout_ctrl <= acca_dout; + next_state <= fetch_state; + + when pula_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- idle sp + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + sp_ctrl <= latch_sp; + -- read acca + acca_ctrl <= pull_acca; + addr_ctrl <= pull_ad; + dout_ctrl <= acca_dout; + next_state <= fetch_state; + + when pshb_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write accb + addr_ctrl <= push_ad; + dout_ctrl <= accb_dout; + next_state <= fetch_state; + + when pulb_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- idle sp + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + sp_ctrl <= latch_sp; + -- read accb + accb_ctrl <= pull_accb; + addr_ctrl <= pull_ad; + dout_ctrl <= accb_dout; + next_state <= fetch_state; + + when pshx_lo_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write ix low + addr_ctrl <= push_ad; + dout_ctrl <= ix_lo_dout; + next_state <= pshx_hi_state; + + when pshx_hi_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write ix hi + addr_ctrl <= push_ad; + dout_ctrl <= ix_hi_dout; + next_state <= fetch_state; + + when pulx_hi_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- pull ix hi + ix_ctrl <= pull_hi_ix; + addr_ctrl <= pull_ad; + dout_ctrl <= ix_hi_dout; + next_state <= pulx_lo_state; + + when pulx_lo_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- idle sp + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + sp_ctrl <= latch_sp; + -- read ix low + ix_ctrl <= pull_lo_ix; + addr_ctrl <= pull_ad; + dout_ctrl <= ix_lo_dout; + next_state <= fetch_state; + + -- + -- return from interrupt + -- enter here from bogus interrupts + -- + when rti_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- idle address bus + cc_ctrl <= latch_cc; + addr_ctrl <= idle_ad; + dout_ctrl <= cc_dout; + next_state <= rti_cc_state; + + when rti_cc_state => + -- default registers + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + sp_ctrl <= load_sp; + -- read cc + cc_ctrl <= pull_cc; + addr_ctrl <= pull_ad; + dout_ctrl <= cc_dout; + next_state <= rti_accb_state; + + when rti_accb_state => + -- default registers + acca_ctrl <= latch_acca; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- read accb + accb_ctrl <= pull_accb; + addr_ctrl <= pull_ad; + dout_ctrl <= accb_dout; + next_state <= rti_acca_state; + + when rti_acca_state => + -- default registers + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- read acca + acca_ctrl <= pull_acca; + addr_ctrl <= pull_ad; + dout_ctrl <= acca_dout; + next_state <= rti_ixh_state; + + when rti_ixh_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- read ix hi + ix_ctrl <= pull_hi_ix; + addr_ctrl <= pull_ad; + dout_ctrl <= ix_hi_dout; + next_state <= rti_ixl_state; + + when rti_ixl_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- read ix low + ix_ctrl <= pull_lo_ix; + addr_ctrl <= pull_ad; + dout_ctrl <= ix_lo_dout; + next_state <= rti_pch_state; + + when rti_pch_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- increment sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_add16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- pull pc hi + pc_ctrl <= pull_hi_pc; + addr_ctrl <= pull_ad; + dout_ctrl <= pc_hi_dout; + next_state <= rti_pcl_state; + + when rti_pcl_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- idle sp + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + sp_ctrl <= latch_sp; + -- pull pc low + pc_ctrl <= pull_lo_pc; + addr_ctrl <= pull_ad; + dout_ctrl <= pc_lo_dout; + next_state <= fetch_state; + + -- + -- here on interrupt + -- iv register hold interrupt type + -- + when int_pcl_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write pc low + addr_ctrl <= push_ad; + dout_ctrl <= pc_lo_dout; + next_state <= int_pch_state; + + when int_pch_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write pc hi + addr_ctrl <= push_ad; + dout_ctrl <= pc_hi_dout; + next_state <= int_ixl_state; + + when int_ixl_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write ix low + addr_ctrl <= push_ad; + dout_ctrl <= ix_lo_dout; + next_state <= int_ixh_state; + + when int_ixh_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write ix hi + addr_ctrl <= push_ad; + dout_ctrl <= ix_hi_dout; + next_state <= int_acca_state; + + when int_acca_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write acca + addr_ctrl <= push_ad; + dout_ctrl <= acca_dout; + next_state <= int_accb_state; + + + when int_accb_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write accb + addr_ctrl <= push_ad; + dout_ctrl <= accb_dout; + next_state <= int_cc_state; + + when int_cc_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- decrement sp + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_sub16; + cc_ctrl <= latch_cc; + sp_ctrl <= load_sp; + -- write cc + addr_ctrl <= push_ad; + dout_ctrl <= cc_dout; + nmi_ctrl <= latch_nmi; + -- + -- nmi is edge triggered + -- nmi_req is cleared when nmi goes low. + -- + if nmi_req = '1' then + iv_ctrl <= nmi_iv; + next_state <= vect_hi_state; + else + -- + -- IRQ is level sensitive + -- + if (irq = '1') and (cc(IBIT) = '0') then + iv_ctrl <= irq_iv; + next_state <= int_mask_state; + else + case op_code is + when "00111110" => -- WAI (wait for interrupt) + iv_ctrl <= latch_iv; + next_state <= int_wai_state; + when "00111111" => -- SWI (Software interrupt) + iv_ctrl <= swi_iv; + next_state <= vect_hi_state; + when others => -- bogus interrupt (return) + iv_ctrl <= latch_iv; + next_state <= rti_state; + end case; + end if; + end if; + + when int_wai_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + op_ctrl <= latch_op; + ea_ctrl <= latch_ea; + -- enable interrupts + left_ctrl <= sp_left; + right_ctrl <= plus_one_right; + alu_ctrl <= alu_cli; + cc_ctrl <= load_cc; + sp_ctrl <= latch_sp; + -- idle bus + addr_ctrl <= idle_ad; + dout_ctrl <= cc_dout; + if (nmi_req = '1') and (nmi_ack='0') then + iv_ctrl <= nmi_iv; + nmi_ctrl <= set_nmi; + next_state <= vect_hi_state; + else + -- + -- nmi request is not cleared until nmi input goes low + -- + if (nmi_req = '0') and (nmi_ack='1') then + nmi_ctrl <= reset_nmi; + else + nmi_ctrl <= latch_nmi; + end if; + -- + -- IRQ is level sensitive + -- + if (irq = '1') and (cc(IBIT) = '0') then + iv_ctrl <= irq_iv; + next_state <= int_mask_state; + else + iv_ctrl <= latch_iv; + next_state <= int_wai_state; + end if; + end if; + + when int_mask_state => + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- Mask IRQ + left_ctrl <= sp_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_sei; + cc_ctrl <= load_cc; + sp_ctrl <= latch_sp; + -- idle bus cycle + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= vect_hi_state; + + when halt_state => -- halt CPU. + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- do nothing in ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- idle bus cycle + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + if halt = '1' then + next_state <= halt_state; + else + next_state <= fetch_state; + end if; + + when others => -- error state halt on undefine states + -- default + acca_ctrl <= latch_acca; + accb_ctrl <= latch_accb; + ix_ctrl <= latch_ix; + sp_ctrl <= latch_sp; + pc_ctrl <= latch_pc; + md_ctrl <= latch_md; + iv_ctrl <= latch_iv; + op_ctrl <= latch_op; + nmi_ctrl <= latch_nmi; + ea_ctrl <= latch_ea; + -- do nothing in ALU + left_ctrl <= acca_left; + right_ctrl <= zero_right; + alu_ctrl <= alu_nop; + cc_ctrl <= latch_cc; + -- idle bus cycle + addr_ctrl <= idle_ad; + dout_ctrl <= md_lo_dout; + next_state <= error_state; + end case; +end process; + +-------------------------------- +-- +-- state machine +-- +-------------------------------- + +change_state: process( clk, rst, state, hold ) +begin + if clk'event and clk = '0' then + if rst = '1' then + state <= reset_state; + elsif hold = '1' then + state <= state; + else + state <= next_state; + end if; + end if; +end process; + -- output + +end CPU_ARCH; + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/dac.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/dac.vhd new file mode 100644 index 00000000..47b2185e --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/dac.vhd @@ -0,0 +1,48 @@ +------------------------------------------------------------------------------- +-- +-- Delta-Sigma DAC +-- +-- Refer to Xilinx Application Note XAPP154. +-- +-- This DAC requires an external RC low-pass filter: +-- +-- dac_o 0---XXXXX---+---0 analog audio +-- 3k3 | +-- === 4n7 +-- | +-- GND +-- +------------------------------------------------------------------------------- + +library ieee; + use ieee.std_logic_1164.all; + use ieee.numeric_std.all; + +entity dac is + generic ( + C_bits : integer := 10 + ); + port ( + clk_i : in std_logic; + res_n_i : in std_logic; + dac_i : in std_logic_vector(C_bits-1 downto 0); + dac_o : out std_logic + ); +end dac; + +architecture rtl of dac is + signal sig_in: unsigned(C_bits downto 0); +begin + seq: process(clk_i, res_n_i) + begin + if res_n_i = '0' then + sig_in <= to_unsigned(2**C_bits, sig_in'length); + dac_o <= '0'; + elsif rising_edge(clk_i) then + -- not dac_i(C_bits-1) effectively adds 0x8..0 to dac_i + --sig_in <= sig_in + unsigned(sig_in(C_bits) & (not dac_i(C_bits-1)) & dac_i(C_bits-2 downto 0)); + sig_in <= sig_in + unsigned(sig_in(C_bits) & dac_i); + dac_o <= sig_in(C_bits); + end if; + end process seq; +end rtl; diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/data_io.v b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/data_io.v new file mode 100644 index 00000000..4ca9518c --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/data_io.v @@ -0,0 +1,115 @@ +// +// data_io.v +// +// data_io for the MiST board +// http://code.google.com/p/mist-board/ +// +// Copyright (c) 2014 Till Harbaum +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +/////////////////////////////////////////////////////////////////////// + +module data_io +( + input clk_sys, + input SPI_SCK, + input SPI_SS2, + input SPI_DI, + + // ARM -> FPGA download + output reg ioctl_download = 0, // signal indicating an active download + output reg [7:0] ioctl_index, // menu index used to upload the file + output ioctl_wr, + output reg [24:0] ioctl_addr, + output reg [7:0] ioctl_dout +); + +/////////////////////////////// DOWNLOADING /////////////////////////////// + +reg [7:0] data_w; +reg [24:0] addr_w; +reg rclk = 0; + +localparam UIO_FILE_TX = 8'h53; +localparam UIO_FILE_TX_DAT = 8'h54; +localparam UIO_FILE_INDEX = 8'h55; + +// data_io has its own SPI interface to the io controller +always@(posedge SPI_SCK, posedge SPI_SS2) begin + reg [6:0] sbuf; + reg [7:0] cmd; + reg [4:0] cnt; + reg [24:0] addr; + + if(SPI_SS2) cnt <= 0; + else begin + rclk <= 0; + + // don't shift in last bit. It is evaluated directly + // when writing to ram + if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI}; + + // increase target address after write + if(rclk) addr <= addr + 1'd1; + + // count 0-7 8-15 8-15 ... + if(cnt < 15) cnt <= cnt + 1'd1; + else cnt <= 8; + + // finished command byte + if(cnt == 7) cmd <= {sbuf, SPI_DI}; + + // prepare/end transmission + if((cmd == UIO_FILE_TX) && (cnt == 15)) begin + // prepare + if(SPI_DI) begin + addr <= 0; + ioctl_download <= 1; + end else begin + addr_w <= addr; + ioctl_download <= 0; + end + end + + // command 0x54: UIO_FILE_TX + if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin + addr_w <= addr; + data_w <= {sbuf, SPI_DI}; + rclk <= 1; + end + + // expose file (menu) index + if((cmd == UIO_FILE_INDEX) && (cnt == 15)) ioctl_index <= {sbuf, SPI_DI}; + end +end + +assign ioctl_wr = |ioctl_wrd; +reg [1:0] ioctl_wrd; + +always@(negedge clk_sys) begin + reg rclkD, rclkD2; + + rclkD <= rclk; + rclkD2 <= rclkD; + ioctl_wrd<= {ioctl_wrd[0],1'b0}; + + if(rclkD & ~rclkD2) begin + ioctl_dout <= data_w; + ioctl_addr <= addr_w; + ioctl_wrd <= 2'b11; + end +end + +endmodule diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender.vhd new file mode 100644 index 00000000..a434393f --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender.vhd @@ -0,0 +1,800 @@ +--------------------------------------------------------------------------------- +-- Defender by Dar (darfpga@aol.fr) +-- http://darfpga.blogspot.fr +--------------------------------------------------------------------------------- +-- gen_ram.vhd & io_ps2_keyboard +-------------------------------- +-- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com) +-- http://www.syntiac.com/fpga64.html +--------------------------------------------------------------------------------- +-- cpu09l - Version : 0128 +-- Synthesizable 6809 instruction compatible VHDL CPU core +-- Copyright (C) 2003 - 2010 John Kent +--------------------------------------------------------------------------------- +-- cpu68 - Version 9th Jan 2004 0.8 +-- 6800/01 compatible CPU core +-- GNU public license - December 2002 : John E. Kent +--------------------------------------------------------------------------------- +-- Educational use only +-- Do not redistribute synthetized file with roms +-- Do not redistribute roms whatever the form +-- Use at your own risk +--------------------------------------------------------------------------------- +-- Version 0.0 -- 15/10/2017 -- +-- initial version +--------------------------------------------------------------------------------- +-- Features : +-- TV 15KHz mode only (atm) +-- Cocktail mode : OK +-- +-- Use with MAME roms from defender.zip +-- +-- Use make_defender_proms.bat to build vhd file and bin from binaries +-- +-- Defender Hardware caracteristics : +-- +-- 1x6809 CPU accessing program rom and shared ram/devices +-- 3x16Ko video and working ram +-- 26Ko program roms +-- 1 pia for player I/O +-- 1 pia service switches, irq and sound selection to sound board +-- +-- 384 pixels x 260 line video scan, 16 colors per pixel +-- Ram palette 16 colors among 256 colors (3 red bits,3 green bits, 2 blue bits) +-- +-- 2 decoder proms for video scan and cocktail/upright flip +-- +-- No sprites, no char tiles +-- +-- 128x4 cmos ram (see defender_cmos_ram.vhd for initial values) +-- No save when power off (see also defender_cmos_ram.vhd) +-- +-- 1x6808/02 +-- 128x8 working ram +-- 4k program rom +-- 1 pia for sound selection cmd input and audio samples output + +--------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------- +-- defender cmos data (see also defender_cmos_ram.vhd) +-- (ram is 128x4 => only 4 bits/address, that is only 1 hex digit/address) +-- +-- @ values - (fonction) meaning + +-- 0 0 - ? +-- 1 0005 - (01) coins left +-- 5 0000 - (02) coins center +-- 9 0000 - (03) coins right +-- 13 0005 - (04) total paid +-- 17 0000 - (05) ships won +---21 0000 - (06) total time +-- 25 0003 - (07) total ships + +-- -- 8 entries of 6 digits highscore + 3 ascii letters + +-- 29 021270 44 52 4A +-- 41 018315 53 41 4D +-- 53 015920 4C 45 44 +-- 65 014285 50 47 44 +-- 77 012520 43 52 42 +-- 89 011035 4D 52 53 +-- 101 008265 53 53 52 +-- 113 006010 54 4D 48 + +-- 125 00 - credits +-- 127 5 - ? + +-- -- protected data writeable only with coin door opened + +-- 128 A - ? +-- 129 0100 - (08) bonus ship level +-- 133 03 - (09) nb ships +-- 135 03 - (10) coinage select +-- 137 01 - (11) left coin mult +-- 139 04 - (12) center coin mult +-- 141 01 - (13) right coin mult +-- 143 01 - (14) coins for credit +-- 145 00 - (15) coins for bonus +-- 147 00 - (16) minimum coins +-- 149 00 - (17) free play +-- 151 05 - (18) game adjust 1 Stating difficulty 0=lib; 1=mod; 2=cons +-- 153 15 - (19) game adjust 2 Progessive wave diff. limit > 4-25 +-- 155 01 - (20) game adjust 3 Background sound 0=off; 1=on +-- 157 05 - (21) game adjust 4 Planet restore wave number +-- 159 00 - (22) game adjust 5 +-- 161 00 - (23) game adjust 6 +-- 163 00 - (24) game adjust 7 +-- 165 00 - (25) game adjust 8 +-- 167 00 - (26) game adjust 9 +-- 169 00 - (27) game adjust 10 + +-- 171 00000 - ? +-- 176 0000000000000000 - ? +-- 192 0000000000000000 - ? +-- 208 0000000000000000 - ? +-- 224 0000000000000000 - ? +-- 240 0000000000000000 - ? + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity defender is +port( + clk_sys : in std_logic; + clock_6 : in std_logic; + clk_1p79 : in std_logic; + clk_0p89 : in std_logic; + reset : in std_logic; + + dbg_cpu_addr : out std_logic_vector(15 downto 0); +-- tv15Khz_mode : in std_logic; + video_r : out std_logic_vector(2 downto 0); + video_g : out std_logic_vector(2 downto 0); + video_b : out std_logic_vector(1 downto 0); +-- video_clk : out std_logic; + video_csync : out std_logic; + video_blankn : out std_logic; + video_hs : out std_logic; + video_vs : out std_logic; + + audio_out : out std_logic_vector(7 downto 0); + + roms_addr : out std_logic_vector(14 downto 0); + roms_do : in std_logic_vector( 7 downto 0); + + + + btn_auto_up : in std_logic; + btn_advance : in std_logic; + btn_high_score_reset : in std_logic; + + btn_left_coin : in std_logic; + btn_one_player : in std_logic; + btn_two_players: in std_logic; + + btn_fire : in std_logic; + btn_thrust : in std_logic; + btn_smart_bomb : in std_logic; + btn_hyperSpace : in std_logic; + btn_reverse : in std_logic; + btn_down : in std_logic; + btn_up : in std_logic; + + sw_coktail_table : in std_logic; + + cmd_select_players_btn : out std_logic + +); +end defender; + +architecture struct of defender is + + signal reset_n: std_logic; + signal clock_div : std_logic_vector(1 downto 0); + + signal clock_6n : std_logic; + + signal cpu_clock : std_logic; + signal cpu_addr : 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_rw : std_logic; + signal cpu_irq : std_logic; + + signal wram_addr : std_logic_vector(13 downto 0); + signal wram_we : std_logic; + signal wram0_do : std_logic_vector( 7 downto 0); + signal wram0_we : std_logic; + signal wram1_do : std_logic_vector( 7 downto 0); + signal wram1_we : std_logic; + signal wram2_do : std_logic_vector( 7 downto 0); + signal wram2_we : std_logic; + + --signal roms_addr : std_logic_vector(14 downto 0); + --signal roms_do : std_logic_vector( 7 downto 0); + + signal roms_io_do : std_logic_vector( 7 downto 0); + + signal io_we : std_logic; + signal io_CS : std_logic; + + signal rom_page : std_logic_vector( 2 downto 0); + signal rom_page_we : std_logic; + + signal screen_ctrl : std_logic; + signal screen_ctrl_we : std_logic; + + signal cmos_do : std_logic_vector(3 downto 0); + signal cmos_we : std_logic; + + signal palette_addr : std_logic_vector(3 downto 0); + signal palette_we : std_logic; + signal palette_di : std_logic_vector( 7 downto 0); + signal palette_do : std_logic_vector( 7 downto 0); + + signal pias_clock : std_logic; + +-- pia io port a +-- bit 0 Fire +-- bit 1 Thrust +-- bit 2 Smart Bomb +-- bit 3 HyperSpace +-- bit 4 2 Players +-- bit 5 1 Player +-- bit 6 Reverse +-- bit 7 Down + +-- pia io port b +-- bit 0 Up +-- bit 7 1 for coktail table, 0 for upright cabinet +-- other <= GND + +-- pia io ca/cb +-- ca1, ca2, cb1 <= GND +-- cb2 ouput + w2_jumper => select player 1/2 buttons for COCktail table + + signal pia_io_CS : std_logic; + signal pia_io_rw_n : std_logic; + signal pia_io_do : std_logic_vector( 7 downto 0); + signal pia_io_pa_i : std_logic_vector( 7 downto 0); + signal pia_io_pb_i : std_logic_vector( 7 downto 0); + signal pia_io_cb2_o : std_logic; + +-- pia rom board port a +-- bit 0 Auto Up / manual Down +-- bit 1 Advance +-- bit 2 Right Coin (nc) +-- bit 3 High Score Reset +-- bit 4 Left Coin +-- bit 5 Center Coin (nc) +-- bit 6 led 2 (output) +-- bit 7 led 1 (output) + +-- pia rom board port b +-- bit 0-5 to sound board (output) +-- bit 6 led 4 (output) +-- bit 7 led 3 (output) + +-- pia rom board ca/cb +-- ca1 count 240 +-- ca2 coin door pin 7 (nc) +-- cb1 4ms +-- cb2 sound board pin 8 (H5-nc) + + signal pia_ROM_CS : std_logic; + signal pia_rom_rw_n : std_logic; + signal pia_rom_do : std_logic_vector( 7 downto 0); + signal pia_rom_irqa : std_logic; + signal pia_rom_irqb : std_logic; + signal pia_rom_pa_i : std_logic_vector( 7 downto 0); + signal pia_rom_pa_o : std_logic_vector( 7 downto 0); + signal pia_rom_pb_o : std_logic_vector( 7 downto 0); + + signal vcnt_240 : std_logic; + signal cnt_4ms : std_logic; + + signal cpu_to_video_addr : std_logic_vector(8 downto 0); + signal cpu_to_video_do : std_logic_vector(7 downto 0); + + signal video_scan_addr : std_logic_vector(8 downto 0); + signal video_scan_do : std_logic_vector(7 downto 0); + + signal pixel_cnt : std_logic_vector(2 downto 0); + signal hcnt : std_logic_vector(5 downto 0); + signal vcnt : std_logic_vector(8 downto 0); + + signal pixels : std_logic_vector(23 downto 0); + + signal hsync0,hsync1,hsync2,csync,hblank,vblank : std_logic; + + signal select_sound : std_logic_vector(5 downto 0); + +begin + +clock_6n <= not clock_6; +reset_n <= not reset; + +-- for debug +dbg_cpu_addr <= cpu_addr; + + +-- make pixels counters and cpu clock +-- in original hardware cpu clock = 1us = 6pixels +-- here one make 2 cpu clock within 1us +process (reset, clock_6n) +begin + if reset='1' then + pixel_cnt <= "000"; + cpu_clock <= '0'; + else + if rising_edge(clock_6n) then + + if pixel_cnt = "101" then + pixel_cnt <= "000"; + cpu_clock <= '0'; + else + pixel_cnt <= pixel_cnt + '1'; + end if; + + if pixel_cnt = "010" then + cpu_clock <= '1'; + end if; + + if pixel_cnt = "011" then -- speed up processor (two clocks / 1us) + cpu_clock <= '0'; + end if; + + if pixel_cnt = "100" then + cpu_clock <= '1'; + end if; + + + end if; + end if; +end process; + +-- make hcnt and vcnt video scanner from pixel clocks and counts +-- +-- pixels |0|1|2|3|4|5|0|1|2|3|4|5| +-- hcnt | N | N+1 | +-- +-- hcnt [0..63] => 64 x 6 = 384 pixels, 1 pixel is 1us => 1 line is 64us (15.625KHz) +-- vcnt [252..255,256..511] => 260 lines, 1 frame is 260 x 64us = 16.640ms (60.1Hz) +-- +process (reset, clock_6n) +begin + if reset='1' then + hcnt <= "000000"; + vcnt <= '0'&X"FC"; + else + if rising_edge(clock_6n) then + + if pixel_cnt = "101" then + hcnt <= hcnt + '1'; + if hcnt = "111111" then + if vcnt = '1'&X"FF" then + vcnt <= '0'&X"FC"; + else + vcnt <= vcnt + '1'; + end if; + end if; + end if; + + end if; + end if; +end process; + +-- rom address multiplexer +-- should reflect content of defender_prog.bin +-- +-- 4k 0000-0FFF cpu_space D000-DFFF defend.1 + defend.4 +-- 4k 1000-1FFF E000-EFFF defend.2 +-- 4k 2000-2FFF F000-FFFF defend.3 +-- 4k 3000-3FFF page=1 C000-CFFF defend.9 + defend.12 +-- 4k 4000-4FFF page=2 C000-CFFF defend.8 + defend.11 +-- 4k 5000-5FFF page=3 C000-CFFF defend.7 + defend.10 +-- 4k 6000-6FFF page=7 C000-C7FF defend.6 + 2k empty +-- 4k 7000-7FFF N.A 4k empty + +roms_addr <= + "011" & cpu_addr(11 downto 0) when cpu_addr(15 downto 12) = X"C" and rom_page = "001" else + "100" & cpu_addr(11 downto 0) when cpu_addr(15 downto 12) = X"C" and rom_page = "010" else + "101" & cpu_addr(11 downto 0) when cpu_addr(15 downto 12) = X"C" and rom_page = "011" else + "110" & cpu_addr(11 downto 0) when cpu_addr(15 downto 12) = X"C" and rom_page = "111" else + "000" & cpu_addr(11 downto 0) when cpu_addr(15 downto 12) = X"D" else + "001" & cpu_addr(11 downto 0) when cpu_addr(15 downto 12) = X"E" else + "010" & cpu_addr(11 downto 0) ;--when cpu_addr(15 downto 12) = X"F"; + +-- encoded cpu addr (decoder.2) and encoded scan addr (decoder.3) +-- and screen control for cocktail table flip +cpu_to_video_addr <= screen_ctrl & cpu_addr(15 downto 8); +video_scan_addr <= screen_ctrl & vcnt(7 downto 0); + +-- mux cpu addr/scan addr to wram +wram_addr <= + cpu_addr(7 downto 0) & cpu_to_video_do(5 downto 0) when cpu_clock = '1' else + video_scan_do & hcnt; + +-- mux cpu addr/pixels data to palette addr +palette_addr <= + cpu_addr(3 downto 0) when palette_we = '1' else + pixels(23 downto 20) when screen_ctrl = '0' else pixels(3 downto 0); + +-- only cpu can write to palette +palette_di <= cpu_do; + +-- palette output to colors bits +video_r <= palette_do(2 downto 0); +video_g <= palette_do(5 downto 3); +video_b <= palette_do(7 downto 6); + + +-- 24 bits pixels shift register +-- 6 pixels of 4 bits +process (clock_6) +begin + if rising_edge(clock_6) then + if screen_ctrl = '0' then + if pixel_cnt = "001" then + pixels <= wram0_do & wram1_do & wram2_do; + else + pixels <= pixels(19 downto 0) & X"0" ; + end if; + else + if pixel_cnt = "001" then + pixels <= wram2_do & wram1_do & wram0_do; + else + pixels <= X"0" & pixels(23 downto 4); + end if; + end if; + end if; +end process; + +-- pias cs +io_cs <= '1' when cpu_clock = '1' and cpu_addr(15 downto 12) = X"C" and rom_page ="000" else '0'; +pia_rom_cs <= '1' when io_cs = '1' and cpu_addr(11 downto 10) = "11" and cpu_addr(2) = '0' else '0'; -- CC00-CC03 +pia_io_cs <= '1' when io_cs = '1' and cpu_addr(11 downto 10) = "11" and cpu_addr(2) = '1' else '0'; -- CC04-CC07 + +-- write enables +wram_we <= '1' when cpu_rw = '0' and cpu_clock = '1' and cpu_addr(15 downto 12) < X"C" else '0'; +io_we <= '1' when cpu_rw = '0' and cpu_clock = '1' and cpu_addr(15 downto 12) = X"C" and rom_page ="000" else '0'; +rom_page_we <= '1' when cpu_rw = '0' and cpu_clock = '1' and cpu_addr(15 downto 12) = X"D" else '0'; + +palette_we <= '1' when io_we = '1' and cpu_addr(11 downto 10) = "00" and cpu_addr(4) = '0' else '0'; -- C000-C00F +screen_ctrl_we <= '1' when io_we = '1' and cpu_addr(11 downto 10) = "00" and cpu_addr(4) = '1' else '0'; -- C010-C01F +cmos_we <= '1' when io_we = '1' and cpu_addr(11 downto 10) = "01" else '0'; -- C400-C7FF +pia_rom_rw_n <= '0' when io_we = '1' and cpu_addr(11 downto 10) = "11" and cpu_addr(2) = '0' else '1'; -- CC00-CC03 +pia_io_rw_n <= '0' when io_we = '1' and cpu_addr(11 downto 10) = "11" and cpu_addr(2) = '1' else '1'; -- CC04-CC07 + +-- mux io data between cmos/video register/pias/c000_rom_page +roms_io_do <= + X"0"&cmos_do when rom_page = "000" and cpu_addr(11 downto 10) = "01" else -- C400-C7FF + vcnt(7 downto 2)&"00" when rom_page = "000" and cpu_addr(11 downto 10) = "10" else -- C800-cBFF + pia_rom_do when rom_page = "000" and cpu_addr(11 downto 10) = "11" and cpu_addr(2) = '0' else -- CC00-CC03 (A2n.A3n.A4n) + pia_io_do when rom_page = "000" and cpu_addr(11 downto 10) = "11" and cpu_addr(2) = '1' else -- CC04-CC07 (A2.A3n) + roms_do; + +-- mux cpu in data between roms/io/wram +cpu_di <= + roms_do when cpu_addr(15 downto 12) >= X"D" else + roms_io_do when cpu_addr(15 downto 12) >= X"C" else + wram0_do when cpu_to_video_do(7 downto 6) = "00" else + wram1_do when cpu_to_video_do(7 downto 6) = "01" else + wram2_do when cpu_to_video_do(7 downto 6) = "10" else X"00"; + + +-- dispatch cpu we to devices with respect to decoder2 bits 7-6 +wram0_we <= '1' when wram_we = '1' and cpu_to_video_do(7 downto 6) = "00" else '0'; +wram1_we <= '1' when wram_we = '1' and cpu_to_video_do(7 downto 6) = "01" else '0'; +wram2_we <= '1' when wram_we = '1' and cpu_to_video_do(7 downto 6) = "10" else '0'; + + +-- rom bank page (and IO) select register +-- screen control register +process (reset, clock_6) +begin + if reset='1' then + rom_page <= "000"; + screen_ctrl <= '0'; + else + if rising_edge(clock_6) then + if rom_page_we = '1' then rom_page <= cpu_do(2 downto 0); end if; + if screen_ctrl_we = '1' then screen_ctrl <= cpu_do(0); end if; + end if; + end if; +end process; + +-- pia rom board port a +-- bit 0 Auto Up / manual Down +-- bit 1 Advance +-- bit 2 Right Coin (nc) +-- bit 3 High Score Reset +-- bit 4 Left Coin +-- bit 5 Center Coin (nc) +-- bit 6 led 2 (output) +-- bit 7 led 1 (output) + +pias_clock <= clock_6; --not cpu_clock; + +pia_rom_pa_i(0) <= btn_auto_up; +pia_rom_pa_i(1) <= btn_advance; +pia_rom_pa_i(2) <= '0'; +pia_rom_pa_i(3) <= btn_high_score_reset; +pia_rom_pa_i(4) <= btn_left_coin; +pia_rom_pa_i(5) <= '0'; +pia_rom_pa_i(6) <= '0'; +pia_rom_pa_i(7) <= '0'; + +-- pia io port a +-- bit 0 Fire +-- bit 1 Thrust +-- bit 2 Smart Bomb +-- bit 3 HyperSpace +-- bit 4 2 Players +-- bit 5 1 Player +-- bit 6 Reverse +-- bit 7 Down + +pia_io_pa_i(0) <= btn_fire; +pia_io_pa_i(1) <= btn_thrust; +pia_io_pa_i(2) <= btn_smart_bomb; +pia_io_pa_i(3) <= btn_hyperSpace; +pia_io_pa_i(4) <= btn_two_players; +pia_io_pa_i(5) <= btn_one_player; +pia_io_pa_i(6) <= btn_reverse; +pia_io_pa_i(7) <= btn_down; + +-- pia io port b +-- bit 0 Up +-- bit 7 1 for coktail table, 0 for upright cabinet +-- other <= GND +pia_io_pb_i(0) <= btn_up; +pia_io_pb_i(6 downto 1) <= "000000"; +pia_io_pb_i(7) <= sw_coktail_table; + +-- pia io ca/cb +cmd_select_players_btn <= pia_io_cb2_o; + +-- pia rom ca1/Cb1 +vcnt_240 <= '1' when vcnt(7 downto 4) = X"F" else '0'; +cnt_4ms <= vcnt(5); + +-- pia rom irqs to cpu +cpu_irq <= pia_rom_irqa or pia_rom_irqb; + +-- pia rom to sound board +select_sound <= pia_rom_pb_o(5 downto 0); + + +-- microprocessor 6809 +main_cpu : entity work.cpu09 +port map( + clk => cpu_clock,-- E clock input (falling edge) + rst => reset, -- reset input (active high) + vma => open, -- valid memory address (active high) + lic_out => open, -- last instruction cycle (active high) + ifetch => open, -- instruction fetch cycle (active high) + opfetch => open, -- opcode fetch (active high) + ba => open, -- bus available (high on sync wait or DMA grant) + bs => open, -- bus status (high on interrupt or reset vector fetch or DMA grant) + addr => cpu_addr, -- address bus output + rw => cpu_rw, -- read not write output + data_out => cpu_do, -- data bus output + data_in => cpu_di, -- data bus input + irq => cpu_irq, -- interrupt request input (active high) + firq => '0', -- fast interrupt request input (active high) + nmi => '0', -- non maskable interrupt request input (active high) + halt => '0', -- halt input (active high) grants DMA + hold => '0' -- hold input (active high) extend bus cycle +); + +-- cpu program rom +-- 4k D000-DFFF +-- 4k E000-EFFF +-- 4k F000-FFFF +-- 4K C000-CFFF page=1 +-- 4K C000-CFFF page=2 +-- 4K C000-CFFF page=3 +-- 2K C000-C7FF page=7 +-- 6K N.A. + + + +--cpu_prog_rom : entity work.defender_prog +--port map( +-- clk => clock_6, +-- addr => roms_addr(14 downto 0), +-- data => roms_do +--); + +-- cpu/video wram 0 +cpu_video_ram0 : entity work.gen_ram +generic map( dWidth => 8, aWidth => 14) +port map( + clk => clock_6, + we => wram0_we, + addr => wram_addr(13 downto 0), + d => cpu_do, + q => wram0_do +); + +-- cpu/video wram 1 +cpu_video_ram1 : entity work.gen_ram +generic map( dWidth => 8, aWidth => 14) +port map( + clk => clock_6, + we => wram1_we, + addr => wram_addr(13 downto 0), + d => cpu_do, + q => wram1_do +); + +-- cpu/video wram 2 +cpu_video_ram2 : entity work.gen_ram +generic map( dWidth => 8, aWidth => 14) +port map( + clk => clock_6, + we => wram2_we, + addr => wram_addr(13 downto 0), + d => cpu_do, + q => wram2_do +); + +-- palette ram +palette_ram : entity work.gen_ram +generic map( dWidth => 8, aWidth => 4) +port map( + clk => clock_6, + we => palette_we, + addr => palette_addr, + d => palette_di, + q => palette_do +); + +-- cmos ram +cmos_ram : entity work.defender_cmos_ram +generic map( dWidth => 4, aWidth => 8) +port map( + clk => clock_6, + we => cmos_we, + addr => cpu_addr(7 downto 0), + d => cpu_do(3 downto 0), + q => cmos_do +); + +-- cpu to video addr decoder +cpu_video_addr_decoder : entity work.defender_decoder_2 +port map( + clk => clock_6, + addr => cpu_to_video_addr, + data => cpu_to_video_do +); + +-- video scan addr decoder +video_scan_addr_decoder : entity work.defender_decoder_3 +port map( + clk => clock_6, + addr => video_scan_addr, + data => video_scan_do +); + +-- pia i/O board +pia_io : entity work.pia6821 +port map +( + clk => pias_clock, -- rising edge + rst => reset, -- active high + cs => pia_io_cs, + rw => pia_io_rw_n, -- write low + addr => cpu_addr(1 downto 0), + data_in => cpu_do, + data_out => pia_io_do, + irqa => open, -- active high + irqb => open, -- active high + pa_i => pia_io_pa_i, + pa_o => open, + pa_oe => open, + ca1 => '0', + ca2_i => '0', + ca2_o => open, + ca2_oe => open, + pb_i => pia_io_pb_i, + pb_o => open, + pb_oe => open, + cb1 => '0', + cb2_i => '0', + cb2_o => pia_io_cb2_o, + cb2_oe => open +); + +-- pia rom board +pia_rom : entity work.pia6821 +port map +( + clk => pias_clock, + rst => reset, + cs => pia_rom_cs, + rw => pia_rom_rw_n, + addr => cpu_addr(1 downto 0), + data_in => cpu_do, + data_out => pia_rom_do, + irqa => pia_rom_irqa, + irqb => pia_rom_irqb, + pa_i => pia_rom_pa_i, + pa_o => open, + pa_oe => open, + ca1 => vcnt_240, + ca2_i => '0', + ca2_o => open, + ca2_oe => open, + pb_i => (others => '0'), + pb_o => pia_rom_pb_o, + pb_oe => open, + cb1 => cnt_4ms, + cb2_i => '0', + cb2_o => open, + cb2_oe => open +); + +-- video syncs and blanks +video_csync <= csync; + +process(clock_6n) + constant hcnt_base : integer := 54; + variable vsync_cnt : std_logic_vector(3 downto 0); +begin + +if rising_edge(clock_6n) then + + if hcnt = hcnt_base+0 then hsync0 <= '0'; + elsif hcnt = hcnt_base+6 then hsync0 <= '1'; + end if; + + if hcnt = hcnt_base+0 then hsync1 <= '0'; + elsif hcnt = hcnt_base+3 then hsync1 <= '1'; + elsif hcnt = hcnt_base+32-64 then hsync1 <= '0'; + elsif hcnt = hcnt_base+35-64 then hsync1 <= '1'; + end if; + + if hcnt = hcnt_base+0 then hsync2 <= '0'; + elsif hcnt = hcnt_base+32-3-64 then hsync2 <= '1'; + elsif hcnt = hcnt_base+32-64 then hsync2 <= '0'; + elsif hcnt = hcnt_base+64-3-128 then hsync2 <= '1'; + end if; + + if hcnt = 63 and pixel_cnt = 5 then + if vcnt = 495 then -- 503 with vcnt max = F4 + vsync_cnt := X"0"; -- 499 with F8, 495 with FC + else + if vsync_cnt < X"F" then vsync_cnt := vsync_cnt + '1'; end if; + end if; + end if; + + if vsync_cnt = 0 then csync <= hsync1; + elsif vsync_cnt = 1 then csync <= hsync1; + elsif vsync_cnt = 2 then csync <= hsync1; + elsif vsync_cnt = 3 then csync <= hsync2; + elsif vsync_cnt = 4 then csync <= hsync2; + elsif vsync_cnt = 5 then csync <= hsync2; + elsif vsync_cnt = 6 then csync <= hsync1; + elsif vsync_cnt = 7 then csync <= hsync1; + elsif vsync_cnt = 8 then csync <= hsync1; + else csync <= hsync0; + end if; + + if hcnt = hcnt_base-2 then hblank <= '1'; + elsif hcnt = hcnt_base+11-64 then hblank <= '0'; + end if; + + if vcnt = 492 then vblank <= '1'; -- 492 ok + elsif vcnt = 262 then vblank <= '0'; -- 262 ok + end if; + + -- external sync and blank outputs + video_blankn <= not (hblank or vblank); + + video_hs <= hsync0; + + if vsync_cnt = 0 then video_vs <= '0'; + elsif vsync_cnt = 8 then video_vs <= '1'; + end if; + +end if; +end process; + +-- sound board +defender_sound_board : entity work.defender_sound_board +port map( + clk_1p79 => clk_1p79, + clk_0p89 => clk_0p89, + reset => reset, + select_sound => select_sound, + audio_out => audio_out, + + dbg_cpu_addr => open --dbg_cpu_addr +); + +end struct; \ No newline at end of file diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_cmos_ram.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_cmos_ram.vhd new file mode 100644 index 00000000..f74b9b02 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_cmos_ram.vhd @@ -0,0 +1,163 @@ +-- ----------------------------------------------------------------------- +-- +-- 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 +-- +-- Modifies Octiber 2017 by Dar +-- Add init data with defender cmos value +-- ----------------------------------------------------------------------- +-- +-- gen_rwram.vhd init with defender cmos value +-- +-- ----------------------------------------------------------------------- +-- +-- generic ram. +-- +-- ----------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.numeric_std.ALL; + +-- ----------------------------------------------------------------------- + +entity defender_cmos_ram is + generic ( + dWidth : integer := 8; -- must be 4 for defender_cmos_ram + aWidth : integer := 10 -- must be 8 for defender_cmos_ram + ); + 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; + +-- ----------------------------------------------------------------------- +-- defender cmos data +-- (ram is 128x4 => only 4 bits/address, that is only 1 hex digit/address) +-- +-- @ values - (fonction) meaning + +-- 0 0 - ? +-- 1 0005 - (01) coins left +-- 5 0000 - (02) coins center +-- 9 0000 - (03) coins right +-- 13 0005 - (04) total paid +-- 17 0000 - (05) ships won +---21 0000 - (06) total time +-- 25 0003 - (07) total ships + +-- -- 8 entries of 6 digits highscore + 3 ascii letters + +-- 29 021270 44 52 4A +-- 41 018315 53 41 4D +-- 53 015920 4C 45 44 +-- 65 014285 50 47 44 +-- 77 012520 43 52 42 +-- 89 011035 4D 52 53 +-- 101 008265 53 53 52 +-- 113 006010 54 4D 48 + +-- 125 00 - credits +-- 127 5 - ? + +-- -- protected data writeable only with coin door opened + +-- 128 A - ? +-- 129 0100 - (08) bonus ship level +-- 133 03 - (09) nb ships +-- 135 03 - (10) coinage select +-- 137 01 - (11) left coin mult +-- 139 04 - (12) center coin mult +-- 141 01 - (13) right coin mult +-- 143 01 - (14) coins for credit +-- 145 00 - (15) coins for bonus +-- 147 00 - (16) minimum coins +-- 149 00 - (17) free play +-- 151 05 - (18) game adjust 1 Stating difficulty 0=lib; 1=mod; 2=cons +-- 153 15 - (19) game adjust 2 Progessive wave diff. limit > 4-25 +-- 155 01 - (20) game adjust 3 Background sound 0=off; 1=on +-- 157 05 - (21) game adjust 4 Planet restore wave number +-- 159 00 - (22) game adjust 5 +-- 161 00 - (23) game adjust 6 +-- 163 00 - (24) game adjust 7 +-- 165 00 - (25) game adjust 8 +-- 167 00 - (26) game adjust 9 +-- 169 00 - (27) game adjust 10 + +-- 171 00000 - ? +-- 176 0000000000000000 - ? +-- 192 0000000000000000 - ? +-- 208 0000000000000000 - ? +-- 224 0000000000000000 - ? +-- 240 0000000000000000 - ? + + +architecture rtl of defender_cmos_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 := ( + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"2",X"1", + X"2",X"7",X"0",X"4",X"4",X"5",X"2",X"4",X"A",X"0",X"1",X"8",X"3",X"1",X"5",X"5", + X"3",X"4",X"1",X"4",X"D",X"0",X"1",X"5",X"9",X"2",X"0",X"4",X"C",X"4",X"5",X"4", + X"4",X"0",X"1",X"4",X"2",X"8",X"5",X"5",X"0",X"4",X"7",X"4",X"4",X"0",X"1",X"2", + X"5",X"2",X"0",X"4",X"3",X"5",X"2",X"4",X"2",X"0",X"1",X"1",X"0",X"3",X"5",X"4", + X"D",X"5",X"2",X"5",X"3",X"0",X"0",X"8",X"2",X"6",X"5",X"5",X"3",X"5",X"3",X"5", + X"2",X"0",X"0",X"6",X"0",X"1",X"0",X"5",X"4",X"4",X"D",X"4",X"8",X"0",X"0",X"5", + X"A",X"0",X"1",X"0",X"0",X"0",X"3",X"0",X"3",X"0",X"1",X"0",X"4",X"0",X"1",X"0", + X"1",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"5",X"1",X"5",X"0",X"1",X"0",X"5",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0", + X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0",X"0"); + + + 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))); + q <= ram(to_integer(unsigned(addr))); + end if; + end process; +--q <= ram(to_integer(unsigned(addr))); +end architecture; + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_2.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_2.vhd new file mode 100644 index 00000000..db3514d9 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_2.vhd @@ -0,0 +1,54 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity defender_decoder_2 is +port ( + clk : in std_logic; + addr : in std_logic_vector(8 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of defender_decoder_2 is + type rom is array(0 to 511) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"40",X"80",X"01",X"41",X"81",X"02",X"42",X"82",X"03",X"43",X"83",X"04",X"44",X"84",X"05", + X"45",X"85",X"06",X"46",X"86",X"07",X"47",X"87",X"08",X"48",X"88",X"09",X"49",X"89",X"0A",X"4A", + X"8A",X"0B",X"4B",X"8B",X"0C",X"4C",X"8C",X"0D",X"4D",X"8D",X"0E",X"4E",X"8E",X"0F",X"4F",X"8F", + X"10",X"50",X"90",X"11",X"51",X"91",X"12",X"52",X"92",X"13",X"53",X"93",X"14",X"54",X"94",X"15", + X"55",X"95",X"16",X"56",X"96",X"17",X"57",X"97",X"18",X"58",X"98",X"19",X"59",X"99",X"1A",X"5A", + X"9A",X"1B",X"5B",X"9B",X"1C",X"5C",X"9C",X"1D",X"5D",X"9D",X"1E",X"5E",X"9E",X"1F",X"5F",X"9F", + X"20",X"60",X"A0",X"21",X"61",X"A1",X"22",X"62",X"A2",X"23",X"63",X"A3",X"24",X"64",X"A4",X"25", + X"65",X"A5",X"26",X"66",X"A6",X"27",X"67",X"A7",X"28",X"68",X"A8",X"29",X"69",X"A9",X"2A",X"6A", + X"AA",X"2B",X"6B",X"AB",X"2C",X"6C",X"AC",X"2D",X"6D",X"AD",X"2E",X"6E",X"AE",X"2F",X"6F",X"AF", + X"30",X"70",X"B0",X"31",X"71",X"B1",X"32",X"72",X"B2",X"33",X"73",X"B3",X"34",X"74",X"B4",X"35", + X"75",X"B5",X"36",X"76",X"B6",X"37",X"77",X"B7",X"38",X"78",X"B8",X"39",X"79",X"B9",X"3A",X"7A", + X"BA",X"3B",X"7B",X"BB",X"3C",X"7C",X"BC",X"3D",X"7D",X"BD",X"3E",X"7E",X"BE",X"3F",X"7F",X"BF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"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"80",X"01",X"41",X"72",X"32",X"B1",X"71",X"31",X"B0",X"70",X"30",X"AF",X"6F",X"2F", + X"AE",X"6E",X"2E",X"AD",X"6D",X"2D",X"AC",X"6C",X"2C",X"AB",X"6B",X"2B",X"AA",X"6A",X"2A",X"A9", + X"69",X"29",X"A8",X"68",X"28",X"A7",X"67",X"27",X"A6",X"66",X"26",X"A5",X"65",X"25",X"A4",X"64", + X"24",X"A3",X"63",X"23",X"A2",X"62",X"22",X"A1",X"61",X"21",X"A0",X"60",X"20",X"9F",X"5F",X"1F", + X"9E",X"5E",X"1E",X"9D",X"5D",X"1D",X"9C",X"5C",X"1C",X"9B",X"5B",X"1B",X"9A",X"5A",X"1A",X"99", + X"59",X"19",X"98",X"58",X"18",X"97",X"57",X"17",X"96",X"56",X"16",X"95",X"55",X"15",X"94",X"54", + X"14",X"93",X"53",X"13",X"92",X"52",X"12",X"91",X"51",X"11",X"90",X"50",X"10",X"8F",X"4F",X"0F", + X"8E",X"4E",X"0E",X"8D",X"4D",X"0D",X"8C",X"4C",X"0C",X"8B",X"4B",X"0B",X"8A",X"4A",X"0A",X"89", + X"49",X"09",X"88",X"48",X"08",X"87",X"47",X"07",X"86",X"46",X"06",X"85",X"45",X"05",X"84",X"44", + X"04",X"83",X"43",X"03",X"82",X"42",X"02",X"81",X"B2",X"33",X"73",X"B3",X"34",X"74",X"B4",X"35", + X"75",X"B5",X"36",X"76",X"B6",X"37",X"77",X"B7",X"38",X"78",X"B8",X"39",X"79",X"B9",X"3A",X"7A", + X"BA",X"3B",X"7B",X"BB",X"3C",X"7C",X"BC",X"3D",X"7D",X"BD",X"3E",X"7E",X"BE",X"3F",X"7F",X"BF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",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/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_3.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_3.vhd new file mode 100644 index 00000000..d5751938 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_decoder_3.vhd @@ -0,0 +1,54 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity defender_decoder_3 is +port ( + clk : in std_logic; + addr : in std_logic_vector(8 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of defender_decoder_3 is + type rom is array(0 to 511) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"01",X"02",X"03",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"14",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1C",X"1D",X"1E",X"1F", + X"20",X"21",X"22",X"23",X"24",X"25",X"26",X"27",X"28",X"29",X"2A",X"2B",X"2C",X"2D",X"2E",X"2F", + X"30",X"31",X"32",X"33",X"34",X"35",X"36",X"37",X"38",X"39",X"3A",X"3B",X"3C",X"3D",X"3E",X"3F", + X"40",X"41",X"42",X"43",X"44",X"45",X"46",X"47",X"48",X"49",X"4A",X"4B",X"4C",X"4D",X"4E",X"4F", + X"50",X"51",X"52",X"53",X"54",X"55",X"56",X"57",X"58",X"59",X"5A",X"5B",X"5C",X"5D",X"5E",X"5F", + X"60",X"61",X"62",X"63",X"64",X"65",X"66",X"67",X"68",X"69",X"6A",X"6B",X"6C",X"6D",X"6E",X"6F", + X"70",X"71",X"72",X"73",X"74",X"75",X"76",X"77",X"78",X"79",X"7A",X"7B",X"7C",X"7D",X"7E",X"7F", + X"80",X"81",X"82",X"83",X"84",X"85",X"86",X"87",X"88",X"89",X"8A",X"8B",X"8C",X"8D",X"8E",X"8F", + X"90",X"91",X"92",X"93",X"94",X"95",X"96",X"97",X"98",X"99",X"9A",X"9B",X"9C",X"9D",X"9E",X"9F", + X"A0",X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7",X"A8",X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF", + X"B0",X"B1",X"B2",X"B3",X"B4",X"B5",X"B6",X"B7",X"B8",X"B9",X"BA",X"BB",X"BC",X"BD",X"BE",X"BF", + X"C0",X"C1",X"C2",X"C3",X"C4",X"C5",X"C6",X"C7",X"C8",X"C9",X"CA",X"CB",X"CC",X"CD",X"CE",X"CF", + X"D0",X"D1",X"D2",X"D3",X"D4",X"D5",X"D6",X"D7",X"D8",X"D9",X"DA",X"DB",X"DC",X"DD",X"DE",X"DF", + X"E0",X"E1",X"E2",X"E3",X"E4",X"E5",X"E6",X"E7",X"E8",X"E9",X"EA",X"EB",X"EC",X"ED",X"EE",X"EF", + X"F0",X"F1",X"F2",X"F3",X"F4",X"F5",X"F6",X"F7",X"F8",X"F9",X"FA",X"FB",X"FC",X"FD",X"FE",X"FF", + X"FB",X"FA",X"F9",X"F8",X"F7",X"F6",X"F5",X"F4",X"F3",X"F2",X"F1",X"F0",X"EF",X"EE",X"ED",X"EC", + X"EB",X"EA",X"E9",X"E8",X"E7",X"E6",X"E5",X"E4",X"E3",X"E2",X"E1",X"E0",X"DF",X"DE",X"DD",X"DC", + X"DB",X"DA",X"D9",X"D8",X"D7",X"D6",X"D5",X"D4",X"D3",X"D2",X"D1",X"D0",X"CF",X"CE",X"CD",X"CC", + X"CB",X"CA",X"C9",X"C8",X"C7",X"C6",X"C5",X"C4",X"C3",X"C2",X"C1",X"C0",X"BF",X"BE",X"BD",X"BC", + X"BB",X"BA",X"B9",X"B8",X"B7",X"B6",X"B5",X"B4",X"B3",X"B2",X"B1",X"B0",X"AF",X"AE",X"AD",X"AC", + X"AB",X"AA",X"A9",X"A8",X"A7",X"A6",X"A5",X"A4",X"A3",X"A2",X"A1",X"A0",X"9F",X"9E",X"9D",X"9C", + X"9B",X"9A",X"99",X"98",X"97",X"96",X"95",X"94",X"93",X"92",X"91",X"90",X"8F",X"8E",X"8D",X"8C", + X"8B",X"8A",X"89",X"88",X"87",X"86",X"85",X"84",X"83",X"82",X"81",X"80",X"7F",X"7E",X"7D",X"7C", + X"7B",X"7A",X"79",X"78",X"77",X"76",X"75",X"74",X"73",X"72",X"71",X"70",X"6F",X"6E",X"6D",X"6C", + X"6B",X"6A",X"69",X"68",X"67",X"66",X"65",X"64",X"63",X"62",X"61",X"60",X"5F",X"5E",X"5D",X"5C", + X"5B",X"5A",X"59",X"58",X"57",X"56",X"55",X"54",X"53",X"52",X"51",X"50",X"4F",X"4E",X"4D",X"4C", + X"4B",X"4A",X"49",X"48",X"47",X"46",X"45",X"44",X"43",X"42",X"41",X"40",X"3F",X"3E",X"3D",X"3C", + X"3B",X"3A",X"39",X"38",X"37",X"36",X"35",X"34",X"33",X"32",X"31",X"30",X"2F",X"2E",X"2D",X"2C", + X"2B",X"2A",X"29",X"28",X"27",X"26",X"25",X"24",X"23",X"22",X"21",X"20",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"13",X"12",X"11",X"10",X"0F",X"0E",X"0D",X"0C", + X"0B",X"0A",X"09",X"08",X"07",X"06",X"05",X"04",X"03",X"02",X"01",X"00",X"FC",X"FD",X"FE",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/Williams 6809 rev.1 Hardware/Defender/rtl/defender_prog.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_prog.vhd new file mode 100644 index 00000000..9c4b00c3 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_prog.vhd @@ -0,0 +1,1686 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity defender_prog is +port ( + clk : in std_logic; + addr : in std_logic_vector(14 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of defender_prog is + type rom is array(0 to 26623) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"4A",X"DE",X"63",X"A7",X"44",X"AF",X"42",X"7E",X"E8",X"56",X"9E",X"63",X"8D",X"07",X"33",X"84", + X"7E",X"E8",X"56",X"AE",X"06",X"34",X"46",X"CE",X"A0",X"5F",X"AC",X"C4",X"26",X"18",X"EC",X"84", + X"ED",X"C4",X"A6",X"06",X"27",X"06",X"DC",X"69",X"9F",X"69",X"20",X"04",X"DC",X"61",X"9F",X"61", + X"ED",X"84",X"30",X"C4",X"35",X"C6",X"EE",X"C4",X"26",X"E0",X"12",X"7E",X"D7",X"38",X"34",X"62", + X"DE",X"69",X"26",X"01",X"BD",X"D0",X"3A",X"10",X"AE",X"C4",X"10",X"9F",X"69",X"86",X"01",X"A7", + X"46",X"A6",X"E4",X"20",X"11",X"34",X"62",X"DE",X"61",X"26",X"03",X"BD",X"D0",X"3A",X"10",X"AE", + X"C4",X"10",X"9F",X"61",X"6F",X"46",X"AF",X"42",X"A7",X"45",X"86",X"01",X"A7",X"44",X"AE",X"9F", + X"A0",X"63",X"EF",X"9F",X"A0",X"63",X"AF",X"C4",X"30",X"C4",X"35",X"E2",X"34",X"12",X"8E",X"A0", + X"5F",X"AE",X"84",X"27",X"0E",X"9C",X"63",X"27",X"F8",X"A6",X"05",X"81",X"02",X"27",X"F2",X"8D", + X"84",X"20",X"EE",X"35",X"92",X"8D",X"16",X"34",X"66",X"EF",X"06",X"EE",X"66",X"37",X"26",X"ED", + X"02",X"10",X"AF",X"08",X"37",X"06",X"ED",X"88",X"12",X"EF",X"66",X"35",X"E6",X"34",X"46",X"9E", + X"67",X"26",X"03",X"BD",X"D0",X"3A",X"EC",X"84",X"DD",X"67",X"DC",X"65",X"ED",X"84",X"4F",X"5F", + X"ED",X"04",X"A7",X"88",X"14",X"35",X"C6",X"34",X"70",X"CE",X"A0",X"65",X"AC",X"C4",X"26",X"10", + X"10",X"AE",X"D4",X"10",X"AF",X"C4",X"10",X"9E",X"67",X"9F",X"67",X"10",X"AF",X"84",X"35",X"F0", + X"EE",X"C4",X"26",X"E8",X"CE",X"A0",X"6B",X"AC",X"C4",X"27",X"E5",X"EE",X"C4",X"26",X"F8",X"BD", + X"D0",X"3A",X"34",X"70",X"CE",X"A0",X"6D",X"20",X"EE",X"34",X"18",X"10",X"DF",X"77",X"24",X"02", + X"31",X"22",X"10",X"EE",X"22",X"CB",X"08",X"1F",X"03",X"20",X"4E",X"34",X"18",X"CB",X"08",X"1F", + X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"31",X"84",X"1F",X"8B",X"1C",X"00",X"20",X"6A",X"34", + X"18",X"CB",X"08",X"1F",X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"31",X"84",X"1F",X"8B",X"1C", + X"00",X"36",X"3F",X"33",X"C9",X"01",X"08",X"20",X"44",X"34",X"18",X"10",X"DF",X"77",X"24",X"02", + X"31",X"22",X"10",X"EE",X"22",X"CB",X"08",X"1F",X"03",X"35",X"3F",X"36",X"3F",X"33",X"C9",X"01", + X"08",X"35",X"3F",X"36",X"3F",X"33",X"C9",X"01",X"08",X"35",X"3F",X"36",X"3F",X"33",X"C9",X"01", + X"08",X"35",X"3F",X"36",X"3F",X"10",X"FE",X"A0",X"77",X"35",X"98",X"34",X"18",X"CB",X"08",X"1F", + X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"31",X"84",X"1F",X"8B",X"1C",X"00",X"36",X"3F",X"33", + X"C9",X"01",X"08",X"36",X"3F",X"33",X"C9",X"01",X"08",X"36",X"3F",X"33",X"C9",X"01",X"08",X"36", + X"3F",X"35",X"98",X"34",X"18",X"10",X"DF",X"77",X"24",X"02",X"31",X"22",X"10",X"EE",X"22",X"CB", + X"08",X"1F",X"03",X"35",X"3F",X"36",X"3F",X"33",X"C9",X"01",X"08",X"20",X"9C",X"24",X"02",X"31", + X"22",X"10",X"AE",X"22",X"1F",X"03",X"EC",X"A4",X"ED",X"C4",X"EC",X"22",X"ED",X"42",X"EC",X"24", + X"ED",X"C9",X"01",X"00",X"EC",X"26",X"ED",X"C9",X"01",X"02",X"EC",X"28",X"ED",X"C9",X"02",X"00", + X"EC",X"2A",X"ED",X"C9",X"02",X"02",X"39",X"1F",X"03",X"CC",X"00",X"00",X"ED",X"C4",X"ED",X"42", + X"ED",X"C9",X"01",X"00",X"ED",X"C9",X"01",X"02",X"ED",X"C9",X"02",X"00",X"ED",X"C9",X"02",X"02", + X"39",X"24",X"02",X"31",X"22",X"10",X"AE",X"22",X"1F",X"03",X"EC",X"A4",X"ED",X"C4",X"EC",X"22", + X"A7",X"42",X"E7",X"C9",X"01",X"00",X"EC",X"24",X"ED",X"C9",X"01",X"01",X"39",X"1F",X"03",X"CC", + X"00",X"00",X"ED",X"C4",X"A7",X"42",X"ED",X"C9",X"01",X"00",X"A7",X"C9",X"01",X"02",X"39",X"34", + X"56",X"10",X"DF",X"77",X"24",X"02",X"31",X"22",X"10",X"EE",X"22",X"CB",X"04",X"1F",X"03",X"35", + X"16",X"36",X"16",X"33",X"C9",X"01",X"04",X"35",X"16",X"36",X"16",X"33",X"C9",X"01",X"04",X"35", + X"16",X"36",X"16",X"33",X"C9",X"01",X"04",X"35",X"16",X"36",X"16",X"33",X"C9",X"01",X"04",X"35", + X"16",X"36",X"16",X"33",X"C9",X"01",X"04",X"35",X"16",X"36",X"16",X"10",X"DE",X"77",X"35",X"D6", + X"34",X"56",X"CB",X"04",X"1F",X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"36",X"16",X"33",X"C9", + X"01",X"04",X"36",X"16",X"33",X"C9",X"01",X"04",X"36",X"16",X"33",X"C9",X"01",X"04",X"36",X"16", + X"33",X"C9",X"01",X"04",X"36",X"16",X"33",X"C9",X"01",X"04",X"36",X"16",X"35",X"D6",X"34",X"10", + X"10",X"DF",X"77",X"24",X"02",X"31",X"22",X"10",X"EE",X"22",X"CB",X"06",X"1F",X"03",X"35",X"36", + X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36",X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36", + X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36",X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36", + X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36",X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36", + X"36",X"36",X"33",X"C9",X"01",X"06",X"35",X"36",X"36",X"36",X"10",X"DE",X"77",X"35",X"90",X"34", + X"10",X"CB",X"06",X"1F",X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"31",X"84",X"36",X"36",X"33", + X"C9",X"01",X"06",X"36",X"36",X"33",X"C9",X"01",X"06",X"36",X"36",X"33",X"C9",X"01",X"06",X"36", + X"36",X"33",X"C9",X"01",X"06",X"36",X"36",X"33",X"C9",X"01",X"06",X"36",X"36",X"33",X"C9",X"01", + X"06",X"36",X"36",X"33",X"C9",X"01",X"06",X"36",X"36",X"35",X"90",X"34",X"10",X"10",X"DF",X"77", + X"24",X"02",X"31",X"22",X"10",X"EE",X"22",X"CB",X"06",X"1F",X"03",X"20",X"89",X"34",X"10",X"CB", + X"06",X"1F",X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"31",X"84",X"20",X"C2",X"34",X"10",X"10", + X"DF",X"77",X"24",X"02",X"31",X"22",X"10",X"EE",X"22",X"CB",X"06",X"1F",X"03",X"7E",X"D2",X"AE", + X"34",X"10",X"CB",X"06",X"1F",X"03",X"CC",X"00",X"00",X"8E",X"00",X"00",X"31",X"84",X"20",X"99", + X"34",X"76",X"1A",X"01",X"09",X"8A",X"44",X"34",X"02",X"86",X"00",X"24",X"08",X"58",X"49",X"58", + X"49",X"58",X"49",X"58",X"49",X"BD",X"D6",X"FE",X"DD",X"73",X"C6",X"03",X"E0",X"E0",X"A6",X"85", + X"9B",X"74",X"19",X"A7",X"85",X"5A",X"2B",X"0E",X"A6",X"85",X"99",X"73",X"19",X"A7",X"85",X"86", + X"00",X"97",X"73",X"5A",X"2A",X"F2",X"DC",X"AB",X"27",X"2B",X"30",X"01",X"31",X"03",X"8D",X"2A", + X"25",X"23",X"A6",X"21",X"9B",X"AC",X"19",X"A7",X"21",X"A6",X"A4",X"99",X"AB",X"19",X"A7",X"A4", + X"6C",X"06",X"6C",X"08",X"BD",X"D6",X"29",X"BD",X"D6",X"80",X"CC",X"D4",X"B0",X"BD",X"D5",X"4D", + X"C6",X"05",X"BD",X"F5",X"1C",X"8D",X"12",X"35",X"76",X"39",X"34",X"06",X"EC",X"84",X"10",X"A3", + X"A4",X"26",X"04",X"A6",X"02",X"A1",X"22",X"35",X"86",X"96",X"8B",X"34",X"02",X"4A",X"26",X"08", + X"8E",X"0F",X"1C",X"CE",X"A1",X"C3",X"20",X"06",X"8E",X"71",X"1C",X"CE",X"A2",X"00",X"0F",X"73", + X"C6",X"06",X"96",X"36",X"34",X"02",X"86",X"02",X"97",X"36",X"B7",X"D0",X"00",X"A6",X"C0",X"10", + X"BE",X"C0",X"00",X"C5",X"01",X"26",X"06",X"33",X"5F",X"44",X"44",X"44",X"44",X"84",X"0F",X"26", + X"0F",X"C1",X"02",X"23",X"0B",X"0D",X"73",X"26",X"07",X"1E",X"10",X"BD",X"F5",X"7B",X"20",X"0B", + X"0C",X"73",X"48",X"48",X"31",X"A6",X"1E",X"10",X"BD",X"F5",X"22",X"1E",X"10",X"30",X"89",X"04", + X"00",X"5A",X"26",X"C9",X"35",X"02",X"97",X"36",X"B7",X"D0",X"00",X"35",X"82",X"96",X"BA",X"2A", + X"2A",X"BD",X"F5",X"07",X"BD",X"C0",X"33",X"7C",X"A1",X"62",X"20",X"1F",X"96",X"BA",X"2A",X"1B", + X"1A",X"90",X"7F",X"D0",X"00",X"86",X"04",X"B7",X"CC",X"03",X"B6",X"CC",X"02",X"BD",X"F5",X"07", + X"96",X"79",X"44",X"25",X"03",X"7E",X"C0",X"27",X"7E",X"C0",X"21",X"7E",X"D0",X"0A",X"8E",X"A0", + X"7F",X"C6",X"12",X"20",X"0C",X"8E",X"A0",X"80",X"C6",X"15",X"20",X"05",X"8E",X"A0",X"81",X"C6", + X"18",X"96",X"7E",X"26",X"E6",X"A6",X"84",X"26",X"E2",X"86",X"16",X"A7",X"84",X"86",X"C0",X"ED", + X"49",X"86",X"0A",X"8E",X"D4",X"99",X"7E",X"D0",X"01",X"96",X"7E",X"26",X"CE",X"CC",X"D4",X"AB", + X"BD",X"D5",X"4D",X"BD",X"F5",X"07",X"AD",X"D8",X"09",X"20",X"C0",X"FF",X"01",X"18",X"19",X"00", + X"FF",X"01",X"20",X"1E",X"00",X"F0",X"02",X"08",X"11",X"01",X"20",X"17",X"00",X"F0",X"01",X"40", + X"0A",X"00",X"F0",X"01",X"10",X"0B",X"00",X"E8",X"01",X"04",X"14",X"02",X"06",X"11",X"02",X"0A", + X"17",X"00",X"E8",X"06",X"04",X"11",X"01",X"10",X"17",X"00",X"E0",X"03",X"0A",X"08",X"00",X"E0", + X"01",X"18",X"1F",X"00",X"E0",X"01",X"18",X"11",X"00",X"D8",X"01",X"10",X"1A",X"00",X"D0",X"01", + X"30",X"15",X"00",X"D0",X"01",X"10",X"05",X"00",X"D0",X"01",X"08",X"17",X"00",X"D0",X"01",X"08", + X"07",X"00",X"D0",X"01",X"0A",X"01",X"00",X"D0",X"01",X"0A",X"06",X"00",X"D0",X"01",X"10",X"0B", + X"00",X"C8",X"0A",X"01",X"0E",X"00",X"C0",X"01",X"08",X"07",X"00",X"C0",X"01",X"30",X"14",X"00", + X"C0",X"01",X"20",X"18",X"00",X"C0",X"01",X"08",X"03",X"00",X"C0",X"01",X"30",X"09",X"00",X"C0", + X"01",X"08",X"03",X"00",X"C0",X"01",X"18",X"0C",X"00",X"34",X"07",X"1A",X"FF",X"7F",X"D0",X"00", + X"86",X"3F",X"B7",X"CC",X"02",X"53",X"C4",X"3F",X"F7",X"CC",X"02",X"35",X"87",X"34",X"17",X"0F", + X"AD",X"1F",X"01",X"A6",X"84",X"91",X"B2",X"25",X"0D",X"97",X"B2",X"30",X"1E",X"1A",X"10",X"9F", + X"B0",X"CC",X"01",X"01",X"DD",X"B3",X"35",X"97",X"96",X"B3",X"27",X"14",X"0A",X"B3",X"26",X"38", + X"9E",X"B0",X"0A",X"B4",X"26",X"2C",X"30",X"03",X"9F",X"B0",X"A6",X"84",X"26",X"22",X"97",X"B2", + X"96",X"7B",X"85",X"02",X"26",X"0A",X"96",X"AD",X"27",X"1E",X"0F",X"AD",X"C6",X"0F",X"20",X"16", + X"96",X"AD",X"26",X"14",X"96",X"BA",X"85",X"98",X"26",X"0E",X"C6",X"16",X"D7",X"AD",X"20",X"06", + X"97",X"B4",X"EC",X"01",X"97",X"B3",X"8D",X"91",X"B6",X"CC",X"01",X"85",X"40",X"27",X"04",X"86", + X"3C",X"97",X"7E",X"96",X"7E",X"27",X"02",X"0A",X"7E",X"96",X"7F",X"27",X"02",X"0A",X"7F",X"96", + X"81",X"27",X"02",X"0A",X"81",X"96",X"80",X"27",X"02",X"0A",X"80",X"96",X"7B",X"9A",X"7C",X"43", + X"D6",X"7B",X"D7",X"7C",X"F6",X"CC",X"04",X"D7",X"7B",X"F6",X"CC",X"06",X"D7",X"7D",X"94",X"7B", + X"27",X"1B",X"CE",X"F8",X"82",X"5F",X"CB",X"04",X"44",X"24",X"FB",X"33",X"C5",X"37",X"16",X"DE", + X"82",X"26",X"05",X"DD",X"82",X"9F",X"84",X"39",X"DD",X"86",X"9F",X"88",X"39",X"96",X"79",X"9A", + X"7A",X"43",X"D6",X"79",X"D7",X"7A",X"F6",X"CC",X"00",X"C4",X"3F",X"D7",X"79",X"95",X"79",X"27", + X"17",X"8E",X"00",X"78",X"30",X"1F",X"26",X"FC",X"F6",X"CC",X"00",X"D4",X"79",X"D7",X"79",X"94", + X"79",X"27",X"05",X"CE",X"F8",X"A2",X"8D",X"BD",X"39",X"34",X"76",X"8E",X"0F",X"14",X"B6",X"A1", + X"C9",X"8D",X"0F",X"96",X"8C",X"4A",X"27",X"08",X"8E",X"71",X"14",X"B6",X"A2",X"06",X"8D",X"02", + X"35",X"F6",X"81",X"05",X"23",X"02",X"86",X"05",X"34",X"02",X"CC",X"20",X"06",X"BD",X"F5",X"C7", + X"A6",X"E4",X"27",X"0F",X"10",X"8E",X"F9",X"D5",X"1F",X"10",X"BD",X"F5",X"22",X"8B",X"06",X"6A", + X"E4",X"26",X"F7",X"35",X"82",X"34",X"76",X"CC",X"40",X"20",X"8E",X"30",X"08",X"BD",X"F5",X"C7", + X"8D",X"4A",X"8D",X"B5",X"8D",X"0A",X"96",X"8C",X"BD",X"D3",X"DB",X"4A",X"26",X"FA",X"35",X"F6", + X"34",X"76",X"8E",X"29",X"1B",X"B6",X"A1",X"CB",X"8D",X"0F",X"96",X"8C",X"4A",X"27",X"08",X"8E", + X"8B",X"1B",X"B6",X"A2",X"08",X"8D",X"02",X"35",X"F6",X"81",X"03",X"23",X"02",X"86",X"03",X"34", + X"02",X"CC",X"03",X"0B",X"BD",X"F5",X"C7",X"A6",X"E4",X"27",X"0F",X"10",X"8E",X"F9",X"D9",X"1F", + X"10",X"BD",X"F5",X"22",X"CB",X"04",X"6A",X"E4",X"26",X"F7",X"35",X"82",X"CC",X"55",X"55",X"8E", + X"00",X"28",X"ED",X"84",X"30",X"89",X"01",X"00",X"8C",X"9C",X"00",X"25",X"F5",X"8E",X"2F",X"08", + X"ED",X"89",X"41",X"00",X"ED",X"81",X"8C",X"2F",X"28",X"26",X"F5",X"8E",X"2F",X"07",X"A7",X"84", + X"30",X"89",X"01",X"00",X"8C",X"71",X"07",X"26",X"F5",X"8E",X"4C",X"07",X"CC",X"99",X"99",X"ED", + X"84",X"ED",X"88",X"21",X"30",X"89",X"01",X"00",X"8C",X"54",X"07",X"26",X"F2",X"39",X"34",X"02", + X"96",X"8B",X"8E",X"A1",X"C2",X"4A",X"27",X"03",X"8E",X"A1",X"FF",X"35",X"82",X"34",X"02",X"20", + X"F1",X"34",X"04",X"D6",X"DF",X"86",X"03",X"3D",X"CB",X"11",X"96",X"E1",X"44",X"44",X"44",X"98", + X"E1",X"44",X"06",X"E0",X"06",X"E1",X"DB",X"E1",X"D9",X"E0",X"D7",X"DF",X"96",X"DF",X"35",X"84", + X"C0",X"FF",X"00",X"00",X"14",X"05",X"34",X"3E",X"1A",X"FF",X"10",X"CE",X"BF",X"FF",X"86",X"A0", + X"1F",X"8B",X"7F",X"D0",X"00",X"C6",X"04",X"CE",X"CC",X"00",X"8E",X"D7",X"30",X"6F",X"41",X"A6", + X"80",X"A7",X"C1",X"A6",X"03",X"A7",X"5F",X"5A",X"26",X"F3",X"BD",X"F5",X"D1",X"8E",X"9C",X"00", + X"6F",X"80",X"C6",X"38",X"F7",X"C3",X"FC",X"8C",X"C0",X"00",X"26",X"F4",X"7F",X"CC",X"00",X"7F", + X"CC",X"02",X"8E",X"C4",X"7D",X"BD",X"F8",X"3A",X"1F",X"98",X"81",X"20",X"22",X"06",X"84",X"0F", + X"81",X"09",X"23",X"01",X"5F",X"D7",X"37",X"CC",X"A5",X"5A",X"DD",X"E0",X"CC",X"FF",X"70",X"DD", + X"A1",X"0F",X"A3",X"C6",X"FF",X"DD",X"79",X"BD",X"D8",X"DC",X"BD",X"F5",X"07",X"BD",X"C0",X"33", + X"8D",X"24",X"8D",X"12",X"BD",X"F8",X"00",X"8E",X"D8",X"25",X"86",X"01",X"BD",X"D0",X"55",X"03", + X"BA",X"1C",X"00",X"7E",X"E7",X"BE",X"8D",X"3D",X"BD",X"E6",X"9F",X"BD",X"E0",X"52",X"8D",X"45", + X"BD",X"E5",X"4B",X"7E",X"E1",X"49",X"34",X"16",X"4F",X"5F",X"8E",X"AA",X"C5",X"9F",X"61",X"30", + X"0F",X"AF",X"11",X"8C",X"AF",X"1B",X"26",X"F7",X"ED",X"84",X"DD",X"5F",X"8E",X"AF",X"2A",X"9F", + X"69",X"30",X"88",X"17",X"AF",X"88",X"E9",X"8C",X"AF",X"86",X"26",X"F5",X"ED",X"84",X"8E",X"A0", + X"5F",X"9F",X"63",X"35",X"96",X"8E",X"F8",X"BE",X"CE",X"A0",X"26",X"C6",X"10",X"A6",X"80",X"A7", + X"C0",X"5A",X"26",X"F9",X"39",X"34",X"17",X"1A",X"FF",X"8E",X"A2",X"3C",X"9F",X"67",X"30",X"88", + X"17",X"AF",X"88",X"E9",X"8C",X"AA",X"AE",X"26",X"F5",X"4F",X"5F",X"ED",X"84",X"DD",X"6B",X"DD", + X"65",X"DD",X"6D",X"35",X"97",X"BD",X"F5",X"0B",X"7E",X"C0",X"00",X"8E",X"C4",X"95",X"BD",X"F8", + X"22",X"4A",X"26",X"04",X"86",X"02",X"97",X"37",X"39",X"96",X"BA",X"2A",X"0E",X"8D",X"EC",X"96", + X"37",X"27",X"08",X"CC",X"D4",X"BD",X"BD",X"D5",X"4D",X"8D",X"16",X"7E",X"D0",X"0A",X"96",X"BA", + X"2A",X"F9",X"8D",X"D7",X"96",X"37",X"81",X"02",X"25",X"F1",X"8D",X"05",X"CC",X"D4",X"C2",X"20", + X"E5",X"0F",X"38",X"12",X"96",X"B7",X"27",X"73",X"96",X"BA",X"2A",X"58",X"BD",X"D0",X"7C",X"BD", + X"F5",X"D1",X"86",X"7F",X"97",X"BA",X"86",X"01",X"97",X"8B",X"97",X"25",X"0F",X"8C",X"8E",X"A1", + X"C2",X"6F",X"80",X"8C",X"A2",X"3C",X"26",X"F9",X"8E",X"C4",X"85",X"BD",X"F8",X"22",X"84",X"0F", + X"B7",X"A1",X"C9",X"C6",X"0A",X"FD",X"A1",X"CB",X"0F",X"39",X"12",X"8E",X"A1",X"C2",X"BD",X"DE", + X"7C",X"8E",X"C4",X"81",X"BD",X"F8",X"38",X"DD",X"AB",X"FD",X"A1",X"C6",X"7F",X"A1",X"C8",X"8E", + X"A1",X"C2",X"A6",X"80",X"A7",X"88",X"3C",X"8C",X"A1",X"FF",X"26",X"F6",X"8E",X"D9",X"19",X"86", + X"00",X"BD",X"D0",X"55",X"0C",X"8C",X"96",X"37",X"8B",X"99",X"19",X"97",X"37",X"8E",X"C4",X"7D", + X"BD",X"F8",X"4E",X"96",X"8C",X"4A",X"27",X"03",X"BD",X"D6",X"65",X"39",X"34",X"12",X"96",X"36", + X"34",X"02",X"8E",X"DF",X"17",X"CC",X"38",X"3C",X"20",X"15",X"34",X"12",X"96",X"36",X"34",X"02", + X"4F",X"BD",X"F5",X"0D",X"B6",X"CC",X"06",X"2A",X"E9",X"8E",X"DF",X"C3",X"CC",X"39",X"34",X"9F", + X"90",X"0F",X"36",X"7F",X"D0",X"00",X"F7",X"CC",X"07",X"B7",X"C3",X"FC",X"86",X"7E",X"97",X"8F", + X"35",X"02",X"97",X"36",X"B7",X"D0",X"00",X"35",X"92",X"C6",X"07",X"BD",X"F5",X"1C",X"BD",X"D7", + X"B6",X"BD",X"D0",X"7C",X"86",X"7F",X"97",X"BA",X"9E",X"63",X"9C",X"5F",X"26",X"04",X"AE",X"84", + X"27",X"10",X"86",X"0F",X"8E",X"D9",X"3A",X"7E",X"D0",X"01",X"96",X"7F",X"9A",X"80",X"9A",X"7F", + X"26",X"F0",X"BD",X"D7",X"C6",X"8E",X"D9",X"50",X"86",X"00",X"BD",X"D0",X"55",X"7E",X"E7",X"BE", + X"4F",X"BD",X"F5",X"0D",X"B6",X"CC",X"06",X"2A",X"15",X"BD",X"F5",X"D1",X"96",X"8B",X"4A",X"26", + X"05",X"BD",X"D8",X"DC",X"20",X"02",X"8D",X"82",X"86",X"FF",X"97",X"7B",X"97",X"7C",X"4F",X"5F", + X"DD",X"20",X"DD",X"22",X"BD",X"F4",X"FF",X"BD",X"C0",X"06",X"BD",X"C0",X"00",X"BD",X"F5",X"F1", + X"CC",X"03",X"00",X"DD",X"BD",X"DD",X"BB",X"0F",X"AD",X"0F",X"B5",X"0F",X"8A",X"0F",X"AF",X"0F", + X"9A",X"0F",X"99",X"8E",X"A1",X"1A",X"9F",X"9B",X"BD",X"D6",X"FE",X"9F",X"8D",X"A6",X"08",X"84", + X"07",X"CE",X"DB",X"53",X"A6",X"C6",X"97",X"2B",X"6A",X"07",X"BD",X"D6",X"65",X"CC",X"20",X"80", + X"DD",X"C1",X"DD",X"BF",X"CC",X"20",X"00",X"DD",X"C3",X"CC",X"08",X"00",X"D3",X"20",X"DD",X"CC", + X"CC",X"80",X"00",X"DD",X"C5",X"4F",X"5F",X"DD",X"C7",X"97",X"C9",X"DD",X"CA",X"8E",X"E9",X"E3", + X"86",X"00",X"BD",X"D0",X"55",X"8E",X"E7",X"82",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"F4",X"93", + X"86",X"00",X"BD",X"D0",X"55",X"8E",X"E9",X"BF",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"F4",X"64", + X"86",X"00",X"BD",X"D0",X"55",X"8E",X"F4",X"3D",X"86",X"00",X"BD",X"D0",X"55",X"96",X"25",X"27", + X"1E",X"D6",X"8C",X"5A",X"27",X"19",X"CE",X"C0",X"EF",X"96",X"8B",X"4A",X"27",X"03",X"CE",X"C0", + X"F1",X"8E",X"3C",X"80",X"BD",X"F5",X"13",X"86",X"80",X"8E",X"DA",X"1F",X"7E",X"D0",X"01",X"BD", + X"F5",X"F1",X"C6",X"05",X"9E",X"8D",X"A6",X"0A",X"8D",X"15",X"86",X"60",X"8E",X"DA",X"32",X"7E", + X"D0",X"01",X"BD",X"DC",X"1E",X"8D",X"05",X"0F",X"25",X"7E",X"DC",X"D9",X"5F",X"96",X"FA",X"26", + X"02",X"CA",X"02",X"D7",X"BA",X"39",X"C6",X"58",X"8D",X"F3",X"DC",X"20",X"DD",X"22",X"9E",X"BF", + X"CC",X"08",X"06",X"BD",X"F5",X"C7",X"BD",X"DB",X"B6",X"CC",X"D4",X"B5",X"BD",X"D5",X"4D",X"10", + X"8E",X"F9",X"C1",X"96",X"BB",X"2A",X"04",X"10",X"8E",X"F9",X"CB",X"8E",X"DB",X"4B",X"AF",X"47", + X"CE",X"AF",X"DD",X"BD",X"DB",X"5C",X"1F",X"31",X"DE",X"63",X"AF",X"4B",X"DC",X"C1",X"10",X"AE", + X"4B",X"BD",X"F5",X"7B",X"86",X"02",X"8E",X"DA",X"8C",X"7E",X"D0",X"01",X"DC",X"C1",X"10",X"AE", + X"4B",X"BD",X"F5",X"22",X"AE",X"47",X"A6",X"80",X"27",X"0E",X"97",X"31",X"0F",X"26",X"AF",X"47", + X"86",X"02",X"8E",X"DA",X"7C",X"7E",X"D0",X"01",X"86",X"7F",X"97",X"BA",X"86",X"FF",X"97",X"26", + X"86",X"02",X"8E",X"DA",X"B8",X"7E",X"D0",X"01",X"0F",X"26",X"BD",X"D0",X"7C",X"9E",X"C1",X"30", + X"89",X"04",X"03",X"BD",X"F4",X"FF",X"BD",X"C0",X"0E",X"BD",X"D3",X"D9",X"0F",X"B3",X"C6",X"13", + X"BD",X"D5",X"39",X"BD",X"DD",X"AE",X"26",X"06",X"BD",X"DD",X"EC",X"BD",X"F5",X"F1",X"96",X"8B", + X"9E",X"8D",X"E6",X"07",X"26",X"2F",X"D6",X"8C",X"5A",X"27",X"41",X"88",X"03",X"BD",X"D7",X"0D", + X"E6",X"07",X"27",X"38",X"CE",X"C0",X"EF",X"81",X"02",X"27",X"03",X"CE",X"C0",X"F1",X"8E",X"3C", + X"78",X"BD",X"F5",X"13",X"CE",X"C0",X"75",X"8E",X"3E",X"88",X"BD",X"F5",X"13",X"86",X"60",X"8E", + X"DB",X"15",X"7E",X"D0",X"01",X"96",X"8B",X"4C",X"91",X"8C",X"23",X"02",X"86",X"01",X"BD",X"D7", + X"0D",X"E6",X"07",X"27",X"F2",X"97",X"8B",X"0C",X"25",X"7E",X"D9",X"19",X"CE",X"C0",X"75",X"8E", + X"3E",X"80",X"86",X"FF",X"97",X"BA",X"BD",X"F5",X"13",X"0F",X"B3",X"C6",X"13",X"BD",X"D5",X"39", + X"86",X"28",X"8E",X"DB",X"48",X"7E",X"D0",X"01",X"7E",X"D8",X"25",X"07",X"07",X"07",X"0F",X"3F", + X"7F",X"FF",X"FF",X"00",X"81",X"28",X"07",X"16",X"2F",X"84",X"15",X"00",X"34",X"56",X"BD",X"F5", + X"03",X"EC",X"A4",X"ED",X"C4",X"3D",X"30",X"4A",X"AF",X"42",X"30",X"8B",X"AF",X"44",X"34",X"10", + X"30",X"8B",X"34",X"10",X"EC",X"26",X"ED",X"46",X"EC",X"28",X"ED",X"48",X"AE",X"22",X"33",X"4A", + X"8D",X"0E",X"AE",X"24",X"EE",X"62",X"EC",X"E4",X"ED",X"62",X"8D",X"04",X"32",X"64",X"35",X"D6", + X"EC",X"81",X"85",X"F0",X"27",X"02",X"8A",X"F0",X"85",X"0F",X"27",X"02",X"8A",X"0F",X"C5",X"F0", + X"27",X"02",X"CA",X"F0",X"C5",X"0F",X"27",X"02",X"CA",X"0F",X"84",X"BB",X"C4",X"BB",X"ED",X"C1", + X"11",X"A3",X"64",X"25",X"DB",X"39",X"34",X"56",X"DE",X"8D",X"33",X"4A",X"86",X"33",X"6F",X"C0", + X"4A",X"26",X"FB",X"DE",X"8D",X"96",X"FA",X"A7",X"4A",X"33",X"4B",X"8E",X"A0",X"FB",X"A6",X"80", + X"8C",X"A1",X"00",X"22",X"03",X"AB",X"88",X"16",X"A7",X"C0",X"8C",X"A1",X"12",X"26",X"EF",X"35", + X"D6",X"34",X"06",X"97",X"74",X"BD",X"D0",X"95",X"F9",X"01",X"ED",X"70",X"66",X"66",X"BD",X"D7", + X"11",X"DC",X"E0",X"84",X"1F",X"AB",X"61",X"ED",X"0A",X"54",X"24",X"05",X"CC",X"F9",X"15",X"ED", + X"02",X"86",X"E0",X"A7",X"0C",X"86",X"10",X"A7",X"88",X"14",X"4F",X"5F",X"ED",X"88",X"10",X"ED", + X"0E",X"ED",X"06",X"9F",X"65",X"AF",X"A1",X"0A",X"74",X"26",X"CA",X"35",X"86",X"0C",X"8E",X"EC", + X"C9",X"86",X"00",X"BD",X"D0",X"55",X"CE",X"A1",X"1A",X"31",X"C4",X"EF",X"07",X"6F",X"C0",X"11", + X"83",X"A1",X"42",X"26",X"F8",X"DE",X"8D",X"A6",X"4A",X"97",X"FA",X"27",X"20",X"81",X"07",X"23", + X"10",X"44",X"44",X"5F",X"8D",X"9B",X"CB",X"40",X"26",X"FA",X"48",X"48",X"40",X"AB",X"4A",X"27", + X"0C",X"97",X"73",X"D6",X"E0",X"86",X"01",X"8D",X"88",X"0A",X"73",X"26",X"F6",X"DE",X"8D",X"33", + X"4B",X"8E",X"A0",X"FB",X"A6",X"C0",X"A7",X"80",X"8C",X"A1",X"12",X"26",X"F7",X"8E",X"A1",X"12", + X"6F",X"80",X"8C",X"A1",X"1A",X"26",X"F9",X"BD",X"D0",X"AD",X"96",X"DF",X"44",X"8B",X"2A",X"A7", + X"0C",X"BD",X"D7",X"11",X"84",X"3F",X"8B",X"80",X"D3",X"20",X"ED",X"0A",X"96",X"FF",X"27",X"19", + X"81",X"06",X"23",X"02",X"86",X"06",X"31",X"84",X"BD",X"EB",X"9E",X"9E",X"67",X"AF",X"A4",X"10", + X"9F",X"67",X"40",X"9B",X"FF",X"97",X"FF",X"26",X"CE",X"96",X"FE",X"27",X"05",X"BD",X"EF",X"15", + X"0F",X"FE",X"96",X"FD",X"B7",X"A1",X"14",X"27",X"05",X"0F",X"FD",X"BD",X"EB",X"36",X"96",X"FC", + X"B7",X"A1",X"13",X"27",X"13",X"81",X"03",X"23",X"02",X"86",X"03",X"34",X"02",X"BD",X"F2",X"9D", + X"96",X"FC",X"A0",X"E0",X"97",X"FC",X"26",X"ED",X"39",X"DE",X"63",X"86",X"28",X"A7",X"47",X"B6", + X"A1",X"0F",X"B7",X"A1",X"18",X"86",X"01",X"B7",X"A1",X"17",X"96",X"BA",X"85",X"08",X"26",X"7C", + X"BD",X"DD",X"AE",X"26",X"14",X"86",X"77",X"97",X"BA",X"BD",X"D0",X"7C",X"BD",X"DB",X"B6",X"BD", + X"DD",X"EC",X"9E",X"8D",X"6C",X"07",X"7E",X"D9",X"1E",X"81",X"08",X"22",X"12",X"F6",X"A1",X"0F", + X"54",X"81",X"03",X"22",X"01",X"54",X"5C",X"F1",X"A1",X"18",X"24",X"03",X"F7",X"A1",X"18",X"7A", + X"A1",X"18",X"26",X"1C",X"81",X"04",X"B6",X"A1",X"0F",X"24",X"05",X"44",X"44",X"BD",X"DD",X"9E", + X"B7",X"A1",X"18",X"B6",X"A1",X"19",X"81",X"0C",X"24",X"06",X"BD",X"EA",X"80",X"7C",X"A1",X"19", + X"7A",X"A1",X"17",X"27",X"05",X"B6",X"A1",X"12",X"26",X"22",X"B6",X"A1",X"00",X"B7",X"A1",X"17", + X"96",X"FB",X"27",X"18",X"B6",X"A1",X"12",X"81",X"08",X"24",X"11",X"B6",X"A1",X"01",X"91",X"FB", + X"23",X"02",X"96",X"FB",X"BD",X"EF",X"9C",X"40",X"9B",X"FB",X"97",X"FB",X"96",X"AE",X"81",X"10", + X"24",X"02",X"0C",X"AE",X"96",X"24",X"4C",X"81",X"F0",X"23",X"06",X"C6",X"06",X"BD",X"F5",X"1C", + X"4F",X"97",X"24",X"DE",X"63",X"6A",X"47",X"26",X"0D",X"C6",X"02",X"10",X"8E",X"A0",X"FB",X"BD", + X"DE",X"EC",X"86",X"28",X"A7",X"47",X"86",X"0F",X"8E",X"DC",X"EA",X"7E",X"D0",X"01",X"34",X"02", + X"BD",X"D7",X"11",X"A1",X"E4",X"23",X"03",X"44",X"20",X"F9",X"4C",X"32",X"61",X"39",X"B6",X"A1", + X"12",X"9B",X"FB",X"BB",X"A1",X"13",X"BB",X"A1",X"14",X"BB",X"A1",X"16",X"BB",X"A1",X"15",X"9B", + X"FE",X"39",X"34",X"04",X"5F",X"81",X"10",X"25",X"06",X"CB",X"0A",X"80",X"10",X"20",X"F6",X"34", + X"04",X"AB",X"E0",X"35",X"84",X"34",X"04",X"1F",X"89",X"4F",X"C1",X"0A",X"25",X"07",X"8B",X"10", + X"19",X"C0",X"0A",X"20",X"F5",X"34",X"04",X"AB",X"E0",X"19",X"35",X"84",X"0F",X"26",X"DE",X"63", + X"35",X"10",X"AF",X"4D",X"BD",X"F5",X"F1",X"CE",X"C0",X"F9",X"8E",X"38",X"50",X"BD",X"F5",X"13", + X"9E",X"8D",X"A6",X"08",X"8D",X"CF",X"1F",X"89",X"4F",X"9E",X"50",X"BD",X"C0",X"0E",X"8E",X"3D", + X"60",X"CE",X"C0",X"FB",X"BD",X"F5",X"13",X"CE",X"C0",X"F3",X"8E",X"3C",X"90",X"BD",X"F5",X"13", + X"9E",X"8D",X"5F",X"A6",X"08",X"81",X"05",X"23",X"02",X"86",X"05",X"9E",X"50",X"BD",X"C0",X"0E", + X"DE",X"63",X"8E",X"3C",X"A0",X"96",X"FA",X"A7",X"49",X"27",X"31",X"1F",X"10",X"10",X"8E",X"F9", + X"15",X"BD",X"F5",X"22",X"30",X"89",X"04",X"00",X"86",X"01",X"10",X"9E",X"8D",X"E6",X"28",X"C1", + X"05",X"25",X"02",X"C6",X"05",X"58",X"58",X"58",X"58",X"BD",X"D3",X"60",X"AF",X"47",X"86",X"04", + X"8E",X"DE",X"66",X"7E",X"D0",X"01",X"AE",X"47",X"6A",X"49",X"26",X"CF",X"9E",X"8D",X"BD",X"DE", + X"7C",X"86",X"80",X"8E",X"DE",X"79",X"7E",X"D0",X"01",X"6E",X"D8",X"0D",X"34",X"56",X"6C",X"08", + X"8E",X"C4",X"9D",X"BD",X"F8",X"22",X"97",X"73",X"AE",X"62",X"4D",X"27",X"0C",X"A6",X"08",X"90", + X"73",X"25",X"06",X"26",X"FA",X"86",X"0A",X"A7",X"0A",X"BD",X"F4",X"FF",X"A6",X"08",X"34",X"02", + X"81",X"04",X"23",X"02",X"86",X"04",X"FE",X"C0",X"11",X"8B",X"03",X"30",X"0B",X"E6",X"C6",X"E7", + X"80",X"33",X"48",X"11",X"B3",X"C0",X"13",X"26",X"F4",X"35",X"02",X"80",X"04",X"24",X"01",X"4F", + X"97",X"73",X"8E",X"C4",X"97",X"BD",X"F8",X"38",X"BD",X"DD",X"C2",X"9B",X"73",X"97",X"73",X"27", + X"19",X"1F",X"98",X"BD",X"DD",X"C2",X"91",X"73",X"24",X"02",X"97",X"73",X"96",X"73",X"C6",X"03", + X"BD",X"D6",X"FE",X"31",X"0B",X"8D",X"05",X"4A",X"26",X"F4",X"35",X"D6",X"34",X"32",X"BD",X"F4", + X"FF",X"BE",X"C0",X"11",X"A6",X"85",X"2B",X"0A",X"AB",X"A4",X"25",X"10",X"A1",X"84",X"22",X"0C", + X"20",X"08",X"AB",X"A4",X"24",X"06",X"A1",X"01",X"25",X"02",X"A7",X"A4",X"31",X"21",X"30",X"08", + X"BC",X"C0",X"13",X"26",X"DF",X"35",X"B2",X"7F",X"D0",X"00",X"86",X"A0",X"1F",X"8B",X"86",X"04", + X"B7",X"CC",X"03",X"B6",X"CC",X"02",X"B6",X"C8",X"00",X"81",X"80",X"25",X"30",X"96",X"92",X"26", + X"7B",X"0C",X"92",X"BD",X"D5",X"68",X"BD",X"E2",X"63",X"BD",X"E0",X"7E",X"B6",X"C8",X"00",X"80", + X"08",X"81",X"A8",X"23",X"02",X"86",X"A8",X"97",X"A2",X"86",X"02",X"B7",X"D0",X"00",X"DC",X"A2", + X"BD",X"E3",X"9F",X"DC",X"A2",X"BD",X"E2",X"13",X"BD",X"E4",X"53",X"20",X"4F",X"D6",X"92",X"27", + X"4B",X"0F",X"92",X"0C",X"5D",X"C6",X"38",X"F7",X"C3",X"FC",X"81",X"08",X"22",X"1B",X"CE",X"C0", + X"10",X"DC",X"30",X"9E",X"32",X"10",X"9E",X"34",X"36",X"36",X"DC",X"2A",X"9E",X"2C",X"10",X"9E", + X"2E",X"36",X"36",X"DC",X"26",X"9E",X"28",X"36",X"16",X"BD",X"D5",X"FD",X"86",X"07",X"B7",X"D0", + X"00",X"96",X"BA",X"85",X"02",X"26",X"03",X"BD",X"C0",X"03",X"86",X"02",X"B7",X"D0",X"00",X"DC", + X"A1",X"BD",X"E2",X"13",X"DC",X"A1",X"BD",X"E3",X"9F",X"BD",X"E3",X"76",X"1A",X"FF",X"7F",X"D0", + X"00",X"86",X"05",X"B7",X"CC",X"03",X"96",X"36",X"B7",X"D0",X"00",X"A6",X"E4",X"84",X"6F",X"A7", + X"E4",X"35",X"FF",X"7F",X"D0",X"00",X"86",X"A0",X"1F",X"8B",X"86",X"04",X"B7",X"CC",X"03",X"B6", + X"CC",X"02",X"B6",X"C8",X"00",X"81",X"58",X"25",X"2C",X"D6",X"92",X"26",X"CF",X"0C",X"92",X"43", + X"12",X"97",X"A2",X"BD",X"D5",X"FD",X"86",X"07",X"B7",X"D0",X"00",X"96",X"BA",X"85",X"02",X"26", + X"03",X"BD",X"C0",X"03",X"86",X"02",X"B7",X"D0",X"00",X"DC",X"A1",X"BD",X"E2",X"13",X"DC",X"A1", + X"BD",X"E3",X"9F",X"20",X"A7",X"D6",X"92",X"27",X"A3",X"0F",X"92",X"0C",X"5D",X"C6",X"39",X"F7", + X"C3",X"FC",X"81",X"04",X"22",X"1B",X"CE",X"C0",X"10",X"DC",X"30",X"9E",X"32",X"10",X"9E",X"34", + X"36",X"36",X"DC",X"2A",X"9E",X"2C",X"10",X"9E",X"2E",X"36",X"36",X"DC",X"26",X"9E",X"28",X"36", + X"16",X"BD",X"D5",X"68",X"BD",X"E2",X"63",X"BD",X"E0",X"7E",X"86",X"02",X"B7",X"D0",X"00",X"DC", + X"A2",X"BD",X"E2",X"13",X"DC",X"A2",X"BD",X"E3",X"9F",X"BD",X"E4",X"53",X"BD",X"E3",X"76",X"7E", + X"DF",X"AC",X"8E",X"AF",X"9D",X"C6",X"10",X"D7",X"AE",X"5F",X"BD",X"D7",X"11",X"81",X"9C",X"24", + X"F9",X"A7",X"84",X"BD",X"D7",X"11",X"81",X"A8",X"22",X"F9",X"81",X"2A",X"23",X"F5",X"A7",X"01", + X"E7",X"02",X"CB",X"11",X"C4",X"77",X"30",X"04",X"8C",X"AF",X"DD",X"26",X"DD",X"39",X"96",X"BA", + X"85",X"20",X"26",X"F9",X"8E",X"AF",X"9D",X"DC",X"20",X"C4",X"80",X"DD",X"6F",X"DC",X"22",X"C4", + X"80",X"93",X"6F",X"58",X"49",X"97",X"6F",X"C6",X"F0",X"96",X"21",X"85",X"40",X"26",X"01",X"53", + X"D7",X"71",X"4F",X"A7",X"94",X"A7",X"98",X"04",X"A7",X"98",X"08",X"A7",X"98",X"0C",X"A7",X"98", + X"10",X"A7",X"98",X"14",X"A7",X"98",X"18",X"A7",X"98",X"1C",X"A7",X"98",X"20",X"A7",X"98",X"24", + X"A7",X"98",X"28",X"A7",X"98",X"2C",X"A7",X"98",X"30",X"A7",X"98",X"34",X"A7",X"98",X"38",X"A7", + X"98",X"3C",X"D6",X"AE",X"A6",X"84",X"9B",X"6F",X"81",X"9C",X"25",X"0A",X"81",X"C0",X"23",X"04", + X"86",X"9B",X"20",X"02",X"86",X"00",X"A7",X"84",X"A6",X"02",X"94",X"71",X"A7",X"98",X"00",X"30", + X"04",X"5A",X"26",X"E0",X"D6",X"DF",X"C4",X"3C",X"8E",X"AF",X"9D",X"3A",X"A6",X"02",X"8B",X"11", + X"84",X"77",X"A7",X"02",X"96",X"DF",X"85",X"01",X"26",X"3E",X"81",X"98",X"25",X"24",X"CE",X"A1", + X"02",X"33",X"C8",X"B6",X"EE",X"C4",X"11",X"83",X"62",X"45",X"27",X"14",X"0D",X"BA",X"2B",X"10", + X"81",X"A0",X"25",X"0C",X"81",X"A1",X"24",X"08",X"D6",X"E1",X"1F",X"01",X"D6",X"E0",X"E7",X"84", + X"80",X"84",X"6F",X"98",X"00",X"A7",X"84",X"96",X"BA",X"85",X"02",X"27",X"0B",X"96",X"E1",X"84", + X"3F",X"C6",X"03",X"3D",X"CB",X"2A",X"E7",X"01",X"39",X"8E",X"A1",X"62",X"9F",X"9F",X"BD",X"D7", + X"11",X"A7",X"88",X"20",X"A7",X"80",X"8C",X"A1",X"83",X"26",X"F3",X"39",X"9E",X"9F",X"DE",X"BF", + X"33",X"C9",X"FF",X"01",X"EC",X"84",X"ED",X"C4",X"A6",X"05",X"E6",X"09",X"ED",X"42",X"A6",X"0C", + X"A7",X"44",X"96",X"7B",X"85",X"02",X"27",X"22",X"A6",X"03",X"E6",X"06",X"ED",X"C9",X"FF",X"01", + X"A6",X"0A",X"A7",X"C9",X"FF",X"03",X"A6",X"04",X"E6",X"07",X"ED",X"C9",X"FE",X"01",X"A6",X"0B", + X"A7",X"C9",X"FE",X"03",X"A6",X"08",X"A7",X"C9",X"FD",X"02",X"39",X"DE",X"9F",X"9E",X"BF",X"30", + X"89",X"08",X"01",X"37",X"26",X"ED",X"84",X"10",X"AF",X"02",X"37",X"26",X"A7",X"04",X"96",X"7B", + X"85",X"02",X"27",X"18",X"E7",X"89",X"01",X"01",X"10",X"AF",X"89",X"01",X"02",X"37",X"26",X"10", + X"AF",X"89",X"02",X"01",X"A7",X"89",X"02",X"03",X"E7",X"89",X"03",X"02",X"39",X"DE",X"BF",X"5F", + X"8E",X"00",X"00",X"31",X"84",X"33",X"C9",X"08",X"06",X"36",X"34",X"AF",X"C9",X"01",X"01",X"E7", + X"C9",X"01",X"03",X"AF",X"C9",X"02",X"01",X"E7",X"C9",X"02",X"03",X"E7",X"C9",X"03",X"02",X"39", + X"DE",X"BF",X"5F",X"8E",X"00",X"00",X"31",X"84",X"33",X"C9",X"FF",X"06",X"36",X"34",X"AF",X"C9", + X"FF",X"01",X"E7",X"C9",X"FF",X"03",X"AF",X"C9",X"FE",X"01",X"E7",X"C9",X"FE",X"03",X"E7",X"C9", + X"FD",X"02",X"39",X"97",X"77",X"96",X"BA",X"85",X"10",X"26",X"28",X"96",X"77",X"91",X"C0",X"23", + X"22",X"D1",X"C0",X"22",X"1E",X"96",X"BD",X"2B",X"08",X"BD",X"E2",X"5E",X"BD",X"E1",X"F0",X"20", + X"06",X"BD",X"E2",X"5E",X"BD",X"E1",X"CD",X"DC",X"BB",X"DD",X"BD",X"2B",X"07",X"BD",X"E2",X"4A", + X"BD",X"E1",X"5C",X"39",X"BD",X"E2",X"58",X"7E",X"E1",X"9B",X"10",X"8E",X"F9",X"C1",X"96",X"C4", + X"48",X"DC",X"C1",X"DD",X"BF",X"7E",X"D2",X"8E",X"10",X"8E",X"F9",X"CB",X"20",X"F0",X"DC",X"BF", + X"7E",X"D2",X"DF",X"96",X"BA",X"85",X"40",X"10",X"26",X"01",X"0A",X"0F",X"6F",X"DC",X"C7",X"43", + X"53",X"C3",X"00",X"01",X"2A",X"02",X"03",X"6F",X"58",X"49",X"58",X"49",X"D3",X"C8",X"DD",X"C8", + X"96",X"6F",X"99",X"C7",X"97",X"C7",X"DC",X"C7",X"96",X"7B",X"85",X"02",X"27",X"12",X"0F",X"6F", + X"DC",X"BD",X"2A",X"02",X"03",X"6F",X"D3",X"C8",X"DD",X"C8",X"96",X"6F",X"99",X"C7",X"97",X"C7", + X"DC",X"C7",X"47",X"56",X"47",X"56",X"4F",X"57",X"46",X"97",X"94",X"D7",X"93",X"96",X"BD",X"2B", + X"07",X"86",X"20",X"5D",X"2B",X"07",X"20",X"09",X"86",X"70",X"5D",X"2B",X"04",X"0F",X"94",X"0F", + X"93",X"D6",X"94",X"9B",X"93",X"97",X"93",X"93",X"C3",X"27",X"26",X"25",X"12",X"10",X"83",X"01", + X"00",X"23",X"1E",X"CC",X"00",X"40",X"DD",X"95",X"CC",X"01",X"00",X"D3",X"C3",X"20",X"18",X"10", + X"83",X"FF",X"00",X"2E",X"0C",X"CC",X"FF",X"C0",X"DD",X"95",X"CC",X"FF",X"00",X"D3",X"C3",X"20", + X"06",X"4F",X"5F",X"DD",X"95",X"DC",X"93",X"DD",X"C3",X"97",X"C1",X"DC",X"20",X"DD",X"22",X"DC", + X"C7",X"10",X"83",X"01",X"00",X"2D",X"03",X"CC",X"01",X"00",X"10",X"83",X"FF",X"00",X"2E",X"03", + X"CC",X"FF",X"00",X"DD",X"C7",X"D3",X"20",X"93",X"95",X"DD",X"20",X"DC",X"C3",X"44",X"56",X"44", + X"56",X"C4",X"E0",X"D3",X"20",X"DD",X"CC",X"D6",X"C5",X"96",X"7D",X"44",X"25",X"09",X"96",X"7B", + X"2B",X"20",X"CC",X"00",X"00",X"20",X"36",X"C1",X"2B",X"23",X"3A",X"DC",X"CA",X"2A",X"0E",X"C3", + X"FF",X"F8",X"10",X"83",X"FE",X"00",X"2C",X"25",X"CC",X"FE",X"00",X"20",X"20",X"CC",X"FF",X"00", + X"20",X"1B",X"C1",X"EE",X"24",X"1F",X"DC",X"CA",X"2F",X"0E",X"C3",X"00",X"08",X"10",X"83",X"02", + X"00",X"23",X"0A",X"CC",X"02",X"00",X"20",X"05",X"CC",X"01",X"00",X"20",X"00",X"DD",X"CA",X"D3", + X"C5",X"DD",X"C5",X"97",X"C2",X"39",X"96",X"BA",X"85",X"20",X"26",X"22",X"8E",X"A0",X"65",X"20", + X"19",X"EC",X"0A",X"E3",X"0E",X"ED",X"0A",X"EC",X"0C",X"E3",X"88",X"10",X"81",X"2A",X"24",X"02", + X"86",X"F0",X"81",X"F0",X"23",X"02",X"86",X"2A",X"ED",X"0C",X"AE",X"84",X"26",X"E3",X"39",X"34", + X"06",X"96",X"BA",X"85",X"20",X"26",X"4A",X"8E",X"A0",X"65",X"20",X"41",X"EC",X"04",X"27",X"12", + X"E1",X"E4",X"22",X"39",X"E1",X"61",X"23",X"35",X"10",X"AE",X"02",X"AD",X"B8",X"08",X"4F",X"5F", + X"ED",X"04",X"E6",X"0C",X"E1",X"E4",X"22",X"25",X"E1",X"61",X"23",X"21",X"EC",X"0A",X"93",X"20", + X"10",X"83",X"25",X"80",X"24",X"17",X"10",X"AE",X"02",X"58",X"49",X"58",X"49",X"AB",X"A4",X"81", + X"9C",X"22",X"0A",X"A0",X"A4",X"58",X"E6",X"0C",X"ED",X"04",X"AD",X"B8",X"06",X"AE",X"84",X"26", + X"BB",X"35",X"86",X"34",X"66",X"96",X"99",X"81",X"14",X"24",X"4F",X"EC",X"0A",X"93",X"20",X"10", + X"83",X"25",X"80",X"24",X"45",X"58",X"49",X"58",X"49",X"E6",X"0C",X"C1",X"2A",X"23",X"3B",X"9E", + X"67",X"27",X"37",X"ED",X"04",X"ED",X"0A",X"1E",X"89",X"ED",X"0C",X"EF",X"06",X"4F",X"5F",X"ED", + X"0E",X"ED",X"88",X"10",X"EE",X"66",X"37",X"26",X"ED",X"88",X"12",X"10",X"AF",X"02",X"37",X"06", + X"EF",X"66",X"ED",X"08",X"86",X"14",X"A7",X"88",X"15",X"A7",X"88",X"16",X"EC",X"84",X"DD",X"67", + X"DC",X"6D",X"ED",X"84",X"0C",X"99",X"9F",X"6D",X"35",X"E6",X"EE",X"66",X"33",X"46",X"EF",X"66", + X"4F",X"35",X"E6",X"96",X"BA",X"85",X"20",X"26",X"3E",X"DC",X"20",X"C4",X"E0",X"DD",X"9D",X"DC", + X"22",X"C4",X"E0",X"93",X"9D",X"58",X"49",X"58",X"49",X"DD",X"9D",X"8E",X"A0",X"6D",X"20",X"23", + X"10",X"AE",X"04",X"EC",X"88",X"10",X"E3",X"0C",X"81",X"2A",X"23",X"4A",X"ED",X"0C",X"EC",X"0E", + X"D3",X"9D",X"E3",X"0A",X"81",X"98",X"24",X"3E",X"ED",X"0A",X"E6",X"0C",X"ED",X"04",X"EE",X"04", + X"6E",X"98",X"12",X"AE",X"84",X"26",X"D9",X"39",X"DE",X"A6",X"E6",X"0B",X"2A",X"02",X"33",X"46", + X"CC",X"00",X"00",X"ED",X"A4",X"A7",X"22",X"ED",X"A9",X"01",X"00",X"A7",X"A9",X"01",X"02",X"10", + X"AE",X"04",X"EC",X"C4",X"ED",X"A4",X"EC",X"42",X"A7",X"22",X"E7",X"A9",X"01",X"00",X"EC",X"44", + X"ED",X"A9",X"01",X"01",X"20",X"CD",X"4F",X"5F",X"A7",X"88",X"16",X"ED",X"A4",X"A7",X"22",X"ED", + X"A9",X"01",X"00",X"A7",X"A9",X"01",X"02",X"20",X"BA",X"DE",X"A8",X"E6",X"0B",X"58",X"CC",X"00", + X"00",X"ED",X"A4",X"A7",X"22",X"ED",X"A9",X"01",X"00",X"A7",X"A9",X"01",X"02",X"10",X"AE",X"04", + X"25",X"15",X"EC",X"C4",X"84",X"0F",X"ED",X"A4",X"EC",X"42",X"84",X"0F",X"A7",X"22",X"C4",X"F0", + X"E7",X"A9",X"01",X"01",X"7E",X"E4",X"93",X"EC",X"C4",X"C4",X"0F",X"E7",X"21",X"84",X"F0",X"A7", + X"A9",X"01",X"02",X"EC",X"42",X"84",X"F0",X"ED",X"A9",X"01",X"00",X"7E",X"E4",X"93",X"CC",X"00", + X"25",X"BD",X"D3",X"60",X"0A",X"99",X"BD",X"D0",X"F2",X"BD",X"F3",X"FE",X"EC",X"0A",X"44",X"56", + X"44",X"56",X"D3",X"20",X"ED",X"0A",X"A6",X"0C",X"80",X"02",X"A7",X"0C",X"CC",X"F9",X"51",X"ED", + X"02",X"BD",X"FC",X"63",X"CC",X"D4",X"E4",X"7E",X"D5",X"4D",X"5E",X"8E",X"A1",X"A2",X"9F",X"A8", + X"C6",X"0A",X"BD",X"D7",X"11",X"2B",X"02",X"C6",X"09",X"44",X"25",X"04",X"CB",X"A0",X"20",X"02", + X"CB",X"90",X"E7",X"80",X"8C",X"A1",X"C2",X"26",X"E7",X"39",X"8E",X"A0",X"6D",X"20",X"1B",X"A6", + X"88",X"16",X"27",X"05",X"6A",X"88",X"15",X"26",X"11",X"EE",X"84",X"EF",X"A4",X"DE",X"67",X"EF", + X"84",X"9F",X"67",X"BD",X"F3",X"FE",X"0A",X"99",X"30",X"A4",X"31",X"84",X"AE",X"84",X"26",X"DF", + X"39",X"96",X"B5",X"81",X"04",X"24",X"11",X"0C",X"B5",X"CC",X"D5",X"1B",X"BD",X"D5",X"4D",X"9E", + X"C1",X"96",X"BB",X"2A",X"1C",X"7E",X"E6",X"30",X"7E",X"D0",X"0A",X"34",X"46",X"86",X"02",X"97", + X"36",X"B7",X"D0",X"00",X"35",X"06",X"12",X"12",X"12",X"CE",X"F9",X"6F",X"BD",X"E6",X"BA",X"35", + X"C0",X"30",X"89",X"07",X"04",X"AF",X"47",X"AF",X"49",X"AF",X"4B",X"96",X"BA",X"85",X"40",X"26", + X"50",X"86",X"04",X"AE",X"47",X"C6",X"11",X"8C",X"98",X"00",X"24",X"45",X"E7",X"84",X"30",X"89", + X"01",X"00",X"4A",X"26",X"F7",X"C6",X"99",X"E7",X"84",X"AF",X"47",X"10",X"9E",X"A4",X"10",X"8C", + X"A1",X"5F",X"25",X"04",X"10",X"8E",X"A1",X"42",X"AE",X"49",X"86",X"03",X"E6",X"A0",X"E7",X"84", + X"30",X"89",X"01",X"00",X"4A",X"26",X"F5",X"10",X"9F",X"A4",X"AF",X"49",X"6F",X"D8",X"0B",X"6C", + X"4B",X"EC",X"47",X"80",X"06",X"8D",X"94",X"26",X"08",X"86",X"01",X"8E",X"E5",X"CB",X"7E",X"D0", + X"01",X"AE",X"4B",X"4F",X"A7",X"84",X"30",X"89",X"01",X"00",X"AC",X"47",X"23",X"F6",X"20",X"6A", + X"30",X"04",X"AF",X"47",X"AF",X"49",X"AF",X"4B",X"96",X"BA",X"85",X"40",X"26",X"4F",X"86",X"04", + X"AE",X"47",X"C6",X"11",X"8C",X"05",X"00",X"23",X"44",X"E7",X"84",X"30",X"89",X"FF",X"00",X"4A", + X"26",X"F7",X"C6",X"99",X"E7",X"84",X"AF",X"47",X"10",X"9E",X"A4",X"10",X"8C",X"A1",X"5F",X"25", + X"04",X"10",X"8E",X"A1",X"42",X"AE",X"49",X"86",X"03",X"E6",X"A0",X"E7",X"84",X"30",X"89",X"FF", + X"00",X"4A",X"26",X"F5",X"10",X"9F",X"A4",X"AF",X"49",X"6F",X"D8",X"0B",X"6A",X"4B",X"EC",X"47", + X"BD",X"E5",X"AB",X"26",X"08",X"86",X"01",X"8E",X"E6",X"38",X"7E",X"D0",X"01",X"AE",X"4B",X"4F", + X"A7",X"84",X"30",X"89",X"FF",X"00",X"AC",X"47",X"24",X"F6",X"0A",X"B5",X"7E",X"D0",X"0A",X"8E", + X"A1",X"42",X"9F",X"A4",X"BD",X"D7",X"11",X"5F",X"44",X"24",X"02",X"CB",X"01",X"44",X"24",X"02", + X"CB",X"10",X"E7",X"80",X"8C",X"A1",X"62",X"26",X"EB",X"39",X"8E",X"A0",X"65",X"DD",X"D6",X"E3", + X"C4",X"DD",X"D8",X"20",X"17",X"EC",X"04",X"27",X"13",X"91",X"D8",X"24",X"0F",X"D1",X"D9",X"24", + X"0B",X"E3",X"98",X"02",X"91",X"D6",X"23",X"04",X"D1",X"D7",X"22",X"05",X"AE",X"84",X"26",X"E5", + X"39",X"DF",X"DC",X"10",X"AE",X"02",X"A3",X"A4",X"DD",X"73",X"4F",X"5F",X"DD",X"D0",X"DD",X"D2", + X"DC",X"73",X"D0",X"D7",X"22",X"05",X"50",X"D7",X"D1",X"20",X"02",X"D7",X"D3",X"90",X"D6",X"22", + X"05",X"40",X"97",X"D0",X"20",X"02",X"97",X"D2",X"DC",X"73",X"E3",X"A4",X"D0",X"D9",X"22",X"01", + X"5F",X"90",X"D8",X"22",X"01",X"4F",X"DD",X"DA",X"EC",X"A4",X"93",X"D0",X"93",X"DA",X"DD",X"CE", + X"A6",X"41",X"97",X"D5",X"D6",X"D2",X"3D",X"EE",X"42",X"33",X"CB",X"A6",X"21",X"97",X"D4",X"10", + X"AE",X"22",X"D6",X"D0",X"3D",X"31",X"AB",X"96",X"D1",X"31",X"A6",X"96",X"D3",X"33",X"C6",X"D6", + X"CF",X"5A",X"A6",X"C5",X"27",X"2A",X"A6",X"A5",X"27",X"26",X"31",X"A5",X"1F",X"20",X"EE",X"02", + X"A3",X"42",X"10",X"AE",X"04",X"E0",X"41",X"82",X"00",X"25",X"06",X"31",X"A9",X"01",X"00",X"20", + X"F4",X"EB",X"41",X"89",X"00",X"31",X"A5",X"10",X"9F",X"F8",X"AD",X"98",X"08",X"86",X"01",X"39", + X"5A",X"2A",X"CF",X"DC",X"D4",X"31",X"A6",X"33",X"C5",X"0A",X"CE",X"26",X"C2",X"DE",X"DC",X"7E", + X"E6",X"DC",X"0F",X"B6",X"8E",X"E7",X"99",X"96",X"B6",X"E6",X"86",X"27",X"F5",X"0C",X"B6",X"D7", + X"27",X"86",X"02",X"8E",X"E7",X"84",X"7E",X"D0",X"01",X"38",X"39",X"3A",X"3B",X"3C",X"3D",X"3E", + X"3F",X"37",X"2F",X"27",X"1F",X"17",X"47",X"47",X"87",X"87",X"C7",X"C7",X"C6",X"C5",X"CC",X"CB", + X"CA",X"DA",X"E8",X"F8",X"F9",X"FA",X"FB",X"FD",X"FF",X"BF",X"3F",X"3E",X"3C",X"00",X"8E",X"A0", + X"5F",X"9F",X"63",X"96",X"5D",X"27",X"FC",X"0F",X"5D",X"D6",X"BA",X"C5",X"7D",X"27",X"04",X"0F", + X"5E",X"20",X"47",X"48",X"9B",X"5E",X"80",X"04",X"2A",X"01",X"4F",X"97",X"5E",X"81",X"02",X"25", + X"39",X"C6",X"03",X"D7",X"AE",X"81",X"02",X"23",X"31",X"86",X"02",X"97",X"5E",X"10",X"8E",X"A0", + X"65",X"AE",X"A4",X"27",X"25",X"A6",X"88",X"14",X"27",X"04",X"31",X"84",X"20",X"F3",X"EE",X"84", + X"EF",X"A4",X"DC",X"DF",X"84",X"3F",X"8B",X"60",X"E3",X"0A",X"ED",X"0A",X"BD",X"F3",X"FE",X"CC", + X"00",X"00",X"ED",X"04",X"DE",X"6B",X"9F",X"6B",X"EF",X"84",X"86",X"02",X"97",X"36",X"B7",X"D0", + X"00",X"8D",X"3E",X"BD",X"FC",X"66",X"BD",X"D7",X"11",X"9E",X"82",X"26",X"0C",X"9E",X"86",X"27", + X"17",X"DC",X"88",X"0F",X"86",X"0F",X"87",X"20",X"06",X"DC",X"84",X"0F",X"82",X"0F",X"83",X"D4", + X"BA",X"26",X"E6",X"BD",X"D0",X"55",X"20",X"E1",X"CE",X"A0",X"5F",X"20",X"09",X"6A",X"44",X"26", + X"05",X"DF",X"63",X"6E",X"D8",X"02",X"EE",X"C4",X"26",X"F3",X"10",X"CE",X"BF",X"FF",X"7E",X"E7", + X"BE",X"96",X"BA",X"85",X"10",X"26",X"2D",X"DC",X"BF",X"CE",X"F9",X"C1",X"0D",X"BD",X"2A",X"03", + X"CE",X"F9",X"CB",X"34",X"46",X"0C",X"DE",X"BD",X"E6",X"BA",X"35",X"46",X"26",X"08",X"8E",X"A0", + X"6D",X"BD",X"E6",X"BD",X"27",X"0E",X"8E",X"DA",X"46",X"86",X"00",X"BD",X"D0",X"55",X"96",X"BA", + X"8A",X"08",X"97",X"BA",X"0F",X"DE",X"39",X"96",X"AF",X"26",X"23",X"0C",X"AF",X"DC",X"BD",X"53", + X"43",X"C3",X"00",X"01",X"DD",X"BB",X"86",X"02",X"8E",X"E8",X"AE",X"7E",X"D0",X"01",X"96",X"7B", + X"85",X"40",X"26",X"F2",X"86",X"05",X"8E",X"E8",X"BC",X"7E",X"D0",X"01",X"0F",X"AF",X"7E",X"D0", + X"0A",X"96",X"9A",X"26",X"57",X"9E",X"8D",X"A6",X"09",X"27",X"51",X"0C",X"9A",X"6A",X"09",X"BD", + X"D6",X"80",X"CC",X"D4",X"D2",X"BD",X"D5",X"4D",X"9E",X"65",X"27",X"14",X"EC",X"04",X"27",X"0C", + X"A6",X"88",X"14",X"81",X"02",X"24",X"05",X"AD",X"98",X"08",X"20",X"EC",X"AE",X"84",X"20",X"EA", + X"DE",X"63",X"86",X"04",X"A7",X"47",X"03",X"26",X"86",X"02",X"8E",X"E9",X"00",X"7E",X"D0",X"01", + X"6A",X"47",X"26",X"F2",X"86",X"0A",X"8E",X"E9",X"0C",X"7E",X"D0",X"01",X"96",X"7B",X"85",X"04", + X"26",X"F2",X"86",X"0A",X"8E",X"E9",X"1A",X"7E",X"D0",X"01",X"0F",X"9A",X"7E",X"D0",X"0A",X"96", + X"BA",X"85",X"FD",X"10",X"26",X"00",X"95",X"86",X"77",X"97",X"BA",X"BD",X"F5",X"F1",X"86",X"0F", + X"8E",X"E9",X"36",X"7E",X"D0",X"01",X"9E",X"6D",X"27",X"05",X"BD",X"D0",X"F2",X"20",X"F7",X"0F", + X"99",X"DC",X"DF",X"DD",X"20",X"DD",X"22",X"54",X"24",X"08",X"CC",X"20",X"00",X"8E",X"03",X"00", + X"20",X"06",X"8E",X"FD",X"00",X"CC",X"70",X"00",X"DD",X"C3",X"9F",X"BB",X"D6",X"E0",X"54",X"CB", + X"2A",X"D7",X"C5",X"DD",X"C1",X"4F",X"5F",X"97",X"C9",X"DD",X"C7",X"DD",X"CA",X"BD",X"F4",X"FA", + X"C6",X"50",X"BD",X"DA",X"3D",X"BD",X"D0",X"95",X"F9",X"C1",X"ED",X"BC",X"00",X"00",X"CC",X"00", + X"00",X"ED",X"0E",X"ED",X"88",X"10",X"DC",X"C5",X"ED",X"0C",X"DC",X"C3",X"44",X"56",X"44",X"56", + X"D3",X"20",X"ED",X"0A",X"96",X"BB",X"2A",X"05",X"CE",X"F9",X"CB",X"EF",X"02",X"DE",X"63",X"AF", + X"47",X"BD",X"FC",X"60",X"86",X"28",X"8E",X"E9",X"AC",X"7E",X"D0",X"01",X"AE",X"47",X"BD",X"F3", + X"FB",X"BD",X"DA",X"3C",X"96",X"E1",X"81",X"C0",X"10",X"22",X"F0",X"8A",X"7E",X"D0",X"0A",X"9E", + X"9F",X"30",X"01",X"8C",X"A1",X"82",X"23",X"03",X"8E",X"A1",X"62",X"9F",X"9F",X"9E",X"A8",X"30", + X"01",X"8C",X"A1",X"BA",X"23",X"03",X"8E",X"A1",X"A2",X"9F",X"A8",X"86",X"04",X"8E",X"E9",X"BF", + X"7E",X"D0",X"01",X"BD",X"EA",X"33",X"86",X"02",X"8E",X"E9",X"EE",X"7E",X"D0",X"01",X"BD",X"EA", + X"0A",X"BD",X"E5",X"6A",X"86",X"02",X"8E",X"E9",X"FC",X"7E",X"D0",X"01",X"BD",X"F5",X"0B",X"BD", + X"C0",X"03",X"86",X"04",X"8E",X"E9",X"E3",X"7E",X"D0",X"01",X"DC",X"20",X"83",X"0C",X"80",X"DD", + X"73",X"8E",X"A0",X"65",X"20",X"16",X"EC",X"0A",X"93",X"73",X"10",X"83",X"3E",X"80",X"25",X"0C", + X"EE",X"84",X"EF",X"A4",X"DE",X"6B",X"EF",X"84",X"9F",X"6B",X"30",X"A4",X"31",X"84",X"AE",X"84", + X"26",X"E4",X"39",X"DC",X"20",X"83",X"0C",X"80",X"DD",X"73",X"8E",X"A0",X"6B",X"20",X"39",X"EC", + X"88",X"10",X"58",X"49",X"58",X"49",X"58",X"49",X"E3",X"0C",X"81",X"2A",X"24",X"02",X"86",X"F0", + X"81",X"F0",X"23",X"02",X"86",X"2A",X"ED",X"0C",X"EC",X"0E",X"58",X"49",X"58",X"49",X"58",X"49", + X"E3",X"0A",X"ED",X"0A",X"93",X"73",X"10",X"83",X"3E",X"80",X"24",X"0C",X"EE",X"84",X"EF",X"A4", + X"DE",X"65",X"EF",X"84",X"9F",X"65",X"30",X"A4",X"31",X"84",X"AE",X"84",X"26",X"C1",X"39",X"40", + X"8E",X"EA",X"B4",X"86",X"00",X"BD",X"D0",X"55",X"33",X"84",X"BD",X"D0",X"95",X"F9",X"A3",X"EB", + X"2B",X"33",X"33",X"AF",X"47",X"EF",X"06",X"DC",X"DF",X"84",X"1F",X"D3",X"20",X"ED",X"0A",X"54", + X"CB",X"2A",X"E7",X"0C",X"4F",X"5F",X"ED",X"88",X"10",X"ED",X"0E",X"86",X"08",X"A7",X"49",X"8D", + X"44",X"7E",X"FC",X"60",X"AE",X"47",X"EC",X"02",X"10",X"83",X"F8",X"EC",X"27",X"28",X"6A",X"49", + X"26",X"13",X"B6",X"A1",X"10",X"BD",X"DD",X"9E",X"A7",X"49",X"BD",X"EE",X"BA",X"27",X"06",X"CC", + X"D5",X"2F",X"BD",X"D5",X"4D",X"EE",X"02",X"33",X"4A",X"11",X"83",X"F9",X"B7",X"23",X"05",X"CE", + X"F9",X"A3",X"8D",X"0A",X"EF",X"02",X"86",X"06",X"8E",X"EA",X"B4",X"7E",X"D0",X"01",X"96",X"DF", + X"B1",X"A1",X"11",X"23",X"35",X"CC",X"40",X"01",X"DD",X"73",X"EC",X"0A",X"93",X"CC",X"2B",X"02", + X"00",X"73",X"C3",X"02",X"80",X"10",X"83",X"05",X"00",X"23",X"07",X"D6",X"73",X"1D",X"D3",X"C7", + X"ED",X"0E",X"A6",X"0C",X"90",X"C0",X"2B",X"02",X"00",X"74",X"8B",X"0A",X"81",X"14",X"23",X"0A", + X"5F",X"96",X"74",X"D3",X"CA",X"47",X"56",X"ED",X"88",X"10",X"39",X"7A",X"A1",X"19",X"BD",X"F4", + X"16",X"01",X"20",X"D4",X"FD",X"39",X"97",X"73",X"BD",X"D0",X"95",X"F8",X"F7",X"EB",X"74",X"CC", + X"CC",X"BD",X"D7",X"11",X"DC",X"E0",X"84",X"3F",X"8B",X"10",X"ED",X"0A",X"54",X"CB",X"2A",X"E7", + X"0C",X"D6",X"DF",X"C4",X"3F",X"CB",X"E0",X"1D",X"ED",X"0E",X"D6",X"E1",X"C4",X"7F",X"C0",X"40", + X"1D",X"2B",X"04",X"CA",X"20",X"20",X"02",X"C4",X"DF",X"ED",X"88",X"10",X"BD",X"FC",X"60",X"0A", + X"73",X"26",X"C5",X"39",X"BD",X"F4",X"1D",X"02",X"10",X"D4",X"F3",X"86",X"06",X"BD",X"DD",X"9E", + X"31",X"84",X"BD",X"EB",X"9E",X"7A",X"A1",X"14",X"39",X"BD",X"D7",X"11",X"D6",X"DF",X"1D",X"58", + X"49",X"ED",X"88",X"10",X"D6",X"E1",X"C4",X"3F",X"CB",X"E0",X"1D",X"ED",X"0E",X"39",X"34",X"76", + X"97",X"73",X"B6",X"A1",X"16",X"4C",X"81",X"14",X"22",X"3D",X"B7",X"A1",X"16",X"8E",X"EC",X"17", + X"86",X"00",X"BD",X"D0",X"55",X"33",X"84",X"BD",X"D0",X"95",X"F9",X"7B",X"EB",X"E9",X"24",X"24", + X"EC",X"2A",X"ED",X"0A",X"EC",X"2C",X"ED",X"0C",X"AF",X"47",X"EF",X"06",X"8D",X"BB",X"DC",X"E0", + X"F4",X"A1",X"0E",X"E7",X"49",X"84",X"1F",X"A7",X"44",X"B6",X"A1",X"0D",X"BD",X"DD",X"9E",X"A7", + X"4B",X"9F",X"65",X"0A",X"73",X"26",X"BB",X"35",X"F6",X"7A",X"A1",X"16",X"BD",X"F3",X"FB",X"34", + X"10",X"BD",X"D0",X"13",X"35",X"10",X"EC",X"0A",X"83",X"00",X"40",X"ED",X"0A",X"EC",X"0C",X"80", + X"02",X"A7",X"0C",X"CE",X"F8",X"E2",X"EF",X"02",X"BD",X"FC",X"63",X"CC",X"01",X"15",X"BD",X"D3", + X"60",X"CC",X"D5",X"16",X"7E",X"D5",X"4D",X"AE",X"47",X"F6",X"A1",X"0C",X"10",X"9E",X"CC",X"10", + X"AC",X"0A",X"24",X"01",X"50",X"1D",X"ED",X"0E",X"20",X"54",X"E6",X"49",X"AE",X"47",X"96",X"C0", + X"A1",X"0C",X"22",X"01",X"50",X"1D",X"E3",X"88",X"10",X"10",X"83",X"02",X"00",X"2D",X"03",X"CC", + X"02",X"00",X"10",X"83",X"FE",X"00",X"2E",X"03",X"CC",X"FE",X"00",X"ED",X"88",X"10",X"43",X"53", + X"58",X"49",X"58",X"49",X"1F",X"89",X"1D",X"E3",X"88",X"10",X"ED",X"88",X"10",X"D6",X"DF",X"C4", + X"1F",X"CB",X"F0",X"1D",X"E3",X"88",X"10",X"ED",X"88",X"10",X"DC",X"CC",X"A3",X"0A",X"C3",X"12", + X"C0",X"10",X"83",X"25",X"80",X"22",X"A0",X"6A",X"4B",X"26",X"03",X"BD",X"EC",X"86",X"86",X"03", + X"8E",X"EC",X"2A",X"7E",X"D0",X"01",X"34",X"10",X"DC",X"CC",X"A3",X"0A",X"A8",X"0E",X"2B",X"2F", + X"31",X"84",X"BD",X"E3",X"F3",X"E4",X"D9",X"F9",X"5B",X"E5",X"1E",X"27",X"22",X"EC",X"2E",X"58", + X"49",X"58",X"49",X"58",X"49",X"ED",X"0E",X"CC",X"D5",X"34",X"BD",X"D5",X"4D",X"5F",X"96",X"C0", + X"A0",X"0C",X"47",X"56",X"47",X"56",X"47",X"56",X"47",X"56",X"47",X"56",X"ED",X"88",X"10",X"B6", + X"A1",X"0D",X"BD",X"DD",X"9E",X"A7",X"4B",X"35",X"90",X"AE",X"47",X"30",X"02",X"8C",X"A1",X"3A", + X"25",X"03",X"8E",X"A1",X"1A",X"AF",X"47",X"AE",X"84",X"27",X"76",X"EC",X"04",X"27",X"72",X"EC", + X"08",X"10",X"83",X"ED",X"70",X"26",X"6A",X"EC",X"02",X"10",X"83",X"F9",X"0B",X"22",X"2F",X"96", + X"DF",X"81",X"08",X"23",X"50",X"BD",X"ED",X"59",X"8B",X"04",X"81",X"E8",X"23",X"02",X"86",X"E8", + X"C6",X"01",X"A1",X"0C",X"27",X"07",X"22",X"01",X"50",X"EB",X"0C",X"E7",X"0C",X"EE",X"02",X"33", + X"4A",X"11",X"83",X"F9",X"0B",X"23",X"03",X"CE",X"F9",X"01",X"C6",X"E0",X"20",X"2C",X"96",X"DF", + X"81",X"08",X"23",X"F3",X"8D",X"33",X"8B",X"0F",X"81",X"E8",X"23",X"02",X"86",X"E8",X"C6",X"01", + X"A1",X"0C",X"27",X"07",X"22",X"01",X"50",X"EB",X"0C",X"E7",X"0C",X"EE",X"02",X"33",X"4A",X"11", + X"83",X"F9",X"1F",X"23",X"03",X"CE",X"F9",X"15",X"C6",X"20",X"EF",X"02",X"1D",X"E3",X"0A",X"ED", + X"0A",X"86",X"02",X"8E",X"EC",X"C9",X"7E",X"D0",X"01",X"34",X"14",X"EC",X"0A",X"44",X"56",X"44", + X"56",X"44",X"56",X"44",X"56",X"44",X"56",X"44",X"56",X"8E",X"B3",X"00",X"A6",X"8B",X"35",X"94", + X"96",X"DE",X"27",X"03",X"4F",X"35",X"86",X"8D",X"4B",X"BD",X"F3",X"FB",X"CC",X"F8",X"D8",X"ED", + X"02",X"EC",X"0A",X"83",X"00",X"40",X"ED",X"0A",X"BD",X"FC",X"63",X"CC",X"D4",X"E4",X"7E",X"D5", + X"4D",X"EE",X"06",X"27",X"DB",X"96",X"DE",X"27",X"26",X"EC",X"42",X"10",X"83",X"F2",X"4C",X"27", + X"16",X"CC",X"D4",X"DA",X"BD",X"D5",X"4D",X"34",X"10",X"8E",X"EE",X"73",X"86",X"00",X"BD",X"D0", + X"55",X"31",X"84",X"35",X"10",X"AF",X"27",X"CC",X"F2",X"4C",X"ED",X"42",X"4F",X"35",X"86",X"8D", + X"B6",X"7E",X"D0",X"13",X"31",X"84",X"34",X"52",X"CE",X"A1",X"1A",X"86",X"40",X"10",X"AC",X"C1", + X"27",X"06",X"4A",X"26",X"F8",X"BD",X"D0",X"3A",X"4F",X"5F",X"ED",X"5E",X"0A",X"FA",X"26",X"08", + X"8E",X"ED",X"EA",X"86",X"00",X"BD",X"D0",X"55",X"35",X"D2",X"96",X"BA",X"8A",X"02",X"97",X"BA", + X"6F",X"47",X"BD",X"F4",X"FF",X"BD",X"C0",X"09",X"8E",X"B1",X"25",X"CE",X"00",X"00",X"86",X"40", + X"EF",X"91",X"4A",X"26",X"FB",X"9E",X"67",X"CC",X"F9",X"F1",X"ED",X"02",X"C6",X"02",X"D7",X"73", + X"BD",X"D7",X"11",X"84",X"3F",X"D3",X"20",X"ED",X"0A",X"BD",X"ED",X"59",X"A7",X"0C",X"80",X"0A", + X"BD",X"FC",X"63",X"0A",X"73",X"26",X"E9",X"96",X"DF",X"84",X"1F",X"8E",X"E7",X"99",X"A6",X"86", + X"97",X"26",X"CC",X"D4",X"E4",X"BD",X"D5",X"4D",X"8E",X"EE",X"44",X"86",X"02",X"C6",X"08",X"D7", + X"5E",X"7E",X"D0",X"01",X"0F",X"26",X"A6",X"47",X"44",X"44",X"44",X"4C",X"BD",X"DD",X"9E",X"8E", + X"EE",X"54",X"20",X"E9",X"6C",X"47",X"A6",X"47",X"81",X"10",X"26",X"A9",X"CC",X"D4",X"C7",X"BD", + X"D5",X"4D",X"7E",X"D0",X"0A",X"BD",X"D0",X"95",X"F9",X"DD",X"ED",X"BC",X"00",X"00",X"CC",X"01", + X"25",X"20",X"0C",X"BD",X"D0",X"95",X"F9",X"E7",X"ED",X"BC",X"00",X"00",X"CC",X"01",X"50",X"BD", + X"D3",X"60",X"10",X"AE",X"47",X"DC",X"C7",X"ED",X"0E",X"CC",X"00",X"00",X"ED",X"88",X"10",X"86", + X"11",X"A7",X"88",X"14",X"EC",X"2A",X"ED",X"0A",X"EC",X"2C",X"2B",X"05",X"C3",X"18",X"00",X"20", + X"03",X"83",X"20",X"00",X"ED",X"0C",X"9F",X"65",X"AF",X"47",X"86",X"32",X"8E",X"EE",X"B2",X"7E", + X"D0",X"01",X"AE",X"47",X"BD",X"F3",X"FB",X"7E",X"D0",X"0A",X"34",X"10",X"BD",X"E3",X"F3",X"E4", + X"D9",X"F9",X"5B",X"E5",X"1E",X"27",X"35",X"D6",X"DF",X"C4",X"1F",X"CB",X"F0",X"DB",X"BF",X"E0", + X"04",X"1D",X"58",X"49",X"58",X"49",X"ED",X"0E",X"D6",X"DF",X"C1",X"78",X"23",X"0A",X"DC",X"C7", + X"58",X"49",X"58",X"49",X"E3",X"0E",X"ED",X"0E",X"D6",X"E1",X"C4",X"1F",X"CB",X"F0",X"DB",X"C0", + X"E0",X"05",X"1D",X"58",X"49",X"58",X"49",X"ED",X"88",X"10",X"86",X"01",X"35",X"90",X"6A",X"4D", + X"26",X"12",X"B6",X"A1",X"05",X"BD",X"DD",X"9E",X"A7",X"4D",X"8D",X"AE",X"27",X"06",X"CC",X"D5", + X"25",X"BD",X"D5",X"4D",X"39",X"34",X"02",X"97",X"73",X"8E",X"F1",X"5E",X"86",X"00",X"BD",X"D0", + X"55",X"33",X"84",X"BD",X"D0",X"95",X"F8",X"CE",X"EF",X"6D",X"CC",X"33",X"BD",X"D7",X"11",X"DC", + X"20",X"83",X"25",X"80",X"DD",X"75",X"DC",X"E0",X"93",X"75",X"10",X"83",X"4B",X"00",X"24",X"03", + X"C3",X"80",X"00",X"D3",X"75",X"ED",X"0A",X"96",X"DF",X"44",X"8B",X"2A",X"A7",X"0C",X"4F",X"5F", + X"ED",X"88",X"10",X"ED",X"0E",X"B6",X"A1",X"0B",X"BD",X"DD",X"9E",X"A7",X"47",X"BD",X"FC",X"60", + X"EF",X"06",X"AF",X"47",X"7C",X"A1",X"15",X"0A",X"73",X"26",X"AE",X"35",X"82",X"7A",X"A1",X"15", + X"BD",X"F4",X"16",X"01",X"15",X"D4",X"F8",X"39",X"34",X"10",X"96",X"FA",X"27",X"1C",X"9E",X"9B", + X"30",X"02",X"8C",X"A1",X"5A",X"25",X"03",X"8E",X"A1",X"1A",X"EC",X"84",X"26",X"06",X"9C",X"9B", + X"26",X"EE",X"35",X"90",X"9F",X"9B",X"ED",X"49",X"AF",X"4B",X"35",X"90",X"34",X"02",X"97",X"73", + X"0D",X"FA",X"26",X"03",X"7E",X"EF",X"19",X"8E",X"EF",X"F6",X"86",X"00",X"BD",X"D0",X"55",X"33", + X"84",X"BD",X"D0",X"95",X"F9",X"85",X"F2",X"0B",X"44",X"33",X"BD",X"D7",X"11",X"DC",X"E0",X"ED", + X"0A",X"86",X"2C",X"A7",X"0C",X"FC",X"A1",X"03",X"ED",X"88",X"10",X"B6",X"A1",X"05",X"BD",X"DD", + X"9E",X"A7",X"4D",X"B6",X"A1",X"02",X"BD",X"DD",X"9E",X"1F",X"89",X"4F",X"C5",X"01",X"27",X"02", + X"53",X"43",X"ED",X"0E",X"EF",X"06",X"BD",X"FC",X"60",X"AF",X"47",X"8D",X"8B",X"7C",X"A1",X"12", + X"0A",X"73",X"26",X"AC",X"35",X"82",X"AE",X"47",X"10",X"AE",X"49",X"EC",X"D8",X"0B",X"27",X"16", + X"A6",X"29",X"81",X"70",X"26",X"10",X"A6",X"0A",X"84",X"FC",X"97",X"73",X"A6",X"2A",X"84",X"FC", + X"91",X"73",X"27",X"51",X"20",X"0F",X"A6",X"88",X"14",X"84",X"FE",X"A7",X"88",X"14",X"BD",X"EF", + X"78",X"10",X"27",X"01",X"19",X"BD",X"ED",X"59",X"80",X"32",X"A0",X"0C",X"22",X"0F",X"81",X"EC", + X"2D",X"04",X"4F",X"5F",X"20",X"0A",X"FC",X"A1",X"03",X"43",X"53",X"20",X"03",X"FC",X"A1",X"03", + X"ED",X"88",X"10",X"EC",X"02",X"10",X"83",X"F8",X"EC",X"27",X"12",X"BD",X"EE",X"FE",X"EE",X"02", + X"33",X"4A",X"11",X"83",X"F9",X"99",X"23",X"03",X"CE",X"F9",X"85",X"EF",X"02",X"86",X"06",X"8E", + X"EF",X"F6",X"7E",X"D0",X"01",X"4F",X"5F",X"6C",X"88",X"14",X"ED",X"0E",X"ED",X"88",X"10",X"CC", + X"F9",X"85",X"ED",X"02",X"AE",X"47",X"10",X"AE",X"49",X"EC",X"D8",X"0B",X"27",X"98",X"A6",X"29", + X"81",X"70",X"26",X"92",X"EC",X"2A",X"C4",X"E0",X"DD",X"75",X"EC",X"0A",X"C4",X"E0",X"10",X"93", + X"75",X"27",X"0D",X"2D",X"04",X"C6",X"E0",X"20",X"02",X"C6",X"20",X"1D",X"E3",X"0A",X"ED",X"0A", + X"A6",X"2C",X"80",X"0C",X"A1",X"0C",X"27",X"16",X"FC",X"A1",X"03",X"24",X"02",X"43",X"53",X"E3", + X"0C",X"ED",X"0C",X"BD",X"EE",X"FE",X"86",X"01",X"8E",X"F0",X"74",X"7E",X"D0",X"01",X"EC",X"0A", + X"C3",X"00",X"40",X"A3",X"2A",X"10",X"83",X"00",X"80",X"22",X"E8",X"CC",X"F1",X"E0",X"ED",X"08", + X"FC",X"A1",X"03",X"53",X"43",X"ED",X"88",X"10",X"ED",X"A8",X"10",X"CC",X"D5",X"0C",X"BD",X"D5", + X"4D",X"CC",X"ED",X"91",X"ED",X"28",X"DE",X"63",X"AE",X"47",X"A6",X"0C",X"81",X"32",X"23",X"0B", + X"BD",X"EE",X"FE",X"86",X"04",X"8E",X"F0",X"E6",X"7E",X"D0",X"01",X"CC",X"D5",X"11",X"BD",X"D5", + X"4D",X"AE",X"47",X"10",X"AE",X"49",X"EC",X"D8",X"0B",X"26",X"0B",X"BD",X"F3",X"FB",X"7A",X"A1", + X"12",X"0C",X"FB",X"7E",X"D0",X"0A",X"4F",X"5F",X"ED",X"88",X"10",X"ED",X"A8",X"10",X"A6",X"2C", + X"A1",X"0C",X"23",X"0F",X"6A",X"2C",X"86",X"12",X"BD",X"D5",X"39",X"86",X"01",X"8E",X"F1",X"01", + X"7E",X"D0",X"01",X"30",X"A4",X"EC",X"24",X"8B",X"01",X"DD",X"F8",X"BD",X"ED",X"77",X"7A",X"A1", + X"12",X"7C",X"A1",X"15",X"AE",X"47",X"6F",X"88",X"14",X"CC",X"F8",X"CE",X"ED",X"02",X"CC",X"CC", + X"33",X"ED",X"88",X"12",X"CC",X"EF",X"6D",X"ED",X"08",X"B6",X"A1",X"0B",X"A7",X"49",X"AE",X"47", + X"F6",X"A1",X"0A",X"10",X"9E",X"CC",X"10",X"AC",X"0A",X"2C",X"01",X"50",X"1D",X"ED",X"0E",X"DC", + X"CC",X"A3",X"0A",X"C3",X"01",X"7C",X"10",X"83",X"07",X"00",X"23",X"21",X"96",X"C0",X"A0",X"0C", + X"23",X"0B",X"81",X"08",X"22",X"0B",X"FC",X"A1",X"08",X"43",X"53",X"20",X"0B",X"81",X"F8",X"2E", + X"04",X"4F",X"5F",X"20",X"03",X"FC",X"A1",X"08",X"ED",X"88",X"10",X"20",X"12",X"96",X"C0",X"A1", + X"0C",X"FC",X"A1",X"08",X"24",X"02",X"43",X"53",X"ED",X"88",X"10",X"EC",X"04",X"27",X"29",X"F6", + X"A1",X"07",X"96",X"DF",X"2B",X"01",X"50",X"EB",X"0C",X"C1",X"2A",X"24",X"02",X"C6",X"F0",X"E7", + X"0C",X"6A",X"49",X"26",X"13",X"B6",X"A1",X"0B",X"BD",X"DD",X"9E",X"A7",X"49",X"BD",X"EE",X"BA", + X"27",X"06",X"CC",X"D5",X"2A",X"BD",X"D5",X"4D",X"86",X"03",X"8E",X"F1",X"5E",X"7E",X"D0",X"01", + X"EE",X"06",X"EC",X"D8",X"0B",X"27",X"24",X"CC",X"00",X"00",X"CC",X"00",X"00",X"34",X"10",X"8E", + X"F2",X"16",X"86",X"00",X"BD",X"D0",X"55",X"EE",X"49",X"EF",X"07",X"CC",X"D4",X"E9",X"BD",X"D5", + X"4D",X"CC",X"00",X"00",X"ED",X"C8",X"10",X"AF",X"46",X"35",X"10",X"7A",X"A1",X"12",X"BD",X"F4", + X"16",X"01",X"15",X"D5",X"07",X"39",X"AE",X"47",X"CC",X"00",X"08",X"E3",X"88",X"10",X"10",X"83", + X"03",X"00",X"24",X"03",X"ED",X"88",X"10",X"BD",X"ED",X"59",X"A1",X"0C",X"22",X"16",X"EC",X"88", + X"10",X"10",X"83",X"00",X"E0",X"23",X"39",X"EC",X"04",X"C3",X"01",X"07",X"DD",X"F8",X"BD",X"ED", + X"77",X"7E",X"D0",X"0A",X"86",X"04",X"8E",X"F2",X"16",X"7E",X"D0",X"01",X"AE",X"47",X"CC",X"00", + X"00",X"ED",X"88",X"10",X"96",X"C5",X"8B",X"0A",X"A7",X"0C",X"DC",X"CC",X"C3",X"00",X"80",X"ED", + X"0A",X"BD",X"ED",X"59",X"A1",X"0C",X"25",X"0F",X"86",X"01",X"8E",X"F2",X"4C",X"7E",X"D0",X"01", + X"34",X"10",X"8E",X"EE",X"65",X"20",X"05",X"34",X"10",X"8E",X"EE",X"73",X"86",X"00",X"BD",X"D0", + X"55",X"31",X"84",X"35",X"10",X"AF",X"27",X"CC",X"00",X"00",X"ED",X"06",X"ED",X"88",X"10",X"CC", + X"ED",X"70",X"ED",X"08",X"CC",X"D4",X"DF",X"BD",X"D5",X"4D",X"7E",X"D0",X"0A",X"97",X"73",X"F6", + X"A1",X"06",X"03",X"AA",X"2B",X"01",X"50",X"D7",X"74",X"8E",X"F2",X"F7",X"86",X"00",X"BD",X"D0", + X"3E",X"33",X"84",X"96",X"73",X"A7",X"4F",X"4F",X"5F",X"ED",X"47",X"ED",X"49",X"ED",X"4B",X"ED", + X"4D",X"BD",X"D0",X"95",X"F9",X"29",X"F3",X"BC",X"88",X"88",X"D6",X"74",X"1D",X"ED",X"0E",X"4F", + X"5F",X"ED",X"88",X"10",X"96",X"73",X"44",X"56",X"9B",X"73",X"D3",X"CC",X"8B",X"80",X"ED",X"0A", + X"86",X"50",X"A7",X"0C",X"A7",X"C8",X"10",X"EF",X"06",X"9F",X"65",X"96",X"73",X"48",X"8B",X"05", + X"AF",X"C6",X"0A",X"73",X"26",X"CB",X"39",X"96",X"DF",X"84",X"06",X"8B",X"07",X"AE",X"C6",X"10", + X"27",X"00",X"B1",X"D6",X"DF",X"86",X"0A",X"C4",X"3F",X"CB",X"E0",X"2B",X"01",X"40",X"10",X"AE", + X"02",X"31",X"A6",X"10",X"8C",X"F9",X"29",X"24",X"04",X"10",X"8E",X"F9",X"29",X"10",X"8C",X"F9", + X"47",X"23",X"04",X"10",X"8E",X"F9",X"47",X"10",X"AF",X"02",X"1D",X"E3",X"88",X"10",X"ED",X"88", + X"10",X"58",X"49",X"58",X"49",X"58",X"49",X"1F",X"89",X"50",X"1D",X"E3",X"88",X"10",X"ED",X"88", + X"10",X"A6",X"05",X"26",X"3B",X"96",X"DF",X"81",X"40",X"22",X"16",X"84",X"03",X"8B",X"FE",X"AB", + X"C8",X"10",X"81",X"40",X"24",X"02",X"86",X"40",X"81",X"68",X"25",X"02",X"86",X"68",X"A7",X"C8", + X"10",X"A6",X"C8",X"10",X"A0",X"0C",X"8B",X"10",X"81",X"20",X"23",X"48",X"80",X"10",X"2B",X"05", + X"CC",X"FF",X"F0",X"20",X"03",X"CC",X"00",X"10",X"E3",X"88",X"10",X"ED",X"88",X"10",X"20",X"34", + X"90",X"C0",X"2B",X"12",X"81",X"20",X"25",X"05",X"CC",X"FF",X"F0",X"20",X"19",X"81",X"10",X"22", + X"1B",X"CC",X"00",X"10",X"20",X"10",X"81",X"E0",X"2E",X"05",X"CC",X"00",X"10",X"20",X"07",X"81", + X"F0",X"2D",X"09",X"CC",X"FF",X"F0",X"E3",X"88",X"10",X"ED",X"88",X"10",X"96",X"E1",X"84",X"07", + X"26",X"02",X"8D",X"28",X"86",X"01",X"8E",X"F2",X"F7",X"7E",X"D0",X"01",X"BD",X"F4",X"1D",X"01", + X"25",X"D5",X"02",X"7A",X"A1",X"13",X"EE",X"06",X"31",X"47",X"AC",X"A1",X"26",X"FC",X"4F",X"5F", + X"ED",X"3E",X"6A",X"4F",X"26",X"05",X"30",X"C4",X"BD",X"D0",X"15",X"39",X"96",X"99",X"81",X"0A", + X"24",X"18",X"BD",X"E3",X"F3",X"E4",X"98",X"F9",X"5B",X"E5",X"1E",X"27",X"0D",X"D6",X"E0",X"1D", + X"58",X"49",X"96",X"DF",X"84",X"1F",X"4C",X"A7",X"88",X"15",X"39",X"BD",X"D0",X"C7",X"34",X"76", + X"BD",X"F5",X"03",X"EC",X"04",X"10",X"AE",X"02",X"AD",X"B8",X"08",X"35",X"F6",X"34",X"10",X"BD", + X"D0",X"13",X"35",X"10",X"20",X"0A",X"34",X"10",X"BD",X"D0",X"13",X"35",X"10",X"BD",X"D0",X"C7", + X"34",X"46",X"EE",X"64",X"37",X"06",X"BD",X"D3",X"60",X"8D",X"09",X"37",X"06",X"EF",X"64",X"BD", + X"D5",X"4D",X"35",X"C6",X"34",X"76",X"8D",X"C6",X"BD",X"FC",X"63",X"35",X"F6",X"8E",X"F4",X"5B", + X"AF",X"47",X"86",X"06",X"8E",X"F4",X"4A",X"7E",X"D0",X"01",X"AE",X"47",X"EC",X"81",X"DD",X"33", + X"A6",X"80",X"97",X"35",X"8C",X"F4",X"64",X"25",X"E7",X"20",X"E2",X"81",X"81",X"2F",X"81",X"2F", + X"07",X"2F",X"81",X"07",X"86",X"FF",X"97",X"30",X"0F",X"32",X"86",X"03",X"8E",X"F4",X"72",X"7E", + X"D0",X"01",X"96",X"DF",X"84",X"1F",X"8E",X"E7",X"99",X"A6",X"86",X"97",X"30",X"97",X"32",X"8E", + X"CC",X"B0",X"9C",X"A6",X"26",X"03",X"8E",X"CC",X"BC",X"9F",X"A6",X"86",X"06",X"8E",X"F4",X"64", + X"7E",X"D0",X"01",X"96",X"8A",X"26",X"24",X"8E",X"0F",X"1C",X"96",X"8B",X"4A",X"27",X"03",X"8E", + X"71",X"1C",X"CC",X"18",X"08",X"BD",X"F5",X"C7",X"86",X"08",X"8E",X"F4",X"B0",X"7E",X"D0",X"01", + X"BD",X"D3",X"D9",X"86",X"0C",X"8E",X"F4",X"93",X"7E",X"D0",X"01",X"7E",X"D0",X"0A",X"DE",X"63", + X"AF",X"4D",X"D6",X"36",X"E7",X"4C",X"8E",X"F4",X"CC",X"7E",X"D0",X"01",X"A6",X"4C",X"8D",X"3D", + X"6E",X"D8",X"0D",X"32",X"7D",X"34",X"42",X"96",X"36",X"A7",X"65",X"EE",X"66",X"A6",X"42",X"EE", + X"C4",X"EF",X"63",X"8D",X"28",X"35",X"42",X"AD",X"F4",X"34",X"42",X"A6",X"65",X"8D",X"1E",X"EE", + X"66",X"33",X"43",X"EF",X"66",X"35",X"42",X"32",X"63",X"39",X"8D",X"03",X"7E",X"C0",X"00",X"86", + X"07",X"20",X"0A",X"86",X"02",X"20",X"06",X"86",X"03",X"20",X"02",X"86",X"01",X"97",X"36",X"B7", + X"D0",X"00",X"39",X"34",X"7F",X"8D",X"EC",X"BD",X"C0",X"02",X"35",X"FF",X"8D",X"E9",X"7E",X"C0", + X"0F",X"39",X"34",X"76",X"1F",X"01",X"96",X"36",X"34",X"02",X"86",X"02",X"97",X"36",X"B7",X"D0", + X"00",X"EC",X"A4",X"10",X"AE",X"22",X"34",X"06",X"C5",X"01",X"26",X"17",X"C0",X"02",X"EE",X"A5", + X"EF",X"85",X"C0",X"02",X"2A",X"F8",X"E6",X"61",X"30",X"89",X"01",X"00",X"31",X"A5",X"4A",X"26", + X"EB",X"20",X"1D",X"5A",X"A6",X"A5",X"A7",X"85",X"C0",X"02",X"2B",X"08",X"EE",X"A5",X"EF",X"85", + X"C0",X"02",X"2A",X"F8",X"E6",X"61",X"30",X"89",X"01",X"00",X"31",X"A5",X"6A",X"E4",X"26",X"E3", + X"32",X"62",X"35",X"02",X"97",X"36",X"B7",X"D0",X"00",X"35",X"F6",X"34",X"56",X"1F",X"01",X"96", + X"36",X"34",X"02",X"86",X"02",X"97",X"36",X"B7",X"D0",X"00",X"EC",X"A4",X"CE",X"00",X"00",X"34", + X"04",X"C5",X"01",X"26",X"13",X"C0",X"02",X"EF",X"85",X"C0",X"02",X"2A",X"FA",X"E6",X"E4",X"30", + X"89",X"01",X"00",X"4A",X"26",X"EF",X"20",X"16",X"5A",X"6F",X"85",X"C0",X"02",X"2B",X"06",X"EF", + X"85",X"C0",X"02",X"2A",X"FA",X"E6",X"E4",X"30",X"89",X"01",X"00",X"4A",X"26",X"EA",X"35",X"06", + X"D7",X"36",X"F7",X"D0",X"00",X"35",X"D6",X"34",X"56",X"96",X"36",X"34",X"02",X"A6",X"61",X"20", + X"BB",X"34",X"76",X"CE",X"9C",X"00",X"8E",X"00",X"00",X"1F",X"12",X"1F",X"10",X"36",X"36",X"36", + X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"10",X"11",X"83",X"00",X"00",X"26",X"EE",X"35", + X"F6",X"34",X"7E",X"CE",X"9C",X"00",X"8E",X"00",X"00",X"1F",X"12",X"1F",X"10",X"1F",X"8B",X"C6", + X"08",X"36",X"3A",X"36",X"3A",X"36",X"3A",X"36",X"3A",X"5A",X"26",X"F5",X"36",X"3A",X"36",X"3A", + X"36",X"3A",X"36",X"30",X"33",X"C8",X"D6",X"11",X"83",X"00",X"00",X"26",X"E2",X"35",X"FE",X"7F", + X"D0",X"00",X"8E",X"CC",X"00",X"6F",X"01",X"6F",X"03",X"6F",X"05",X"6F",X"07",X"86",X"C0",X"A7", + X"84",X"86",X"FF",X"A7",X"02",X"6F",X"04",X"6F",X"06",X"86",X"04",X"A7",X"03",X"A7",X"05",X"A7", + X"07",X"8A",X"10",X"A7",X"01",X"8E",X"C0",X"00",X"86",X"C0",X"A7",X"80",X"C6",X"B5",X"3D",X"8C", + X"C0",X"10",X"26",X"F6",X"1A",X"80",X"1C",X"EF",X"10",X"8E",X"00",X"02",X"4F",X"1F",X"8B",X"1C", + X"BF",X"5F",X"1F",X"03",X"8E",X"00",X"00",X"53",X"C5",X"09",X"26",X"05",X"53",X"46",X"56",X"20", + X"0B",X"53",X"C5",X"09",X"26",X"04",X"46",X"56",X"20",X"02",X"44",X"56",X"ED",X"81",X"1E",X"10", + X"5D",X"26",X"17",X"C6",X"38",X"F7",X"C3",X"FC",X"1F",X"A9",X"C5",X"10",X"27",X"0B",X"7F",X"D0", + X"00",X"F6",X"CC",X"00",X"53",X"C5",X"03",X"27",X"51",X"5F",X"1E",X"10",X"8C",X"C0",X"00",X"26", + X"C6",X"1F",X"30",X"8E",X"00",X"00",X"53",X"C5",X"09",X"26",X"05",X"53",X"46",X"56",X"20",X"0B", + X"53",X"C5",X"09",X"26",X"04",X"46",X"56",X"20",X"02",X"44",X"56",X"10",X"A3",X"81",X"27",X"17", + X"1E",X"02",X"1F",X"A8",X"85",X"10",X"27",X"0A",X"86",X"03",X"97",X"36",X"B7",X"D0",X"00",X"7E", + X"C0",X"2A",X"4F",X"1E",X"20",X"1A",X"40",X"1E",X"10",X"5D",X"26",X"42",X"1F",X"A9",X"C5",X"10", + X"27",X"12",X"F6",X"CC",X"00",X"53",X"C5",X"03",X"26",X"2E",X"86",X"03",X"97",X"36",X"B7",X"D0", + X"00",X"7E",X"C0",X"2D",X"1F",X"A9",X"C5",X"40",X"27",X"1E",X"1C",X"BF",X"1F",X"B9",X"1F",X"8B", + X"80",X"03",X"24",X"FC",X"4C",X"26",X"04",X"CA",X"02",X"20",X"09",X"4C",X"26",X"04",X"CA",X"01", + X"20",X"02",X"CA",X"04",X"1F",X"B8",X"1F",X"9B",X"C6",X"38",X"F7",X"C3",X"FC",X"5F",X"1E",X"10", + X"8C",X"C0",X"00",X"10",X"26",X"FF",X"7F",X"31",X"3F",X"10",X"26",X"FF",X"35",X"1F",X"A9",X"5D", + X"2B",X"0B",X"C6",X"03",X"F7",X"D0",X"00",X"BD",X"F8",X"00",X"7E",X"C0",X"30",X"C5",X"10",X"10", + X"26",X"FF",X"1F",X"86",X"9E",X"1F",X"B9",X"5D",X"27",X"04",X"4C",X"54",X"25",X"FC",X"1F",X"8B", + X"8B",X"01",X"5F",X"1F",X"04",X"BD",X"F8",X"00",X"CE",X"F8",X"6E",X"7F",X"D0",X"00",X"86",X"38", + X"B7",X"C3",X"FC",X"A6",X"C4",X"E6",X"C4",X"27",X"2A",X"C4",X"0F",X"F7",X"D0",X"00",X"84",X"70", + X"44",X"8B",X"C0",X"5F",X"1F",X"01",X"10",X"8E",X"08",X"00",X"1F",X"30",X"C0",X"6C",X"54",X"4F", + X"E9",X"80",X"31",X"3F",X"26",X"FA",X"C1",X"80",X"27",X"09",X"1F",X"A8",X"85",X"10",X"27",X"3E", + X"7E",X"F5",X"07",X"33",X"41",X"11",X"83",X"F8",X"86",X"26",X"C0",X"1F",X"A8",X"85",X"10",X"26", + X"EF",X"1F",X"B8",X"81",X"9E",X"26",X"08",X"BD",X"F5",X"07",X"BD",X"C0",X"00",X"20",X"26",X"C6", + X"40",X"8D",X"05",X"BD",X"C0",X"03",X"20",X"1D",X"8E",X"CC",X"00",X"E7",X"84",X"E7",X"02",X"7F", + X"D0",X"00",X"86",X"38",X"B7",X"C3",X"FC",X"30",X"1F",X"26",X"F7",X"7E",X"F5",X"07",X"C6",X"80", + X"8D",X"E6",X"BD",X"C0",X"06",X"BD",X"C0",X"09",X"7E",X"D7",X"38",X"34",X"03",X"96",X"36",X"34", + X"02",X"0F",X"36",X"7F",X"D0",X"00",X"E7",X"84",X"35",X"02",X"97",X"36",X"B7",X"D0",X"00",X"35", + X"83",X"34",X"03",X"96",X"36",X"34",X"02",X"0F",X"36",X"7F",X"D0",X"00",X"E6",X"84",X"20",X"E8", + X"34",X"06",X"0F",X"52",X"0F",X"49",X"86",X"03",X"97",X"36",X"97",X"48",X"CC",X"FF",X"FF",X"DD", + X"59",X"35",X"86",X"A6",X"01",X"84",X"0F",X"34",X"02",X"A6",X"81",X"48",X"48",X"48",X"48",X"AB", + X"E0",X"39",X"34",X"04",X"D6",X"36",X"34",X"04",X"0F",X"36",X"7F",X"D0",X"00",X"8D",X"E4",X"35", + X"04",X"D7",X"36",X"F7",X"D0",X"00",X"35",X"84",X"8D",X"E8",X"34",X"02",X"8D",X"E4",X"1F",X"89", + X"35",X"82",X"34",X"02",X"A7",X"01",X"44",X"44",X"44",X"44",X"A7",X"81",X"35",X"82",X"34",X"04", + X"D6",X"36",X"34",X"04",X"0F",X"36",X"7F",X"D0",X"00",X"8D",X"E7",X"35",X"04",X"D7",X"36",X"F7", + X"D0",X"00",X"35",X"84",X"8D",X"E8",X"34",X"02",X"1F",X"98",X"8D",X"E2",X"35",X"82",X"20",X"00", + X"40",X"50",X"60",X"70",X"30",X"00",X"00",X"00",X"07",X"00",X"03",X"00",X"02",X"00",X"01",X"00", + X"13",X"00",X"12",X"00",X"11",X"00",X"E5",X"91",X"00",X"E8",X"00",X"00",X"00",X"00",X"E8",X"C1", + X"00",X"F8",X"E9",X"1F",X"00",X"F8",X"D8",X"4E",X"00",X"00",X"D8",X"39",X"00",X"00",X"E8",X"97", + X"00",X"E8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"D4",X"4C",X"00",X"00",X"D4",X"75", + X"02",X"00",X"D4",X"3D",X"00",X"00",X"D4",X"6E",X"02",X"00",X"D4",X"7C",X"02",X"00",X"00",X"00", + X"07",X"28",X"2F",X"81",X"A4",X"15",X"C7",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"05",X"08", + X"F9",X"FB",X"FA",X"23",X"D1",X"93",X"D1",X"1F",X"04",X"08",X"FA",X"4B",X"FA",X"4B",X"D1",X"39", + X"D1",X"6B",X"04",X"08",X"FA",X"6B",X"FA",X"6B",X"D1",X"39",X"D1",X"6B",X"01",X"01",X"F8",X"F6", + X"F8",X"F6",X"D8",X"DB",X"D8",X"DB",X"00",X"04",X"08",X"FA",X"8B",X"FA",X"AB",X"D1",X"39",X"D1", + X"6B",X"02",X"08",X"FA",X"CB",X"FA",X"DB",X"D0",X"F9",X"D1",X"0B",X"02",X"08",X"FA",X"EB",X"FA", + X"FB",X"D0",X"F9",X"D1",X"0B",X"02",X"08",X"FB",X"0B",X"FB",X"1B",X"D0",X"F9",X"D1",X"0B",X"02", + X"08",X"FB",X"2B",X"FB",X"3B",X"D0",X"F9",X"D1",X"0B",X"04",X"08",X"FB",X"4B",X"FB",X"6B",X"D1", + X"39",X"D1",X"6B",X"04",X"08",X"FB",X"8B",X"FB",X"AB",X"D1",X"39",X"D1",X"6B",X"04",X"08",X"FB", + X"CB",X"FB",X"EB",X"D1",X"39",X"D1",X"6B",X"04",X"08",X"FC",X"0B",X"FC",X"2B",X"D1",X"39",X"D1", + X"6B",X"04",X"08",X"CC",X"90",X"CC",X"90",X"D1",X"39",X"D1",X"6B",X"02",X"03",X"CC",X"B0",X"CC", + X"B6",X"D1",X"F1",X"D2",X"0D",X"02",X"03",X"CC",X"BC",X"CC",X"C2",X"D1",X"F1",X"D2",X"0D",X"08", + X"01",X"F9",X"73",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"03",X"04",X"CC",X"C8",X"CC", + X"D4",X"D1",X"AD",X"D1",X"D7",X"05",X"08",X"CC",X"E0",X"CD",X"08",X"D1",X"93",X"D1",X"1F",X"05", + X"08",X"CD",X"30",X"CD",X"58",X"D1",X"93",X"D1",X"1F",X"05",X"08",X"CD",X"80",X"CD",X"A8",X"D1", + X"93",X"D1",X"1F",X"06",X"04",X"CD",X"D0",X"CD",X"E8",X"D2",X"1F",X"D2",X"60",X"06",X"04",X"CE", + X"00",X"CE",X"18",X"D2",X"1F",X"D2",X"60",X"06",X"04",X"CE",X"30",X"CE",X"48",X"D2",X"1F",X"D2", + X"60",X"08",X"06",X"CE",X"60",X"CE",X"90",X"D2",X"8E",X"D2",X"DF",X"08",X"06",X"CE",X"C0",X"CE", + X"F0",X"D2",X"8E",X"D2",X"DF",X"05",X"04",X"CF",X"20",X"03",X"03",X"CF",X"34",X"06",X"06",X"CF", + X"3D",X"CF",X"61",X"D3",X"3D",X"D3",X"50",X"06",X"06",X"CF",X"85",X"CF",X"A9",X"D3",X"3D",X"D3", + X"50",X"08",X"06",X"CF",X"CD",X"CF",X"CD",X"F5",X"22",X"F5",X"7B",X"00",X"00",X"03",X"03",X"00", + X"00",X"03",X"30",X"0C",X"3C",X"0C",X"08",X"38",X"30",X"00",X"00",X"C0",X"C0",X"C8",X"78",X"78", + X"70",X"70",X"70",X"00",X"30",X"03",X"03",X"30",X"30",X"03",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"30",X"00",X"03",X"30",X"30",X"03", + X"03",X"30",X"00",X"CC",X"CC",X"CC",X"87",X"87",X"07",X"07",X"07",X"00",X"03",X"80",X"80",X"83", + X"03",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00",X"30",X"03",X"00",X"00",X"0D",X"6C",X"6C", + X"0D",X"00",X"00",X"06",X"E6",X"C8",X"83",X"82",X"C8",X"EC",X"06",X"60",X"6D",X"8C",X"28",X"28", + X"8C",X"6D",X"60",X"00",X"00",X"E0",X"C6",X"C6",X"E0",X"00",X"00",X"00",X"00",X"02",X"22",X"24", + X"02",X"00",X"00",X"02",X"22",X"44",X"44",X"24",X"42",X"22",X"00",X"20",X"22",X"44",X"44",X"24", + X"42",X"22",X"00",X"00",X"00",X"20",X"22",X"22",X"20",X"00",X"00",X"00",X"0E",X"00",X"D8",X"00", + X"0E",X"00",X"00",X"0F",X"08",X"8C",X"C8",X"8C",X"08",X"0F",X"00",X"00",X"0E",X"80",X"C8",X"80", + X"0E",X"00",X"00",X"00",X"00",X"00",X"D0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0D",X"00", + X"00",X"00",X"00",X"00",X"E0",X"08",X"8C",X"08",X"E0",X"00",X"00",X"F0",X"80",X"C8",X"8C",X"C8", + X"80",X"F0",X"00",X"00",X"E0",X"00",X"8D",X"00",X"E0",X"00",X"00",X"33",X"43",X"43",X"87",X"87", + X"07",X"07",X"07",X"00",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"03",X"04",X"04",X"08",X"08", + X"00",X"00",X"00",X"30",X"30",X"38",X"78",X"78",X"70",X"70",X"70",X"33",X"43",X"43",X"87",X"87", + X"77",X"77",X"77",X"00",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"03",X"04",X"04",X"08",X"08", + X"07",X"07",X"07",X"30",X"30",X"38",X"78",X"78",X"70",X"70",X"70",X"03",X"03",X"83",X"87",X"87", + X"07",X"07",X"07",X"30",X"40",X"40",X"80",X"80",X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"08", + X"00",X"00",X"00",X"33",X"34",X"34",X"78",X"78",X"70",X"70",X"70",X"03",X"03",X"83",X"87",X"87", + X"07",X"07",X"07",X"30",X"40",X"40",X"80",X"80",X"70",X"70",X"70",X"00",X"00",X"08",X"08",X"08", + X"00",X"00",X"00",X"33",X"34",X"34",X"78",X"78",X"77",X"77",X"77",X"08",X"08",X"DD",X"DE",X"DE", + X"DE",X"DD",X"00",X"88",X"88",X"DD",X"EE",X"FE",X"EE",X"DD",X"00",X"88",X"88",X"D8",X"D8",X"D8", + X"D0",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"0D",X"0D",X"0D", + X"0D",X"0D",X"00",X"88",X"88",X"DD",X"EE",X"EF",X"EE",X"DD",X"00",X"88",X"88",X"DD",X"ED",X"ED", + X"ED",X"DD",X"00",X"80",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"08",X"DD",X"DE",X"DE", + X"DE",X"DD",X"00",X"00",X"88",X"DD",X"EE",X"FE",X"EE",X"DD",X"00",X"00",X"88",X"D8",X"D8",X"D8", + X"D8",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"0D",X"0D",X"0D", + X"0D",X"0D",X"00",X"00",X"88",X"DD",X"EE",X"EF",X"EE",X"DD",X"00",X"00",X"88",X"DD",X"ED",X"ED", + X"ED",X"DD",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"DD",X"DE",X"DE", + X"DE",X"DD",X"00",X"00",X"00",X"DD",X"EE",X"FE",X"EE",X"DD",X"00",X"00",X"00",X"D8",X"D8",X"D8", + X"D8",X"D8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0D",X"0D",X"0D", + X"0D",X"0D",X"00",X"00",X"00",X"DD",X"EE",X"EF",X"EE",X"DD",X"00",X"00",X"00",X"DD",X"ED",X"ED", + X"ED",X"DD",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"DD",X"DE",X"DE", + X"DE",X"DD",X"00",X"00",X"00",X"DD",X"EE",X"FE",X"EE",X"DD",X"88",X"00",X"00",X"D0",X"D8",X"D8", + X"D8",X"D8",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0D",X"0D",X"0D", + X"0D",X"0D",X"00",X"00",X"00",X"DD",X"EE",X"EF",X"EE",X"DD",X"88",X"00",X"00",X"DD",X"ED",X"ED", + X"ED",X"DD",X"88",X"00",X"00",X"00",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"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"7E",X"FC",X"69",X"7E",X"FC",X"CC",X"7E",X"FD",X"2D",X"34",X"66",X"EC",X"02",X"34",X"06",X"FC", + X"FF",X"9D",X"ED",X"02",X"9F",X"65",X"EC",X"0A",X"93",X"20",X"10",X"83",X"26",X"00",X"22",X"17", + X"10",X"9E",X"E2",X"27",X"09",X"31",X"A8",X"40",X"10",X"8C",X"A0",X"00",X"26",X"04",X"10",X"8E", + X"9C",X"00",X"10",X"9C",X"E2",X"26",X"06",X"35",X"06",X"ED",X"02",X"20",X"2D",X"A6",X"A4",X"2B", + X"E4",X"27",X"03",X"BD",X"FD",X"D5",X"96",X"BA",X"85",X"80",X"26",X"06",X"FC",X"FF",X"DD",X"BD", + X"FF",X"DA",X"A6",X"88",X"14",X"8A",X"02",X"A7",X"88",X"14",X"CC",X"AF",X"00",X"ED",X"A4",X"35", + X"06",X"ED",X"22",X"33",X"A8",X"40",X"EF",X"24",X"AF",X"2A",X"35",X"E6",X"34",X"66",X"EC",X"0A", + X"93",X"20",X"81",X"26",X"22",X"55",X"DD",X"E9",X"10",X"9E",X"E2",X"27",X"09",X"31",X"A8",X"40", + X"10",X"8C",X"A0",X"00",X"26",X"04",X"10",X"8E",X"9C",X"00",X"10",X"9C",X"E2",X"27",X"3C",X"A6", + X"A4",X"2B",X"EA",X"27",X"03",X"BD",X"FD",X"D5",X"10",X"9F",X"E2",X"CC",X"01",X"00",X"ED",X"A4", + X"EC",X"02",X"ED",X"22",X"33",X"A8",X"40",X"EF",X"24",X"DC",X"E9",X"58",X"49",X"58",X"49",X"E6", + X"0C",X"ED",X"28",X"93",X"F8",X"EE",X"22",X"AB",X"C4",X"24",X"08",X"EB",X"41",X"24",X"04",X"DC", + X"F8",X"20",X"06",X"EC",X"C4",X"44",X"54",X"E3",X"28",X"ED",X"26",X"35",X"E6",X"10",X"8E",X"9C", + X"00",X"96",X"BA",X"85",X"04",X"27",X"0C",X"A6",X"A4",X"2B",X"56",X"CC",X"00",X"00",X"ED",X"A4", + X"7E",X"FD",X"C9",X"EC",X"A4",X"10",X"27",X"00",X"80",X"2B",X"33",X"C3",X"00",X"AA",X"ED",X"A4", + X"81",X"30",X"23",X"0A",X"BD",X"FD",X"D5",X"CC",X"00",X"00",X"ED",X"A4",X"20",X"6B",X"DC",X"20", + X"C4",X"C0",X"34",X"06",X"DC",X"22",X"C4",X"C0",X"A3",X"E1",X"58",X"49",X"58",X"49",X"34",X"02", + X"A6",X"26",X"AB",X"E4",X"A7",X"26",X"A6",X"28",X"AB",X"E0",X"A7",X"28",X"20",X"45",X"83",X"01", + X"00",X"ED",X"A4",X"2A",X"0C",X"AE",X"2A",X"EC",X"0A",X"93",X"20",X"8B",X"0C",X"85",X"C0",X"27", + X"18",X"CC",X"00",X"00",X"ED",X"A4",X"EC",X"22",X"AE",X"2A",X"ED",X"02",X"A6",X"88",X"14",X"84", + X"FD",X"A7",X"88",X"14",X"BD",X"FD",X"D5",X"20",X"20",X"80",X"0C",X"58",X"49",X"58",X"49",X"E6", + X"0C",X"ED",X"28",X"C6",X"DA",X"3D",X"48",X"EE",X"22",X"E6",X"C4",X"3D",X"E6",X"41",X"54",X"E3", + X"28",X"ED",X"26",X"BD",X"FD",X"D5",X"BD",X"FD",X"EF",X"31",X"A8",X"40",X"10",X"8C",X"A0",X"00", + X"10",X"26",X"FF",X"5D",X"39",X"34",X"16",X"CC",X"00",X"00",X"30",X"A8",X"40",X"9F",X"F3",X"AE", + X"24",X"9C",X"F3",X"27",X"08",X"ED",X"91",X"9C",X"F3",X"26",X"FA",X"AF",X"24",X"35",X"96",X"34", + X"76",X"10",X"9F",X"F6",X"A6",X"A4",X"84",X"7F",X"97",X"E7",X"33",X"A8",X"40",X"0F",X"E6",X"AE", + X"22",X"EC",X"02",X"DD",X"F3",X"EC",X"84",X"97",X"F1",X"D7",X"F2",X"C5",X"01",X"26",X"05",X"8E", + X"FF",X"27",X"20",X"03",X"8E",X"FE",X"F3",X"9F",X"ED",X"EC",X"26",X"A3",X"28",X"97",X"E4",X"54", + X"D7",X"E5",X"09",X"E6",X"96",X"E7",X"D6",X"E4",X"3D",X"DD",X"E9",X"E6",X"26",X"4F",X"93",X"E9", + X"DD",X"E9",X"4D",X"27",X"18",X"DC",X"F3",X"DB",X"F2",X"89",X"00",X"DD",X"F3",X"0A",X"F1",X"10", + X"27",X"00",X"F2",X"DC",X"E9",X"DB",X"E7",X"89",X"00",X"DD",X"E9",X"20",X"E5",X"C1",X"98",X"10", + X"22",X"00",X"E2",X"96",X"E7",X"48",X"97",X"E8",X"D6",X"E5",X"3D",X"DD",X"EB",X"E6",X"27",X"4F", + X"93",X"EB",X"D0",X"E6",X"89",X"00",X"0F",X"F5",X"4D",X"26",X"04",X"C1",X"2A",X"24",X"10",X"0C", + X"F5",X"0A",X"F2",X"0A",X"F2",X"10",X"2F",X"00",X"BC",X"DB",X"E8",X"89",X"00",X"20",X"E9",X"DD", + X"EB",X"96",X"F2",X"84",X"FE",X"8E",X"FF",X"48",X"AE",X"86",X"9F",X"EF",X"9E",X"F3",X"08",X"F5", + X"96",X"EA",X"D6",X"F5",X"3A",X"D6",X"EC",X"6E",X"9F",X"A0",X"EF",X"ED",X"C3",X"10",X"AE",X"81", + X"10",X"AF",X"D4",X"DB",X"E8",X"25",X"56",X"ED",X"C3",X"10",X"AE",X"81",X"10",X"AF",X"D4",X"DB", + X"E8",X"25",X"50",X"ED",X"C3",X"10",X"AE",X"81",X"10",X"AF",X"D4",X"DB",X"E8",X"25",X"4A",X"ED", + X"C3",X"10",X"AE",X"81",X"10",X"AF",X"D4",X"DB",X"E8",X"25",X"44",X"ED",X"C3",X"10",X"AE",X"81", + X"10",X"AF",X"D4",X"DB",X"E8",X"25",X"3E",X"ED",X"C3",X"10",X"AE",X"81",X"10",X"AF",X"D4",X"DB", + X"E8",X"25",X"38",X"ED",X"C3",X"10",X"AE",X"81",X"10",X"AF",X"D4",X"DB",X"E8",X"25",X"32",X"6E", + X"9F",X"A0",X"ED",X"25",X"30",X"ED",X"C3",X"E6",X"80",X"E7",X"D4",X"20",X"2A",X"30",X"0C",X"6E", + X"9F",X"A0",X"ED",X"30",X"0A",X"6E",X"9F",X"A0",X"ED",X"30",X"08",X"6E",X"9F",X"A0",X"ED",X"30", + X"06",X"6E",X"9F",X"A0",X"ED",X"30",X"04",X"6E",X"9F",X"A0",X"ED",X"30",X"02",X"6E",X"9F",X"A0", + X"ED",X"6E",X"9F",X"A0",X"ED",X"30",X"01",X"0A",X"F1",X"27",X"0A",X"9B",X"E7",X"25",X"06",X"81", + X"98",X"10",X"23",X"FF",X"5D",X"9E",X"F6",X"EF",X"04",X"EC",X"06",X"81",X"98",X"22",X"07",X"D0", + X"E6",X"8E",X"00",X"00",X"AF",X"8B",X"35",X"F6",X"FE",X"EF",X"FE",X"E3",X"FE",X"D7",X"FE",X"CB", + X"FE",X"BF",X"FE",X"B3",X"FE",X"A7",X"FE",X"9B",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"EC",X"F8", + X"6E",X"7E",X"F8",X"22",X"7E",X"F8",X"3A",X"7E",X"F8",X"38",X"7E",X"F8",X"4E",X"7E",X"F8",X"66", + X"7E",X"F8",X"64",X"7E",X"F5",X"22",X"7E",X"F5",X"7B",X"7E",X"F5",X"C7",X"7E",X"F5",X"D1",X"7E", + X"F7",X"58",X"7E",X"F7",X"93",X"7E",X"F6",X"62",X"7E",X"F7",X"D5",X"7E",X"F4",X"FA",X"7E",X"F4", + X"D3",X"7E",X"F4",X"BE",X"7E",X"F7",X"DB",X"7E",X"F7",X"F1",X"7E",X"D5",X"4D",X"D4",X"EE",X"2A", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"F6",X"1F",X"F6",X"1F",X"F6",X"1F",X"F6",X"1F",X"A0",X"8F",X"F6",X"1F",X"F6",X"1F",X"F6",X"1F", + X"7E",X"C0",X"06",X"7E",X"CC",X"AD",X"BD",X"D0",X"7C",X"86",X"FF",X"97",X"BA",X"BD",X"E0",X"52", + X"96",X"37",X"B7",X"A1",X"83",X"4F",X"B7",X"A1",X"84",X"B7",X"A1",X"78",X"96",X"B7",X"10",X"27", + X"06",X"55",X"8E",X"C8",X"F4",X"86",X"00",X"BD",X"D0",X"55",X"10",X"8E",X"A1",X"C2",X"86",X"01", + X"97",X"06",X"10",X"BF",X"A1",X"7B",X"8E",X"B2",X"B4",X"BD",X"C1",X"47",X"10",X"24",X"00",X"EA", + X"7C",X"A1",X"78",X"BD",X"F5",X"D1",X"96",X"06",X"4A",X"26",X"05",X"BD",X"D8",X"DC",X"20",X"03", + X"BD",X"D8",X"EA",X"C6",X"85",X"D7",X"27",X"86",X"3E",X"8E",X"B2",X"60",X"BD",X"C1",X"47",X"24", + X"02",X"86",X"3D",X"8E",X"CC",X"02",X"C6",X"3F",X"BD",X"FF",X"D4",X"C6",X"24",X"BD",X"FF",X"D4", + X"5A",X"26",X"FD",X"C6",X"3F",X"BD",X"FF",X"D4",X"1F",X"89",X"BD",X"FF",X"D4",X"CE",X"C0",X"ED", + X"96",X"06",X"48",X"33",X"C6",X"8E",X"3E",X"38",X"BD",X"FF",X"CE",X"C0",X"02",X"02",X"CE",X"C0", + X"FD",X"8E",X"14",X"58",X"BD",X"FF",X"CE",X"C0",X"02",X"02",X"CC",X"41",X"2F",X"DD",X"00",X"86", + X"40",X"DD",X"02",X"DD",X"04",X"BD",X"C1",X"58",X"86",X"28",X"B7",X"A1",X"7D",X"8E",X"C1",X"DC", + X"86",X"00",X"BD",X"D0",X"55",X"8E",X"C1",X"E7",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"C1",X"FA", + X"86",X"00",X"BD",X"D0",X"55",X"7F",X"A1",X"7A",X"BD",X"C1",X"6B",X"4F",X"B7",X"A1",X"86",X"B7", + X"A1",X"85",X"86",X"01",X"8E",X"C0",X"DA",X"7E",X"F4",X"BE",X"96",X"7B",X"85",X"01",X"26",X"14", + X"7D",X"A1",X"7D",X"27",X"29",X"7C",X"A1",X"86",X"B6",X"A1",X"86",X"81",X"05",X"26",X"E3",X"B7", + X"A1",X"85",X"20",X"DE",X"7F",X"A1",X"86",X"7D",X"A1",X"85",X"27",X"D6",X"86",X"14",X"B7",X"A1", + X"7D",X"7C",X"A1",X"7A",X"BD",X"C1",X"6B",X"B6",X"A1",X"7A",X"81",X"03",X"26",X"BD",X"BD",X"D0", + X"7C",X"8E",X"B2",X"A8",X"CE",X"B2",X"54",X"BD",X"C1",X"94",X"8E",X"C4",X"71",X"8D",X"28",X"24", + X"09",X"8E",X"C4",X"65",X"CE",X"C4",X"11",X"BD",X"C1",X"94",X"10",X"8E",X"A1",X"FF",X"96",X"06", + X"4C",X"81",X"03",X"10",X"26",X"FE",X"F9",X"7D",X"A1",X"78",X"26",X"08",X"86",X"FF",X"8E",X"C1", + X"44",X"7E",X"F4",X"BE",X"7E",X"C2",X"63",X"34",X"16",X"BD",X"F8",X"38",X"10",X"A3",X"21",X"26", + X"05",X"BD",X"F8",X"22",X"A1",X"23",X"35",X"96",X"8E",X"46",X"AC",X"CC",X"14",X"08",X"BD",X"F5", + X"C7",X"CE",X"C0",X"FF",X"BD",X"FF",X"CE",X"C0",X"02",X"02",X"39",X"7F",X"A1",X"62",X"8E",X"45", + X"B7",X"CE",X"11",X"11",X"B6",X"A1",X"62",X"B1",X"A1",X"7A",X"26",X"03",X"CE",X"DD",X"DD",X"CC", + X"04",X"00",X"EF",X"8B",X"4A",X"26",X"FB",X"7C",X"A1",X"62",X"30",X"89",X"08",X"00",X"8C",X"5D", + X"B7",X"26",X"DE",X"39",X"FF",X"A1",X"64",X"10",X"BE",X"A1",X"7B",X"8D",X"AA",X"24",X"09",X"8D", + X"24",X"30",X"14",X"BC",X"A1",X"64",X"22",X"F3",X"30",X"0C",X"EC",X"21",X"BD",X"F8",X"64",X"A6", + X"23",X"BD",X"F8",X"4E",X"CE",X"A0",X"00",X"A6",X"C4",X"BD",X"F8",X"4E",X"33",X"42",X"11",X"83", + X"A0",X"06",X"26",X"F3",X"39",X"34",X"10",X"BD",X"F8",X"38",X"30",X"08",X"BD",X"F8",X"64",X"30", + X"88",X"E8",X"AC",X"E4",X"27",X"04",X"30",X"0C",X"20",X"ED",X"35",X"90",X"7A",X"A1",X"7D",X"86", + X"3C",X"8E",X"C1",X"DC",X"7E",X"F4",X"BE",X"96",X"33",X"26",X"04",X"96",X"27",X"20",X"01",X"4F", + X"97",X"33",X"86",X"0F",X"8E",X"C1",X"E7",X"7E",X"F4",X"BE",X"7F",X"A1",X"79",X"96",X"7B",X"85", + X"80",X"27",X"04",X"86",X"FF",X"20",X"0F",X"96",X"7D",X"85",X"01",X"27",X"04",X"86",X"01",X"20", + X"05",X"7F",X"A1",X"79",X"20",X"34",X"B1",X"A1",X"79",X"26",X"37",X"7A",X"A1",X"7F",X"26",X"2A", + X"8E",X"A0",X"00",X"F6",X"A1",X"7A",X"58",X"3A",X"A6",X"84",X"BB",X"A1",X"79",X"81",X"3F",X"26", + X"02",X"86",X"5A",X"81",X"5B",X"26",X"02",X"86",X"40",X"A7",X"84",X"BD",X"C1",X"58",X"B6",X"A1", + X"7E",X"44",X"8B",X"05",X"B7",X"A1",X"7E",X"B7",X"A1",X"7F",X"86",X"01",X"8E",X"C1",X"FD",X"7E", + X"F4",X"BE",X"B7",X"A1",X"79",X"86",X"37",X"B7",X"A1",X"7E",X"86",X"03",X"B7",X"A1",X"7F",X"20", + X"E9",X"DE",X"FF",X"7F",X"A1",X"62",X"BD",X"D0",X"7C",X"BD",X"C8",X"6F",X"BD",X"F5",X"D1",X"BD", + X"D8",X"DC",X"0F",X"27",X"8E",X"C8",X"F4",X"86",X"00",X"BD",X"D0",X"55",X"BD",X"C9",X"36",X"CE", + X"C1",X"01",X"8E",X"38",X"54",X"BD",X"FF",X"CE",X"C0",X"02",X"02",X"CE",X"11",X"11",X"8E",X"1E", + X"7B",X"CC",X"5F",X"00",X"EF",X"8B",X"81",X"41",X"26",X"02",X"86",X"1F",X"4A",X"2A",X"F5",X"86", + X"2F",X"97",X"07",X"97",X"0B",X"97",X"12",X"CE",X"C1",X"03",X"8E",X"18",X"86",X"BF",X"A1",X"81", + X"8E",X"B2",X"60",X"BF",X"A1",X"64",X"8D",X"4E",X"8E",X"59",X"86",X"BF",X"A1",X"81",X"8E",X"C4", + X"1D",X"BF",X"A1",X"64",X"8D",X"40",X"86",X"3F",X"97",X"32",X"10",X"8E",X"B3",X"00",X"CC",X"3C", + X"18",X"ED",X"A4",X"CC",X"B4",X"12",X"ED",X"22",X"CC",X"30",X"38",X"BD",X"F5",X"22",X"8E",X"E7", + X"82",X"86",X"00",X"BD",X"D0",X"55",X"86",X"3C",X"B7",X"A1",X"7D",X"7D",X"A1",X"84",X"26",X"14", + X"7D",X"A1",X"62",X"10",X"26",X"FF",X"6C",X"7A",X"A1",X"7D",X"27",X"08",X"86",X"0A",X"8E",X"C2", + X"EB",X"7E",X"F4",X"BE",X"20",X"4B",X"86",X"31",X"97",X"06",X"4F",X"10",X"8E",X"A0",X"0C",X"BE", + X"A1",X"64",X"BD",X"FF",X"D7",X"30",X"01",X"C4",X"0F",X"26",X"07",X"4D",X"26",X"04",X"C6",X"40", + X"20",X"03",X"4C",X"CB",X"30",X"E7",X"A0",X"10",X"8C",X"A0",X"12",X"26",X"E5",X"BD",X"F8",X"38", + X"DD",X"08",X"BD",X"F8",X"22",X"97",X"0A",X"BF",X"A1",X"64",X"BE",X"A1",X"81",X"BD",X"FF",X"CE", + X"C0",X"02",X"02",X"30",X"0A",X"BF",X"A1",X"81",X"0C",X"06",X"96",X"06",X"81",X"39",X"26",X"BA", + X"39",X"BD",X"D0",X"7C",X"BD",X"C4",X"3C",X"86",X"D9",X"97",X"BA",X"BD",X"C9",X"36",X"8E",X"C8", + X"F4",X"86",X"00",X"BD",X"D0",X"55",X"BD",X"D6",X"BC",X"8E",X"CC",X"63",X"BF",X"A1",X"96",X"8E", + X"E7",X"82",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"F4",X"64",X"86",X"00",X"BD",X"D0",X"55",X"8E", + X"F4",X"3D",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"E9",X"E3",X"86",X"00",X"BD",X"D0",X"55",X"8E", + X"C6",X"4F",X"86",X"00",X"BD",X"D0",X"55",X"BD",X"D0",X"AD",X"CC",X"00",X"00",X"ED",X"0E",X"ED", + X"88",X"10",X"CC",X"1E",X"00",X"ED",X"0A",X"CC",X"DB",X"00",X"ED",X"0C",X"CC",X"F9",X"01",X"ED", + X"02",X"9F",X"65",X"CC",X"66",X"66",X"ED",X"88",X"12",X"BF",X"A1",X"89",X"BD",X"D0",X"AD",X"CC", + X"00",X"00",X"ED",X"0E",X"ED",X"88",X"10",X"CC",X"08",X"00",X"ED",X"0A",X"CC",X"50",X"00",X"ED", + X"0C",X"CC",X"F9",X"C1",X"ED",X"02",X"9F",X"65",X"CC",X"00",X"00",X"ED",X"88",X"12",X"BF",X"A1", + X"8B",X"BD",X"D0",X"AD",X"CC",X"F9",X"85",X"ED",X"02",X"CC",X"1D",X"A0",X"ED",X"0A",X"CC",X"40", + X"00",X"ED",X"0C",X"CC",X"00",X"A0",X"ED",X"88",X"10",X"CC",X"00",X"00",X"ED",X"0E",X"CC",X"44", + X"33",X"ED",X"88",X"12",X"BD",X"FC",X"60",X"BF",X"A1",X"8D",X"86",X"E6",X"8E",X"C4",X"12",X"7E", + X"F4",X"BE",X"CC",X"FF",X"50",X"BE",X"A1",X"8D",X"ED",X"88",X"10",X"BE",X"A1",X"89",X"ED",X"88", + X"10",X"86",X"A0",X"8E",X"C4",X"29",X"7E",X"F4",X"BE",X"8E",X"C5",X"F5",X"86",X"00",X"BD",X"D0", + X"55",X"BF",X"A1",X"87",X"86",X"15",X"8E",X"C4",X"75",X"7E",X"F4",X"BE",X"86",X"FF",X"97",X"BA", + X"BD",X"D8",X"05",X"BD",X"F5",X"D1",X"CC",X"00",X"00",X"DD",X"20",X"DD",X"22",X"BD",X"FF",X"CE", + X"F4",X"FA",X"00",X"BD",X"D7",X"F5",X"86",X"DB",X"97",X"BA",X"8E",X"10",X"30",X"9F",X"BF",X"39", + X"BE",X"A1",X"87",X"FE",X"A1",X"94",X"4F",X"A7",X"C4",X"33",X"C9",X"01",X"00",X"11",X"A3",X"07", + X"23",X"F5",X"7E",X"D0",X"15",X"8D",X"E9",X"BE",X"A1",X"8D",X"BD",X"D0",X"C7",X"BD",X"FC",X"63", + X"BE",X"A1",X"8B",X"CC",X"00",X"40",X"ED",X"0E",X"CC",X"00",X"D4",X"ED",X"88",X"10",X"86",X"2D", + X"B7",X"A1",X"8F",X"BE",X"A1",X"89",X"CC",X"00",X"00",X"ED",X"88",X"10",X"BE",X"A1",X"89",X"EC", + X"88",X"10",X"C3",X"00",X"08",X"ED",X"88",X"10",X"7A",X"A1",X"8F",X"27",X"08",X"86",X"02",X"8E", + X"C4",X"9C",X"7E",X"F4",X"BE",X"BD",X"D0",X"AD",X"CC",X"00",X"00",X"ED",X"0E",X"ED",X"88",X"10", + X"CC",X"1D",X"FF",X"ED",X"0A",X"CC",X"90",X"00",X"ED",X"0C",X"CC",X"F9",X"E7",X"ED",X"02",X"9F", + X"65",X"CC",X"00",X"00",X"ED",X"88",X"12",X"BF",X"A1",X"90",X"CC",X"00",X"00",X"CE",X"00",X"C0", + X"BE",X"A1",X"8B",X"ED",X"0E",X"EF",X"88",X"10",X"BE",X"A1",X"89",X"CC",X"1E",X"80",X"ED",X"0A", + X"CC",X"A2",X"E0",X"ED",X"0C",X"EF",X"88",X"10",X"86",X"50",X"8E",X"C5",X"00",X"7E",X"F4",X"BE", + X"BE",X"A1",X"90",X"CC",X"E0",X"00",X"ED",X"0C",X"CC",X"1C",X"00",X"ED",X"0A",X"BE",X"A1",X"89", + X"CC",X"00",X"00",X"ED",X"88",X"10",X"BE",X"A1",X"8B",X"CC",X"F9",X"CB",X"ED",X"02",X"CC",X"FF", + X"C0",X"ED",X"0E",X"CC",X"FE",X"80",X"ED",X"88",X"10",X"86",X"60",X"8E",X"C5",X"31",X"7E",X"F4", + X"BE",X"BE",X"A1",X"8B",X"CC",X"F9",X"C1",X"ED",X"02",X"CC",X"00",X"00",X"ED",X"0E",X"ED",X"88", + X"10",X"BE",X"A1",X"90",X"EC",X"04",X"BD",X"D0",X"C7",X"BD",X"D3",X"50",X"CE",X"CC",X"7D",X"BD", + X"D0",X"AD",X"EC",X"C9",X"00",X"0C",X"ED",X"02",X"EC",X"C9",X"00",X"24",X"ED",X"88",X"12",X"CC", + X"1F",X"00",X"ED",X"0A",X"CC",X"A0",X"00",X"ED",X"0C",X"CC",X"FF",X"40",X"ED",X"88",X"10",X"CC", + X"00",X"00",X"ED",X"0E",X"BD",X"FC",X"60",X"FF",X"A1",X"92",X"BF",X"A1",X"8D",X"86",X"5F",X"8E", + X"C5",X"85",X"7E",X"F4",X"BE",X"8E",X"C5",X"F5",X"86",X"00",X"BD",X"D0",X"55",X"BF",X"A1",X"87", + X"86",X"17",X"8E",X"C5",X"98",X"7E",X"F4",X"BE",X"BD",X"C4",X"60",X"BE",X"A1",X"8D",X"BD",X"D0", + X"C7",X"BD",X"D0",X"AD",X"BD",X"FC",X"63",X"FE",X"A1",X"92",X"EC",X"C9",X"00",X"18",X"ED",X"0A", + X"EC",X"C1",X"ED",X"0C",X"CC",X"00",X"00",X"ED",X"88",X"10",X"ED",X"0E",X"BD",X"FC",X"60",X"FF", + X"A1",X"92",X"86",X"20",X"8E",X"C5",X"CA",X"7E",X"F4",X"BE",X"BE",X"A1",X"96",X"30",X"02",X"BF", + X"A1",X"96",X"86",X"20",X"8E",X"C5",X"DA",X"7E",X"F4",X"BE",X"FE",X"A1",X"92",X"11",X"83",X"CC", + X"89",X"10",X"26",X"FF",X"6A",X"86",X"FF",X"8E",X"C5",X"ED",X"7E",X"F4",X"BE",X"86",X"FF",X"8E", + X"C6",X"77",X"7E",X"F4",X"BE",X"BE",X"A1",X"8B",X"AE",X"04",X"30",X"89",X"07",X"04",X"AF",X"47", + X"AF",X"49",X"BF",X"A1",X"94",X"86",X"04",X"AE",X"47",X"C6",X"11",X"E7",X"84",X"30",X"89",X"01", + X"00",X"4A",X"26",X"F7",X"C6",X"99",X"E7",X"84",X"AF",X"47",X"10",X"9E",X"A4",X"10",X"8C",X"A1", + X"5F",X"25",X"04",X"10",X"8E",X"A1",X"42",X"AE",X"49",X"86",X"03",X"E6",X"A0",X"E7",X"84",X"30", + X"89",X"01",X"00",X"4A",X"26",X"F5",X"10",X"9F",X"A4",X"AF",X"49",X"BE",X"A1",X"94",X"6F",X"84", + X"30",X"89",X"01",X"00",X"BF",X"A1",X"94",X"86",X"01",X"8E",X"C6",X"05",X"7E",X"F4",X"BE",X"10", + X"8E",X"CC",X"61",X"EE",X"A9",X"00",X"0E",X"AE",X"A1",X"BD",X"FF",X"CE",X"C0",X"02",X"02",X"10", + X"BF",X"A1",X"98",X"86",X"06",X"8E",X"C6",X"6B",X"7E",X"F4",X"BE",X"10",X"BE",X"A1",X"98",X"10", + X"BC",X"A1",X"96",X"26",X"DE",X"20",X"D8",X"BD",X"D0",X"7C",X"7F",X"A1",X"84",X"86",X"FB",X"97", + X"BA",X"BD",X"F5",X"D1",X"0F",X"52",X"CC",X"FF",X"FF",X"DD",X"59",X"8E",X"E7",X"82",X"86",X"00", + X"BD",X"D0",X"55",X"8E",X"F4",X"3D",X"86",X"00",X"BD",X"D0",X"55",X"86",X"3F",X"97",X"32",X"7E", + X"C6",X"A2",X"BD",X"C8",X"6F",X"86",X"03",X"B7",X"A1",X"6A",X"8E",X"C9",X"41",X"BF",X"A1",X"6B", + X"B6",X"A1",X"6A",X"B7",X"A1",X"63",X"10",X"BE",X"A1",X"6B",X"A6",X"A0",X"81",X"AA",X"23",X"0E", + X"43",X"27",X"F7",X"4A",X"26",X"4B",X"EC",X"A1",X"FD",X"A1",X"66",X"4F",X"20",X"18",X"48",X"24", + X"03",X"7A",X"A1",X"66",X"48",X"24",X"03",X"7C",X"A1",X"66",X"48",X"24",X"03",X"7A",X"A1",X"67", + X"48",X"24",X"03",X"7C",X"A1",X"67",X"B7",X"A1",X"62",X"FC",X"A1",X"66",X"44",X"1F",X"01",X"E6", + X"84",X"25",X"04",X"CA",X"F0",X"20",X"02",X"CA",X"0F",X"E7",X"84",X"B6",X"A1",X"62",X"26",X"CE", + X"7A",X"A1",X"63",X"26",X"B5",X"10",X"BF",X"A1",X"6B",X"86",X"02",X"8E",X"C6",X"B0",X"BD",X"F4", + X"BE",X"BF",X"A1",X"68",X"86",X"03",X"B1",X"A1",X"6A",X"26",X"0D",X"86",X"0A",X"B7",X"A1",X"6A", + X"8E",X"C7",X"30",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"C9",X"41",X"BF",X"A1",X"6B",X"20",X"80", + X"8E",X"C7",X"4C",X"86",X"00",X"BD",X"D0",X"55",X"8E",X"32",X"58",X"CE",X"C0",X"ED",X"BD",X"FF", + X"CE",X"C0",X"02",X"02",X"86",X"05",X"8E",X"C7",X"38",X"BD",X"F4",X"BE",X"86",X"30",X"8E",X"C7", + X"54",X"7E",X"F4",X"BE",X"CC",X"B3",X"D6",X"FD",X"A1",X"6D",X"CC",X"B4",X"12",X"FD",X"A1",X"6F", + X"CC",X"00",X"00",X"DD",X"20",X"CC",X"0C",X"00",X"FD",X"A1",X"71",X"CC",X"B3",X"04",X"FD",X"A1", + X"73",X"BE",X"A1",X"73",X"10",X"BE",X"A1",X"6D",X"CC",X"04",X"0C",X"ED",X"A4",X"FC",X"A1",X"6F", + X"ED",X"22",X"C3",X"00",X"60",X"FD",X"A1",X"6F",X"10",X"AF",X"02",X"FC",X"A1",X"71",X"ED",X"0A", + X"C3",X"01",X"00",X"FD",X"A1",X"71",X"CC",X"98",X"00",X"ED",X"0C",X"BD",X"FC",X"60",X"30",X"0E", + X"BF",X"A1",X"73",X"31",X"24",X"10",X"BF",X"A1",X"6D",X"10",X"8C",X"B4",X"12",X"26",X"C2",X"86", + X"2E",X"8E",X"C7",X"B7",X"7E",X"F4",X"BE",X"8E",X"B3",X"00",X"CC",X"3C",X"18",X"ED",X"84",X"CC", + X"B4",X"12",X"ED",X"02",X"8E",X"C8",X"48",X"86",X"00",X"BD",X"D0",X"55",X"86",X"28",X"8E",X"C7", + X"D4",X"7E",X"F4",X"BE",X"8E",X"F4",X"64",X"86",X"00",X"BD",X"D0",X"55",X"FE",X"A1",X"68",X"10", + X"8E",X"CC",X"11",X"8E",X"3B",X"D0",X"EC",X"A1",X"FD",X"A1",X"64",X"86",X"01",X"5F",X"B5",X"A1", + X"64",X"27",X"02",X"C6",X"10",X"B5",X"A1",X"65",X"27",X"02",X"CA",X"01",X"E7",X"80",X"48",X"26", + X"EC",X"30",X"89",X"00",X"F8",X"10",X"8C",X"CC",X"61",X"26",X"DB",X"8E",X"A0",X"26",X"F6",X"C6", + X"F8",X"A6",X"85",X"43",X"84",X"07",X"26",X"08",X"8E",X"80",X"18",X"CC",X"20",X"A0",X"EF",X"8B", + X"86",X"01",X"97",X"B7",X"8E",X"C8",X"F4",X"86",X"00",X"BD",X"D0",X"55",X"86",X"3C",X"B7",X"A1", + X"7D",X"7D",X"A1",X"84",X"10",X"26",X"FB",X"19",X"7A",X"A1",X"7D",X"27",X"08",X"86",X"0A",X"8E", + X"C8",X"31",X"7E",X"F4",X"BE",X"7E",X"C2",X"63",X"10",X"8E",X"B3",X"00",X"CC",X"30",X"90",X"BD", + X"F5",X"22",X"7D",X"9C",X"00",X"26",X"10",X"7D",X"9C",X"40",X"26",X"0B",X"8E",X"C9",X"21",X"86", + X"00",X"BD",X"D0",X"55",X"7E",X"D0",X"0A",X"86",X"01",X"8E",X"C8",X"48",X"7E",X"F4",X"BE",X"8E", + X"B4",X"12",X"10",X"8E",X"CA",X"A0",X"4F",X"B7",X"A1",X"77",X"B7",X"A1",X"76",X"A6",X"A4",X"44", + X"44",X"44",X"44",X"8D",X"0C",X"A6",X"A0",X"84",X"0F",X"8D",X"06",X"10",X"8C",X"CC",X"0E",X"26", + X"EC",X"85",X"0C",X"26",X"09",X"BB",X"A1",X"76",X"48",X"48",X"B7",X"A1",X"76",X"39",X"34",X"02", + X"84",X"03",X"BB",X"A1",X"76",X"B7",X"A1",X"76",X"35",X"02",X"84",X"0C",X"44",X"44",X"CE",X"CC", + X"0D",X"E6",X"C6",X"F7",X"A1",X"75",X"8C",X"B9",X"B2",X"25",X"04",X"30",X"89",X"FA",X"61",X"B6", + X"A1",X"77",X"27",X"14",X"A6",X"84",X"84",X"F0",X"A7",X"84",X"B6",X"A1",X"75",X"84",X"0F",X"AA", + X"84",X"A7",X"84",X"B6",X"A1",X"75",X"20",X"0D",X"73",X"A1",X"77",X"B6",X"A1",X"75",X"A7",X"84", + X"7A",X"A1",X"76",X"2B",X"0B",X"30",X"88",X"18",X"7A",X"A1",X"76",X"2A",X"F1",X"7F",X"A1",X"77", + X"7F",X"A1",X"76",X"39",X"D6",X"37",X"27",X"21",X"F1",X"A1",X"83",X"23",X"06",X"F7",X"A1",X"83", + X"7C",X"A1",X"84",X"CE",X"C0",X"E9",X"8E",X"28",X"E5",X"BD",X"FF",X"CE",X"C0",X"02",X"02",X"4F", + X"8E",X"48",X"E5",X"BD",X"FF",X"CE",X"C0",X"0E",X"02",X"86",X"10",X"8E",X"C8",X"F4",X"7E",X"F4", + X"BE",X"86",X"FF",X"B7",X"A1",X"6A",X"86",X"02",X"8E",X"C9",X"2E",X"7E",X"F4",X"BE",X"86",X"0A", + X"B7",X"A1",X"6A",X"7E",X"D0",X"0A",X"96",X"8C",X"27",X"06",X"BD",X"D3",X"DB",X"4A",X"20",X"F8", + X"39",X"FE",X"74",X"40",X"11",X"11",X"85",X"81",X"81",X"81",X"88",X"82",X"82",X"22",X"24",X"22", + X"42",X"24",X"24",X"24",X"44",X"24",X"44",X"49",X"44",X"94",X"41",X"88",X"14",X"41",X"88",X"14", + X"41",X"88",X"94",X"41",X"88",X"94",X"49",X"88",X"14",X"98",X"58",X"94",X"98",X"18",X"94",X"46", + X"66",X"62",X"42",X"42",X"42",X"42",X"25",X"24",X"24",X"68",X"24",X"24",X"24",X"26",X"11",X"18", + X"18",X"58",X"18",X"58",X"81",X"44",X"98",X"81",X"44",X"98",X"81",X"44",X"98",X"14",X"94",X"94", + X"16",X"22",X"24",X"24",X"A4",X"24",X"A4",X"24",X"24",X"24",X"24",X"24",X"FE",X"81",X"4A",X"42", + X"42",X"42",X"42",X"44",X"99",X"99",X"41",X"88",X"14",X"41",X"88",X"14",X"46",X"24",X"24",X"24", + X"24",X"24",X"24",X"A4",X"24",X"24",X"A4",X"22",X"42",X"4A",X"42",X"42",X"44",X"99",X"19",X"91", + X"19",X"91",X"91",X"81",X"81",X"41",X"81",X"49",X"46",X"42",X"42",X"42",X"42",X"42",X"42",X"24", + X"22",X"42",X"62",X"62",X"42",X"24",X"49",X"19",X"91",X"91",X"91",X"91",X"91",X"85",X"88",X"14", + X"94",X"14",X"24",X"24",X"24",X"24",X"24",X"24",X"A4",X"24",X"24",X"41",X"81",X"81",X"18",X"18", + X"94",X"41",X"88",X"14",X"14",X"24",X"42",X"24",X"24",X"24",X"24",X"24",X"24",X"24",X"44",X"98", + X"18",X"18",X"18",X"58",X"89",X"44",X"18",X"85",X"14",X"24",X"14",X"24",X"A4",X"24",X"24",X"24", + X"A4",X"24",X"28",X"24",X"44",X"18",X"19",X"19",X"81",X"41",X"81",X"14",X"24",X"24",X"24",X"24", + X"22",X"42",X"42",X"64",X"41",X"85",X"81",X"81",X"18",X"19",X"41",X"89",X"44",X"42",X"22",X"42", + X"24",X"24",X"24",X"24",X"24",X"44",X"18",X"14",X"98",X"11",X"81",X"81",X"41",X"89",X"44",X"42", + X"22",X"42",X"24",X"24",X"24",X"24",X"24",X"44",X"18",X"94",X"41",X"88",X"89",X"44",X"49",X"88", + X"14",X"41",X"88",X"14",X"14",X"24",X"24",X"24",X"26",X"62",X"66",X"26",X"24",X"18",X"91",X"91", + X"19",X"18",X"14",X"18",X"14",X"14",X"24",X"14",X"2A",X"45",X"24",X"68",X"88",X"24",X"44",X"42", + X"18",X"A8",X"82",X"44",X"A8",X"22",X"20",X"FE",X"87",X"40",X"44",X"11",X"88",X"24",X"FE",X"9A", + X"3F",X"44",X"11",X"88",X"24",X"FE",X"C1",X"3F",X"44",X"44",X"44",X"11",X"11",X"11",X"11",X"88", + X"88",X"88",X"22",X"22",X"22",X"20",X"FE",X"C3",X"45",X"22",X"22",X"44",X"11",X"81",X"50",X"FD", + X"10",X"D1",X"BD",X"29",X"C2",X"9C",X"29",X"CB",X"EA",X"C2",X"8C",X"29",X"C2",X"81",X"0D",X"10", + X"C2",X"8D",X"29",X"C2",X"9C",X"29",X"CB",X"EA",X"42",X"94",X"29",X"42",X"81",X"0C",X"3F",X"29", + X"C2",X"94",X"C2",X"9C",X"29",X"C1",X"8D",X"A4",X"29",X"42",X"94",X"29",X"3F",X"3E",X"29",X"42", + X"A4",X"29",X"4C",X"29",X"C1",X"8D",X"A4",X"2A",X"42",X"94",X"29",X"3E",X"3D",X"B6",X"B4",X"A2", + X"4A",X"17",X"CA",X"16",X"C1",X"9C",X"B4",X"A7",X"A4",X"B1",X"7A",X"7A",X"3D",X"3C",X"B6",X"B4", + X"B1",X"71",X"81",X"6B",X"16",X"C1",X"AC",X"A4",X"B6",X"B4",X"A2",X"4A",X"6B",X"3C",X"2F",X"B6", + X"B4",X"29",X"62",X"85",X"C2",X"85",X"C1",X"AC",X"A4",X"B6",X"B4",X"28",X"62",X"A2",X"F2",X"EB", + X"61",X"84",X"29",X"62",X"8E",X"28",X"E2",X"A4",X"B7",X"B4",X"28",X"62",X"A2",X"E2",X"DB",X"7B", + X"42",X"96",X"28",X"4E",X"28",X"E2",X"B4",X"B6",X"B4",X"29",X"62",X"92",X"E2",X"CB",X"7B",X"52", + X"96",X"28",X"4E",X"28",X"EB",X"41",X"A4",X"B7",X"B4",X"28",X"62",X"92",X"E1",X"FB",X"7B",X"5B", + X"24",X"B1",X"6D",X"18",X"14",X"EB",X"51",X"94",X"B7",X"B4",X"18",X"17",X"29",X"2D",X"1E",X"B1", + X"4B",X"4B",X"25",X"B1",X"6D",X"B1",X"5E",X"B5",X"1A",X"4B",X"61",X"84",X"B2",X"4B",X"41",X"82", + X"C1",X"DB",X"14",X"B5",X"18",X"17",X"18",X"16",X"D1",X"81",X"4E",X"B6",X"19",X"4B",X"61",X"84", + X"18",X"24",X"B4",X"18",X"1F",X"1C",X"38",X"53",X"84",X"B1",X"6E",X"2B",X"CB",X"61",X"94",X"38", + X"42",X"B4",X"18",X"41",X"81",X"EF",X"39",X"43",X"85",X"B1",X"6E",X"2B",X"CB",X"71",X"84",X"38", + X"43",X"84",X"B6",X"18",X"1C",X"E3",X"95",X"38",X"41",X"81",X"6D",X"38",X"CB",X"C6",X"19",X"42", + X"B5",X"38",X"4B",X"61",X"8F",X"D3",X"95",X"38",X"5B",X"51",X"F3",X"8C",X"BD",X"61",X"84",X"2A", + X"63",X"85",X"B6",X"18",X"ED",X"38",X"53",X"94",X"18",X"51",X"F3",X"8C",X"BD",X"7B",X"42",X"91", + X"42",X"B5",X"18",X"7B",X"DC",X"21",X"51",X"F3",X"4C",X"7E",X"30",X"6C",X"C2",X"14",X"2C",X"34", + X"C7",X"E1",X"07",X"C1",X"35",X"CC",X"21",X"42",X"C3",X"4C",X"7F",X"10",X"6C",X"13",X"5C",X"C1", + X"35",X"C1",X"52",X"C3",X"4C",X"7F",X"15",X"C2",X"7D",X"34",X"C1",X"5C",X"17",X"CC",X"36",X"C3", + X"5C",X"14",X"2D",X"34",X"C7",X"1C",X"14",X"C2",X"6E",X"34",X"D1",X"4E",X"15",X"CC",X"36",X"C3", + X"5C",X"14",X"2D",X"34",X"C7",X"1C",X"14",X"C2",X"51",X"C2",X"7D",X"14",X"F1",X"4C",X"22",X"CC", + X"00",X"3E",X"41",X"41",X"22",X"00",X"3E",X"41",X"41",X"3E",X"00",X"7F",X"09",X"09",X"06",X"00", + X"03",X"04",X"78",X"04",X"03",X"00",X"7F",X"09",X"19",X"66",X"00",X"41",X"7F",X"41",X"00",X"3E", + X"41",X"49",X"3A",X"00",X"7F",X"08",X"08",X"7F",X"00",X"01",X"01",X"7F",X"01",X"01",X"00",X"1C", + X"22",X"5D",X"63",X"55",X"22",X"1C",X"22",X"7F",X"4B",X"45",X"22",X"1C",X"00",X"00",X"00",X"42", + X"7F",X"40",X"00",X"26",X"49",X"49",X"3E",X"00",X"36",X"49",X"49",X"36",X"00",X"3E",X"41",X"41", + X"3E",X"43",X"30",X"1C",X"70",X"3C",X"70",X"5F",X"70",X"1C",X"A8",X"40",X"A8",X"5C",X"A8",X"C0", + X"EB",X"C0",X"DD",X"C0",X"DF",X"C0",X"E7",X"C0",X"E3",X"C0",X"E1",X"C0",X"E5",X"60",X"00",X"60", + X"00",X"62",X"00",X"98",X"00",X"98",X"00",X"9A",X"00",X"F9",X"85",X"F8",X"CE",X"F9",X"A3",X"F9", + X"29",X"F8",X"F7",X"F9",X"7B",X"09",X"00",X"11",X"00",X"19",X"80",X"09",X"60",X"11",X"60",X"19", + X"E0",X"44",X"33",X"CC",X"33",X"33",X"33",X"88",X"88",X"CC",X"CC",X"24",X"24",X"CE",X"00",X"00", + X"C6",X"08",X"8E",X"B0",X"5D",X"EF",X"94",X"EF",X"98",X"02",X"EF",X"98",X"04",X"EF",X"98",X"06", + X"3A",X"9C",X"97",X"25",X"F0",X"AE",X"9F",X"A0",X"97",X"27",X"08",X"EF",X"84",X"6F",X"02",X"EF", + X"89",X"FF",X"00",X"DC",X"20",X"83",X"6D",X"40",X"DD",X"73",X"44",X"44",X"CE",X"CD",X"69",X"C6", + X"03",X"3D",X"33",X"CB",X"96",X"BA",X"85",X"02",X"26",X"22",X"86",X"30",X"10",X"8E",X"B1",X"25", + X"8E",X"00",X"00",X"AF",X"B4",X"37",X"14",X"ED",X"A4",X"AF",X"B1",X"4C",X"8E",X"00",X"00",X"AF", + X"B4",X"37",X"14",X"ED",X"A4",X"AF",X"B1",X"4C",X"81",X"70",X"26",X"E4",X"8E",X"4C",X"09",X"CC", + X"90",X"90",X"ED",X"84",X"ED",X"88",X"1D",X"8E",X"53",X"09",X"CC",X"09",X"09",X"ED",X"84",X"ED", + X"88",X"1D",X"8E",X"A0",X"65",X"CE",X"B0",X"5D",X"8D",X"3A",X"8E",X"A0",X"6B",X"8D",X"35",X"DF", + X"97",X"DC",X"BF",X"44",X"44",X"44",X"44",X"54",X"54",X"54",X"C3",X"4B",X"07",X"ED",X"C4",X"AE", + X"C4",X"CC",X"90",X"99",X"ED",X"84",X"A7",X"02",X"86",X"09",X"A7",X"89",X"FF",X"01",X"39",X"EC", + X"0A",X"93",X"73",X"44",X"44",X"E6",X"0C",X"54",X"54",X"54",X"C3",X"30",X"07",X"ED",X"C4",X"EC", + X"88",X"12",X"ED",X"D1",X"AE",X"84",X"26",X"E7",X"39",X"25",X"70",X"07",X"26",X"77",X"00",X"26", + X"07",X"70",X"24",X"07",X"70",X"23",X"07",X"70",X"23",X"70",X"07",X"24",X"07",X"70",X"25",X"70", + X"07",X"26",X"77",X"00",X"25",X"07",X"70",X"24",X"07",X"70",X"23",X"07",X"70",X"21",X"07",X"70", + X"22",X"70",X"07",X"24",X"77",X"00",X"24",X"70",X"07",X"26",X"77",X"00",X"26",X"77",X"00",X"25", + X"77",X"00",X"25",X"70",X"07",X"26",X"77",X"00",X"24",X"07",X"70",X"23",X"70",X"07",X"25",X"77", + X"00",X"26",X"70",X"07",X"26",X"77",X"00",X"26",X"77",X"00",X"25",X"07",X"70",X"23",X"07",X"70", + X"22",X"07",X"70",X"21",X"77",X"00",X"21",X"70",X"07",X"23",X"70",X"07",X"25",X"70",X"07",X"25", + X"07",X"70",X"25",X"77",X"00",X"25",X"77",X"00",X"24",X"77",X"00",X"22",X"07",X"70",X"20",X"07", + X"70",X"1E",X"07",X"70",X"1C",X"07",X"70",X"1D",X"70",X"07",X"1F",X"70",X"07",X"21",X"70",X"07", + X"22",X"70",X"07",X"24",X"70",X"07",X"26",X"70",X"07",X"26",X"77",X"00",X"26",X"77",X"00",X"26", + X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"25",X"77",X"00",X"25",X"70",X"07",X"26",X"77", + X"00",X"24",X"07",X"70",X"23",X"77",X"00",X"24",X"77",X"00",X"22",X"07",X"70",X"23",X"70",X"07", + X"22",X"07",X"70",X"21",X"70",X"07",X"23",X"70",X"07",X"25",X"70",X"07",X"26",X"77",X"00",X"26", + X"07",X"70",X"24",X"07",X"70",X"23",X"07",X"70",X"23",X"70",X"07",X"24",X"07",X"70",X"25",X"70", + X"07",X"26",X"77",X"00",X"25",X"07",X"70",X"24",X"07",X"70",X"23",X"07",X"70",X"21",X"07",X"70", + X"22",X"70",X"07",X"24",X"77",X"00",X"24",X"70",X"07",X"26",X"77",X"00",X"26",X"77",X"00",X"25", + X"77",X"00",X"25",X"70",X"07",X"26",X"77",X"00",X"24",X"07",X"70",X"23",X"70",X"07",X"25",X"77", + X"00",X"26",X"70",X"07",X"26",X"77",X"00",X"26",X"77",X"00",X"25",X"07",X"70",X"23",X"07",X"70", + X"22",X"07",X"70",X"21",X"77",X"00",X"21",X"70",X"07",X"23",X"70",X"07",X"25",X"70",X"07",X"25", + X"07",X"70",X"25",X"77",X"00",X"25",X"77",X"00",X"24",X"77",X"00",X"22",X"07",X"70",X"20",X"07", + X"70",X"1E",X"07",X"70",X"1C",X"07",X"70",X"1D",X"70",X"07",X"1F",X"70",X"07",X"21",X"70",X"07", + X"22",X"70",X"07",X"24",X"70",X"07",X"26",X"70",X"07",X"26",X"77",X"00",X"26",X"77",X"00",X"26", + X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"25",X"77",X"00",X"25",X"70",X"07",X"26",X"77", + X"00",X"24",X"07",X"70",X"23",X"77",X"00",X"24",X"77",X"00",X"22",X"07",X"70",X"23",X"70",X"07", + X"22",X"07",X"70",X"21",X"70",X"07",X"23",X"70",X"07",X"80",X"00",X"00",X"30",X"00",X"30",X"00", + X"00",X"00",X"00",X"00",X"03",X"00",X"00",X"00",X"00",X"00",X"96",X"00",X"00",X"00",X"00",X"FE", + X"C3",X"00",X"00",X"00",X"00",X"D6",X"66",X"00",X"00",X"00",X"00",X"66",X"66",X"39",X"00",X"06", + X"66",X"66",X"88",X"68",X"66",X"66",X"66",X"88",X"88",X"88",X"00",X"60",X"63",X"30",X"63",X"00", + X"06",X"26",X"68",X"28",X"60",X"66",X"66",X"86",X"00",X"00",X"66",X"66",X"00",X"00",X"ED",X"66", + X"00",X"00",X"00",X"63",X"90",X"09",X"90",X"99",X"99",X"99",X"90",X"CC",X"90",X"11",X"00",X"11", + X"10",X"11",X"00",X"10",X"10",X"10",X"00",X"10",X"00",X"11",X"10",X"11",X"00",X"11",X"00",X"10", + X"00",X"10",X"10",X"10",X"00",X"11",X"10",X"10",X"10",X"11",X"00",X"10",X"10",X"10",X"10",X"10", + X"00",X"01",X"00",X"01",X"01",X"01",X"00",X"11",X"01",X"11",X"00",X"11",X"00",X"01",X"01",X"01", + X"00",X"01",X"00",X"11",X"00",X"11",X"01",X"11",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"01",X"01",X"01",X"11",X"00",X"FF",X"F0",X"FF",X"00",X"FF",X"00",X"F0",X"00",X"F0",X"F0",X"F0", + X"00",X"EE",X"E0",X"E0",X"E0",X"EE",X"00",X"E0",X"E0",X"E0",X"E0",X"E0",X"00",X"DD",X"D0",X"D0", + X"D0",X"DD",X"00",X"D0",X"D0",X"D0",X"D0",X"D0",X"00",X"0F",X"0F",X"0F",X"00",X"0F",X"00",X"FF", + X"00",X"FF",X"0F",X"FF",X"00",X"0E",X"0E",X"0E",X"0E",X"0E",X"00",X"EE",X"0E",X"0E",X"0E",X"EE", + X"00",X"0D",X"0D",X"0D",X"0D",X"0D",X"00",X"DD",X"0D",X"0D",X"0D",X"DD",X"00",X"1C",X"0D",X"7F", + X"E7",X"70",X"00",X"0F",X"71",X"71",X"07",X"DC",X"77",X"7C",X"0D",X"71",X"C7",X"77",X"DE",X"07", + X"71",X"17",X"17",X"DE",X"F7",X"71",X"17",X"71",X"7C",X"DE",X"F0",X"07",X"77",X"C7",X"71",X"17", + X"70",X"70",X"7C",X"D7",X"77",X"77",X"70",X"01",X"CD",X"FF",X"D7",X"70",X"F0",X"00",X"00",X"00", + X"C5",X"FB",X"7E",X"CA",X"A7",X"7E",X"CA",X"B2",X"7E",X"CA",X"BD",X"7E",X"CA",X"C8",X"7E",X"CB", + X"C1",X"7E",X"CB",X"CC",X"7E",X"CB",X"D7",X"7E",X"CB",X"E2",X"7E",X"CA",X"79",X"7E",X"CA",X"81", + X"7E",X"CA",X"51",X"7E",X"CA",X"58",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"5B", + X"FF",X"C0",X"BD",X"C0",X"BF",X"C0",X"C1",X"00",X"00",X"C0",X"C1",X"00",X"00",X"C0",X"C3",X"00", + X"00",X"C0",X"C5",X"00",X"00",X"C0",X"C5",X"00",X"00",X"C0",X"C7",X"00",X"00",X"C0",X"C3",X"00", + X"00",X"C0",X"C9",X"00",X"00",X"C0",X"CB",X"C0",X"CD",X"C0",X"CF",X"00",X"00",X"C0",X"BD",X"C0", + X"D1",X"C0",X"D3",X"C0",X"D5",X"C0",X"DB",X"00",X"00",X"C1",X"07",X"C1",X"0D",X"C1",X"11",X"C1", + X"13",X"C1",X"15",X"C1",X"19",X"C1",X"1D",X"C1",X"21",X"C1",X"27",X"C1",X"2B",X"C1",X"33",X"C1", + X"4D",X"C1",X"53",X"C1",X"6D",X"C1",X"88",X"C1",X"92",X"C1",X"96",X"C1",X"9C",X"C1",X"A0",X"C1", + X"A2",X"C1",X"A6",X"C1",X"A8",X"C1",X"AC",X"C1",X"B0",X"C1",X"B2",X"C1",X"B4",X"C1",X"B6",X"C1", + X"B8",X"C1",X"BC",X"C1",X"BE",X"C1",X"C2",X"C1",X"C6",X"C1",X"C8",X"C1",X"CA",X"C1",X"CC",X"C1", + X"CE",X"C1",X"D0",X"C1",X"D2",X"C1",X"D4",X"C1",X"D6",X"C1",X"D8",X"C1",X"DA",X"C1",X"EA",X"C1", + X"F8",X"C2",X"00",X"C2",X"08",X"C2",X"10",X"C2",X"1A",X"C2",X"24",X"C2",X"2C",X"C2",X"34",X"C2", + X"3E",X"C2",X"48",X"C2",X"52",X"C2",X"5A",X"C2",X"64",X"C2",X"68",X"C2",X"74",X"C2",X"7E",X"C2", + X"85",X"C2",X"8C",X"C2",X"93",X"C2",X"9A",X"C2",X"A1",X"C2",X"A8",X"C2",X"AA",X"C2",X"AC",X"C2", + X"B4",X"C2",X"B8",X"C2",X"BC",X"C2",X"BE",X"C2",X"C6",X"C2",X"D2",X"C2",X"D6",X"C2",X"D8",X"C3", + X"01",X"C3",X"0B",X"C3",X"21",X"C3",X"2B",X"C4",X"64",X"C5",X"8D",X"C4",X"50",X"C5",X"BB",X"C4", + X"D1",X"C5",X"2D",X"C5",X"1B",X"C5",X"2D",X"C4",X"04",X"C5",X"1B",X"C4",X"04",X"C4",X"15",X"C4", + X"E0",X"C3",X"3E",X"C5",X"31",X"C4",X"D1",X"C5",X"1B",X"C5",X"81",X"C4",X"CA",X"C5",X"1B",X"C3", + X"F8",X"C3",X"C6",X"C3",X"93",X"C5",X"1B",X"C4",X"04",X"06",X"28",X"A0",X"C5",X"81",X"C4",X"AD", + X"C3",X"66",X"C3",X"F0",X"07",X"C5",X"DA",X"C3",X"98",X"C3",X"CF",X"C4",X"D8",X"C3",X"93",X"C5", + X"1B",X"C4",X"D1",X"C4",X"A4",X"C5",X"1B",X"C4",X"04",X"03",X"FE",X"C3",X"81",X"04",X"10",X"02", + X"F8",X"C3",X"93",X"C5",X"1B",X"C3",X"7D",X"C4",X"CD",X"C3",X"66",X"C5",X"86",X"C3",X"9D",X"C5", + X"1B",X"C5",X"81",X"04",X"30",X"02",X"E8",X"C5",X"C3",X"C3",X"9D",X"C3",X"61",X"C4",X"50",X"07", + X"03",X"FC",X"C3",X"9D",X"C5",X"1B",X"C4",X"04",X"C3",X"49",X"C5",X"81",X"07",X"07",X"03",X"04", + X"C5",X"54",X"C5",X"7A",X"C5",X"81",X"C4",X"9C",X"C5",X"81",X"C4",X"E5",X"C3",X"55",X"C5",X"C0", + X"C3",X"36",X"C5",X"27",X"C3",X"98",X"C4",X"35",X"C4",X"8B",X"C3",X"98",X"C3",X"85",X"C3",X"98", + X"C4",X"75",X"C4",X"75",X"C4",X"0C",X"C5",X"9C",X"C5",X"4E",X"C3",X"69",X"C4",X"45",X"C5",X"B7", + X"C4",X"F5",X"C4",X"D4",X"C4",X"EE",X"C5",X"1F",X"C3",X"D4",X"C5",X"C0",X"C4",X"75",X"C4",X"75", + X"C4",X"75",X"C4",X"75",X"C4",X"75",X"C4",X"75",X"C4",X"75",X"C5",X"0B",X"C3",X"36",X"C5",X"DA", + X"C5",X"7A",X"C5",X"45",X"C4",X"11",X"03",X"FE",X"C3",X"83",X"C3",X"55",X"C4",X"11",X"C3",X"4F", + X"03",X"FE",X"C3",X"81",X"C4",X"15",X"C3",X"2B",X"C4",X"95",X"C4",X"11",X"C5",X"2D",X"C5",X"81", + X"C3",X"55",X"C4",X"11",X"C5",X"1B",X"C5",X"81",X"C3",X"55",X"C5",X"AD",X"C3",X"FF",X"C5",X"81", + X"C3",X"55",X"C4",X"11",X"C3",X"93",X"C5",X"1B",X"C5",X"81",X"C3",X"55",X"C4",X"11",X"C3",X"9D", + X"C5",X"1B",X"C5",X"81",X"C3",X"55",X"C4",X"11",X"C3",X"49",X"C5",X"81",X"C3",X"55",X"C4",X"11", + X"C5",X"7A",X"C5",X"81",X"C4",X"95",X"C5",X"AD",X"C5",X"81",X"C4",X"59",X"C5",X"5A",X"C3",X"55", + X"C4",X"11",X"C4",X"9C",X"C5",X"81",X"C4",X"E5",X"C4",X"95",X"C5",X"AD",X"C5",X"67",X"C5",X"97", + X"C4",X"E5",X"C3",X"55",X"C4",X"11",X"C4",X"15",X"C4",X"E0",X"C4",X"95",X"C5",X"AD",X"C5",X"67", + X"C5",X"97",X"C3",X"2B",X"C5",X"D1",X"C3",X"BD",X"C5",X"0B",X"C3",X"36",X"C5",X"AD",X"C5",X"67", + X"C5",X"97",X"C5",X"81",X"C5",X"0B",X"C4",X"35",X"C5",X"AD",X"C4",X"90",X"C3",X"8C",X"C4",X"84", + X"07",X"03",X"06",X"C4",X"B9",X"C4",X"B2",X"07",X"03",X"06",X"C4",X"B9",X"C4",X"FD",X"07",X"03", + X"00",X"C4",X"C5",X"C3",X"6E",X"07",X"03",X"06",X"C4",X"C1",X"C5",X"72",X"07",X"03",X"08",X"C4", + X"B9",X"C3",X"5A",X"07",X"03",X"06",X"C4",X"BD",X"C3",X"B4",X"C5",X"36",X"C3",X"D9",X"07",X"07", + X"03",X"0C",X"C5",X"02",X"C4",X"EE",X"C4",X"D4",X"C4",X"EE",X"C5",X"B7",X"C3",X"75",X"C5",X"0B", + X"C4",X"D4",X"C4",X"EE",X"C5",X"61",X"C5",X"0B",X"C4",X"D4",X"C4",X"DD",X"C5",X"B7",X"C4",X"EE", + X"C5",X"61",X"C3",X"42",X"C5",X"CC",X"C3",X"A3",X"C5",X"DF",X"C4",X"30",X"C5",X"11",X"C4",X"11", + X"07",X"C5",X"93",X"C3",X"BD",X"C4",X"23",X"07",X"07",X"C5",X"3E",X"C4",X"6C",X"C5",X"DA",X"C5", + X"C0",X"C3",X"D4",X"C5",X"6C",X"07",X"07",X"C5",X"0B",X"C4",X"0C",X"C5",X"AD",X"C3",X"EA",X"C4", + X"64",X"A0",X"00",X"02",X"08",X"A0",X"02",X"02",X"10",X"A0",X"04",X"C4",X"23",X"06",X"22",X"68", + X"C5",X"B0",X"02",X"3E",X"C3",X"3E",X"C5",X"A8",X"07",X"03",X"FC",X"C4",X"1A",X"02",X"3D",X"C4", + X"1A",X"A0",X"06",X"02",X"05",X"A0",X"08",X"02",X"13",X"A0",X"0C",X"41",X"44",X"4A",X"55",X"53", + X"54",X"4D",X"45",X"4E",X"54",X"2F",X"41",X"44",X"56",X"41",X"4E",X"43",X"45",X"2F",X"41",X"4C", + X"4C",X"2F",X"41",X"54",X"54",X"41",X"43",X"4B",X"2F",X"41",X"55",X"44",X"49",X"4F",X"2F",X"41", + X"55",X"44",X"49",X"54",X"2F",X"41",X"55",X"54",X"4F",X"2F",X"42",X"41",X"49",X"54",X"45",X"52", + X"2F",X"42",X"41",X"52",X"53",X"2F",X"42",X"45",X"2F",X"42",X"4F",X"4D",X"42",X"2F",X"42",X"4F", + X"4D",X"42",X"45",X"52",X"2F",X"42",X"4F",X"4E",X"55",X"53",X"20",X"58",X"2F",X"43",X"41",X"4E", + X"2F",X"2C",X"2F",X"3A",X"2F",X"43",X"45",X"4E",X"54",X"45",X"52",X"2F",X"43",X"48",X"41",X"4E", + X"47",X"45",X"2F",X"43",X"4D",X"4F",X"53",X"2F",X"43",X"4F",X"49",X"4E",X"2F",X"43",X"4F",X"4C", + X"4F",X"52",X"2F",X"43",X"4F",X"4D",X"50",X"4C",X"45",X"54",X"45",X"44",X"2F",X"43",X"52",X"45", + X"44",X"49",X"54",X"2F",X"43",X"52",X"45",X"44",X"49",X"54",X"53",X"3A",X"2F",X"44",X"45",X"46", + X"45",X"4E",X"44",X"45",X"52",X"2F",X"44",X"45",X"54",X"45",X"43",X"54",X"45",X"44",X"2F",X"44", + X"4F",X"4F",X"52",X"2F",X"44",X"4F",X"57",X"4E",X"2F",X"45",X"4C",X"45",X"43",X"54",X"52",X"4F", + X"4E",X"49",X"43",X"53",X"20",X"49",X"4E",X"43",X"2E",X"2F",X"45",X"4E",X"54",X"45",X"52",X"2F", + X"45",X"4E",X"54",X"45",X"52",X"45",X"44",X"2F",X"45",X"52",X"52",X"4F",X"52",X"53",X"2F",X"45", + X"58",X"49",X"54",X"2F",X"46",X"41",X"49",X"4C",X"55",X"52",X"45",X"2F",X"46",X"49",X"52",X"45", + X"2F",X"46",X"4F",X"52",X"2F",X"47",X"41",X"4D",X"45",X"2F",X"47",X"52",X"45",X"41",X"54",X"45", + X"53",X"54",X"2F",X"48",X"41",X"4C",X"4C",X"20",X"4F",X"46",X"20",X"46",X"41",X"4D",X"45",X"2F", + X"48",X"41",X"56",X"45",X"2F",X"48",X"49",X"47",X"48",X"53",X"43",X"4F",X"52",X"45",X"20",X"52", + X"45",X"53",X"45",X"54",X"2F",X"48",X"59",X"50",X"45",X"52",X"53",X"50",X"41",X"43",X"45",X"2F", + X"49",X"4E",X"44",X"49",X"43",X"41",X"54",X"45",X"2F",X"49",X"4E",X"44",X"49",X"56",X"49",X"44", + X"55",X"41",X"4C",X"2F",X"49",X"4E",X"49",X"54",X"49",X"41",X"4C",X"2F",X"49",X"4E",X"49",X"54", + X"49",X"41",X"4C",X"53",X"2F",X"49",X"4E",X"56",X"41",X"4C",X"49",X"44",X"20",X"53",X"57",X"49", + X"54",X"43",X"48",X"2F",X"4C",X"41",X"4E",X"44",X"45",X"52",X"2F",X"4C",X"45",X"46",X"54",X"2F", + X"4D",X"41",X"4B",X"45",X"2F",X"4D",X"41",X"4E",X"55",X"41",X"4C",X"2F",X"4D",X"4F",X"4E",X"49", + X"54",X"4F",X"52",X"2F",X"4D",X"55",X"4C",X"54",X"49",X"50",X"4C",X"45",X"2F",X"4D",X"55",X"53", + X"54",X"2F",X"4D",X"55",X"54",X"41",X"4E",X"54",X"2F",X"31",X"35",X"30",X"2F",X"32",X"30",X"30", + X"2F",X"32",X"35",X"30",X"2F",X"31",X"30",X"30",X"30",X"2F",X"4E",X"4F",X"2F",X"4E",X"4F",X"54", + X"2F",X"4F",X"4B",X"2F",X"4F",X"4E",X"45",X"2F",X"4F",X"50",X"45",X"4E",X"2F",X"4F",X"52",X"2F", + X"4F",X"56",X"45",X"52",X"2F",X"50",X"41",X"54",X"54",X"45",X"52",X"4E",X"53",X"2F",X"50",X"4C", + X"41",X"59",X"45",X"52",X"2F",X"50",X"4C",X"41",X"59",X"45",X"52",X"53",X"2F",X"20",X"50",X"4F", + X"44",X"2F",X"50",X"52",X"45",X"53",X"45",X"4E",X"54",X"53",X"2F",X"50",X"52",X"45",X"53",X"53", + X"2F",X"51",X"55",X"41",X"4C",X"49",X"46",X"49",X"45",X"44",X"2F",X"52",X"41",X"4D",X"2F",X"52", + X"45",X"56",X"45",X"52",X"53",X"45",X"2F",X"52",X"49",X"47",X"48",X"54",X"2F",X"52",X"4F",X"4D", + X"2F",X"52",X"4F",X"4D",X"53",X"2F",X"53",X"43",X"41",X"4E",X"4E",X"45",X"52",X"2F",X"53",X"45", + X"4C",X"45",X"43",X"54",X"2F",X"53",X"45",X"54",X"2F",X"53",X"4C",X"41",X"4D",X"2F",X"53",X"4D", + X"41",X"52",X"54",X"2F",X"53",X"4F",X"55",X"4E",X"44",X"2F",X"53",X"4F",X"55",X"4E",X"44",X"53", + X"2F",X"53",X"54",X"41",X"52",X"54",X"2F",X"53",X"54",X"45",X"50",X"2F",X"53",X"54",X"49",X"43", + X"4B",X"2F",X"53",X"57",X"41",X"52",X"4D",X"45",X"52",X"2F",X"53",X"57",X"49",X"54",X"43",X"48", + X"2F",X"54",X"45",X"53",X"54",X"2F",X"54",X"45",X"53",X"54",X"45",X"44",X"2F",X"54",X"45",X"53", + X"54",X"53",X"2F",X"54",X"48",X"45",X"2F",X"54",X"48",X"52",X"55",X"2F",X"54",X"48",X"52",X"55", + X"53",X"54",X"2F",X"54",X"49",X"4C",X"54",X"2F",X"54",X"49",X"4D",X"45",X"2F",X"54",X"4F",X"2F", + X"54",X"4F",X"44",X"41",X"59",X"53",X"2F",X"54",X"57",X"4F",X"2F",X"55",X"4E",X"49",X"54",X"2F", + X"55",X"50",X"2F",X"56",X"45",X"52",X"54",X"49",X"43",X"41",X"4C",X"2F",X"57",X"41",X"56",X"45", + X"2F",X"57",X"49",X"4C",X"4C",X"49",X"41",X"4D",X"53",X"2F",X"57",X"49",X"54",X"48",X"2F",X"59", + X"4F",X"55",X"2F",X"01",X"08",X"C6",X"97",X"01",X"08",X"C6",X"AF",X"01",X"08",X"C6",X"B7",X"03", + X"08",X"C7",X"BF",X"01",X"08",X"C6",X"BF",X"03",X"08",X"C7",X"BF",X"03",X"08",X"C6",X"C7",X"03", + X"08",X"C6",X"DF",X"03",X"08",X"C6",X"F7",X"03",X"08",X"C7",X"0F",X"03",X"08",X"C7",X"27",X"03", + X"08",X"C7",X"3F",X"03",X"08",X"C7",X"57",X"03",X"08",X"C7",X"6F",X"03",X"08",X"C7",X"87",X"03", + X"08",X"C7",X"9F",X"01",X"08",X"C7",X"B7",X"03",X"08",X"C7",X"BF",X"03",X"08",X"C6",X"97",X"03", + X"08",X"C7",X"D7",X"03",X"08",X"C7",X"EF",X"03",X"08",X"C8",X"07",X"03",X"08",X"C8",X"1F",X"03", + X"08",X"C8",X"37",X"03",X"08",X"C8",X"4F",X"03",X"08",X"C8",X"67",X"03",X"08",X"C8",X"7F",X"02", + X"08",X"C8",X"97",X"03",X"08",X"C8",X"A7",X"03",X"08",X"C8",X"BF",X"03",X"08",X"C8",X"D7",X"04", + X"08",X"C8",X"EF",X"03",X"08",X"C9",X"0F",X"03",X"08",X"C9",X"27",X"03",X"08",X"C9",X"3F",X"03", + X"08",X"C9",X"57",X"03",X"08",X"C9",X"6F",X"03",X"08",X"C9",X"87",X"03",X"08",X"C9",X"9F",X"03", + X"08",X"C9",X"B7",X"03",X"08",X"C9",X"CF",X"04",X"08",X"C9",X"E7",X"03",X"08",X"CA",X"07",X"03", + X"08",X"CA",X"1F",X"03",X"08",X"CA",X"37",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01", + X"01",X"01",X"01",X"01",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"10",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"00", + X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"11",X"10",X"00",X"00",X"00",X"00",X"00",X"11", + X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"01",X"01",X"00",X"00",X"00",X"01",X"01",X"00",X"11", + X"00",X"00",X"01",X"10",X"00",X"11",X"00",X"11",X"11",X"11",X"10",X"00",X"00",X"11",X"00",X"01", + X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"11",X"00",X"00",X"11",X"00",X"00",X"11",X"00",X"11", + X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"00",X"00",X"01",X"01",X"00",X"00",X"00",X"00",X"01", + X"10",X"00",X"11",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"01", + X"01",X"01",X"01",X"00",X"00",X"01",X"00",X"11",X"10",X"10",X"11",X"00",X"00",X"11",X"00",X"11", + X"00",X"00",X"11",X"01",X"01",X"11",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"11",X"10",X"10",X"11",X"00",X"11",X"00",X"00",X"11",X"01",X"01",X"11",X"00",X"01", + X"00",X"00",X"00",X"00",X"01",X"01",X"00",X"11",X"00",X"00",X"01",X"11",X"10",X"10",X"00",X"11", + X"11",X"11",X"10",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"11",X"10",X"10",X"11",X"00",X"11",X"01",X"01",X"10",X"01",X"01",X"11",X"00",X"01", + X"01",X"01",X"01",X"00",X"00",X"01",X"00",X"11",X"10",X"10",X"11",X"00",X"00",X"11",X"00",X"11", + X"01",X"01",X"11",X"01",X"01",X"11",X"00",X"00",X"00",X"01",X"00",X"00",X"01",X"00",X"00",X"01", + X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"00",X"01",X"01",X"00",X"01",X"00",X"11", + X"11",X"11",X"10",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"00",X"00",X"11",X"00",X"00",X"11",X"00",X"11", + X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"10",X"10",X"10",X"11",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"10", + X"11",X"11",X"11",X"11",X"11",X"10",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"11",X"10",X"10",X"11",X"00",X"11",X"00",X"00",X"10",X"00",X"00",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"10",X"10",X"11",X"10",X"10",X"10",X"00",X"11", + X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"10",X"10",X"10",X"11",X"00",X"11",X"00",X"00",X"11",X"01",X"01",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"10",X"10",X"10",X"11",X"10",X"10",X"10",X"00",X"01", + X"01",X"01",X"11",X"01",X"01",X"01",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"10", + X"10",X"10",X"10",X"10",X"10",X"10",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"11",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"01",X"11",X"01",X"00",X"00",X"00",X"01", + X"10",X"00",X"00",X"00",X"10",X"01",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"10", + X"10",X"10",X"10",X"10",X"10",X"11",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"10",X"10",X"10",X"10",X"10",X"10",X"00",X"11", + X"10",X"10",X"10",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"10",X"10",X"10",X"10",X"10",X"10",X"00",X"11", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"10",X"10",X"10",X"11",X"00",X"11",X"01",X"01",X"01",X"01",X"01",X"11",X"00",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"10",X"10",X"11",X"10",X"10",X"10",X"00",X"11", + X"01",X"01",X"11",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"10",X"10",X"10",X"10",X"10",X"11",X"00",X"11",X"01",X"01",X"01",X"01",X"11",X"11",X"10",X"01", + X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"11",X"10",X"10",X"11",X"10",X"10",X"10",X"00",X"11", + X"01",X"01",X"11",X"10",X"01",X"01",X"00",X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"00",X"11", + X"10",X"10",X"11",X"00",X"00",X"11",X"00",X"11",X"00",X"00",X"11",X"11",X"11",X"11",X"00",X"11", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"11",X"11",X"00",X"11", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"10", + X"10",X"10",X"10",X"10",X"10",X"11",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"11",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"10",X"01",X"00",X"01", + X"01",X"01",X"01",X"01",X"10",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"10", + X"10",X"10",X"10",X"10",X"10",X"01",X"00",X"10",X"10",X"10",X"10",X"10",X"10",X"01",X"00",X"10", + X"10",X"10",X"10",X"10",X"10",X"00",X"00",X"01",X"01",X"00",X"00",X"00",X"01",X"01",X"00",X"00", + X"00",X"10",X"01",X"10",X"00",X"00",X"00",X"01",X"01",X"10",X"00",X"10",X"01",X"01",X"00",X"01", + X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"01",X"01",X"01",X"01",X"00",X"01", + X"01",X"10",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"11", + X"00",X"01",X"10",X"00",X"00",X"11",X"00",X"11",X"10",X"00",X"00",X"00",X"00",X"11",X"00",X"84", + X"FF",X"34",X"70",X"CE",X"C0",X"D9",X"20",X"05",X"34",X"70",X"CE",X"C0",X"BB",X"8E",X"18",X"CE", + X"BD",X"CA",X"A7",X"EE",X"A1",X"27",X"06",X"8E",X"10",X"DA",X"BD",X"CA",X"A7",X"EE",X"A1",X"27", + X"06",X"8E",X"10",X"E4",X"BD",X"CA",X"A7",X"35",X"F0",X"34",X"77",X"10",X"8E",X"FF",X"B6",X"20", + X"06",X"34",X"77",X"10",X"8E",X"FF",X"B3",X"CC",X"CA",X"ED",X"10",X"9F",X"3D",X"DD",X"3F",X"9F", + X"50",X"9F",X"4E",X"8E",X"01",X"0A",X"9F",X"4C",X"0F",X"58",X"EE",X"65",X"DF",X"54",X"33",X"C8", + X"20",X"DF",X"56",X"DF",X"52",X"20",X"46",X"34",X"77",X"10",X"8E",X"FF",X"B3",X"CC",X"CA",X"ED", + X"20",X"1F",X"34",X"77",X"10",X"8E",X"FF",X"B6",X"CC",X"CA",X"ED",X"20",X"14",X"34",X"77",X"10", + X"8E",X"FF",X"B3",X"CC",X"CB",X"5F",X"20",X"09",X"34",X"77",X"10",X"8E",X"FF",X"B6",X"CC",X"CB", + X"5F",X"10",X"9F",X"3D",X"DD",X"3F",X"0D",X"52",X"26",X"13",X"9F",X"50",X"9F",X"4E",X"8E",X"01", + X"0A",X"9F",X"4C",X"0F",X"58",X"AE",X"42",X"9F",X"56",X"AE",X"C4",X"20",X"21",X"0D",X"58",X"26", + X"0E",X"9E",X"54",X"E6",X"80",X"C1",X"2F",X"26",X"30",X"C6",X"20",X"D7",X"58",X"20",X"2A",X"0F", + X"58",X"9E",X"52",X"9C",X"56",X"26",X"07",X"0F",X"52",X"35",X"77",X"1A",X"01",X"39",X"EE",X"81", + X"2B",X"11",X"30",X"1F",X"1F",X"30",X"81",X"08",X"22",X"ED",X"48",X"10",X"8E",X"CB",X"64",X"AD", + X"B6",X"20",X"E0",X"9F",X"52",X"DF",X"54",X"20",X"C4",X"9F",X"54",X"C0",X"20",X"C1",X"01",X"23", + X"16",X"C1",X"0B",X"23",X"10",X"C0",X"0A",X"C1",X"10",X"23",X"0C",X"C1",X"14",X"23",X"06",X"C0", + X"04",X"C1",X"2C",X"23",X"02",X"C6",X"03",X"58",X"58",X"8E",X"C5",X"E3",X"3A",X"1F",X"12",X"DC", + X"50",X"9E",X"3D",X"AD",X"84",X"AB",X"A4",X"9B",X"4C",X"97",X"50",X"9E",X"3F",X"6E",X"84",X"35", + X"77",X"1C",X"FE",X"39",X"CB",X"76",X"CB",X"7B",X"CB",X"80",X"CB",X"87",X"CB",X"8E",X"CB",X"95", + X"CB",X"9C",X"CB",X"A3",X"CB",X"AC",X"A6",X"80",X"97",X"4C",X"39",X"E6",X"80",X"D7",X"4D",X"39", + X"96",X"4E",X"AB",X"80",X"97",X"50",X"39",X"96",X"50",X"AB",X"80",X"97",X"50",X"39",X"D6",X"4F", + X"EB",X"80",X"D7",X"51",X"39",X"D6",X"51",X"EB",X"80",X"D7",X"51",X"39",X"EC",X"81",X"DD",X"4E", + X"DD",X"50",X"39",X"96",X"4E",X"D6",X"51",X"DB",X"4D",X"DD",X"50",X"39",X"10",X"AE",X"81",X"9F", + X"52",X"9E",X"3D",X"AD",X"84",X"AB",X"A4",X"9B",X"4C",X"97",X"50",X"32",X"62",X"9E",X"3F",X"6E", + X"84",X"34",X"77",X"10",X"8E",X"FF",X"B3",X"CE",X"CC",X"0F",X"20",X"1F",X"34",X"77",X"10",X"8E", + X"FF",X"B6",X"CE",X"CC",X"0F",X"20",X"14",X"34",X"77",X"10",X"8E",X"FF",X"B3",X"CE",X"CC",X"39", + X"20",X"09",X"34",X"77",X"10",X"8E",X"FF",X"B6",X"CE",X"CC",X"39",X"10",X"9F",X"3D",X"DF",X"3F", + X"DE",X"59",X"11",X"83",X"FF",X"FF",X"26",X"15",X"9F",X"50",X"DD",X"59",X"26",X"05",X"CC",X"0F", + X"FF",X"20",X"08",X"85",X"F0",X"26",X"04",X"8D",X"35",X"20",X"F8",X"DD",X"59",X"DC",X"59",X"84", + X"F0",X"81",X"F0",X"26",X"07",X"35",X"77",X"9E",X"50",X"1A",X"01",X"39",X"44",X"44",X"8E",X"C5", + X"FB",X"31",X"86",X"DC",X"50",X"9E",X"3D",X"AD",X"84",X"AB",X"A4",X"9B",X"4C",X"97",X"50",X"DC", + X"59",X"8D",X"0B",X"DD",X"59",X"9E",X"3F",X"6E",X"84",X"35",X"77",X"1C",X"FE",X"39",X"58",X"49", + X"58",X"49",X"58",X"49",X"58",X"49",X"CA",X"0F",X"39",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"05",X"38",X"4E",X"CE",X"96",X"09",X"AC",X"42",X"90",X"16",X"52",X"A8",X"F2",X"12",X"96",X"6A", + X"08",X"C0",X"DE",X"CA",X"A5",X"54",X"1B",X"88",X"2D",X"59",X"A3",X"96",X"41",X"DC",X"EF",X"A3", + X"27",X"03",X"B6",X"1C",X"EF",X"5E",X"FF",X"D7",X"B0",X"56",X"A4",X"76",X"C3",X"A0",X"90",X"9B", + X"D9",X"08",X"D3",X"04",X"CB",X"99",X"C8",X"70",X"43",X"94",X"33",X"7B",X"6B",X"8D",X"B2",X"F8", + X"00",X"0C",X"CC",X"CC",X"CC",X"CC",X"0C",X"00",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC", + X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"00",X"C0",X"CC",X"CC",X"CC",X"CC",X"C0",X"00", + X"A0",X"0A",X"A0",X"A0",X"00",X"A0",X"0A",X"00",X"0A",X"0A",X"A0",X"0A",X"0A",X"AA",X"0A",X"00", + X"A0",X"00",X"00",X"0A",X"00",X"A0",X"AA",X"A0",X"00",X"02",X"23",X"02",X"20",X"22",X"23",X"22", + X"00",X"00",X"20",X"00",X"00",X"00",X"02",X"00",X"02",X"22",X"32",X"22",X"00",X"20",X"32",X"20", + X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"30",X"04",X"34",X"30",X"30",X"34",X"30",X"00",X"00", + X"44",X"44",X"33",X"33",X"34",X"30",X"30",X"30",X"00",X"30",X"03",X"03",X"30",X"30",X"03",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"03", + X"00",X"03",X"33",X"33",X"03",X"03",X"30",X"00",X"44",X"44",X"03",X"03",X"43",X"03",X"03",X"03", + X"40",X"43",X"30",X"30",X"43",X"03",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00",X"30",X"03", + X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"30",X"04",X"34",X"03",X"03",X"34",X"30",X"00",X"00", + X"44",X"44",X"30",X"30",X"34",X"30",X"30",X"30",X"00",X"30",X"33",X"33",X"30",X"30",X"03",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"03", + X"00",X"03",X"30",X"30",X"03",X"03",X"30",X"00",X"44",X"44",X"33",X"33",X"43",X"03",X"03",X"03", + X"40",X"43",X"03",X"03",X"43",X"03",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00",X"30",X"03", + X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"30",X"00",X"33",X"33",X"33",X"33",X"30",X"00",X"00", + X"00",X"33",X"03",X"03",X"33",X"30",X"30",X"30",X"00",X"30",X"33",X"33",X"30",X"30",X"03",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"03", + X"00",X"03",X"33",X"33",X"03",X"03",X"30",X"00",X"00",X"33",X"30",X"30",X"03",X"03",X"03",X"03", + X"00",X"33",X"33",X"33",X"33",X"03",X"00",X"00",X"00",X"00",X"30",X"30",X"00",X"00",X"30",X"03", + X"00",X"03",X"34",X"03",X"33",X"70",X"40",X"33",X"33",X"07",X"44",X"33",X"33",X"00",X"04",X"33", + X"30",X"73",X"40",X"33",X"00",X"00",X"30",X"00",X"00",X"00",X"03",X"00",X"03",X"37",X"44",X"33", + X"33",X"00",X"04",X"33",X"33",X"70",X"40",X"33",X"33",X"07",X"44",X"33",X"00",X"30",X"03",X"30", + X"00",X"03",X"30",X"03",X"33",X"00",X"44",X"33",X"33",X"70",X"04",X"33",X"33",X"07",X"40",X"33", + X"30",X"03",X"44",X"33",X"00",X"00",X"30",X"00",X"00",X"00",X"03",X"00",X"03",X"30",X"04",X"33", + X"33",X"07",X"40",X"33",X"33",X"00",X"44",X"33",X"33",X"70",X"04",X"33",X"00",X"30",X"43",X"30", + X"00",X"03",X"34",X"03",X"33",X"07",X"04",X"33",X"33",X"00",X"40",X"33",X"33",X"70",X"44",X"33", + X"30",X"03",X"04",X"33",X"00",X"00",X"30",X"00",X"00",X"00",X"03",X"00",X"03",X"30",X"40",X"33", + X"33",X"70",X"44",X"33",X"33",X"07",X"04",X"33",X"33",X"00",X"40",X"33",X"00",X"30",X"43",X"30", + X"00",X"06",X"26",X"06",X"26",X"00",X"66",X"66",X"66",X"88",X"88",X"88",X"00",X"60",X"66",X"66", + X"88",X"86",X"00",X"00",X"00",X"66",X"66",X"93",X"00",X"00",X"00",X"6D",X"66",X"00",X"00",X"00", + X"00",X"EF",X"66",X"00",X"00",X"00",X"00",X"00",X"69",X"00",X"00",X"00",X"00",X"00",X"30",X"00", + X"00",X"00",X"02",X"00",X"02",X"00",X"06",X"66",X"66",X"28",X"68",X"08",X"60",X"66",X"66",X"86", + X"88",X"88",X"00",X"00",X"60",X"66",X"86",X"69",X"00",X"00",X"00",X"66",X"66",X"30",X"00",X"00", + X"00",X"DE",X"66",X"00",X"00",X"00",X"00",X"F0",X"66",X"00",X"00",X"00",X"00",X"00",X"93",X"00", + X"00",X"00",X"00",X"00",X"39",X"00",X"00",X"00",X"00",X"0F",X"66",X"00",X"00",X"00",X"00",X"ED", + X"66",X"00",X"00",X"00",X"00",X"66",X"66",X"03",X"00",X"00",X"06",X"66",X"68",X"96",X"06",X"66", + X"66",X"68",X"88",X"88",X"60",X"66",X"66",X"83",X"86",X"80",X"00",X"00",X"30",X"00",X"30",X"00", + X"00",X"00",X"00",X"00",X"03",X"00",X"00",X"00",X"00",X"00",X"96",X"00",X"00",X"00",X"00",X"FE", + X"66",X"00",X"00",X"00",X"00",X"D6",X"66",X"00",X"00",X"00",X"00",X"66",X"66",X"39",X"00",X"06", + X"66",X"66",X"88",X"68",X"66",X"66",X"66",X"88",X"88",X"88",X"00",X"60",X"63",X"30",X"63",X"00", + X"06",X"26",X"68",X"28",X"60",X"66",X"66",X"86",X"00",X"00",X"66",X"66",X"00",X"00",X"ED",X"66", + X"00",X"00",X"00",X"63",X"90",X"09",X"90",X"99",X"99",X"99",X"90",X"CC",X"90",X"11",X"00",X"11", + X"10",X"11",X"00",X"10",X"10",X"10",X"00",X"10",X"00",X"11",X"10",X"11",X"00",X"11",X"00",X"10", + X"00",X"10",X"10",X"10",X"00",X"11",X"10",X"10",X"10",X"11",X"00",X"10",X"10",X"10",X"10",X"10", + X"00",X"01",X"00",X"01",X"01",X"01",X"00",X"11",X"01",X"11",X"00",X"11",X"00",X"01",X"01",X"01", + X"00",X"01",X"00",X"11",X"00",X"11",X"01",X"11",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"11", + X"01",X"01",X"01",X"11",X"00",X"FF",X"F0",X"FF",X"00",X"FF",X"00",X"F0",X"00",X"F0",X"F0",X"F0", + X"00",X"EE",X"E0",X"E0",X"E0",X"EE",X"00",X"E0",X"E0",X"E0",X"E0",X"E0",X"00",X"DD",X"D0",X"D0", + X"D0",X"DD",X"00",X"D0",X"D0",X"D0",X"D0",X"D0",X"00",X"0F",X"0F",X"0F",X"00",X"0F",X"00",X"FF", + X"00",X"FF",X"0F",X"FF",X"00",X"0E",X"0E",X"0E",X"0E",X"0E",X"00",X"EE",X"0E",X"0E",X"0E",X"EE", + X"00",X"0D",X"0D",X"0D",X"0D",X"0D",X"00",X"DD",X"0D",X"0D",X"0D",X"DD",X"00",X"1C",X"0D",X"7F", + X"E7",X"70",X"00",X"0F",X"71",X"71",X"07",X"DC",X"77",X"7C",X"0D",X"71",X"C7",X"77",X"DE",X"07", + X"71",X"17",X"17",X"DE",X"F7",X"71",X"17",X"71",X"7C",X"DE",X"F0",X"07",X"77",X"C7",X"71",X"17", + X"70",X"70",X"7C",X"D7",X"77",X"77",X"70",X"01",X"CD",X"FF",X"D7",X"70",X"F0",X"00",X"00",X"00", + X"7E",X"C0",X"76",X"7E",X"C0",X"9C",X"7E",X"C0",X"B8",X"7E",X"C0",X"FC",X"7E",X"CB",X"E6",X"7E", + X"CB",X"E0",X"7E",X"CC",X"2C",X"7E",X"CC",X"20",X"7E",X"CC",X"26",X"7E",X"CC",X"AF",X"7E",X"CB", + X"AF",X"7E",X"C7",X"99",X"7E",X"C1",X"27",X"7E",X"C1",X"46",X"7E",X"C2",X"3D",X"7E",X"C2",X"C3", + X"7E",X"C4",X"06",X"7E",X"CC",X"C1",X"7E",X"FF",X"D4",X"7E",X"FF",X"D7",X"BD",X"FF",X"CE",X"C0", + X"02",X"02",X"39",X"BD",X"FF",X"CE",X"C0",X"05",X"02",X"39",X"BD",X"FF",X"CE",X"C0",X"0E",X"02", + X"39",X"BD",X"FF",X"CE",X"C0",X"11",X"02",X"39",X"BD",X"FF",X"CE",X"C0",X"1A",X"02",X"39",X"BD", + X"FF",X"CE",X"C0",X"1D",X"02",X"39",X"BD",X"FF",X"CE",X"C0",X"20",X"02",X"39",X"BD",X"FF",X"CE", + X"C0",X"23",X"02",X"39",X"D9",X"FF",X"BD",X"CA",X"2A",X"C6",X"7A",X"BD",X"C7",X"93",X"CE",X"C0", + X"69",X"8E",X"28",X"70",X"BD",X"C0",X"3C",X"CE",X"C0",X"6B",X"8E",X"40",X"90",X"BD",X"C0",X"3C", + X"C6",X"0F",X"BD",X"CA",X"C8",X"10",X"8E",X"0B",X"B8",X"7E",X"CA",X"44",X"BD",X"CA",X"2A",X"C6", + X"57",X"BD",X"C7",X"93",X"CE",X"C0",X"69",X"8E",X"28",X"70",X"BD",X"C0",X"3C",X"CE",X"C0",X"73", + X"8E",X"38",X"90",X"BD",X"C0",X"3C",X"20",X"29",X"BD",X"CA",X"2A",X"C6",X"57",X"BD",X"C7",X"93", + X"CE",X"C0",X"69",X"8E",X"28",X"60",X"BD",X"C0",X"3C",X"CE",X"C0",X"71",X"8E",X"38",X"80",X"BD", + X"C0",X"3C",X"1F",X"B8",X"81",X"9E",X"27",X"09",X"CE",X"C0",X"73",X"8E",X"38",X"A0",X"BD",X"C0", + X"3C",X"10",X"8E",X"0B",X"B8",X"BD",X"CA",X"57",X"8E",X"CC",X"00",X"BD",X"C0",X"39",X"C5",X"02", + X"27",X"05",X"54",X"25",X"06",X"20",X"4F",X"31",X"3F",X"26",X"EA",X"39",X"1C",X"EF",X"8E",X"C4", + X"7F",X"BD",X"FF",X"A4",X"C1",X"5A",X"26",X"36",X"8E",X"C4",X"00",X"BD",X"C0",X"39",X"C4",X"0F", + X"26",X"01",X"39",X"5F",X"BD",X"C0",X"36",X"8E",X"C4",X"7D",X"BD",X"FF",X"A4",X"4F",X"30",X"1E", + X"BD",X"FF",X"AA",X"C1",X"15",X"26",X"04",X"1C",X"7F",X"20",X"1B",X"C1",X"25",X"26",X"03",X"7E", + X"CC",X"AF",X"C1",X"35",X"26",X"03",X"7E",X"CB",X"BF",X"C1",X"45",X"27",X"01",X"39",X"32",X"62", + X"BD",X"CB",X"CF",X"7E",X"C7",X"99",X"1A",X"10",X"BD",X"CA",X"2A",X"BD",X"FF",X"BF",X"34",X"40", + X"FE",X"FF",X"9F",X"33",X"C8",X"18",X"DF",X"43",X"35",X"40",X"11",X"93",X"43",X"27",X"70",X"DF", + X"5B",X"C6",X"08",X"BD",X"CA",X"AA",X"C6",X"57",X"BD",X"C7",X"93",X"CE",X"C0",X"71",X"8E",X"38", + X"60",X"BD",X"C0",X"3C",X"10",X"8E",X"C0",X"35",X"BD",X"C0",X"6D",X"CC",X"42",X"66",X"DD",X"4A", + X"9E",X"4A",X"30",X"0A",X"9F",X"4A",X"CE",X"C0",X"6D",X"BD",X"C0",X"3C",X"FE",X"FF",X"9F",X"DF", + X"43",X"DE",X"5B",X"DC",X"5B",X"93",X"43",X"54",X"25",X"02",X"33",X"41",X"5C",X"D7",X"3A",X"BD", + X"CB",X"23",X"9E",X"50",X"BD",X"C0",X"4A",X"BD",X"CA",X"69",X"BD",X"FF",X"C2",X"DF",X"5B",X"FE", + X"FF",X"9F",X"33",X"C8",X"18",X"11",X"93",X"5B",X"26",X"C6",X"BD",X"CA",X"0E",X"0D",X"49",X"26", + X"30",X"D6",X"3A",X"BD",X"CA",X"AA",X"10",X"8E",X"C0",X"39",X"BD",X"C0",X"6D",X"20",X"1F",X"1F", + X"A9",X"5D",X"2A",X"3E",X"C6",X"7A",X"BD",X"C7",X"93",X"CE",X"C0",X"77",X"8E",X"38",X"80",X"BD", + X"C0",X"3C",X"10",X"8E",X"C0",X"39",X"BD",X"C0",X"6D",X"C6",X"08",X"BD",X"CA",X"C8",X"BD",X"CA", + X"39",X"BD",X"CA",X"2A",X"5F",X"BD",X"CA",X"AA",X"BD",X"C7",X"91",X"CE",X"C0",X"79",X"8E",X"40", + X"80",X"BD",X"C0",X"3C",X"10",X"8E",X"C0",X"3D",X"BD",X"C0",X"6D",X"10",X"8E",X"13",X"88",X"BD", + X"CA",X"44",X"BD",X"CA",X"57",X"0D",X"49",X"10",X"26",X"00",X"D7",X"0D",X"47",X"26",X"F3",X"8E", + X"C0",X"00",X"C6",X"C0",X"BD",X"C0",X"36",X"86",X"B5",X"3D",X"1E",X"89",X"30",X"01",X"8C",X"C0", + X"10",X"26",X"F1",X"CC",X"00",X"00",X"10",X"8E",X"00",X"0A",X"7E",X"FF",X"C5",X"1F",X"20",X"E8", + X"82",X"A8",X"82",X"DD",X"41",X"9F",X"43",X"BD",X"CA",X"F9",X"BD",X"FF",X"BC",X"BD",X"CA",X"E4", + X"BD",X"CA",X"69",X"C6",X"04",X"BD",X"CA",X"AA",X"C6",X"57",X"BD",X"C7",X"93",X"CE",X"C0",X"73", + X"8E",X"38",X"70",X"BD",X"C0",X"3C",X"10",X"8E",X"C0",X"41",X"BD",X"C0",X"6D",X"DC",X"41",X"4D", + X"26",X"02",X"1F",X"98",X"5F",X"5C",X"44",X"24",X"FC",X"D7",X"3A",X"DC",X"43",X"80",X"03",X"24", + X"FC",X"8B",X"04",X"97",X"3B",X"CE",X"C0",X"6F",X"8E",X"42",X"90",X"BD",X"C0",X"3C",X"D6",X"3B", + X"58",X"58",X"58",X"58",X"DB",X"3A",X"4F",X"9E",X"50",X"BD",X"C0",X"4A",X"BD",X"CA",X"0E",X"0D", + X"49",X"26",X"4F",X"96",X"3B",X"C6",X"10",X"54",X"4A",X"26",X"FC",X"BD",X"CA",X"AA",X"BD",X"CA", + X"0E",X"0D",X"49",X"26",X"3D",X"D6",X"3A",X"BD",X"CA",X"AA",X"10",X"8E",X"C0",X"45",X"BD",X"C0", + X"6D",X"20",X"2C",X"BD",X"CA",X"F9",X"BD",X"FF",X"BC",X"BD",X"CA",X"E4",X"BD",X"CA",X"69",X"10", + X"8C",X"00",X"0A",X"27",X"1D",X"C6",X"7A",X"BD",X"C7",X"93",X"CE",X"C0",X"7B",X"8E",X"28",X"80", + X"BD",X"C0",X"3C",X"10",X"8E",X"C0",X"45",X"BD",X"C0",X"6D",X"C6",X"04",X"BD",X"CA",X"C8",X"BD", + X"CA",X"39",X"BD",X"CA",X"2A",X"1F",X"B8",X"81",X"A2",X"26",X"1D",X"C6",X"02",X"BD",X"CA",X"AA", + X"C6",X"57",X"BD",X"C7",X"93",X"CE",X"C0",X"81",X"8E",X"28",X"80",X"BD",X"C0",X"3C",X"10",X"8E", + X"C0",X"49",X"BD",X"C0",X"6D",X"7E",X"C3",X"BB",X"8B",X"03",X"5F",X"DD",X"41",X"DE",X"41",X"8E", + X"C4",X"00",X"BD",X"C0",X"39",X"E7",X"C0",X"30",X"01",X"8C",X"C5",X"00",X"26",X"F4",X"CC",X"00", + X"10",X"D7",X"3A",X"4F",X"8E",X"C4",X"00",X"D6",X"3A",X"BD",X"C0",X"36",X"30",X"01",X"5C",X"D1", + X"3A",X"26",X"F6",X"8E",X"C4",X"00",X"4C",X"BD",X"C0",X"39",X"D7",X"3B",X"30",X"01",X"BD",X"C0", + X"39",X"D0",X"3B",X"5A",X"C4",X"0F",X"26",X"0E",X"4C",X"26",X"EC",X"BD",X"CA",X"69",X"0D",X"49", + X"26",X"04",X"0A",X"3A",X"26",X"CE",X"DE",X"41",X"8E",X"C4",X"00",X"E6",X"C0",X"BD",X"C0",X"36", + X"30",X"01",X"8C",X"C5",X"00",X"26",X"F4",X"0D",X"49",X"26",X"43",X"96",X"3A",X"27",X"22",X"C6", + X"02",X"BD",X"CA",X"AA",X"C6",X"57",X"BD",X"C7",X"93",X"BD",X"CA",X"69",X"CE",X"C0",X"7D",X"8E", + X"30",X"80",X"BD",X"C0",X"3C",X"BD",X"CA",X"69",X"10",X"8E",X"C0",X"49",X"BD",X"C0",X"6D",X"20", + X"1A",X"C6",X"7A",X"BD",X"C7",X"93",X"CE",X"C0",X"7F",X"8E",X"38",X"80",X"BD",X"C0",X"3C",X"10", + X"8E",X"C0",X"49",X"BD",X"C0",X"6D",X"C6",X"02",X"BD",X"CA",X"C8",X"BD",X"CA",X"39",X"BD",X"CA", + X"2A",X"C6",X"01",X"BD",X"CA",X"AA",X"BD",X"C7",X"91",X"CE",X"C0",X"83",X"8E",X"38",X"80",X"BD", + X"C0",X"3C",X"10",X"8E",X"C0",X"4D",X"BD",X"C0",X"6D",X"10",X"8E",X"13",X"88",X"BD",X"CA",X"44", + X"BD",X"CB",X"67",X"10",X"8E",X"07",X"D0",X"CE",X"C9",X"D8",X"E6",X"C0",X"8E",X"C0",X"00",X"BD", + X"C0",X"36",X"30",X"01",X"8C",X"C0",X"10",X"26",X"F6",X"BD",X"CA",X"44",X"11",X"83",X"C9",X"E0", + X"26",X"E8",X"0D",X"49",X"27",X"E1",X"BD",X"CA",X"2A",X"5F",X"D7",X"41",X"D7",X"42",X"BD",X"CA", + X"AA",X"BD",X"C7",X"91",X"CE",X"C0",X"85",X"8E",X"40",X"78",X"BD",X"C0",X"3C",X"10",X"8E",X"C0", + X"55",X"BD",X"C0",X"6D",X"10",X"8E",X"00",X"01",X"CE",X"C9",X"F0",X"4F",X"8E",X"CC",X"00",X"BD", + X"C0",X"39",X"C5",X"01",X"26",X"09",X"C5",X"02",X"26",X"15",X"BD",X"CA",X"57",X"20",X"ED",X"BD", + X"CA",X"44",X"4C",X"A1",X"C4",X"26",X"04",X"33",X"41",X"20",X"F7",X"97",X"3A",X"88",X"3F",X"C6", + X"13",X"BD",X"CB",X"0B",X"0D",X"49",X"26",X"2E",X"D6",X"3A",X"BD",X"CB",X"0B",X"10",X"8E",X"03", + X"E8",X"DC",X"41",X"8E",X"5A",X"8C",X"BD",X"C0",X"51",X"D6",X"3A",X"BD",X"CB",X"23",X"4F",X"DD", + X"41",X"8E",X"5A",X"8C",X"BD",X"C0",X"4A",X"96",X"3A",X"81",X"1F",X"26",X"AF",X"1F",X"A9",X"5D", + X"10",X"2A",X"01",X"01",X"20",X"A2",X"BD",X"CA",X"2A",X"BD",X"C7",X"91",X"CE",X"C0",X"87",X"8E", + X"38",X"20",X"BD",X"C0",X"3C",X"10",X"8E",X"C0",X"59",X"BD",X"C0",X"6D",X"1F",X"B8",X"C6",X"62", + X"DD",X"41",X"CB",X"26",X"1F",X"01",X"86",X"FF",X"A7",X"82",X"9C",X"41",X"26",X"FA",X"0F",X"5D", + X"0F",X"5E",X"0F",X"5F",X"0F",X"60",X"0F",X"61",X"86",X"01",X"97",X"3C",X"8E",X"CC",X"00",X"DE", + X"41",X"33",X"5B",X"4F",X"BD",X"C0",X"39",X"8C",X"CC",X"06",X"26",X"02",X"C4",X"7F",X"81",X"18", + X"26",X"02",X"C4",X"CF",X"D7",X"3A",X"E8",X"C0",X"26",X"38",X"8B",X"08",X"30",X"02",X"8C",X"CC", + X"02",X"27",X"F9",X"8C",X"CC",X"08",X"26",X"DC",X"81",X"28",X"27",X"15",X"30",X"1E",X"BD",X"C0", + X"39",X"5D",X"2A",X"0D",X"C6",X"34",X"30",X"01",X"BD",X"C0",X"36",X"30",X"1D",X"0C",X"3C",X"20", + X"C3",X"C6",X"3C",X"8E",X"CC",X"07",X"BD",X"C0",X"36",X"BD",X"CA",X"69",X"0D",X"49",X"27",X"A8", + X"20",X"73",X"D7",X"3B",X"C6",X"01",X"D5",X"3B",X"26",X"04",X"4C",X"58",X"20",X"F8",X"9E",X"41", + X"D5",X"3A",X"26",X"14",X"E8",X"C2",X"E7",X"C4",X"A1",X"80",X"26",X"FC",X"63",X"82",X"8D",X"3C", + X"CC",X"38",X"08",X"BD",X"FF",X"B9",X"20",X"C9",X"E8",X"C2",X"E7",X"C4",X"C6",X"08",X"BD",X"CB", + X"0B",X"6D",X"80",X"2A",X"FC",X"A7",X"82",X"34",X"02",X"8D",X"21",X"BD",X"C0",X"3C",X"35",X"02", + X"81",X"08",X"25",X"AD",X"44",X"81",X"06",X"27",X"A8",X"8E",X"CC",X"06",X"BD",X"C0",X"39",X"5D", + X"2A",X"9F",X"9E",X"50",X"4F",X"D6",X"3C",X"BD",X"C0",X"4A",X"20",X"95",X"CE",X"C0",X"8B",X"81", + X"18",X"25",X"02",X"80",X"10",X"48",X"33",X"C6",X"1F",X"10",X"93",X"41",X"86",X"0A",X"3D",X"C3", + X"38",X"30",X"1F",X"01",X"39",X"BD",X"CA",X"2A",X"BD",X"C7",X"91",X"CE",X"C0",X"89",X"8E",X"28", + X"80",X"BD",X"C0",X"3C",X"10",X"8E",X"C0",X"5D",X"BD",X"C0",X"6D",X"8E",X"CC",X"00",X"CE",X"C9", + X"F4",X"BD",X"C0",X"39",X"C5",X"01",X"27",X"14",X"10",X"8E",X"13",X"88",X"BD",X"CA",X"44",X"0D", + X"49",X"10",X"26",X"01",X"E4",X"BD",X"C0",X"39",X"C5",X"01",X"26",X"09",X"BD",X"CA",X"0E",X"0D", + X"49",X"10",X"26",X"01",X"D4",X"34",X"70",X"AD",X"D4",X"35",X"70",X"33",X"42",X"11",X"83",X"C9", + X"FE",X"26",X"CE",X"10",X"8E",X"13",X"88",X"BD",X"CA",X"44",X"1F",X"A9",X"5D",X"10",X"2A",X"FB", + X"65",X"20",X"BB",X"BD",X"CA",X"69",X"BD",X"FF",X"BC",X"BD",X"CA",X"F9",X"8E",X"C0",X"01",X"C6", + X"FF",X"BD",X"C0",X"36",X"8E",X"C0",X"02",X"C6",X"C0",X"BD",X"C0",X"36",X"8E",X"C0",X"03",X"C6", + X"38",X"BD",X"C0",X"36",X"8E",X"C0",X"04",X"C6",X"07",X"BD",X"C0",X"36",X"BD",X"CA",X"69",X"10", + X"8E",X"C6",X"F7",X"CC",X"01",X"01",X"AE",X"A4",X"ED",X"81",X"AC",X"22",X"26",X"FA",X"31",X"24", + X"10",X"8C",X"C7",X"1F",X"26",X"F0",X"BD",X"CA",X"69",X"86",X"11",X"10",X"8E",X"C6",X"D7",X"AE", + X"A4",X"9F",X"45",X"A7",X"84",X"0C",X"45",X"9E",X"45",X"AC",X"22",X"26",X"F6",X"31",X"24",X"10", + X"8C",X"C6",X"F7",X"26",X"EA",X"BD",X"CA",X"69",X"10",X"8E",X"C7",X"1F",X"AE",X"A4",X"9F",X"45", + X"A6",X"24",X"A7",X"84",X"0C",X"45",X"9E",X"45",X"AC",X"22",X"26",X"F6",X"31",X"25",X"10",X"8C", + X"C7",X"5B",X"26",X"E8",X"BD",X"CA",X"69",X"10",X"8E",X"C7",X"5B",X"AE",X"A4",X"A6",X"24",X"A7", + X"80",X"AC",X"22",X"26",X"FA",X"31",X"25",X"10",X"8C",X"C7",X"6F",X"26",X"EE",X"BD",X"CA",X"69", + X"86",X"21",X"B7",X"46",X"7E",X"86",X"20",X"B7",X"96",X"7E",X"8E",X"4E",X"0A",X"A6",X"84",X"84", + X"F0",X"8A",X"02",X"A7",X"80",X"8C",X"4E",X"6D",X"26",X"F3",X"8E",X"4E",X"90",X"A6",X"84",X"84", + X"F0",X"8A",X"02",X"A7",X"80",X"8C",X"4E",X"F3",X"26",X"F3",X"BD",X"CA",X"69",X"8E",X"0E",X"18", + X"9F",X"45",X"9E",X"45",X"A6",X"84",X"84",X"F0",X"8A",X"01",X"A7",X"84",X"D6",X"46",X"CB",X"22", + X"25",X"04",X"D7",X"46",X"20",X"EC",X"C6",X"18",X"D7",X"46",X"D6",X"45",X"CB",X"10",X"D7",X"45", + X"C1",X"9E",X"26",X"DE",X"7E",X"CA",X"69",X"07",X"07",X"97",X"07",X"07",X"29",X"97",X"29",X"07", + X"4B",X"97",X"4B",X"07",X"6D",X"97",X"6D",X"07",X"8F",X"97",X"8F",X"07",X"B1",X"97",X"B1",X"07", + X"D3",X"97",X"D3",X"07",X"F5",X"97",X"F5",X"06",X"07",X"06",X"F5",X"16",X"07",X"16",X"F5",X"26", + X"07",X"26",X"F5",X"36",X"07",X"36",X"F5",X"46",X"07",X"46",X"F5",X"56",X"07",X"56",X"F5",X"66", + X"07",X"66",X"F5",X"76",X"07",X"76",X"F5",X"86",X"07",X"86",X"F5",X"96",X"07",X"96",X"F5",X"48", + X"05",X"55",X"05",X"44",X"48",X"06",X"55",X"06",X"44",X"48",X"07",X"55",X"07",X"00",X"48",X"08", + X"55",X"08",X"33",X"48",X"09",X"55",X"09",X"33",X"48",X"F3",X"55",X"F3",X"33",X"48",X"F4",X"55", + X"F4",X"33",X"48",X"F5",X"55",X"F5",X"00",X"48",X"F6",X"55",X"F6",X"44",X"48",X"F7",X"55",X"F7", + X"44",X"07",X"7E",X"46",X"7E",X"22",X"57",X"7E",X"96",X"7E",X"22",X"05",X"6F",X"05",X"8E",X"04", + X"06",X"6F",X"06",X"8E",X"30",X"96",X"6F",X"96",X"8E",X"00",X"97",X"6F",X"97",X"8E",X"34",X"BD", + X"FF",X"BC",X"C6",X"05",X"8E",X"C0",X"00",X"8D",X"03",X"8E",X"C0",X"0C",X"7E",X"C0",X"36",X"C6", + X"28",X"20",X"F1",X"C6",X"80",X"20",X"ED",X"10",X"8E",X"C9",X"FE",X"BD",X"CA",X"97",X"7E",X"CB", + X"3B",X"C6",X"A5",X"8E",X"C0",X"01",X"7E",X"C0",X"36",X"BD",X"CA",X"69",X"BD",X"CA",X"2A",X"8D", + X"F0",X"CE",X"C0",X"D7",X"8E",X"28",X"20",X"BD",X"CA",X"69",X"BD",X"C0",X"3C",X"10",X"8E",X"C0", + X"61",X"BD",X"C0",X"6D",X"10",X"8E",X"05",X"DC",X"BD",X"CA",X"44",X"0D",X"49",X"26",X"60",X"0F", + X"3C",X"86",X"01",X"97",X"3B",X"32",X"E8",X"E0",X"BD",X"FF",X"BC",X"CE",X"C0",X"D7",X"8E",X"28", + X"20",X"BD",X"CA",X"69",X"BD",X"C0",X"3C",X"0F",X"3A",X"10",X"8E",X"C0",X"65",X"BD",X"C0",X"66", + X"BD",X"CA",X"69",X"86",X"20",X"1F",X"89",X"5A",X"30",X"E4",X"A7",X"80",X"5A",X"26",X"FB",X"86", + X"2F",X"A7",X"80",X"30",X"E4",X"BD",X"CA",X"57",X"8E",X"CC",X"00",X"BD",X"C0",X"39",X"C5",X"02", + X"27",X"23",X"C5",X"01",X"26",X"0C",X"0C",X"3B",X"0A",X"3C",X"2A",X"19",X"C6",X"1B",X"D7",X"3C", + X"20",X"13",X"0C",X"3C",X"0C",X"3B",X"86",X"1C",X"91",X"3C",X"26",X"09",X"32",X"E8",X"20",X"BD", + X"CA",X"69",X"7E",X"FF",X"C8",X"BD",X"C9",X"7A",X"0D",X"3B",X"27",X"C9",X"D6",X"3C",X"C1",X"09", + X"26",X"25",X"8E",X"C4",X"87",X"BD",X"FF",X"A4",X"5D",X"27",X"1C",X"C1",X"08",X"22",X"05",X"BD", + X"CB",X"99",X"20",X"13",X"8E",X"C4",X"87",X"34",X"10",X"C6",X"01",X"BD",X"FF",X"AD",X"BD",X"CB", + X"99",X"5F",X"35",X"10",X"BD",X"FF",X"AD",X"8D",X"38",X"96",X"3A",X"81",X"06",X"27",X"0E",X"4D", + X"26",X"04",X"86",X"64",X"20",X"02",X"86",X"06",X"97",X"3A",X"4C",X"C6",X"FF",X"BD",X"CA",X"57", + X"4A",X"27",X"19",X"8E",X"CC",X"00",X"34",X"04",X"BD",X"C0",X"39",X"C5",X"0A",X"26",X"04",X"1C", + X"FE",X"20",X"02",X"1A",X"01",X"35",X"04",X"56",X"26",X"E3",X"0F",X"3A",X"0F",X"3B",X"7E",X"C7", + X"F5",X"31",X"62",X"8E",X"10",X"80",X"BD",X"C0",X"58",X"BD",X"C9",X"1F",X"96",X"3C",X"4C",X"BD", + X"C9",X"02",X"BD",X"C9",X"10",X"ED",X"84",X"D6",X"3C",X"58",X"58",X"8E",X"CC",X"D6",X"3A",X"10", + X"AE",X"84",X"EE",X"02",X"30",X"6E",X"A6",X"A0",X"81",X"2F",X"27",X"04",X"A7",X"80",X"20",X"F6", + X"1F",X"30",X"33",X"62",X"8E",X"C4",X"00",X"3A",X"BD",X"FF",X"A4",X"34",X"06",X"D6",X"3C",X"5C", + X"C1",X"07",X"22",X"13",X"35",X"06",X"1F",X"98",X"BD",X"C9",X"10",X"ED",X"47",X"BD",X"FF",X"A1", + X"BD",X"C9",X"10",X"ED",X"49",X"20",X"13",X"C1",X"08",X"26",X"09",X"CC",X"30",X"30",X"ED",X"49", + X"33",X"5E",X"20",X"E0",X"35",X"06",X"1F",X"98",X"20",X"E6",X"8E",X"10",X"80",X"31",X"62",X"7E", + X"C0",X"5F",X"34",X"04",X"1F",X"89",X"86",X"99",X"8B",X"01",X"19",X"5A",X"2A",X"FA",X"35",X"84", + X"1F",X"89",X"84",X"F0",X"44",X"44",X"44",X"44",X"8B",X"30",X"C4",X"0F",X"CB",X"30",X"39",X"86", + X"20",X"1F",X"89",X"5A",X"30",X"64",X"A7",X"80",X"5A",X"26",X"FB",X"86",X"2F",X"A7",X"80",X"30", + X"64",X"39",X"8C",X"C4",X"81",X"26",X"1A",X"BD",X"FF",X"A7",X"30",X"1C",X"1E",X"89",X"8B",X"10", + X"19",X"24",X"07",X"1E",X"89",X"8B",X"01",X"19",X"1E",X"89",X"1E",X"89",X"0C",X"3B",X"7E",X"FF", + X"B0",X"BD",X"FF",X"A1",X"8B",X"01",X"19",X"30",X"1E",X"0C",X"3B",X"7E",X"FF",X"AA",X"8C",X"C4", + X"81",X"26",X"10",X"BD",X"FF",X"A7",X"30",X"1C",X"1E",X"89",X"8B",X"90",X"19",X"1E",X"89",X"89", + X"99",X"20",X"D4",X"BD",X"FF",X"A1",X"8B",X"99",X"20",X"DC",X"D6",X"3C",X"5C",X"C1",X"07",X"22", + X"01",X"39",X"C1",X"09",X"23",X"11",X"C1",X"10",X"22",X"0D",X"C1",X"0A",X"27",X"09",X"8E",X"C4", + X"87",X"BD",X"FF",X"A1",X"4D",X"26",X"EA",X"5A",X"58",X"58",X"8E",X"CC",X"D6",X"3A",X"E6",X"03", + X"8E",X"C4",X"00",X"3A",X"34",X"10",X"BD",X"CA",X"57",X"8E",X"CC",X"00",X"BD",X"C0",X"39",X"C5", + X"02",X"27",X"02",X"35",X"90",X"C5",X"08",X"26",X"04",X"0F",X"3A",X"20",X"E9",X"35",X"10",X"8C", + X"C4",X"7D",X"26",X"0C",X"34",X"14",X"8E",X"C4",X"00",X"C6",X"01",X"BD",X"C0",X"36",X"35",X"14", + X"54",X"10",X"25",X"FF",X"5D",X"7E",X"C9",X"5E",X"02",X"03",X"04",X"10",X"18",X"20",X"40",X"80", + X"00",X"FF",X"11",X"EE",X"22",X"DD",X"33",X"CC",X"44",X"BB",X"55",X"AA",X"66",X"99",X"77",X"88", + X"13",X"1B",X"1C",X"00",X"C5",X"E3",X"C7",X"6F",X"C7",X"7F",X"C7",X"83",X"C7",X"87",X"05",X"05", + X"28",X"28",X"80",X"80",X"00",X"00",X"AD",X"AD",X"2D",X"2D",X"A8",X"A8",X"85",X"85",X"8E",X"CC", + X"00",X"10",X"8E",X"00",X"64",X"BD",X"CA",X"44",X"BD",X"C0",X"39",X"C5",X"02",X"26",X"F6",X"BD", + X"CA",X"44",X"BD",X"C0",X"39",X"C5",X"02",X"27",X"F6",X"39",X"BD",X"FF",X"BC",X"8D",X"3A",X"BD", + X"CA",X"F9",X"0A",X"49",X"2A",X"02",X"0F",X"49",X"39",X"10",X"8E",X"00",X"01",X"8D",X"05",X"0D", + X"49",X"27",X"FA",X"39",X"34",X"23",X"8D",X"21",X"0D",X"49",X"26",X"09",X"86",X"B2",X"4A",X"26", + X"FD",X"31",X"3F",X"26",X"F1",X"35",X"A3",X"34",X"24",X"D6",X"49",X"0F",X"49",X"10",X"8E",X"00", + X"0A",X"8D",X"E1",X"DB",X"49",X"D7",X"49",X"35",X"A4",X"34",X"15",X"C6",X"38",X"8E",X"C3",X"FC", + X"BD",X"C0",X"36",X"8E",X"CC",X"00",X"BD",X"C0",X"39",X"53",X"C4",X"03",X"27",X"02",X"1C",X"FE", + X"D6",X"47",X"56",X"D7",X"47",X"26",X"02",X"D7",X"48",X"53",X"26",X"09",X"D6",X"48",X"26",X"05", + X"53",X"D7",X"48",X"0C",X"49",X"35",X"95",X"34",X"34",X"8E",X"C0",X"00",X"E6",X"A0",X"BD",X"C0", + X"36",X"30",X"01",X"8C",X"C0",X"10",X"26",X"F4",X"35",X"B4",X"34",X"14",X"54",X"56",X"56",X"56", + X"2A",X"01",X"5C",X"56",X"56",X"8E",X"CC",X"00",X"BD",X"C0",X"36",X"58",X"58",X"58",X"CA",X"3F", + X"8E",X"CC",X"02",X"BD",X"C0",X"36",X"35",X"94",X"34",X"26",X"86",X"02",X"10",X"8E",X"01",X"F4", + X"BD",X"CA",X"AA",X"BD",X"CA",X"44",X"5F",X"BD",X"CA",X"AA",X"BD",X"CA",X"44",X"E6",X"61",X"4A", + X"26",X"EE",X"35",X"26",X"34",X"06",X"0F",X"52",X"0F",X"49",X"86",X"01",X"97",X"48",X"86",X"03", + X"97",X"36",X"CC",X"FF",X"FF",X"DD",X"59",X"35",X"86",X"34",X"14",X"5F",X"8E",X"C0",X"00",X"BD", + X"C0",X"36",X"30",X"01",X"8C",X"C0",X"10",X"26",X"F6",X"35",X"94",X"34",X"14",X"53",X"C4",X"3F", + X"8E",X"CC",X"02",X"BD",X"C0",X"36",X"BD",X"CA",X"57",X"C6",X"3F",X"BD",X"C0",X"36",X"BD",X"CA", + X"57",X"35",X"94",X"34",X"02",X"1F",X"98",X"84",X"0F",X"8B",X"00",X"19",X"C4",X"F0",X"27",X"07", + X"8B",X"16",X"19",X"C0",X"10",X"20",X"F7",X"1F",X"89",X"35",X"82",X"34",X"16",X"CC",X"00",X"00", + X"8E",X"00",X"00",X"9F",X"3D",X"30",X"89",X"0F",X"00",X"ED",X"83",X"9C",X"3D",X"26",X"FA",X"30", + X"89",X"09",X"00",X"4D",X"26",X"03",X"8E",X"0F",X"00",X"BD",X"CA",X"69",X"0D",X"49",X"26",X"05", + X"C3",X"11",X"11",X"24",X"DE",X"35",X"96",X"BD",X"CA",X"F9",X"8E",X"00",X"00",X"10",X"8E",X"C9", + X"E0",X"9F",X"3D",X"30",X"89",X"0F",X"00",X"A6",X"A0",X"1F",X"89",X"ED",X"83",X"9C",X"3D",X"26", + X"FA",X"30",X"89",X"09",X"00",X"4D",X"26",X"03",X"8E",X"0F",X"00",X"BD",X"CA",X"69",X"0D",X"49", + X"26",X"06",X"10",X"8C",X"C9",X"F0",X"26",X"D9",X"39",X"8E",X"C4",X"87",X"BD",X"FF",X"AD",X"58", + X"34",X"04",X"58",X"EB",X"E0",X"8E",X"CF",X"10",X"3A",X"10",X"8E",X"C4",X"89",X"C6",X"06",X"34", + X"02",X"A6",X"80",X"1E",X"12",X"BD",X"FF",X"AA",X"1E",X"12",X"5A",X"26",X"F4",X"35",X"82",X"C6", + X"0E",X"20",X"01",X"5F",X"8E",X"C4",X"00",X"4F",X"BD",X"FF",X"AA",X"5A",X"26",X"FA",X"39",X"34", + X"36",X"8D",X"F0",X"8E",X"CE",X"CF",X"10",X"8E",X"C4",X"1D",X"C6",X"47",X"8D",X"D1",X"35",X"B6", + X"34",X"16",X"86",X"01",X"20",X"02",X"34",X"16",X"C4",X"07",X"27",X"1F",X"58",X"58",X"8E",X"C3", + X"FD",X"3A",X"BD",X"FF",X"A4",X"34",X"04",X"BD",X"FF",X"A4",X"34",X"04",X"AB",X"E0",X"19",X"1E", + X"89",X"35",X"02",X"89",X"00",X"19",X"30",X"1C",X"BD",X"FF",X"B0",X"35",X"96",X"34",X"12",X"9B", + X"37",X"19",X"24",X"02",X"86",X"99",X"97",X"37",X"8E",X"C4",X"7D",X"BD",X"FF",X"AA",X"35",X"92", + X"34",X"16",X"C6",X"03",X"20",X"0A",X"34",X"16",X"C6",X"02",X"20",X"04",X"34",X"16",X"C6",X"01", + X"BD",X"CB",X"E0",X"58",X"8E",X"C4",X"87",X"3A",X"BD",X"FF",X"A4",X"8D",X"62",X"96",X"39",X"34", + X"04",X"AB",X"E4",X"97",X"39",X"96",X"38",X"AB",X"E0",X"97",X"38",X"8E",X"C4",X"93",X"BD",X"FF", + X"A4",X"8D",X"4C",X"34",X"04",X"A1",X"E0",X"24",X"02",X"35",X"96",X"8E",X"C4",X"8F",X"BD",X"FF", + X"A4",X"8D",X"3C",X"8D",X"24",X"34",X"02",X"D7",X"38",X"8E",X"C4",X"91",X"BD",X"FF",X"A4",X"96", + X"39",X"8D",X"2C",X"8D",X"14",X"4D",X"27",X"04",X"0F",X"38",X"0F",X"39",X"AB",X"E0",X"19",X"C6", + X"04",X"BD",X"CB",X"E6",X"BD",X"CC",X"0D",X"35",X"96",X"34",X"04",X"5D",X"26",X"03",X"4F",X"35", + X"84",X"1E",X"89",X"86",X"99",X"8B",X"01",X"19",X"E0",X"E4",X"24",X"F9",X"EB",X"E0",X"39",X"34", + X"02",X"1E",X"89",X"5F",X"4D",X"26",X"02",X"35",X"82",X"8B",X"99",X"19",X"5C",X"20",X"F5",X"34", + X"36",X"8E",X"CE",X"CF",X"10",X"8E",X"C4",X"1D",X"C6",X"30",X"BD",X"CB",X"AF",X"8D",X"02",X"35", + X"B6",X"34",X"36",X"10",X"8E",X"CE",X"CF",X"8E",X"B2",X"60",X"C6",X"30",X"A6",X"A0",X"BD",X"FF", + X"AA",X"5A",X"26",X"F8",X"35",X"B6",X"CD",X"46",X"00",X"01",X"CD",X"51",X"00",X"05",X"CD",X"5E", + X"00",X"09",X"CD",X"6A",X"00",X"0D",X"CD",X"75",X"00",X"11",X"CD",X"7F",X"00",X"15",X"CD",X"8A", + X"00",X"19",X"CD",X"96",X"00",X"81",X"CD",X"A7",X"00",X"85",X"CD",X"B7",X"00",X"87",X"CD",X"C6", + X"00",X"89",X"CD",X"D5",X"00",X"8B",X"CD",X"E6",X"00",X"8D",X"CD",X"F6",X"00",X"8F",X"CE",X"07", + X"00",X"91",X"CE",X"17",X"00",X"93",X"CE",X"25",X"00",X"95",X"CE",X"2F",X"00",X"97",X"CE",X"3D", + X"00",X"99",X"CE",X"4B",X"00",X"9B",X"CE",X"59",X"00",X"9D",X"CE",X"67",X"00",X"9F",X"CE",X"75", + X"00",X"A1",X"CE",X"83",X"00",X"A3",X"CE",X"91",X"00",X"A5",X"CE",X"9F",X"00",X"A7",X"CE",X"AD", + X"00",X"A9",X"CE",X"BC",X"00",X"7D",X"43",X"4F",X"49",X"4E",X"53",X"20",X"4C",X"45",X"46",X"54", + X"2F",X"43",X"4F",X"49",X"4E",X"53",X"20",X"43",X"45",X"4E",X"54",X"45",X"52",X"2F",X"43",X"4F", + X"49",X"4E",X"53",X"20",X"52",X"49",X"47",X"48",X"54",X"2F",X"54",X"4F",X"54",X"41",X"4C",X"20", + X"50",X"41",X"49",X"44",X"2F",X"53",X"48",X"49",X"50",X"53",X"20",X"57",X"4F",X"4E",X"2F",X"54", + X"4F",X"54",X"41",X"4C",X"20",X"54",X"49",X"4D",X"45",X"2F",X"54",X"4F",X"54",X"41",X"4C",X"20", + X"53",X"48",X"49",X"50",X"53",X"2F",X"42",X"4F",X"4E",X"55",X"53",X"20",X"53",X"48",X"49",X"50", + X"20",X"4C",X"45",X"56",X"45",X"4C",X"2F",X"4E",X"55",X"4D",X"42",X"45",X"52",X"20",X"4F",X"46", + X"20",X"53",X"48",X"49",X"50",X"53",X"2F",X"43",X"4F",X"49",X"4E",X"41",X"47",X"45",X"20",X"53", + X"45",X"4C",X"45",X"43",X"54",X"2F",X"4C",X"45",X"46",X"54",X"20",X"43",X"4F",X"49",X"4E",X"20", + X"4D",X"55",X"4C",X"54",X"2F",X"43",X"45",X"4E",X"54",X"45",X"52",X"20",X"43",X"4F",X"49",X"4E", + X"20",X"4D",X"55",X"4C",X"54",X"2F",X"52",X"49",X"47",X"48",X"54",X"20",X"43",X"4F",X"49",X"4E", + X"20",X"4D",X"55",X"4C",X"54",X"2F",X"43",X"4F",X"49",X"4E",X"53",X"20",X"46",X"4F",X"52",X"20", + X"43",X"52",X"45",X"44",X"49",X"54",X"2F",X"43",X"4F",X"49",X"4E",X"53",X"20",X"46",X"4F",X"52", + X"20",X"42",X"4F",X"4E",X"55",X"53",X"2F",X"4D",X"49",X"4E",X"49",X"4D",X"55",X"4D",X"20",X"43", + X"4F",X"49",X"4E",X"53",X"2F",X"46",X"52",X"45",X"45",X"20",X"50",X"4C",X"41",X"59",X"2F",X"47", + X"41",X"4D",X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"31",X"2F",X"47",X"41",X"4D", + X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"32",X"2F",X"47",X"41",X"4D",X"45",X"20", + X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"33",X"2F",X"47",X"41",X"4D",X"45",X"20",X"41",X"44", + X"4A",X"55",X"53",X"54",X"20",X"34",X"2F",X"47",X"41",X"4D",X"45",X"20",X"41",X"44",X"4A",X"55", + X"53",X"54",X"20",X"35",X"2F",X"47",X"41",X"4D",X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54", + X"20",X"36",X"2F",X"47",X"41",X"4D",X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"37", + X"2F",X"47",X"41",X"4D",X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"38",X"2F",X"47", + X"41",X"4D",X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"39",X"2F",X"47",X"41",X"4D", + X"45",X"20",X"41",X"44",X"4A",X"55",X"53",X"54",X"20",X"31",X"30",X"2F",X"53",X"50",X"45",X"43", + X"49",X"41",X"4C",X"20",X"46",X"55",X"4E",X"43",X"54",X"49",X"4F",X"4E",X"2F",X"FF",X"FF",X"02", + X"12",X"70",X"44",X"52",X"4A",X"01",X"83",X"15",X"53",X"41",X"4D",X"01",X"59",X"20",X"4C",X"45", + X"44",X"01",X"42",X"85",X"50",X"47",X"44",X"01",X"25",X"20",X"43",X"52",X"42",X"01",X"10",X"35", + X"4D",X"52",X"53",X"00",X"82",X"65",X"53",X"53",X"52",X"00",X"60",X"10",X"54",X"4D",X"48",X"00", + X"5A",X"01",X"00",X"03",X"03",X"01",X"04",X"01",X"01",X"00",X"00",X"00",X"05",X"15",X"01",X"05", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"04",X"01",X"02",X"04",X"00",X"06",X"00",X"01",X"01", + X"00",X"00",X"01",X"04",X"01",X"01",X"00",X"00",X"01",X"16",X"06",X"02",X"00",X"00",X"01",X"04", + X"01",X"02",X"00",X"00",X"01",X"00",X"04",X"01",X"00",X"00",X"01",X"00",X"02",X"01",X"00",X"00", + X"01",X"00",X"02",X"02",X"00",X"00",X"43",X"4F",X"50",X"59",X"52",X"49",X"47",X"48",X"54",X"20", + X"31",X"39",X"38",X"30",X"20",X"2D",X"20",X"57",X"49",X"4C",X"4C",X"49",X"41",X"4D",X"53",X"20", + X"45",X"4C",X"45",X"43",X"54",X"52",X"4F",X"4E",X"49",X"43",X"53",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"4A",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"7E",X"C0",X"15",X"7E",X"C0",X"92",X"7E",X"C2",X"62",X"7E",X"C2",X"9A",X"C4",X"50",X"7E",X"C5", + X"D0",X"C6",X"BA",X"C7",X"72",X"DC",X"20",X"C4",X"E0",X"DD",X"17",X"C3",X"26",X"10",X"DD",X"15", + X"0F",X"0F",X"8E",X"C3",X"4F",X"9F",X"09",X"86",X"E0",X"97",X"11",X"BD",X"C2",X"AA",X"8E",X"00", + X"10",X"9C",X"15",X"27",X"12",X"96",X"0D",X"2A",X"04",X"0A",X"11",X"20",X"02",X"0C",X"11",X"BD", + X"C2",X"AA",X"30",X"88",X"20",X"20",X"EA",X"DC",X"09",X"DD",X"03",X"96",X"0F",X"97",X"00",X"96", + X"0D",X"97",X"01",X"96",X"11",X"97",X"02",X"8E",X"B7",X"00",X"9F",X"05",X"8E",X"BA",X"90",X"9F", + X"07",X"DC",X"15",X"83",X"00",X"20",X"DD",X"15",X"10",X"93",X"17",X"2B",X"05",X"BD",X"C1",X"2C", + X"20",X"EF",X"DC",X"03",X"DD",X"0B",X"96",X"00",X"97",X"10",X"96",X"01",X"97",X"0E",X"96",X"02", + X"97",X"12",X"10",X"8E",X"BE",X"20",X"8E",X"00",X"00",X"AF",X"A1",X"10",X"8C",X"BF",X"50",X"26", + X"F8",X"39",X"DC",X"20",X"C4",X"E0",X"93",X"15",X"58",X"49",X"58",X"49",X"58",X"49",X"97",X"00", + X"27",X"20",X"2B",X"10",X"DC",X"15",X"C3",X"00",X"20",X"DD",X"15",X"BD",X"C1",X"CD",X"0A",X"00", + X"26",X"F2",X"20",X"0E",X"DC",X"15",X"83",X"00",X"20",X"DD",X"15",X"BD",X"C1",X"2C",X"0C",X"00", + X"26",X"F2",X"DC",X"20",X"C4",X"E0",X"DD",X"15",X"8E",X"00",X"00",X"10",X"8E",X"BE",X"20",X"10", + X"DF",X"13",X"10",X"DE",X"05",X"C5",X"20",X"26",X"03",X"10",X"DE",X"07",X"86",X"98",X"AF",X"B4", + X"35",X"44",X"ED",X"A4",X"EF",X"B1",X"4A",X"AF",X"B4",X"35",X"44",X"ED",X"A4",X"EF",X"B1",X"4A", + X"AF",X"B4",X"35",X"44",X"ED",X"A4",X"EF",X"B1",X"4A",X"AF",X"B4",X"35",X"44",X"ED",X"A4",X"EF", + X"B1",X"4A",X"AF",X"B4",X"35",X"44",X"ED",X"A4",X"EF",X"B1",X"4A",X"AF",X"B4",X"35",X"44",X"ED", + X"A4",X"EF",X"B1",X"4A",X"AF",X"B4",X"35",X"44",X"ED",X"A4",X"EF",X"B1",X"4A",X"AF",X"B4",X"35", + X"44",X"ED",X"A4",X"EF",X"B1",X"4A",X"26",X"B6",X"10",X"DE",X"13",X"39",X"BD",X"C3",X"23",X"2B", + X"04",X"0A",X"12",X"20",X"02",X"0C",X"12",X"86",X"20",X"95",X"16",X"26",X"48",X"9E",X"07",X"BD", + X"C2",X"F6",X"2B",X"20",X"0A",X"11",X"96",X"11",X"A7",X"84",X"A7",X"89",X"01",X"C8",X"CC",X"70", + X"07",X"ED",X"01",X"ED",X"89",X"01",X"C9",X"30",X"03",X"8C",X"BC",X"58",X"26",X"03",X"8E",X"BA", + X"90",X"9F",X"07",X"39",X"96",X"11",X"A7",X"84",X"A7",X"89",X"01",X"C8",X"4C",X"97",X"11",X"CC", + X"07",X"70",X"ED",X"01",X"ED",X"89",X"01",X"C9",X"30",X"03",X"8C",X"BC",X"58",X"26",X"03",X"8E", + X"BA",X"90",X"9F",X"07",X"39",X"9E",X"05",X"BD",X"C2",X"F6",X"2B",X"20",X"0A",X"11",X"96",X"11", + X"A7",X"84",X"A7",X"89",X"01",X"C8",X"CC",X"70",X"07",X"ED",X"01",X"ED",X"89",X"01",X"C9",X"30", + X"03",X"8C",X"B8",X"C8",X"26",X"03",X"8E",X"B7",X"00",X"9F",X"05",X"39",X"96",X"11",X"A7",X"84", + X"A7",X"89",X"01",X"C8",X"4C",X"97",X"11",X"CC",X"07",X"70",X"ED",X"01",X"ED",X"89",X"01",X"C9", + X"30",X"03",X"8C",X"B8",X"C8",X"26",X"03",X"8E",X"B7",X"00",X"9F",X"05",X"39",X"96",X"0D",X"2A", + X"04",X"0A",X"11",X"20",X"02",X"0C",X"11",X"BD",X"C2",X"AA",X"86",X"20",X"95",X"16",X"27",X"41", + X"9E",X"07",X"30",X"1D",X"8C",X"BA",X"8D",X"26",X"03",X"8E",X"BC",X"55",X"9F",X"07",X"96",X"0E", + X"2A",X"17",X"0A",X"12",X"96",X"12",X"A7",X"84",X"A7",X"89",X"01",X"C8",X"CC",X"07",X"70",X"ED", + X"01",X"ED",X"89",X"01",X"C9",X"BD",X"C2",X"D0",X"39",X"96",X"12",X"A7",X"84",X"A7",X"89",X"01", + X"C8",X"4C",X"97",X"12",X"CC",X"70",X"07",X"ED",X"01",X"ED",X"89",X"01",X"C9",X"BD",X"C2",X"D0", + X"39",X"9E",X"05",X"30",X"1D",X"8C",X"B6",X"FD",X"26",X"03",X"8E",X"B8",X"C5",X"9F",X"05",X"96", + X"0E",X"2A",X"17",X"0A",X"12",X"96",X"12",X"A7",X"84",X"A7",X"89",X"01",X"C8",X"CC",X"07",X"70", + X"ED",X"01",X"ED",X"89",X"01",X"C9",X"BD",X"C2",X"D0",X"39",X"96",X"12",X"A7",X"84",X"A7",X"89", + X"01",X"C8",X"4C",X"97",X"12",X"CC",X"70",X"07",X"ED",X"01",X"ED",X"89",X"01",X"C9",X"BD",X"C2", + X"D0",X"39",X"8E",X"C3",X"50",X"9F",X"0B",X"A6",X"84",X"97",X"0E",X"86",X"07",X"97",X"10",X"86", + X"E0",X"97",X"12",X"8E",X"B3",X"00",X"96",X"12",X"A7",X"80",X"96",X"0E",X"2A",X"04",X"0A",X"12", + X"20",X"02",X"0C",X"12",X"BD",X"C2",X"D0",X"96",X"0E",X"2A",X"04",X"0A",X"12",X"20",X"02",X"0C", + X"12",X"BD",X"C2",X"D0",X"8C",X"B7",X"00",X"26",X"DD",X"39",X"8E",X"00",X"00",X"10",X"8E",X"BE", + X"20",X"AF",X"B1",X"10",X"8C",X"BF",X"50",X"26",X"F8",X"39",X"96",X"0F",X"27",X"0A",X"0A",X"0F", + X"96",X"0D",X"48",X"89",X"00",X"97",X"0D",X"39",X"DE",X"09",X"33",X"41",X"11",X"83",X"C4",X"50", + X"26",X"03",X"CE",X"C3",X"50",X"DF",X"09",X"86",X"07",X"97",X"0F",X"A6",X"C4",X"97",X"0D",X"39", + X"96",X"10",X"27",X"0A",X"0A",X"10",X"96",X"0E",X"48",X"89",X"00",X"97",X"0E",X"39",X"DE",X"0B", + X"33",X"41",X"11",X"83",X"C4",X"50",X"26",X"03",X"CE",X"C3",X"50",X"DF",X"0B",X"86",X"07",X"97", + X"10",X"A6",X"C4",X"97",X"0E",X"39",X"96",X"0F",X"81",X"07",X"27",X"0C",X"0C",X"0F",X"96",X"0D", + X"44",X"24",X"02",X"8B",X"80",X"97",X"0D",X"39",X"DE",X"09",X"11",X"83",X"C3",X"50",X"26",X"03", + X"CE",X"C4",X"50",X"33",X"5F",X"DF",X"09",X"0F",X"0F",X"A6",X"C4",X"44",X"24",X"02",X"8B",X"80", + X"97",X"0D",X"39",X"96",X"10",X"81",X"07",X"27",X"0C",X"0C",X"10",X"96",X"0E",X"44",X"24",X"02", + X"8B",X"80",X"97",X"0E",X"39",X"DE",X"0B",X"11",X"83",X"C3",X"50",X"26",X"03",X"CE",X"C4",X"50", + X"33",X"5F",X"DF",X"0B",X"0F",X"10",X"A6",X"C4",X"44",X"24",X"02",X"8B",X"80",X"97",X"0E",X"39", + X"2A",X"AA",X"AA",X"AA",X"AA",X"AA",X"AB",X"A1",X"D5",X"55",X"55",X"55",X"55",X"55",X"AA",X"BF", + X"FF",X"FF",X"FF",X"C0",X"00",X"00",X"00",X"55",X"55",X"57",X"FF",X"C0",X"01",X"55",X"55",X"55", + X"55",X"55",X"55",X"5F",X"E0",X"15",X"55",X"55",X"57",X"FF",X"F0",X"00",X"15",X"55",X"5F",X"FF", + X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"05",X"55",X"7F",X"FF",X"E0",X"00",X"05",X"55",X"55", + X"55",X"55",X"FC",X"05",X"55",X"55",X"50",X"01",X"FF",X"FF",X"FF",X"C0",X"00",X"0A",X"AA",X"AA", + X"AA",X"FF",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"F0",X"00",X"00",X"1F",X"E0",X"00",X"55",X"55", + X"55",X"40",X"AA",X"AA",X"AA",X"AA",X"AA",X"AA",X"B5",X"57",X"AA",X"AA",X"AA",X"F5",X"7F",X"D5", + X"55",X"55",X"57",X"FF",X"80",X"07",X"E0",X"7F",X"F1",X"55",X"7F",X"FF",X"FF",X"00",X"00",X"00", + X"00",X"00",X"0F",X"EF",X"76",X"91",X"11",X"11",X"5E",X"DB",X"E9",X"84",X"77",X"EC",X"C4",X"87", + X"47",X"98",X"08",X"98",X"3F",X"C3",X"CB",X"DB",X"9F",X"C7",X"5F",X"2F",X"C7",X"7D",X"EF",X"BF", + X"FA",X"4C",X"57",X"2B",X"61",X"EF",X"EF",X"FB",X"F7",X"E8",X"00",X"20",X"40",X"00",X"14",X"04", + X"04",X"3C",X"06",X"00",X"1D",X"07",X"3C",X"E1",X"A5",X"55",X"55",X"45",X"2A",X"AA",X"AA",X"AA", + X"A8",X"55",X"55",X"55",X"55",X"55",X"55",X"55",X"55",X"55",X"55",X"56",X"AA",X"AA",X"FE",X"AA", + X"AA",X"AA",X"AA",X"AA",X"AA",X"AA",X"AA",X"EA",X"AA",X"AA",X"A8",X"02",X"AA",X"AA",X"AA",X"AA", + X"BF",X"BE",X"3E",X"63",X"FF",X"E0",X"D8",X"1C",X"18",X"2A",X"AB",X"1E",X"77",X"7A",X"AF",X"A8", + X"40",X"70",X"7D",X"40",X"0B",X"FB",X"FA",X"FF",X"C1",X"53",X"54",X"75",X"70",X"03",X"00",X"00", + X"25",X"70",X"07",X"26",X"77",X"00",X"26",X"07",X"70",X"24",X"07",X"70",X"23",X"07",X"70",X"23", + X"70",X"07",X"24",X"07",X"70",X"25",X"70",X"07",X"26",X"77",X"00",X"25",X"07",X"70",X"24",X"07", + X"70",X"23",X"07",X"70",X"21",X"07",X"70",X"22",X"70",X"07",X"24",X"77",X"00",X"24",X"70",X"07", + X"26",X"77",X"00",X"26",X"77",X"00",X"25",X"77",X"00",X"25",X"70",X"07",X"26",X"77",X"00",X"24", + X"07",X"70",X"23",X"70",X"07",X"25",X"77",X"00",X"26",X"70",X"07",X"26",X"77",X"00",X"26",X"77", + X"00",X"25",X"07",X"70",X"23",X"07",X"70",X"22",X"07",X"70",X"21",X"77",X"00",X"21",X"70",X"07", + X"23",X"70",X"07",X"25",X"70",X"07",X"25",X"07",X"70",X"25",X"77",X"00",X"25",X"77",X"00",X"24", + X"77",X"00",X"22",X"07",X"70",X"20",X"07",X"70",X"1E",X"07",X"70",X"1C",X"07",X"70",X"1D",X"70", + X"07",X"1F",X"70",X"07",X"21",X"70",X"07",X"22",X"70",X"07",X"24",X"70",X"07",X"26",X"70",X"07", + X"26",X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"25", + X"77",X"00",X"25",X"70",X"07",X"26",X"77",X"00",X"24",X"07",X"70",X"23",X"77",X"00",X"24",X"77", + X"00",X"22",X"07",X"70",X"23",X"70",X"07",X"22",X"07",X"70",X"21",X"70",X"07",X"23",X"70",X"07", + X"25",X"70",X"07",X"26",X"77",X"00",X"26",X"07",X"70",X"24",X"07",X"70",X"23",X"07",X"70",X"23", + X"70",X"07",X"24",X"07",X"70",X"25",X"70",X"07",X"26",X"77",X"00",X"25",X"07",X"70",X"24",X"07", + X"70",X"23",X"07",X"70",X"21",X"07",X"70",X"22",X"70",X"07",X"24",X"77",X"00",X"24",X"70",X"07", + X"26",X"77",X"00",X"26",X"77",X"00",X"25",X"77",X"00",X"25",X"70",X"07",X"26",X"77",X"00",X"24", + X"07",X"70",X"23",X"70",X"07",X"25",X"77",X"00",X"26",X"70",X"07",X"26",X"77",X"00",X"26",X"77", + X"00",X"25",X"07",X"70",X"23",X"07",X"70",X"22",X"07",X"70",X"21",X"77",X"00",X"21",X"70",X"07", + X"23",X"70",X"07",X"25",X"70",X"07",X"25",X"07",X"70",X"25",X"77",X"00",X"25",X"77",X"00",X"24", + X"77",X"00",X"22",X"07",X"70",X"20",X"07",X"70",X"1E",X"07",X"70",X"1C",X"07",X"70",X"1D",X"70", + X"07",X"1F",X"70",X"07",X"21",X"70",X"07",X"22",X"70",X"07",X"24",X"70",X"07",X"26",X"70",X"07", + X"26",X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"26",X"77",X"00",X"25", + X"77",X"00",X"25",X"70",X"07",X"26",X"77",X"00",X"24",X"07",X"70",X"23",X"77",X"00",X"24",X"77", + X"00",X"22",X"07",X"70",X"23",X"70",X"07",X"22",X"07",X"70",X"21",X"70",X"07",X"23",X"70",X"07", + X"35",X"06",X"ED",X"49",X"9F",X"00",X"CC",X"08",X"08",X"DD",X"04",X"CC",X"17",X"32",X"DD",X"06", + X"10",X"8E",X"B3",X"00",X"96",X"00",X"5F",X"ED",X"22",X"96",X"01",X"ED",X"24",X"96",X"05",X"44", + X"98",X"05",X"44",X"44",X"06",X"04",X"06",X"05",X"96",X"04",X"84",X"01",X"80",X"01",X"D6",X"05", + X"ED",X"26",X"2A",X"02",X"43",X"53",X"34",X"06",X"96",X"07",X"44",X"98",X"07",X"44",X"44",X"06", + X"06",X"06",X"07",X"96",X"06",X"84",X"03",X"80",X"02",X"D6",X"07",X"ED",X"28",X"2A",X"02",X"43", + X"53",X"44",X"56",X"E3",X"E1",X"10",X"83",X"01",X"6A",X"24",X"B9",X"8E",X"00",X"00",X"AF",X"A4", + X"31",X"2A",X"10",X"8C",X"B8",X"00",X"26",X"AC",X"8E",X"C6",X"AB",X"9F",X"02",X"86",X"38",X"97", + X"01",X"86",X"01",X"8E",X"C6",X"49",X"7E",X"FF",X"D1",X"8E",X"00",X"00",X"10",X"8E",X"B3",X"00", + X"A6",X"9F",X"A0",X"02",X"97",X"31",X"27",X"50",X"EE",X"A4",X"AF",X"C4",X"AF",X"C9",X"01",X"00", + X"EC",X"28",X"E3",X"24",X"81",X"2A",X"25",X"28",X"ED",X"24",X"A7",X"21",X"EC",X"26",X"E3",X"22", + X"81",X"98",X"22",X"1C",X"ED",X"22",X"A7",X"A4",X"5D",X"2B",X"07",X"CC",X"BB",X"BB",X"ED",X"B4", + X"20",X"0E",X"EE",X"A4",X"CC",X"0B",X"0B",X"ED",X"C4",X"CC",X"B0",X"B0",X"ED",X"C9",X"01",X"00", + X"31",X"2A",X"10",X"8C",X"B8",X"00",X"26",X"C0",X"0A",X"01",X"26",X"A5",X"DE",X"02",X"33",X"41", + X"DF",X"02",X"86",X"04",X"97",X"01",X"20",X"99",X"6E",X"D8",X"09",X"FF",X"7F",X"3F",X"37",X"2F", + X"27",X"1F",X"17",X"07",X"06",X"05",X"04",X"03",X"02",X"00",X"14",X"00",X"00",X"00",X"0F",X"14", + X"14",X"14",X"03",X"00",X"00",X"00",X"00",X"03",X"04",X"05",X"06",X"00",X"00",X"00",X"00",X"01", + X"03",X"04",X"0A",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0A",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"1E",X"00",X"00",X"00",X"1E",X"19",X"14",X"10",X"05",X"00",X"00",X"00",X"05",X"05", + X"05",X"05",X"60",X"00",X"03",X"02",X"16",X"1E",X"26",X"2E",X"01",X"00",X"00",X"00",X"00",X"00", + X"01",X"01",X"FF",X"00",X"10",X"00",X"70",X"B0",X"00",X"00",X"80",X"10",X"FC",X"FE",X"4A",X"3A", + X"2A",X"2A",X"30",X"00",X"00",X"00",X"20",X"28",X"2C",X"30",X"02",X"00",X"00",X"00",X"01",X"01", + X"02",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"FF",X"00",X"08",X"06",X"62",X"E0", + X"02",X"12",X"60",X"00",X"08",X"04",X"0C",X"1C",X"24",X"28",X"FF",X"08",X"FE",X"FE",X"2A",X"22", + X"1E",X"1C",X"60",X"00",X"08",X"02",X"16",X"1E",X"20",X"22",X"28",X"0A",X"FE",X"FF",X"19",X"19", + X"19",X"19",X"3F",X"00",X"00",X"00",X"1F",X"1F",X"1F",X"3F",X"C0",X"18",X"F4",X"FC",X"D4",X"C4", + X"A4",X"94",X"0A",X"03",X"FF",X"FF",X"0F",X"0D",X"0C",X"0A",X"C8",X"28",X"F4",X"F8",X"F0",X"DC", + X"C8",X"C8",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"8E",X"C0",X"0C",X"7E",X"C0",X"36",X"C6", + X"28",X"20",X"F1",X"C6",X"80",X"20",X"ED",X"10",X"8E",X"C9",X"FE",X"BD",X"CA",X"97",X"7E",X"CB", + X"3B",X"C6",X"A5",X"8E",X"C0",X"01",X"7E",X"C0",X"36",X"BD",X"CA",X"69",X"BD",X"CA",X"2A",X"8D", + X"F0",X"CE",X"C0",X"D7",X"8E",X"28",X"20",X"BD",X"CA",X"69",X"BD",X"C0",X"3C",X"10",X"8E",X"C0", + X"61",X"BD",X"C0",X"6D",X"10",X"8E",X"05",X"DC",X"BD",X"CA",X"44",X"0D",X"49",X"26",X"60",X"0F", + X"3C",X"86",X"01",X"97",X"3B",X"32",X"E8",X"E0",X"BD",X"FF",X"BC",X"CE",X"C0",X"D7",X"8E",X"28", + X"20",X"BD",X"CA",X"69",X"BD",X"C0",X"3C",X"0F",X"3A",X"10",X"8E",X"C0",X"65",X"BD",X"C0",X"66", + X"BD",X"CA",X"69",X"86",X"20",X"1F",X"89",X"5A",X"30",X"E4",X"A7",X"80",X"5A",X"26",X"FB",X"86", + X"17",X"A7",X"80",X"30",X"E4",X"BD",X"CA",X"57",X"8E",X"CC",X"00",X"BD",X"C0",X"39",X"C5",X"02"); +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/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound.vhd new file mode 100644 index 00000000..fc2af25c --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound.vhd @@ -0,0 +1,150 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity defender_sound 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 defender_sound is + type rom is array(0 to 2047) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"FF",X"0F",X"8E",X"00",X"7F",X"CE",X"04",X"00",X"6F",X"01",X"6F",X"03",X"86",X"FF",X"A7",X"00", + X"6F",X"02",X"86",X"37",X"A7",X"03",X"86",X"3C",X"A7",X"01",X"97",X"09",X"4F",X"97",X"07",X"97", + X"04",X"97",X"05",X"97",X"06",X"97",X"08",X"0E",X"20",X"FE",X"16",X"48",X"48",X"48",X"1B",X"CE", + X"00",X"13",X"DF",X"0F",X"CE",X"FD",X"76",X"BD",X"FD",X"21",X"C6",X"09",X"7E",X"FB",X"0A",X"96", + X"1B",X"B7",X"04",X"00",X"96",X"13",X"97",X"1C",X"96",X"14",X"97",X"1D",X"DE",X"18",X"96",X"1C", + X"73",X"04",X"00",X"09",X"27",X"10",X"4A",X"26",X"FA",X"73",X"04",X"00",X"96",X"1D",X"09",X"27", + X"05",X"4A",X"26",X"FA",X"20",X"E8",X"B6",X"04",X"00",X"2B",X"01",X"43",X"8B",X"00",X"B7",X"04", + X"00",X"96",X"1C",X"9B",X"15",X"97",X"1C",X"96",X"1D",X"9B",X"16",X"97",X"1D",X"91",X"17",X"26", + X"CB",X"96",X"1A",X"27",X"06",X"9B",X"13",X"97",X"13",X"26",X"B9",X"39",X"86",X"01",X"97",X"1A", + X"C6",X"03",X"20",X"0A",X"86",X"FE",X"97",X"1A",X"86",X"C0",X"C6",X"10",X"20",X"00",X"97",X"19", + X"86",X"FF",X"B7",X"04",X"00",X"D7",X"15",X"D6",X"15",X"96",X"0A",X"44",X"44",X"44",X"98",X"0A", + X"44",X"76",X"00",X"09",X"76",X"00",X"0A",X"24",X"03",X"73",X"04",X"00",X"96",X"19",X"4A",X"26", + X"FD",X"5A",X"26",X"E5",X"96",X"19",X"9B",X"1A",X"97",X"19",X"26",X"DB",X"39",X"86",X"20",X"97", + X"15",X"97",X"18",X"86",X"01",X"CE",X"00",X"01",X"C6",X"FF",X"20",X"00",X"97",X"13",X"DF",X"16", + X"D7",X"14",X"D6",X"15",X"96",X"0A",X"44",X"44",X"44",X"98",X"0A",X"44",X"76",X"00",X"09",X"76", + X"00",X"0A",X"86",X"00",X"24",X"02",X"96",X"14",X"B7",X"04",X"00",X"DE",X"16",X"09",X"26",X"FD", + X"5A",X"26",X"E1",X"D6",X"14",X"D0",X"13",X"27",X"09",X"DE",X"16",X"08",X"96",X"18",X"27",X"D0", + X"20",X"CC",X"39",X"C6",X"01",X"D7",X"04",X"4F",X"97",X"19",X"20",X"14",X"4F",X"97",X"19",X"C6", + X"03",X"20",X"0D",X"86",X"01",X"97",X"19",X"CE",X"03",X"E8",X"86",X"01",X"C6",X"FF",X"20",X"00", + X"97",X"18",X"D7",X"13",X"DF",X"16",X"7F",X"00",X"15",X"DE",X"16",X"B6",X"04",X"00",X"16",X"54", + X"54",X"54",X"D8",X"0A",X"54",X"76",X"00",X"09",X"76",X"00",X"0A",X"D6",X"13",X"7D",X"00",X"19", + X"27",X"02",X"D4",X"09",X"D7",X"14",X"D6",X"15",X"91",X"0A",X"22",X"12",X"09",X"27",X"26",X"B7", + X"04",X"00",X"DB",X"15",X"99",X"14",X"25",X"16",X"91",X"0A",X"23",X"F0",X"20",X"10",X"09",X"27", + X"14",X"B7",X"04",X"00",X"D0",X"15",X"92",X"14",X"25",X"04",X"91",X"0A",X"22",X"F0",X"96",X"0A", + X"B7",X"04",X"00",X"20",X"B9",X"D6",X"18",X"27",X"B5",X"96",X"13",X"D6",X"15",X"44",X"56",X"44", + X"56",X"44",X"56",X"43",X"50",X"82",X"FF",X"DB",X"15",X"99",X"13",X"D7",X"15",X"97",X"13",X"26", + X"98",X"C1",X"07",X"26",X"94",X"39",X"86",X"FD",X"97",X"0F",X"CE",X"00",X"64",X"DF",X"0B",X"DB", + X"0C",X"96",X"11",X"99",X"0B",X"97",X"11",X"DE",X"0B",X"25",X"04",X"20",X"00",X"20",X"03",X"08", + X"27",X"11",X"DF",X"0B",X"84",X"0F",X"8B",X"9A",X"97",X"10",X"DE",X"0F",X"A6",X"00",X"B7",X"04", + X"00",X"20",X"DC",X"39",X"4F",X"B7",X"04",X"00",X"97",X"11",X"4F",X"91",X"11",X"26",X"03",X"73", + X"04",X"00",X"C6",X"12",X"5A",X"26",X"FD",X"4C",X"2A",X"F1",X"73",X"04",X"00",X"7C",X"00",X"11", + X"2A",X"E8",X"39",X"CE",X"00",X"13",X"6F",X"00",X"08",X"8C",X"00",X"1B",X"26",X"F8",X"86",X"40", + X"97",X"13",X"CE",X"00",X"13",X"86",X"80",X"97",X"11",X"5F",X"A6",X"01",X"AB",X"00",X"A7",X"01", + X"2A",X"02",X"DB",X"11",X"74",X"00",X"11",X"08",X"08",X"8C",X"00",X"1B",X"26",X"EC",X"F7",X"04", + X"00",X"7C",X"00",X"12",X"26",X"DC",X"CE",X"00",X"13",X"5F",X"A6",X"00",X"27",X"0B",X"81",X"37", + X"26",X"04",X"C6",X"41",X"E7",X"02",X"6A",X"00",X"5C",X"08",X"08",X"8C",X"00",X"1B",X"26",X"EA", + X"5D",X"26",X"BF",X"39",X"7A",X"00",X"08",X"39",X"7F",X"00",X"08",X"97",X"11",X"CE",X"FD",X"AA", + X"A6",X"00",X"27",X"2D",X"7A",X"00",X"11",X"27",X"06",X"4C",X"BD",X"FD",X"21",X"20",X"F1",X"08", + X"DF",X"0F",X"BD",X"FD",X"21",X"DF",X"0D",X"DE",X"0F",X"A6",X"00",X"97",X"15",X"A6",X"01",X"EE", + X"02",X"DF",X"13",X"8D",X"3E",X"DE",X"0F",X"08",X"08",X"08",X"08",X"DF",X"0F",X"9C",X"0D",X"26", + X"E8",X"7E",X"FD",X"0E",X"86",X"03",X"97",X"08",X"39",X"7A",X"00",X"08",X"27",X"0C",X"D6",X"15", + X"58",X"58",X"58",X"58",X"1B",X"97",X"15",X"4F",X"20",X"FE",X"4A",X"81",X"0B",X"23",X"01",X"4F", + X"CE",X"FE",X"41",X"BD",X"FD",X"21",X"A6",X"00",X"CE",X"FF",X"FF",X"DF",X"13",X"8D",X"04",X"8D", + X"2A",X"20",X"FC",X"CE",X"00",X"16",X"81",X"00",X"27",X"15",X"81",X"03",X"27",X"09",X"C6",X"01", + X"E7",X"00",X"08",X"80",X"02",X"20",X"EF",X"C6",X"91",X"E7",X"00",X"6F",X"01",X"08",X"08",X"C6", + X"7E",X"E7",X"00",X"C6",X"FA",X"E7",X"01",X"C6",X"DD",X"E7",X"02",X"DE",X"13",X"4F",X"F6",X"00", + X"12",X"5C",X"D7",X"12",X"D4",X"15",X"54",X"89",X"00",X"54",X"89",X"00",X"54",X"89",X"00",X"54", + X"89",X"00",X"54",X"89",X"00",X"54",X"89",X"00",X"54",X"89",X"00",X"1B",X"48",X"48",X"48",X"48", + X"B7",X"04",X"00",X"09",X"27",X"03",X"7E",X"00",X"16",X"39",X"36",X"A6",X"00",X"DF",X"0D",X"DE", + X"0F",X"A7",X"00",X"08",X"DF",X"0F",X"DE",X"0D",X"08",X"5A",X"26",X"EF",X"32",X"39",X"4F",X"97", + X"04",X"97",X"05",X"39",X"7F",X"00",X"04",X"96",X"05",X"84",X"7F",X"81",X"1D",X"26",X"01",X"4F", + X"4C",X"97",X"05",X"39",X"86",X"0E",X"BD",X"FB",X"81",X"96",X"05",X"48",X"48",X"43",X"BD",X"FC", + X"39",X"7C",X"00",X"17",X"BD",X"FC",X"3B",X"20",X"F8",X"86",X"03",X"BD",X"F8",X"2A",X"D6",X"06", + X"C1",X"1F",X"26",X"01",X"5F",X"5C",X"D7",X"06",X"86",X"20",X"10",X"5F",X"81",X"14",X"23",X"05", + X"CB",X"0E",X"4A",X"20",X"F7",X"CB",X"05",X"4A",X"26",X"FB",X"D7",X"13",X"BD",X"F8",X"3F",X"20", + X"FB",X"96",X"07",X"26",X"09",X"7C",X"00",X"07",X"86",X"0D",X"8D",X"05",X"20",X"69",X"7E",X"FC", + X"2E",X"16",X"58",X"1B",X"1B",X"1B",X"CE",X"FE",X"EC",X"BD",X"FD",X"21",X"A6",X"00",X"16",X"84", + X"0F",X"97",X"14",X"54",X"54",X"54",X"54",X"D7",X"13",X"A6",X"01",X"16",X"54",X"54",X"54",X"54", + X"D7",X"15",X"84",X"0F",X"97",X"11",X"DF",X"0B",X"CE",X"FE",X"4D",X"7A",X"00",X"11",X"2B",X"08", + X"A6",X"00",X"4C",X"BD",X"FD",X"21",X"20",X"F3",X"DF",X"18",X"BD",X"FC",X"75",X"DE",X"0B",X"A6", + X"02",X"97",X"1A",X"BD",X"FC",X"87",X"DE",X"0B",X"A6",X"03",X"97",X"16",X"A6",X"04",X"97",X"17", + X"A6",X"05",X"16",X"A6",X"06",X"CE",X"FF",X"55",X"BD",X"FD",X"21",X"17",X"DF",X"1B",X"7F",X"00", + X"23",X"BD",X"FD",X"21",X"DF",X"1D",X"39",X"96",X"13",X"97",X"22",X"DE",X"1B",X"DF",X"0D",X"DE", + X"0D",X"A6",X"00",X"9B",X"23",X"97",X"21",X"9C",X"1D",X"27",X"26",X"D6",X"14",X"08",X"DF",X"0D", + X"CE",X"00",X"24",X"96",X"21",X"4A",X"26",X"FD",X"A6",X"00",X"B7",X"04",X"00",X"08",X"9C",X"1F", + X"26",X"F1",X"5A",X"27",X"DA",X"08",X"09",X"08",X"09",X"08",X"09",X"08",X"09",X"01",X"01",X"20", + X"DF",X"96",X"15",X"8D",X"62",X"7A",X"00",X"22",X"26",X"C1",X"96",X"07",X"26",X"46",X"96",X"16", + X"27",X"42",X"7A",X"00",X"17",X"27",X"3D",X"9B",X"23",X"97",X"23",X"DE",X"1B",X"5F",X"96",X"23", + X"7D",X"00",X"16",X"2B",X"06",X"AB",X"00",X"25",X"08",X"20",X"0B",X"AB",X"00",X"27",X"02",X"25", + X"05",X"5D",X"27",X"08",X"20",X"0F",X"5D",X"26",X"03",X"DF",X"1B",X"5C",X"08",X"9C",X"1D",X"26", + X"DD",X"5D",X"26",X"01",X"39",X"DF",X"1D",X"96",X"15",X"27",X"06",X"8D",X"08",X"96",X"1A",X"8D", + X"16",X"7E",X"FB",X"E7",X"39",X"CE",X"00",X"24",X"DF",X"0F",X"DE",X"18",X"E6",X"00",X"08",X"BD", + X"FB",X"0A",X"DE",X"0F",X"DF",X"1F",X"39",X"4D",X"27",X"2B",X"DE",X"18",X"DF",X"0D",X"CE",X"00", + X"24",X"97",X"12",X"DF",X"0F",X"DE",X"0D",X"D6",X"12",X"D7",X"11",X"E6",X"01",X"54",X"54",X"54", + X"54",X"08",X"DF",X"0D",X"DE",X"0F",X"A6",X"00",X"10",X"7A",X"00",X"11",X"26",X"FA",X"A7",X"00", + X"08",X"9C",X"1F",X"26",X"DE",X"39",X"8E",X"00",X"7F",X"B6",X"04",X"02",X"0E",X"43",X"84",X"1F", + X"D6",X"08",X"27",X"09",X"2A",X"03",X"BD",X"FA",X"48",X"4A",X"BD",X"FA",X"89",X"5F",X"81",X"0E", + X"27",X"02",X"D7",X"06",X"81",X"12",X"27",X"02",X"D7",X"07",X"F6",X"EF",X"FD",X"C1",X"7E",X"26", + X"03",X"BD",X"EF",X"FD",X"4D",X"27",X"27",X"4A",X"81",X"0C",X"22",X"08",X"BD",X"FB",X"81",X"BD", + X"FB",X"E7",X"20",X"1A",X"81",X"1B",X"22",X"0E",X"80",X"0D",X"48",X"CE",X"FD",X"58",X"8D",X"21", + X"EE",X"00",X"AD",X"00",X"20",X"08",X"80",X"1C",X"BD",X"F8",X"2A",X"BD",X"F8",X"3F",X"96",X"04", + X"9A",X"05",X"27",X"FE",X"4F",X"97",X"07",X"96",X"04",X"27",X"03",X"7E",X"F9",X"13",X"7E",X"FB", + X"34",X"DF",X"0D",X"9B",X"0E",X"97",X"0E",X"24",X"03",X"7C",X"00",X"0D",X"DE",X"0D",X"39",X"0F", + X"8E",X"00",X"7F",X"CE",X"FF",X"FF",X"5F",X"E9",X"00",X"09",X"8C",X"F8",X"00",X"26",X"F8",X"E1", + X"00",X"27",X"01",X"3E",X"86",X"01",X"BD",X"F8",X"2A",X"BD",X"F8",X"3F",X"F6",X"EF",X"FA",X"C1", + X"7E",X"26",X"DC",X"BD",X"EF",X"FA",X"20",X"D7",X"FB",X"49",X"F9",X"13",X"FB",X"24",X"F8",X"8C", + X"FB",X"71",X"FB",X"1E",X"F8",X"CD",X"F8",X"94",X"F9",X"1C",X"F9",X"23",X"F9",X"A6",X"F9",X"D4", + X"F9",X"F3",X"FA",X"44",X"FA",X"84",X"40",X"01",X"00",X"10",X"E1",X"00",X"80",X"FF",X"FF",X"28", + X"01",X"00",X"08",X"81",X"02",X"00",X"FF",X"FF",X"28",X"81",X"00",X"FC",X"01",X"02",X"00",X"FC", + X"FF",X"FF",X"01",X"00",X"18",X"41",X"04",X"80",X"00",X"FF",X"8C",X"5B",X"B6",X"40",X"BF",X"49", + X"A4",X"73",X"73",X"A4",X"49",X"BF",X"40",X"B6",X"5B",X"8C",X"0C",X"7F",X"1D",X"0F",X"FB",X"7F", + X"23",X"0F",X"15",X"FE",X"08",X"50",X"8B",X"88",X"3E",X"3F",X"02",X"3E",X"7C",X"04",X"03",X"FF", + X"3E",X"3F",X"2C",X"E2",X"7C",X"12",X"0D",X"74",X"7C",X"0D",X"0E",X"41",X"7C",X"23",X"0B",X"50", + X"7C",X"1D",X"29",X"F2",X"7C",X"3F",X"02",X"3E",X"F8",X"04",X"03",X"FF",X"7C",X"3F",X"2C",X"E2", + X"F8",X"12",X"0D",X"74",X"F8",X"0D",X"0E",X"41",X"F8",X"23",X"0B",X"50",X"F8",X"1D",X"2F",X"F2", + X"F8",X"23",X"05",X"A8",X"F8",X"12",X"06",X"BA",X"F8",X"04",X"07",X"FF",X"7C",X"37",X"04",X"C1", + X"7C",X"23",X"05",X"A8",X"7C",X"12",X"06",X"BA",X"3E",X"04",X"07",X"FF",X"3E",X"37",X"04",X"C1", + X"3E",X"23",X"05",X"A8",X"1F",X"12",X"06",X"BA",X"1F",X"04",X"07",X"FF",X"1F",X"37",X"04",X"C1", + X"1F",X"23",X"16",X"A0",X"FE",X"1D",X"17",X"F9",X"7F",X"37",X"13",X"06",X"7F",X"3F",X"08",X"FA", + X"FE",X"04",X"0F",X"FF",X"FE",X"0D",X"0E",X"41",X"FE",X"23",X"0B",X"50",X"FE",X"1D",X"5F",X"E4", + X"00",X"47",X"3F",X"37",X"30",X"29",X"23",X"1D",X"17",X"12",X"0D",X"08",X"04",X"08",X"7F",X"D9", + X"FF",X"D9",X"7F",X"24",X"00",X"24",X"08",X"00",X"40",X"80",X"00",X"FF",X"00",X"80",X"40",X"10", + X"7F",X"B0",X"D9",X"F5",X"FF",X"F5",X"D9",X"B0",X"7F",X"4E",X"24",X"09",X"00",X"09",X"24",X"4E", + X"10",X"7F",X"C5",X"EC",X"E7",X"BF",X"8D",X"6D",X"6A",X"7F",X"94",X"92",X"71",X"40",X"17",X"12", + X"39",X"10",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"00",X"00", + X"00",X"00",X"48",X"8A",X"95",X"A0",X"AB",X"B5",X"BF",X"C8",X"D1",X"DA",X"E1",X"E8",X"EE",X"F3", + X"F7",X"FB",X"FD",X"FE",X"FF",X"FE",X"FD",X"FB",X"F7",X"F3",X"EE",X"E8",X"E1",X"DA",X"D1",X"C8", + X"BF",X"B5",X"AB",X"A0",X"95",X"8A",X"7F",X"75",X"6A",X"5F",X"54",X"4A",X"40",X"37",X"2E",X"25", + X"1E",X"17",X"11",X"0C",X"08",X"04",X"02",X"01",X"00",X"01",X"02",X"04",X"08",X"0C",X"11",X"17", + X"1E",X"25",X"2E",X"37",X"40",X"4A",X"54",X"5F",X"6A",X"75",X"7F",X"10",X"59",X"7B",X"98",X"AC", + X"B3",X"AC",X"98",X"7B",X"59",X"37",X"19",X"06",X"00",X"06",X"19",X"37",X"81",X"24",X"00",X"00", + X"00",X"16",X"31",X"12",X"05",X"1A",X"FF",X"00",X"27",X"6D",X"11",X"05",X"11",X"01",X"0F",X"01", + X"47",X"11",X"31",X"00",X"01",X"00",X"0D",X"1B",X"F4",X"12",X"00",X"00",X"00",X"14",X"47",X"41", + X"45",X"00",X"00",X"00",X"0F",X"5B",X"21",X"35",X"11",X"FF",X"00",X"0D",X"1B",X"15",X"00",X"00", + X"FD",X"00",X"01",X"69",X"31",X"11",X"00",X"01",X"00",X"03",X"6A",X"01",X"15",X"01",X"01",X"01", + X"01",X"47",X"F6",X"53",X"03",X"00",X"02",X"06",X"94",X"6A",X"10",X"02",X"00",X"02",X"06",X"9A", + X"1F",X"12",X"00",X"FF",X"10",X"04",X"69",X"31",X"11",X"00",X"FF",X"00",X"0D",X"00",X"12",X"06", + X"00",X"FF",X"01",X"09",X"28",X"A0",X"98",X"90",X"88",X"80",X"78",X"70",X"68",X"60",X"58",X"50", + X"44",X"40",X"01",X"01",X"02",X"02",X"04",X"04",X"08",X"08",X"10",X"10",X"30",X"60",X"C0",X"E0", + X"01",X"01",X"02",X"02",X"03",X"04",X"05",X"06",X"07",X"08",X"09",X"0A",X"0C",X"80",X"7C",X"78", + X"74",X"70",X"74",X"78",X"7C",X"80",X"01",X"01",X"02",X"02",X"04",X"04",X"08",X"08",X"10",X"20", + X"28",X"30",X"38",X"40",X"48",X"50",X"60",X"70",X"80",X"A0",X"B0",X"C0",X"08",X"40",X"08",X"40", + X"08",X"40",X"08",X"40",X"08",X"40",X"08",X"40",X"08",X"40",X"08",X"40",X"08",X"40",X"08",X"40", + X"01",X"02",X"04",X"08",X"09",X"0A",X"0B",X"0C",X"0E",X"0F",X"10",X"12",X"14",X"16",X"40",X"10", + X"08",X"01",X"01",X"01",X"01",X"01",X"02",X"02",X"03",X"03",X"04",X"04",X"05",X"06",X"08",X"0A", + X"0C",X"10",X"14",X"18",X"20",X"30",X"40",X"50",X"40",X"30",X"20",X"10",X"0C",X"0A",X"08",X"07", + X"06",X"05",X"04",X"03",X"02",X"02",X"01",X"01",X"01",X"07",X"08",X"09",X"0A",X"0C",X"08",X"17", + X"18",X"19",X"1A",X"1B",X"1C",X"00",X"00",X"00",X"FC",X"B6",X"F8",X"01",X"FD",X"2F",X"F8",X"01"); +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/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound_board.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound_board.vhd new file mode 100644 index 00000000..5fdd8293 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/defender_sound_board.vhd @@ -0,0 +1,186 @@ +--------------------------------------------------------------------------------- +-- Defender sound board by Dar (darfpga@aol.fr) +-- http://darfpga.blogspot.fr +--------------------------------------------------------------------------------- +-- gen_ram.vhd +-------------------------------- +-- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com) +-- http://www.syntiac.com/fpga64.html +--------------------------------------------------------------------------------- +-- cpu68 - Version 9th Jan 2004 0.8 +-- 6800/01 compatible CPU core +-- GNU public license - December 2002 : John E. Kent +--------------------------------------------------------------------------------- +-- Educational use only +-- Do not redistribute synthetized file with roms +-- Do not redistribute roms whatever the form +-- Use at your own risk +--------------------------------------------------------------------------------- +-- Version 0.0 -- 15/10/2017 -- +-- initial version +--------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity defender_sound_board is +port( + clk_1p79 : in std_logic; + clk_0p89 : in std_logic; + reset : in std_logic; + + select_sound : in std_logic_vector(5 downto 0); + audio_out : out std_logic_vector( 7 downto 0); + + dbg_cpu_addr : out std_logic_vector(15 downto 0) +); +end defender_sound_board; + +architecture struct of defender_sound_board is + + signal reset_n : std_logic; + + signal cpu_clock : std_logic; + signal cpu_addr : 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_rw : std_logic; + signal cpu_irq : std_logic; + + signal wram_cs : std_logic; + signal wram_we : std_logic; + signal wram_do : std_logic_vector( 7 downto 0); + + signal rom_cs : std_logic; + signal rom_do : std_logic_vector( 7 downto 0); + +-- pia port a +-- bit 0-7 audio output + +-- pia port b +-- bit 0-4 select sound input (sel0-4) +-- bit 5-6 switch sound/notes/speech on/off +-- bit 7 sel5 + +-- pia io ca/cb +-- ca1 vdd +-- cb1 sound trigger (sel0-5 = 1) +-- ca2 speech data N/C +-- cb2 speech clock N/C + + signal pia_clock : std_logic; + signal pia_rw_n : std_logic; + signal pia_cs : std_logic; + signal pia_irqa : std_logic; + signal pia_irqb : std_logic; + signal pia_do : std_logic_vector( 7 downto 0); + signal pia_pa_o : std_logic_vector( 7 downto 0); + signal pia_pb_i : std_logic_vector( 7 downto 0); + signal pia_cb1_i : std_logic; + +begin + +reset_n <= not reset; + +dbg_cpu_addr <= cpu_addr; +cpu_clock <= clk_0p89; + + +-- pia cs +wram_cs <= '1' when cpu_addr(15 downto 8) = X"00" else '0'; -- 0000-007F +pia_cs <= '1' when cpu_addr(15 downto 12) = X"0" and cpu_addr(10) = '1' else '0'; -- 8400-8403 ? => 0400-0403 +rom_cs <= '1' when cpu_addr(15 downto 12) = X"F" else '0'; -- F800-FFFF + +-- write enables +wram_we <= '1' when cpu_rw = '0' and cpu_clock = '1' and wram_cs = '1' else '0'; +pia_rw_n <= '0' when cpu_rw = '0' and cpu_clock = '1' and pia_cs = '1' else '1'; + +-- mux cpu in data between roms/io/wram +cpu_di <= + wram_do when wram_cs = '1' else + pia_do when pia_cs = '1' else + rom_do when rom_cs = '1' else X"55"; + +-- pia I/O +pia_clock <= clk_1p79; -- 3p58/2 +audio_out <= pia_pa_o; + +pia_pb_i(4 downto 0) <= select_sound(4 downto 0); +pia_pb_i(6 downto 5) <= "11"; -- assume DS1-1 and DS1-2 open +pia_pb_i(7) <= '1'; -- Handshake to ? from rom board (drawings are confusing) + +-- pia Cb1 +pia_cb1_i <= '0' when select_sound = "111111" else '1'; + +-- pia irqs to cpu +cpu_irq <= pia_irqa or pia_irqb; + +-- microprocessor 6800 +main_cpu : entity work.cpu68 +port map( + clk => cpu_clock,-- E clock input (falling edge) + rst => reset, -- reset input (active high) + rw => cpu_rw, -- read not write output + vma => open, -- valid memory address (active high) + address => cpu_addr, -- address bus output + data_in => cpu_di, -- data bus input + data_out => cpu_do, -- data bus output + hold => '0', -- hold input (active high) extend bus cycle + halt => '0', -- halt input (active high) grants DMA + irq => cpu_irq, -- interrupt request input (active high) + nmi => '0', -- non maskable interrupt request input (active high) + test_alu => open, + test_cc => open +); + +-- cpu program rom +cpu_prog_rom : entity work.defender_sound +port map( + clk => clk_1p79, + addr => cpu_addr(10 downto 0), + data => rom_do +); + +-- cpu wram +cpu_ram : entity work.gen_ram +generic map( dWidth => 8, aWidth => 7) +port map( + clk => clk_1p79, + we => wram_we, + addr => cpu_addr(6 downto 0), + d => cpu_do, + q => wram_do +); + +-- pia +pia : entity work.pia6821 +port map +( + clk => clk_1p79, + rst => reset, + cs => pia_cs, + rw => pia_rw_n, + addr => cpu_addr(1 downto 0), + data_in => cpu_do, + data_out => pia_do, + irqa => pia_irqa, + irqb => pia_irqb, + pa_i => (others => '0'), + pa_o => pia_pa_o, + pa_oe => open, + ca1 => '1', + ca2_i => '0', + ca2_o => open, + ca2_oe => open, + pb_i => pia_pb_i, + pb_o => open, + pb_oe => open, + cb1 => pia_cb1_i, + cb2_i => '0', + cb2_o => open, + cb2_oe => open +); + +end struct; \ No newline at end of file diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/gen_ram.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/gen_ram.vhd new file mode 100644 index 00000000..f1a95608 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/gen_ram.vhd @@ -0,0 +1,84 @@ +-- ----------------------------------------------------------------------- +-- +-- 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))); + q <= ram(to_integer(unsigned(addr))); + end if; + end process; +--q <= ram(to_integer(unsigned(addr))); +end architecture; + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pia6821.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pia6821.vhd new file mode 100644 index 00000000..d565ae36 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pia6821.vhd @@ -0,0 +1,553 @@ +--===========================================================================-- +-- +-- S Y N T H E Z I A B L E I/O Port C O R E +-- +-- www.OpenCores.Org - May 2004 +-- This core adheres to the GNU public license +-- +-- File name : pia6821.vhd +-- +-- Purpose : Implements 2 x 8 bit parallel I/O ports +-- with programmable data direction registers +-- +-- Dependencies : ieee.Std_Logic_1164 +-- ieee.std_logic_unsigned +-- +-- Author : John E. Kent +-- +--===========================================================================---- +-- +-- Revision History: +-- +-- Date: Revision Author +-- 1 May 2004 0.0 John Kent +-- Initial version developed from ioport.vhd +-- +-- +-- Unkown date 0.0.1 found at Pacedev repository +-- remove High Z output and and oe signal +-- +-- 18 October 2017 0.0.2 DarFpga +-- Set output to low level when in data is in input mode +-- (to avoid infered latch warning) +-- +--===========================================================================---- +-- +-- Memory Map +-- +-- IO + $00 - Port A Data & Direction register +-- IO + $01 - Port A Control register +-- IO + $02 - Port B Data & Direction Direction Register +-- IO + $03 - Port B Control Register +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity pia6821 is + port ( + clk : in std_logic; + rst : in std_logic; + cs : in std_logic; + rw : in std_logic; + addr : in std_logic_vector(1 downto 0); + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + irqa : out std_logic; + irqb : out std_logic; + pa_i : in std_logic_vector(7 downto 0); + pa_o : out std_logic_vector(7 downto 0); + pa_oe : out std_logic_vector(7 downto 0); + ca1 : in std_logic; + ca2_i : in std_logic; + ca2_o : out std_logic; + ca2_oe : out std_logic; + pb_i : in std_logic_vector(7 downto 0); + pb_o : out std_logic_vector(7 downto 0); + pb_oe : out std_logic_vector(7 downto 0); + cb1 : in std_logic; + cb2_i : in std_logic; + cb2_o : out std_logic; + cb2_oe : out std_logic + ); +end; + +architecture pia_arch of pia6821 is + +signal porta_ddr : std_logic_vector(7 downto 0); +signal porta_data : std_logic_vector(7 downto 0); +signal porta_ctrl : std_logic_vector(5 downto 0); +signal porta_read : std_logic; + +signal portb_ddr : std_logic_vector(7 downto 0); +signal portb_data : std_logic_vector(7 downto 0); +signal portb_ctrl : std_logic_vector(5 downto 0); +signal portb_read : std_logic; +signal portb_write : std_logic; + +signal ca1_del : std_logic; +signal ca1_rise : std_logic; +signal ca1_fall : std_logic; +signal ca1_edge : std_logic; +signal irqa1 : std_logic; + +signal ca2_del : std_logic; +signal ca2_rise : std_logic; +signal ca2_fall : std_logic; +signal ca2_edge : std_logic; +signal irqa2 : std_logic; +signal ca2_out : std_logic; + +signal cb1_del : std_logic; +signal cb1_rise : std_logic; +signal cb1_fall : std_logic; +signal cb1_edge : std_logic; +signal irqb1 : std_logic; + +signal cb2_del : std_logic; +signal cb2_rise : std_logic; +signal cb2_fall : std_logic; +signal cb2_edge : std_logic; +signal irqb2 : std_logic; +signal cb2_out : std_logic; + +begin + +-------------------------------- +-- +-- read I/O port +-- +-------------------------------- + +pia_read : process( addr, cs, + irqa1, irqa2, irqb1, irqb2, + porta_ddr, portb_ddr, + porta_data, portb_data, + porta_ctrl, portb_ctrl, + pa_i, pb_i ) +variable count : integer; +begin + case addr is + when "00" => + for count in 0 to 7 loop + if porta_ctrl(2) = '0' then + data_out(count) <= porta_ddr(count); + porta_read <= '0'; + else + if porta_ddr(count) = '1' then + data_out(count) <= porta_data(count); + else + data_out(count) <= pa_i(count); + end if; + porta_read <= cs; + end if; + end loop; + portb_read <= '0'; + + when "01" => + data_out <= irqa1 & irqa2 & porta_ctrl; + porta_read <= '0'; + portb_read <= '0'; + + when "10" => + for count in 0 to 7 loop + if portb_ctrl(2) = '0' then + data_out(count) <= portb_ddr(count); + portb_read <= '0'; + else + if portb_ddr(count) = '1' then + data_out(count) <= portb_data(count); + else + data_out(count) <= pb_i(count); + end if; + portb_read <= cs; + end if; + end loop; + porta_read <= '0'; + + when "11" => + data_out <= irqb1 & irqb2 & portb_ctrl; + porta_read <= '0'; + portb_read <= '0'; + + when others => + data_out <= "00000000"; + porta_read <= '0'; + portb_read <= '0'; + + end case; +end process; + +--------------------------------- +-- +-- Write I/O ports +-- +--------------------------------- + +pia_write : process( clk, rst, addr, cs, rw, data_in, + porta_ctrl, portb_ctrl, + porta_data, portb_data, + porta_ddr, portb_ddr ) +begin + if rst = '1' then + porta_ddr <= "00000000"; + porta_data <= "00000000"; + porta_ctrl <= "000000"; + portb_ddr <= "00000000"; + portb_data <= "00000000"; + portb_ctrl <= "000000"; + portb_write <= '0'; + elsif clk'event and clk = '1' then + if cs = '1' and rw = '0' then + case addr is + when "00" => + if porta_ctrl(2) = '0' then + porta_ddr <= data_in; + porta_data <= porta_data; + else + porta_ddr <= porta_ddr; + porta_data <= data_in; + end if; + porta_ctrl <= porta_ctrl; + portb_ddr <= portb_ddr; + portb_data <= portb_data; + portb_ctrl <= portb_ctrl; + portb_write <= '0'; + when "01" => + porta_ddr <= porta_ddr; + porta_data <= porta_data; + porta_ctrl <= data_in(5 downto 0); + portb_ddr <= portb_ddr; + portb_data <= portb_data; + portb_ctrl <= portb_ctrl; + portb_write <= '0'; + when "10" => + porta_ddr <= porta_ddr; + porta_data <= porta_data; + porta_ctrl <= porta_ctrl; + if portb_ctrl(2) = '0' then + portb_ddr <= data_in; + portb_data <= portb_data; + portb_write <= '0'; + else + portb_ddr <= portb_ddr; + portb_data <= data_in; + portb_write <= '1'; + end if; + portb_ctrl <= portb_ctrl; + when "11" => + porta_ddr <= porta_ddr; + porta_data <= porta_data; + porta_ctrl <= porta_ctrl; + portb_ddr <= portb_ddr; + portb_data <= portb_data; + portb_ctrl <= data_in(5 downto 0); + portb_write <= '0'; + when others => + porta_ddr <= porta_ddr; + porta_data <= porta_data; + porta_ctrl <= porta_ctrl; + portb_ddr <= portb_ddr; + portb_data <= portb_data; + portb_ctrl <= portb_ctrl; + portb_write <= '0'; + end case; + else + porta_ddr <= porta_ddr; + porta_data <= porta_data; + porta_ctrl <= porta_ctrl; + portb_data <= portb_data; + portb_ddr <= portb_ddr; + portb_ctrl <= portb_ctrl; + portb_write <= '0'; + end if; + end if; +end process; + +--------------------------------- +-- +-- direction control port a +-- +--------------------------------- +porta_direction : process ( porta_data, porta_ddr ) +variable count : integer; +begin + for count in 0 to 7 loop + if porta_ddr(count) = '1' then + pa_o(count) <= porta_data(count); + pa_oe(count) <= '1'; + else + pa_o(count) <= '0'; + pa_oe(count) <= '0'; + end if; + end loop; +end process; + +--------------------------------- +-- +-- CA1 Edge detect +-- +--------------------------------- +ca1_input : process( clk, rst, ca1, ca1_del, + ca1_rise, ca1_fall, ca1_edge, + irqa1, porta_ctrl, porta_read ) +begin + if rst = '1' then + ca1_del <= '0'; + ca1_rise <= '0'; + ca1_fall <= '0'; + ca1_edge <= '0'; + irqa1 <= '0'; + elsif clk'event and clk = '0' then + ca1_del <= ca1; + ca1_rise <= (not ca1_del) and ca1; + ca1_fall <= ca1_del and (not ca1); + if ca1_edge = '1' then + irqa1 <= '1'; + elsif porta_read = '1' then + irqa1 <= '0'; + else + irqa1 <= irqa1; + end if; + end if; + + if porta_ctrl(1) = '0' then + ca1_edge <= ca1_fall; + else + ca1_edge <= ca1_rise; + end if; +end process; + +--------------------------------- +-- +-- CA2 Edge detect +-- +--------------------------------- +ca2_input : process( clk, rst, ca2_i, ca2_del, + ca2_rise, ca2_fall, ca2_edge, + irqa2, porta_ctrl, porta_read ) +begin + if rst = '1' then + ca2_del <= '0'; + ca2_rise <= '0'; + ca2_fall <= '0'; + ca2_edge <= '0'; + irqa2 <= '0'; + elsif clk'event and clk = '0' then + ca2_del <= ca2_i; + ca2_rise <= (not ca2_del) and ca2_i; + ca2_fall <= ca2_del and (not ca2_i); + if porta_ctrl(5) = '0' and ca2_edge = '1' then + irqa2 <= '1'; + elsif porta_read = '1' then + irqa2 <= '0'; + else + irqa2 <= irqa2; + end if; + end if; + + if porta_ctrl(4) = '0' then + ca2_edge <= ca2_fall; + else + ca2_edge <= ca2_rise; + end if; +end process; + +--------------------------------- +-- +-- CA2 output control +-- +--------------------------------- +ca2_output : process( clk, rst, porta_ctrl, porta_read, ca1_edge, ca2_out ) +begin + if rst='1' then + ca2_out <= '0'; + elsif clk'event and clk='0' then + case porta_ctrl(5 downto 3) is + when "100" => -- read PA clears, CA1 edge sets + if porta_read = '1' then + ca2_out <= '0'; + elsif ca1_edge = '1' then + ca2_out <= '1'; + else + ca2_out <= ca2_out; + end if; + when "101" => -- read PA clears, E sets + ca2_out <= not porta_read; + when "110" => -- set low + ca2_out <= '0'; + when "111" => -- set high + ca2_out <= '1'; + when others => -- no change + ca2_out <= ca2_out; + end case; + end if; +end process; + +--------------------------------- +-- +-- CA2 direction control +-- +--------------------------------- +ca2_direction : process( porta_ctrl, ca2_out ) +begin + if porta_ctrl(5) = '0' then + ca2_oe <= '0'; + ca2_o <= '0'; + else + ca2_o <= ca2_out; + ca2_oe <= '1'; + end if; +end process; + +--------------------------------- +-- +-- direction control port b +-- +--------------------------------- +portb_direction : process ( portb_data, portb_ddr ) +variable count : integer; +begin + for count in 0 to 7 loop + if portb_ddr(count) = '1' then + pb_o(count) <= portb_data(count); + pb_oe(count) <= '1'; + else + pb_o(count) <= '0'; + pb_oe(count) <= '0'; + end if; + end loop; +end process; + +--------------------------------- +-- +-- CB1 Edge detect +-- +--------------------------------- +cb1_input : process( clk, rst, cb1, cb1_del, + cb1_rise, cb1_fall, cb1_edge, + irqb1, portb_ctrl, portb_read ) +begin + if rst = '1' then + cb1_del <= '0'; + cb1_rise <= '0'; + cb1_fall <= '0'; + cb1_edge <= '0'; + irqb1 <= '0'; + elsif clk'event and clk = '0' then + cb1_del <= cb1; + cb1_rise <= (not cb1_del) and cb1; + cb1_fall <= cb1_del and (not cb1); + if cb1_edge = '1' then + irqb1 <= '1'; + elsif portb_read = '1' then + irqb1 <= '0'; + else + irqb1 <= irqb1; + end if; + end if; + + if portb_ctrl(1) = '0' then + cb1_edge <= cb1_fall; + else + cb1_edge <= cb1_rise; + end if; +end process; + +--------------------------------- +-- +-- CB2 Edge detect +-- +--------------------------------- +cb2_input : process( clk, rst, cb2_i, cb2_del, + cb2_rise, cb2_fall, cb2_edge, + irqb2, portb_ctrl, portb_read ) +begin + if rst = '1' then + cb2_del <= '0'; + cb2_rise <= '0'; + cb2_fall <= '0'; + cb2_edge <= '0'; + irqb2 <= '0'; + elsif clk'event and clk = '0' then + cb2_del <= cb2_i; + cb2_rise <= (not cb2_del) and cb2_i; + cb2_fall <= cb2_del and (not cb2_i); + if portb_ctrl(5) = '0' and cb2_edge = '1' then + irqb2 <= '1'; + elsif portb_read = '1' then + irqb2 <= '0'; + else + irqb2 <= irqb2; + end if; + end if; + + if portb_ctrl(4) = '0' then + cb2_edge <= cb2_fall; + else + cb2_edge <= cb2_rise; + end if; + +end process; + +--------------------------------- +-- +-- CB2 output control +-- +--------------------------------- +cb2_output : process( clk, rst, portb_ctrl, portb_write, cb1_edge, cb2_out ) +begin + if rst='1' then + cb2_out <= '0'; + elsif clk'event and clk='0' then + case portb_ctrl(5 downto 3) is + when "100" => -- write PB clears, CA1 edge sets + if portb_write = '1' then + cb2_out <= '0'; + elsif cb1_edge = '1' then + cb2_out <= '1'; + else + cb2_out <= cb2_out; + end if; + when "101" => -- write PB clears, E sets + cb2_out <= not portb_write; + when "110" => -- set low + cb2_out <= '0'; + when "111" => -- set high + cb2_out <= '1'; + when others => -- no change + cb2_out <= cb2_out; + end case; + end if; +end process; + +--------------------------------- +-- +-- CB2 direction control +-- +--------------------------------- +cb2_direction : process( portb_ctrl, cb2_out ) +begin + if portb_ctrl(5) = '0' then + cb2_oe <= '0'; + cb2_o <= '0'; + else + cb2_o <= cb2_out; + cb2_oe <= '1'; + end if; +end process; + +--------------------------------- +-- +-- IRQ control +-- +--------------------------------- +pia_irq : process( irqa1, irqa2, irqb1, irqb2, porta_ctrl, portb_ctrl ) +begin + irqa <= (irqa1 and porta_ctrl(0)) or (irqa2 and porta_ctrl(3)); + irqb <= (irqb1 and portb_ctrl(0)) or (irqb2 and portb_ctrl(3)); +end process; + +end pia_arch; + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.ppf b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.ppf new file mode 100644 index 00000000..db79bfc9 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.ppf @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.qip b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.qip new file mode 100644 index 00000000..d4720390 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.qip @@ -0,0 +1,4 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "13.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll_mist.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll_mist.ppf"] diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.vhd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.vhd new file mode 100644 index 00000000..b54b7a75 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/pll_mist.vhd @@ -0,0 +1,461 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll_mist.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_mist IS + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + c3 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END pll_mist; + + +ARCHITECTURE SYN OF pll_mist 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 ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire8 : 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; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + clk3_divide_by : NATURAL; + clk3_duty_cycle : NATURAL; + clk3_multiply_by : NATURAL; + clk3_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; + self_reset_on_loss_lock : 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); + locked : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + sub_wire8_bv(0 DOWNTO 0) <= "0"; + sub_wire8 <= To_stdlogicvector(sub_wire8_bv); + sub_wire5 <= sub_wire0(2); + sub_wire4 <= sub_wire0(0); + sub_wire2 <= sub_wire0(3); + sub_wire1 <= sub_wire0(1); + c1 <= sub_wire1; + c3 <= sub_wire2; + locked <= sub_wire3; + c0 <= sub_wire4; + c2 <= sub_wire5; + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire8(0 DOWNTO 0) & sub_wire6; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 3, + clk0_duty_cycle => 50, + clk0_multiply_by => 4, + clk0_phase_shift => "0", + clk1_divide_by => 9, + clk1_duty_cycle => 50, + clk1_multiply_by => 2, + clk1_phase_shift => "0", + clk2_divide_by => 181, + clk2_duty_cycle => 50, + clk2_multiply_by => 12, + clk2_phase_shift => "0", + clk3_divide_by => 91, + clk3_duty_cycle => 50, + clk3_multiply_by => 3, + clk3_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 37037, + intended_device_family => "Cyclone III", + lpm_hint => "CBX_MODULE_PREFIX=pll_mist", + 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_USED", + 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_USED", + port_clk3 => "PORT_USED", + 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", + self_reset_on_loss_lock => "OFF", + width_clock => 5 + ) + PORT MAP ( + areset => areset, + inclk => sub_wire7, + clk => sub_wire0, + locked => sub_wire3 + ); + + + +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 "3" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "9" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "181" +-- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "91" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "36.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "6.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "1.790055" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "0.890110" +-- 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: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "4" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "2" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "12" +-- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "3" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "36.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "6.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "1.79000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "0.89000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 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_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: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK3 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA3 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 "3" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "9" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "181" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "12" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "91" +-- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "3" +-- Retrieval info: CONSTANT: CLK3_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_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_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" +-- 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: @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: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" +-- 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: @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: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_mist.vhd 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.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf +-- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/DEFENDER.ROM b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/DEFENDER.ROM new file mode 100644 index 0000000000000000000000000000000000000000..17a95fee5709704e09f2193f77289fa8e5f92451 GIT binary patch literal 26624 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 W&HmojqemHb*#E8l|ENFh|NjSO)%1t} literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/decoder.2 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/decoder.2 new file mode 100644 index 0000000000000000000000000000000000000000..4e684cfc364da485b01b56be24115932c86e65eb GIT binary patch literal 512 zcmZQ@Xkc_~WO8a^c5Y^IX<>D3Wpis|cW>wL=-~A1EZS5<@4*~_wN@7 zm>?K9Q7CAVaPVZ2kSU^}Q^mrjiHA>@h?pT6Ia4ZXmUQ%NnV31Uv2*3(=E=v;S4dc( zn7B|WX_0dBVwIF7s;NuW(w3>GFW1Oep_#c-D{GZ@_G+D+HM+TL_43x~=dU*?*kD+= z(Wq#Xaq(u8k}amCTg}S0nU`<3sMujyxznm@mv!}So0>hgwR`RA_Sx6(XP^{-{9k0W zvCwcsfx-HG{dIYIYjbtiX*dz%|ut1D}Z3rn*zbCVNOBfb0&0MsRq AK>z>% literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/decoder.3 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/decoder.3 new file mode 100644 index 0000000000000000000000000000000000000000..f1bfe7901034cee1af756e9d4260a2eaa65caf92 GIT binary patch literal 512 zcmV+b0{{I00RjUA1qKHQ2?`4g4Gs?w5fT#=6&4p585$cL9UdPbAtECrB_<~*DJm;0 zEiNxGF)}kWH8wXmIXXK$Jw87`K|(`BMMg(RNlHshO-@fxQBqS>RaRG6Sz23MU0z>c zVPa!sWoBn+X=-b1ZEkOHadLBXb#`}nd3t+%eSUv{fr5jCg@%WSiHeJijgF6yk&=^? zm6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y}rM|!NSAD#m2|T z$;!*j&Cbuz(bCh@)z;V8+1lIO-QM5e;o{@u<>u$;>FVq3?e6dJ@$&QZ_4fDp`TG0( z{r>;^`uX_x_Vx7h^6~KR?(OXB>gnj`=H=w$;^E-m-rd~W+S%CG*45P0($Ub*&dtor z%E`#b#>K?L!ok45zP-G=y1BTwwzaggvaztQuC1)As;Q`_rlq8#qM@Llo}HYVnwglF zmX(x~l97;)j*X0qiiwDahJ}QKf`Nd4etmp-$ CN&f)= literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.1 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.1 new file mode 100644 index 0000000000000000000000000000000000000000..3ce77f747a8f616801284f78b899f67a2af8748b GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.12 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.12 new file mode 100644 index 0000000000000000000000000000000000000000..543f94268649dd702da523424a236de13ef25183 GIT binary patch literal 2048 zcmdT^{ZA8j82`2yjv`3wPPs1C!Fe21=hg*OFpBgzjTNH9m&8Qfc-a~^Uv`btE+E#^ zYjXgEe2F7!I~OSbzc&@-ir=}OpEFH9vU|tX&IyUXEIbg8<+X zwUETJ1Cithz0bV+YkxSGF~d~zcUh;`o{6^#LbOfj^zIi@z7-UZmb}kvheVrD={>M$ zrb#5=z3{QaYj=R^wPl&w_q$^QLA82=v{pg0)GjTo4HLU! zUEYsfYU$!za*zlCtaG9^Grs%kjdf`gc~hSj=yXn==fxvONQz`Aief3&!n(~Ot{ebv zi->!+x;=z@jkTNs%b=*8P)O?tVk@zgXFbygcf0436y<|Qwkdv{T+B8#O>3=DvNGu- z8KBrEeS^NCf#=P4dxVaH~zB8%<}{xkA+k6l(MlN0w$qaxynCaHIgzzK z>ux}5Gm z-M~ADRATNGetoANas(A1-Z12D68w7?^_RJGnE+wt$MXuEa%>ZF3x!U?aPN4onctJ! z->YXja*N8oym~x$Tgj8!?lNIvg|m|w&E4cClF&wgbHdd*q3x-Wr9Ip6#W{TjJiIsO%KAC4#3kWs{BbcELHTAg zDZ6~+&}iaO+>Fm=!~xV>k=bDe!m=DW5)vFprE;iL$UyF>*g_geN6~81fDmFF1&Fp- z^3hU@WvL=lXfkjsxc50jdqMm5_TZ!7Q1Eu}Venq?PVjyyDn;eU1J6k`>6{pt{ASWP z@och6gLFuLSW~Ji)ep1Tk?ibjQH(?=Y5<|$1nKOKard}KJ?@z??ulRC+?WwP{dG%Y zX2Q7eiF&*yhHj=E-BU2M555+cKkAKJncaWlN2i)5T_&yM&yWy06Ih0i`p)=^U&TB} z|0)%0BK7s7!l*b;+N6nSG}ExXu6_yXuzQZoK)6{LR|Dd2>$@HhTW_`AB`! zsL-Z%Y1(RHs=SfJui)YbNiuH&engx-dgZi0Kg`SEFxrl2jH57a0UQnkFrCbJkxa)p z67qILO&8ly1{?*;T^t4>{gP62NQ_IjqjV0FSva7nbb$y^X&5&j;|v%#kHg;JFesDt zLE(jnJd$$$a}f-nw1cLs|3dtKJ^x{ZOz_ASr}z`HpX!nQHLL8c);tt%wTe5f;6xFX zR+uVKJiRlk)M|CfG(w|tVMV>BzNx9HK2onkI;{?AwOXWA5MU+JK}yL3qk?~m3h7i( zt02Hi1X(4o0wxxXp%{vyXf%q(hKGm85V+xCG&DFkIE26r4x*Hl6qEv0v6L8^B^w$8 zH-?gBLqp((kRjRekV7dp8+OxvFxl2;zlGUSQ*S-9rP>bOiemOYTPnvLyl%I1s>`wK IToji17tQg~z5oCK literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.2 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.2 new file mode 100644 index 0000000000000000000000000000000000000000..2391e270b5dfd6221c7bd78274c53c451f82e9bc GIT binary patch literal 4096 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 V@nwP|C(L^SHY!jYKbL0A{vRkDed7QC literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.3 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.3 new file mode 100644 index 0000000000000000000000000000000000000000..d8083609520cb8c9ac306cd4faf57cc74407a075 GIT binary patch literal 4096 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 bIcwJVKU@!*pPlR`uj#vglqdB4U*!J)tghM4 literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.6 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.6 new file mode 100644 index 0000000000000000000000000000000000000000..d407e0cd5b7804f05a34be2e8d05c908b7c93021 GIT binary patch literal 2048 zcmdUve{2(F7{}kc_WEvZ*IvuYAQ|hebl0XMQb5$g;zq2I5fYnV86nXDMiWgm7ZY7# zLRYe-x;QTWyqm_Xk_<+Q$siygaO_ySF-9er2$IllCGZCl%7#HDfIFY}w&Fy2h7+_y8qeKwz8+l!TGfn^rnBd2%}!Dewl%^oIf^T?$82;%dh z*(W-1VD`O`>^`&EE>*1ULUKiDynMwPM@J^Y8_uO86Xn3R@5w-3V!_2qHsZ2{#w~MQ z7E%GYY$3_M1N*F2poP8k2XUR}=tvVJiRb4>eQ|6C8EJ;|?Vd6_SAt8XAPaE3xR{a3v^0(JhPx4-r#f7P?2 z$5UPO^!L43kF&>*7Y}i^TYXuJrI^X?-(Lj(EMGNK{O)mj#hM8^VU#KE^EWS*Ywe9s zF7>&qu!%7mXjBQGjlHt65?(rl3`WL8ddgrllOCef*TA@DVI|8z&p>QJ26}!C{}@F~ zh@v#aB4Iy5arVLVx>bQd5VD+qNs!i6n*P&QX4+Puom)_u(OT{GYh}~Z0Z&ae%z?*w z{N`zGAw(mrbGzM*>Vi8De#rEFYBp$^y~1i9_20QWl^Y!e8Nwi{)|mRlh@ZPX66cDn zcxGA|lVfLBkL(sz3KV7RHDxTYbLyP>qv+?zOl@FAb*rMj!HP^y84Fi5^IPl<2})kQ v{CYvrPRw=MSAq8xMST?(COCK3=HRvd_-6ioqN+b0yrzt`h*_klp<((DD;?Xr literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.7 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.7 new file mode 100644 index 0000000000000000000000000000000000000000..b7b3dc2b3a655bc82d57858ee6feefe5b3ede660 GIT binary patch literal 2048 zcmY*adrVVT81F4@FQC{B< z(^-!$WbKw1n1+cnQ{x|tF7C!t9v5kw>Y~yu19XW|Vsyh`VJflv&TU2I55D_7&Ub#l z?{O-Sy#hHVkc$GD62f6QZ70(kL#w$6uDvK+!+bZ=9C{Q{C^)Rh6cT+p zezfIO%doYhQVcy26TgX}I{;Kty<`kcpzQ?=R=8ovx)v#Q-_>ua%A1OrhbrA^c~gf} z0ZWuL;#IV-gO<(k_m|m`B25`O{1%DZP=lr@YMFES3(nP)^Rid(=6s4w{lZiMzQ6@3 zdNh#2N)-S`xeZu7WW8H?^B@15d{}BJHQACNQr^j z^1B&LfLaT)6SEi?5Z5eqFh#R!(E}(2z*l9OQB+QJmliUW2ppAuvp)AF28fQ5eb_(| z!#7lnBH`z!xHL~UlbY$V6c>qk(artSA!{MzMK{AAa+tjq9r)uefo3KVKo=*V)7kq6 zZllqx)%w5bP{gdURWDL~i7P%$w#_N0QZUhhF-K~L7?jbcL~~(I_=k|C_INK+8Lj+e zzqqO0YY6+P8%)xNK-*KX5p_cDPpz%ybsx*Sk-UqpkHz0IB+ z_5FLt%X@q5$#loVd2a&zDI&IENF7K^r!ee zF^k09v>;XOX8yl+>rFG7GunNx_qZEPeb92aEK-^-CVu4ys0~&sJfp!~IMvlsq&&PB zfEO!0>G@}>JR1Ee9MQ(`+%Na4)}U+ipW zM|D^0%PuZ^V+YY&Xaksxbxw(3ymh-uCtxsbjxX}qY?c>(=NVX6TJKd zzkt_eo@{L$`&!xM_N{Axr)S;Km-;vwhhRJ_rvt8*%}iJ8pe>x6uZr3D2U1SVHdr0z zV%5QRG$Mp{vuuE6mj;%yYXWQ7hCl;*Byfa1A2`om4_s&Cfw+d%#OJZ|;)q4@61F66 zV{P$`?8f*mc2|5ayEpD-y>UP5kK5Hwb(LM?)KuA7C#$fhJJXH!3}=SXKJFYh+8;X~ z8|`stTw$MZPE^?^os(6pU=wmT34S40-KfSYO``@I{EdFB2s8$85i~+l!yX<^!(^sF zN~8k*k>utda(Ljm7zzksi}WM32|Pd-#^Uf;l*DiWPc``&-7fE=dI%N|)@+-$3>Lw% pV)Qm7el=2Sh6iM)NOsW@^SXm|hC5yEI`qu@R+rlVkM#8K;s29+-o*d_ literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.8 b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.8 new file mode 100644 index 0000000000000000000000000000000000000000..cc85b0665f2ffc166c7002c75f41a9a96a8b5c25 GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.snd b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/defend.snd new file mode 100644 index 0000000000000000000000000000000000000000..76a93cc41149a561ed599b3535dab6eff434091f GIT binary patch literal 2048 zcmZWpYit`?6+ZK@bI0%3jO{pXCb2WqO`)42AXq@+&_La&-9#dwZXa@m_`yb6wW~f< zb-l5TqG5NNAhPPtWSjoTkClVSB2_{SS|lsY53H36R#&QQ`dFJF*aTEH+b!EVcI@Fy zBKX1HJDPjHIp=)manBvy`AbL_SvW(TVHAB4&d^H#BBOj~keRG${E1k{dmEO4@GM5^OP4Rf*yx8lY!3;U>p zSHMv2nCDSFJTGYBS-*5!ZI{jSUd=0g7*i;%y}*bTrKPniw+b#1w4kD+O_?w8s%3b1 zc+N6>5x9$Bi82O%a71bzm;Rv!=i9ZQ^dP2)8m|Qust8m;M{93YDEt23RDme1`jE9E zaEAF>$#=&qa}|N80r`&jr&xh1v!hy2^x+G`v13@lBD10Fat6xCng+fiU{b>P`1oHe zaB^4UU#Fy%*kvHGG!V^QZ2ktd zzIqwlviS(Mi1>t5ow!!*MsOORqaM>$@615ONpMu1*X`2AWYeKA8Zk&@TZuo0Bc$=8 zVrwL8jZmY-)({fpps4F;$^Nf2V+%z+W-B4A(@J2@_Gel0d?^grgts-~%Q zHY`!2M-VHHd?Txx5{ZNP?N|!@`R#9uHHFF7dQ0ZjPKipMESnY4mCX7grrVAY@%e4M z1&y*dUmFw~YMaERpiQyQn8a5mxAzOjLZMKx^=KzcValobu&2h$-W+8#*La!7Pk6?~ z)=@0$K9Yl-!al7A^4k|G)*P+1=eK`>8%7gytme;|gq*pk{|M>))leEDM)|`ryrSKe z5awsk!F)vPx*nFLl8;pFMTn|hc#U>?hg|QJo*b9&6K;1>lvq{ynV(#SZfO+*|A8vV z-@6Qc`Mbywsf3bhL=^oQ5nTXC)5>pMGB-g{zC#NJTRt>AXY@Q)% z`;0KzSjP^GVvPfz0?9Wl6=$_Gc2wS13G76pd5rRxJZ1N%lu-bT(P$nQW-rz8a4^J5 z4F6fnEbTZr)mb7k*URMViIIH$tz_0A(`9qkgYULyo6XfpiOFv^kIM2$*4B;AviZik z*q#k_J2Lh}v3YE!>oNQmM3U*i!^7iI*=r`bh5tR3#irQuPBy+?wa+^=N0dnc7B9B* zx779IKY^RBfmB-qnHo^2UF&C?b@cc!zgZW{jl)~sMzl8Fc&)Lg_UGEwt&Xk8R&ML= z*3~0=@ZNGmBa6!JNN$KmH6_BXvJFc?t{74 zU+xc@!5r+*M$wIMz+-CHL4MV3a#K#~koy2oU=RJ#qi4Sd+Ppa28u8b?N-s^OsVY|LKT(`@R)VjGaE4S-5eF#J@a^G&zga z=5V?^J|XTRMob1L!y+rO*j&DV*cTs*_lYi>g|wMXEJM?%vg45W1HtxC2j;lFT%(#V H)~NpgCGWgo literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_defender_proms.bat b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_defender_proms.bat new file mode 100644 index 00000000..d268e4f3 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_defender_proms.bat @@ -0,0 +1,7 @@ + +copy /B defend.1 + defend.4 + defend.2 + defend.3 + defend.9 + defend.12 + defend.8 + defend.11 + defend.7 + defend.10 + defend.6 defender_prog.bin + +make_vhdl_prom defender_prog.bin defender_prog.vhd +make_vhdl_prom decoder.2 defender_decoder_2.vhd +make_vhdl_prom decoder.3 defender_decoder_3.vhd +make_vhdl_prom defend.snd defender_sound.vhd \ No newline at end of file diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_vhdl_prom.exe b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/defender_unzip/make_vhdl_prom.exe new file mode 100644 index 0000000000000000000000000000000000000000..1e5618bf9417eaeb90556e3021a78e9860a815e8 GIT binary patch literal 119861 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 literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win32/make_vhdl_prom.exe b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win32/make_vhdl_prom.exe new file mode 100644 index 0000000000000000000000000000000000000000..7dd3525d1be82e7c5a342be5560499d6fd15b784 GIT binary patch literal 100636 zcmeFa4SZC^xj#PVZFiF_$%Z5lAjk>_nm*XAUbo>BbnlB zY2QD6k5Tje(;L^db%(oRooi!F>%+}W9UYzV@S12i*3%Jg>j+oYHiXxAwnU3ZjY==n ztm~?Ts4=p{xu5N76#0fIc7!-2{6>ahjuBxH&Bf&t;y^C$AzUT6C>_J5lG{L#^2@(L zKmfM?#gOF^WI|g0$a~@@$;E0Rz6SpP@ZT08@<&Kq)+EGVM!>tM;&^mZ96;k~_@P{3 zT!}&;jK9^QZgp`>Qyi>>tgjLTP-X?-uK&tK$zX9z5k5s8<+xa;X}COpperw4)7?!} z0qN>Ik)Gfdv3jt$P4Sa;vl@{BTr)jH2+Djb>Kln=Gl?!-lurUgs6R;;ZCQe^!be%ZU7%yVyp|x50hD9m>~q;z zXadr0(R6Q0RN_bSD^v0nP_6-;@81$6G9c;Bny|2#P8LlfA`zs4W`RX1Bs=FP)eHW2C3yHA{ZQS}Q3xh*HD-dE=0ifP} zGxu(Lh>Q~a3Q7lCub5h_ZA=IKy;-L6~&cb4O4>tOt1p*|rJVo9BUR@7k2PTH#ev$vp{`d8XV@&?X3m~~@5Vj%aBg(2YC-dAn3 zJ+)f&ttzyEw^6Y}w?dlUSA$yzd%nLj07U5vy>A&=Hy%Z0N_gvF){S$?#}Q}|RRiGog`t!b>Ujs?$6aC^y#*NR!&%E)8ctP)= zk@Zk$%iG~=f7AE9-ai;y-kzLQ`Mo1Uh|fsI{Vwa_VUE9W$4(RbV}*GiXgQl ztLm{`LkRchu_Kheu+6@Wy|Qoltq^PI7voUV^Vw(mss{S2ZrwU~?L6q4eGenQkH~FZ zM&I1Rp+`u!e4x+1qd)ha-n~X&yf6TgzQ#g(=;MgH;Hq1Dp7{1J&Hk!^{WhCV>>|^l z-=i9K-ivbe=dpwKg?7pt+HR-J6g9L{c2H#3iWcZUn_X(_o4Z1|W!?CBFzTPk#zNDi z4^<+kos8KQef`S!MXqxDi)_V5*`935t)agiJBB)*1bAp1lTa6A%ml^zI8De&{dA{2^edqbi=j&}*>zjQ=>|2jt)KzW?rhHGgNgM5^FClqC!` zI+oW6d0+&{z=k4?p(Mq_6s+&DtvN7f(`WW9rSe}d>RB4AzT_I{vnuIQPnqeFY5 z9!B2;jmzkEGK#y50!cc^Sn)(~rz3-6jvyO5!OP__0nlGIP+Z zQaopZ=S&gzBk9b?W&6niij=HOm*Y7e?sHViBG5=HGn_UZ@q0eNVl)<(pu&PAgf*4f zv(=gXgJVGS(P2bq4I>%=QKGPe6uc2#3!*`+5_0)6xja3Li+>oGi%InCFe1p9BF|J1 zy--rm&$kyAys)Y;ANSKBMgF$BV|$K{ zAXy$WEm)9R2{VRex*HkoSu~8u8b;JlqKk(SjT%PO3Zg_!tpxG#n%YVNl#lYpM~IIy zm#+@X1w%$kB?%CrG3Nozdl?(^@E!Pp63r7m3vnwGJ-M=V&`Qv2PB@2th)%xe>0!Jr z#lv)fU=O|DcDBLXfZyXSy_7D!`sM1^I4{W-!< z?B!EI;;;AB0#FvhWast1WyM2#*g}|gJr)!L+v3w`M2d8m4@;#+w?7zy3`x3_`Dz13 zhyJ{SO{fpB?LFVxP}(~`RD$6vp1$9a0cP-)nRO$TK(@V9;eGj%<(0^Izw;Jm1yWV) z!gUKdymWz~99edi)p7KF3rzYaa^k{j?g337W->q8^*R#nBuVe9)Ioc|jp@(R*sag( zItrq!8y_T#QB1J)iTDMmfOD06s$fZJP!8H!rLr)kfWyda=ow6~4p%{K_d8_Bzx@u` z@lTG?%ZMenS{!?lk1Z3N|rThz@glM305Q}CxQ%4*- zum|jq_3kUY@_molV*agQ5nnt1q*V z%+!FPH=!|X-osA;Qpe-T4Ht}w15Sf3DZ zmAL0_LzrFcz!Bez2l=me-@LubUP1I-WO(>uNYYCFkKDHq>Ree^-XG{aZ1n!g+34@j z-L|g+nU*W=uRif4NOV$2!=9gpfbD^Se~I!E$Qnqp-+)Fhzd+8{Xe&|0Frm z2PU9`wyi2G^wj51ku5p#slNoQq_VD3(<*N^w<2!n6ZknYDy6=b_kI7e6%BoRdta^T zAGH$YgscTypUC>ytH^6-BM_x;_Sf0x{V0~%zbRl{7C7%mSvT||uJ>`HcQAO~(>*Vt z3k^MpR^K|m!S?^nR&y-$=k{W;u`r1)eX&3CFx1e0T`)cIl zQtw;k@q-{JvGOPgS(j4;DeaN+9cFuYhzXgLwAO-g!UFKt`C&uukSsZCu+t-@!5M$5YKQj~jJ)yq=l zS*CuQ20PGSbwIX5)xMM_xOL}`RjI;{9z;OdgZ>M)9?RM~4f*zW+gsnv+B$*3iU4is zR{Gl@om=J`P^7Gf8UlM{xihQ^yZ7x-|5pgb7xcazj>mf64#dY&P&Dfnut*q4SgCsj}-KWW;}U4nhb1y-?#jbYzoHSh}fj)H*nlP+`}gM0c>k()?YU@ z$2xL+(wZo%vci^CSrOnJ&zx0Z@^@qI!R{gx| z&!?lU=l4Wklb>N^-8#6p?@c|PuP7aCK$;+ixDaTw9*+649=znZ@Sr0$4tuj5o z^qKx8!SkNq=(m;x&ih_0*!vg^L(zG^j}4U$UirSg!|e@v3w%|WCF0??Z(iY015A1E zTY-(2Lts|Z&=sf(^rPyXbOdHSe4kI=26AzO>44h*CO#|c;b%(U+_ox|ehCVd3}`pC~PTw`39K9mix4+W(!xFGrq=XE;cmr(tEkI{b^9|s!| z)c9GBd0)|)IHJ0R;4!*f?dN}Ui`a(Rb_Xz6Q=zXl{yzj;imp+4B`VJgl z-^tvD44sqg9$8hCtM9<@_K}T~sFJ7Q>OmEzqttS0w1MMG=(vh`PLjo+?_XI6%0K?- z+eaoza@6l-rN?LYMRJaJ0EKGqhEa%(?z?)_zacks>`U zW2qm{?O$PUeWu6XzX)a~Ua<9r>xTNT4PL*Wv=sF%w6<;~fThP2LXPKhJY5A_goI8n zCd_-`@U;uKtu%%%Rf_jP>4sbycecE}zNaqhp*pxC8whpxECgh3d3yz+4Lx%KSzF$& zAk^G54UoO%?RrA7o_s(EG{$qbyd95c_P$cG@?AyDo!syT4 zNo;Xz%?FVcNhWw^BfkjQJ1(<@{y8Dt{CM z_Y(BjFgp?M==-p|r~mQ5t^!a)P3HB38b+eBAA}gy-Cl;Foj{&*lB>YGJ* zr5K0fsP{d)$9=2vo3)5N@-p5J&|g{9UuADwZujL?UWzfqS&e6uG+PYrcUll)*>{y8 zVplt${wk&Vz|90s)kW3Ooh)Tv)$0jYI%<8NZ1;~U8IR>vB7lmq$yrK&ql^j2d4y61 z{4STXj{+t~ZpZTGfvA7tPZ6eay%3+gPGAMi5;ufJp*e z-^UL0Um1Y+`Go|xcA2FOqnWUuuNLea1b4J&E(~eBFdsZJ`wpVD^3iI!Al*x;gKSp) zZl}Z&P{O{)^~v}Qm5-#b_vrgR zeIL^Ipr(6E!}%IMs^M4ly-4G2eGlmS>pK2regBKTKc(+?>HClMy+Ehit>Kv({;7rw zHGD|JLc&7-srMyA-}#k%5--n#p}zdL$Bw}Zr~cS4!Z6bOV^{{>`}u#S2H0S1H~!V3 z9bs-H%+cv97>NF#Dad<*{zEko>5j%DZ5peROSGH)tx_o4UKB-N?0Jb4R>sQ~3Pw)b4O=TYD7z)V;GO zo-Sf*1XhAgkB2+Eq8%Vf7aQZEc*D9D@{TpdHiz4y(dY$mP4sj}Ww^LI-V$l=T-(+h zDJ?x`ZgEq4`%Kalcl4}}#(+gUkr$+=i)cr@ExwsKw}Eq4XDl8rN*8I(?N^5(5CjP) zm@x~H*3{Ax8y*wc5N(ck#)_u4gj+f{cEmfwB{M*s#wAdoMKO|GT-tM!r0Igx(T#`W5%Ovqp_l%4(1zeDPj%Im?0~OWo~QL zh1WT0$XfwGtw)v{*O!(kHHt_uzAhGtMb~$3h(@lCZjQ8|2}C3rmB582l#AsZS9hRk z!qHd^R6<17H$m)JtZ0T*J2dpv?xLw{XNIS)oe>Tf#iDVj^n3s)*n-$vC{9NlEw;W1 zl#)ldsIqqHg6d^6lF_V|p7y2~6{@JAdNJZe?S^QqwY_s=IM&p$HtHs=T~SrPsHXO^ z8KQ9=S~A+*(;jDI#ydO1-Rq&6Y)&qGjCLUsSw~yKMa!2}x~Z`4uQQG&Z13#umMxB& zZEI~qKWUDJiyCWc8yb*zT~jRHc0#H;O(n$33(JL7Q7*!`%5iPNbr-Istn*nL&zZ{w znDMst(Qs>1TRRl;{B*GZjR>^}Pwfh?Yw8YnbcWm3H?57%>W0d;b#{nwctu+*-qX~6 zX-^bglnGIW*3KA|G`wbWJPOT?hp7sR3z`IJ+*a!9j`p;4qWJBd%}wOTE)ef*?raaE zKD&vS+EPrNd#5yO+R*RXu8F#|>qWQNAeu!?z<>zY5B%dFpNF>8mCNvZKPOiM^HwM6 z?N%(cY{GI%5AHtT?gDP4zqxC$b{AI*E?9Z-AzXLidH~mBxSqu|gzIfwxy@L%imM#g zN?hx3ZNhakuHCry;Cc$zPjJ17E6}2H%*TBiu5)lL#8r>01=l8AH{cq;bqB6{aqY&n z2iG93Cvp84*CAX(xPFi8ZCqwlh#;<9T&LlhhN~FYIk+ywwFp-ot}Af0;OfA&3D*s{ zK8ow(xcK+~=d$k;mC<%g6DnXSVYAvBw9WXrsDh=74M&RxV^J&`tx==B_=>SO8n5Vy z#b6fe)Zio@I38EsA|CW$8`s66O)Wr**NClY>W){bq2Ov+Ax75 zb8Y5?s3fK#4vX5;Ro&6rxjFiTxS)FxOdLa^n=y@T%~w}+!fp!jxLMtS zl46Q<&2eQmteR-khU3t}vT8b;T6CEqk`5>=QB( zAGEb~M_Nu&uteF#NU^x&IugN*ud^e%sVy!p0JJt5=jhoKTiY$>0d7N`L_0Q!Dummc zJ3BT=j1X;rIjL;w>WXlpgE^$aV0wp=%28X0Yeb}}d3{TJhqwu$_1&0{Fe9-;M4DCT zFCx;)-2!k77?L%Lzg{drxD)o|GX`de%~y-XW<<;Qh8gMUkhu3-k&SH~>zn=!Glg$j zO=~bI6yLL;sECD?v6`c87&!jRQu!RTTAMKrBcESdt(>EZ|F&AYVwm={ieDqt6K@tr ztX8U@c$Ifh{@!Zsjz+H*uUoD0DCWg~v|2Z!Ga#nW=J3yaX4>nc>zlha!&cau9a>Gz z-2_^vJ05FCW@0r%9nI^z#9D^%pRKXM6@kWP^*{Hzq^f>dRn1vyijS;vk>CGq*ZS@a z&9S(gJwn3w{!V2LghJ&BcB>KIQILc=_Z}RdgcF4C1^!pmz_=~tq5#)i%%8(u@3r&) zibg$&LU8?yDd}yM3jO~T9V9}P{NvNzc-jtsGFqpTTjYu)$| z;;W7;|3_B2@v955Pr$=K$^ZCzH$Gf668|2I^NJ~7b>4Mc{(W$xsrUnkzwG$(eb9|B zIip;hry5LhQTb+1C^Ed3rtG1zp;4P@^D3XZt*$AbA(Y` zJUj7UdTZ!Nn1wNTw!Wg9qQ%W(_L`oy_7?TqGCN5)r?{lJR7bX*Q+AF_Eu+txGaEA` z4=MNwZrXVzw_J*48ouUrO)+8Ge%I#&M_wGT!<*HE->!Hpg5YP2JCVfNNP5DL7(WJV zn*Q!}^aKu1j_K@L#VX*)Z~|f5w;-Wye}Tzuzr?4eHUbG)N@v>_p_!aW)yj&hy2k3- zWs&--irV^0QD@FcdjnCv#MHflvsm-2v|mAQ%qgCTMeR+POq+9cjP0L9inG(sLvnLU zAj!dfj4{tiTMIogrv!b=de*Or#^54S9$TR~ai6=EpP`060gOH)${k z@GM~tXfOou9AR$PU@pLOg?Y0E^L>ljJDcJSczhD(E&lI26t2M65M8?%rMXp7SyMi0 z5VHuF+caiCVyb}oxW?QnF_pl4LSsH@_^Mjkgn7G$?*iNn_zn&40K8_CFz?jxy`%?x zmxk{H+zj|`4c`yA3Gk;hyqoE}gn5sKzXrGs@D2^{krGuvqMaJ^4N&N+{j^360@aN~ zyEME{CTc*Udo|{}pxA_`td?kt>vl)%XZ%B`D{IPAhDg7xdfCF-+8SX;sk-S4FK?_8 z_P-ZFfzmIdHrg@vi1bPYbaNH3Y1{B3NqbtOb+&q%LWvY=j=UuBn*DTVnU zQ`vSL$_;rMz{q_3qXgjPT((%4uiOv7wzm+qWWln^nkr$wN?w-CNfFI7W+L8+z%#p` zu^Iw3ELc$$Sx{fKKy;ZO^nVkTCY3za*?w7PtVNjD%4%kpgl8b$)2*=AX{_yQY+9>O zTQmw?l1_)(Ry_W}AYHG~L4|IBSA_2ogn5IGKnH+>-X-tVSo8y6lhikAe7?_Z^DK0!CGOBP;&Fb{%24tlJrj?9YxY(*c|T~ z0Q0l{Ke8h05{Uc!<6$Ulo8%cQkhlb(%py}*$Jsmcyfj)utM2%i3(}e;Bc}IS%DUQW z7@ztE5isl0zKlp^_%2PWMwrc^O;LTcS+-MsTAGZoAygYenYQ_M@FfJY7PY|$vNnbJ z=O9gE)(Yic7Uo}qG+@YgS!1NJdZ8#V-w1vfQ4_K`P%~vmMf-AuM zqhw}Iv8fr&SJ$+yhjYSwOJf7RhMqMI+I6%>n19mvVCX?9XUMl82InZJVXGbcswcN`iGRY>fJm zB>EbDok;c41&ga9ICLShq-p_PJ&1C%Fw}@$JH9C1p5X18FsFuo!ak20k4Bo;w8Iun z(-@N&z|%Es6OOebO_9d)T)v=4zTkjl%ee0a+ubsf2Tcc}}PW^=M8h0tOj&L^opi4beK8 zQ|5^bRw@Z(pRp7ici}W)9oI5uS?GDRnN>GZ%zq%IZ8P3&(?!)aRc@o^nzw{Ll8#1Q z+JrZba95kRYH@|0BhD!nY}mYhO=o*! z)0%cL{e+GWB$>)+@cg8X3i=x0Agyh!mHx`6_9gI`QR{Eld4_xyn5H!~qbs1}wKXH@ z9Xe{XTPNOS)4vF_ za`T`DE&pqbecsL6|3#Qc^Cub%`2U^6FK966U&7d*YB1zq!?Z7IFxN+uRNJbo+|M*N z-~UY#{ak|u{wFBLAq|H8e`N+QX|T}$62V_+(Tn^M68}fF4|c3*DP00hH1iC==X1g(lV0WbVP#X;A7h)JAp=>Gglln{n-n% zk~$U0)@E4gR9be5PNi#5>r_Uz?x{+rf*RC1HA;h8r!qCDbt+4Pxk`IN*@Mz##G-J_X>0A4P9J2aTfSUCjwc4|~UDHQ6{ z8dX3l`Rb2@W4G|_(h*_OdL!=D5rv3=ZnQ6m$75}4dhkTx`;3k%VwChL_&%#qGkqHy z)^%>YtgQnpn}qK_e9F?4pc>qQ&k?@+GiU%%jTF@a!(3KuZEyrHVTvT9NFvZ_ikkqGrTeVPhh#xhT0 zSbM7q8OGC?ZMg;P*(lIn%afp+cF4FRSTAi$23q|kEac>*ArD$ z8L3@(F{W!cZ;PxNFmFrZz9Vtu=Tbc`F%^r%eif)`fXCpwGK}R`4R{(tYMtv7Dm9>p z6zP~O(+W8^6kEc~PSwd4E%)X1Rg1)yEmBobrB(GSP(NF?D3z(HsalK{Ja$ZKPPGD; zE@-#}G>UWM<#km=0EC@74~jU>kcKR1OK*tQR+unEjW^Qq!umu@D*ZQZ0*!57i{H`4 zr|_FI?1xY2IS=3mRQDo&!afAkBXuhltq_5+%YXq;O(36LqQDN^{4?Cg;4wtLFb~|4 zu(4PwDVIF7@j)hV>t2veyc|;{J8<`$G3Y`Oyff#Ee6_ftMPd>#mXD!tsW<&DfhkU7 z`oKNE2P-RrP6Jm?+5;ASIg^^#MVqh2lU@f_lC^LFfG{czSx?3z$SvH3hfzJG8HZ)AKV&hc|QsJ&;jS7R|%UEK}#qgHIVN^A$4bGkL$lO@9P#C8h%iPr@jZr*{ zU*b1jL0%SrumBBD?MwX(qb@1K=|(l5#ko!(%Ec8}X0aB-?l=8%46{nd3Ng76YaE#H zn|=wZ3r z?R-ErJ|(^O=Jw$99W>z#YDaF14P-_=v&x(+#-zH$z71sH~ev3Ou{!#h%;)?&dr+MSbt_1_?hj%&AJXh9{@CKI|4Tm{TT%CHzN{}i(7D*A)bf1 zMo1Xnlgzh(@t1SU#l4`q9%rW%w|8}4Q_;B|N{-b%EY0_c9zyhNos>>@VLbhT(a^%} zcU@Q9)=??PvP*lg)DT4qW%*&`*V!a}>e$(dD8Wmmv%r(w;RL z+AqDEHCo5z$au2 z?9MG0PvR;?if=)(bJ?kl+gT0AkdAATyotUl6CFT;S8!d0M6V|jJ*X0up=ID^CSVw4 z?+1y0XcTG`z^woR>vhaz-~t^Q*bnN!26i)$T}0sh>_7lMhk^xm)=nTWg;upJ$b_G6 zk{H`wi~D(H_b`L0^a3HtUIH^!p6BajPR4ANQ^rH+P*cjWK&zDNf>1}OI`}T zMi}QQIOB65{ceJ^nWX1`GeO!M0qF$_E}PEMUigNLoZt&V%JV5ixgT#34Y(J{s%!y@ zZ!A!#vNIW9p^Lws$*VY%hxmVE%p&SNfM*CS=6u>PX2WvAGF3B?W7&1(f*2U6TGo|g z1&G0-F?6pwh2fcXq>+u1yU2L>N(a1;epIUF9MX)zzgUTdA>#v=Lc$Dq2zOMw^;~?_lkd zc^4kh^R83(HvDT?WWj3}bklU%3&VdumCmukP-08H3>ROOGS{B0%p392zPTyZa_VJ% zRmzNqO`U@Q>pDa$1fysS#E>S#GW`aB(Nrzhg7@#1`waL(5;fn-bt z-bF3Mi@k2)T%cov>FV{x713BH{VT$mr(;6t!(UuD^L13N>nt8#80W%VmR-NLS+09(=bdfDH+AS4eyPYlb+RePo?Ex{Gf^(s2AG-4Q5&j0!=X?VJq|Dhb z?{>~J@*c>25%)e2e9 zN)#{=gLFIRbaVDe%F_Vju^RI*vURMP82J z<}g>IU@U<~>IwisKu)C$1H9DuyB<69@bWIQj(a|h6>I~?Duek>Eyg5IF&t|y;wO2^ zg2~nvU_1qKEUq*Sr1R!Acxg$Vr|; zIu;Kyoa8B~WAV^IIBycgbu6CJh>X389^o#5H82dqxQV`O< zDkPrEp3%rcB2_hVp3)xgZowW4`UINs@b_P`K^&{3?l>xRH%;`cCYpI1QFl+LOZ1#3 zDgu$X9>p@n*;ub}QZpBLKd?G%Q}HQV#>ds4|A8w?d5m{l#`jMfJrkqiKQ;m;t+JJH zJ)7x6=q)y!irV$epmIGkMAx&t!}ZKNUC;6k*E8>QJ@c+y&kQNov&1D_&xEw=S&~TC zGeZg2Gl7KbnLxtzOn|OuNkP}M3c&TO0&qP`61bif0zN4cdR9T@dS=*lJu~b&o2L>;x}FJnT+alx>zToX>sbM=>p2;f zbTjXh%{JWi?D9*xo{5pJXBp70XNE^`J3a5n3D+}mUe~i@zXnD08GH~JHfiuHm#~#jRSm4)?A?=Pgk%c0cVdi6OIj#x1cVXP zj~DY`QPLs_bf!k*;~_xn5kfzMbBFjEy#>n;#Z z5|=PWgtRe|B+?i$lrTmF62^!?!Wa>tF_IKCMk)YfqyjKTk_5&`Az+Log2qT;Xp9(A z#)zSWF(M$15d$7$M9?)x45t_)BD675L1l~>c8w9k31dVcX^aSYj1fU?j2KK9BL%p| zC>iB7MlMYf_Z``ksqeu^C5@2`Xk*0i2*!wLwxIhSOp$40L?B^|B&BPN2zZSVVUIEL zfC*znoYxo)GeABg(t`DxEqGy}*EJw=W6}dKjIc-LFk#|LG?JnSv$&I*6m5!cip#H5 zow8XG_q6cxLlo2X_WC}rM6HCVt~2K%+A6W~WF>Bjt1Ymn&UjMV`>@ldjuQXxnaA1b zhu@pWVF>}J6&}+`&^4V5rF7=C*t297 zzRf8embTLc^F`XM;ohJLhzhvgAZu(Mz%)adKE3zdINhLTv)kT)Zo3~8pTd={ybz}| z4rVq(QOkpYgfWE_vte;G8oNw{QAp%6BJu78D;R_^m5J8_0~seGGR?p{X>Qdw%A~Xd z$d9Jt;~@EQGS4#7(zFM+B4Ff`uVDnQ=53q;MoF3f223XN5W$U%EXV*O!|>U!0m||u z#$5V1OhcGg?D?)zlF3tV~fb=9O ze5!o6jV&lm-CRMF@t>M&3Al1)dXjWQb8|b66-kf=HK`3!EYzT-yZvM>U2`n%p6+*Q zjon$3%0+MBUuWzrdkmf?Y|o-${bs(uQ2cCX`G!Y(s7<#yW1u_1l5e4Y?l&Q)l>wTvuGZAy>=j z=nc6F3;=`&;3mHUg8cX-$~h!n?H_7wpCLr+jza!0LQMt*7Tj#{dAn%V&S;P(+>pJ@N9 z1sSDIdG^1uRO|tG+5f6g=mDwwUlls2(8(RGHzf5fW&f)phuRI>|Elo$ z&hY)O6dC*ToMHQ46?wZzXE&jmX6!)0YejJ6{jd2nz$E4K^(c~J|7$R@-SxBnr%{DL z@BY`-Ahc|fr_Tfk}Tm2T`nLX18qRcZ9$_n8J!o9<$3deTFfGGHmn<^Z~A-m+; zkx;@R=}#YxRc+ZA-?c-MLFJHShz?14heMKgIwa*C4oTkWkmOxCBpFf;Nr_81BnfGU zq$H6JNrn;*NdgInB!PrOk^mi&l7bFN6@Wuh1>lgBBydP71RRnQL5HNm&>_i?a!4|i za7Yr6Q$hwjPt^q7r)q{%o~nt^Pt_`@9Fh#X4oQX+4oLz@ha@47Lz19&NHUmkNGiZ} zNG79_&c}VS*@nLzarq_Rju0aqk}{wjk_?aFkd&!C4oO9(9g+kRQ$k7UK2;O&K2;O; zJXL$Z#8WkK-lyteQ$oC~z|^g6ZKM?o8H8{4+0atUz5u_Yjm7xQ;(9NUV?@?=^ysDA zSkmlHj)XBdazy!DtocPkKHPE6^BDTx&%rKNt^Ov97H&v428lHq@;ck`CS9IP2$$z$ zlwu4v!OGRsd&$VC8-wN4I57`r%?V>4r7~7PQW}P_U*P0$5B+e4k?#Qh$^>wH802iLS!z-V&(tpw8uBF$@*yB+vwjIW=WB9m0ataob)3Yi1`ZQy|-STL53CL4l)d<3^GK# z_tp!QknlUOM!bUzVb37r0TY7^aqlq5_;?&?Ppb%Xuys}vkUa;(rHd-Ht?l?xUX!$zS~?%$m#MAyF$$ZE{aBA* zip^beechA*!8yWOt-z39dxothg}}~Z+s06pM*9$G<$)(lamp(m6yV#KC?}><@SAQ> z-m?(O;13erjogA*OQ$^9v8J|eo)V(YhqYP^nzMdfkHEI>L5fk38Lkys>g{5b6xqm> zB5$`xHI*Vx3bZ{is%cIF2#tz$x5HVTrQ-54u^`mQX4dBRI+2yg9^)?-nkCMswOWk< z7imtq z9cTyECd$M0ZZLjBs$r+{q3`o-Fb8(8rLDDiGoZCq|?dL*`bahh-6Nd%&_=f`nY|oHCZSBhj$e$jeK%!u<#A@+y3O4@J3djYfo#f`sZaA!(ruTx#D;+e zZ13ioSo%1tBHy;`kHBuGFXPzf`&jmPFlN0hZR>6pzMHd|F$+BGgdpE7k}VEV)GPko z9R|Kzbp#5pmasH-CgN_>ak-wj#OEz=Zo|iQe10;X`$O@`8f@i6{3mpLLAr7jV`GCi z`6sjGqui8mB044Y?K*n$aa$35cWB0i!qLY^4XY>Lo!Os7HTi5-yq!2%AuHj)38YtJ zJPKi=qvzHPDhCcjbl}K495}qwfg|s5;P6fd4)4l=!;o^|NL<2!Lr6PtB#Ct3FqClM z5J)(12qYXh1n9t#6m;OI030|f00)jFfdfY&;J}dxI&c(*4jhJ*1Bao61BZZg;4t8s zTN8BW)(of2t%=ZcYZX)u9EM#74#Not4uPZthmgmCLr^<#7)&^D6yQ2=l2KjWVT_Ne7M$Xa^3%BRFt~_P*0oWZHp4AmPA~l&%AZfOl?9*fY2GfQh*^ao)ML zox1WN+nrnc$Nv@zI$F-H{S&IC9RtX@wZDL44JNIl)!f=YQAGzvtGTuRG!-8N%(=CH zl7d4>uIJYNutMd6g_>LYPgj`y(aE{Bf3jj+AWS*8_7|>%OgRDL{AuvMjBaXakqam; zP*zrq=4^o*mFFphElm9po`@Rv@lp@gJA#h}tdDHKkW|kf`>v z;F(*7$!XB|k0oi~Pk&dJ{;q`aIX4r0SV+B3#W@I{ku7MC#IPA2@BNyX- z6HLZLBJzU@5qv|TGqzb6e>IGc0Y4V?90SCWb8L4En=$_SV+Q#p1>>(jgDQypmd=za z7RD5unlKNuvvKl$E@37gC)-Ph<#U;i7|%Q+Z8#Orm}=Od9FL|_F1;j-rgK|(nj+dT z2m56p+jN=Nc!Y|Kg~)Znc$@~X(pVyc*eWVl)m&w;UhwC$*(N@lt?sj_N(B+920vsL zfp>`8yy^|k>6&m&hl<<;J`?f14B#2WgT-l+plT3y`wzg+XaJkr5E0%FXw3Si*wvW2 zN_V5IQF)r5@ql5x1R7nN4?GT8PG2L8uW`0t2J$xmrfg(`LGmd#AaD)>g?E7Y`$7K}CCV|Td>wEE5mWP#)3omZGPhSw ze;W6X06YCT1ipa){^$zD<~BSDc49i&hGRsu^icQb3}ZVord-ccE{gmUDKb=!8Yhew zWVIFL9!jgw{oF~;-8)cZ)$3FN?~mVN*-Z!kWOLZ0AQ@_*WXCOk2@hdf)+ zM_9}H6>}O?z>&{AR_xovyRVyHms09Oo*nhvV{K>!xzFaI4$1Apbd;l*-bWnM`-o$n z@DayJ9Pn(P%X1P^HV#t&C5@a|*`FAcx$-1u=RrxG*howX{1hq((-UC*`V;eg@6okR zVd%q{zNXVf#B(^EsiAWzJf{0NEQUwdI@2`9BnI$w4cmlyCahDWF+NG5j;?iPXk-9L zxT3KC4`1(b&d}I&V%?)_oijBy2rQ1Sb!KWflQ6QJrQr}@d33E)tTCg3!FmK|wuW;h zg>XtVJO;2ny4ESxxP0K`(Y4MTjTsLN45V<*lC^N#HMpMgL~QxF>=?d z&3JdyH|I|716;0iOXxE&J?ZYzwa%?tTs+gs=O)k5wa#ri&dlJJ9_Qns3MsRleBSaN zSnGU3#|M(E^nta`Cv}wj{5R}OMdx;%Qz)a0Io+Yb5f7<#?hGA5^|-~uGf>JQwa)iL z^!H`-lhM;UU+i$_$+XT7+#$sX}+qVksV z(^q(YygC|lkHdDJ3$d5spjtd0cN`acP{&&Ok+_1NEO4H81=QH;JC*^i>+tyqjaoQXL={<>=(L5i&UMR zi0qe|>(umk@{DfphTrUp5WJ-U`{#?P&#Xl zPNfrdD=2zt`xM2`f;)p=m)!3p*eR{0AMqDxDfu*%p)M_iq-?>#}E= zQ&tN<`|sz_&7?(qhr@xLH$oH8%Uwe_theHP3lO{lK0f;$$b?gt{RD{IKJPiI^)06& zy9@I!6y7~8)~U=^Mo>rv*9Yl2RoS$vcqUFCZrK)Pvn2AgSas5Pl0OApoSlUX+!73r z<2mF$TT%>9ES!2N+wn=Uv@E+H34^wCQ}!6lRYwi?{5b=%5Tm@FKWDqdC8}YVN2|!$ zmOULaUFG?6K9M?Cx_unXP6oBfI;Y+jaD0JpyTFg^9KqRw2%v*;S|ypUoOZRX65-0AQvZ zzLw{*B%^9$ZTKE^Q~RPed}6S1T~Ei=c$+Sx617~tw5}EhM^sidRMb~v#aKNyXg1`& z2~Js;;0G0~hTfGj8TD&XXKW)*5yCe=*I`MsaIVlX7|f#7|)=i*_(XH&dT;wWJrIBXr@V_CL7aM(J)IWuI(={1Q1hphu~nRq^a zoh3_aE0^PKsr5sqOD;Yb_6}&Y5rJ84Yr#_RxL zaScFuo<+_RWkF`KAapOpHefN+tRG6qo+QgLo8|a1$R{meu}aA0*97k%So(QnHX5ko za$LAs>V;7u^F4$-+o$4WKaf`Af$Ov`9ZLW?=SexLD2J-PMa))ZxtLixD4WW13A3C6 z5E@a7)M1{Wg7WH@%Zu^tSM{h0jdfo+7;B^yU69~jTuYJqi&6?i%gh8b0=EJO;vj8$b)I?pCM}K!1WKoBV{vB66 zsO~^!iujBRWf{sGW-spChErIB^Iw=u|OD) z(~jDx9Z&ni#jB2bbvIQA)g{S^2%rl=2?>V<&9IPw~pIo2xpOA7gP zJQ;(n1&-zFjI3?%T+`GZ;W=xt_qhi9>y@~6!Mdyj zVLIM=j9~z)cuUHeJPklgn~PQZ4JVh)ev$`o0fPIH#k%v36v{{eFtgiTC^QXpa&1`#ntaJbb^OE3V$}r)9*RJ^2An1t#|UDKN3$ zPl1X3ehN(N_fz1o{eF%V&a>Z-RH^&@6vn&XPhq_K{S+p--%r8G{eBAGfsJ%(zn_AW z`~4K0-0!F0%! z#Z_GFQnk1W-&8TnjMtHLR5N}udxTjobIrW8r>R9{yTB+%6l6|GXD*aEo^S&rH^dCz zz^KI^wt-P$Q#LRv)Nvaa6?%jXj4A>hC}jhq!XCeYQQ?o@z(|ot*ubdB+eMb__t2#f z8@m>6yyHJziVt|EgNr0B1!*=(v4Jt&vw`uqP=<8x2F7~or%m##F{tTvZWft1Ja_m9 zi}3+ZTGI3pH!$8Q88N-r(kAvE@&le+@~jN!rD@kAY{J4Gw}EkijIh1gCzxOZ<4&1D zVo6lM$~3qp&1u;PRYem-`ME-2Ww|Pdh$Z-{MlvR(V~|6Fi-sHepe~>Fgg85s&pWV4e&7n?wmX~YOW92eFE4qbnCMO#@WmnOV7vPl|ySY z55YQzUB%qKQf8r7eyr_oZE9=h2f>WB#tyLNaNLaHxE}1sN`HEV&VKEsGPxMzX4y2E!QZRF&^Z`IbN6w`+f<*hWQpM z#1}Qf#^c48Kp5~O27)LjQr}nu1*vYV#@F*Au5-S!YT@$5B5dD2CJolbCs$9~cZ}f) z+vHz?6F~5A!ehuA@d6EwwH9nnvG3FbCJ69hCKxE!U2ESp=BskF#z$IXoz3_JPYsS6 z>6V`{w(lPEs^p7LRP*(!a!1;q8Z$#;@$FT9-MxdWb#&A{Iw}_>=W0TGheqU&EE(;s zuy<}uj-h9uXZEeGOulvM^p>@Yh!lE6hR-^G(^`ob*;ntF=0QbBSMfApNQ$~ z!5d-wp)tLZnn!N1Q37@E&~o;!F+BI%Z)3C-fsqJ>{jh9XdwAOmXa6r*y5v(#>cb1R zV90Gx=>Czbqnoj7!YHVQxpWU$)p$IGPTB@^I%tFuR&6QL)xqPZ-;Nl*h3SZH;)r#R z1Op<&U__9b4%wO9Z}WxVs8al7dNRi1IGMSAzFuP(L!ih)UU;rk6l%YS z+(h>0fuxbS8`n)RcjIB(M?VGR1X!G$)xchlYxMKL%m+q|n~{y@%uN;-t1A<^3S)*k znHGtP&&0z$(p(Rgd9u7SWO?x(K$UlfEbn%k-#H@(VVp_YFEAg!&BAezPR%SPPt5n^ zS1$7_L0*sH`Z3bJnaHnP=Qjpk%MB`rg{*}oIT$ygjS5vk)U`m#?9}EpobQi*st*p| zY-FOc4uCyP@l&AWBr0zmUX`n_Y6)Yr)LE3wJp||)m9-6o{u-t6epWe-w;#(oKMHOK z0UKN24_^645gf;AM+-2z92wQ&GH%LogF0GF@H9Br@r~m_a~P{J)~8141(4&PMFx&F zi1<;o-V;#M(gUNm5E;{0e8>7J;_>|@NGNVVC7#r<=iT@;iyMX$F$#|tBM4OPo4Yq31NrnbU0{*`!FX!xH-5ipp)gyLB4fcZ}8kS3th9AXtbDXZXt zlc|FB*q$<5>5bm*c-^v6h{6l9 zEZyA;h`el$&HjijAECwA~9_S;(c$0Yx()bw; zoQ)7`<14t}g?tKNS_D6Mua@?2@@}VbQ9JBK`WD=cIt&BvBvs~#Bg;$YU~MyU9n{s2 z41-egOiGR{gHrfR(wN)rpp;)jfl(BdDG%T>LatN^DYev@E{Q8Hc->5X;?wB5w(&DG z`5|zaJ_{p5@$AHZ*>7fHK$(T9K0Xo_UpKqGbM2hs1~Hp^8e7zFi|SvJZccGYajA}M zJE!a%iIi;4nll?l+d~SLV)3%&;ROxhImL5Ii_bC4@CbSb_61E^w;ZC|STW;N%!qAR~i#1E6nIf~YJV3JWk(r6Cw#Drl=r zQOR)fjM)mk<2J7nGvQYqd?0HvU8CAyddTwdB*f0 z+2lBg!thL3G0sa!oI!#ynh|m*hq1O>9vPco1cn88ojfj2kO9V61~3#(lY9$uluVL% zBGP6`5hZvU%EiLVa!o1*UzV6$!ZJRLJ#>i*J-yhtC^(#Avg4tca<P}MmK$%JQ2G)i;ojpe?T8JD94&dfj% z8x-b>Qbf+;%>-Pmq2ijB5+i| z@!exMk(KN(r-VMq?)dJ9&gbnpKDSHyUEL2T-B;Z$(M8jfJ%>#63>sx7A zCUhyG%vs4|qw|fdL)pm$ti932S{=%LR0ecQG&%6Ot~TX)8Xb)}MybMBrF!{F^~R-2 zCKXm{Ivzb_-=Qjk=>*-FiPkO92*j)Ao|r6wLY$UFki#Tz0wUbbDmf5wx-tMGwz8+y zQq76&niI!uET3yv{NA<u@SUhK{i&51cvsmD zC;EFG;ayabw?aJ1t?h6?>22BwrH~p1Ke<;WGLiz)SOo#5*osj}{fDa4&{N41B=4rW zQ|md|)TyI_&pRsklTxWB4Jad@=Bh_JP1w6>XG&}*MmA|yoz#xbp_%1Dr(nPLEA0rR zj>T!-N>6vk;tY2z4(ez*2S^Ug$-2u@br(vli)>ftlEZSc**;tzNF9B0Q(G=CSw}Dn zNq|i<*4suj`7jhG*J$4ICMPvYw|s8-{cic+U0?9%w%d*;?1YIXlVc?3OPmtG%CLxP>5l9)v7=I}F*CL1vW`n64JnMdo`wt?YqLGc(SJs}Rg=Tf z6h=H*>uiR78k2 zCc6=gLaJhiT*b~#ZO756?U>`8CFX+EGfT`v0TTo3nB-WhhTXBrMuc)FCwVG%oQ{uGhwLT zjrM7kk`*QU{0V1Lu4V*W1Mqh=Db>UVy=pYdt47o*ZHu8(?$b*sRf)1wl?XE^Z>Lcj zfO(W#cGV4aGs4H1tQDBeMC-|34y{tNFFCJb#g9`HtnsXHwvL+kLyHJVP4ecQY(Hv~ zu6wCXsmkS}1{MoVx*>;sGI8p;D-+$yBGKJhOlr00W6{B_ckRxACQrV%%UR6(4sb?lYO&LBH@Te8q zJzveF#wlAy$=^HaMZwX0ZYHdUQK@D)(`^&fj|lnLA?TxnuMWNF6#m^KJ^r204#W5} zdNGblL0Aw@_*@Z4b-U6}`p)jwmgt(crjFS-nR0edcWm}?epkFPXz#%m;}hrMQk;@} zW_NYBT#Xl8%|bwSb?`BYxUsFHBVN1?PG_OsPpUA`EzwpL=D{%dgl{5(umZZ{E!eZ6 z!gvW1jbU>gAiVXBH)BVvifHDck1B|>_F~-40!Y5Nb4(G!o0oemW32V^2Y)~RszB#e zft#%>1EZ~98}nva*9_cq&pkV>JFhLieET=Q(X!*3E3C8utNpvy%f|25-o18CVD*#M z9oGgf{cVEy9S0V`wP zJrV1gc~;i_ZqRg~kX6t}Q(Q!?JUJB=5xgnZpYo$p|Kp4{;>|)cHag~T1a{G>( zt;_-IvPbUu!>r5K1$r)<|76RBGp~U5%(L=8WpzJdtq=VEo*j=`1)s8_E3FBivNpvp z|K{2=zG|(0n<%umccto!N0+qu=hynI(~a7O+8fWWS@&ol=gISH0_y@f zk9J>vh1GL|l`&xT%!7>%6wVLim^Lc(8L47V{mWJC@7J>Md{FN={Y$MFu^j}akjLqt zoP9qfO?hf2G9HD%1jGH@gR;<`S;o7ZS@3`d&Luc6NzNKDvyeS^BGhKkFjiWlF1BU` z!dC_6e`2YX_pJ4$>u#`qAOaUZQM1C@eI1PNvw``MrB=y+RX5KnS!vyifjskm;I>+O z#entA>*nFU(zNkTJu#(QU6Pjp+F7Qr=zA7&g|oN*Z-T&2tR5jt#Jsu!*msN<5EMV;Nu`9;^g)2*K8Zk*Teo^jxdgKqEYONZSvyN2EF;-&6ewhmwT-pk{k+ff&|Dk#!78lm+{&mxXvzI;ibI;vWylTztB_w&Orww;4X?OafIq~e}4?YxcKhND% zd&R4tAbs1V?_YDPds4#PP}_;=@$$d<(vp{#Vg`N6r6|K2sS}GQZdm;B_}k~~M<>3^ zUB8;hi+=jVvq~aucD3r^0z#Q zTV`fsybFF)yzA6sdn+nnF?kC1i+?JMIo;t`fT88z{_-i7|)QcOtqG7L{zz2*w{#^T!H;oUFC zcdOfn78Q<@8I6LMb{LHdRPg=XpUjk~jea3V>^SB!kQotR>tIEQM&-lt?oXW9jkr~g z*FD&?cpJK0bPX@N_ix^J`O2m5TH@9$a`Tv)&7O1Nk{jj>^{mOfuj$DPE^~_q+?riW zJC?dc8%=CU{QOU zd-A7we&$PVCZ14tqf3=X79PJPo$!!pp3bIk7AuaN7aqrqgU>o+>Vx++HkdD_=rxq& zWY}Rwr5-lM+$!|6F>43YkKl39H_tfss=FcPPJccoU?Jv>7H{b{-2}%=BSR7mH7WJ)u76ML_*hpQ@pCOat9RVkNGNLeG*e0 z2an>)DbAabYp$-_T#e~!LeNep@Vw)1u1-|kJgvHN;q;0d0GjYfmve!p*>W;A21ZBQ zR2{#$qUDVzEEzswd*v;zJ6tjC;iku$9&du|M;A`_W$mBQ=$wJF&DAx_Da+L1PzkWumfSD@k>rd7umR98OSJe?}U7d%{DiR^XA zHmPj4j}-fm|1RFZ1D2};ZP)_-Tq5F|q+`+afQD-^CxC`!cs{Dn%au7FGq&c z6VER%RU>cc_-&@jd$o;<>|lqv(D!VxsC6 zx2d{jdu3DgjNudJS9ew%oK`&p7+9g|F_e8A)_9abet|B}ZN>j5_~6>j6<56Rgk=)r zEujd%l5JwF`WF#QoT8owngkA>b8ogLon~CrS=1M?b0-dL9;o0^JM)m0!=VS{UiNBg;r&e_7_+At69A=V~5hAZY**R0SX-7-B@9bc$I z+G)gf$~y$wj|lB8w99t-YPhnwdS*p-T6GODkQ#@ZDj&ZRs@6c&DySNVs+9@NgL`yw zdo2*EKA?@Q9ZiTn9m_{E(NNWd8Rg2+P{(51ncjr2=w{_J37-G5Be&+m zJD15+Upm|G_`3#kd);MSvOyrXY1aEXo9!4eYvx97UQcU3`1hwW&JylP?Qbw_wm;_H z8^NZ$!c=d5ptcJR_A%7;Q138i`iJz4lWJx0>n*C@HIRoGVWIYzF0)6rhYk3Oy+hc_ zoqPTb<~+_Z{T~rE&txv=sW16?-T+>_?Jcgu=d}7Ay+P2juF&SzA`Lrz`db(W)@HTv z#R^?7V;FqL0-p`c`3uMn^um_S>eDuOT~V90WEXC&dkR}9bJuRe%NV(TMbE&7=DxHp zt?XwuV=kr5=0L~~PdVehI~XXYw_jH7i*7jXd6^Px!m35%0(+xy-}#R6jDKok!E%nU zE3^N!UpwqeTM%wz?A#sQ72Iq&AKoFlbgPV2)+XB~4EQw}Wd;?Lrq&8GhIH+>F6FiG zuGQH3%>3Xi)sL`@#86>yz=XE!ZyIcJuGy$-+Rt2%~kvmeQ4z z7UW-%rZiUM7^zkxDRq)&jt{ef^F*%zk4NE^w7(GJ0ybq(`xxZR?hM?ahWpW=f#K6Z zAPqI#+|mxc;cs)vX6ZTQTlSGo$!F?%4P(#ax3}cAWz@)PiJTS8rZjs0m(Vsfg26^L zeYtE#?TF7k9Mld>r6!xd5f$sl=J0%d6`SG1UDzHKTjHzF3zm!-e?I-MV*$>gI4`Pj zij{=RC0|FlLgN8c>csyP4$=}Hk$i&isKyf}V~Qq0xK8qwgz}}@Vge*85tqjiQ+Hz# zlJ*gvu8y3BRK8BFS;cMYx?nmY@X(9?N@yZ}#iNf~2Z&>h==8Nl{-#aI&Hq71_cV_1 zr;@KB{8x=Pw1kkR_!4r#1~L+a3CULyHcCE0*erQ)lEl#A!UpR`*dh5i;YTE&Al$9- zgm*~3lJInd0A&)sUGj0lb0l9$xLNWE!Yz`I6RLf6AeZn9f=>|cmwcS?tCFuId_wXG zh*gRE{_Mp8mlBZNbqY86vB!nUPs(+!Y4Li<`(y!((wvYcfhKW6ZkdjJ9pR@no^V9+ zm4y2wUq^VaAs;4%R# z0UZcP8EQ$RIDHrg9ZASpTer6O_DZFh?{5T@u+dxp1q1aNH|DXY04zr zBKbPP4@j=Lg`6|M1NJUo%o-`L0N=p$;SyZlCL7{l6(!}ddbfqychydx5Fw^j}tJO zLCBpokgp+ZkbD)P`jiMPM#v8nQZV5N4#fyeRqDilDu+m;_sA3RXGlZMiGO7IR5;FyIGC>k>0BiT8$jyh;@X)w zAg2jnIgU3tLm0hJJZCRY)*8f3KwJg}tObZU?EQmeS(zV7mX&#vs*FFeKu|buR#*KQ z#4MbiqNse-1zI-3f>N);fev}&US_C5C|p9?t!0(9c5BH|Yq!>D$D*5Y&^yC`x8VpG zip~2%9E@SYddcG@T*n!Zd=+6%;|Uppqz6#xa{TYW5o*6zYE-q8pK(V;`aGa9HwHgxe%vLwKv?XAu5c@^yr- zYCPd@C0|4MJIPlOz9#uNAv6+20bR-05ymAygYYED*APyVd=(*I079MPgjJIF4aQ;R zhl>3Q_QogRa>%=En%}`egFFo=lvk6ILPE}~!Re`*H(|5ns|Z^(9;H-j$N374BOH=^ zoN$B28`>>658nW6)wG2AW}u4jdBN8Z{#f!=goh;`C;W-zecj1>RN;0j_v$=49h(|E#0 z$yXAlBws_gUh;9mtmJ(;YjA!&j!@T?!|4s0jIb#AIN_k=s|YtrzJ~Ax$>ak$ffL z0m&y!1iu~UTX8_@Hh`UyHCJcg^bA1}uy9BpQURmtLijGp*ATv2;{j9}ulr1b0(DIg zu9JM6FeQ04FWMye1b|B2_)lD@I_w`g*8+-Q2@Z@4oA)w9b|F%nMQYxv&WnfCFJNpi zG%w+|%mqM|*e`S1j4`sEkX?M-+1+vC?)DSU+sm^ejyE{F+fE#G&fCiqR&$z0$=wZBg_P&_wOPQ4>%D%>u;UVO=TU%IAQ63J0b`_^;9-{FnZ- zSV{Oj9E=&lRWas+IR;QDDuxj#w1`e)$tuPGn+15(5WYe3GYDxn;Ohu`HJoi*ti%c>=PQYROt--=S>b4M7Y}{vt$+W?>wAds!;6&)Hu|JayTvEppyx2m%REk z7mY_ep&k(vgul^v!aqnp0ie=8{O1i9+7Q9ZDton|47F!kFs2NP#tX$AP(MantNBn zXQJz`qKvtbGq*XsVKix?>rH5D%W#-mD^sqN=R|l;9k$@$tb+3fli1E_my2|}o(ONQ z{~7-GvOsMYzKji(IlBMhkNECj%zr^XVhBzgm|{*s-FnJd^#4b2T4QL`rBC2L7qHnd zTnA4C3~^FW6=3j<$RV7?Bbbyv)1^R@&lJ_uK!U+#=WZOGI8=QAu_BCP29AK{A)IYN z8whB=4Gfd!%!g3Gnsp9J{QzfNhEgy*+d_$nsvCJn-NXXqdAFat)Q5jz@E{ zE_RaQQw3qPYBcfl1x(X$pgy5KN1@ffcWatzMRO}?P6#gQ99J%x=zBMoz<;qeGJcw` zY2E~k8@tEHhchcQ&2&X`7no>7h{)5ZH!7MRl&$minugKo#zygO$z>-vZwVBSm9OO0hniTXTXRq~nRP z1d2(F1?5f7#29I47&mr~x#Yvz>r;82Byfmc#u`@wBi86kuFrTwJ?X5M%MbL?7I@+x zPex&0Vd*6p%1Yr{D`HcwFcYjL_s_iGvE=QH$6J`BQ!pA^U z13|%f!S%vRa7Af~2X?%TX)mds5?6h%#@y)8Z-OD8U!v45bUD!;K%_J3zK82)kKo2Y?Eu|3z5En|dcyDml>b4eoaI6tT(=;c>qk*9fTlQye%*+oA z7Lh5ku3?=6S;2MYG))sNGA0dV&AR5AYe*xqqB}6$XIKo2Igd;4+RT*L1 zk+TzflDUv2t*H)Y_$x^qVL7hK2)n!Fs+@9!9Yt0~*lozsb3rma(mtT{2VkM z5%3w&Ev0O4ta~k?VT{qU(K_30hpi);OpnbGU)oL?8s+!aX11yz4x_Tjm41KhJmdG9 z!HE5PG|}&K(cww2epB?KKBG??k&okWV+s66qb*7FR|XQqUq8iFAW9N_!JlNr7qf6R z%E$QP8@Qs!cl8oqu&s zJ!n|_AQ{W^UPUY)+G0nO858GBB01iVG}(DphZd9x7|qI<$A7j+(#FVF9M6j4u*^SdG_;eQH1__KEHnWT@ZIe$_-TXiJlA!(mWGZDit^zM7~P4Qv?or;$q=9(cd8;R!Gk zxkeLh_zB;J^UBm(<}KeuYmj(ml-P;!JOVVe8E=dm27&nEZ&1P(M_+u=_r*JHLBKGc zkKvGb&H_VA1J81+ubncs#yn0}pzkTs+IXxA_{{2F)2X zw!bt@6E06c(|QdfbbLOoO|;EeG?c;E`1*Vk8@J$$wTmXk#y}D6D7bIeNm60TztV_KkdYE=KxAe zJMFUxfMGiw1*FE~wbP{U(^V*8i(@-|+Ha@yzMa@kJE1#c(N()&MRhmrbT#NCHiCVw z!rVR&9yE!X71&kreJV7RMQcaX@%WT?RAaSea;3k%xy1NuE6$>Nk%s%8SFp!l= z^u=M|C-TJuFt4<))u2Y9l0-Z6J$kY8EL^3*f@JKx33OuT@O~k|%F(?jR-^4)t{)@E zZ-6FeXq1TOfMLCq#T4eJz;r|~zXWFg$=ZX8W*S`N+u8S^NT&zqgI&~Wlk*^L5>001 zvJtSdile?mlr}yJF!)shY?m3mDLR28hX7BVHm%?KiT(T4mD_Z_O{=HKzes?WLH ztU!+-`yd)ZAPZG3lNhTzz)0@(E<;PZ+M;5tJ^_bHkMsi0?8I2z1pf2Ic;ag66ddgp6!pLpjQa0a3zv6tZ98e;ibxEk#MjpYx4PAnhn z>=tJAZYW(hp5=43bLYOdVJ_uRf>`-7lBNo10S{(8pu*ONq9iLLT3_yT0?ZLI4= z(5Ia^Ci3aY7`w%%7l9goC5bKWF2BW{RdQ8M>38mVB7W}#G8%`*?=OK)`#rqfozL?F zFy0~KFS{y=ZU{6W5xKMPI)I_2f@EThCXpD!k3xM|mkD+1etXALv8+Y8Ij!xls2oZ({u(v0 zVXLGnMqk`bVzzB4mA<%ioACvuMaK)$&=*^w`$X;Hxl>KMSk7XR zWOV22^rE}$yTV<(Gx@yg8I10Gj!XBk`-B&K-6K`;PpEt2%|`cc0UvRNqNDEjy$;>q z1!qXVy3FTqGDi2SeBHylZ5k@p>BX7~`EJqD3N8Z&e!Ng?)9@*KzIVVIos3oPlpV~xnFf54Kyaf+m$Wl86qbX591mh^@xl0MUtK4M9~+me2+CB1G^ zexGGY-)BkRZ%JQnNxx)L(sx?YXQ0oETApt>MKBH5;8bID)HO~@`VLDv-ztj8s-Iy= z=d++u=?f<%{Z31I!jeAAlD^TB-aaYm^_KL9N@dlLT7Ku#C{f*4PfB{7CH(>J1yxWlakI~m9-7^ z+@{i!9=D`7SkmvAl=Ll@^tdIx%94JWC4K*-q-QPZ$4X_@zhe2F>$TcqI_e&nl=QWh z^cO7YM=a?tS$*B;q@))u>91MRIjPs0>b~w=OZS75lFp~sBAn-P4J3l8f8Nra&lPAI zZTZPbUua3^FA-7cPg~MQr$~B>CH*N&`XNjD1D5ndld}8_OZpy5`iLc+J2FNs|JGxaG)0Xt3lhXZeOFGvfBlW4TE3Hq%$3dWJbbEhgQqnst>CczS zsy}S$e%R98dD~=G5B6Bn`R-a&_w!5Z)3DXjJw7Svd?q;}YwqDvS@kbix*xH0ubGte zjh1vS0!8XmUs+n8hT1@P{YLYEzdqK5Hxp6aQ0nPV_7OFL0|hY~>?-yQ_OF*`n+0R$ zhck^9kXf3n6`^u8`d5bW)++TH(M4DullsJ%g94$XY3fIS(>2tyuTXESb^qWvy8j9E zs;@WxD)~i~>Y4SiI^*TBY2I^>iH#W7uA|AUi}KkWSr;AK@AFVJ>i0`b4gLFq|4hGA z6IGva{2tWVSS(a$?e|ZNqx+x2?|Xc`&^eSOqs5)Z^5giu()T-8&ZEireGNp2-&4VR z+1Pj9{D}Js44gnwgqdzxCxB~0weCdu->vir@}Ck3rEgf5u?F=%!>=>6h~XiGl3s!| z9JgEiUW=B8i9^Xmf8z%67u|!f(0v7!Mju{XVdc^id60Sfj(_q`wHZ z5zceBSkkvy()p~OE~R}sIq63%={H%@w^-7-m(5g2f5ei$+LFH3lKzb8SN)!Ca=IV1 zq_4H4cUsbqOp)|aOL~VTeYGY1n^PqHc}sfEl3ui=ubv{m@3W*gTGCrA>FFub-LcyH z9hUSvE$Q5O8`Vbd^dIYOUbA%HWl6uolK$%{vixC7deM@;(URUXMbe+Lq<31<)0T8@ zo;ekkzu%I+(30L}N#8z2(jTy-w^`ELE$MrvNctg5dfJlSV@c;;TvK8B7cA);E$KH| z(l<_#bk38s7W)2TrzL%tC7tj7PlfLLE$J(w)x|MRjktq<2`-@0%jspR=TAE$KN+dgB!7 zezzq(bY~}Ru->}+Yp9xoLq$l1zMbdx38j@24D_F_{;~!M6YnZ)+%))FlHX5HPti( zf*C=!67wkhY0TGvF|AT)o&v`BOEAAA1EiqN@i;6GCUBYNa~3eq`*nr`d+A~MO^Uj6 z&!ViCauUGO1j6~9D8&?TZX%{8jNyyPqdsR+_oz~dP^qoJP^W;;r-3;Om_XKkU=qLt zx*q_hDnj!VFb_mz{V2jmw75}yqcq_B3(zo$bk7^?=Vu<}w+ZUb^as$GF;_5e=R@&G zL7nS>sRJgcVJk2PBlTGc%&Z8_I*ZQ`Fy_}=k+qGbkVV6!FS>Gr#T4ojX%;wz%);Qh^pfAtvI%SAlsAp%QRD5s&qmQCMntHZUj@^4A<-R!5{?$%g@v z0$FQ-xd52J7wduHN+-Dr=Uag}8j=1ftJIf(F~7nvR`I4UK90#0$a)Yo0mkdvkjG2= zPA+1@LlGKMA6A&g5T9QH^FlXRuWVvYCbs^4tuWm^P zV~mnT`l)RG`b;oy1;(ta3+57F&WdnuAtq949WeOQzTmrfz5T_m{l0X{$b+CBFsR{& zfJsNJdIy;x1)6>i7_(L>_4y_+QQf}-%tD_JN2_GoapV{Igx2&IECtRY9bfp&W%|+c zM{4*7&~*A3^-11=lq0|R7(ORqxzx;H*;3?Nqb)vXWSn>CCDowqG+3BcU|#d<%u-id zG=0GAiO_5T#yo#0*7zt(Asfj03^3-NT4=ro%+nD*kC6`wN`FY{KL*Ck(4^GwfiX`T z3T8T9vtX&fJ7)kxiw4r?0AqerpncQ_f1QKARVk|#G?)1Gk+yuJdTKb}yb3goF={YZ+Cw(>&P$H#;2bE%~O6Uys4N)t(``{ z6ghtmG@&_CS1LPD$T+(qH1~t%n9ql$9tMUfu+Os==9j>{=$G=k3YpA$#~F!m{yk_O z@oC7hny;!L1)OIoOic)LDKHm+Ca~%W2{2Tnh%V5&H)yK4YTO_7e*|$5;XfFrPc%U zV#M#;$p`i^@rthv0@LP~^3**WX6F&k2SCFV)cFZug5HnUjsU}%11%xe_?=biRJ;q4 z3uMUv>uib0dM9Y2bCSit+zpmc1f0DU*-R$a$U!(%pEPKAFC6H#0hs;1EK+|A7$)5t z!-n{C?ubg)@o=+j@6IM}Y*`MpIW{VbRKKnhC%=V`74QCWBX7UU1rRHoV z?_kg6jF-Zv>A5)-!v-I)SCx&j zy#*Kq^C=n?G{oWy@D@J3sb77jJPkz~FT9AP21Vm(lz!V!e-a(LTJxLeC>cQb>6IT5?T{jr`DAY) zgW+AhZ%CJ}EM)Raa5_Iv_L>TtNZ`}$d7msO(7a+*NAtqki$Mz_wb4FGn?oSf)^XqNjr!x`1$@4}Cj$m4E)5g$7TFGMOf zXau7T2pw9lc5cIa8ZHFs)eKYY!Wews-18Rn_NUwDYtEpFoL{kNsdk*Ge`ThqDHjan zo6>3Qm%%D%wS%k81E@_Yv-uk{Dd0fWK0jQ8*22<(eyW^Ym(8^HHxK6Xnf{`p2zY1u z2mAP?ciJi2yDp#1Z}RxOP)K}trs(w*hJvm8V6*Tk%ushBeW~~PAoKKq*PR_$m&|$$ zAjK>|vDE=Z6ZXP#H)hf-0<#aIvYQkh-*F#U-^>1jFPMccj*kz2{v9l}|GNua$=>W> z9xdg{6<+fIVs>M3IYKxO!N8P$A3lO>mlzN1fmXtx@YZKGiE@4`RD-?psTYinK6K?zq4X7Zcb zGx@FowDbN{MumJPuR03`gLL<#T!5v|HVIkjN?JOWg?dT^HCkpF`Ram~O!cL+{j5%D zud=dVI;gZC7Yll`Fdu}}Zpb9p*P=@v@|NqqwmF+D6fy-M%XiHp&F=}-DVl0qvQR|d zhF%$6(27iP9HAcDr>}~#k9G`pZV1fbq1_gH5g*zUa(|}_cVr6?ihgP^qim%(w)zdQ z84a%&A*4GYlC)&97<0>9@X%A_3aUHQ(qTl!PwpdRi3-7$Po`isL||{KK!4#5@5YQb z(8UU-*0ZVNEnRg%mDcy`rDWVXC=ad3pf7p-K;A11t}AT9@Ym-JW%30MD7@yef5JMh z(q3WuGaLFaO8M7%L)S!NvairBb3;?USKrODH;uSRG#n>5b)*IEk)EBMT(($9qXA%L zBcEb*M0oGOI^@#>=0gPNiZaC|1L?tRMkYE0$+T`itCT3?pPo!I7j};)(Tn?hQ+d=>4<~5ZDGXMOVo^AkqRJscQs^PA@e-wE z2}Zjv7t&-&>(VP%d96!VbTqZKc`fs=Sb3$lq^V=!{N>BRSxf3((y=(RsYMORJ`Y)p zFou#P1yulnGf)Ue40Pz|O|4h`3#$*eV7}UvU&s)BrH2`{SKO2%BertPpLj*QzoECEQ)e%m zYwkmEVfrsY>I?Hnc^Sw{25i-aQ-0N`3#L&S3Q)GQd?u|v6$%|pVlKXjQhM!llOPEE*3m;xO4Rs6oa#cuLze_)D0&bogXN~N-x0bq8Q zEDTVjJ-;z!q4x?k_;%o?sHuRNQHD7+enh*e@Zc)8R15pYlqKDcM5*dNFvhcP(GI15 zMbE$n^eLfQLs!+;__bDjpYCbKsi!c`VF5wHH*lqC%Kl(R0*u~;!2vUPw*n(KEn~+F zf0EZ~PBgQVmLnrics7&8*v$L;Y_ePCPRc$LPZIUwQ)x2~`a)ANS)GKLQ$6bo#r3$O z!LwP!aWOmb!P-Y7-fZ itkN>9yA&1dX!)u|sBseu9qN}DuhhH~baC=)@&5&+bGPjP literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win64/duplicate_byte.exe b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win64/duplicate_byte.exe new file mode 100644 index 0000000000000000000000000000000000000000..425e90822b2f57da8560b09b172694a3f60cc33b GIT binary patch literal 117095 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 lpY(m?GR)K7P}>N1s;ft6^%!9m$`Dil~% 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 literal 0 HcmV?d00001 diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win64/make_vhdl_prom.exe b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/proms/tools_prom_src/binaries/win64/make_vhdl_prom.exe new file mode 100644 index 0000000000000000000000000000000000000000..1e5618bf9417eaeb90556e3021a78e9860a815e8 GIT binary patch literal 119861 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 H%=`ZUgl +#include +#include +#include +main (int argc, char **argv) +{ +unsigned char byte; +int data_len,nb_byte,first_byte; +char *end_file_name; +FILE *fid_in,*fid_out; + +if (argc != 3) +{ + printf("Syntax : %s file_in file_out\n",argv[0]); + exit(0); +} + +fid_in = fopen(argv[1],"rb"); +if (fid_in == NULL) +{ + printf("can't open %s\n",argv[1]); + exit(0); +} + +fid_out = fopen(argv[2],"wt"); +if (fid_out == NULL) +{ + printf("can't open %s\n",argv[2]); + fclose(fid_in); + exit(0); +} + +end_file_name = strstr(argv[2],".vhd"); +if (end_file_name!=NULL) *end_file_name='\0'; + +fseek(fid_in,0,SEEK_END); +data_len = ftell(fid_in); +fseek(fid_in,0,SEEK_SET); + +fprintf(fid_out,"library ieee;\n"); +fprintf(fid_out,"use ieee.std_logic_1164.all,ieee.numeric_std.all;\n\n"); +fprintf(fid_out,"entity %s is\n",argv[2]); +fprintf(fid_out,"port (\n"); +fprintf(fid_out,"\tclk : in std_logic;\n"); +fprintf(fid_out,"\taddr : in std_logic_vector(%d downto 0);\n",(int)ceil(log2((double)data_len))-1); +fprintf(fid_out,"\tdata : out std_logic_vector(7 downto 0)\n"); +fprintf(fid_out,");\n"); +fprintf(fid_out,"end entity;\n\n"); +fprintf(fid_out,"architecture prom of %s is\n",argv[2]); +fprintf(fid_out,"\ttype rom is array(0 to %d) of std_logic_vector(7 downto 0);\n",data_len-1); +fprintf(fid_out,"\tsignal rom_data: rom := ("); + +nb_byte = 0; +first_byte = 1; +while(fread(&byte,1,1,fid_in)==1) +{ + if (nb_byte==0) + { + if (first_byte==0) fprintf(fid_out,","); + fprintf(fid_out,"\n\t\t"); + } + else + { fprintf(fid_out,","); } + first_byte = 0; + + fprintf(fid_out,"X\"%02X\"",byte); + nb_byte++; + if (nb_byte==16) nb_byte=0; +} +fprintf(fid_out,");\n"); + +fprintf(fid_out,"begin\n"); +fprintf(fid_out,"process(clk)\n"); +fprintf(fid_out,"begin\n"); +fprintf(fid_out,"\tif rising_edge(clk) then\n"); +fprintf(fid_out,"\t\tdata <= rom_data(to_integer(unsigned(addr)));\n"); +fprintf(fid_out,"\tend if;\n"); +fprintf(fid_out,"end process;\n"); +fprintf(fid_out,"end architecture;\n"); + +fclose(fid_in); +fclose(fid_out); +} diff --git a/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/sdram.sv b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/sdram.sv new file mode 100644 index 00000000..8f927d05 --- /dev/null +++ b/Arcade_MiST/Williams 6809 rev.1 Hardware/Defender/rtl/sdram.sv @@ -0,0 +1,254 @@ +// +// sdram.v +// +// Static RAM controller implementation using SDRAM MT48LC16M16A2 +// +// Copyright (c) 2015,2016 Sorgelig +// +// Some parts of SDRAM code used from project: +// http://hamsterworks.co.nz/mediawiki/index.php/Simple_SDRAM_Controller +// +// 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 . +// +// ------------------------------------------ +// +// v2.1 - Add universal 8/16 bit mode. +// + +module sdram +( + input init, // reset to initialize RAM + input clk, // clock ~100MHz + // + // SDRAM_* - signals 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, // + 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 + output SDRAM_CKE, // clock enable + // + input [1:0] wtbt, // 16bit mode: bit1 - write high byte, bit0 - write low byte, + // 8bit mode: 2'b00 - use addr[0] to decide which byte to write + // Ignored while reading. + // + input [24:0] addr, // 25 bit address for 8bit mode. addr[0] = 0 for 16bit mode for correct operations. + output [15:0] dout, // data output to cpu + input [15:0] din, // data input from cpu + input we, // cpu requests write + input rd, // cpu requests read + output reg ready // dout is valid. Ready to accept new read/write. +); + +assign SDRAM_nCS = command[3]; +assign SDRAM_nRAS = command[2]; +assign SDRAM_nCAS = command[1]; +assign SDRAM_nWE = command[0]; +assign SDRAM_CKE = cke; + +// no burst configured +localparam BURST_LENGTH = 3'b000; // 000=1, 001=2, 010=4, 011=8 +localparam ACCESS_TYPE = 1'b0; // 0=sequential, 1=interleaved +localparam CAS_LATENCY = 3'd2; // 2 for < 100MHz, 3 for >100MHz +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}; + +localparam sdram_startup_cycles= 14'd12100;// 100us, plus a little more, @ 100MHz +localparam cycles_per_refresh = 14'd186; // (64000*36)/8192-1 Calc'd as (64ms @ 36MHz)/8192 rose +localparam startup_refresh_max = 14'b11111111111111; + +// SDRAM 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 [13:0] refresh_count = startup_refresh_max - sdram_startup_cycles; +reg [3:0] command = CMD_INHIBIT; +reg cke = 0; +reg [24:0] save_addr; +reg [15:0] data; + +assign dout = save_addr[0] ? {data[7:0], data[15:8]} : {data[15:8], data[7:0]}; +typedef enum +{ + STATE_STARTUP, + STATE_OPEN_1, + STATE_WRITE, + STATE_READ, + STATE_IDLE, STATE_IDLE_1, STATE_IDLE_2, STATE_IDLE_3, + STATE_IDLE_4, STATE_IDLE_5, STATE_IDLE_6, STATE_IDLE_7 +} state_t; + +state_t state = STATE_STARTUP; + +always @(posedge clk) begin + reg old_we, old_rd; + reg [CAS_LATENCY:0] data_ready_delay; + + reg [15:0] new_data; + reg [1:0] new_wtbt; + reg new_we; + reg new_rd; + reg save_we = 1; + + + command <= CMD_NOP; + refresh_count <= refresh_count+1'b1; + + data_ready_delay <= {1'b0, data_ready_delay[CAS_LATENCY:1]}; + + if(data_ready_delay[0]) data <= SDRAM_DQ; + + case(state) + STATE_STARTUP: begin + //------------------------------------------------------------------------ + //-- This is the initial startup state, where we wait for at least 100us + //-- before starting the start sequence + //-- + //-- The initialisation is sequence is + //-- * de-assert SDRAM_CKE + //-- * 100us wait, + //-- * assert SDRAM_CKE + //-- * wait at least one cycle, + //-- * PRECHARGE + //-- * wait 2 cycles + //-- * REFRESH, + //-- * tREF wait + //-- * REFRESH, + //-- * tREF wait + //-- * LOAD_MODE_REG + //-- * 2 cycles wait + //------------------------------------------------------------------------ + cke <= 1; + SDRAM_DQ <= 16'bZZZZZZZZZZZZZZZZ; + SDRAM_DQML <= 1; + SDRAM_DQMH <= 1; + SDRAM_A <= 0; + SDRAM_BA <= 0; + + // All the commands during the startup are NOPS, except these + if(refresh_count == startup_refresh_max-31) begin + // ensure all rows are closed + command <= CMD_PRECHARGE; + SDRAM_A[10] <= 1; // all banks + SDRAM_BA <= 2'b00; + end else if (refresh_count == startup_refresh_max-23) begin + // these refreshes need to be at least tREF (66ns) apart + command <= CMD_AUTO_REFRESH; + end else if (refresh_count == startup_refresh_max-15) + command <= CMD_AUTO_REFRESH; + else if (refresh_count == startup_refresh_max-7) begin + // Now load the mode register + command <= CMD_LOAD_MODE; + SDRAM_A <= MODE; + end + + //------------------------------------------------------ + //-- if startup is complete then go into idle mode, + //-- get prepared to accept a new command, and schedule + //-- the first refresh cycle + //------------------------------------------------------ + if(!refresh_count) begin + state <= STATE_IDLE; + ready <= 1; + refresh_count <= 0; + end + end + + STATE_IDLE_7: state <= STATE_IDLE_6; + STATE_IDLE_6: state <= STATE_IDLE_5; + STATE_IDLE_5: state <= STATE_IDLE_4; + STATE_IDLE_4: state <= STATE_IDLE_3; + STATE_IDLE_3: state <= STATE_IDLE_2; + STATE_IDLE_2: state <= STATE_IDLE_1; + STATE_IDLE_1: begin + SDRAM_DQ <= 16'bZZZZZZZZZZZZZZZZ; + state <= STATE_IDLE; + // mask possible refresh to reduce colliding. + if(refresh_count > cycles_per_refresh) begin + //------------------------------------------------------------------------ + //-- Start the refresh cycle. + //-- This tasks tRFC (66ns), so 2 idle cycles are needed @ 36MHz + //------------------------------------------------------------------------ + state <= STATE_IDLE_2; + command <= CMD_AUTO_REFRESH; + refresh_count <= refresh_count - cycles_per_refresh + 1'd1; + end + end + + STATE_IDLE: begin + // Priority is to issue a refresh if one is outstanding + if(refresh_count > (cycles_per_refresh<<1)) state <= STATE_IDLE_1; + else if(new_rd | new_we) begin + new_we <= 0; + new_rd <= 0; + save_addr<= addr; + save_we <= new_we; + state <= STATE_OPEN_1; + command <= CMD_ACTIVE; + SDRAM_A <= addr[13:1]; + SDRAM_BA <= addr[24:23]; + end + end + + // ACTIVE-to-READ or WRITE delay >20ns (1 cycle @ 36 MHz)(-75) + STATE_OPEN_1: begin + SDRAM_A <= {4'b0010, save_addr[22:14]}; + SDRAM_DQML <= save_we & (new_wtbt ? ~new_wtbt[0] : save_addr[0]); + SDRAM_DQMH <= save_we & (new_wtbt ? ~new_wtbt[1] : ~save_addr[0]); + state <= save_we ? STATE_WRITE : STATE_READ; + end + + STATE_READ: begin + state <= STATE_IDLE_5; + command <= CMD_READ; + SDRAM_DQ <= 16'bZZZZZZZZZZZZZZZZ; + + // Schedule reading the data values off the bus + data_ready_delay[CAS_LATENCY] <= 1; + end + + STATE_WRITE: begin + state <= STATE_IDLE_5; + command <= CMD_WRITE; + SDRAM_DQ <= new_wtbt ? new_data : {new_data[7:0], new_data[7:0]}; + ready <= 1; + end + endcase + + if(init) begin + state <= STATE_STARTUP; + refresh_count <= startup_refresh_max - sdram_startup_cycles; + end + + old_we <= we; + old_rd <= rd; + if(we & ~old_we) {ready, new_we, new_data, new_wtbt} <= {1'b0, 1'b1, din, wtbt}; + else + if((rd & ~old_rd) || (rd & old_rd & (save_addr != addr))) {ready, new_rd} <= {1'b0, 1'b1}; + +end + +endmodule