From e76f3612b2112e012c60485d758e31cdb3aa7203 Mon Sep 17 00:00:00 2001 From: Gehstock Date: Wed, 25 Jul 2018 16:10:20 +0200 Subject: [PATCH] Add Bally Astrocade --- ...tic (Excerpt from PA-1 Service Manual).gif | Bin 0 -> 463801 bytes Bally - Astrocade_MiST/ReadMe.md | 2 + .../Snapshot/bally_mist.rbf | Bin 0 -> 268408 bytes Bally - Astrocade_MiST/bally_mist.qpf | 30 + Bally - Astrocade_MiST/bally_mist.qsf | 166 ++ Bally - Astrocade_MiST/bally_mist.srf | 6 + Bally - Astrocade_MiST/clean.bat | 38 + Bally - Astrocade_MiST/rtl/BALLY_CHECK.vhd | 147 ++ Bally - Astrocade_MiST/rtl/T80/T80.vhd | 1080 +++++++++ Bally - Astrocade_MiST/rtl/T80/T80_ALU.vhd | 371 ++++ Bally - Astrocade_MiST/rtl/T80/T80_MCode.vhd | 1944 +++++++++++++++++ Bally - Astrocade_MiST/rtl/T80/T80_Pack.vhd | 217 ++ Bally - Astrocade_MiST/rtl/T80/T80_Reg.vhd | 114 + Bally - Astrocade_MiST/rtl/T80/T80sed.vhd | 179 ++ Bally - Astrocade_MiST/rtl/bally.vhd | 450 ++++ Bally - Astrocade_MiST/rtl/bally_addr.vhd | 473 ++++ .../rtl/bally_check_cart.vhd | 124 ++ Bally - Astrocade_MiST/rtl/bally_col_pal.vhd | 101 + Bally - Astrocade_MiST/rtl/bally_data.vhd | 1039 +++++++++ Bally - Astrocade_MiST/rtl/bally_io.vhd | 405 ++++ Bally - Astrocade_MiST/rtl/bally_mist.sv | 158 ++ Bally - Astrocade_MiST/rtl/bally_ps2_if.vhd | 319 +++ Bally - Astrocade_MiST/rtl/bally_rams.vhd | 178 ++ Bally - Astrocade_MiST/rtl/bally_top.vhd | 199 ++ Bally - Astrocade_MiST/rtl/build_id.tcl | 35 + Bally - Astrocade_MiST/rtl/build_id.v | 2 + Bally - Astrocade_MiST/rtl/cart.qip | 3 + Bally - Astrocade_MiST/rtl/cart.v | 177 ++ Bally - Astrocade_MiST/rtl/dac.vhd | 71 + Bally - Astrocade_MiST/rtl/hq2x.sv | 454 ++++ Bally - Astrocade_MiST/rtl/mist_io.v | 491 +++++ Bally - Astrocade_MiST/rtl/osd.v | 179 ++ Bally - Astrocade_MiST/rtl/pll.qip | 4 + Bally - Astrocade_MiST/rtl/pll.vhd | 414 ++++ Bally - Astrocade_MiST/rtl/ps2kbd.vhd | 212 ++ Bally - Astrocade_MiST/rtl/roms/BIOS3159.BIN | Bin 0 -> 8192 bytes Bally - Astrocade_MiST/rtl/roms/balcheck.bin | Bin 0 -> 2048 bytes Bally - Astrocade_MiST/rtl/roms/balcheck.hex | 129 ++ .../rtl/roms/bally_bios_0.vhd | 493 +++++ .../rtl/roms/bally_bios_1.vhd | 493 +++++ .../rtl/roms/bally_check.vhd | 379 ++++ .../rtl/roms/bios3159_0.bin | Bin 0 -> 4096 bytes .../rtl/roms/bios3159_0.hex | 257 +++ .../rtl/roms/bios3159_1.bin | Bin 0 -> 4096 bytes .../rtl/roms/bios3159_1.hex | 257 +++ Bally - Astrocade_MiST/rtl/scandoubler.v | 195 ++ Bally - Astrocade_MiST/rtl/spram.vhd | 91 + Bally - Astrocade_MiST/rtl/sprom.vhd | 83 + Bally - Astrocade_MiST/rtl/video_mixer.sv | 242 ++ 49 files changed, 12401 insertions(+) create mode 100644 Bally - Astrocade_MiST/Bally Arcade - Astrocade Schematic (Excerpt from PA-1 Service Manual).gif create mode 100644 Bally - Astrocade_MiST/ReadMe.md create mode 100644 Bally - Astrocade_MiST/Snapshot/bally_mist.rbf create mode 100644 Bally - Astrocade_MiST/bally_mist.qpf create mode 100644 Bally - Astrocade_MiST/bally_mist.qsf create mode 100644 Bally - Astrocade_MiST/bally_mist.srf create mode 100644 Bally - Astrocade_MiST/clean.bat create mode 100644 Bally - Astrocade_MiST/rtl/BALLY_CHECK.vhd create mode 100644 Bally - Astrocade_MiST/rtl/T80/T80.vhd create mode 100644 Bally - Astrocade_MiST/rtl/T80/T80_ALU.vhd create mode 100644 Bally - Astrocade_MiST/rtl/T80/T80_MCode.vhd create mode 100644 Bally - Astrocade_MiST/rtl/T80/T80_Pack.vhd create mode 100644 Bally - Astrocade_MiST/rtl/T80/T80_Reg.vhd create mode 100644 Bally - Astrocade_MiST/rtl/T80/T80sed.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_addr.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_check_cart.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_col_pal.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_data.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_io.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_mist.sv create mode 100644 Bally - Astrocade_MiST/rtl/bally_ps2_if.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_rams.vhd create mode 100644 Bally - Astrocade_MiST/rtl/bally_top.vhd create mode 100644 Bally - Astrocade_MiST/rtl/build_id.tcl create mode 100644 Bally - Astrocade_MiST/rtl/build_id.v create mode 100644 Bally - Astrocade_MiST/rtl/cart.qip create mode 100644 Bally - Astrocade_MiST/rtl/cart.v create mode 100644 Bally - Astrocade_MiST/rtl/dac.vhd create mode 100644 Bally - Astrocade_MiST/rtl/hq2x.sv create mode 100644 Bally - Astrocade_MiST/rtl/mist_io.v create mode 100644 Bally - Astrocade_MiST/rtl/osd.v create mode 100644 Bally - Astrocade_MiST/rtl/pll.qip create mode 100644 Bally - Astrocade_MiST/rtl/pll.vhd create mode 100644 Bally - Astrocade_MiST/rtl/ps2kbd.vhd create mode 100644 Bally - Astrocade_MiST/rtl/roms/BIOS3159.BIN create mode 100644 Bally - Astrocade_MiST/rtl/roms/balcheck.bin create mode 100644 Bally - Astrocade_MiST/rtl/roms/balcheck.hex create mode 100644 Bally - Astrocade_MiST/rtl/roms/bally_bios_0.vhd create mode 100644 Bally - Astrocade_MiST/rtl/roms/bally_bios_1.vhd create mode 100644 Bally - Astrocade_MiST/rtl/roms/bally_check.vhd create mode 100644 Bally - Astrocade_MiST/rtl/roms/bios3159_0.bin create mode 100644 Bally - Astrocade_MiST/rtl/roms/bios3159_0.hex create mode 100644 Bally - Astrocade_MiST/rtl/roms/bios3159_1.bin create mode 100644 Bally - Astrocade_MiST/rtl/roms/bios3159_1.hex create mode 100644 Bally - Astrocade_MiST/rtl/scandoubler.v create mode 100644 Bally - Astrocade_MiST/rtl/spram.vhd create mode 100644 Bally - Astrocade_MiST/rtl/sprom.vhd create mode 100644 Bally - Astrocade_MiST/rtl/video_mixer.sv diff --git a/Bally - Astrocade_MiST/Bally Arcade - Astrocade Schematic (Excerpt from PA-1 Service Manual).gif b/Bally - Astrocade_MiST/Bally Arcade - Astrocade Schematic (Excerpt from PA-1 Service Manual).gif new file mode 100644 index 0000000000000000000000000000000000000000..c25258ee5c6c591cbee2eef9c7413292058bc978 GIT binary patch literal 463801 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%0DPfJr9RT);% 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 WPgRn|@4dw0CtBoJU-XNfUH>1(dj&fH literal 0 HcmV?d00001 diff --git a/Bally - Astrocade_MiST/bally_mist.qpf b/Bally - Astrocade_MiST/bally_mist.qpf new file mode 100644 index 00000000..cd7b5d38 --- /dev/null +++ b/Bally - Astrocade_MiST/bally_mist.qpf @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2013 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II 64-Bit +# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition +# Date created = 20:08:26 November 23, 2017 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "13.1" +DATE = "20:08:26 November 23, 2017" + +# Revisions + +PROJECT_REVISION = "bally_mist" diff --git a/Bally - Astrocade_MiST/bally_mist.qsf b/Bally - Astrocade_MiST/bally_mist.qsf new file mode 100644 index 00000000..92bc1614 --- /dev/null +++ b/Bally - Astrocade_MiST/bally_mist.qsf @@ -0,0 +1,166 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2013 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II 64-Bit +# Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Full Version +# Date created = 13:20:03 July 25, 2018 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# bally_mist_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 13.1 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "20:08:26 NOVEMBER 23, 2017" +set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" +# Pin & Location Assignments +# ========================== +set_location_assignment PIN_7 -to LED +set_location_assignment PIN_54 -to CLOCK_27 +set_location_assignment PIN_144 -to VGA_R[5] +set_location_assignment PIN_143 -to VGA_R[4] +set_location_assignment PIN_142 -to VGA_R[3] +set_location_assignment PIN_141 -to VGA_R[2] +set_location_assignment PIN_137 -to VGA_R[1] +set_location_assignment PIN_135 -to VGA_R[0] +set_location_assignment PIN_133 -to VGA_B[5] +set_location_assignment PIN_132 -to VGA_B[4] +set_location_assignment PIN_125 -to VGA_B[3] +set_location_assignment PIN_121 -to VGA_B[2] +set_location_assignment PIN_120 -to VGA_B[1] +set_location_assignment PIN_115 -to VGA_B[0] +set_location_assignment PIN_114 -to VGA_G[5] +set_location_assignment PIN_113 -to VGA_G[4] +set_location_assignment PIN_112 -to VGA_G[3] +set_location_assignment PIN_111 -to VGA_G[2] +set_location_assignment PIN_110 -to VGA_G[1] +set_location_assignment PIN_106 -to VGA_G[0] +set_location_assignment PIN_136 -to VGA_VS +set_location_assignment PIN_119 -to VGA_HS +set_location_assignment PIN_65 -to AUDIO_L +set_location_assignment PIN_80 -to AUDIO_R +set_location_assignment PIN_105 -to SPI_DO +set_location_assignment PIN_88 -to SPI_DI +set_location_assignment PIN_126 -to SPI_SCK +set_location_assignment PIN_127 -to SPI_SS2 +set_location_assignment PIN_91 -to SPI_SS3 +set_location_assignment PIN_13 -to CONF_DATA0 +set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component" + +# Classic Timing Assignments +# ========================== +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone III" +set_global_assignment -name TOP_LEVEL_ENTITY bally_mist + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP3C25E144C8 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 +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 CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" + +# Assembler Assignments +# ===================== +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name GENERATE_RBF_FILE ON + +# Power Estimation Assignments +# ============================ +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" + +# Advanced I/O Timing Assignments +# =============================== +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall + +# ------------------------ +# start ENTITY(bally_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(bally_mist) +# ---------------------- +set_global_assignment -name SYSTEMVERILOG_FILE rtl/bally_mist.sv +set_global_assignment -name VHDL_FILE rtl/bally_top.vhd +set_global_assignment -name VHDL_FILE rtl/bally.vhd +set_global_assignment -name VHDL_FILE rtl/ps2kbd.vhd +set_global_assignment -name VHDL_FILE rtl/bally_rams.vhd +set_global_assignment -name VHDL_FILE rtl/bally_ps2_if.vhd +set_global_assignment -name VHDL_FILE rtl/bally_io.vhd +set_global_assignment -name VHDL_FILE rtl/bally_data.vhd +set_global_assignment -name VHDL_FILE rtl/bally_col_pal.vhd +set_global_assignment -name VHDL_FILE rtl/bally_addr.vhd +set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv +set_global_assignment -name VERILOG_FILE rtl/mist_io.v +set_global_assignment -name VERILOG_FILE rtl/scandoubler.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv +set_global_assignment -name VERILOG_FILE rtl/osd.v +set_global_assignment -name VHDL_FILE rtl/dac.vhd +set_global_assignment -name VHDL_FILE rtl/spram.vhd +set_global_assignment -name VHDL_FILE rtl/sprom.vhd +set_global_assignment -name VHDL_FILE rtl/T80/T80sed.vhd +set_global_assignment -name VHDL_FILE rtl/T80/T80_Reg.vhd +set_global_assignment -name VHDL_FILE rtl/T80/T80_Pack.vhd +set_global_assignment -name VHDL_FILE rtl/T80/T80_MCode.vhd +set_global_assignment -name VHDL_FILE rtl/T80/T80_ALU.vhd +set_global_assignment -name VHDL_FILE rtl/T80/T80.vhd +set_global_assignment -name VHDL_FILE rtl/pll.vhd +set_global_assignment -name VERILOG_FILE rtl/game.v +set_global_assignment -name QIP_FILE rtl/cart.qip +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Bally - Astrocade_MiST/bally_mist.srf b/Bally - Astrocade_MiST/bally_mist.srf new file mode 100644 index 00000000..269c9bf7 --- /dev/null +++ b/Bally - Astrocade_MiST/bally_mist.srf @@ -0,0 +1,6 @@ +{ "" "" "" "Verilog HDL warning at hq2x.sv(247): extended using \"x\" or \"z\"" { } { } 0 10273 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "Verilog HDL information at scandoubler.v(102): always construct contains both blocking and non-blocking assignments" { } { } 0 10268 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 113007 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 113015 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 10296 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} diff --git a/Bally - Astrocade_MiST/clean.bat b/Bally - Astrocade_MiST/clean.bat new file mode 100644 index 00000000..9a939cda --- /dev/null +++ b/Bally - Astrocade_MiST/clean.bat @@ -0,0 +1,38 @@ +@echo off +del /s *.bak +del /s *.orig +del /s *.rej +del /s *~ +del /s PLLJ_PLLSPE_INFO.txt +rmdir /s /q db +rmdir /s /q incremental_db +rmdir /s /q output_files +rmdir /s /q simulation +rmdir /s /q greybox_tmp +rmdir /s /q hc_output +rmdir /s /q .qsys_edit +rmdir /s /q hps_isw_handoff +rmdir /s /q sys\.qsys_edit +rmdir /s /q sys\vip +cd sys +for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" +cd .. +for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" +del build_id.v +del c5_pin_model_dump.txt +del PLLJ_PLLSPE_INFO.txt +del /s *.qws +del /s *.ppf +del /s *.ddb +del /s *.csv +del /s *.cmp +del /s *.sip +del /s *.spd +del /s *.bsf +del /s *.f +del /s *.sopcinfo +del /s *.xml +del /s new_rtl_netlist +del /s old_rtl_netlist + +pause diff --git a/Bally - Astrocade_MiST/rtl/BALLY_CHECK.vhd b/Bally - Astrocade_MiST/rtl/BALLY_CHECK.vhd new file mode 100644 index 00000000..dd2f2419 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/BALLY_CHECK.vhd @@ -0,0 +1,147 @@ +-- megafunction wizard: %ROM: 1-PORT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altsyncram + +-- ============================================================ +-- File Name: BALLY_CHECK.vhd +-- Megafunction Name(s): +-- altsyncram +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 13.1.0 Build 162 10/23/2013 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2013 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY BALLY_CHECK IS + PORT + ( + address : IN STD_LOGIC_VECTOR (10 DOWNTO 0); + clken : IN STD_LOGIC := '1'; + clock : IN STD_LOGIC := '1'; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END BALLY_CHECK; + + +ARCHITECTURE SYN OF bally_check IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); + +BEGIN + q <= sub_wire0(7 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_aclr_a => "NONE", + clock_enable_input_a => "NORMAL", + clock_enable_output_a => "NORMAL", + init_file => "../roms/balcheck.hex", + intended_device_family => "Cyclone III", + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "altsyncram", + numwords_a => 2048, + operation_mode => "ROM", + outdata_aclr_a => "NONE", + outdata_reg_a => "CLOCK0", + widthad_a => 11, + width_a => 8, + width_byteena_a => 1 + ) + PORT MAP ( + address_a => address, + clock0 => clock, + clocken0 => clken, + q_a => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0" +-- Retrieval info: PRIVATE: AclrByte NUMERIC "0" +-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +-- Retrieval info: PRIVATE: BlankMemory NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "1" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "1" +-- Retrieval info: PRIVATE: Clken NUMERIC "1" +-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" +-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +-- Retrieval info: PRIVATE: MIFfilename STRING "../roms/balcheck.hex" +-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "2048" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: RegAddr NUMERIC "1" +-- Retrieval info: PRIVATE: RegOutput NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SingleClock NUMERIC "1" +-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "0" +-- Retrieval info: PRIVATE: WidthAddr NUMERIC "11" +-- Retrieval info: PRIVATE: WidthData NUMERIC "8" +-- Retrieval info: PRIVATE: rden NUMERIC "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "NORMAL" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "NORMAL" +-- Retrieval info: CONSTANT: INIT_FILE STRING "../roms/balcheck.hex" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "2048" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "ROM" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "11" +-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +-- Retrieval info: USED_PORT: address 0 0 11 0 INPUT NODEFVAL "address[10..0]" +-- Retrieval info: USED_PORT: clken 0 0 0 0 INPUT VCC "clken" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock" +-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]" +-- Retrieval info: CONNECT: @address_a 0 0 11 0 address 0 0 11 0 +-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @clocken0 0 0 0 0 clken 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL BALLY_CHECK.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL BALLY_CHECK.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL BALLY_CHECK.cmp FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL BALLY_CHECK.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL BALLY_CHECK_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/Bally - Astrocade_MiST/rtl/T80/T80.vhd b/Bally - Astrocade_MiST/rtl/T80/T80.vhd new file mode 100644 index 00000000..da01f6b4 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/T80/T80.vhd @@ -0,0 +1,1080 @@ +-- **** +-- T80(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 started tidyup. Rmoved some auto_wait bits from 0247 which caused problems +-- +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- Z80 compatible microprocessor core +-- +-- Version : 0247 +-- +-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t80/ +-- +-- Limitations : +-- +-- File history : +-- +-- 0208 : First complete release +-- +-- 0210 : Fixed wait and halt +-- +-- 0211 : Fixed Refresh addition and IM 1 +-- +-- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test +-- +-- 0232 : Removed refresh address output for Mode > 1 and added DJNZ M1_n fix by Mike Johnson +-- +-- 0235 : Added clock enable and IM 2 fix by Mike Johnson +-- +-- 0237 : Changed 8080 I/O address output, added IntE output +-- +-- 0238 : Fixed (IX/IY+d) timing and 16 bit ADC and SBC zero flag +-- +-- 0240 : Added interrupt ack fix by Mike Johnson, changed (IX/IY+d) timing and changed flags in GB mode +-- +-- 0242 : Added I/O wait, fixed refresh address, moved some registers to RAM +-- +-- 0247 : Fixed bus req/ack cycle +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use work.T80_Pack.all; + +entity T80 is + generic( + Mode : integer := 0; -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB + IOWait : integer := 0; -- 1 => Single cycle I/O, 1 => Std I/O cycle + Flag_C : integer := 0; + Flag_N : integer := 1; + Flag_P : integer := 2; + Flag_X : integer := 3; + Flag_H : integer := 4; + Flag_Y : integer := 5; + Flag_Z : integer := 6; + Flag_S : integer := 7 + ); + port( + RESET_n : in std_logic; + CLK_n : in std_logic; + CEN : in std_logic; + WAIT_n : in std_logic; + INT_n : in std_logic; + NMI_n : in std_logic; + BUSRQ_n : in std_logic; + M1_n : out std_logic; + IORQ : out std_logic; + NoRead : out std_logic; + Write : out std_logic; + RFSH_n : out std_logic; + HALT_n : out std_logic; + BUSAK_n : out std_logic; + A : out std_logic_vector(15 downto 0); + DInst : in std_logic_vector(7 downto 0); + DI : in std_logic_vector(7 downto 0); + DO : out std_logic_vector(7 downto 0); + MC : out std_logic_vector(2 downto 0); + TS : out std_logic_vector(2 downto 0); + IntCycle_n : out std_logic; + IntE : out std_logic; + Stop : out std_logic + ); +end T80; + +architecture rtl of T80 is + + constant aNone : std_logic_vector(2 downto 0) := "111"; + constant aBC : std_logic_vector(2 downto 0) := "000"; + constant aDE : std_logic_vector(2 downto 0) := "001"; + constant aXY : std_logic_vector(2 downto 0) := "010"; + constant aIOA : std_logic_vector(2 downto 0) := "100"; + constant aSP : std_logic_vector(2 downto 0) := "101"; + constant aZI : std_logic_vector(2 downto 0) := "110"; + + -- Registers + signal ACC, F : std_logic_vector(7 downto 0); + signal Ap, Fp : std_logic_vector(7 downto 0); + signal I : std_logic_vector(7 downto 0); + signal R : unsigned(7 downto 0); + signal SP, PC : unsigned(15 downto 0); + + signal RegDIH : std_logic_vector(7 downto 0); + signal RegDIL : std_logic_vector(7 downto 0); + signal RegBusA : std_logic_vector(15 downto 0); + signal RegBusB : std_logic_vector(15 downto 0); + signal RegBusC : std_logic_vector(15 downto 0); + signal RegAddrA_r : std_logic_vector(2 downto 0); + signal RegAddrA : std_logic_vector(2 downto 0); + signal RegAddrB_r : std_logic_vector(2 downto 0); + signal RegAddrB : std_logic_vector(2 downto 0); + signal RegAddrC : std_logic_vector(2 downto 0); + signal RegWEH : std_logic; + signal RegWEL : std_logic; + signal Alternate : std_logic; + + -- Help Registers + signal TmpAddr : std_logic_vector(15 downto 0); -- Temporary address register + signal IR : std_logic_vector(7 downto 0); -- Instruction register + signal ISet : std_logic_vector(1 downto 0); -- Instruction set selector + signal RegBusA_r : std_logic_vector(15 downto 0); + + signal ID16 : signed(15 downto 0); + signal Save_Mux : std_logic_vector(7 downto 0); + + signal TState : unsigned(2 downto 0); + signal MCycle : std_logic_vector(2 downto 0); + signal IntE_FF1 : std_logic; + signal IntE_FF2 : std_logic; + signal Halt_FF : std_logic; + signal BusReq_s : std_logic; + signal BusAck : std_logic; + signal ClkEn : std_logic; + signal NMI_s : std_logic; + signal INT_s : std_logic; + signal IStatus : std_logic_vector(1 downto 0); + + signal DI_Reg : std_logic_vector(7 downto 0); + signal T_Res : std_logic; + signal XY_State : std_logic_vector(1 downto 0); + signal Pre_XY_F_M : std_logic_vector(2 downto 0); + signal NextIs_XY_Fetch : std_logic; + signal XY_Ind : std_logic; + signal No_BTR : std_logic; + signal BTR_r : std_logic; + signal Auto_Wait : std_logic; + signal Auto_Wait_t1 : std_logic; + signal Auto_Wait_t2 : std_logic; + signal IncDecZ : std_logic; + + -- ALU signals + signal BusB : std_logic_vector(7 downto 0); + signal BusA : std_logic_vector(7 downto 0); + signal ALU_Q : std_logic_vector(7 downto 0); + signal F_Out : std_logic_vector(7 downto 0); + + -- Registered micro code outputs + signal Read_To_Reg_r : std_logic_vector(4 downto 0); + signal Arith16_r : std_logic; + signal Z16_r : std_logic; + signal ALU_Op_r : std_logic_vector(3 downto 0); + signal Save_ALU_r : std_logic; + signal PreserveC_r : std_logic; + signal MCycles : std_logic_vector(2 downto 0); + + -- Micro code outputs + signal MCycles_d : std_logic_vector(2 downto 0); + signal TStates : std_logic_vector(2 downto 0); + signal IntCycle : std_logic; + signal NMICycle : std_logic; + signal Inc_PC : std_logic; + signal Inc_WZ : std_logic; + signal IncDec_16 : std_logic_vector(3 downto 0); + signal Prefix : std_logic_vector(1 downto 0); + signal Read_To_Acc : std_logic; + signal Read_To_Reg : std_logic; + signal Set_BusB_To : std_logic_vector(3 downto 0); + signal Set_BusA_To : std_logic_vector(3 downto 0); + signal ALU_Op : std_logic_vector(3 downto 0); + signal Save_ALU : std_logic; + signal PreserveC : std_logic; + signal Arith16 : std_logic; + signal Set_Addr_To : std_logic_vector(2 downto 0); + signal Jump : std_logic; + signal JumpE : std_logic; + signal JumpXY : std_logic; + signal Call : std_logic; + signal RstP : std_logic; + signal LDZ : std_logic; + signal LDW : std_logic; + signal LDSPHL : std_logic; + signal IORQ_i : std_logic; + signal Special_LD : std_logic_vector(2 downto 0); + signal ExchangeDH : std_logic; + signal ExchangeRp : std_logic; + signal ExchangeAF : std_logic; + signal ExchangeRS : std_logic; + signal I_DJNZ : std_logic; + signal I_CPL : std_logic; + signal I_CCF : std_logic; + signal I_SCF : std_logic; + signal I_RETN : std_logic; + signal I_BT : std_logic; + signal I_BC : std_logic; + signal I_BTR : std_logic; + signal I_RLD : std_logic; + signal I_RRD : std_logic; + signal I_INRC : std_logic; + signal SetDI : std_logic; + signal SetEI : std_logic; + signal IMode : std_logic_vector(1 downto 0); + signal Halt : std_logic; + +begin + + mcode : T80_MCode + generic map( + Mode => Mode, + Flag_C => Flag_C, + Flag_N => Flag_N, + Flag_P => Flag_P, + Flag_X => Flag_X, + Flag_H => Flag_H, + Flag_Y => Flag_Y, + Flag_Z => Flag_Z, + Flag_S => Flag_S) + port map( + IR => IR, + ISet => ISet, + MCycle => MCycle, + F => F, + NMICycle => NMICycle, + IntCycle => IntCycle, + MCycles => MCycles_d, + TStates => TStates, + Prefix => Prefix, + Inc_PC => Inc_PC, + Inc_WZ => Inc_WZ, + IncDec_16 => IncDec_16, + Read_To_Acc => Read_To_Acc, + Read_To_Reg => Read_To_Reg, + Set_BusB_To => Set_BusB_To, + Set_BusA_To => Set_BusA_To, + ALU_Op => ALU_Op, + Save_ALU => Save_ALU, + PreserveC => PreserveC, + Arith16 => Arith16, + Set_Addr_To => Set_Addr_To, + IORQ => IORQ_i, + Jump => Jump, + JumpE => JumpE, + JumpXY => JumpXY, + Call => Call, + RstP => RstP, + LDZ => LDZ, + LDW => LDW, + LDSPHL => LDSPHL, + Special_LD => Special_LD, + ExchangeDH => ExchangeDH, + ExchangeRp => ExchangeRp, + ExchangeAF => ExchangeAF, + ExchangeRS => ExchangeRS, + I_DJNZ => I_DJNZ, + I_CPL => I_CPL, + I_CCF => I_CCF, + I_SCF => I_SCF, + I_RETN => I_RETN, + I_BT => I_BT, + I_BC => I_BC, + I_BTR => I_BTR, + I_RLD => I_RLD, + I_RRD => I_RRD, + I_INRC => I_INRC, + SetDI => SetDI, + SetEI => SetEI, + IMode => IMode, + Halt => Halt, + NoRead => NoRead, + Write => Write); + + alu : T80_ALU + generic map( + Mode => Mode, + Flag_C => Flag_C, + Flag_N => Flag_N, + Flag_P => Flag_P, + Flag_X => Flag_X, + Flag_H => Flag_H, + Flag_Y => Flag_Y, + Flag_Z => Flag_Z, + Flag_S => Flag_S) + port map( + Arith16 => Arith16_r, + Z16 => Z16_r, + ALU_Op => ALU_Op_r, + IR => IR(5 downto 0), + ISet => ISet, + BusA => BusA, + BusB => BusB, + F_In => F, + Q => ALU_Q, + F_Out => F_Out); + + ClkEn <= CEN and not BusAck; + + T_Res <= '1' when TState = unsigned(TStates) else '0'; + + NextIs_XY_Fetch <= '1' when XY_State /= "00" and XY_Ind = '0' and + ((Set_Addr_To = aXY) or + (MCycle = "001" and IR = "11001011") or + (MCycle = "001" and IR = "00110110")) else '0'; + + Save_Mux <= BusB when ExchangeRp = '1' else + DI_Reg when Save_ALU_r = '0' else + ALU_Q; + + process (RESET_n, CLK_n) + begin + if RESET_n = '0' then + PC <= (others => '0'); -- Program Counter + A <= (others => '0'); + TmpAddr <= (others => '0'); + IR <= "00000000"; + ISet <= "00"; + XY_State <= "00"; + IStatus <= "00"; + MCycles <= "000"; + DO <= "00000000"; + + ACC <= (others => '1'); + F <= (others => '1'); + Ap <= (others => '1'); + Fp <= (others => '1'); + I <= (others => '0'); + R <= (others => '0'); + SP <= (others => '1'); + Alternate <= '0'; + + Read_To_Reg_r <= "00000"; + F <= (others => '1'); + Arith16_r <= '0'; + BTR_r <= '0'; + Z16_r <= '0'; + ALU_Op_r <= "0000"; + Save_ALU_r <= '0'; + PreserveC_r <= '0'; + XY_Ind <= '0'; + + elsif CLK_n'event and CLK_n = '1' then + + if ClkEn = '1' then + + ALU_Op_r <= "0000"; + Save_ALU_r <= '0'; + Read_To_Reg_r <= "00000"; + + MCycles <= MCycles_d; + + if IMode /= "11" then + IStatus <= IMode; + end if; + + Arith16_r <= Arith16; + PreserveC_r <= PreserveC; + if ISet = "10" and ALU_OP(2) = '0' and ALU_OP(0) = '1' and MCycle = "011" then + Z16_r <= '1'; + else + Z16_r <= '0'; + end if; + + if MCycle = "001" and TState(2) = '0' then + -- MCycle = 1 and TState = 1, 2, or 3 + + if TState = 2 and Wait_n = '1' then + if Mode < 2 then + A(7 downto 0) <= std_logic_vector(R); + A(15 downto 8) <= I; + R(6 downto 0) <= R(6 downto 0) + 1; + end if; + + if Jump = '0' and Call = '0' and NMICycle = '0' and IntCycle = '0' and not (Halt_FF = '1' or Halt = '1') then + PC <= PC + 1; + end if; + + if IntCycle = '1' and IStatus = "01" then + IR <= "11111111"; + elsif Halt_FF = '1' or (IntCycle = '1' and IStatus = "10") or NMICycle = '1' then + IR <= "00000000"; + else + IR <= DInst; + end if; + + ISet <= "00"; + if Prefix /= "00" then + if Prefix = "11" then + if IR(5) = '1' then + XY_State <= "10"; + else + XY_State <= "01"; + end if; + else + if Prefix = "10" then + XY_State <= "00"; + XY_Ind <= '0'; + end if; + ISet <= Prefix; + end if; + else + XY_State <= "00"; + XY_Ind <= '0'; + end if; + end if; + + else + -- either (MCycle > 1) OR (MCycle = 1 AND TState > 3) + + if MCycle = "110" then + XY_Ind <= '1'; + if Prefix = "01" then + ISet <= "01"; + end if; + end if; + + if T_Res = '1' then + BTR_r <= (I_BT or I_BC or I_BTR) and not No_BTR; + if Jump = '1' then + A(15 downto 8) <= DI_Reg; + A(7 downto 0) <= TmpAddr(7 downto 0); + PC(15 downto 8) <= unsigned(DI_Reg); + PC(7 downto 0) <= unsigned(TmpAddr(7 downto 0)); + elsif JumpXY = '1' then + A <= RegBusC; + PC <= unsigned(RegBusC); + elsif Call = '1' or RstP = '1' then + A <= TmpAddr; + PC <= unsigned(TmpAddr); + elsif MCycle = MCycles and NMICycle = '1' then + A <= "0000000001100110"; + PC <= "0000000001100110"; + elsif MCycle = "011" and IntCycle = '1' and IStatus = "10" then + A(15 downto 8) <= I; + A(7 downto 0) <= TmpAddr(7 downto 0); + PC(15 downto 8) <= unsigned(I); + PC(7 downto 0) <= unsigned(TmpAddr(7 downto 0)); + else + case Set_Addr_To is + when aXY => + if XY_State = "00" then + A <= RegBusC; + else + if NextIs_XY_Fetch = '1' then + A <= std_logic_vector(PC); + else + A <= TmpAddr; + end if; + end if; + when aIOA => + if Mode = 3 then + -- Memory map I/O on GBZ80 + A(15 downto 8) <= (others => '1'); + elsif Mode = 2 then + -- Duplicate I/O address on 8080 + A(15 downto 8) <= DI_Reg; + else + A(15 downto 8) <= ACC; + end if; + A(7 downto 0) <= DI_Reg; + when aSP => + A <= std_logic_vector(SP); + when aBC => + if Mode = 3 and IORQ_i = '1' then + -- Memory map I/O on GBZ80 + A(15 downto 8) <= (others => '1'); + A(7 downto 0) <= RegBusC(7 downto 0); + else + A <= RegBusC; + end if; + when aDE => + A <= RegBusC; + when aZI => + if Inc_WZ = '1' then + A <= std_logic_vector(unsigned(TmpAddr) + 1); + else + A(15 downto 8) <= DI_Reg; + A(7 downto 0) <= TmpAddr(7 downto 0); + end if; + when others => + A <= std_logic_vector(PC); + end case; + end if; + + Save_ALU_r <= Save_ALU; + ALU_Op_r <= ALU_Op; + + if I_CPL = '1' then + -- CPL + ACC <= not ACC; + F(Flag_Y) <= not ACC(5); + F(Flag_H) <= '1'; + F(Flag_X) <= not ACC(3); + F(Flag_N) <= '1'; + end if; + if I_CCF = '1' then + -- CCF + F(Flag_C) <= not F(Flag_C); + F(Flag_Y) <= ACC(5); + F(Flag_H) <= F(Flag_C); + F(Flag_X) <= ACC(3); + F(Flag_N) <= '0'; + end if; + if I_SCF = '1' then + -- SCF + F(Flag_C) <= '1'; + F(Flag_Y) <= ACC(5); + F(Flag_H) <= '0'; + F(Flag_X) <= ACC(3); + F(Flag_N) <= '0'; + end if; + end if; + + if TState = 2 and Wait_n = '1' then + if ISet = "01" and MCycle = "111" then + IR <= DInst; + end if; + if JumpE = '1' then + PC <= unsigned(signed(PC) + signed(DI_Reg)); + elsif Inc_PC = '1' then + PC <= PC + 1; + end if; + if BTR_r = '1' then + PC <= PC - 2; + end if; + if RstP = '1' then + TmpAddr <= (others =>'0'); + TmpAddr(5 downto 3) <= IR(5 downto 3); + end if; + end if; + if TState = 3 and MCycle = "110" then + TmpAddr <= std_logic_vector(signed(RegBusC) + signed(DI_Reg)); + end if; + + if (TState = 2 and Wait_n = '1') or (TState = 4 and MCycle = "001") then + if IncDec_16(2 downto 0) = "111" then + if IncDec_16(3) = '1' then + SP <= SP - 1; + else + SP <= SP + 1; + end if; + end if; + end if; + + if LDSPHL = '1' then + SP <= unsigned(RegBusC); + end if; + if ExchangeAF = '1' then + Ap <= ACC; + ACC <= Ap; + Fp <= F; + F <= Fp; + end if; + if ExchangeRS = '1' then + Alternate <= not Alternate; + end if; + end if; + + if TState = 3 then + if LDZ = '1' then + TmpAddr(7 downto 0) <= DI_Reg; + end if; + if LDW = '1' then + TmpAddr(15 downto 8) <= DI_Reg; + end if; + + if Special_LD(2) = '1' then + case Special_LD(1 downto 0) is + when "00" => + ACC <= I; + F(Flag_P) <= IntE_FF2; + when "01" => + ACC <= std_logic_vector(R); + F(Flag_P) <= IntE_FF2; + when "10" => + I <= ACC; + when others => + R <= unsigned(ACC); + end case; + end if; + end if; + + if (I_DJNZ = '0' and Save_ALU_r = '1') or ALU_Op_r = "1001" then + if Mode = 3 then + F(6) <= F_Out(6); + F(5) <= F_Out(5); + F(7) <= F_Out(7); + if PreserveC_r = '0' then + F(4) <= F_Out(4); + end if; + else + F(7 downto 1) <= F_Out(7 downto 1); + if PreserveC_r = '0' then + F(Flag_C) <= F_Out(0); + end if; + end if; + end if; + if T_Res = '1' and I_INRC = '1' then + F(Flag_H) <= '0'; + F(Flag_N) <= '0'; + if DI_Reg(7 downto 0) = "00000000" then + F(Flag_Z) <= '1'; + else + F(Flag_Z) <= '0'; + end if; + F(Flag_S) <= DI_Reg(7); + F(Flag_P) <= not (DI_Reg(0) xor DI_Reg(1) xor DI_Reg(2) xor DI_Reg(3) xor + DI_Reg(4) xor DI_Reg(5) xor DI_Reg(6) xor DI_Reg(7)); + end if; + + if TState = 1 then + DO <= BusB; + if I_RLD = '1' then + DO(3 downto 0) <= BusA(3 downto 0); + DO(7 downto 4) <= BusB(3 downto 0); + end if; + if I_RRD = '1' then + DO(3 downto 0) <= BusB(7 downto 4); + DO(7 downto 4) <= BusA(3 downto 0); + end if; + end if; + + if T_Res = '1' then + Read_To_Reg_r(3 downto 0) <= Set_BusA_To; + Read_To_Reg_r(4) <= Read_To_Reg; + if Read_To_Acc = '1' then + Read_To_Reg_r(3 downto 0) <= "0111"; + Read_To_Reg_r(4) <= '1'; + end if; + end if; + + if TState = 1 and I_BT = '1' then + F(Flag_X) <= ALU_Q(3); + F(Flag_Y) <= ALU_Q(1); + F(Flag_H) <= '0'; + F(Flag_N) <= '0'; + end if; + if I_BC = '1' or I_BT = '1' then + F(Flag_P) <= IncDecZ; + end if; + + if (TState = 1 and Save_ALU_r = '0') or + (Save_ALU_r = '1' and ALU_OP_r /= "0111") then + case Read_To_Reg_r is + when "10111" => + ACC <= Save_Mux; + when "10110" => + DO <= Save_Mux; + when "11000" => + SP(7 downto 0) <= unsigned(Save_Mux); + when "11001" => + SP(15 downto 8) <= unsigned(Save_Mux); + when "11011" => + F <= Save_Mux; + when others => + end case; + end if; + + end if; + + end if; + + end process; + +--------------------------------------------------------------------------- +-- +-- BC('), DE('), HL('), IX and IY +-- +--------------------------------------------------------------------------- + process (CLK_n) + begin + if CLK_n'event and CLK_n = '1' then + if ClkEn = '1' then + -- Bus A / Write + RegAddrA_r <= Alternate & Set_BusA_To(2 downto 1); + if XY_Ind = '0' and XY_State /= "00" and Set_BusA_To(2 downto 1) = "10" then + RegAddrA_r <= XY_State(1) & "11"; + end if; + + -- Bus B + RegAddrB_r <= Alternate & Set_BusB_To(2 downto 1); + if XY_Ind = '0' and XY_State /= "00" and Set_BusB_To(2 downto 1) = "10" then + RegAddrB_r <= XY_State(1) & "11"; + end if; + + -- Address from register + RegAddrC <= Alternate & Set_Addr_To(1 downto 0); + -- Jump (HL), LD SP,HL + if (JumpXY = '1' or LDSPHL = '1') then + RegAddrC <= Alternate & "10"; + end if; + if ((JumpXY = '1' or LDSPHL = '1') and XY_State /= "00") or (MCycle = "110") then + RegAddrC <= XY_State(1) & "11"; + end if; + + if I_DJNZ = '1' and Save_ALU_r = '1' and Mode < 2 then + IncDecZ <= F_Out(Flag_Z); + end if; + if (TState = 2 or (TState = 3 and MCycle = "001")) and IncDec_16(2 downto 0) = "100" then + if ID16 = 0 then + IncDecZ <= '0'; + else + IncDecZ <= '1'; + end if; + end if; + + RegBusA_r <= RegBusA; + end if; + end if; + end process; + + RegAddrA <= + -- 16 bit increment/decrement + Alternate & IncDec_16(1 downto 0) when (TState = 2 or + (TState = 3 and MCycle = "001" and IncDec_16(2) = '1')) and XY_State = "00" else + XY_State(1) & "11" when (TState = 2 or + (TState = 3 and MCycle = "001" and IncDec_16(2) = '1')) and IncDec_16(1 downto 0) = "10" else + -- EX HL,DL + Alternate & "10" when ExchangeDH = '1' and TState = 3 else + Alternate & "01" when ExchangeDH = '1' and TState = 4 else + -- Bus A / Write + RegAddrA_r; + + RegAddrB <= + -- EX HL,DL + Alternate & "01" when ExchangeDH = '1' and TState = 3 else + -- Bus B + RegAddrB_r; + + ID16 <= signed(RegBusA) - 1 when IncDec_16(3) = '1' else + signed(RegBusA) + 1; + + process (Save_ALU_r, Auto_Wait_t1, ALU_OP_r, Read_To_Reg_r, + ExchangeDH, IncDec_16, MCycle, TState, Wait_n) + begin + RegWEH <= '0'; + RegWEL <= '0'; + if (TState = 1 and Save_ALU_r = '0') or + (Save_ALU_r = '1' and ALU_OP_r /= "0111") then + case Read_To_Reg_r is + when "10000" | "10001" | "10010" | "10011" | "10100" | "10101" => + RegWEH <= not Read_To_Reg_r(0); + RegWEL <= Read_To_Reg_r(0); + when others => + end case; + end if; + + if ExchangeDH = '1' and (TState = 3 or TState = 4) then + RegWEH <= '1'; + RegWEL <= '1'; + end if; + + if IncDec_16(2) = '1' and ((TState = 2 and Wait_n = '1' and MCycle /= "001") or (TState = 3 and MCycle = "001")) then + case IncDec_16(1 downto 0) is + when "00" | "01" | "10" => + RegWEH <= '1'; + RegWEL <= '1'; + when others => + end case; + end if; + end process; + + process (Save_Mux, RegBusB, RegBusA_r, ID16, + ExchangeDH, IncDec_16, MCycle, TState, Wait_n) + begin + RegDIH <= Save_Mux; + RegDIL <= Save_Mux; + + if ExchangeDH = '1' and TState = 3 then + RegDIH <= RegBusB(15 downto 8); + RegDIL <= RegBusB(7 downto 0); + end if; + if ExchangeDH = '1' and TState = 4 then + RegDIH <= RegBusA_r(15 downto 8); + RegDIL <= RegBusA_r(7 downto 0); + end if; + + if IncDec_16(2) = '1' and ((TState = 2 and MCycle /= "001") or (TState = 3 and MCycle = "001")) then + RegDIH <= std_logic_vector(ID16(15 downto 8)); + RegDIL <= std_logic_vector(ID16(7 downto 0)); + end if; + end process; + + Regs : T80_Reg + port map( + Clk => CLK_n, + CEN => ClkEn, + WEH => RegWEH, + WEL => RegWEL, + AddrA => RegAddrA, + AddrB => RegAddrB, + AddrC => RegAddrC, + DIH => RegDIH, + DIL => RegDIL, + DOAH => RegBusA(15 downto 8), + DOAL => RegBusA(7 downto 0), + DOBH => RegBusB(15 downto 8), + DOBL => RegBusB(7 downto 0), + DOCH => RegBusC(15 downto 8), + DOCL => RegBusC(7 downto 0)); + +--------------------------------------------------------------------------- +-- +-- Buses +-- +--------------------------------------------------------------------------- + process (CLK_n) + begin + if CLK_n'event and CLK_n = '1' then + if ClkEn = '1' then + case Set_BusB_To is + when "0111" => + BusB <= ACC; + when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" => + if Set_BusB_To(0) = '1' then + BusB <= RegBusB(7 downto 0); + else + BusB <= RegBusB(15 downto 8); + end if; + when "0110" => + BusB <= DI_Reg; + when "1000" => + BusB <= std_logic_vector(SP(7 downto 0)); + when "1001" => + BusB <= std_logic_vector(SP(15 downto 8)); + when "1010" => + BusB <= "00000001"; + when "1011" => + BusB <= F; + when "1100" => + BusB <= std_logic_vector(PC(7 downto 0)); + when "1101" => + BusB <= std_logic_vector(PC(15 downto 8)); + when "1110" => + BusB <= "00000000"; + when others => + BusB <= "--------"; + end case; + + case Set_BusA_To is + when "0111" => + BusA <= ACC; + when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" => + if Set_BusA_To(0) = '1' then + BusA <= RegBusA(7 downto 0); + else + BusA <= RegBusA(15 downto 8); + end if; + when "0110" => + BusA <= DI_Reg; + when "1000" => + BusA <= std_logic_vector(SP(7 downto 0)); + when "1001" => + BusA <= std_logic_vector(SP(15 downto 8)); + when "1010" => + BusA <= "00000000"; + when others => + BusB <= "--------"; + end case; + end if; + end if; + end process; + +--------------------------------------------------------------------------- +-- +-- Generate external control signals +-- +--------------------------------------------------------------------------- + process (RESET_n,CLK_n) + begin + if RESET_n = '0' then + RFSH_n <= '1'; + elsif CLK_n'event and CLK_n = '1' then + if CEN = '1' then + if MCycle = "001" and ((TState = 2 and Wait_n = '1') or TState = 3) then + RFSH_n <= '0'; + else + RFSH_n <= '1'; + end if; + end if; + end if; + end process; + + MC <= std_logic_vector(MCycle); + TS <= std_logic_vector(TState); + DI_Reg <= DI; + HALT_n <= not Halt_FF; + BUSAK_n <= not BusAck; + IntCycle_n <= not IntCycle; + IntE <= IntE_FF1; + IORQ <= IORQ_i; + Stop <= I_DJNZ; + +------------------------------------------------------------------------- +-- +-- Syncronise inputs +-- +------------------------------------------------------------------------- + process (RESET_n, CLK_n) + variable OldNMI_n : std_logic; + begin + if RESET_n = '0' then + BusReq_s <= '0'; + INT_s <= '0'; + NMI_s <= '0'; + OldNMI_n := '0'; + elsif CLK_n'event and CLK_n = '1' then + if CEN = '1' then + BusReq_s <= not BUSRQ_n; + INT_s <= not INT_n; + if NMICycle = '1' then + NMI_s <= '0'; + elsif NMI_n = '0' and OldNMI_n = '1' then + NMI_s <= '1'; + end if; + OldNMI_n := NMI_n; + end if; + end if; + end process; + +------------------------------------------------------------------------- +-- +-- Main state machine +-- +------------------------------------------------------------------------- + process (RESET_n, CLK_n) + begin + if RESET_n = '0' then + MCycle <= "001"; + TState <= "000"; + Pre_XY_F_M <= "000"; + Halt_FF <= '0'; + BusAck <= '0'; + NMICycle <= '0'; + IntCycle <= '0'; + IntE_FF1 <= '0'; + IntE_FF2 <= '0'; + No_BTR <= '0'; + Auto_Wait_t1 <= '0'; + Auto_Wait_t2 <= '0'; + M1_n <= '1'; + elsif CLK_n'event and CLK_n = '1' then + if CEN = '1' then + Auto_Wait_t1 <= Auto_Wait; + Auto_Wait_t2 <= Auto_Wait_t1; + No_BTR <= (I_BT and (not IR(4) or not F(Flag_P))) or + (I_BC and (not IR(4) or F(Flag_Z) or not F(Flag_P))) or + (I_BTR and (not IR(4) or F(Flag_Z))); + if TState = 2 then + if SetEI = '1' then + IntE_FF1 <= '1'; + IntE_FF2 <= '1'; + end if; + if I_RETN = '1' then + IntE_FF1 <= IntE_FF2; + end if; + end if; + if TState = 3 then + if SetDI = '1' then + IntE_FF1 <= '0'; + IntE_FF2 <= '0'; + end if; + end if; + if IntCycle = '1' or NMICycle = '1' then + Halt_FF <= '0'; + end if; + if MCycle = "001" and TState = 2 and Wait_n = '1' then + M1_n <= '1'; + end if; + if BusReq_s = '1' and BusAck = '1' then + else + BusAck <= '0'; + if TState = 2 and Wait_n = '0' then + elsif T_Res = '1' then + if Halt = '1' then + Halt_FF <= '1'; + end if; + if BusReq_s = '1' then + BusAck <= '1'; + else + TState <= "001"; + if NextIs_XY_Fetch = '1' then + MCycle <= "110"; + Pre_XY_F_M <= MCycle; + if IR = "00110110" and Mode = 0 then + Pre_XY_F_M <= "010"; + end if; + elsif (MCycle = "111") or + (MCycle = "110" and Mode = 1 and ISet /= "01") then + MCycle <= std_logic_vector(unsigned(Pre_XY_F_M) + 1); + elsif (MCycle = MCycles) or + No_BTR = '1' or + (MCycle = "010" and I_DJNZ = '1' and IncDecZ = '1') then + M1_n <= '0'; + MCycle <= "001"; + IntCycle <= '0'; + NMICycle <= '0'; + if NMI_s = '1' and Prefix = "00" then + NMICycle <= '1'; + IntE_FF1 <= '0'; + elsif (IntE_FF1 = '1' and INT_s = '1') and Prefix = "00" and SetEI = '0' then + IntCycle <= '1'; + IntE_FF1 <= '0'; + IntE_FF2 <= '0'; + end if; + else + MCycle <= std_logic_vector(unsigned(MCycle) + 1); + end if; + end if; + else + if Auto_Wait = '1' nand Auto_Wait_t2 = '0' then + + TState <= TState + 1; + end if; + end if; + end if; + if TState = 0 then + M1_n <= '0'; + end if; + end if; + end if; + end process; + + process (IntCycle, NMICycle, MCycle) + begin + Auto_Wait <= '0'; + if IntCycle = '1' or NMICycle = '1' then + if MCycle = "001" then + Auto_Wait <= '1'; + end if; + end if; + end process; + +end; diff --git a/Bally - Astrocade_MiST/rtl/T80/T80_ALU.vhd b/Bally - Astrocade_MiST/rtl/T80/T80_ALU.vhd new file mode 100644 index 00000000..95c98dab --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/T80/T80_ALU.vhd @@ -0,0 +1,371 @@ +-- **** +-- T80(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 301 parity flag is just parity for 8080, also overflow for Z80, by Sean Riddle +-- Ver 300 started tidyup +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- Z80 compatible microprocessor core +-- +-- Version : 0247 +-- +-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t80/ +-- +-- Limitations : +-- +-- File history : +-- +-- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test +-- +-- 0238 : Fixed zero flag for 16 bit SBC and ADC +-- +-- 0240 : Added GB operations +-- +-- 0242 : Cleanup +-- +-- 0247 : Cleanup +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity T80_ALU is + generic( + Mode : integer := 0; + Flag_C : integer := 0; + Flag_N : integer := 1; + Flag_P : integer := 2; + Flag_X : integer := 3; + Flag_H : integer := 4; + Flag_Y : integer := 5; + Flag_Z : integer := 6; + Flag_S : integer := 7 + ); + port( + Arith16 : in std_logic; + Z16 : in std_logic; + ALU_Op : in std_logic_vector(3 downto 0); + IR : in std_logic_vector(5 downto 0); + ISet : in std_logic_vector(1 downto 0); + BusA : in std_logic_vector(7 downto 0); + BusB : in std_logic_vector(7 downto 0); + F_In : in std_logic_vector(7 downto 0); + Q : out std_logic_vector(7 downto 0); + F_Out : out std_logic_vector(7 downto 0) + ); +end T80_ALU; + +architecture rtl of T80_ALU is + + procedure AddSub(A : std_logic_vector; + B : std_logic_vector; + Sub : std_logic; + Carry_In : std_logic; + signal Res : out std_logic_vector; + signal Carry : out std_logic) is + + variable B_i : unsigned(A'length - 1 downto 0); + variable Res_i : unsigned(A'length + 1 downto 0); + begin + if Sub = '1' then + B_i := not unsigned(B); + else + B_i := unsigned(B); + end if; + + Res_i := unsigned("0" & A & Carry_In) + unsigned("0" & B_i & "1"); + Carry <= Res_i(A'length + 1); + Res <= std_logic_vector(Res_i(A'length downto 1)); + end; + + -- AddSub variables (temporary signals) + signal UseCarry : std_logic; + signal Carry7_v : std_logic; + signal Overflow_v : std_logic; + signal HalfCarry_v : std_logic; + signal Carry_v : std_logic; + signal Q_v : std_logic_vector(7 downto 0); + + signal BitMask : std_logic_vector(7 downto 0); + +begin + + with IR(5 downto 3) select BitMask <= "00000001" when "000", + "00000010" when "001", + "00000100" when "010", + "00001000" when "011", + "00010000" when "100", + "00100000" when "101", + "01000000" when "110", + "10000000" when others; + + UseCarry <= not ALU_Op(2) and ALU_Op(0); + AddSub(BusA(3 downto 0), BusB(3 downto 0), ALU_Op(1), ALU_Op(1) xor (UseCarry and F_In(Flag_C)), Q_v(3 downto 0), HalfCarry_v); + AddSub(BusA(6 downto 4), BusB(6 downto 4), ALU_Op(1), HalfCarry_v, Q_v(6 downto 4), Carry7_v); + AddSub(BusA(7 downto 7), BusB(7 downto 7), ALU_Op(1), Carry7_v, Q_v(7 downto 7), Carry_v); + + -- bug fix - parity flag is just parity for 8080, also overflow for Z80 + process (Carry_v, Carry7_v, Q_v) + begin + if(Mode=2) then + OverFlow_v <= not (Q_v(0) xor Q_v(1) xor Q_v(2) xor Q_v(3) xor + Q_v(4) xor Q_v(5) xor Q_v(6) xor Q_v(7)); else + OverFlow_v <= Carry_v xor Carry7_v; + end if; + end process; + + process (Arith16, ALU_OP, F_In, BusA, BusB, IR, Q_v, Carry_v, HalfCarry_v, OverFlow_v, BitMask, ISet, Z16) + variable Q_t : std_logic_vector(7 downto 0); + variable DAA_Q : unsigned(8 downto 0); + begin + Q_t := "--------"; + F_Out <= F_In; + DAA_Q := "---------"; + case ALU_Op is + when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" | "0110" | "0111" => + F_Out(Flag_N) <= '0'; + F_Out(Flag_C) <= '0'; + case ALU_OP(2 downto 0) is + when "000" | "001" => -- ADD, ADC + Q_t := Q_v; + F_Out(Flag_C) <= Carry_v; + F_Out(Flag_H) <= HalfCarry_v; + F_Out(Flag_P) <= OverFlow_v; + when "010" | "011" | "111" => -- SUB, SBC, CP + Q_t := Q_v; + F_Out(Flag_N) <= '1'; + F_Out(Flag_C) <= not Carry_v; + F_Out(Flag_H) <= not HalfCarry_v; + F_Out(Flag_P) <= OverFlow_v; + when "100" => -- AND + Q_t(7 downto 0) := BusA and BusB; + F_Out(Flag_H) <= '1'; + when "101" => -- XOR + Q_t(7 downto 0) := BusA xor BusB; + F_Out(Flag_H) <= '0'; + when others => -- OR "110" + Q_t(7 downto 0) := BusA or BusB; + F_Out(Flag_H) <= '0'; + end case; + if ALU_Op(2 downto 0) = "111" then -- CP + F_Out(Flag_X) <= BusB(3); + F_Out(Flag_Y) <= BusB(5); + else + F_Out(Flag_X) <= Q_t(3); + F_Out(Flag_Y) <= Q_t(5); + end if; + if Q_t(7 downto 0) = "00000000" then + F_Out(Flag_Z) <= '1'; + if Z16 = '1' then + F_Out(Flag_Z) <= F_In(Flag_Z); -- 16 bit ADC,SBC + end if; + else + F_Out(Flag_Z) <= '0'; + end if; + F_Out(Flag_S) <= Q_t(7); + case ALU_Op(2 downto 0) is + when "000" | "001" | "010" | "011" | "111" => -- ADD, ADC, SUB, SBC, CP + when others => + F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor + Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); + end case; + if Arith16 = '1' then + F_Out(Flag_S) <= F_In(Flag_S); + F_Out(Flag_Z) <= F_In(Flag_Z); + F_Out(Flag_P) <= F_In(Flag_P); + end if; + when "1100" => + -- DAA + F_Out(Flag_H) <= F_In(Flag_H); + F_Out(Flag_C) <= F_In(Flag_C); + DAA_Q(7 downto 0) := unsigned(BusA); + DAA_Q(8) := '0'; + if F_In(Flag_N) = '0' then + -- After addition + -- Alow > 9 or H = 1 + if DAA_Q(3 downto 0) > 9 or F_In(Flag_H) = '1' then + if (DAA_Q(3 downto 0) > 9) then + F_Out(Flag_H) <= '1'; + else + F_Out(Flag_H) <= '0'; + end if; + DAA_Q := DAA_Q + 6; + end if; + -- new Ahigh > 9 or C = 1 + if DAA_Q(8 downto 4) > 9 or F_In(Flag_C) = '1' then + DAA_Q := DAA_Q + 96; -- 0x60 + end if; + else + -- After subtraction + if DAA_Q(3 downto 0) > 9 or F_In(Flag_H) = '1' then + if DAA_Q(3 downto 0) > 5 then + F_Out(Flag_H) <= '0'; + end if; + DAA_Q(7 downto 0) := DAA_Q(7 downto 0) - 6; + end if; + if unsigned(BusA) > 153 or F_In(Flag_C) = '1' then + DAA_Q := DAA_Q - 352; -- 0x160 + end if; + end if; + F_Out(Flag_X) <= DAA_Q(3); + F_Out(Flag_Y) <= DAA_Q(5); + F_Out(Flag_C) <= F_In(Flag_C) or DAA_Q(8); + Q_t := std_logic_vector(DAA_Q(7 downto 0)); + if DAA_Q(7 downto 0) = "00000000" then + F_Out(Flag_Z) <= '1'; + else + F_Out(Flag_Z) <= '0'; + end if; + F_Out(Flag_S) <= DAA_Q(7); + F_Out(Flag_P) <= not (DAA_Q(0) xor DAA_Q(1) xor DAA_Q(2) xor DAA_Q(3) xor + DAA_Q(4) xor DAA_Q(5) xor DAA_Q(6) xor DAA_Q(7)); + when "1101" | "1110" => + -- RLD, RRD + Q_t(7 downto 4) := BusA(7 downto 4); + if ALU_Op(0) = '1' then + Q_t(3 downto 0) := BusB(7 downto 4); + else + Q_t(3 downto 0) := BusB(3 downto 0); + end if; + F_Out(Flag_H) <= '0'; + F_Out(Flag_N) <= '0'; + F_Out(Flag_X) <= Q_t(3); + F_Out(Flag_Y) <= Q_t(5); + if Q_t(7 downto 0) = "00000000" then + F_Out(Flag_Z) <= '1'; + else + F_Out(Flag_Z) <= '0'; + end if; + F_Out(Flag_S) <= Q_t(7); + F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor + Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); + when "1001" => + -- BIT + Q_t(7 downto 0) := BusB and BitMask; + F_Out(Flag_S) <= Q_t(7); + if Q_t(7 downto 0) = "00000000" then + F_Out(Flag_Z) <= '1'; + F_Out(Flag_P) <= '1'; + else + F_Out(Flag_Z) <= '0'; + F_Out(Flag_P) <= '0'; + end if; + F_Out(Flag_H) <= '1'; + F_Out(Flag_N) <= '0'; + F_Out(Flag_X) <= '0'; + F_Out(Flag_Y) <= '0'; + if IR(2 downto 0) /= "110" then + F_Out(Flag_X) <= BusB(3); + F_Out(Flag_Y) <= BusB(5); + end if; + when "1010" => + -- SET + Q_t(7 downto 0) := BusB or BitMask; + when "1011" => + -- RES + Q_t(7 downto 0) := BusB and not BitMask; + when "1000" => + -- ROT + case IR(5 downto 3) is + when "000" => -- RLC + Q_t(7 downto 1) := BusA(6 downto 0); + Q_t(0) := BusA(7); + F_Out(Flag_C) <= BusA(7); + when "010" => -- RL + Q_t(7 downto 1) := BusA(6 downto 0); + Q_t(0) := F_In(Flag_C); + F_Out(Flag_C) <= BusA(7); + when "001" => -- RRC + Q_t(6 downto 0) := BusA(7 downto 1); + Q_t(7) := BusA(0); + F_Out(Flag_C) <= BusA(0); + when "011" => -- RR + Q_t(6 downto 0) := BusA(7 downto 1); + Q_t(7) := F_In(Flag_C); + F_Out(Flag_C) <= BusA(0); + when "100" => -- SLA + Q_t(7 downto 1) := BusA(6 downto 0); + Q_t(0) := '0'; + F_Out(Flag_C) <= BusA(7); + when "110" => -- SLL (Undocumented) / SWAP + if Mode = 3 then + Q_t(7 downto 4) := BusA(3 downto 0); + Q_t(3 downto 0) := BusA(7 downto 4); + F_Out(Flag_C) <= '0'; + else + Q_t(7 downto 1) := BusA(6 downto 0); + Q_t(0) := '1'; + F_Out(Flag_C) <= BusA(7); + end if; + when "101" => -- SRA + Q_t(6 downto 0) := BusA(7 downto 1); + Q_t(7) := BusA(7); + F_Out(Flag_C) <= BusA(0); + when others => -- SRL + Q_t(6 downto 0) := BusA(7 downto 1); + Q_t(7) := '0'; + F_Out(Flag_C) <= BusA(0); + end case; + F_Out(Flag_H) <= '0'; + F_Out(Flag_N) <= '0'; + F_Out(Flag_X) <= Q_t(3); + F_Out(Flag_Y) <= Q_t(5); + F_Out(Flag_S) <= Q_t(7); + if Q_t(7 downto 0) = "00000000" then + F_Out(Flag_Z) <= '1'; + else + F_Out(Flag_Z) <= '0'; + end if; + F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor + Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); + if ISet = "00" then + F_Out(Flag_P) <= F_In(Flag_P); + F_Out(Flag_S) <= F_In(Flag_S); + F_Out(Flag_Z) <= F_In(Flag_Z); + end if; + when others => + null; + end case; + Q <= Q_t; + end process; +end; diff --git a/Bally - Astrocade_MiST/rtl/T80/T80_MCode.vhd b/Bally - Astrocade_MiST/rtl/T80/T80_MCode.vhd new file mode 100644 index 00000000..43cea1b5 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/T80/T80_MCode.vhd @@ -0,0 +1,1944 @@ +-- **** +-- T80(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 started tidyup +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- Z80 compatible microprocessor core +-- +-- Version : 0242 +-- +-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t80/ +-- +-- Limitations : +-- +-- File history : +-- +-- 0208 : First complete release +-- +-- 0211 : Fixed IM 1 +-- +-- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test +-- +-- 0235 : Added IM 2 fix by Mike Johnson +-- +-- 0238 : Added NoRead signal +-- +-- 0238b: Fixed instruction timing for POP and DJNZ +-- +-- 0240 : Added (IX/IY+d) states, removed op-codes from mode 2 and added all remaining mode 3 op-codes + +-- 0240mj1 fix for HL inc/dec for INI, IND, INIR, INDR, OUTI, OUTD, OTIR, OTDR +-- +-- 0242 : Fixed I/O instruction timing, cleanup +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use work.T80_Pack.all; + +entity T80_MCode is + generic( + Mode : integer := 0; + Flag_C : integer := 0; + Flag_N : integer := 1; + Flag_P : integer := 2; + Flag_X : integer := 3; + Flag_H : integer := 4; + Flag_Y : integer := 5; + Flag_Z : integer := 6; + Flag_S : integer := 7 + ); + port( + IR : in std_logic_vector(7 downto 0); + ISet : in std_logic_vector(1 downto 0); + MCycle : in std_logic_vector(2 downto 0); + F : in std_logic_vector(7 downto 0); + NMICycle : in std_logic; + IntCycle : in std_logic; + MCycles : out std_logic_vector(2 downto 0); + TStates : out std_logic_vector(2 downto 0); + Prefix : out std_logic_vector(1 downto 0); -- None,BC,ED,DD/FD + Inc_PC : out std_logic; + Inc_WZ : out std_logic; + IncDec_16 : out std_logic_vector(3 downto 0); -- BC,DE,HL,SP 0 is inc + Read_To_Reg : out std_logic; + Read_To_Acc : out std_logic; + Set_BusA_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI/DB,A,SP(L),SP(M),0,F + Set_BusB_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI,A,SP(L),SP(M),1,F,PC(L),PC(M),0 + ALU_Op : out std_logic_vector(3 downto 0); + -- ADD, ADC, SUB, SBC, AND, XOR, OR, CP, ROT, BIT, SET, RES, DAA, RLD, RRD, None + Save_ALU : out std_logic; + PreserveC : out std_logic; + Arith16 : out std_logic; + Set_Addr_To : out std_logic_vector(2 downto 0); -- aNone,aXY,aIOA,aSP,aBC,aDE,aZI + IORQ : out std_logic; + Jump : out std_logic; + JumpE : out std_logic; + JumpXY : out std_logic; + Call : out std_logic; + RstP : out std_logic; + LDZ : out std_logic; + LDW : out std_logic; + LDSPHL : out std_logic; + Special_LD : out std_logic_vector(2 downto 0); -- A,I;A,R;I,A;R,A;None + ExchangeDH : out std_logic; + ExchangeRp : out std_logic; + ExchangeAF : out std_logic; + ExchangeRS : out std_logic; + I_DJNZ : out std_logic; + I_CPL : out std_logic; + I_CCF : out std_logic; + I_SCF : out std_logic; + I_RETN : out std_logic; + I_BT : out std_logic; + I_BC : out std_logic; + I_BTR : out std_logic; + I_RLD : out std_logic; + I_RRD : out std_logic; + I_INRC : out std_logic; + SetDI : out std_logic; + SetEI : out std_logic; + IMode : out std_logic_vector(1 downto 0); + Halt : out std_logic; + NoRead : out std_logic; + Write : out std_logic + ); +end T80_MCode; + +architecture rtl of T80_MCode is + + constant aNone : std_logic_vector(2 downto 0) := "111"; + constant aBC : std_logic_vector(2 downto 0) := "000"; + constant aDE : std_logic_vector(2 downto 0) := "001"; + constant aXY : std_logic_vector(2 downto 0) := "010"; + constant aIOA : std_logic_vector(2 downto 0) := "100"; + constant aSP : std_logic_vector(2 downto 0) := "101"; + constant aZI : std_logic_vector(2 downto 0) := "110"; + + function is_cc_true( + F : std_logic_vector(7 downto 0); + cc : bit_vector(2 downto 0) + ) return boolean is + begin + if Mode = 3 then + case cc is + when "000" => return F(7) = '0'; -- NZ + when "001" => return F(7) = '1'; -- Z + when "010" => return F(4) = '0'; -- NC + when "011" => return F(4) = '1'; -- C + when "100" => return false; + when "101" => return false; + when "110" => return false; + when "111" => return false; + end case; + else + case cc is + when "000" => return F(6) = '0'; -- NZ + when "001" => return F(6) = '1'; -- Z + when "010" => return F(0) = '0'; -- NC + when "011" => return F(0) = '1'; -- C + when "100" => return F(2) = '0'; -- PO + when "101" => return F(2) = '1'; -- PE + when "110" => return F(7) = '0'; -- P + when "111" => return F(7) = '1'; -- M + end case; + end if; + end; + +begin + + process (IR, ISet, MCycle, F, NMICycle, IntCycle) + variable DDD : std_logic_vector(2 downto 0); + variable SSS : std_logic_vector(2 downto 0); + variable DPair : std_logic_vector(1 downto 0); + variable IRB : bit_vector(7 downto 0); + begin + DDD := IR(5 downto 3); + SSS := IR(2 downto 0); + DPair := IR(5 downto 4); + IRB := to_bitvector(IR); + + MCycles <= "001"; + if MCycle = "001" then + TStates <= "100"; + else + TStates <= "011"; + end if; + Prefix <= "00"; + Inc_PC <= '0'; + Inc_WZ <= '0'; + IncDec_16 <= "0000"; + Read_To_Acc <= '0'; + Read_To_Reg <= '0'; + Set_BusB_To <= "0000"; + Set_BusA_To <= "0000"; + ALU_Op <= "0" & IR(5 downto 3); + Save_ALU <= '0'; + PreserveC <= '0'; + Arith16 <= '0'; + IORQ <= '0'; + Set_Addr_To <= aNone; + Jump <= '0'; + JumpE <= '0'; + JumpXY <= '0'; + Call <= '0'; + RstP <= '0'; + LDZ <= '0'; + LDW <= '0'; + LDSPHL <= '0'; + Special_LD <= "000"; + ExchangeDH <= '0'; + ExchangeRp <= '0'; + ExchangeAF <= '0'; + ExchangeRS <= '0'; + I_DJNZ <= '0'; + I_CPL <= '0'; + I_CCF <= '0'; + I_SCF <= '0'; + I_RETN <= '0'; + I_BT <= '0'; + I_BC <= '0'; + I_BTR <= '0'; + I_RLD <= '0'; + I_RRD <= '0'; + I_INRC <= '0'; + SetDI <= '0'; + SetEI <= '0'; + IMode <= "11"; + Halt <= '0'; + NoRead <= '0'; + Write <= '0'; + + case ISet is + when "00" => + +------------------------------------------------------------------------------ +-- +-- Unprefixed instructions +-- +------------------------------------------------------------------------------ + + case IRB is +-- 8 BIT LOAD GROUP + when "01000000"|"01000001"|"01000010"|"01000011"|"01000100"|"01000101"|"01000111" + |"01001000"|"01001001"|"01001010"|"01001011"|"01001100"|"01001101"|"01001111" + |"01010000"|"01010001"|"01010010"|"01010011"|"01010100"|"01010101"|"01010111" + |"01011000"|"01011001"|"01011010"|"01011011"|"01011100"|"01011101"|"01011111" + |"01100000"|"01100001"|"01100010"|"01100011"|"01100100"|"01100101"|"01100111" + |"01101000"|"01101001"|"01101010"|"01101011"|"01101100"|"01101101"|"01101111" + |"01111000"|"01111001"|"01111010"|"01111011"|"01111100"|"01111101"|"01111111" => + -- LD r,r' + Set_BusB_To(2 downto 0) <= SSS; + ExchangeRp <= '1'; + Set_BusA_To(2 downto 0) <= DDD; + Read_To_Reg <= '1'; + when "00000110"|"00001110"|"00010110"|"00011110"|"00100110"|"00101110"|"00111110" => + -- LD r,n + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Set_BusA_To(2 downto 0) <= DDD; + Read_To_Reg <= '1'; + when others => null; + end case; + when "01000110"|"01001110"|"01010110"|"01011110"|"01100110"|"01101110"|"01111110" => + -- LD r,(HL) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + when 2 => + Set_BusA_To(2 downto 0) <= DDD; + Read_To_Reg <= '1'; + when others => null; + end case; + when "01110000"|"01110001"|"01110010"|"01110011"|"01110100"|"01110101"|"01110111" => + -- LD (HL),r + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + Set_BusB_To(2 downto 0) <= SSS; + Set_BusB_To(3) <= '0'; + when 2 => + Write <= '1'; + when others => null; + end case; + when "00110110" => + -- LD (HL),n + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Set_Addr_To <= aXY; + Set_BusB_To(2 downto 0) <= SSS; + Set_BusB_To(3) <= '0'; + when 3 => + Write <= '1'; + when others => null; + end case; + when "00001010" => + -- LD A,(BC) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + when 2 => + Read_To_Acc <= '1'; + when others => null; + end case; + when "00011010" => + -- LD A,(DE) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aDE; + when 2 => + Read_To_Acc <= '1'; + when others => null; + end case; + when "00111010" => + if Mode = 3 then + -- LDD A,(HL) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + when 2 => + Read_To_Acc <= '1'; + IncDec_16 <= "1110"; + when others => null; + end case; + else + -- LD A,(nn) + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + when 4 => + Read_To_Acc <= '1'; + when others => null; + end case; + end if; + when "00000010" => + -- LD (BC),A + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + Set_BusB_To <= "0111"; + when 2 => + Write <= '1'; + when others => null; + end case; + when "00010010" => + -- LD (DE),A + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aDE; + Set_BusB_To <= "0111"; + when 2 => + Write <= '1'; + when others => null; + end case; + when "00110010" => + if Mode = 3 then + -- LDD (HL),A + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + Set_BusB_To <= "0111"; + when 2 => + Write <= '1'; + IncDec_16 <= "1110"; + when others => null; + end case; + else + -- LD (nn),A + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + Set_BusB_To <= "0111"; + when 4 => + Write <= '1'; + when others => null; + end case; + end if; + +-- 16 BIT LOAD GROUP + when "00000001"|"00010001"|"00100001"|"00110001" => + -- LD dd,nn + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Read_To_Reg <= '1'; + if DPAIR = "11" then + Set_BusA_To(3 downto 0) <= "1000"; + else + Set_BusA_To(2 downto 1) <= DPAIR; + Set_BusA_To(0) <= '1'; + end if; + when 3 => + Inc_PC <= '1'; + Read_To_Reg <= '1'; + if DPAIR = "11" then + Set_BusA_To(3 downto 0) <= "1001"; + else + Set_BusA_To(2 downto 1) <= DPAIR; + Set_BusA_To(0) <= '0'; + end if; + when others => null; + end case; + when "00101010" => + if Mode = 3 then + -- LDI A,(HL) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + when 2 => + Read_To_Acc <= '1'; + IncDec_16 <= "0110"; + when others => null; + end case; + else + -- LD HL,(nn) + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + LDW <= '1'; + when 4 => + Set_BusA_To(2 downto 0) <= "101"; -- L + Read_To_Reg <= '1'; + Inc_WZ <= '1'; + Set_Addr_To <= aZI; + when 5 => + Set_BusA_To(2 downto 0) <= "100"; -- H + Read_To_Reg <= '1'; + when others => null; + end case; + end if; + when "00100010" => + if Mode = 3 then + -- LDI (HL),A + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + Set_BusB_To <= "0111"; + when 2 => + Write <= '1'; + IncDec_16 <= "0110"; + when others => null; + end case; + else + -- LD (nn),HL + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + LDW <= '1'; + Set_BusB_To <= "0101"; -- L + when 4 => + Inc_WZ <= '1'; + Set_Addr_To <= aZI; + Write <= '1'; + Set_BusB_To <= "0100"; -- H + when 5 => + Write <= '1'; + when others => null; + end case; + end if; + when "11111001" => + -- LD SP,HL + TStates <= "110"; + LDSPHL <= '1'; + when "11000101"|"11010101"|"11100101"|"11110101" => + -- PUSH qq + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + TStates <= "101"; + IncDec_16 <= "1111"; + Set_Addr_TO <= aSP; + if DPAIR = "11" then + Set_BusB_To <= "0111"; + else + Set_BusB_To(2 downto 1) <= DPAIR; + Set_BusB_To(0) <= '0'; + Set_BusB_To(3) <= '0'; + end if; + when 2 => + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + if DPAIR = "11" then + Set_BusB_To <= "1011"; + else + Set_BusB_To(2 downto 1) <= DPAIR; + Set_BusB_To(0) <= '1'; + Set_BusB_To(3) <= '0'; + end if; + Write <= '1'; + when 3 => + Write <= '1'; + when others => null; + end case; + when "11000001"|"11010001"|"11100001"|"11110001" => + -- POP qq + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aSP; + when 2 => + IncDec_16 <= "0111"; + Set_Addr_To <= aSP; + Read_To_Reg <= '1'; + if DPAIR = "11" then + Set_BusA_To(3 downto 0) <= "1011"; + else + Set_BusA_To(2 downto 1) <= DPAIR; + Set_BusA_To(0) <= '1'; + end if; + when 3 => + IncDec_16 <= "0111"; + Read_To_Reg <= '1'; + if DPAIR = "11" then + Set_BusA_To(3 downto 0) <= "0111"; + else + Set_BusA_To(2 downto 1) <= DPAIR; + Set_BusA_To(0) <= '0'; + end if; + when others => null; + end case; + +-- EXCHANGE, BLOCK TRANSFER AND SEARCH GROUP + when "11101011" => + if Mode /= 3 then + -- EX DE,HL + ExchangeDH <= '1'; + end if; + when "00001000" => + if Mode = 3 then + -- LD (nn),SP + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + LDW <= '1'; + Set_BusB_To <= "1000"; + when 4 => + Inc_WZ <= '1'; + Set_Addr_To <= aZI; + Write <= '1'; + Set_BusB_To <= "1001"; + when 5 => + Write <= '1'; + when others => null; + end case; + elsif Mode < 2 then + -- EX AF,AF' + ExchangeAF <= '1'; + end if; + when "11011001" => + if Mode = 3 then + -- RETI + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_TO <= aSP; + when 2 => + IncDec_16 <= "0111"; + Set_Addr_To <= aSP; + LDZ <= '1'; + when 3 => + Jump <= '1'; + IncDec_16 <= "0111"; + I_RETN <= '1'; + SetEI <= '1'; + when others => null; + end case; + elsif Mode < 2 then + -- EXX + ExchangeRS <= '1'; + end if; + when "11100011" => + if Mode /= 3 then + -- EX (SP),HL + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aSP; + when 2 => + Read_To_Reg <= '1'; + Set_BusA_To <= "0101"; + Set_BusB_To <= "0101"; + Set_Addr_To <= aSP; + when 3 => + IncDec_16 <= "0111"; + Set_Addr_To <= aSP; + TStates <= "100"; + Write <= '1'; + when 4 => + Read_To_Reg <= '1'; + Set_BusA_To <= "0100"; + Set_BusB_To <= "0100"; + Set_Addr_To <= aSP; + when 5 => + IncDec_16 <= "1111"; + TStates <= "101"; + Write <= '1'; + when others => null; + end case; + end if; + +-- 8 BIT ARITHMETIC AND LOGICAL GROUP + when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111" + |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001111" + |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010111" + |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011111" + |"10100000"|"10100001"|"10100010"|"10100011"|"10100100"|"10100101"|"10100111" + |"10101000"|"10101001"|"10101010"|"10101011"|"10101100"|"10101101"|"10101111" + |"10110000"|"10110001"|"10110010"|"10110011"|"10110100"|"10110101"|"10110111" + |"10111000"|"10111001"|"10111010"|"10111011"|"10111100"|"10111101"|"10111111" => + -- ADD A,r + -- ADC A,r + -- SUB A,r + -- SBC A,r + -- AND A,r + -- OR A,r + -- XOR A,r + -- CP A,r + Set_BusB_To(2 downto 0) <= SSS; + Set_BusA_To(2 downto 0) <= "111"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + when "10000110"|"10001110"|"10010110"|"10011110"|"10100110"|"10101110"|"10110110"|"10111110" => + -- ADD A,(HL) + -- ADC A,(HL) + -- SUB A,(HL) + -- SBC A,(HL) + -- AND A,(HL) + -- OR A,(HL) + -- XOR A,(HL) + -- CP A,(HL) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + when 2 => + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusB_To(2 downto 0) <= SSS; + Set_BusA_To(2 downto 0) <= "111"; + when others => null; + end case; + when "11000110"|"11001110"|"11010110"|"11011110"|"11100110"|"11101110"|"11110110"|"11111110" => + -- ADD A,n + -- ADC A,n + -- SUB A,n + -- SBC A,n + -- AND A,n + -- OR A,n + -- XOR A,n + -- CP A,n + MCycles <= "010"; + if MCycle = "010" then + Inc_PC <= '1'; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusB_To(2 downto 0) <= SSS; + Set_BusA_To(2 downto 0) <= "111"; + end if; + when "00000100"|"00001100"|"00010100"|"00011100"|"00100100"|"00101100"|"00111100" => + -- INC r + Set_BusB_To <= "1010"; + Set_BusA_To(2 downto 0) <= DDD; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + PreserveC <= '1'; + ALU_Op <= "0000"; + when "00110100" => + -- INC (HL) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + when 2 => + TStates <= "100"; + Set_Addr_To <= aXY; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + PreserveC <= '1'; + ALU_Op <= "0000"; + Set_BusB_To <= "1010"; + Set_BusA_To(2 downto 0) <= DDD; + when 3 => + Write <= '1'; + when others => null; + end case; + when "00000101"|"00001101"|"00010101"|"00011101"|"00100101"|"00101101"|"00111101" => + -- DEC r + Set_BusB_To <= "1010"; + Set_BusA_To(2 downto 0) <= DDD; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + PreserveC <= '1'; + ALU_Op <= "0010"; + when "00110101" => + -- DEC (HL) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + when 2 => + TStates <= "100"; + Set_Addr_To <= aXY; + ALU_Op <= "0010"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + PreserveC <= '1'; + Set_BusB_To <= "1010"; + Set_BusA_To(2 downto 0) <= DDD; + when 3 => + Write <= '1'; + when others => null; + end case; + +-- GENERAL PURPOSE ARITHMETIC AND CPU CONTROL GROUPS + when "00100111" => + -- DAA + Set_BusA_To(2 downto 0) <= "111"; + Read_To_Reg <= '1'; + ALU_Op <= "1100"; + Save_ALU <= '1'; + when "00101111" => + -- CPL + I_CPL <= '1'; + when "00111111" => + -- CCF + I_CCF <= '1'; + when "00110111" => + -- SCF + I_SCF <= '1'; + when "00000000" => + if NMICycle = '1' then + -- NMI + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + TStates <= "101"; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1101"; + when 2 => + TStates <= "100"; + Write <= '1'; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1100"; + when 3 => + TStates <= "100"; + Write <= '1'; + when others => null; + end case; + elsif IntCycle = '1' then + -- INT (IM 2) + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 1 => + LDZ <= '1'; + TStates <= "101"; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1101"; + when 2 => + TStates <= "100"; + Write <= '1'; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1100"; + when 3 => + TStates <= "100"; + Write <= '1'; + when 4 => + Inc_PC <= '1'; + LDZ <= '1'; + when 5 => + Jump <= '1'; + when others => null; + end case; + else + -- NOP + end if; + when "01110110" => + -- HALT + Halt <= '1'; + when "11110011" => + -- DI + SetDI <= '1'; + when "11111011" => + -- EI + SetEI <= '1'; + +-- 16 BIT ARITHMETIC GROUP + when "00001001"|"00011001"|"00101001"|"00111001" => + -- ADD HL,ss + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + NoRead <= '1'; + ALU_Op <= "0000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusA_To(2 downto 0) <= "101"; + case to_integer(unsigned(IR(5 downto 4))) is + when 0|1|2 => + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + Set_BusB_To(0) <= '1'; + when others => + Set_BusB_To <= "1000"; + end case; + TStates <= "100"; + Arith16 <= '1'; + when 3 => + NoRead <= '1'; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + ALU_Op <= "0001"; + Set_BusA_To(2 downto 0) <= "100"; + case to_integer(unsigned(IR(5 downto 4))) is + when 0|1|2 => + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + when others => + Set_BusB_To <= "1001"; + end case; + Arith16 <= '1'; + when others => + end case; + when "00000011"|"00010011"|"00100011"|"00110011" => + -- INC ss + TStates <= "110"; + IncDec_16(3 downto 2) <= "01"; + IncDec_16(1 downto 0) <= DPair; + when "00001011"|"00011011"|"00101011"|"00111011" => + -- DEC ss + TStates <= "110"; + IncDec_16(3 downto 2) <= "11"; + IncDec_16(1 downto 0) <= DPair; + +-- ROTATE AND SHIFT GROUP + when "00000111" + -- RLCA + |"00010111" + -- RLA + |"00001111" + -- RRCA + |"00011111" => + -- RRA + Set_BusA_To(2 downto 0) <= "111"; + ALU_Op <= "1000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + +-- JUMP GROUP + when "11000011" => + -- JP nn + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Inc_PC <= '1'; + Jump <= '1'; + when others => null; + end case; + when "11000010"|"11001010"|"11010010"|"11011010"|"11100010"|"11101010"|"11110010"|"11111010" => + if IR(5) = '1' and Mode = 3 then + case IRB(4 downto 3) is + when "00" => + -- LD ($FF00+C),A + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + Set_BusB_To <= "0111"; + when 2 => + Write <= '1'; + IORQ <= '1'; + when others => + end case; + when "01" => + -- LD (nn),A + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + Set_BusB_To <= "0111"; + when 4 => + Write <= '1'; + when others => null; + end case; + when "10" => + -- LD A,($FF00+C) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + when 2 => + Read_To_Acc <= '1'; + IORQ <= '1'; + when others => + end case; + when "11" => + -- LD A,(nn) + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + when 4 => + Read_To_Acc <= '1'; + when others => null; + end case; + end case; + else + -- JP cc,nn + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Inc_PC <= '1'; + if is_cc_true(F, to_bitvector(IR(5 downto 3))) then + Jump <= '1'; + end if; + when others => null; + end case; + end if; + when "00011000" => + if Mode /= 2 then + -- JR e + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + when 3 => + NoRead <= '1'; + JumpE <= '1'; + TStates <= "101"; + when others => null; + end case; + end if; + when "00111000" => + if Mode /= 2 then + -- JR C,e + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + if F(Flag_C) = '0' then + MCycles <= "010"; + end if; + when 3 => + NoRead <= '1'; + JumpE <= '1'; + TStates <= "101"; + when others => null; + end case; + end if; + when "00110000" => + if Mode /= 2 then + -- JR NC,e + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + if F(Flag_C) = '1' then + MCycles <= "010"; + end if; + when 3 => + NoRead <= '1'; + JumpE <= '1'; + TStates <= "101"; + when others => null; + end case; + end if; + when "00101000" => + if Mode /= 2 then + -- JR Z,e + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + if F(Flag_Z) = '0' then + MCycles <= "010"; + end if; + when 3 => + NoRead <= '1'; + JumpE <= '1'; + TStates <= "101"; + when others => null; + end case; + end if; + when "00100000" => + if Mode /= 2 then + -- JR NZ,e + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + if F(Flag_Z) = '1' then + MCycles <= "010"; + end if; + when 3 => + NoRead <= '1'; + JumpE <= '1'; + TStates <= "101"; + when others => null; + end case; + end if; + when "11101001" => + -- JP (HL) + JumpXY <= '1'; + when "00010000" => + if Mode = 3 then + I_DJNZ <= '1'; + elsif Mode < 2 then + -- DJNZ,e + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + TStates <= "101"; + I_DJNZ <= '1'; + Set_BusB_To <= "1010"; + Set_BusA_To(2 downto 0) <= "000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + ALU_Op <= "0010"; + when 2 => + I_DJNZ <= '1'; + Inc_PC <= '1'; + when 3 => + NoRead <= '1'; + JumpE <= '1'; + TStates <= "101"; + when others => null; + end case; + end if; + +-- CALL AND RETURN GROUP + when "11001101" => + -- CALL nn + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + IncDec_16 <= "1111"; + Inc_PC <= '1'; + TStates <= "100"; + Set_Addr_To <= aSP; + LDW <= '1'; + Set_BusB_To <= "1101"; + when 4 => + Write <= '1'; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1100"; + when 5 => + Write <= '1'; + Call <= '1'; + when others => null; + end case; + when "11000100"|"11001100"|"11010100"|"11011100"|"11100100"|"11101100"|"11110100"|"11111100" => + if IR(5) = '0' or Mode /= 3 then + -- CALL cc,nn + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Inc_PC <= '1'; + LDW <= '1'; + if is_cc_true(F, to_bitvector(IR(5 downto 3))) then + IncDec_16 <= "1111"; + Set_Addr_TO <= aSP; + TStates <= "100"; + Set_BusB_To <= "1101"; + else + MCycles <= "011"; + end if; + when 4 => + Write <= '1'; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1100"; + when 5 => + Write <= '1'; + Call <= '1'; + when others => null; + end case; + end if; + when "11001001" => + -- RET + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + TStates <= "101"; + Set_Addr_TO <= aSP; + when 2 => + IncDec_16 <= "0111"; + Set_Addr_To <= aSP; + LDZ <= '1'; + when 3 => + Jump <= '1'; + IncDec_16 <= "0111"; + when others => null; + end case; + when "11000000"|"11001000"|"11010000"|"11011000"|"11100000"|"11101000"|"11110000"|"11111000" => + if IR(5) = '1' and Mode = 3 then + case IRB(4 downto 3) is + when "00" => + -- LD ($FF00+nn),A + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Set_Addr_To <= aIOA; + Set_BusB_To <= "0111"; + when 3 => + Write <= '1'; + when others => null; + end case; + when "01" => + -- ADD SP,n + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + ALU_Op <= "0000"; + Inc_PC <= '1'; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusA_To <= "1000"; + Set_BusB_To <= "0110"; + when 3 => + NoRead <= '1'; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + ALU_Op <= "0001"; + Set_BusA_To <= "1001"; + Set_BusB_To <= "1110"; -- Incorrect unsigned !!!!!!!!!!!!!!!!!!!!! + when others => + end case; + when "10" => + -- LD A,($FF00+nn) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Set_Addr_To <= aIOA; + when 3 => + Read_To_Acc <= '1'; + when others => null; + end case; + when "11" => + -- LD HL,SP+n -- Not correct !!!!!!!!!!!!!!!!!!! + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + LDW <= '1'; + when 4 => + Set_BusA_To(2 downto 0) <= "101"; -- L + Read_To_Reg <= '1'; + Inc_WZ <= '1'; + Set_Addr_To <= aZI; + when 5 => + Set_BusA_To(2 downto 0) <= "100"; -- H + Read_To_Reg <= '1'; + when others => null; + end case; + end case; + else + -- RET cc + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + if is_cc_true(F, to_bitvector(IR(5 downto 3))) then + Set_Addr_TO <= aSP; + else + MCycles <= "001"; + end if; + TStates <= "101"; + when 2 => + IncDec_16 <= "0111"; + Set_Addr_To <= aSP; + LDZ <= '1'; + when 3 => + Jump <= '1'; + IncDec_16 <= "0111"; + when others => null; + end case; + end if; + when "11000111"|"11001111"|"11010111"|"11011111"|"11100111"|"11101111"|"11110111"|"11111111" => + -- RST p + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + TStates <= "101"; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1101"; + when 2 => + Write <= '1'; + IncDec_16 <= "1111"; + Set_Addr_To <= aSP; + Set_BusB_To <= "1100"; + when 3 => + Write <= '1'; + RstP <= '1'; + when others => null; + end case; + +-- INPUT AND OUTPUT GROUP + when "11011011" => + if Mode /= 3 then + -- IN A,(n) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Set_Addr_To <= aIOA; + when 3 => + Read_To_Acc <= '1'; + IORQ <= '1'; + when others => null; + end case; + end if; + when "11010011" => + if Mode /= 3 then + -- OUT (n),A + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + Set_Addr_To <= aIOA; + Set_BusB_To <= "0111"; + when 3 => + Write <= '1'; + IORQ <= '1'; + when others => null; + end case; + end if; + +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ +-- MULTIBYTE INSTRUCTIONS +------------------------------------------------------------------------------ +------------------------------------------------------------------------------ + + when "11001011" => + if Mode /= 2 then + Prefix <= "01"; + end if; + + when "11101101" => + if Mode < 2 then + Prefix <= "10"; + end if; + + when "11011101"|"11111101" => + if Mode < 2 then + Prefix <= "11"; + end if; + + end case; + + when "01" => + +------------------------------------------------------------------------------ +-- +-- CB prefixed instructions +-- +------------------------------------------------------------------------------ + + Set_BusA_To(2 downto 0) <= IR(2 downto 0); + Set_BusB_To(2 downto 0) <= IR(2 downto 0); + + case IRB is + when "00000000"|"00000001"|"00000010"|"00000011"|"00000100"|"00000101"|"00000111" + |"00010000"|"00010001"|"00010010"|"00010011"|"00010100"|"00010101"|"00010111" + |"00001000"|"00001001"|"00001010"|"00001011"|"00001100"|"00001101"|"00001111" + |"00011000"|"00011001"|"00011010"|"00011011"|"00011100"|"00011101"|"00011111" + |"00100000"|"00100001"|"00100010"|"00100011"|"00100100"|"00100101"|"00100111" + |"00101000"|"00101001"|"00101010"|"00101011"|"00101100"|"00101101"|"00101111" + |"00110000"|"00110001"|"00110010"|"00110011"|"00110100"|"00110101"|"00110111" + |"00111000"|"00111001"|"00111010"|"00111011"|"00111100"|"00111101"|"00111111" => + -- RLC r + -- RL r + -- RRC r + -- RR r + -- SLA r + -- SRA r + -- SRL r + -- SLL r (Undocumented) / SWAP r + if MCycle = "001" then + ALU_Op <= "1000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + end if; + when "00000110"|"00010110"|"00001110"|"00011110"|"00101110"|"00111110"|"00100110"|"00110110" => + -- RLC (HL) + -- RL (HL) + -- RRC (HL) + -- RR (HL) + -- SRA (HL) + -- SRL (HL) + -- SLA (HL) + -- SLL (HL) (Undocumented) / SWAP (HL) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 | 7 => + Set_Addr_To <= aXY; + when 2 => + ALU_Op <= "1000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_Addr_To <= aXY; + TStates <= "100"; + when 3 => + Write <= '1'; + when others => + end case; + when "01000000"|"01000001"|"01000010"|"01000011"|"01000100"|"01000101"|"01000111" + |"01001000"|"01001001"|"01001010"|"01001011"|"01001100"|"01001101"|"01001111" + |"01010000"|"01010001"|"01010010"|"01010011"|"01010100"|"01010101"|"01010111" + |"01011000"|"01011001"|"01011010"|"01011011"|"01011100"|"01011101"|"01011111" + |"01100000"|"01100001"|"01100010"|"01100011"|"01100100"|"01100101"|"01100111" + |"01101000"|"01101001"|"01101010"|"01101011"|"01101100"|"01101101"|"01101111" + |"01110000"|"01110001"|"01110010"|"01110011"|"01110100"|"01110101"|"01110111" + |"01111000"|"01111001"|"01111010"|"01111011"|"01111100"|"01111101"|"01111111" => + -- BIT b,r + if MCycle = "001" then + Set_BusB_To(2 downto 0) <= IR(2 downto 0); + ALU_Op <= "1001"; + end if; + when "01000110"|"01001110"|"01010110"|"01011110"|"01100110"|"01101110"|"01110110"|"01111110" => + -- BIT b,(HL) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 | 7=> + Set_Addr_To <= aXY; + when 2 => + ALU_Op <= "1001"; + TStates <= "100"; + when others => null; + end case; + when "11000000"|"11000001"|"11000010"|"11000011"|"11000100"|"11000101"|"11000111" + |"11001000"|"11001001"|"11001010"|"11001011"|"11001100"|"11001101"|"11001111" + |"11010000"|"11010001"|"11010010"|"11010011"|"11010100"|"11010101"|"11010111" + |"11011000"|"11011001"|"11011010"|"11011011"|"11011100"|"11011101"|"11011111" + |"11100000"|"11100001"|"11100010"|"11100011"|"11100100"|"11100101"|"11100111" + |"11101000"|"11101001"|"11101010"|"11101011"|"11101100"|"11101101"|"11101111" + |"11110000"|"11110001"|"11110010"|"11110011"|"11110100"|"11110101"|"11110111" + |"11111000"|"11111001"|"11111010"|"11111011"|"11111100"|"11111101"|"11111111" => + -- SET b,r + if MCycle = "001" then + ALU_Op <= "1010"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + end if; + when "11000110"|"11001110"|"11010110"|"11011110"|"11100110"|"11101110"|"11110110"|"11111110" => + -- SET b,(HL) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 | 7=> + Set_Addr_To <= aXY; + when 2 => + ALU_Op <= "1010"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_Addr_To <= aXY; + TStates <= "100"; + when 3 => + Write <= '1'; + when others => null; + end case; + when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111" + |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001111" + |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010111" + |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011111" + |"10100000"|"10100001"|"10100010"|"10100011"|"10100100"|"10100101"|"10100111" + |"10101000"|"10101001"|"10101010"|"10101011"|"10101100"|"10101101"|"10101111" + |"10110000"|"10110001"|"10110010"|"10110011"|"10110100"|"10110101"|"10110111" + |"10111000"|"10111001"|"10111010"|"10111011"|"10111100"|"10111101"|"10111111" => + -- RES b,r + if MCycle = "001" then + ALU_Op <= "1011"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + end if; + when "10000110"|"10001110"|"10010110"|"10011110"|"10100110"|"10101110"|"10110110"|"10111110" => + -- RES b,(HL) + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 | 7 => + Set_Addr_To <= aXY; + when 2 => + ALU_Op <= "1011"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_Addr_To <= aXY; + TStates <= "100"; + when 3 => + Write <= '1'; + when others => null; + end case; + end case; + + when others => + +------------------------------------------------------------------------------ +-- +-- ED prefixed instructions +-- +------------------------------------------------------------------------------ + + case IRB is + when "00000000"|"00000001"|"00000010"|"00000011"|"00000100"|"00000101"|"00000110"|"00000111" + |"00001000"|"00001001"|"00001010"|"00001011"|"00001100"|"00001101"|"00001110"|"00001111" + |"00010000"|"00010001"|"00010010"|"00010011"|"00010100"|"00010101"|"00010110"|"00010111" + |"00011000"|"00011001"|"00011010"|"00011011"|"00011100"|"00011101"|"00011110"|"00011111" + |"00100000"|"00100001"|"00100010"|"00100011"|"00100100"|"00100101"|"00100110"|"00100111" + |"00101000"|"00101001"|"00101010"|"00101011"|"00101100"|"00101101"|"00101110"|"00101111" + |"00110000"|"00110001"|"00110010"|"00110011"|"00110100"|"00110101"|"00110110"|"00110111" + |"00111000"|"00111001"|"00111010"|"00111011"|"00111100"|"00111101"|"00111110"|"00111111" + + + |"10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000110"|"10000111" + |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001110"|"10001111" + |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010110"|"10010111" + |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011110"|"10011111" + | "10100100"|"10100101"|"10100110"|"10100111" + | "10101100"|"10101101"|"10101110"|"10101111" + | "10110100"|"10110101"|"10110110"|"10110111" + | "10111100"|"10111101"|"10111110"|"10111111" + |"11000000"|"11000001"|"11000010"|"11000011"|"11000100"|"11000101"|"11000110"|"11000111" + |"11001000"|"11001001"|"11001010"|"11001011"|"11001100"|"11001101"|"11001110"|"11001111" + |"11010000"|"11010001"|"11010010"|"11010011"|"11010100"|"11010101"|"11010110"|"11010111" + |"11011000"|"11011001"|"11011010"|"11011011"|"11011100"|"11011101"|"11011110"|"11011111" + |"11100000"|"11100001"|"11100010"|"11100011"|"11100100"|"11100101"|"11100110"|"11100111" + |"11101000"|"11101001"|"11101010"|"11101011"|"11101100"|"11101101"|"11101110"|"11101111" + |"11110000"|"11110001"|"11110010"|"11110011"|"11110100"|"11110101"|"11110110"|"11110111" + |"11111000"|"11111001"|"11111010"|"11111011"|"11111100"|"11111101"|"11111110"|"11111111" => + null; -- NOP, undocumented + when "01111110"|"01111111" => + -- NOP, undocumented + null; +-- 8 BIT LOAD GROUP + when "01010111" => + -- LD A,I + Special_LD <= "100"; + TStates <= "101"; + when "01011111" => + -- LD A,R + Special_LD <= "101"; + TStates <= "101"; + when "01000111" => + -- LD I,A + Special_LD <= "110"; + TStates <= "101"; + when "01001111" => + -- LD R,A + Special_LD <= "111"; + TStates <= "101"; +-- 16 BIT LOAD GROUP + when "01001011"|"01011011"|"01101011"|"01111011" => + -- LD dd,(nn) + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + LDW <= '1'; + when 4 => + Read_To_Reg <= '1'; + if IR(5 downto 4) = "11" then + Set_BusA_To <= "1000"; + else + Set_BusA_To(2 downto 1) <= IR(5 downto 4); + Set_BusA_To(0) <= '1'; + end if; + Inc_WZ <= '1'; + Set_Addr_To <= aZI; + when 5 => + Read_To_Reg <= '1'; + if IR(5 downto 4) = "11" then + Set_BusA_To <= "1001"; + else + Set_BusA_To(2 downto 1) <= IR(5 downto 4); + Set_BusA_To(0) <= '0'; + end if; + when others => null; + end case; + when "01000011"|"01010011"|"01100011"|"01110011" => + -- LD (nn),dd + MCycles <= "101"; + case to_integer(unsigned(MCycle)) is + when 2 => + Inc_PC <= '1'; + LDZ <= '1'; + when 3 => + Set_Addr_To <= aZI; + Inc_PC <= '1'; + LDW <= '1'; + if IR(5 downto 4) = "11" then + Set_BusB_To <= "1000"; + else + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + Set_BusB_To(0) <= '1'; + Set_BusB_To(3) <= '0'; + end if; + when 4 => + Inc_WZ <= '1'; + Set_Addr_To <= aZI; + Write <= '1'; + if IR(5 downto 4) = "11" then + Set_BusB_To <= "1001"; + else + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + Set_BusB_To(0) <= '0'; + Set_BusB_To(3) <= '0'; + end if; + when 5 => + Write <= '1'; + when others => null; + end case; + when "10100000" | "10101000" | "10110000" | "10111000" => + -- LDI, LDD, LDIR, LDDR + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + IncDec_16 <= "1100"; -- BC + when 2 => + Set_BusB_To <= "0110"; + Set_BusA_To(2 downto 0) <= "111"; + ALU_Op <= "0000"; + Set_Addr_To <= aDE; + if IR(3) = '0' then + IncDec_16 <= "0110"; -- IX + else + IncDec_16 <= "1110"; + end if; + when 3 => + I_BT <= '1'; + TStates <= "101"; + Write <= '1'; + if IR(3) = '0' then + IncDec_16 <= "0101"; -- DE + else + IncDec_16 <= "1101"; + end if; + when 4 => + NoRead <= '1'; + TStates <= "101"; + when others => null; + end case; + when "10100001" | "10101001" | "10110001" | "10111001" => + -- CPI, CPD, CPIR, CPDR + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aXY; + IncDec_16 <= "1100"; -- BC + when 2 => + Set_BusB_To <= "0110"; + Set_BusA_To(2 downto 0) <= "111"; + ALU_Op <= "0111"; + Save_ALU <= '1'; + PreserveC <= '1'; + if IR(3) = '0' then + IncDec_16 <= "0110"; + else + IncDec_16 <= "1110"; + end if; + when 3 => + NoRead <= '1'; + I_BC <= '1'; + TStates <= "101"; + when 4 => + NoRead <= '1'; + TStates <= "101"; + when others => null; + end case; + when "01000100"|"01001100"|"01010100"|"01011100"|"01100100"|"01101100"|"01110100"|"01111100" => + -- NEG + Alu_OP <= "0010"; + Set_BusB_To <= "0111"; + Set_BusA_To <= "1010"; + Read_To_Acc <= '1'; + Save_ALU <= '1'; + when "01000110"|"01001110"|"01100110"|"01101110" => + -- IM 0 + IMode <= "00"; + when "01010110"|"01110110" => + -- IM 1 + IMode <= "01"; + when "01011110"|"01110111" => + -- IM 2 + IMode <= "10"; +-- 16 bit arithmetic + when "01001010"|"01011010"|"01101010"|"01111010" => + -- ADC HL,ss + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + NoRead <= '1'; + ALU_Op <= "0001"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusA_To(2 downto 0) <= "101"; + case to_integer(unsigned(IR(5 downto 4))) is + when 0|1|2 => + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + Set_BusB_To(0) <= '1'; + when others => + Set_BusB_To <= "1000"; + end case; + TStates <= "100"; + when 3 => + NoRead <= '1'; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + ALU_Op <= "0001"; + Set_BusA_To(2 downto 0) <= "100"; + case to_integer(unsigned(IR(5 downto 4))) is + when 0|1|2 => + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + Set_BusB_To(0) <= '0'; + when others => + Set_BusB_To <= "1001"; + end case; + when others => + end case; + when "01000010"|"01010010"|"01100010"|"01110010" => + -- SBC HL,ss + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 2 => + NoRead <= '1'; + ALU_Op <= "0011"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusA_To(2 downto 0) <= "101"; + case to_integer(unsigned(IR(5 downto 4))) is + when 0|1|2 => + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + Set_BusB_To(0) <= '1'; + when others => + Set_BusB_To <= "1000"; + end case; + TStates <= "100"; + when 3 => + NoRead <= '1'; + ALU_Op <= "0011"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + Set_BusA_To(2 downto 0) <= "100"; + case to_integer(unsigned(IR(5 downto 4))) is + when 0|1|2 => + Set_BusB_To(2 downto 1) <= IR(5 downto 4); + when others => + Set_BusB_To <= "1001"; + end case; + when others => + end case; + when "01101111" => + -- RLD + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 2 => + NoRead <= '1'; + Set_Addr_To <= aXY; + when 3 => + Read_To_Reg <= '1'; + Set_BusB_To(2 downto 0) <= "110"; + Set_BusA_To(2 downto 0) <= "111"; + ALU_Op <= "1101"; + TStates <= "100"; + Set_Addr_To <= aXY; + Save_ALU <= '1'; + when 4 => + I_RLD <= '1'; + Write <= '1'; + when others => + end case; + when "01100111" => + -- RRD + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 2 => + Set_Addr_To <= aXY; + when 3 => + Read_To_Reg <= '1'; + Set_BusB_To(2 downto 0) <= "110"; + Set_BusA_To(2 downto 0) <= "111"; + ALU_Op <= "1110"; + TStates <= "100"; + Set_Addr_To <= aXY; + Save_ALU <= '1'; + when 4 => + I_RRD <= '1'; + Write <= '1'; + when others => + end case; + when "01000101"|"01001101"|"01010101"|"01011101"|"01100101"|"01101101"|"01110101"|"01111101" => + -- RETI, RETN + MCycles <= "011"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_TO <= aSP; + when 2 => + IncDec_16 <= "0111"; + Set_Addr_To <= aSP; + LDZ <= '1'; + when 3 => + Jump <= '1'; + IncDec_16 <= "0111"; + I_RETN <= '1'; + when others => null; + end case; + when "01000000"|"01001000"|"01010000"|"01011000"|"01100000"|"01101000"|"01110000"|"01111000" => + -- IN r,(C) + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + when 2 => + IORQ <= '1'; + if IR(5 downto 3) /= "110" then + Read_To_Reg <= '1'; + Set_BusA_To(2 downto 0) <= IR(5 downto 3); + end if; + I_INRC <= '1'; + when others => + end case; + when "01000001"|"01001001"|"01010001"|"01011001"|"01100001"|"01101001"|"01110001"|"01111001" => + -- OUT (C),r + -- OUT (C),0 + MCycles <= "010"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + Set_BusB_To(2 downto 0) <= IR(5 downto 3); + if IR(5 downto 3) = "110" then + Set_BusB_To(3) <= '1'; + end if; + when 2 => + Write <= '1'; + IORQ <= '1'; + when others => + end case; + when "10100010" | "10101010" | "10110010" | "10111010" => + -- INI, IND, INIR, INDR + -- note B is decremented AFTER being put on the bus + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 1 => + Set_Addr_To <= aBC; + Set_BusB_To <= "1010"; + Set_BusA_To <= "0000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + ALU_Op <= "0010"; + when 2 => + IORQ <= '1'; + Set_BusB_To <= "0110"; + Set_Addr_To <= aXY; + when 3 => + if IR(3) = '0' then + --IncDec_16 <= "0010"; + IncDec_16 <= "0110"; + else + --IncDec_16 <= "1010"; + IncDec_16 <= "1110"; + end if; + TStates <= "100"; + Write <= '1'; + I_BTR <= '1'; + when 4 => + NoRead <= '1'; + TStates <= "101"; + when others => null; + end case; + when "10100011" | "10101011" | "10110011" | "10111011" => + -- OUTI, OUTD, OTIR, OTDR + -- note B is decremented BEFORE being put on the bus. + -- mikej fix for hl inc + MCycles <= "100"; + case to_integer(unsigned(MCycle)) is + when 1 => + TStates <= "101"; + Set_Addr_To <= aXY; + Set_BusB_To <= "1010"; + Set_BusA_To <= "0000"; + Read_To_Reg <= '1'; + Save_ALU <= '1'; + ALU_Op <= "0010"; + when 2 => + Set_BusB_To <= "0110"; + Set_Addr_To <= aBC; + when 3 => + if IR(3) = '0' then + IncDec_16 <= "0110"; -- mikej + else + IncDec_16 <= "1110"; -- mikej + end if; + IORQ <= '1'; + Write <= '1'; + I_BTR <= '1'; + when 4 => + NoRead <= '1'; + TStates <= "101"; + when others => null; + end case; + end case; + + end case; + + if Mode = 1 then + if MCycle = "001" then +-- TStates <= "100"; + else + TStates <= "011"; + end if; + end if; + + if Mode = 3 then + if MCycle = "001" then +-- TStates <= "100"; + else + TStates <= "100"; + end if; + end if; + + if Mode < 2 then + if MCycle = "110" then + Inc_PC <= '1'; + if Mode = 1 then + Set_Addr_To <= aXY; + TStates <= "100"; + Set_BusB_To(2 downto 0) <= SSS; + Set_BusB_To(3) <= '0'; + end if; + if IRB = "00110110" or IRB = "11001011" then + Set_Addr_To <= aNone; + end if; + end if; + if MCycle = "111" then + if Mode = 0 then + TStates <= "101"; + end if; + if ISet /= "01" then + Set_Addr_To <= aXY; + end if; + Set_BusB_To(2 downto 0) <= SSS; + Set_BusB_To(3) <= '0'; + if IRB = "00110110" or ISet = "01" then + -- LD (HL),n + Inc_PC <= '1'; + else + NoRead <= '1'; + end if; + end if; + end if; + + end process; + +end; diff --git a/Bally - Astrocade_MiST/rtl/T80/T80_Pack.vhd b/Bally - Astrocade_MiST/rtl/T80/T80_Pack.vhd new file mode 100644 index 00000000..42cf6105 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/T80/T80_Pack.vhd @@ -0,0 +1,217 @@ +-- **** +-- T80(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 started tidyup +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- Z80 compatible microprocessor core +-- +-- Version : 0242 +-- +-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t80/ +-- +-- Limitations : +-- +-- File history : +-- + +library IEEE; +use IEEE.std_logic_1164.all; + +package T80_Pack is + + component T80 + generic( + Mode : integer := 0; -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB + IOWait : integer := 0; -- 1 => Single cycle I/O, 1 => Std I/O cycle + Flag_C : integer := 0; + Flag_N : integer := 1; + Flag_P : integer := 2; + Flag_X : integer := 3; + Flag_H : integer := 4; + Flag_Y : integer := 5; + Flag_Z : integer := 6; + Flag_S : integer := 7 + ); + port( + RESET_n : in std_logic; + CLK_n : in std_logic; + CEN : in std_logic; + WAIT_n : in std_logic; + INT_n : in std_logic; + NMI_n : in std_logic; + BUSRQ_n : in std_logic; + M1_n : out std_logic; + IORQ : out std_logic; + NoRead : out std_logic; + Write : out std_logic; + RFSH_n : out std_logic; + HALT_n : out std_logic; + BUSAK_n : out std_logic; + A : out std_logic_vector(15 downto 0); + DInst : in std_logic_vector(7 downto 0); + DI : in std_logic_vector(7 downto 0); + DO : out std_logic_vector(7 downto 0); + MC : out std_logic_vector(2 downto 0); + TS : out std_logic_vector(2 downto 0); + IntCycle_n : out std_logic; + IntE : out std_logic; + Stop : out std_logic + ); + end component; + + component T80_Reg + port( + Clk : in std_logic; + CEN : in std_logic; + WEH : in std_logic; + WEL : in std_logic; + AddrA : in std_logic_vector(2 downto 0); + AddrB : in std_logic_vector(2 downto 0); + AddrC : in std_logic_vector(2 downto 0); + DIH : in std_logic_vector(7 downto 0); + DIL : in std_logic_vector(7 downto 0); + DOAH : out std_logic_vector(7 downto 0); + DOAL : out std_logic_vector(7 downto 0); + DOBH : out std_logic_vector(7 downto 0); + DOBL : out std_logic_vector(7 downto 0); + DOCH : out std_logic_vector(7 downto 0); + DOCL : out std_logic_vector(7 downto 0) + ); + end component; + + component T80_MCode + generic( + Mode : integer := 0; + Flag_C : integer := 0; + Flag_N : integer := 1; + Flag_P : integer := 2; + Flag_X : integer := 3; + Flag_H : integer := 4; + Flag_Y : integer := 5; + Flag_Z : integer := 6; + Flag_S : integer := 7 + ); + port( + IR : in std_logic_vector(7 downto 0); + ISet : in std_logic_vector(1 downto 0); + MCycle : in std_logic_vector(2 downto 0); + F : in std_logic_vector(7 downto 0); + NMICycle : in std_logic; + IntCycle : in std_logic; + MCycles : out std_logic_vector(2 downto 0); + TStates : out std_logic_vector(2 downto 0); + Prefix : out std_logic_vector(1 downto 0); -- None,BC,ED,DD/FD + Inc_PC : out std_logic; + Inc_WZ : out std_logic; + IncDec_16 : out std_logic_vector(3 downto 0); -- BC,DE,HL,SP 0 is inc + Read_To_Reg : out std_logic; + Read_To_Acc : out std_logic; + Set_BusA_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI/DB,A,SP(L),SP(M),0,F + Set_BusB_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI,A,SP(L),SP(M),1,F,PC(L),PC(M),0 + ALU_Op : out std_logic_vector(3 downto 0); + -- ADD, ADC, SUB, SBC, AND, XOR, OR, CP, ROT, BIT, SET, RES, DAA, RLD, RRD, None + Save_ALU : out std_logic; + PreserveC : out std_logic; + Arith16 : out std_logic; + Set_Addr_To : out std_logic_vector(2 downto 0); -- aNone,aXY,aIOA,aSP,aBC,aDE,aZI + IORQ : out std_logic; + Jump : out std_logic; + JumpE : out std_logic; + JumpXY : out std_logic; + Call : out std_logic; + RstP : out std_logic; + LDZ : out std_logic; + LDW : out std_logic; + LDSPHL : out std_logic; + Special_LD : out std_logic_vector(2 downto 0); -- A,I;A,R;I,A;R,A;None + ExchangeDH : out std_logic; + ExchangeRp : out std_logic; + ExchangeAF : out std_logic; + ExchangeRS : out std_logic; + I_DJNZ : out std_logic; + I_CPL : out std_logic; + I_CCF : out std_logic; + I_SCF : out std_logic; + I_RETN : out std_logic; + I_BT : out std_logic; + I_BC : out std_logic; + I_BTR : out std_logic; + I_RLD : out std_logic; + I_RRD : out std_logic; + I_INRC : out std_logic; + SetDI : out std_logic; + SetEI : out std_logic; + IMode : out std_logic_vector(1 downto 0); + Halt : out std_logic; + NoRead : out std_logic; + Write : out std_logic + ); + end component; + + component T80_ALU + generic( + Mode : integer := 0; + Flag_C : integer := 0; + Flag_N : integer := 1; + Flag_P : integer := 2; + Flag_X : integer := 3; + Flag_H : integer := 4; + Flag_Y : integer := 5; + Flag_Z : integer := 6; + Flag_S : integer := 7 + ); + port( + Arith16 : in std_logic; + Z16 : in std_logic; + ALU_Op : in std_logic_vector(3 downto 0); + IR : in std_logic_vector(5 downto 0); + ISet : in std_logic_vector(1 downto 0); + BusA : in std_logic_vector(7 downto 0); + BusB : in std_logic_vector(7 downto 0); + F_In : in std_logic_vector(7 downto 0); + Q : out std_logic_vector(7 downto 0); + F_Out : out std_logic_vector(7 downto 0) + ); + end component; + +end; diff --git a/Bally - Astrocade_MiST/rtl/T80/T80_Reg.vhd b/Bally - Astrocade_MiST/rtl/T80/T80_Reg.vhd new file mode 100644 index 00000000..1c0f2638 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/T80/T80_Reg.vhd @@ -0,0 +1,114 @@ +-- **** +-- T80(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 started tidyup +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- +-- T80 Registers, technology independent +-- +-- Version : 0244 +-- +-- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t51/ +-- +-- Limitations : +-- +-- File history : +-- +-- 0242 : Initial release +-- +-- 0244 : Changed to single register file +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity T80_Reg is + port( + Clk : in std_logic; + CEN : in std_logic; + WEH : in std_logic; + WEL : in std_logic; + AddrA : in std_logic_vector(2 downto 0); + AddrB : in std_logic_vector(2 downto 0); + AddrC : in std_logic_vector(2 downto 0); + DIH : in std_logic_vector(7 downto 0); + DIL : in std_logic_vector(7 downto 0); + DOAH : out std_logic_vector(7 downto 0); + DOAL : out std_logic_vector(7 downto 0); + DOBH : out std_logic_vector(7 downto 0); + DOBL : out std_logic_vector(7 downto 0); + DOCH : out std_logic_vector(7 downto 0); + DOCL : out std_logic_vector(7 downto 0) + ); +end T80_Reg; + +architecture rtl of T80_Reg is + + type Register_Image is array (natural range <>) of std_logic_vector(7 downto 0); + signal RegsH : Register_Image(0 to 7); + signal RegsL : Register_Image(0 to 7); + +begin + + process (Clk) + begin + if Clk'event and Clk = '1' then + if CEN = '1' then + if WEH = '1' then + RegsH(to_integer(unsigned(AddrA))) <= DIH; + end if; + if WEL = '1' then + RegsL(to_integer(unsigned(AddrA))) <= DIL; + end if; + end if; + end if; + end process; + + DOAH <= RegsH(to_integer(unsigned(AddrA))); + DOAL <= RegsL(to_integer(unsigned(AddrA))); + DOBH <= RegsH(to_integer(unsigned(AddrB))); + DOBL <= RegsL(to_integer(unsigned(AddrB))); + DOCH <= RegsH(to_integer(unsigned(AddrC))); + DOCL <= RegsL(to_integer(unsigned(AddrC))); + +end; diff --git a/Bally - Astrocade_MiST/rtl/T80/T80sed.vhd b/Bally - Astrocade_MiST/rtl/T80/T80sed.vhd new file mode 100644 index 00000000..0c28ec21 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/T80/T80sed.vhd @@ -0,0 +1,179 @@ +-- **** +-- T80(b) core. In an effort to merge and maintain bug fixes .... +-- +-- +-- Ver 300 started tidyup +-- MikeJ March 2005 +-- Latest version from www.fpgaarcade.com (original www.opencores.org) +-- +-- **** +-- ** CUSTOM 2 CLOCK MEMORY ACCESS FOR PACMAN, MIKEJ ** +-- +-- Z80 compatible microprocessor core, synchronous top level with clock enable +-- Different timing than the original z80 +-- Inputs needs to be synchronous and outputs may glitch +-- +-- Version : 0238 +-- +-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.opencores.org/cvsweb.shtml/t80/ +-- +-- Limitations : +-- +-- File history : +-- +-- 0235 : First release +-- +-- 0236 : Added T2Write generic +-- +-- 0237 : Fixed T2Write with wait state +-- +-- 0238 : Updated for T80 interface change +-- +-- 0242 : Updated for T80 interface change +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; +use work.T80_Pack.all; + +entity T80sed is + port( + RESET_n : in std_logic; + CLK_n : in std_logic; + CLKEN : in std_logic; + WAIT_n : in std_logic; + INT_n : in std_logic; + NMI_n : in std_logic; + BUSRQ_n : in std_logic; + M1_n : out std_logic; + MREQ_n : out std_logic; + IORQ_n : out std_logic; + RD_n : out std_logic; + WR_n : out std_logic; + RFSH_n : out std_logic; + HALT_n : out std_logic; + BUSAK_n : out std_logic; + A : out std_logic_vector(15 downto 0); + DI : in std_logic_vector(7 downto 0); + DO : out std_logic_vector(7 downto 0) + ); +end T80sed; + +architecture rtl of T80sed is + + signal IntCycle_n : std_logic; + signal NoRead : std_logic; + signal Write : std_logic; + signal IORQ : std_logic; + signal DI_Reg : std_logic_vector(7 downto 0); + signal MCycle : std_logic_vector(2 downto 0); + signal TState : std_logic_vector(2 downto 0); + +begin + + u0 : T80 + generic map( + Mode => 0, + IOWait => 1) + port map( + CEN => CLKEN, + M1_n => M1_n, + IORQ => IORQ, + NoRead => NoRead, + Write => Write, + RFSH_n => RFSH_n, + HALT_n => HALT_n, + WAIT_n => Wait_n, + INT_n => INT_n, + NMI_n => NMI_n, + RESET_n => RESET_n, + BUSRQ_n => BUSRQ_n, + BUSAK_n => BUSAK_n, + CLK_n => CLK_n, + A => A, + DInst => DI, + DI => DI_Reg, + DO => DO, + MC => MCycle, + TS => TState, + IntCycle_n => IntCycle_n); + + process (RESET_n, CLK_n) + begin + if RESET_n = '0' then + RD_n <= '1'; + WR_n <= '1'; + IORQ_n <= '1'; + MREQ_n <= '1'; + DI_Reg <= "00000000"; + elsif CLK_n'event and CLK_n = '1' then + if CLKEN = '1' then + RD_n <= '1'; + WR_n <= '1'; + IORQ_n <= '1'; + MREQ_n <= '1'; + if MCycle = "001" then + if TState = "001" or (TState = "010" and Wait_n = '0') then + RD_n <= not IntCycle_n; + MREQ_n <= not IntCycle_n; + IORQ_n <= IntCycle_n; + end if; + if TState = "011" then + MREQ_n <= '0'; + end if; + else + if (TState = "001" or TState = "010") and NoRead = '0' and Write = '0' then + RD_n <= '0'; + IORQ_n <= not IORQ; + MREQ_n <= IORQ; + end if; + if ((TState = "001") or (TState = "010")) and Write = '1' then + WR_n <= '0'; + IORQ_n <= not IORQ; + MREQ_n <= IORQ; + end if; + end if; + if TState = "010" and Wait_n = '1' then + DI_Reg <= DI; + end if; + end if; + end if; + end process; + +end; diff --git a/Bally - Astrocade_MiST/rtl/bally.vhd b/Bally - Astrocade_MiST/rtl/bally.vhd new file mode 100644 index 00000000..314778ea --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally.vhd @@ -0,0 +1,450 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY is + port ( + O_AUDIO : out std_logic_vector(7 downto 0); + + O_VIDEO_R : out std_logic_vector(3 downto 0); + O_VIDEO_G : out std_logic_vector(3 downto 0); + O_VIDEO_B : out std_logic_vector(3 downto 0); + + O_HSYNC : out std_logic; + O_VSYNC : out std_logic; + O_COMP_SYNC_L : out std_logic; + O_FPSYNC : out std_logic; + + -- cart slot + O_CAS_ADDR : out std_logic_vector(12 downto 0); + O_CAS_DATA : out std_logic_vector( 7 downto 0); + I_CAS_DATA : in std_logic_vector( 7 downto 0); + O_CAS_CS_L : out std_logic; + + -- exp slot (subset for now) + O_EXP_ADDR : out std_logic_vector(15 downto 0); + O_EXP_DATA : out std_logic_vector( 7 downto 0); + I_EXP_DATA : in std_logic_vector( 7 downto 0); + I_EXP_OE_L : in std_logic; -- expansion slot driving data bus + + O_EXP_M1_L : out std_logic; + O_EXP_MREQ_L : out std_logic; + O_EXP_IORQ_L : out std_logic; + O_EXP_WR_L : out std_logic; + O_EXP_RD_L : out std_logic; + -- + O_SWITCH_COL : out std_logic_vector(7 downto 0); + I_SWITCH_ROW : in std_logic_vector(7 downto 0); + -- + I_RESET_L : in std_logic; + ENA : in std_logic; + pix_ena : out std_logic; + CLK : in std_logic; + CLK7 : in std_logic + ); +end; + +architecture RTL of BALLY is + + -- signals + signal cpu_ena : std_logic; + signal cpu_ena_gated : std_logic; + -- + signal cpu_m1_l : std_logic; + signal cpu_mreq_l : std_logic; + signal cpu_iorq_l : std_logic; + signal cpu_rd_l : std_logic; + signal cpu_wr_l : std_logic; + signal cpu_rfsh_l : std_logic; + signal cpu_halt_l : std_logic; + signal cpu_wait_l : std_logic; + signal cpu_int_l : std_logic; + signal cpu_nmi_l : std_logic; + signal cpu_busrq_l : std_logic; + signal cpu_busak_l : std_logic; + signal cpu_addr : std_logic_vector(15 downto 0); + signal cpu_data_out : std_logic_vector(7 downto 0); + signal cpu_data_in : std_logic_vector(7 downto 0); + + signal mc1 : std_logic; + signal mc0 : std_logic; + --signal mx_bus : std_logic_vector(7 downto 0); -- cpu to customs + signal mx_addr : std_logic_vector(7 downto 0); -- customs to cpu + signal mx_addr_oe_l : std_logic; + signal mx_data : std_logic_vector(7 downto 0); -- customs to cpu + signal mx_data_oe_l : std_logic; + signal mx_io : std_logic_vector(7 downto 0); -- customs to cpu + signal mx_io_oe_l : std_logic; + + signal ma_bus : std_logic_vector(15 downto 0); + signal md_bus_out : std_logic_vector(7 downto 0); + signal md_bus_in : std_logic_vector(7 downto 0); + signal md_bus_in_x : std_logic_vector(7 downto 0); + signal daten_l : std_logic; + signal datwr : std_logic; + + signal horiz_dr : std_logic; + signal vert_dr : std_logic; + signal wrctl_l : std_logic; + signal ltchdo : std_logic; + -- + -- expansion + signal exp_buzoff_l : std_logic; + signal exp_sysen : std_logic; + signal exp_casen : std_logic; + + signal sys_cs_l : std_logic; + signal rom0_dout : std_logic_vector(7 downto 0); + signal rom1_dout : std_logic_vector(7 downto 0); + signal rom_dout : std_logic_vector(7 downto 0); + signal cas_cs_l : std_logic; + + signal video_r : std_logic_vector(3 downto 0); + signal video_g : std_logic_vector(3 downto 0); + signal video_b : std_logic_vector(3 downto 0); + signal hsync : std_logic; + signal vsync : std_logic; + signal fpsync : std_logic; +begin + -- + -- cpu + -- + -- doc + -- memory map + -- 0000 - 0fff os rom / magic ram + -- 1000 - 1fff os rom + -- 2000 - 3fff cas rom + -- 4000 - 4fff screen ram + + -- in hi res screen ram from 4000 - 7fff + -- magic ram 0000 - 3fff + + -- screen + -- low res 40 bytes / line (160 pixels, 2 bits per pixel) + -- vert res 102 lines + + -- high res 80 bytes (320 pixels) and 204 lines. + -- addr 0 top left. lsb 2 bits describe right hand pixel + + -- expansion sigs + exp_buzoff_l <= '1'; -- pull up + exp_sysen <= '1'; -- pull up + exp_casen <= '1'; -- pull up + + -- other cpu signals + cpu_busrq_l <= '1'; + cpu_nmi_l <= '1'; + + cpu_ena_gated <= ENA and cpu_ena; + u_cpu : entity work.T80sed + port map ( + RESET_n => I_RESET_L, + CLK_n => CLK7, + CLKEN => cpu_ena_gated, + WAIT_n => cpu_wait_l, + INT_n => cpu_int_l, + NMI_n => cpu_nmi_l, + BUSRQ_n => cpu_busrq_l, + M1_n => cpu_m1_l, + MREQ_n => cpu_mreq_l, + IORQ_n => cpu_iorq_l, + RD_n => cpu_rd_l, + WR_n => cpu_wr_l, + RFSH_n => cpu_rfsh_l, + HALT_n => cpu_halt_l, + BUSAK_n => cpu_busak_l, + A => cpu_addr, + DI => cpu_data_in, + DO => cpu_data_out + ); + -- + -- primary addr decode + -- + p_mem_decode_comb : process(cpu_rfsh_l, cpu_rd_l, cpu_mreq_l, cpu_addr, exp_sysen, exp_casen) + variable decode : std_logic; + begin + + sys_cs_l <= '1'; -- system rom + cas_cs_l <= '1'; -- game rom + + decode := '0'; + if (cpu_rd_l = '0') and (cpu_mreq_l = '0') and (cpu_addr(15 downto 14) = "00") then + decode := '1'; + end if; + + sys_cs_l <= not (decode and (not cpu_addr(13)) and exp_sysen); + cas_cs_l <= not (decode and ( cpu_addr(13)) and exp_casen); + end process; + + --p_microcycler : process(cpu_rfsh_l, mc0, mc1) + --variable sel : std_logic_vector(1 downto 0); + --begin + --sel := mc0 & mc1; + + --if (cpu_rfsh_l = '0') then + --mx_bus <= cpu_addr(7 downto 0); + --else + --mx_bus <= x"00"; + --case sel is + --when "00" => mx_bus <= cpu_addr( 7 downto 0); + --when "01" => mx_bus <= cpu_addr(15 downto 8); + --when "10" => mx_bus <= cpu_data_out(7 downto 0); + --when "11" => mx_bus <= x"00"; -- to cpu + --when others => null; + --end case; + ---- to cpu data drive when + ----rfsh_l = '1' and mc1 = '1', mc0 direction + --end if; + --end process; + + u_rom0 : entity work.sprom + generic map ( + init_file => ".\roms\bios3159_0.hex", + widthad_a => 12, + width_a => 8 + ) + port map ( + address => cpu_addr(11 downto 0), + clock => CLK7, + q => rom0_dout + ); + + u_rom1 : entity work.sprom + generic map ( + init_file => ".\roms\bios3159_1.hex", + widthad_a => 12, + width_a => 8 + ) + port map ( + address => cpu_addr(11 downto 0), + clock => CLK7, + q => rom1_dout + ); + + p_rom_mux : process(cpu_addr, rom0_dout, rom1_dout) + begin + if (cpu_addr(12) = '0') then + rom_dout <= rom0_dout; + else + rom_dout <= rom1_dout; + end if; + + end process; + + p_cpu_src_data_mux : process(rom_dout, sys_cs_l, I_CAS_DATA, cas_cs_l, I_EXP_OE_L, I_EXP_DATA, exp_buzoff_l, + mx_addr_oe_l, mx_addr, mx_data_oe_l, mx_data, mx_io_oe_l, mx_io) + begin + -- nasty mux + if (I_EXP_OE_L = '0') or (exp_buzoff_l = '0') then + cpu_data_in <= I_EXP_DATA; + elsif (sys_cs_l = '0') then + cpu_data_in <= rom_dout; + elsif (cas_cs_l = '0') then + cpu_data_in <= I_CAS_DATA; + elsif (mx_addr_oe_l = '0') then + cpu_data_in <= mx_addr; + elsif (mx_data_oe_l = '0') then + cpu_data_in <= mx_data; + elsif (mx_io_oe_l = '0') then + cpu_data_in <= mx_io; + else + cpu_data_in <= x"FF"; + end if; + end process; + + u_addr : entity work.BALLY_ADDR + port map ( + I_MXA => cpu_addr, + I_MXD => cpu_data_out, + O_MXD => mx_addr, + O_MXD_OE_L => mx_addr_oe_l, + + -- cpu control signals + I_RFSH_L => cpu_rfsh_l, + I_M1_L => cpu_m1_l, + I_RD_L => cpu_rd_l, + I_MREQ_L => cpu_mreq_l, + I_IORQ_L => cpu_iorq_l, + O_WAIT_L => cpu_wait_l, + O_INT_L => cpu_int_l, + + -- custom + I_HORIZ_DR => horiz_dr, + I_VERT_DR => vert_dr, + O_WRCTL_L => wrctl_l, + O_LTCHDO => ltchdo, + + -- dram address + O_MA => ma_bus, + O_RAS => open, + -- misc + I_LIGHT_PEN_L => '1', + + -- clks + I_CPU_ENA => cpu_ena, + ENA => ENA, + CLK => CLK7 + ); + + u_data : entity work.BALLY_DATA + port map ( + I_MXA => cpu_addr, + I_MXD => cpu_data_out, + O_MXD => mx_data, + O_MXD_OE_L => mx_data_oe_l, + + -- cpu control signals + I_M1_L => cpu_m1_l, + I_RD_L => cpu_rd_l, + I_MREQ_L => cpu_mreq_l, + I_IORQ_L => cpu_iorq_l, + + -- memory + O_DATEN_L => daten_l, + O_DATWR => datwr, -- makes dp ram timing easier + I_MDX => md_bus_in_x, + I_MD => md_bus_in, + O_MD => md_bus_out, + O_MD_OE_L => open, + -- custom + O_MC1 => mc1, + O_MC0 => mc0, + + O_HORIZ_DR => horiz_dr, + O_VERT_DR => vert_dr, + I_WRCTL_L => wrctl_l, + I_LTCHDO => ltchdo, + + I_SERIAL1 => '0', + I_SERIAL0 => '0', + + O_VIDEO_R => video_r, + O_VIDEO_G => video_g, + O_VIDEO_B => video_b, + O_HSYNC => hsync, + O_VSYNC => vsync, + O_FPSYNC => fpsync, + -- clks + O_CPU_ENA => cpu_ena, -- cpu clock ena + O_PIX_ENA => pix_ena, -- pixel clock ena + ENA => ENA, + CLK => CLK7 +-- CLK7 => CLK7 + ); + + u_io : entity work.BALLY_IO + port map ( + I_MXA => cpu_addr, + I_MXD => cpu_data_out, + O_MXD => mx_io, + O_MXD_OE_L => mx_io_oe_l, + + -- cpu control signals + I_M1_L => cpu_m1_l, + I_RD_L => cpu_rd_l, + I_IORQ_L => cpu_iorq_l, + I_RESET_L => I_RESET_L, + + -- no pots - student project ? :) + + -- switches + O_SWITCH => O_SWITCH_COL, + I_SWITCH => I_SWITCH_ROW, + -- audio + O_AUDIO => O_AUDIO, + + -- clks + I_CPU_ENA => cpu_ena, + ENA => ENA, + CLK => CLK7 + ); + + p_video_out : process + begin + wait until rising_edge(CLK7); + if (ENA = '1') then + O_HSYNC <= hsync; + O_VSYNC <= vsync; + O_COMP_SYNC_L <= (not vsync) and (not hsync); + + O_VIDEO_R <= video_r; + O_VIDEO_G <= video_g; + O_VIDEO_B <= video_b; + O_FPSYNC <= fpsync; + end if; + end process; + + u_rams : entity work.BALLY_RAMS + port map ( + ADDR => ma_bus, + DIN => md_bus_out, + DOUT => md_bus_in, + DOUTX => md_bus_in_x, + WE => datwr, + WE_ENA_L => daten_l, -- only used for write + ENA => ENA, + CLK => CLK7 + ); + + -- drive cas + O_CAS_ADDR <= cpu_addr(12 downto 0); + O_CAS_DATA <= cpu_data_out; + O_CAS_CS_L <= cas_cs_l; + + -- drive exp + -- all sigs should be bi-dir as exp slot devices can take control of the bus + -- this will be ok for the test cart + O_EXP_ADDR <= cpu_addr; + O_EXP_DATA <= cpu_data_out; -- not quite right, should be resolved data bus so exp slot can read customs / ram + O_EXP_M1_L <= cpu_m1_l; + O_EXP_MREQ_L <= cpu_mreq_l; + O_EXP_IORQ_L <= cpu_iorq_l; + O_EXP_WR_L <= cpu_wr_l; + O_EXP_RD_L <= cpu_rd_l; + + +end RTL; diff --git a/Bally - Astrocade_MiST/rtl/bally_addr.vhd b/Bally - Astrocade_MiST/rtl/bally_addr.vhd new file mode 100644 index 00000000..8b865fd0 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_addr.vhd @@ -0,0 +1,473 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 004 spartan3e hires release +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY_ADDR is + port ( + I_MXA : in std_logic_vector(15 downto 0); + I_MXD : in std_logic_vector( 7 downto 0); + O_MXD : out std_logic_vector( 7 downto 0); + O_MXD_OE_L : out std_logic; + + -- cpu control signals + I_RFSH_L : in std_logic; + I_M1_L : in std_logic; + I_RD_L : in std_logic; + I_MREQ_L : in std_logic; + I_IORQ_L : in std_logic; + O_WAIT_L : out std_logic; + O_INT_L : out std_logic; + + -- custom + I_HORIZ_DR : in std_logic; + I_VERT_DR : in std_logic; + O_WRCTL_L : out std_logic; -- present ram write data + O_LTCHDO : out std_logic; -- latch ram read data + + -- dram address (sram now) + O_MA : out std_logic_vector(15 downto 0); + O_RAS : out std_logic; -- for simulation + + -- misc + I_LIGHT_PEN_L : in std_logic; + + -- clks + I_CPU_ENA : in std_logic; + ENA : in std_logic; + CLK : in std_logic + ); +end; + +architecture RTL of BALLY_ADDR is + -- Signals + signal mxa_t1 : std_logic_vector(15 downto 0); + signal page_03 : std_logic; + signal page_47 : std_logic; + signal page_8B : std_logic; + signal ports_10_17 : std_logic; + signal vector_read : std_logic; + signal rw : std_logic; + signal iorw : std_logic; + signal mreq_l_e1 : std_logic; + signal iorq_l_e1 : std_logic; + signal start_cpu_cyc : std_logic; + signal delay_cpu_cyc : std_logic; + signal start_cpu_cyc_late : std_logic; + signal cpu_cyc : std_logic; + signal cpu_cyc_t1 : std_logic; + signal start_io_cyc : std_logic; + signal start_io_cyc_e1 : std_logic; + signal start_io_cyc_e2 : std_logic; + signal video_cyc : std_logic; + signal video_cyc_ras : std_logic; + signal video_cyc_ras_t1 : std_logic; + + signal m1_wait : std_logic; + signal io_wait : std_logic; + signal io_wait_t1 : std_logic; + signal io_wait_t2 : std_logic; + signal ras_int : std_logic; + signal ras_int_t1 : std_logic; + signal wrctl_int : std_logic; + signal wrctl_int_t1 : std_logic; + signal ltchdo_int : std_logic; + signal ltchdo_int_t1 : std_logic; + -- + signal cs : std_logic; + signal r_hi_res : std_logic; + signal r_vert_blank : std_logic_vector(7 downto 0) := x"10"; -- line 8 (7..1) + signal r_int_fb : std_logic_vector(7 downto 0); + signal r_int_ena_mode : std_logic_vector(7 downto 0); + signal r_int_line : std_logic_vector(7 downto 0); + + -- + signal horiz_dr_t1 : std_logic; + signal h_start : boolean; + signal horiz_pos : std_logic_vector(7 downto 0) := (others => '0'); + signal vert_pos : std_logic_vector(7 downto 0) := (others => '0'); + signal horiz_eol : boolean; + signal hactv : std_logic; + signal vactv : std_logic; + -- addr gen + signal vert_addr_gen : std_logic_vector(15 downto 0); + signal vert_line_sel : std_logic; + signal addr_gen : std_logic_vector(15 downto 0); + signal addr_gen_t1 : std_logic_vector(15 downto 0); + -- + signal lightpen_int : std_logic := '0'; + signal screen_int : std_logic := '0'; + signal int_out : std_logic; + signal int_auto_clear : std_logic; + signal int_auto_clear_e1 : std_logic; +begin + + p_chip_sel : process(I_CPU_ENA, I_MXA) + begin + cs <= '0'; + if (I_CPU_ENA = '1') then -- cpu access + if (I_MXA(7 downto 4) = "0000") then + cs <= '1'; + end if; + end if; + end process; + + p_reg_write : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_RD_L = '1') and (I_IORQ_L = '0') and (I_M1_L = '1') and (cs = '1') then + case I_MXA(3 downto 0) is + when x"8" => r_hi_res <= I_MXD(0); + when x"A" => r_vert_blank <= I_MXD; + when x"D" => r_int_fb <= I_MXD; -- D int vec. 3..0 set to zero for lightpen + when x"E" => r_int_ena_mode <= I_MXD; -- E + when x"F" => r_int_line <= I_MXD; -- F + when others => null; + end case; + end if; + end if; + end process; + + p_decode_cpu : process(I_MXA, I_RFSH_L, I_M1_L, I_MREQ_L, I_IORQ_L) + begin + page_03 <= '0'; + page_47 <= '0'; + page_8B <= '0'; + ports_10_17 <= '0'; + + if (I_MXA(15 downto 14) = "00") then -- 0x0000 - 0x3FFF + --if (I_MXA(14) = '0') then -- I think magic writes alias (not in high res) + page_03 <= '1'; + end if; + + if (I_MXA(15 downto 14) = "01") then -- 0x4000 - 0x7FFF + page_47 <= '1'; + end if; + + if (I_MXA(15 downto 14) = "10") then -- 0x8000 - 0xBFFF + page_8B <= '1'; + end if; + + if (I_MXA(7 downto 5) = "000") and (I_MXA(3) = '0') then + ports_10_17 <= '1'; + end if; + + vector_read <= not I_IORQ_L and not I_M1_L; -- interrupt ack + iorw <= not I_IORQ_L and I_M1_L; + rw <= not I_MREQ_L and I_RFSH_L; + + + end process; + + -- if start ram cyc and video cyc, assert wait for a clock then kick off + -- start ram cyc a clock later + p_cyc_start : process(page_03, page_47, page_8B, rw, mreq_l_e1, iorw, iorq_l_e1, i_RD_L) + begin + start_cpu_cyc <= (page_8B and rw and mreq_l_e1) or + (page_47 and rw and mreq_l_e1) or + (page_03 and rw and mreq_l_e1 and I_RD_L); -- magic write + + start_io_cyc <= iorw and iorq_l_e1; + end process; + + p_cpu_cyc : process(start_cpu_cyc, start_cpu_cyc_late, video_cyc) + begin + cpu_cyc <= (start_cpu_cyc and not video_cyc) or start_cpu_cyc_late; + delay_cpu_cyc <= start_cpu_cyc and video_cyc; + end process; + + p_ram_control_cpu_ena : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_CPU_ENA = '1') then + start_cpu_cyc_late <= delay_cpu_cyc; + + mreq_l_e1 <= I_MREQ_L; + iorq_l_e1 <= I_IORQ_L; + + ras_int <= cpu_cyc; + wrctl_int <= cpu_cyc and I_RD_L; + ltchdo_int <= cpu_cyc and not I_RD_L; + + m1_wait <= cpu_cyc and not I_M1_L; -- extra wait for instruction fetch + + start_io_cyc_e1 <= start_io_cyc; + start_io_cyc_e2 <= start_io_cyc_e1; + + if (I_RD_L = '0') and (ports_10_17 = '1') then + io_wait <= start_io_cyc or start_io_cyc_e1 or start_io_cyc_e2; + else + io_wait <= start_io_cyc; + end if; + + end if; + end if; + end process; + + p_ram_address : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + mxa_t1 <= I_MXA; + if (video_cyc_ras_t1 = '1') then + -- video addr + if (r_hi_res = '1') then + O_MA <= addr_gen_t1(14 downto 0) & '0'; + else + O_MA <= x"0" & addr_gen_t1(11 downto 0); + end if; + else + O_MA <= mxa_t1(15 downto 0); + end if; + end if; + end process; + + p_ram_control : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + + -- wrctl same timing as RAS for write + -- in real chip I think it's backedge clocked off cpu clk. We will clock it out on clk_7 + + -- ras 0 - 3 would be decoded from top 2 addr bits + -- driven for simluation. + cpu_cyc_t1 <= cpu_cyc; + ras_int_t1 <= ras_int; + + if (video_cyc_ras_t1 = '1') then + O_RAS <= '1'; + else + if (I_RD_L = '0') then + O_RAS <= cpu_cyc_t1; -- clock early for read + else + O_RAS <= ras_int_t1; + end if; + end if; + + wrctl_int_t1 <= wrctl_int; + O_WRCTL_L <= not wrctl_int_t1; + + ltchdo_int_t1 <= ltchdo_int; + O_LTCHDO <= ltchdo_int_t1; + end if; + end process; + + p_mxd_oe : process(vector_read, r_int_fb) + begin + O_MXD <= x"00"; + O_MXD_OE_L <= '1'; + if (vector_read = '1') then + -- if light pen then set bottom 4 bits to 0 (not imp) + O_MXD <= r_int_fb; + O_MXD_OE_L <= '0'; + end if; + end process; + + -- ** our wait is 1/2 cpu cycle late as our cpu drops mreq later than a real one ** + -- two wait states if opcode fetch from ram + -- two wait states for io r/w except reads from addr 10-17 which have four wait states + -- real z80's insert one wait state automatically + O_WAIT_L <= not (cpu_cyc or delay_cpu_cyc or m1_wait or start_io_cyc or io_wait); + + -- video timing + p_start_of_line : process(I_HORIZ_DR, horiz_dr_t1) + begin + h_start <= (I_HORIZ_DR = '1') and (horiz_dr_t1 = '0'); -- rising edge + end process; + + p_active_picture : process + variable vcomp : std_logic_vector(7 downto 0); + begin + wait until rising_edge(CLK); + if (ENA = '1') then + + if (I_HORIZ_DR = '1') then + horiz_pos <= (others => '0'); + elsif (I_CPU_ENA = '1') then -- clk phi + horiz_pos <= horiz_pos + "1"; + end if; + + horiz_dr_t1 <= I_HORIZ_DR; + if (I_VERT_DR = '1') then + vert_pos <= (others => '0'); + elsif h_start then + if (vert_pos = x"ff") then + null; + else + vert_pos <= vert_pos + "1"; + end if; + end if; + + -- bit of guesswork here + horiz_eol <= false; + if (I_CPU_ENA = '1') then + if (horiz_pos = x"01") then + hactv <= '1'; + elsif (horiz_pos = x"51") then + horiz_eol <= true; + hactv <= '0'; + end if; + end if; + vcomp := r_vert_blank(7 downto 0); + -- ADDR chip does video fetch for all lines - 191 lines for boot menu, 190 displayed + --if (r_hi_res = '0') then + --vcomp(0) := '0'; + --end if; + + -- vert_pos gets reset with vert_drv and then must not wrap until the next one. + vactv <= '0'; + if (vert_pos < vcomp) then -- vcomp is x2 as bits 7..1 used + vactv <= '1'; + end if; + end if; + end process; + + p_video_cyc : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_CPU_ENA = '1') then + video_cyc <= '0'; + if (hactv = '1') and (vactv = '1') and (horiz_pos(0) = '0') then + video_cyc <= '1'; + end if; + video_cyc_ras <= video_cyc; + end if; + video_cyc_ras_t1 <= video_cyc_ras; + end if; + end process; + + p_video_addr_gen : process + variable eol : boolean; + begin + wait until rising_edge(CLK); + eol := (horiz_pos = x"60") and (I_CPU_ENA = '1'); -- not critical as long as before h_start + if (ENA = '1') then + if (I_VERT_DR = '1') then + vert_addr_gen <= (others => '0'); + vert_line_sel <= '0'; + elsif eol then + vert_line_sel <= not vert_line_sel; + if (vert_line_sel = '1') or (r_hi_res = '1') then + -- inc line early + vert_addr_gen <= vert_addr_gen + x"0028"; -- 40 decimal + end if; + end if; + + if (I_VERT_DR = '1') then + addr_gen <= (others => '0'); + elsif h_start then + addr_gen <= vert_addr_gen; -- load + elsif (video_cyc_ras = '1') and (I_CPU_ENA = '1') then + addr_gen <= addr_gen + "1"; -- inc + end if; + + addr_gen_t1 <= addr_gen; + end if; + end process; + -- + -- interrupt + -- + p_interrupt : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- r_int_ena_mode + -- bit 0 light pen mode (0 continue interrupt, 1 auto int clear at next inst) + -- bit 1 light pen interrupt enable + -- bit 2 screen mode (as 0) + -- bit 3 screen interrupt enable + + -- r_int_fb interrupt vector, set lower 4 bits to 0 for light pen interrupt + -- r_int_line interrupt on line number (7..1) low res - when completes scanning + -- int ack by iorq_l and mreq_l active together + + -- guess where the interrupt happens, lets use the clock right after active video + -- also assuming first 2 lines are line 0 ?? so writing 4 will interrupt after + -- the sixth scan line (3rd whole line) + --screen_int <= '0'; + if horiz_eol then + if (vert_pos(7 downto 0) = (r_int_line(7 downto 1) & '1')) then -- low res + screen_int <= '1'; + end if; + end if; + + if (vector_read = '1') or ((int_auto_clear_e1 = '1') and (r_int_ena_mode(2) = '1')) then + screen_int <= '0'; + end if; + + lightpen_int <= '0'; + + -- auto clear + if (I_CPU_ENA = '1') and (I_M1_L = '0') then + int_auto_clear <= int_out; + int_auto_clear_e1 <= int_auto_clear; + end if; + end if; + end process; + + p_combine_interrupts : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + int_out <= '0'; + if (r_int_ena_mode(1) = '1') then + if (lightpen_int = '1') then int_out <= '1'; end if; + end if; + + if (r_int_ena_mode(3) = '1') then + if (screen_int = '1') then int_out <= '1'; end if; + end if; + end if; + end process; + O_INT_L <= not int_out; + +end architecture RTL; + diff --git a/Bally - Astrocade_MiST/rtl/bally_check_cart.vhd b/Bally - Astrocade_MiST/rtl/bally_check_cart.vhd new file mode 100644 index 00000000..5fa046d2 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_check_cart.vhd @@ -0,0 +1,124 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY_CHECK_CART is + port ( + I_EXP_ADDR : in std_logic_vector(15 downto 0); + I_EXP_DATA : in std_logic_vector( 7 downto 0); + O_EXP_DATA : out std_logic_vector( 7 downto 0); + O_EXP_OE_L : out std_logic; + + I_EXP_M1_L : in std_logic; + I_EXP_MREQ_L : in std_logic; + I_EXP_IORQ_L : in std_logic; + I_EXP_WR_L : in std_logic; + I_EXP_RD_L : in std_logic; + -- + O_CHAR_MSB : out std_logic_vector(3 downto 0); + O_CHAR_LSB : out std_logic_vector(3 downto 0); + -- + I_RESET_L : in std_logic; + ENA : in std_logic; + CLK : in std_logic + ); +end; + +architecture RTL of BALLY_CHECK_CART is + + component BALLY_CHECK + port ( + CLK : in std_logic; + ADDR : in std_logic_vector(10 downto 0); + DATA : out std_logic_vector(7 downto 0) + ); + end component; + + signal dout : std_logic_vector(7 downto 0); + +begin + -- chars 0-9, a = '-', b = 'E', c = 'H', d = 'L', e = 'P', f = blank + u_rom : entity work.BALLY_CHECK + port map ( + clock => CLK, + clken => ENA, + address => I_EXP_ADDR(10 downto 0), + q => dout + ); + + p_dout : process(dout, I_EXP_ADDR) + begin + O_EXP_DATA <= dout; + -- jump direct for intercept or / xor test - the tricky one ! + --if I_EXP_ADDR = x"20c4" then O_EXP_DATA <= x"31"; end if; + --if I_EXP_ADDR = x"20c5" then O_EXP_DATA <= x"c8"; end if; + --if I_EXP_ADDR = x"20c6" then O_EXP_DATA <= x"4f"; end if; + --if I_EXP_ADDR = x"20c7" then O_EXP_DATA <= x"c3"; end if; + --if I_EXP_ADDR = x"20c8" then O_EXP_DATA <= x"c8"; end if; + --if I_EXP_ADDR = x"20c9" then O_EXP_DATA <= x"21"; end if; + end process; + + p_cs : process(I_EXP_ADDR, I_EXP_RD_L, I_EXP_MREQ_L) + begin + O_EXP_OE_L <= '1'; + if (I_EXP_RD_L = '0') and (I_EXP_MREQ_L = '0') and (I_EXP_ADDR(14 downto 13) = "01") then + O_EXP_OE_L <= '0'; + end if; + end process; + + p_latch : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_EXP_ADDR(7 downto 4) = "1111") and (I_EXP_IORQ_L = '0') and (I_EXP_M1_L = '1') then + O_CHAR_MSB <= I_EXP_DATA(7 downto 4); + O_CHAR_LSB <= I_EXP_DATA(3 downto 0); + end if; + end if; + end process; + +end RTL; diff --git a/Bally - Astrocade_MiST/rtl/bally_col_pal.vhd b/Bally - Astrocade_MiST/rtl/bally_col_pal.vhd new file mode 100644 index 00000000..e627943d --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_col_pal.vhd @@ -0,0 +1,101 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity BALLY_COL_PAL is + port ( + ADDR : in std_logic_vector(7 downto 0); + DATA : out std_logic_vector(11 downto 0) + ); +end; + +architecture RTL of BALLY_COL_PAL is + + type ROM_ARRAY is array(0 to 255) of std_logic_vector(11 downto 0); + constant ROM : ROM_ARRAY := ( + x"000", x"222", x"444", x"666", x"999", x"BBB", x"DDD", x"FFF", + x"20B", x"40E", x"61F", x"93F", x"B5F", x"D7F", x"FAF", x"FCF", + x"40B", x"60D", x"90F", x"B2F", x"D4F", x"F6F", x"F9F", x"FBF", + x"609", x"80C", x"B0E", x"D1F", x"F3F", x"F6F", x"F8F", x"FAF", + x"808", x"A0A", x"D0D", x"F0F", x"F3F", x"F5F", x"F7F", x"F9F", + x"906", x"C08", x"E0B", x"F0D", x"F2F", x"F5F", x"F7F", x"F9F", + x"B04", x"D06", x"F09", x"F0B", x"F2D", x"F4F", x"F7F", x"F9F", + x"B02", x"E04", x"F06", x"F09", x"F2B", x"F4D", x"F7F", x"F9F", + x"B00", x"E02", x"F04", x"F06", x"F39", x"F5B", x"F7D", x"F9F", + x"B00", x"E00", x"F02", x"F14", x"F36", x"F59", x"F8B", x"FAD", + x"B00", x"D00", x"F00", x"F22", x"F44", x"F66", x"F89", x"FBB", + x"900", x"C00", x"E00", x"F30", x"F52", x"F74", x"F97", x"FC9", + x"800", x"A00", x"D10", x"F40", x"F60", x"F82", x"FA5", x"FD7", + x"600", x"800", x"B30", x"D50", x"F70", x"F91", x"FC3", x"FE5", + x"400", x"620", x"940", x"B60", x"D80", x"FB0", x"FD2", x"FF4", + x"210", x"430", x"650", x"970", x"BA0", x"DC0", x"FE1", x"FF4", + x"020", x"240", x"460", x"690", x"9B0", x"BD0", x"DF1", x"FF3", + x"030", x"050", x"280", x"4A0", x"6C0", x"9E0", x"BF1", x"DF4", + x"040", x"060", x"090", x"2B0", x"4D0", x"6F0", x"9F2", x"BF4", + x"050", x"070", x"090", x"0C0", x"2E0", x"4F1", x"7F3", x"9F5", + x"050", x"080", x"0A0", x"0C0", x"0F0", x"2F2", x"5F5", x"7F7", + x"060", x"080", x"0A0", x"0D0", x"0F2", x"1F4", x"3F7", x"5F9", + x"060", x"080", x"0B0", x"0D2", x"0F4", x"0F6", x"2F9", x"4FB", + x"060", x"080", x"0A2", x"0D4", x"0F6", x"0F9", x"1FB", x"4FD", + x"060", x"082", x"0A4", x"0C6", x"0F9", x"0FB", x"1FD", x"3FF", + x"052", x"074", x"0A6", x"0C9", x"0EB", x"0FD", x"1FF", x"4FF", + x"044", x"076", x"099", x"0BB", x"0DD", x"0FF", x"2FF", x"4FF", + x"036", x"068", x"08B", x"0AD", x"0CF", x"1FF", x"3FF", x"5FF", + x"028", x"04A", x"07D", x"09F", x"0BF", x"2EF", x"5FF", x"7FF", + x"019", x"03C", x"06E", x"08F", x"2AF", x"4CF", x"7FF", x"9FF", + x"00B", x"02D", x"04F", x"27F", x"49F", x"6BF", x"9DF", x"BFF", + x"00B", x"01E", x"23F", x"45F", x"68F", x"9AF", x"BCF", x"DEF" + ); + +begin + + p_rom : process(ADDR) + begin + DATA <= ROM(to_integer(unsigned(ADDR))); + end process; + +end RTL; + diff --git a/Bally - Astrocade_MiST/rtl/bally_data.vhd b/Bally - Astrocade_MiST/rtl/bally_data.vhd new file mode 100644 index 00000000..2ecafdad --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_data.vhd @@ -0,0 +1,1039 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 004 spartan3e hires release +-- version 003 spartan3e release +-- version 001 initial release +-- +-- microcycler not used +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY_DATA is + port ( + I_MXA : in std_logic_vector(15 downto 0); + I_MXD : in std_logic_vector( 7 downto 0); + O_MXD : out std_logic_vector( 7 downto 0); + O_MXD_OE_L : out std_logic; + + -- cpu control signals + I_M1_L : in std_logic; + I_RD_L : in std_logic; + I_MREQ_L : in std_logic; + I_IORQ_L : in std_logic; + + -- memory + O_DATEN_L : out std_logic; -- looks like the real chip + O_DATWR : out std_logic; -- ram ena to fake up write at rising edge of DATEN_L + I_MDX : in std_logic_vector( 7 downto 0); -- upper 8 bits for high res + I_MD : in std_logic_vector( 7 downto 0); + O_MD : out std_logic_vector( 7 downto 0); + O_MD_OE_L : out std_logic; + -- custom + O_MC1 : out std_logic; + O_MC0 : out std_logic; + + O_HORIZ_DR : out std_logic; + O_VERT_DR : out std_logic; + I_WRCTL_L : in std_logic; + I_LTCHDO : in std_logic; + + I_SERIAL1 : in std_logic; + I_SERIAL0 : in std_logic; + + O_VIDEO_R : out std_logic_vector(3 downto 0); + O_VIDEO_G : out std_logic_vector(3 downto 0); + O_VIDEO_B : out std_logic_vector(3 downto 0); + O_HSYNC : out std_logic; + O_VSYNC : out std_logic; + O_FPSYNC : out std_logic; -- first active pixel + + -- clks + O_CPU_ENA : out std_logic; -- cpu clock ena + O_PIX_ENA : out std_logic; -- pixel clock ena + ENA : in std_logic; + CLK : in std_logic + ); +end; + +architecture RTL of BALLY_DATA is + + -- const + -- horizontal timing constants + -- approx 78 clocks blanking,34 for sync + + -- original 7.159 Mhz clock + constant H_LINE_SYNCS : std_logic_vector(8 downto 0) := conv_std_logic_vector( 0,9); + constant H_LINE_SYNCR : std_logic_vector(8 downto 0) := conv_std_logic_vector( 33,9); + constant H_BLANK_N1S : std_logic_vector(8 downto 0) := conv_std_logic_vector( 0,9); -- first eq + constant H_BLANK_N1R : std_logic_vector(8 downto 0) := conv_std_logic_vector( 16,9); + constant H_BLANK_N2S : std_logic_vector(8 downto 0) := conv_std_logic_vector(227,9); -- second eq + constant H_BLANK_N2R : std_logic_vector(8 downto 0) := conv_std_logic_vector(243,9); + constant H_BLANK_B1S : std_logic_vector(8 downto 0) := conv_std_logic_vector( 0,9); -- first broad + constant H_BLANK_B1R : std_logic_vector(8 downto 0) := conv_std_logic_vector(193,9); + constant H_BLANK_B2S : std_logic_vector(8 downto 0) := conv_std_logic_vector(227,9); -- second broad + constant H_BLANK_B2R : std_logic_vector(8 downto 0) := conv_std_logic_vector(421,9); + constant H_BLANK_S : std_logic_vector(8 downto 0) := conv_std_logic_vector(444,9); -- horiz blanking + constant H_BLANK_R : std_logic_vector(8 downto 0) := conv_std_logic_vector( 67,9); -- 78 clocks, starting 12 before sync + + constant H_BLANK_LR : std_logic_vector(8 downto 0) := conv_std_logic_vector(245,9); -- half line left reset + constant H_BLANK_RS : std_logic_vector(8 downto 0) := conv_std_logic_vector(225,9); -- half line right set + + --constant H_DRIVE_S : std_logic_vector(8 downto 0) := conv_std_logic_vector( 60,9); -- hdrive pulse + --constant H_DRIVE_R : std_logic_vector(8 downto 0) := conv_std_logic_vector( 63,9); + --constant H_VDRIVE_R : std_logic_vector(8 downto 0) := conv_std_logic_vector( 71,9); + -- frig to get screen centered, above numbers are measured + constant H_DRIVE_S : std_logic_vector(8 downto 0) := conv_std_logic_vector( 60+8,9); -- hdrive pulse + constant H_DRIVE_R : std_logic_vector(8 downto 0) := conv_std_logic_vector( 63+8,9); + constant H_VDRIVE_R : std_logic_vector(8 downto 0) := conv_std_logic_vector( 71+8,9); + + constant H_LEN : std_logic_vector(8 downto 0) := conv_std_logic_vector(454,9); -- line length (455 clocks) + constant V_LEN : std_logic_vector(10 downto 0) := conv_std_logic_vector(525,11); -- frame length + + component BALLY_COL_PAL + port ( + ADDR : in std_logic_vector(7 downto 0); + DATA : out std_logic_vector(11 downto 0) + ); + end component; + + -- Signals + type array_8x8 is array (0 to 7) of std_logic_vector(7 downto 0); + type array_bool8 is array (0 to 7) of boolean; + + signal ena_cnt : std_logic_vector(1 downto 0) := "00"; + signal cpu_ena : std_logic; + signal cpu_ena_t1 : std_logic; + signal pix_ena : std_logic; + signal pix_load : std_logic; + signal cs_w : std_logic; + signal cs_r : std_logic; + -- cpu if + signal col_ld : array_bool8; + signal magic_ld : boolean; + signal r_col : array_8x8 := (x"00",x"00",x"00",x"00",x"00",x"00",x"00",x"00"); + signal r_hi_res : std_logic; + signal r_backgnd_col : std_logic_vector(1 downto 0) := "00"; + signal r_horiz_pos : std_logic_vector(5 downto 0) := "010100"; -- 20 + signal r_vert_blank : std_logic_vector(7 downto 0) := x"10"; -- line 8 (7..1) + --signal r_vert_blank : std_logic_vector(7 downto 0) := x"BF"; -- line 191 (7..1) + signal r_magic : std_logic_vector(7 downto 0) := x"00"; + signal r_expand : std_logic_vector(7 downto 0) := x"00"; + signal r_intercept : std_logic_vector(7 downto 0) := x"00"; + -- timing + signal do_horiz_dr : std_logic; + signal do_horiz_dr_t1 : std_logic; + signal do_vert_dr : std_logic; + signal do_vert_dr_int : std_logic; + signal hsync : std_logic; + signal vsync : std_logic := '0'; + signal vsync_t1 : std_logic; + signal v_1st_actv : std_logic; + + signal h_count : std_logic_vector ( 8 downto 0) := (others => '0'); + signal v_count : std_logic_vector (10 downto 0) := "00000000001"; + signal sg_line_sync : std_logic; + signal sg_blank_n1 : std_logic; + signal sg_blank_n2 : std_logic; + signal sg_blank_b1 : std_logic; + signal sg_blank_b2 : std_logic; + signal sg_hstart : std_logic; + signal sg_hstart_t1 : std_logic; + signal sg_hblank : std_logic; + signal sg_hblank_l : std_logic; + signal sg_hblank_r : std_logic; + signal sg_vblank : std_logic; + signal sg_vstart : std_logic; + -- + signal sg_blanking_EQ : std_logic; + signal sg_blanking_BRD : std_logic; + signal sg_line263 : std_logic; + signal sg_line266 : std_logic; + signal sg_line269 : std_logic; + signal sg_line272 : std_logic; + signal sg_line283 : std_logic; + signal sg_sync : std_logic; + signal sg_blank : std_logic; + signal sg_neg_sync : std_logic; + + -- + signal horiz_pos : std_logic_vector(7 downto 0); + signal vert_pos : std_logic_vector(7 downto 0); + signal hactv : std_logic; + signal vactv : std_logic; + + -- data + signal ram_write_reg : std_logic_vector(7 downto 0); + signal datwr : std_logic; + signal ltchdo_t1 : std_logic; + signal mxd_out_ena : std_logic; + signal mxd_out_intercept : std_logic; + signal mxd_out_intercept_e1 : std_logic; + -- video + signal video_cyc : std_logic; + signal video_cyc_ras : std_logic; + signal video_cyc_ras_t1 : std_logic; + signal video_cyc_ras_t2 : std_logic; + signal video_shifter : std_logic_vector(15 downto 0); + signal video_shifter_lflag : std_logic; + signal video_shifter_actv : std_logic; + + signal lflag : std_logic; -- left flag + signal lflag_inhib : std_logic; + signal lflag_e : std_logic_vector(2 downto 0); + signal hactv_e : std_logic_vector(2 downto 0); + signal col_in : std_logic_vector(7 downto 0); + signal col_out : std_logic_vector(11 downto 0); + -- datapath + signal done_magic_write : std_ulogic; + signal done_magic_write_t1 : std_ulogic; + signal expand_lower_sel : std_logic; + + signal expand_out : std_logic_vector(7 downto 0); + signal flopper_out : std_logic_vector(7 downto 0); + signal pixel_collide : std_logic_vector(3 downto 0); + + signal shifter_out : std_logic_vector(13 downto 0); + signal shifter_out_reg : std_logic_vector(5 downto 0); + + signal rotate_cnt : std_logic_vector(2 downto 0); + signal rotate_inhibit_write : std_logic; + signal rotate_pixa : std_logic_vector(7 downto 0) := (others => '0'); + signal rotate_pixb : std_logic_vector(7 downto 0) := (others => '0'); + signal rotate_pixc : std_logic_vector(7 downto 0) := (others => '0'); + signal rotate_pixd : std_logic_vector(7 downto 0) := (others => '0'); + signal rotate_out : std_logic_vector(7 downto 0); + signal magic_final : std_logic_vector(7 downto 0); + signal ram_ip_reg : std_logic_vector(7 downto 0); + signal ram_op_reg : std_logic_vector(7 downto 0); + +begin + + p_chip_sel : process(cpu_ena, I_MXA) + begin + cs_w <= '0'; + cs_r <= '0'; + if (cpu_ena = '1') then -- cpu access + if (I_MXA(7 downto 5) = "000") then + cs_w <= '1'; + end if; + end if; + if (I_MXA(7 downto 4) = "0000") then + cs_r <= '1'; + end if; + + end process; + + -- + -- registers + -- + p_reg_write : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_RD_L = '1') and (I_IORQ_L = '0') and (I_M1_L = '1') and (cs_w = '1') then + case I_MXA(4 downto 0) is + when "01000" => r_hi_res <= I_MXD(0); -- 8 + when "01001" => r_backgnd_col <= I_MXD(7 downto 6); -- 9 + r_horiz_pos <= I_MXD(5 downto 0); + when "01010" => r_vert_blank <= I_MXD; -- A + -- B + when "01100" => r_magic <= I_MXD; -- C + when "11001" => r_expand <= I_MXD; -- 19 + + when others => null; + end case; + end if; + end if; + end process; + + p_reg_write_blk_decode : process(I_RD_L, I_M1_L, I_IORQ_L, cs_w, I_MXA) + begin + -- these writes will last for several cpu_ena cycles, so you + -- will get several load pulses + col_ld <= (others => false); + magic_ld <= false; + if (I_RD_L = '1') and (I_IORQ_L = '0') and (I_M1_L = '1') and (cs_w = '1') and (I_MXA(4) = '0') then + col_ld(0) <= ( I_MXA( 3 downto 0) = x"0") or + ((I_MXA(10 downto 8) = "000") and (I_MXA(3 downto 0) = x"B")); + + col_ld(1) <= ( I_MXA( 3 downto 0) = x"1") or + ((I_MXA(10 downto 8) = "001") and (I_MXA(3 downto 0) = x"B")); + + col_ld(2) <= ( I_MXA( 3 downto 0) = x"2") or + ((I_MXA(10 downto 8) = "010") and (I_MXA(3 downto 0) = x"B")); + + col_ld(3) <= ( I_MXA( 3 downto 0) = x"3") or + ((I_MXA(10 downto 8) = "011") and (I_MXA(3 downto 0) = x"B")); + + col_ld(4) <= ( I_MXA( 3 downto 0) = x"4") or + ((I_MXA(10 downto 8) = "100") and (I_MXA(3 downto 0) = x"B")); + + col_ld(5) <= ( I_MXA( 3 downto 0) = x"5") or + ((I_MXA(10 downto 8) = "101") and (I_MXA(3 downto 0) = x"B")); + + col_ld(6) <= ( I_MXA( 3 downto 0) = x"6") or + ((I_MXA(10 downto 8) = "110") and (I_MXA(3 downto 0) = x"B")); + + col_ld(7) <= ( I_MXA( 3 downto 0) = x"7") or + ((I_MXA(10 downto 8) = "111") and (I_MXA(3 downto 0) = x"B")); + + magic_ld <= ( I_MXA( 3 downto 0) = x"C"); + end if; + end process; + + p_reg_write_blk : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + for i in 0 to 7 loop + if col_ld(i) then r_col(i) <= I_MXD; end if; + end loop; + end if; + end process; + + p_cpu_ena : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (do_horiz_dr = '1') then -- 3 clocks long + ena_cnt <= "00"; + else + ena_cnt <= ena_cnt + "1"; + end if; + + cpu_ena <= '0'; + if (ena_cnt = "10") then + cpu_ena <= '1'; + end if; + + if (r_hi_res = '1') then + pix_ena <= '1'; + else + pix_ena <= ena_cnt(0); + end if; + pix_load <= cpu_ena; + end if; + end process; + O_CPU_ENA <= cpu_ena; + O_PIX_ENA <= pix_ena; + + p_micro_gen : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- not used + O_MC1 <= '0'; + O_MC0 <= '0'; + end if; + end process; + -- + -- sync generation + -- + p_hv_count : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (h_count = H_LEN) then + h_count <= (others => '0'); + if (v_count = V_LEN) then + v_count <= "00000000001"; + else + v_count <= v_count + "1"; + end if; + else + h_count <= h_count + "1"; + end if; + end if; + end process; + + p_window_h : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- hblank + sg_hstart <= '0'; + if (h_count = H_BLANK_S) then + sg_hblank <= '1'; + elsif h_count = H_BLANK_R then + sg_hstart <= '1'; + sg_hblank <= '0'; + end if; + + if (h_count = H_BLANK_S) then + sg_hblank_l <= '1'; + elsif h_count = H_BLANK_LR then + sg_hblank_l <= '0'; + end if; + + if (h_count = H_BLANK_RS) then + sg_hblank_r <= '1'; + elsif h_count = H_BLANK_R then + sg_hblank_r <= '0'; + end if; + + if (h_count = H_DRIVE_S) then + do_horiz_dr <= '1'; + elsif h_count = H_DRIVE_R then + do_horiz_dr <= '0'; + end if; + + if (h_count = H_DRIVE_S) then + do_vert_dr <= '1'; + elsif h_count = H_VDRIVE_R then + do_vert_dr <= '0'; + end if; + + -- low res 40 bytes / line (160 pixels, 2 bits per pixel) + -- vert res 102 lines + -- two clocks / pixel + end if; + end process; + + p_sync_h : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- negative sync pulse + if (h_count = H_LINE_SYNCS) then + sg_line_sync <= '1'; + elsif h_count = H_LINE_SYNCR then + sg_line_sync <= '0'; + end if; + + -- blanking narrow1 + if (h_count = H_BLANK_N1S) then + sg_blank_n1 <= '1'; + elsif h_count = H_BLANK_N1R then + sg_blank_n1 <= '0'; + end if; + + -- blanking narrow2 + if (h_count = H_BLANK_N2S) then + sg_blank_n2 <= '1'; + elsif (h_count = H_BLANK_N2R) then + sg_blank_n2 <= '0'; + end if; + + -- blanking broad1 + if (h_count = H_BLANK_B1S) then + sg_blank_b1 <= '1'; + elsif (h_count = H_BLANK_B1R) then + sg_blank_b1 <= '0'; + end if; + + -- blanking broad2 + if h_count = H_BLANK_B2S then + sg_blank_b2 <= '1'; + elsif (h_count = H_BLANK_B2R) then + sg_blank_b2 <= '0'; + end if; + end if; + end process; + + p_window_v : process + begin + wait until rising_edge(CLK); + -- line 21 first f1 nonblanked video line ** bally chip starts at 20 with a half line + -- line 44 first f1 video line + -- line 234 last f1 video line (power up menu) + -- line 263 last f1 nonblanked video line (half line) + + -- line 283 first f2 nonblanked video line (half line) + -- line 307 first f2 video line (power up menu) + -- line 497 last f2 video line + -- line 525 last f2 nonblanked video line + + -- (vblank reg is written as 191 for boot menu) + -- there are 191 active video lines read from the video store per field (when displaying menu) + -- The bally data chip seems to get the half lines wrong however (283 whole line) + -- and it puts a half line on 20. Or, I've missread the field sync pulses. + -- doesn't really matter as we are driving a vga screen for now .. + + -- 14.2857MHz (7.1428) + -- line / 455 = 15.698 K = 29.9 frames + if (ENA = '1') then + + sg_vstart <= '0'; + if (v_count = conv_std_logic_vector( 21,11)) then + sg_vblank <= '0'; + sg_vstart <= '1'; -- field one sync to scan converter + elsif (v_count = conv_std_logic_vector( 264,11)) then + sg_vblank <= '1'; + elsif (v_count = conv_std_logic_vector( 283,11)) then + sg_vblank <= '0'; + elsif (v_count = conv_std_logic_vector( 1,11)) then + sg_vblank <= '1'; + end if; + + if (v_count = conv_std_logic_vector( 4,11)) then + vsync <= '1'; + elsif (v_count = conv_std_logic_vector( 7,11)) then + vsync <= '0'; + elsif (v_count = conv_std_logic_vector( 267,11)) then + vsync <= '1'; + elsif (v_count = conv_std_logic_vector( 270,11)) then + vsync <= '0'; + end if; + + v_1st_actv <= '0'; + if (v_count = conv_std_logic_vector( 44,11)) or + (v_count = conv_std_logic_vector( 307,11)) then + v_1st_actv <= '1'; + end if; + -- timing from rising edge of v_sync + -- 4 21 263 + -- 1 18 260 + + -- 267 283 525 + -- 1 17 259 + + -- so field 2 is displayed above field 1 - this is the same as ntsc and seems + -- to be necessary to get a correct picture on my monitor taking it's sync from vsync + end if; + end process; + + p_sync_v : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + sg_blanking_eq <= '0'; + if ( (v_count = conv_std_logic_vector( 1,11)) or + (v_count = conv_std_logic_vector( 2,11)) or + (v_count = conv_std_logic_vector( 3,11)) or + (v_count = conv_std_logic_vector( 7,11)) or + (v_count = conv_std_logic_vector( 8,11)) or + (v_count = conv_std_logic_vector( 9,11)) or + (v_count = conv_std_logic_vector(264,11)) or + (v_count = conv_std_logic_vector(265,11)) or + (v_count = conv_std_logic_vector(270,11)) or + (v_count = conv_std_logic_vector(271,11)) ) then + sg_blanking_eq <= '1'; + end if; + + sg_blanking_brd <= '0'; + if ( (v_count = conv_std_logic_vector( 4,11)) or + (v_count = conv_std_logic_vector( 5,11)) or + (v_count = conv_std_logic_vector( 6,11)) or + (v_count = conv_std_logic_vector(267,11)) or + (v_count = conv_std_logic_vector(268,11)) ) then + sg_blanking_brd <= '1'; + end if; + + sg_line263 <= '0'; + if (v_count = (conv_std_logic_vector(263,11))) then + sg_line263 <= '1'; + end if; + + sg_line266 <= '0'; + if (v_count = (conv_std_logic_vector(266,11))) then + sg_line266 <= '1'; + end if; + + sg_line269 <= '0'; + if (v_count = (conv_std_logic_vector(269,11))) then + sg_line269 <= '1'; + end if; + + sg_line272 <= '0'; + if (v_count = (conv_std_logic_vector(272,11))) then + sg_line272 <= '1'; + end if; + + sg_line283 <= '0'; + if (v_count = (conv_std_logic_vector(283,11))) then + sg_line283 <= '1'; + end if; + end if; + end process; + + p_syncgen : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + sg_sync <= '0'; + + if (sg_blanking_eq = '1') then + sg_sync <= sg_blank_n1 or sg_blank_n2; + + elsif (sg_blanking_brd = '1') then + sg_sync <= sg_blank_b1 or sg_blank_b2; + + elsif (sg_line263 = '1') then + sg_sync <= sg_blank_n2 or sg_line_sync; + + elsif (sg_line266 = '1') then + sg_sync <= sg_blank_n1 or sg_blank_b2; + + elsif (sg_line269 = '1') then + sg_sync <= sg_blank_b1 or sg_blank_n2; + + elsif (sg_line272 = '1') then + sg_sync <= sg_blank_n1; + + else + sg_sync <= sg_line_sync; -- normal line. + end if; + + sg_blank <= sg_hblank or sg_vblank; + if (sg_line263 = '1') then + sg_blank <= sg_hblank_r; -- left half line + elsif (sg_line283 = '1') then + sg_blank <= sg_hblank_l; -- right half line + end if; + + hsync <= sg_line_sync; + vsync_t1 <= vsync; + end if; + end process; + + -- code duplicated in addr chip + p_active_picture : process + variable vcomp : std_logic_vector(7 downto 0); + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (do_horiz_dr = '1') then + horiz_pos <= (others => '0'); + elsif (cpu_ena = '1') then -- clk phi + horiz_pos <= horiz_pos + "1"; + end if; + + do_horiz_dr_t1 <= do_horiz_dr; + if (do_vert_dr_int = '1') then + vert_pos <= (others => '0'); + elsif (do_horiz_dr = '1') and (do_horiz_dr_t1 = '0') then -- rising edge + if (vert_pos = x"ff") then + null; + else + vert_pos <= vert_pos + "1"; + end if; + end if; + + -- bit of guesswork here + if (cpu_ena = '1') then + if (horiz_pos = x"01") then + hactv <= '1'; + elsif (horiz_pos = x"51") then + hactv <= '0'; + end if; + end if; + vcomp := r_vert_blank(7 downto 0); + -- DATA chip does line pairs only in low res mode + if (r_hi_res = '0') then + vcomp(0) := '0'; + end if; + + vactv <= '0'; + if (vert_pos < vcomp) then + vactv <= '1'; + end if; + end if; + end process; + + p_video_cyc : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (cpu_ena = '1') then + video_cyc <= '0'; + if (hactv = '1') and (vactv = '1') and (horiz_pos(0) = '0') then + video_cyc <= '1'; + end if; + video_cyc_ras <= video_cyc; + end if; + video_cyc_ras_t1 <= video_cyc_ras; + video_cyc_ras_t2 <= video_cyc_ras_t1; -- match delay to rams + end if; + end process; + + p_left_flag : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- apparently horiz_pos 40 or above do not have any effect + if (do_horiz_dr = '1') then + lflag_inhib <= '0'; + elsif (cpu_ena = '1') and (horiz_pos(6 downto 0) = ("1001111")) then + lflag_inhib <= '1'; + end if; + + if (do_horiz_dr = '1') then + lflag <= '1'; + elsif (cpu_ena = '1') and (horiz_pos(6 downto 0) = (r_horiz_pos & '1')) and (lflag_inhib = '0') then + lflag <= '0'; + end if; + + -- pipeline delay + if (do_horiz_dr = '1') then + lflag_e <= "111"; + hactv_e <= "000"; + + elsif (cpu_ena = '1') then + lflag_e(0) <= lflag; + lflag_e(2 downto 1) <= lflag_e(1 downto 0); + hactv_e(0) <= hactv; + hactv_e(2 downto 1) <= hactv_e(1 downto 0); + end if; + end if; + end process; + + p_video_shifter : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- video cyc, grab from ram + if (pix_ena = '1') then + if (pix_load = '1') and (video_cyc_ras_t2 = '1') then + video_shifter <= I_MD(7 downto 0) & I_MDX(7 downto 0); + else + -- top left pixel is bits 7,6 + video_shifter <= video_shifter(13 downto 0) & "00"; + end if; + + end if; + + if (do_horiz_dr = '1') then + video_shifter_lflag <= '1'; + video_shifter_actv <= '0'; -- background col + elsif (pix_ena = '1') and (pix_load = '1') then + video_shifter_lflag <= lflag_e(2); + video_shifter_actv <= hactv_e(2) and vactv; + end if; + end if; + end process; + + p_col_sel : process(video_shifter, video_shifter_lflag, video_shifter_actv, + r_col, r_backgnd_col) + variable sel : std_logic_vector(2 downto 0); + begin + if (video_shifter_actv = '0') then + sel := video_shifter_lflag & r_backgnd_col; + else + sel := video_shifter_lflag & video_shifter(7+8 downto 6+8); + end if; + + col_in <= (others => '0'); + case sel is + when "000" => col_in <= r_col(0); + when "001" => col_in <= r_col(1); + when "010" => col_in <= r_col(2); + when "011" => col_in <= r_col(3); + when "100" => col_in <= r_col(4); + when "101" => col_in <= r_col(5); + when "110" => col_in <= r_col(6); + when "111" => col_in <= r_col(7); + when others => null; + end case; + end process; + + u_col : entity work.BALLY_COL_PAL + port map ( + ADDR => col_in, + DATA => col_out + ); + + p_video_out : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + sg_neg_sync <= not sg_sync; + O_HSYNC <= hsync; + O_VSYNC <= vsync_t1; + + if (sg_blank = '1') then + O_VIDEO_R <= "0000"; + O_VIDEO_G <= "0000"; + O_VIDEO_B <= "0000"; + else + O_VIDEO_R <= col_out(11 downto 8); + O_VIDEO_G <= col_out( 7 downto 4); + O_VIDEO_B <= col_out( 3 downto 0); + end if; + do_vert_dr_int <= v_1st_actv and do_vert_dr; + sg_hstart_t1 <= sg_hstart; + O_FPSYNC <= sg_hstart_t1 and sg_vstart; + end if; + end process; + O_VERT_DR <= do_vert_dr_int; + O_HORIZ_DR <= do_horiz_dr; + -- + -- data path + -- + p_ramin : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + ram_write_reg <= I_MXD; + + done_magic_write <= '0'; + if (I_WRCTL_L = '0') and (I_MXA(15 downto 14) = "00") and (cpu_ena = '1') then + done_magic_write <= '1'; + end if; + done_magic_write_t1 <= done_magic_write; -- make sure we have finished ram write + end if; + end process; + + p_expand : process(ram_write_reg, r_magic, r_expand, expand_lower_sel) + variable expand_sel : std_logic_vector(3 downto 0); + begin + if (expand_lower_sel = '1') then -- reg cleared by magic, upper when 0 + expand_sel := ram_write_reg(3 downto 0); + else + expand_sel := ram_write_reg(7 downto 4); + end if; + + if (r_magic(3) = '0') then -- bypass + expand_out <= ram_write_reg; + else + for i in 0 to 3 loop + if (expand_sel(i) = '0') then + expand_out((i*2)+1 downto i*2) <= r_expand(1 downto 0); + else + expand_out((i*2)+1 downto i*2) <= r_expand(3 downto 2); + end if; + end loop; + end if; + end process; + + p_rotate_reg : process + variable shift : std_logic; + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if magic_ld then + rotate_cnt <= "000"; + expand_lower_sel <= '0'; + shifter_out_reg <= (others => '0'); + elsif (done_magic_write_t1 = '1') then + rotate_cnt <= rotate_cnt + "1"; + expand_lower_sel <= not expand_lower_sel; + shifter_out_reg <= shifter_out(5 downto 0); + end if; + + rotate_inhibit_write <= '0'; + shift := '0'; + if (I_MXA(15 downto 14) = "00") then + if (rotate_cnt(2) = '0') then + rotate_inhibit_write <= r_magic(2); -- only if using rotate + if (cpu_ena = '1') and (I_WRCTL_L = '0') then + shift := '1'; + end if; + end if; + end if; + + if (shift = '1') then + rotate_pixa <= expand_out(7 downto 6) & rotate_pixa(7 downto 2); -- top + rotate_pixb <= expand_out(5 downto 4) & rotate_pixb(7 downto 2); + rotate_pixc <= expand_out(3 downto 2) & rotate_pixc(7 downto 2); + rotate_pixd <= expand_out(1 downto 0) & rotate_pixd(7 downto 2); + end if; + end if; + end process; + + p_rotate_shifter : process(expand_out, shifter_out_reg, r_magic, + rotate_cnt, rotate_pixa, rotate_pixb, rotate_pixc, rotate_pixd) + begin + -- r_magic bits 1,0 + shifter_out <= (others => '0'); -- default + case r_magic(1 downto 0) is + when "00" => shifter_out <= expand_out(7 downto 0) & "000000"; + when "01" => shifter_out <= shifter_out_reg(5 downto 4) & expand_out(7 downto 0) & "0000" ; + when "10" => shifter_out <= shifter_out_reg(5 downto 2) & expand_out(7 downto 0) & "00" ; + when "11" => shifter_out <= shifter_out_reg(5 downto 0) & expand_out(7 downto 0); + when others => null; + end case; + + rotate_out <= (others => '0'); -- default + case rotate_cnt(1 downto 0) is + when "00" => rotate_out <= rotate_pixa; + when "01" => rotate_out <= rotate_pixb; + when "10" => rotate_out <= rotate_pixc; + when "11" => rotate_out <= rotate_pixd; + when others => null; + end case; + end process; + + p_flopper : process(shifter_out, rotate_out, r_magic) + variable flopper_src : std_logic_vector(7 downto 0); + begin + if (r_magic(2) = '0') then -- rotate bypass + flopper_src := shifter_out(13 downto 6); + else + flopper_src := rotate_out; + end if; + + if (r_magic(6) = '0') then -- flopper bypass + flopper_out <= flopper_src; + else + flopper_out(7 downto 6) <= flopper_src(1 downto 0); + flopper_out(5 downto 4) <= flopper_src(3 downto 2); + flopper_out(3 downto 2) <= flopper_src(5 downto 4); + flopper_out(1 downto 0) <= flopper_src(7 downto 6); + end if; + end process; + + p_or_xor : process(flopper_out, ram_ip_reg, r_magic) + variable result_or : std_logic_vector(7 downto 0); + variable result_xor : std_logic_vector(7 downto 0); + begin + result_or := flopper_out or ram_ip_reg; + result_xor := flopper_out xor ram_ip_reg; + + magic_final <= (others => '0'); + case r_magic(5 downto 4) is + when "00" => magic_final <= flopper_out; -- none + when "01" => magic_final <= result_or; -- or + when "10" => magic_final <= result_xor; -- xor + when "11" => magic_final <= result_xor; -- xor and or + when others => null; + end case; + end process; + + p_intercept : process(flopper_out, ram_ip_reg) + begin + pixel_collide <= (others => '0'); + for i in 0 to 3 loop + if (flopper_out((i*2)+1 downto (i*2)) /= "00") and + (ram_ip_reg((i*2)+1 downto (i*2)) /= "00") then + pixel_collide(i) <= '1'; + end if; + end loop; + + end process; + + p_intercept_reg : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (cpu_ena = '1') then + mxd_out_intercept_e1 <= mxd_out_intercept; + end if; + + -- reset + if (mxd_out_intercept = '0') and (mxd_out_intercept_e1 = '1') and (cpu_ena = '1') then -- end of read + r_intercept(3 downto 0) <= "0000"; + elsif (datwr = '1') and (I_MXA(15 downto 14) = "00") and (rotate_inhibit_write = '0') then + -- write + if (r_magic(5) = '1') or (r_magic(4) = '1') then -- or/xor write only + r_intercept(0) <= r_intercept(0) or pixel_collide(3); + r_intercept(1) <= r_intercept(1) or pixel_collide(2); + r_intercept(2) <= r_intercept(2) or pixel_collide(1); + r_intercept(3) <= r_intercept(3) or pixel_collide(0); + + r_intercept(4) <= pixel_collide(3); + r_intercept(5) <= pixel_collide(2); + r_intercept(6) <= pixel_collide(1); + r_intercept(7) <= pixel_collide(0); + end if; + end if; + end if; + end process; + + p_output_reg : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (cpu_ena = '1') then + ltchdo_t1 <= I_LTCHDO; + ram_ip_reg <= I_MD(7 downto 0); -- used for or / xor + end if; + + if (I_MXA(15 downto 14) = "00") then -- magic write + ram_op_reg <= magic_final; + else + ram_op_reg <= ram_write_reg; + end if; + + cpu_ena_t1 <= cpu_ena; + datwr <= cpu_ena_t1 and (not I_WRCTL_L); + end if; + end process; + O_DATWR <= datwr; + -- ram out + + p_ramout : process(I_WRCTL_L, ram_op_reg, rotate_inhibit_write) + begin + O_MD_OE_L <= '1'; + O_DATEN_L <= '1'; + O_MD <= (others => 'X'); -- debug + if (I_WRCTL_L = '0') and (rotate_inhibit_write = '0') then + O_MD <= ram_op_reg; + O_MD_OE_L <= '0'; + O_DATEN_L <= '0'; + end if; + end process; + + p_mxd_out_ena : process(I_LTCHDO, ltchdo_t1, I_RD_L, I_IORQ_L, cs_r, I_MXA) + begin + + mxd_out_ena <= '0'; + mxd_out_intercept <= '0'; + + if (I_LTCHDO = '1') or (ltchdo_t1 = '1') then + mxd_out_ena <= '1'; + else + if (I_RD_L = '0') and (I_IORQ_L = '0') and (cs_r = '1') then + if (I_MXA(3 downto 0) = x"8") then -- intercept + mxd_out_ena <= '1'; + mxd_out_intercept <= '1'; + end if; + end if; + end if; + end process; + + p_mxout : process(mxd_out_ena, mxd_out_intercept, I_MD, r_intercept) + begin + O_MXD <= (others => 'X'); + O_MXD_OE_L <= '1'; + if (mxd_out_ena = '1') then + O_MXD_OE_L <= '0'; + if (mxd_out_intercept = '1') then + O_MXD <= r_intercept; + else + O_MXD <= I_MD(7 downto 0); + end if; + end if; + end process; + +end architecture RTL; + diff --git a/Bally - Astrocade_MiST/rtl/bally_io.vhd b/Bally - Astrocade_MiST/rtl/bally_io.vhd new file mode 100644 index 00000000..ec96edcb --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_io.vhd @@ -0,0 +1,405 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY_IO is + port ( + I_MXA : in std_logic_vector(15 downto 0); + I_MXD : in std_logic_vector( 7 downto 0); + O_MXD : out std_logic_vector( 7 downto 0); + O_MXD_OE_L : out std_logic; + + -- cpu control signals + I_M1_L : in std_logic; -- not on real chip + I_RD_L : in std_logic; + I_IORQ_L : in std_logic; + I_RESET_L : in std_logic; + +-- I_HANDLE1 : in std_logic_vector( 8 downto 0); +-- I_HANDLE2 : in std_logic_vector( 8 downto 0); +-- I_HANDLE3 : in std_logic_vector( 8 downto 0); +-- I_HANDLE4 : in std_logic_vector( 8 downto 0); + + -- switches + O_SWITCH : out std_logic_vector( 7 downto 0); + I_SWITCH : in std_logic_vector( 7 downto 0); + -- audio + O_AUDIO : out std_logic_vector( 7 downto 0); + -- clks + I_CPU_ENA : in std_logic; + ENA : in std_logic; + CLK : in std_logic + ); +end; + +architecture RTL of BALLY_IO is + -- Signals + type array_8x8 is array (0 to 7) of std_logic_vector(7 downto 0); + type array_4x8 is array (0 to 3) of std_logic_vector(7 downto 0); + type array_3x8 is array (0 to 2) of std_logic_vector(7 downto 0); + type array_4x4 is array (0 to 3) of std_logic_vector(3 downto 0); + + type array_bool8 is array (0 to 7) of boolean; + + signal cs : std_logic; + signal snd_ld : array_bool8; + signal r_snd : array_8x8 := (x"00",x"00",x"00",x"00",x"00",x"00",x"00",x"00"); + signal r_pot : array_4x8 := (x"00",x"00",x"00",x"00"); + signal mxd_out_reg : std_logic_vector(7 downto 0); + + signal io_read : std_logic; + signal switch_read : std_logic; + -- audio + signal master_ena : std_logic; + signal master_cnt : std_logic_vector(7 downto 0); + signal master_freq : std_logic_vector(7 downto 0); + + signal vibrato_cnt : std_logic_vector(18 downto 0); + signal vibrato_ena : std_logic; + + signal poly17 : std_logic_vector(16 downto 0); + signal noise_gen : std_logic_vector(7 downto 0); + + signal tone_gen : array_3x8 := (others => (others => '0')); + signal tone_gen_op : std_logic_vector(2 downto 0); +begin + + p_chip_sel : process(I_CPU_ENA, I_MXA) + begin + cs <= '0'; + if (I_CPU_ENA = '1') then -- cpu access + if (I_MXA(7 downto 4) = "0001") then + cs <= '1'; + end if; + end if; + end process; + -- + -- registers + -- + p_reg_write_blk_decode : process(I_CPU_ENA, I_RD_L, I_M1_L, I_IORQ_L, cs, I_MXA) -- no m1 gating on real chip ? + begin + -- these writes will last for several cpu_ena cycles, so you + -- will get several load pulses + snd_ld <= (others => false); + if (I_CPU_ENA = '1') then + if (I_RD_L = '1') and (I_IORQ_L = '0') and (I_M1_L = '1') and (cs = '1') then + snd_ld(0) <= ( I_MXA( 3 downto 0) = x"0") or + ((I_MXA(10 downto 8) = "000") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(1) <= ( I_MXA( 3 downto 0) = x"1") or + ((I_MXA(10 downto 8) = "001") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(2) <= ( I_MXA( 3 downto 0) = x"2") or + ((I_MXA(10 downto 8) = "010") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(3) <= ( I_MXA( 3 downto 0) = x"3") or + ((I_MXA(10 downto 8) = "011") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(4) <= ( I_MXA( 3 downto 0) = x"4") or + ((I_MXA(10 downto 8) = "100") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(5) <= ( I_MXA( 3 downto 0) = x"5") or + ((I_MXA(10 downto 8) = "101") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(6) <= ( I_MXA( 3 downto 0) = x"6") or + ((I_MXA(10 downto 8) = "110") and (I_MXA(3 downto 0) = x"8")); + + snd_ld(7) <= ( I_MXA( 3 downto 0) = x"7") or + ((I_MXA(10 downto 8) = "111") and (I_MXA(3 downto 0) = x"8")); + + end if; + end if; + end process; + + p_reg_write_blk : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_RESET_L = '0') then -- don't know if reset does reset the sound + r_snd <= (others => (others => '0')); + else + for i in 0 to 7 loop + if snd_ld(i) then r_snd(i) <= I_MXD; end if; + end loop; + end if; + end if; + end process; + + p_reg_read : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_MXA(3) = '0') then + mxd_out_reg <= I_SWITCH(7 downto 0); + else + mxd_out_reg <= x"00"; + case I_MXA(2 downto 0) is + when "100" => mxd_out_reg <= r_pot(0); --x1C + when "101" => mxd_out_reg <= r_pot(1); --x1D + when "110" => mxd_out_reg <= r_pot(2); --x1E + when "111" => mxd_out_reg <= r_pot(3); --x1F + when others => null; + end case; + end if; + end if; + end process; + + p_decode_read : process(I_MXA, I_IORQ_L, I_RD_L) + begin + -- we will return 0 for x18-1b + io_read <= '0'; + switch_read <= '0'; + if (I_MXA(7 downto 4) = "0001") then + if (I_IORQ_L = '0') and (I_RD_L = '0') then + io_read <= '1'; + if (I_MXA(3) = '0') then + switch_read <= '1'; + end if; + end if; + end if; + end process; + + p_switch_out : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + O_SWITCH <= x"00"; + if (switch_read = '1') then + case I_MXA(2 downto 0) is + when "000" => O_SWITCH <= "00000001"; + when "001" => O_SWITCH <= "00000010"; + when "010" => O_SWITCH <= "00000100"; + when "011" => O_SWITCH <= "00001000"; + when "100" => O_SWITCH <= "00010000"; + when "101" => O_SWITCH <= "00100000"; + when "110" => O_SWITCH <= "01000000"; + when "111" => O_SWITCH <= "10000000"; + when others => null; + end case; + end if; + end if; + end process; + + p_mxd_oe : process(mxd_out_reg, io_read) + begin + O_MXD <= x"00"; + O_MXD_OE_L <= '1'; + if (io_read = '1') then + O_MXD <= mxd_out_reg; + O_MXD_OE_L <= '0'; + end if; + end process; + -- + + p_pots : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- return FF when not plugged in + r_pot(0) <= x"FF"; + r_pot(1) <= x"FF"; + r_pot(2) <= x"FF"; + r_pot(3) <= x"FF"; + end if; + end process; + -- read switches 10-17, pots 1c - 1f + -- port 7 6 5 4 3 2 1 0 + -- x10 tg rt lt dn up | player 1 + -- x11 tg rt lt dn up | player 2 + -- x12 tg rt lt dn up | player 3 + -- x13 tg rt lt dn up | player 4 + -- x14 = + - x / % | keypad (right most col, bit 0 top) + -- x15 . 3 6 9 ch v | keypad + -- x16 0 2 5 8 ms ^ | keypad + -- x17 ce 1 4 7 mr c | keypad (left most col) + + -- write + -- x10 master osc + -- x11 tone a freq + -- x12 tone b freq + -- x13 tone c freq + -- x14 vibrato (7..2 value, 1..0 freq) + -- x15 noise control, tone c volume + -- bit 5 high to enable noise into mix + -- bit 4 high for noise mod, low for vibrato + -- bit 3..0 tone c vol + -- x16 tone b volume, tone a volume (7..4 b vol, 3..0 a vol) + -- x17 noise volume (vol 7..4), 7..0 for master osc modulation + + p_noise_gen : process + variable poly17_zero : std_logic; + begin + -- most probably not correct polynomial + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_CPU_ENA = '1') then + poly17_zero := '0'; + if (poly17 = "00000000000000000") then poly17_zero := '1'; end if; + poly17 <= poly17(15 downto 0) & (poly17(16) xor poly17(2) xor poly17_zero); + end if; + end if; + end process; + noise_gen <= poly17(7 downto 0); + + p_vibrato_osc : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + -- cpu clock period 0.558730s us + + -- 00 toggle output every 18.5 mS bet its 32768 clocks + -- 01 toggle output every 37 mS + -- 10 toggle output every 74 mS + -- 11 toggle output every 148 mS + + -- bit 15 every 32768 clocks + if (I_CPU_ENA = '1') then + vibrato_cnt <= vibrato_cnt + "1"; + vibrato_ena <= '0'; + case r_snd(4)(1 downto 0) is + when "00" => vibrato_ena <= vibrato_cnt(15); + when "01" => vibrato_ena <= vibrato_cnt(16); + when "10" => vibrato_ena <= vibrato_cnt(17); + when "11" => vibrato_ena <= vibrato_cnt(18); + when others => null; + end case; + end if; + end if; + end process; + + p_master_freq : process(vibrato_ena, r_snd, noise_gen) + variable mux : std_logic_vector(7 downto 0); + begin + mux := (others => '0'); -- default + if (r_snd(5)(4) = '1') then -- use noise + mux := noise_gen and r_snd(7); + else + if (vibrato_ena = '1') then + mux := r_snd(4)(7 downto 2) & "00"; + else + mux := (others => '0'); + end if; + end if; + -- add modulation to master osc freq + master_freq <= r_snd(0) + mux; + -- Arcadian mag claims that the counter is preset to the modulation value + -- when the counter hits the master osc reg value. + -- The patent / system descriptions describes an adder .... + end process; + + p_master_osc : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_CPU_ENA = '1') then -- 1.789 Mhz base clock + master_ena <= '0'; + if (master_cnt = "00000000") then + master_cnt <= master_freq; + master_ena <= '1'; + else + master_cnt <= master_cnt - "1"; + end if; + end if; + end if; + end process; + + p_tone_gen : process + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_CPU_ENA = '1') then -- 1.789 Mhz base clock + + for i in 0 to 2 loop + if (master_ena = '1') then + if (tone_gen(i) = "00000000") then + tone_gen(i) <= r_snd(i + 1); -- load + tone_gen_op(i) <= not tone_gen_op(i); + else + tone_gen(i) <= tone_gen(i) - '1'; + end if; + end if; + end loop; + end if; + end if; + end process; + + p_op_mixer : process + variable vol : array_4x4; + variable sum01 : std_logic_vector(4 downto 0); + variable sum23 : std_logic_vector(4 downto 0); + variable sum : std_logic_vector(5 downto 0); + begin + wait until rising_edge(CLK); + if (ENA = '1') then + if (I_CPU_ENA = '1') then + vol(0) := "0000"; + vol(1) := "0000"; + vol(2) := "0000"; + vol(3) := "0000"; + + if (tone_gen_op(0) = '1') then vol(0) := r_snd(6)(3 downto 0); end if; -- A + if (tone_gen_op(1) = '1') then vol(1) := r_snd(6)(7 downto 4); end if; -- B + if (tone_gen_op(2) = '1') then vol(2) := r_snd(5)(3 downto 0); end if; -- C + if (r_snd(5)(5) = '1') then -- noise enable + if (noise_gen(0) = '1') then vol(3) := r_snd(5)(7 downto 4); end if; -- noise + end if; + + sum01 := ('0' & vol(0)) + ('0' & vol(1)); + sum23 := ('0' & vol(2)) + ('0' & vol(3)); + sum := ('0' & sum01) + ('0' & sum23); + + if (I_RESET_L = '0') then + O_AUDIO <= "00000000"; + else + O_AUDIO <= (sum & "00"); + end if; + end if; + end if; + end process; + +end architecture RTL; + diff --git a/Bally - Astrocade_MiST/rtl/bally_mist.sv b/Bally - Astrocade_MiST/rtl/bally_mist.sv new file mode 100644 index 00000000..89cf26fc --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_mist.sv @@ -0,0 +1,158 @@ +module bally_mist( + output LED, + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + output VGA_HS, + output VGA_VS, + output AUDIO_L, + output AUDIO_R, + input SPI_SCK, + output SPI_DO, + input SPI_DI, + input SPI_SS2, + input SPI_SS3, + input CONF_DATA0, + input CLOCK_27 +); + +`include "rtl\build_id.v" + +localparam CONF_STR = { + "BALLY;BIN;", + "O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;", + "T6,Reset;", + "V,v1.00.",`BUILD_DATE +}; + +wire clk_28;//28.5712 +wire clk_14;//14.2856 +wire clk_7;//7.1428 + +wire [12:0] cart_addr; +wire [7:0] cart_do; +wire cart_cs; +wire ioctl_downl; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; +assign LED = !ioctl_downl; + +wire [31:0] status; +wire [1:0] buttons; +wire [1:0] switches; +wire [7:0] kbjoy; + +wire [7:0] joystick_0; +wire [7:0] joystick_1; +wire scandoubler_disable; +wire ypbpr; +wire ps2_kbd_clk, ps2_kbd_data; +wire [7:0] audio; + +wire pix_ena; +wire hs, vs; +wire [3:0] r,g,b; + + +pll pll +( + .inclk0(CLOCK_27), + .c0(clk_28), + .c1(clk_14), + .c2(clk_7) + ); + +video_mixer #(.LINE_LENGTH(480), .HALF_DEPTH(0)) video_mixer +( + .clk_sys(clk_28), + .ce_pix(clk_7), + .ce_pix_actual(clk_7), + .SPI_SCK(SPI_SCK), + .SPI_SS3(SPI_SS3), + .SPI_DI(SPI_DI), + .R({r,r[1:0]}), + .G({g,g[1:0]}), + .B({b,b[1:0]}), + .HSync(hs), + .VSync(vs), + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .scandoubler_disable(scandoubler_disable), + .scanlines(scandoubler_disable ? 2'b00 : {status[4:3] == 3, status[4:3] == 2}), + .hq2x(status[4:3]==1), + .ypbpr_full(1), + .line_start(0), + .mono(0) +); + + +mist_io #(.STRLEN(($size(CONF_STR)>>3))) mist_io +( + .clk_sys (clk_28 ), + .conf_str (CONF_STR ), + .SPI_SCK (SPI_SCK ), + .CONF_DATA0 (CONF_DATA0 ), + .SPI_SS2 (SPI_SS2 ), + .SPI_DO (SPI_DO ), + .SPI_DI (SPI_DI ), + .buttons (buttons ), + .switches (switches ), + .scandoubler_disable (scandoubler_disable ), + .ypbpr (ypbpr ), + .ps2_kbd_clk (ps2_kbd_clk ), + .ps2_kbd_data (ps2_kbd_data ), + .joystick_0 (joystick_0 ), + .joystick_1 (joystick_1 ), + .status (status ), + .ioctl_download ( ioctl_downl ), + .ioctl_index ( ioctl_index ), + .ioctl_wr ( ioctl_wr ), + .ioctl_addr ( ioctl_addr ), + .ioctl_dout ( ioctl_dout ) +); + + +cart cart ( + .clock ( clk_14 ), + .address ( ioctl_downl ? ioctl_addr : cart_addr), + .data ( ioctl_dout ), + .rden ( !ioctl_downl && !cart_cs), + .wren ( ioctl_downl && ioctl_wr), + .q ( cart_do ) + ); + +BALLY_TOP BALLY_TOP ( + .cas_addr(cart_addr), + .cas_data(cart_do), + .cas_cs_l(cart_cs), + .I_PS2_CLK (ps2_kbd_clk ), + .I_PS2_DATA (ps2_kbd_data ), + .r(r), + .g(g), + .b(b), + .hs(hs), + .vs(vs), + .AUDIO(audio), + .ena(1'b1), + .pix_ena(pix_ena), + .clk_14(clk_14), + .clk_7(clk_7), + .reset((status[0] | status[6] | buttons[1] | ioctl_downl)) + ); + +dac dac +( + .clk_i(clk_28), + .res_n_i(1'b1), + .dac_i(audio), + .dac_o(AUDIO_L) + ); + +assign AUDIO_R = AUDIO_L; + +endmodule diff --git a/Bally - Astrocade_MiST/rtl/bally_ps2_if.vhd b/Bally - Astrocade_MiST/rtl/bally_ps2_if.vhd new file mode 100644 index 00000000..5212017e --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_ps2_if.vhd @@ -0,0 +1,319 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; + use ieee.numeric_std.all; + +entity BALLY_PS2_IF is + port ( + + I_PS2_CLK : in std_logic; + I_PS2_DATA : in std_logic; + + I_COL : in std_logic_vector(7 downto 0); + O_ROW : out std_logic_vector(7 downto 0); + + I_RESET_L : in std_logic; + I_1MHZ_ENA : in std_logic; + CLK : in std_logic + ); +end; + +architecture RTL of BALLY_PS2_IF is + + signal tick_1us : std_logic; + signal kbd_press : std_logic; + signal kbd_release : std_logic; + signal kbd_reset : std_logic; + signal kbd_press_s : std_logic; + signal kbd_release_s : std_logic; + signal kbd_scancode : std_logic_vector(7 downto 0); + signal kbd_scanE0 : std_logic; + + signal col_addr : std_logic_vector(3 downto 0); + signal rowcol : std_logic_vector(7 downto 0); + signal row_mask : std_logic_vector(7 downto 0); + + signal ram_w_addr : std_logic_vector(3 downto 0); + signal ram_r_addr : std_logic_vector(3 downto 0); + signal ram_we : std_ulogic; + signal ram_din : std_logic_vector(7 downto 0); + signal ram_dout : std_logic_vector(7 downto 0); + + signal reset_cnt : std_logic_vector(4 downto 0); + signal io_ena : std_logic; + -- non-xilinx ram + type slv_array8 is array (natural range <>) of std_logic_vector(7 downto 0); + shared variable ram : slv_array8(7 downto 0) := (others => (others => '0')); + +begin + + -- port 7 6 5 4 3 2 1 0 + -- x10 tg rt lt dn up | player 1 + -- x11 tg rt lt dn up | player 2 + -- x12 tg rt lt dn up | player 3 + -- x13 tg rt lt dn up | player 4 + + + -- bit x17 x16 x15 x14 maps to pc key + -- + -- 0 c ^ v % z a q 1 + -- 1 mr ms ch / x s w 2 + -- 2 7 8 9 x c d e 3 + -- 3 4 5 6 - v f r 4 + -- 4 1 2 3 + b g t 5 + -- 5 ce 0 . = n h y 6 + + tick_1us <= I_1MHZ_ENA; + + -- Keyboard decoder + u_kbd : entity work.ps2kbd + port map( + Rst_n => I_RESET_L, + Clk => CLK, + Tick1us => tick_1us, + PS2_Clk => I_PS2_CLK, + PS2_Data => I_PS2_DATA, + Press => kbd_press, + Release => kbd_release, + Reset => kbd_reset, + ScanE0 => kbd_scanE0, + ScanCode => kbd_scancode + ); + + p_decode_scancode : process + begin + -- hopefully the tools will build a rom for this + wait until rising_edge(CLK); + -- rowcol is valid for lots of clocks, but kbd_press_t1 / release are single + -- clock strobes. must sync these to io_ena + if (kbd_press = '1') then + kbd_press_s <= '1'; + elsif (io_ena = '0') then + kbd_press_s <= '0'; + end if; + + if (kbd_release = '1') then + kbd_release_s <= '1'; + elsif (io_ena = '0') then + kbd_release_s <= '0'; + end if; + + -- top bit low for keypress + if (kbd_scanE0 = '0') then + rowcol <= x"ff"; + case kbd_scancode is + -- player 1 col 0 + when x"29" => rowcol <= x"40";-- space + -- player 2 col 1 + when x"75" => rowcol <= x"01";-- keypad8 + when x"72" => rowcol <= x"11";-- keypad2 + when x"6B" => rowcol <= x"21";-- keypad4 + when x"74" => rowcol <= x"31";-- keypad6 + when x"70" => rowcol <= x"41";-- keypad0 + -- player 3 col 2 not mapped + -- player 4 col 3 not mapped + + -- keypad col 4 + when x"16" => rowcol <= x"04";-- 1 + when x"1E" => rowcol <= x"14";-- 2 + when x"26" => rowcol <= x"24";-- 3 + when x"25" => rowcol <= x"34";-- 4 + when x"2E" => rowcol <= x"44";-- 5 + when x"36" => rowcol <= x"54";-- 6 + -- keypad col 5 + when x"15" => rowcol <= x"05";-- q + when x"1D" => rowcol <= x"15";-- w + when x"24" => rowcol <= x"25";-- e + when x"2D" => rowcol <= x"35";-- r + when x"2C" => rowcol <= x"45";-- t + when x"35" => rowcol <= x"55";-- y + -- keypad col 6 + when x"1C" => rowcol <= x"06";-- a + when x"1B" => rowcol <= x"16";-- s + when x"23" => rowcol <= x"26";-- d + when x"2B" => rowcol <= x"36";-- f + when x"34" => rowcol <= x"46";-- g + when x"33" => rowcol <= x"56";-- h + -- keypad col 7 + when x"1A" => rowcol <= x"07";-- z + when x"22" => rowcol <= x"17";-- x + when x"21" => rowcol <= x"27";-- c + when x"2A" => rowcol <= x"37";-- v + when x"32" => rowcol <= x"47";-- b + when x"31" => rowcol <= x"57";-- n + + when others => rowcol <= x"FF"; + end case; + else + rowcol <= x"ff"; + case kbd_scancode is + when x"75" => rowcol <= x"00";-- curs up + when x"72" => rowcol <= x"10";-- curs dn + when x"6B" => rowcol <= x"20";-- curs left + when x"74" => rowcol <= x"30";-- curs right + when others => rowcol <= x"FF"; + end case; + end if; + end process; + + p_expand_row : process(rowcol) + begin + row_mask <= x"01"; + case rowcol(6 downto 4) is + when "000" => row_mask <= x"01"; + when "001" => row_mask <= x"02"; + when "010" => row_mask <= x"04"; + when "011" => row_mask <= x"08"; + when "100" => row_mask <= x"10"; + when "101" => row_mask <= x"20"; + when "110" => row_mask <= x"40"; + when "111" => row_mask <= x"80"; + when others => null; + end case; + end process; + + p_reset_cnt : process(I_RESET_L, CLK) + begin + if (I_RESET_L = '0') then + reset_cnt <= "00000"; + io_ena <= '0'; + elsif rising_edge(CLK) then + -- counter used to reset ram + if (kbd_reset = '1') then + reset_cnt <= "10000"; + elsif (reset_cnt(4) = '1') then + reset_cnt <= reset_cnt + "1"; + end if; + io_ena <= not io_ena; + end if; + end process; + + p_keybd_write : process(kbd_press_s, kbd_release_s, rowcol, + kbd_reset, reset_cnt, ram_dout, row_mask, io_ena) + variable we : boolean; + begin + -- valid key ? + we := ((kbd_press_s = '1') or (kbd_release_s = '1')) and (rowcol(7) = '0'); + + if (reset_cnt(4) = '1') then + ram_w_addr <= reset_cnt(3 downto 0); + ram_din <= x"00"; + ram_we <= '1'; + else + ram_w_addr <= rowcol(3 downto 0); + + if (kbd_press_s = '1') then + ram_din <= ram_dout or row_mask; -- pressed + else + ram_din <= ram_dout and not row_mask; -- released + end if; + + ram_we <= '0'; + if we and (io_ena = '0')then + ram_we <= '1'; + end if; + end if; + + end process; + + + p_ram_w : process + variable ram_addr : integer := 0; + begin + wait until rising_edge(CLK); + if (ram_we = '1') then + ram_addr := to_integer(unsigned(ram_w_addr(2 downto 0))); + ram(ram_addr) := ram_din; + end if; + end process; + + p_ram_r : process(CLK, ram_r_addr) + variable ram_addr : integer := 0; + begin + ram_addr := to_integer(unsigned(ram_r_addr(2 downto 0))); + ram_dout <= ram(ram_addr); + end process; + + -- the io chip can access the ram when io_ena = '1' + p_ram_read_mux : process(io_ena, col_addr, rowcol) + begin + if (io_ena = '1') then + ram_r_addr <= col_addr; + else + ram_r_addr <= rowcol(3 downto 0); -- write r/m/w + end if; + end process; + + p_via_out_reg : process + begin + wait until rising_edge(CLK); + if (io_ena = '1') then + if (col_addr = x"f") then -- none + O_ROW <= x"00"; + else + O_ROW <= ram_dout; -- switches are active high + end if; + end if; + end process; + + p_col_decode : process(I_COL) + begin + col_addr <= x"F"; + case I_COL is + when x"01" => col_addr <= x"0"; + when x"02" => col_addr <= x"1"; + when x"04" => col_addr <= x"2"; + when x"08" => col_addr <= x"3"; + when x"10" => col_addr <= x"4"; + when x"20" => col_addr <= x"5"; + when x"40" => col_addr <= x"6"; + when x"80" => col_addr <= x"7"; + when others => null; + end case; + end process; + +end architecture RTL; + diff --git a/Bally - Astrocade_MiST/rtl/bally_rams.vhd b/Bally - Astrocade_MiST/rtl/bally_rams.vhd new file mode 100644 index 00000000..6a583635 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_rams.vhd @@ -0,0 +1,178 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 004 spartan3e hires release +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY_RAMS is + port ( + ADDR : in std_logic_vector(15 downto 0); + DIN : in std_logic_vector(7 downto 0); + DOUT : out std_logic_vector(7 downto 0); + DOUTX : out std_logic_vector(7 downto 0); -- next byte + WE : in std_logic; + WE_ENA_L : in std_logic; -- used for write enable gate only + ENA : in std_logic; + CLK : in std_logic + ); +end; + +architecture RTL of BALLY_RAMS is + type array_7x8 is array (0 to 6) of std_logic_vector(7 downto 0); + -- + signal dout_int_h : array_7x8; + signal dout_int_l : array_7x8; + signal addr_t1 : std_logic_vector(15 downto 0); + signal int_we_h : std_logic_vector(6 downto 0); + signal int_we_l : std_logic_vector(6 downto 0); + +-- we can have 14 rams total +-- 4000-4FFF 4K + +-- 16K screen ram 4000-7fff this is aliased to 0000-3FFF for magic +-- spare 8000-BFFF (but we are only have enough rams to go to AFFF for now) +begin + p_we : process(ADDR, WE, WE_ENA_L) + variable h,l : std_logic; + begin + int_we_h <= (others => '0'); + int_we_l <= (others => '0'); + l := (not ADDR(0)) and WE and (not WE_ENA_L); + h := ADDR(0) and WE and (not WE_ENA_L); + -- + case ADDR(15 downto 12) is + when x"0" => int_we_h(0) <= h; int_we_l(0) <= l; + when x"1" => int_we_h(1) <= h; int_we_l(1) <= l; + when x"2" => int_we_h(2) <= h; int_we_l(2) <= l; + when x"3" => int_we_h(3) <= h; int_we_l(3) <= l; + -- + when x"4" => int_we_h(0) <= h; int_we_l(0) <= l; + when x"5" => int_we_h(1) <= h; int_we_l(1) <= l; + when x"6" => int_we_h(2) <= h; int_we_l(2) <= l; + when x"7" => int_we_h(3) <= h; int_we_l(3) <= l; + -- + when x"8" => int_we_h(4) <= h; int_we_l(4) <= l; + when x"9" => int_we_h(5) <= h; int_we_l(5) <= l; + when x"A" => int_we_h(6) <= h; int_we_l(6) <= l; + --when x"B" => int_we_h(7) <= h; int_we_l(7) <= l; + -- + when others => null; + end case; + end process; + + + + rams : for i in 0 to 6 generate + begin + ram_u : entity work.spram + generic map ( + init_file => "", + widthad_a => 11, + width_a => 8 + ) + port map ( + address => ADDR(11 downto 1), + clock => CLK, + data => DIN(7 downto 0), + wren => int_we_h(i), + q => dout_int_h(i)(7 downto 0) + ); + ram_l : entity work.spram + generic map ( + init_file => "", + widthad_a => 11, + width_a => 8 + ) + port map ( + address => ADDR(11 downto 1), + clock => CLK, + data => DIN(7 downto 0), + wren => int_we_l(i), + q => dout_int_l(i)(7 downto 0) + ); + end generate; + + p_addr_delay : process + begin + wait until rising_edge(CLK); + addr_t1 <= ADDR; + end process; + + p_mux : process(dout_int_l, dout_int_h, addr, addr_t1) + variable mux_h : std_logic_vector(7 downto 0); + variable mux_l : std_logic_vector(7 downto 0); + begin + + mux_h := dout_int_h(0); mux_l := dout_int_l(0); + case addr_t1(15 downto 12) is + when x"0" => mux_h := dout_int_h(0); mux_l := dout_int_l(0); + when x"1" => mux_h := dout_int_h(1); mux_l := dout_int_l(1); + when x"2" => mux_h := dout_int_h(2); mux_l := dout_int_l(2); + when x"3" => mux_h := dout_int_h(3); mux_l := dout_int_l(3); + -- + when x"4" => mux_h := dout_int_h(0); mux_l := dout_int_l(0); + when x"5" => mux_h := dout_int_h(1); mux_l := dout_int_l(1); + when x"6" => mux_h := dout_int_h(2); mux_l := dout_int_l(2); + when x"7" => mux_h := dout_int_h(3); mux_l := dout_int_l(3); + -- + when x"8" => mux_h := dout_int_h(4); mux_l := dout_int_l(4); + when x"9" => mux_h := dout_int_h(5); mux_l := dout_int_l(5); + when x"A" => mux_h := dout_int_h(6); mux_l := dout_int_l(6); + --when x"B" => mux_h := dout_int_h(7); mux_l := dout_int_l(7); + -- + when others => null; + end case; + + if (addr_t1(0) = '0') then + DOUT <= mux_l; + else + DOUT <= mux_h; + end if; + DOUTX <= mux_h; + + end process; + +end architecture RTL; diff --git a/Bally - Astrocade_MiST/rtl/bally_top.vhd b/Bally - Astrocade_MiST/rtl/bally_top.vhd new file mode 100644 index 00000000..29ed228a --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/bally_top.vhd @@ -0,0 +1,199 @@ +-- +-- A simulation model of Bally Astrocade hardware +-- Copyright (c) MikeJ - Nov 2004 +-- +-- 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. +-- +-- You are responsible for any legal issues arising from your use of this code. +-- +-- The latest version of this file can be found at: www.fpgaarcade.com +-- +-- Email support@fpgaarcade.com +-- +-- Revision list +-- +-- version 004 spartan3e hires release +-- version 003 spartan3e release +-- version 001 initial release +-- +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_arith.all; + use ieee.std_logic_unsigned.all; + +entity BALLY_TOP is + port ( + cas_addr : out std_logic_vector(12 downto 0); + cas_data : in std_logic_vector( 7 downto 0); + cas_cs_l : out std_logic; + I_PS2_CLK : in std_logic; + I_PS2_DATA : in std_logic; + r : out std_logic_vector(3 downto 0); + g : out std_logic_vector(3 downto 0); + b : out std_logic_vector(3 downto 0); + hs : out std_logic; + vs : out std_logic; + audio : out std_logic_vector( 7 downto 0); + ena : in std_logic; + pix_ena : out std_logic; + clk_14 : in std_logic; + clk_7 : in std_logic; + reset : in std_logic + ); +end; + +architecture RTL of BALLY_TOP is + + -- + signal switch_col : std_logic_vector(7 downto 0); + signal switch_row : std_logic_vector(7 downto 0); + signal ps2_1mhz_ena : std_logic; + signal ps2_1mhz_cnt : std_logic_vector(5 downto 0); + -- + signal video_r : std_logic_vector(3 downto 0); + signal video_g : std_logic_vector(3 downto 0); + signal video_b : std_logic_vector(3 downto 0); + signal hsync : std_logic; + signal vsync : std_logic; + signal fpsync : std_logic; + + + signal exp_addr : std_logic_vector(15 downto 0); + signal exp_data_out : std_logic_vector(7 downto 0); + signal exp_data_in : std_logic_vector(7 downto 0); + signal exp_oe_l : std_logic; + + signal exp_m1_l : std_logic; + signal exp_mreq_l : std_logic; + signal exp_iorq_l : std_logic; + signal exp_wr_l : std_logic; + signal exp_rd_l : std_logic; + -- + signal check_cart_msb : std_logic_vector(3 downto 0); + signal check_cart_lsb : std_logic_vector(7 downto 4); + + +begin + + + p_ena1mhz : process + begin + wait until rising_edge(clk_7); + -- divide by 7 + ps2_1mhz_ena <= '0'; + if (ps2_1mhz_cnt = "000110") then + ps2_1mhz_cnt <= "000000"; + ps2_1mhz_ena <= '1'; + else + ps2_1mhz_cnt <= ps2_1mhz_cnt + '1'; + end if; + end process; + + + u_bally : entity work.BALLY + port map ( + O_AUDIO => audio, + -- + O_VIDEO_R => r, + O_VIDEO_G => g, + O_VIDEO_B => b, + + O_HSYNC => hs, + O_VSYNC => vs, + O_COMP_SYNC_L => open, + O_FPSYNC => open, + -- + -- cart slot + O_CAS_ADDR => cas_addr, + O_CAS_DATA => open, + I_CAS_DATA => cas_data, + O_CAS_CS_L => cas_cs_l, + + -- exp slot (subset for now) + O_EXP_ADDR => exp_addr, + O_EXP_DATA => exp_data_out, + I_EXP_DATA => exp_data_in, + I_EXP_OE_L => exp_oe_l, + + O_EXP_M1_L => exp_m1_l, + O_EXP_MREQ_L => exp_mreq_l, + O_EXP_IORQ_L => exp_iorq_l, + O_EXP_WR_L => exp_wr_l, + O_EXP_RD_L => exp_rd_l, + -- + O_SWITCH_COL => switch_col, + I_SWITCH_ROW => switch_row, + I_RESET_L => not reset, + ENA => ena, + pix_ena => pix_ena, + CLK => clk_14, + CLK7 => clk_7 + ); + + u_ps2 : entity work.BALLY_PS2_IF + port map ( + + I_PS2_CLK => I_PS2_CLK, + I_PS2_DATA => I_PS2_DATA, + + I_COL => switch_col, + O_ROW => switch_row, + + I_RESET_L => not reset, + I_1MHZ_ENA => ps2_1mhz_ena, + CLK => clk_7 + ); + +-- u_check_cart : entity work.BALLY_CHECK_CART +-- port map ( + -- I_EXP_ADDR => exp_addr, + -- I_EXP_DATA => exp_data_out, + -- O_EXP_DATA => exp_data_in, + -- O_EXP_OE_L => exp_oe_l, + +-- I_EXP_M1_L => exp_m1_l, + -- I_EXP_MREQ_L => exp_mreq_l, + -- I_EXP_IORQ_L => exp_iorq_l, + -- I_EXP_WR_L => exp_wr_l, + -- I_EXP_RD_L => exp_rd_l, + ---- +-- O_CHAR_MSB => check_cart_msb, + -- O_CHAR_LSB => check_cart_lsb, + ---- + -- I_RESET_L => not reset, + -- ENA => ena, + -- CLK => clk_7 + -- ); + + -- if no expansion cart + exp_data_in <= x"ff"; + exp_oe_l <= '1'; + + +end RTL; diff --git a/Bally - Astrocade_MiST/rtl/build_id.tcl b/Bally - Astrocade_MiST/rtl/build_id.tcl new file mode 100644 index 00000000..938515d8 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/build_id.tcl @@ -0,0 +1,35 @@ +# ================================================================================ +# +# Build ID Verilog Module Script +# Jeff Wiencrot - 8/1/2011 +# +# Generates a Verilog module that contains a timestamp, +# from the current build. These values are available from the build_date, build_time, +# physical_address, and host_name output ports of the build_id module in the build_id.v +# Verilog source file. +# +# ================================================================================ + +proc generateBuildID_Verilog {} { + + # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) + set buildDate [ clock format [ clock seconds ] -format %y%m%d ] + set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + + # Create a Verilog file for output + set outputFileName "rtl/build_id.v" + set outputFile [open $outputFileName "w"] + + # Output the Verilog source + puts $outputFile "`define BUILD_DATE \"$buildDate\"" + puts $outputFile "`define BUILD_TIME \"$buildTime\"" + close $outputFile + + # Send confirmation message to the Messages window + post_message "Generated build identification Verilog module: [pwd]/$outputFileName" + post_message "Date: $buildDate" + post_message "Time: $buildTime" +} + +# Comment out this line to prevent the process from automatically executing when the file is sourced: +generateBuildID_Verilog \ No newline at end of file diff --git a/Bally - Astrocade_MiST/rtl/build_id.v b/Bally - Astrocade_MiST/rtl/build_id.v new file mode 100644 index 00000000..ab23e366 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/build_id.v @@ -0,0 +1,2 @@ +`define BUILD_DATE "180725" +`define BUILD_TIME "160612" diff --git a/Bally - Astrocade_MiST/rtl/cart.qip b/Bally - Astrocade_MiST/rtl/cart.qip new file mode 100644 index 00000000..8607b3bf --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/cart.qip @@ -0,0 +1,3 @@ +set_global_assignment -name IP_TOOL_NAME "RAM: 1-PORT" +set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "cart.v"] diff --git a/Bally - Astrocade_MiST/rtl/cart.v b/Bally - Astrocade_MiST/rtl/cart.v new file mode 100644 index 00000000..f4a633e7 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/cart.v @@ -0,0 +1,177 @@ +// megafunction wizard: %RAM: 1-PORT% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: altsyncram + +// ============================================================ +// File Name: cart.v +// Megafunction Name(s): +// altsyncram +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 13.0.1 Build 232 06/12/2013 SP 1 SJ Full Version +// ************************************************************ + + +//Copyright (C) 1991-2013 Altera Corporation +//Your use of Altera Corporation's design tools, logic functions +//and other software and tools, and its AMPP partner logic +//functions, and any output files from any of the foregoing +//(including device programming or simulation files), and any +//associated documentation or information are expressly subject +//to the terms and conditions of the Altera Program License +//Subscription Agreement, Altera MegaCore Function License +//Agreement, or other applicable license agreement, including, +//without limitation, that your use is for the sole purpose of +//programming logic devices manufactured by Altera and sold by +//Altera or its authorized distributors. Please refer to the +//applicable agreement for further details. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module cart ( + address, + clock, + data, + rden, + wren, + q); + + input [12:0] address; + input clock; + input [7:0] data; + input rden; + input wren; + output [7:0] q; +`ifndef ALTERA_RESERVED_QIS +// synopsys translate_off +`endif + tri1 clock; + tri1 rden; +`ifndef ALTERA_RESERVED_QIS +// synopsys translate_on +`endif + + wire [7:0] sub_wire0; + wire [7:0] q = sub_wire0[7:0]; + + altsyncram altsyncram_component ( + .address_a (address), + .clock0 (clock), + .data_a (data), + .wren_a (wren), + .rden_a (rden), + .q_a (sub_wire0), + .aclr0 (1'b0), + .aclr1 (1'b0), + .address_b (1'b1), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b (1'b1), + .eccstatus (), + .q_b (), + .rden_b (1'b1), + .wren_b (1'b0)); + defparam + altsyncram_component.clock_enable_input_a = "BYPASS", + altsyncram_component.clock_enable_output_a = "BYPASS", + altsyncram_component.intended_device_family = "Cyclone III", + altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO", + altsyncram_component.lpm_type = "altsyncram", + altsyncram_component.numwords_a = 8192, + altsyncram_component.operation_mode = "SINGLE_PORT", + altsyncram_component.outdata_aclr_a = "NONE", + altsyncram_component.outdata_reg_a = "CLOCK0", + altsyncram_component.power_up_uninitialized = "FALSE", + altsyncram_component.read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ", + altsyncram_component.widthad_a = 13, + altsyncram_component.width_a = 8, + altsyncram_component.width_byteena_a = 1; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +// Retrieval info: PRIVATE: AclrAddr NUMERIC "0" +// Retrieval info: PRIVATE: AclrByte NUMERIC "0" +// Retrieval info: PRIVATE: AclrData NUMERIC "0" +// Retrieval info: PRIVATE: AclrOutput NUMERIC "0" +// Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0" +// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +// Retrieval info: PRIVATE: BlankMemory NUMERIC "1" +// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +// Retrieval info: PRIVATE: Clken NUMERIC "0" +// Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1" +// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" +// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +// Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +// Retrieval info: PRIVATE: MIFfilename STRING "" +// Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "8192" +// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3" +// Retrieval info: PRIVATE: RegAddr NUMERIC "1" +// Retrieval info: PRIVATE: RegData NUMERIC "1" +// Retrieval info: PRIVATE: RegOutput NUMERIC "1" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: SingleClock NUMERIC "1" +// Retrieval info: PRIVATE: UseDQRAM NUMERIC "1" +// Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0" +// Retrieval info: PRIVATE: WidthAddr NUMERIC "13" +// Retrieval info: PRIVATE: WidthData NUMERIC "8" +// Retrieval info: PRIVATE: rden NUMERIC "1" +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +// Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192" +// Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT" +// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" +// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0" +// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ" +// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "13" +// Retrieval info: CONSTANT: WIDTH_A NUMERIC "8" +// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +// Retrieval info: USED_PORT: address 0 0 13 0 INPUT NODEFVAL "address[12..0]" +// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock" +// Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]" +// Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]" +// Retrieval info: USED_PORT: rden 0 0 0 0 INPUT VCC "rden" +// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren" +// Retrieval info: CONNECT: @address_a 0 0 13 0 address 0 0 13 0 +// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0 +// Retrieval info: CONNECT: @data_a 0 0 8 0 data 0 0 8 0 +// Retrieval info: CONNECT: @rden_a 0 0 0 0 rden 0 0 0 0 +// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0 +// Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0 +// Retrieval info: GEN_FILE: TYPE_NORMAL cart.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL cart.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL cart.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL cart.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL cart_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL cart_bb.v FALSE +// Retrieval info: LIB_FILE: altera_mf diff --git a/Bally - Astrocade_MiST/rtl/dac.vhd b/Bally - Astrocade_MiST/rtl/dac.vhd new file mode 100644 index 00000000..c133f074 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/dac.vhd @@ -0,0 +1,71 @@ +------------------------------------------------------------------------------- +-- +-- Delta-Sigma DAC +-- +-- $Id: dac.vhd,v 1.1 2006/05/10 20:57:06 arnim Exp $ +-- +-- Refer to Xilinx Application Note XAPP154. +-- +-- This DAC requires an external RC low-pass filter: +-- +-- dac_o 0---XXXXX---+---0 analog audio +-- 3k3 | +-- === 4n7 +-- | +-- GND +-- +------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; + +entity dac is + + generic ( + msbi_g : integer := 7 + ); + port ( + clk_i : in std_logic; + res_n_i : in std_logic; + dac_i : in std_logic_vector(msbi_g downto 0); + dac_o : out std_logic + ); + +end dac; + +library ieee; +use ieee.numeric_std.all; + +architecture rtl of dac is + + signal DACout_q : std_logic; + signal DeltaAdder_s, + SigmaAdder_s, + SigmaLatch_q, + DeltaB_s : unsigned(msbi_g+2 downto 0); + +begin + + DeltaB_s(msbi_g+2 downto msbi_g+1) <= SigmaLatch_q(msbi_g+2) & + SigmaLatch_q(msbi_g+2); + DeltaB_s(msbi_g downto 0) <= (others => '0'); + + DeltaAdder_s <= unsigned('0' & '0' & dac_i) + DeltaB_s; + + SigmaAdder_s <= DeltaAdder_s + SigmaLatch_q; + + seq: process (clk_i, res_n_i) + begin + if res_n_i = '0' then + SigmaLatch_q <= to_unsigned(2**(msbi_g+1), SigmaLatch_q'length); + DACout_q <= '0'; + + elsif clk_i'event and clk_i = '1' then + SigmaLatch_q <= SigmaAdder_s; + DACout_q <= SigmaLatch_q(msbi_g+2); + end if; + end process seq; + + dac_o <= DACout_q; + +end rtl; diff --git a/Bally - Astrocade_MiST/rtl/hq2x.sv b/Bally - Astrocade_MiST/rtl/hq2x.sv new file mode 100644 index 00000000..f17732b6 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/hq2x.sv @@ -0,0 +1,454 @@ +// +// +// Copyright (c) 2012-2013 Ludvig Strigeus +// Copyright (c) 2017 Sorgelig +// +// This program is GPL Licensed. See COPYING for the full license. +// +// +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on + +`define BITS_TO_FIT(N) ( \ + N <= 2 ? 0 : \ + N <= 4 ? 1 : \ + N <= 8 ? 2 : \ + N <= 16 ? 3 : \ + N <= 32 ? 4 : \ + N <= 64 ? 5 : \ + N <= 128 ? 6 : \ + N <= 256 ? 7 : \ + N <= 512 ? 8 : \ + N <=1024 ? 9 : 10 ) + +module hq2x_in #(parameter LENGTH, parameter DWIDTH) +( + input clk, + + input [AWIDTH:0] rdaddr, + input rdbuf, + output[DWIDTH:0] q, + + input [AWIDTH:0] wraddr, + input wrbuf, + input [DWIDTH:0] data, + input wren +); + + localparam AWIDTH = `BITS_TO_FIT(LENGTH); + wire [DWIDTH:0] out[2]; + assign q = out[rdbuf]; + + hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); + hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); +endmodule + + +module hq2x_out #(parameter LENGTH, parameter DWIDTH) +( + input clk, + + input [AWIDTH:0] rdaddr, + input [1:0] rdbuf, + output[DWIDTH:0] q, + + input [AWIDTH:0] wraddr, + input [1:0] wrbuf, + input [DWIDTH:0] data, + input wren +); + + localparam AWIDTH = `BITS_TO_FIT(LENGTH*2); + wire [DWIDTH:0] out[4]; + assign q = out[rdbuf]; + + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf2(clk,data,rdaddr,wraddr,wren && (wrbuf == 2),out[2]); + hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf3(clk,data,rdaddr,wraddr,wren && (wrbuf == 3),out[3]); +endmodule + + +module hq2x_buf #(parameter NUMWORDS, parameter AWIDTH, parameter DWIDTH) +( + input clock, + input [DWIDTH:0] data, + input [AWIDTH:0] rdaddress, + input [AWIDTH:0] wraddress, + input wren, + output [DWIDTH:0] q +); + + altsyncram altsyncram_component ( + .address_a (wraddress), + .clock0 (clock), + .data_a (data), + .wren_a (wren), + .address_b (rdaddress), + .q_b(q), + .aclr0 (1'b0), + .aclr1 (1'b0), + .addressstall_a (1'b0), + .addressstall_b (1'b0), + .byteena_a (1'b1), + .byteena_b (1'b1), + .clock1 (1'b1), + .clocken0 (1'b1), + .clocken1 (1'b1), + .clocken2 (1'b1), + .clocken3 (1'b1), + .data_b ({(DWIDTH+1){1'b1}}), + .eccstatus (), + .q_a (), + .rden_a (1'b1), + .rden_b (1'b1), + .wren_b (1'b0)); + defparam + altsyncram_component.address_aclr_b = "NONE", + altsyncram_component.address_reg_b = "CLOCK0", + altsyncram_component.clock_enable_input_a = "BYPASS", + altsyncram_component.clock_enable_input_b = "BYPASS", + altsyncram_component.clock_enable_output_b = "BYPASS", + altsyncram_component.intended_device_family = "Cyclone III", + altsyncram_component.lpm_type = "altsyncram", + altsyncram_component.numwords_a = NUMWORDS, + altsyncram_component.numwords_b = NUMWORDS, + altsyncram_component.operation_mode = "DUAL_PORT", + altsyncram_component.outdata_aclr_b = "NONE", + altsyncram_component.outdata_reg_b = "UNREGISTERED", + altsyncram_component.power_up_uninitialized = "FALSE", + altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE", + altsyncram_component.widthad_a = AWIDTH+1, + altsyncram_component.widthad_b = AWIDTH+1, + altsyncram_component.width_a = DWIDTH+1, + altsyncram_component.width_b = DWIDTH+1, + altsyncram_component.width_byteena_a = 1; + +endmodule + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +module DiffCheck +( + input [17:0] rgb1, + input [17:0] rgb2, + output result +); + + wire [5:0] r = rgb1[5:1] - rgb2[5:1]; + wire [5:0] g = rgb1[11:7] - rgb2[11:7]; + wire [5:0] b = rgb1[17:13] - rgb2[17:13]; + wire [6:0] t = $signed(r) + $signed(b); + wire [6:0] gx = {g[5], g}; + wire [7:0] y = $signed(t) + $signed(gx); + wire [6:0] u = $signed(r) - $signed(b); + wire [7:0] v = $signed({g, 1'b0}) - $signed(t); + + // if y is inside (-24..24) + wire y_inside = (y < 8'h18 || y >= 8'he8); + + // if u is inside (-4, 4) + wire u_inside = (u < 7'h4 || u >= 7'h7c); + + // if v is inside (-6, 6) + wire v_inside = (v < 8'h6 || v >= 8'hfA); + assign result = !(y_inside && u_inside && v_inside); +endmodule + +module InnerBlend +( + input [8:0] Op, + input [5:0] A, + input [5:0] B, + input [5:0] C, + output [5:0] O +); + + function [8:0] mul6x3; + input [5:0] op1; + input [2:0] op2; + begin + mul6x3 = 9'd0; + if(op2[0]) mul6x3 = mul6x3 + op1; + if(op2[1]) mul6x3 = mul6x3 + {op1, 1'b0}; + if(op2[2]) mul6x3 = mul6x3 + {op1, 2'b00}; + end + endfunction + + wire OpOnes = Op[4]; + wire [8:0] Amul = mul6x3(A, Op[7:5]); + wire [8:0] Bmul = mul6x3(B, {Op[3:2], 1'b0}); + wire [8:0] Cmul = mul6x3(C, {Op[1:0], 1'b0}); + wire [8:0] At = Amul; + wire [8:0] Bt = (OpOnes == 0) ? Bmul : {3'b0, B}; + wire [8:0] Ct = (OpOnes == 0) ? Cmul : {3'b0, C}; + wire [9:0] Res = {At, 1'b0} + Bt + Ct; + assign O = Op[8] ? A : Res[9:4]; +endmodule + +module Blend +( + input [5:0] rule, + input disable_hq2x, + input [17:0] E, + input [17:0] A, + input [17:0] B, + input [17:0] D, + input [17:0] F, + input [17:0] H, + output [17:0] Result +); + + reg [1:0] input_ctrl; + reg [8:0] op; + localparam BLEND0 = 9'b1_xxx_x_xx_xx; // 0: A + localparam BLEND1 = 9'b0_110_0_10_00; // 1: (A * 12 + B * 4) >> 4 + localparam BLEND2 = 9'b0_100_0_10_10; // 2: (A * 8 + B * 4 + C * 4) >> 4 + localparam BLEND3 = 9'b0_101_0_10_01; // 3: (A * 10 + B * 4 + C * 2) >> 4 + localparam BLEND4 = 9'b0_110_0_01_01; // 4: (A * 12 + B * 2 + C * 2) >> 4 + localparam BLEND5 = 9'b0_010_0_11_11; // 5: (A * 4 + (B + C) * 6) >> 4 + localparam BLEND6 = 9'b0_111_1_xx_xx; // 6: (A * 14 + B + C) >> 4 + localparam AB = 2'b00; + localparam AD = 2'b01; + localparam DB = 2'b10; + localparam BD = 2'b11; + wire is_diff; + DiffCheck diff_checker(rule[1] ? B : H, rule[0] ? D : F, is_diff); + + always @* begin + case({!is_diff, rule[5:2]}) + 1,17: {op, input_ctrl} = {BLEND1, AB}; + 2,18: {op, input_ctrl} = {BLEND1, DB}; + 3,19: {op, input_ctrl} = {BLEND1, BD}; + 4,20: {op, input_ctrl} = {BLEND2, DB}; + 5,21: {op, input_ctrl} = {BLEND2, AB}; + 6,22: {op, input_ctrl} = {BLEND2, AD}; + + 8: {op, input_ctrl} = {BLEND0, 2'bxx}; + 9: {op, input_ctrl} = {BLEND0, 2'bxx}; + 10: {op, input_ctrl} = {BLEND0, 2'bxx}; + 11: {op, input_ctrl} = {BLEND1, AB}; + 12: {op, input_ctrl} = {BLEND1, AB}; + 13: {op, input_ctrl} = {BLEND1, AB}; + 14: {op, input_ctrl} = {BLEND1, DB}; + 15: {op, input_ctrl} = {BLEND1, BD}; + + 24: {op, input_ctrl} = {BLEND2, DB}; + 25: {op, input_ctrl} = {BLEND5, DB}; + 26: {op, input_ctrl} = {BLEND6, DB}; + 27: {op, input_ctrl} = {BLEND2, DB}; + 28: {op, input_ctrl} = {BLEND4, DB}; + 29: {op, input_ctrl} = {BLEND5, DB}; + 30: {op, input_ctrl} = {BLEND3, BD}; + 31: {op, input_ctrl} = {BLEND3, DB}; + default: {op, input_ctrl} = 11'bx; + endcase + + // Setting op[8] effectively disables HQ2X because blend will always return E. + if (disable_hq2x) op[8] = 1; + end + + // Generate inputs to the inner blender. Valid combinations. + // 00: E A B + // 01: E A D + // 10: E D B + // 11: E B D + wire [17:0] Input1 = E; + wire [17:0] Input2 = !input_ctrl[1] ? A : + !input_ctrl[0] ? D : B; + + wire [17:0] Input3 = !input_ctrl[0] ? B : D; + InnerBlend inner_blend1(op, Input1[5:0], Input2[5:0], Input3[5:0], Result[5:0]); + InnerBlend inner_blend2(op, Input1[11:6], Input2[11:6], Input3[11:6], Result[11:6]); + InnerBlend inner_blend3(op, Input1[17:12], Input2[17:12], Input3[17:12], Result[17:12]); +endmodule + + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +module Hq2x #(parameter LENGTH, parameter HALF_DEPTH) +( + input clk, + input ce_x4, + input [DWIDTH:0] inputpixel, + input mono, + input disable_hq2x, + input reset_frame, + input reset_line, + input [1:0] read_y, + input [AWIDTH+1:0] read_x, + output [DWIDTH:0] outpixel +); + + +localparam AWIDTH = `BITS_TO_FIT(LENGTH); +localparam DWIDTH = HALF_DEPTH ? 8 : 17; + +wire [5:0] hqTable[256] = '{ + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, + 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 35, 35, 23, 15, 7, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, + 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 51, 35, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 35, 35, 23, 61, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 7, 35, 23, 61, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 58, 23, 15, 51, 35, 23, 61, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 39, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 39, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 35, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 43, + 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 7, 35, 23, 15, 7, 43 +}; + +reg [17:0] Prev0, Prev1, Prev2, Curr0, Curr1, Next0, Next1, Next2; +reg [17:0] A, B, D, F, G, H; +reg [7:0] pattern, nextpatt; +reg [1:0] i; +reg [7:0] y; + +wire curbuf = y[0]; +reg prevbuf = 0; +wire iobuf = !curbuf; + +wire diff0, diff1; +DiffCheck diffcheck0(Curr1, (i == 0) ? Prev0 : (i == 1) ? Curr0 : (i == 2) ? Prev2 : Next1, diff0); +DiffCheck diffcheck1(Curr1, (i == 0) ? Prev1 : (i == 1) ? Next0 : (i == 2) ? Curr2 : Next2, diff1); + +wire [7:0] new_pattern = {diff1, diff0, pattern[7:2]}; + +wire [17:0] X = (i == 0) ? A : (i == 1) ? Prev1 : (i == 2) ? Next1 : G; +wire [17:0] blend_result; +Blend blender(hqTable[nextpatt], disable_hq2x, Curr0, X, B, D, F, H, blend_result); + +reg Curr2_addr1; +reg [AWIDTH:0] Curr2_addr2; +wire [17:0] Curr2 = HALF_DEPTH ? h2rgb(Curr2tmp) : Curr2tmp; +wire [DWIDTH:0] Curr2tmp; + +reg [AWIDTH:0] wrin_addr2; +reg [DWIDTH:0] wrpix; +reg wrin_en; + +function [17:0] h2rgb; + input [8:0] v; +begin + h2rgb = mono ? {v[5:3],v[2:0], v[5:3],v[2:0], v[5:3],v[2:0]} : {v[8:6],v[8:6],v[5:3],v[5:3],v[2:0],v[2:0]}; +end +endfunction + +function [8:0] rgb2h; + input [17:0] v; +begin + rgb2h = mono ? {3'b000, v[17:15], v[14:12]} : {v[17:15], v[11:9], v[5:3]}; +end +endfunction + +hq2x_in #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_in +( + .clk(clk), + + .rdaddr(Curr2_addr2), + .rdbuf(Curr2_addr1), + .q(Curr2tmp), + + .wraddr(wrin_addr2), + .wrbuf(iobuf), + .data(wrpix), + .wren(wrin_en) +); + +reg [1:0] wrout_addr1; +reg [AWIDTH+1:0] wrout_addr2; +reg wrout_en; +reg [DWIDTH:0] wrdata; + +hq2x_out #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_out +( + .clk(clk), + + .rdaddr(read_x), + .rdbuf(read_y), + .q(outpixel), + + .wraddr(wrout_addr2), + .wrbuf(wrout_addr1), + .data(wrdata), + .wren(wrout_en) +); + +always @(posedge clk) begin + reg [AWIDTH:0] offs; + reg old_reset_line; + reg old_reset_frame; + + wrout_en <= 0; + wrin_en <= 0; + + if(ce_x4) begin + + pattern <= new_pattern; + + if(~&offs) begin + if (i == 0) begin + Curr2_addr1 <= prevbuf; + Curr2_addr2 <= offs; + end + if (i == 1) begin + Prev2 <= Curr2; + Curr2_addr1 <= curbuf; + Curr2_addr2 <= offs; + end + if (i == 2) begin + Next2 <= HALF_DEPTH ? h2rgb(inputpixel) : inputpixel; + wrpix <= inputpixel; + wrin_addr2 <= offs; + wrin_en <= 1; + end + if (i == 3) begin + offs <= offs + 1'd1; + end + + if(HALF_DEPTH) wrdata <= rgb2h(blend_result); + else wrdata <= blend_result; + + wrout_addr1 <= {curbuf, i[1]}; + wrout_addr2 <= {offs, i[1]^i[0]}; + wrout_en <= 1; + end + + if(i==3) begin + nextpatt <= {new_pattern[7:6], new_pattern[3], new_pattern[5], new_pattern[2], new_pattern[4], new_pattern[1:0]}; + {A, G} <= {Prev0, Next0}; + {B, F, H, D} <= {Prev1, Curr2, Next1, Curr0}; + {Prev0, Prev1} <= {Prev1, Prev2}; + {Curr0, Curr1} <= {Curr1, Curr2}; + {Next0, Next1} <= {Next1, Next2}; + end else begin + nextpatt <= {nextpatt[5], nextpatt[3], nextpatt[0], nextpatt[6], nextpatt[1], nextpatt[7], nextpatt[4], nextpatt[2]}; + {B, F, H, D} <= {F, H, D, B}; + end + + i <= i + 1'b1; + if(old_reset_line && ~reset_line) begin + old_reset_frame <= reset_frame; + offs <= 0; + i <= 0; + y <= y + 1'd1; + prevbuf <= curbuf; + if(old_reset_frame & ~reset_frame) begin + y <= 0; + prevbuf <= 0; + end + end + + old_reset_line <= reset_line; + end +end + +endmodule // Hq2x diff --git a/Bally - Astrocade_MiST/rtl/mist_io.v b/Bally - Astrocade_MiST/rtl/mist_io.v new file mode 100644 index 00000000..ad233a3b --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/mist_io.v @@ -0,0 +1,491 @@ +// +// mist_io.v +// +// mist_io for the MiST board +// http://code.google.com/p/mist-board/ +// +// Copyright (c) 2014 Till Harbaum +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +/////////////////////////////////////////////////////////////////////// + +// +// Use buffer to access SD card. It's time-critical part. +// Made module synchroneous with 2 clock domains: clk_sys and SPI_SCK +// (Sorgelig) +// +// for synchronous projects default value for PS2DIV is fine for any frequency of system clock. +// clk_ps2 = clk_sys/(PS2DIV*2) +// + +module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) +( + + // parameter STRLEN and the actual length of conf_str have to match + input [(8*STRLEN)-1:0] conf_str, + + // Global clock. It should be around 100MHz (higher is better). + input clk_sys, + + // Global SPI clock from ARM. 24MHz + input SPI_SCK, + + input CONF_DATA0, + input SPI_SS2, + output SPI_DO, + input SPI_DI, + + output reg [7:0] joystick_0, + output reg [7:0] joystick_1, + output reg [15:0] joystick_analog_0, + output reg [15:0] joystick_analog_1, + output [1:0] buttons, + output [1:0] switches, + output scandoubler_disable, + output ypbpr, + + output reg [31:0] status, + + // SD config + input sd_conf, + input sd_sdhc, + output img_mounted, // signaling that new image has been mounted + output reg [31:0] img_size, // size of image in bytes + + // SD block level access + input [31:0] sd_lba, + input sd_rd, + input sd_wr, + output reg sd_ack, + output reg sd_ack_conf, + + // SD byte level access. Signals for 2-PORT altsyncram. + output reg [8:0] sd_buff_addr, + output reg [7:0] sd_buff_dout, + input [7:0] sd_buff_din, + output reg sd_buff_wr, + + // ps2 keyboard emulation + output ps2_kbd_clk, + output reg ps2_kbd_data, + output ps2_mouse_clk, + output reg ps2_mouse_data, + input ps2_caps_led, + + // ARM -> FPGA download + output reg ioctl_download = 0, // signal indicating an active download + output reg [7:0] ioctl_index, // menu index used to upload the file + output ioctl_wr, + output reg [24:0] ioctl_addr, + output reg [7:0] ioctl_dout +); + +reg [7:0] b_data; +reg [6:0] sbuf; +reg [7:0] cmd; +reg [2:0] bit_cnt; // counts bits 0-7 0-7 ... +reg [9:0] byte_cnt; // counts bytes +reg [7:0] but_sw; +reg [2:0] stick_idx; + +reg mount_strobe = 0; +assign img_mounted = mount_strobe; + +assign buttons = but_sw[1:0]; +assign switches = but_sw[3:2]; +assign scandoubler_disable = but_sw[4]; +assign ypbpr = but_sw[5]; + +wire [7:0] spi_dout = { sbuf, SPI_DI}; + +// this variant of user_io is for 8 bit cores (type == a4) only +wire [7:0] core_type = 8'ha4; + +// command byte read by the io controller +wire [7:0] sd_cmd = { 4'h5, sd_conf, sd_sdhc, sd_wr, sd_rd }; + +reg spi_do; +assign SPI_DO = CONF_DATA0 ? 1'bZ : spi_do; + +wire [7:0] kbd_led = { 2'b01, 4'b0000, ps2_caps_led, 1'b1}; + +// drive MISO only when transmitting core id +always@(negedge SPI_SCK) begin + if(!CONF_DATA0) begin + // first byte returned is always core type, further bytes are + // command dependent + if(byte_cnt == 0) begin + spi_do <= core_type[~bit_cnt]; + + end else begin + case(cmd) + // reading config string + 8'h14: begin + // returning a byte from string + if(byte_cnt < STRLEN + 1) spi_do <= conf_str[{STRLEN - byte_cnt,~bit_cnt}]; + else spi_do <= 0; + end + + // reading sd card status + 8'h16: begin + if(byte_cnt == 1) spi_do <= sd_cmd[~bit_cnt]; + else if((byte_cnt >= 2) && (byte_cnt < 6)) spi_do <= sd_lba[{5-byte_cnt, ~bit_cnt}]; + else spi_do <= 0; + end + + // reading sd card write data + 8'h18: + spi_do <= b_data[~bit_cnt]; + + // reading keyboard LED status + 8'h1f: + spi_do <= kbd_led[~bit_cnt]; + + default: + spi_do <= 0; + endcase + end + end +end + +reg b_wr2,b_wr3; +always @(negedge clk_sys) begin + b_wr3 <= b_wr2; + sd_buff_wr <= b_wr3; +end + +// SPI receiver +always@(posedge SPI_SCK or posedge CONF_DATA0) begin + + if(CONF_DATA0) begin + b_wr2 <= 0; + bit_cnt <= 0; + byte_cnt <= 0; + sd_ack <= 0; + sd_ack_conf <= 0; + end else begin + b_wr2 <= 0; + + sbuf <= spi_dout[6:0]; + bit_cnt <= bit_cnt + 1'd1; + if(bit_cnt == 5) begin + if (byte_cnt == 0) sd_buff_addr <= 0; + if((byte_cnt != 0) & (sd_buff_addr != 511)) sd_buff_addr <= sd_buff_addr + 1'b1; + if((byte_cnt == 1) & ((cmd == 8'h17) | (cmd == 8'h19))) sd_buff_addr <= 0; + end + + // finished reading command byte + if(bit_cnt == 7) begin + if(~&byte_cnt) byte_cnt <= byte_cnt + 8'd1; + if(byte_cnt == 0) begin + cmd <= spi_dout; + + if(spi_dout == 8'h19) begin + sd_ack_conf <= 1; + sd_buff_addr <= 0; + end + if((spi_dout == 8'h17) || (spi_dout == 8'h18)) begin + sd_ack <= 1; + sd_buff_addr <= 0; + end + if(spi_dout == 8'h18) b_data <= sd_buff_din; + + mount_strobe <= 0; + + end else begin + + case(cmd) + // buttons and switches + 8'h01: but_sw <= spi_dout; + 8'h02: joystick_0 <= spi_dout; + 8'h03: joystick_1 <= spi_dout; + + // store incoming ps2 mouse bytes + 8'h04: begin + ps2_mouse_fifo[ps2_mouse_wptr] <= spi_dout; + ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1; + end + + // store incoming ps2 keyboard bytes + 8'h05: begin + ps2_kbd_fifo[ps2_kbd_wptr] <= spi_dout; + ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1; + end + + 8'h15: status[7:0] <= spi_dout; + + // send SD config IO -> FPGA + // flag that download begins + // sd card knows data is config if sd_dout_strobe is asserted + // with sd_ack still being inactive (low) + 8'h19, + // send sector IO -> FPGA + // flag that download begins + 8'h17: begin + sd_buff_dout <= spi_dout; + b_wr2 <= 1; + end + + 8'h18: b_data <= sd_buff_din; + + // joystick analog + 8'h1a: begin + // first byte is joystick index + if(byte_cnt == 1) stick_idx <= spi_dout[2:0]; + else if(byte_cnt == 2) begin + // second byte is x axis + if(stick_idx == 0) joystick_analog_0[15:8] <= spi_dout; + else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_dout; + end else if(byte_cnt == 3) begin + // third byte is y axis + if(stick_idx == 0) joystick_analog_0[7:0] <= spi_dout; + else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_dout; + end + end + + // notify image selection + 8'h1c: mount_strobe <= 1; + + // send image info + 8'h1d: if(byte_cnt<5) img_size[(byte_cnt-1)<<3 +:8] <= spi_dout; + + // status, 32bit version + 8'h1e: if(byte_cnt<5) status[(byte_cnt-1)<<3 +:8] <= spi_dout; + default: ; + endcase + end + end + end +end + + +/////////////////////////////// PS2 /////////////////////////////// +// 8 byte fifos to store ps2 bytes +localparam PS2_FIFO_BITS = 3; + +reg clk_ps2; +always @(negedge clk_sys) begin + integer cnt; + cnt <= cnt + 1'd1; + if(cnt == PS2DIV) begin + clk_ps2 <= ~clk_ps2; + cnt <= 0; + end +end + +// keyboard +reg [7:0] ps2_kbd_fifo[1<= 1)&&(ps2_kbd_tx_state < 9)) begin + ps2_kbd_data <= ps2_kbd_tx_byte[0]; // data bits + ps2_kbd_tx_byte[6:0] <= ps2_kbd_tx_byte[7:1]; // shift down + if(ps2_kbd_tx_byte[0]) + ps2_kbd_parity <= !ps2_kbd_parity; + end + + // transmission of parity + if(ps2_kbd_tx_state == 9) ps2_kbd_data <= ps2_kbd_parity; + + // transmission of stop bit + if(ps2_kbd_tx_state == 10) ps2_kbd_data <= 1; // stop bit is 1 + + // advance state machine + if(ps2_kbd_tx_state < 11) ps2_kbd_tx_state <= ps2_kbd_tx_state + 1'd1; + else ps2_kbd_tx_state <= 0; + end + end +end + +// mouse +reg [7:0] ps2_mouse_fifo[1<= 1)&&(ps2_mouse_tx_state < 9)) begin + ps2_mouse_data <= ps2_mouse_tx_byte[0]; // data bits + ps2_mouse_tx_byte[6:0] <= ps2_mouse_tx_byte[7:1]; // shift down + if(ps2_mouse_tx_byte[0]) + ps2_mouse_parity <= !ps2_mouse_parity; + end + + // transmission of parity + if(ps2_mouse_tx_state == 9) ps2_mouse_data <= ps2_mouse_parity; + + // transmission of stop bit + if(ps2_mouse_tx_state == 10) ps2_mouse_data <= 1; // stop bit is 1 + + // advance state machine + if(ps2_mouse_tx_state < 11) ps2_mouse_tx_state <= ps2_mouse_tx_state + 1'd1; + else ps2_mouse_tx_state <= 0; + end + end +end + + +/////////////////////////////// DOWNLOADING /////////////////////////////// + +reg [7:0] data_w; +reg [24:0] addr_w; +reg rclk = 0; + +localparam UIO_FILE_TX = 8'h53; +localparam UIO_FILE_TX_DAT = 8'h54; +localparam UIO_FILE_INDEX = 8'h55; + +// data_io has its own SPI interface to the io controller +always@(posedge SPI_SCK, posedge SPI_SS2) begin + reg [6:0] sbuf; + reg [7:0] cmd; + reg [4:0] cnt; + reg [24:0] addr; + + if(SPI_SS2) cnt <= 0; + else begin + rclk <= 0; + + // don't shift in last bit. It is evaluated directly + // when writing to ram + if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI}; + + // increase target address after write + if(rclk) addr <= addr + 1'd1; + + // count 0-7 8-15 8-15 ... + if(cnt < 15) cnt <= cnt + 1'd1; + else cnt <= 8; + + // finished command byte + if(cnt == 7) cmd <= {sbuf, SPI_DI}; + + // prepare/end transmission + if((cmd == UIO_FILE_TX) && (cnt == 15)) begin + // prepare + if(SPI_DI) begin + addr <= 0; + ioctl_download <= 1; + end else begin + addr_w <= addr; + ioctl_download <= 0; + end + end + + // command 0x54: UIO_FILE_TX + if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin + addr_w <= addr; + data_w <= {sbuf, SPI_DI}; + rclk <= 1; + end + + // expose file (menu) index + if((cmd == UIO_FILE_INDEX) && (cnt == 15)) ioctl_index <= {sbuf, SPI_DI}; + end +end + +assign ioctl_wr = |ioctl_wrd; +reg [1:0] ioctl_wrd; + +always@(negedge clk_sys) begin + reg rclkD, rclkD2; + + rclkD <= rclk; + rclkD2 <= rclkD; + ioctl_wrd<= {ioctl_wrd[0],1'b0}; + + if(rclkD & ~rclkD2) begin + ioctl_dout <= data_w; + ioctl_addr <= addr_w; + ioctl_wrd <= 2'b11; + end +end + +endmodule diff --git a/Bally - Astrocade_MiST/rtl/osd.v b/Bally - Astrocade_MiST/rtl/osd.v new file mode 100644 index 00000000..c62c10af --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/osd.v @@ -0,0 +1,179 @@ +// A simple OSD implementation. Can be hooked up between a cores +// VGA output and the physical VGA pins + +module osd ( + // OSDs pixel clock, should be synchronous to cores pixel clock to + // avoid jitter. + input clk_sys, + + // SPI interface + input SPI_SCK, + input SPI_SS3, + input SPI_DI, + + // VGA signals coming from core + input [5:0] R_in, + input [5:0] G_in, + input [5:0] B_in, + input HSync, + input VSync, + + // VGA signals going to video connector + output [5:0] R_out, + output [5:0] G_out, + output [5:0] B_out +); + +parameter OSD_X_OFFSET = 10'd0; +parameter OSD_Y_OFFSET = 10'd0; +parameter OSD_COLOR = 3'd0; + +localparam OSD_WIDTH = 10'd256; +localparam OSD_HEIGHT = 10'd128; + +// ********************************************************************************* +// spi client +// ********************************************************************************* + +// this core supports only the display related OSD commands +// of the minimig +reg osd_enable; +(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[2047:0]; // the OSD buffer itself + +// the OSD has its own SPI interface to the io controller +always@(posedge SPI_SCK, posedge SPI_SS3) begin + reg [4:0] cnt; + reg [10:0] bcnt; + reg [7:0] sbuf; + reg [7:0] cmd; + + if(SPI_SS3) begin + cnt <= 0; + bcnt <= 0; + end else begin + sbuf <= {sbuf[6:0], SPI_DI}; + + // 0:7 is command, rest payload + if(cnt < 15) cnt <= cnt + 1'd1; + else cnt <= 8; + + if(cnt == 7) begin + cmd <= {sbuf[6:0], SPI_DI}; + + // lower three command bits are line address + bcnt <= {sbuf[1:0], SPI_DI, 8'h00}; + + // command 0x40: OSDCMDENABLE, OSDCMDDISABLE + if(sbuf[6:3] == 4'b0100) osd_enable <= SPI_DI; + end + + // command 0x20: OSDCMDWRITE + if((cmd[7:3] == 5'b00100) && (cnt == 15)) begin + osd_buffer[bcnt] <= {sbuf[6:0], SPI_DI}; + bcnt <= bcnt + 1'd1; + end + end +end + +// ********************************************************************************* +// video timing and sync polarity anaylsis +// ********************************************************************************* + +// horizontal counter +reg [9:0] h_cnt; +reg [9:0] hs_low, hs_high; +wire hs_pol = hs_high < hs_low; +wire [9:0] dsp_width = hs_pol ? hs_low : hs_high; + +// vertical counter +reg [9:0] v_cnt; +reg [9:0] vs_low, vs_high; +wire vs_pol = vs_high < vs_low; +wire [9:0] dsp_height = vs_pol ? vs_low : vs_high; + +wire doublescan = (dsp_height>350); + +reg ce_pix; +always @(negedge clk_sys) begin + integer cnt = 0; + integer pixsz, pixcnt; + reg hs; + + cnt <= cnt + 1; + hs <= HSync; + + pixcnt <= pixcnt + 1; + if(pixcnt == pixsz) pixcnt <= 0; + ce_pix <= !pixcnt; + + if(hs && ~HSync) begin + cnt <= 0; + pixsz <= (cnt >> 9) - 1; + pixcnt <= 0; + ce_pix <= 1; + end +end + +always @(posedge clk_sys) begin + reg hsD, hsD2; + reg vsD, vsD2; + + if(ce_pix) begin + // bring hsync into local clock domain + hsD <= HSync; + hsD2 <= hsD; + + // falling edge of HSync + if(!hsD && hsD2) begin + h_cnt <= 0; + hs_high <= h_cnt; + end + + // rising edge of HSync + else if(hsD && !hsD2) begin + h_cnt <= 0; + hs_low <= h_cnt; + v_cnt <= v_cnt + 1'd1; + end else begin + h_cnt <= h_cnt + 1'd1; + end + + vsD <= VSync; + vsD2 <= vsD; + + // falling edge of VSync + if(!vsD && vsD2) begin + v_cnt <= 0; + vs_high <= v_cnt; + end + + // rising edge of VSync + else if(vsD && !vsD2) begin + v_cnt <= 0; + vs_low <= v_cnt; + end + end +end + +// area in which OSD is being displayed +wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET; +wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH; +wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<> 1) + OSD_Y_OFFSET; +wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<= h_osd_start) && (h_cnt < h_osd_end) && + (VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); + +reg [7:0] osd_byte; +always @(posedge clk_sys) if(ce_pix) osd_byte <= osd_buffer[{doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt[7:0]}]; + +wire osd_pixel = osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; + +assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]}; +assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]}; +assign B_out = !osd_de ? B_in : {osd_pixel, osd_pixel, OSD_COLOR[0], B_in[5:3]}; + +endmodule diff --git a/Bally - Astrocade_MiST/rtl/pll.qip b/Bally - Astrocade_MiST/rtl/pll.qip new file mode 100644 index 00000000..68624e41 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/pll.qip @@ -0,0 +1,4 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "13.0" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/Bally - Astrocade_MiST/rtl/pll.vhd b/Bally - Astrocade_MiST/rtl/pll.vhd new file mode 100644 index 00000000..c9a1d016 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/pll.vhd @@ -0,0 +1,414 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 13.0.1 Build 232 06/12/2013 SP 1 SJ Full Version +-- ************************************************************ + + +--Copyright (C) 1991-2013 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY pll IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC + ); +END pll; + + +ARCHITECTURE SYN OF pll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire6_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire6 : 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; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + width_clock : NATURAL + ); + PORT ( + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire6_bv(0 DOWNTO 0) <= "0"; + sub_wire6 <= To_stdlogicvector(sub_wire6_bv); + sub_wire3 <= sub_wire0(2); + sub_wire2 <= sub_wire0(0); + sub_wire1 <= sub_wire0(1); + c1 <= sub_wire1; + c0 <= sub_wire2; + c2 <= sub_wire3; + sub_wire4 <= inclk0; + sub_wire5 <= sub_wire6(0 DOWNTO 0) & sub_wire4; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 52, + clk0_duty_cycle => 50, + clk0_multiply_by => 55, + clk0_phase_shift => "0", + clk1_divide_by => 104, + clk1_duty_cycle => 50, + clk1_multiply_by => 55, + clk1_phase_shift => "0", + clk2_divide_by => 208, + clk2_duty_cycle => 50, + clk2_multiply_by => 55, + clk2_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 37037, + intended_device_family => "Cyclone III", + lpm_hint => "CBX_MODULE_PREFIX=pll", + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_UNUSED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_UNUSED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_UNUSED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + width_clock => 5 + ) + PORT MAP ( + inclk => sub_wire5, + clk => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "52" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "104" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "208" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "28.557692" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "14.278846" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "7.139423" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "27.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "55" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "55" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "55" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "28.57120000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "14.28560000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "7.14280000" +-- 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_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "52" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "55" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "104" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "55" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "208" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "55" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf +-- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Bally - Astrocade_MiST/rtl/ps2kbd.vhd b/Bally - Astrocade_MiST/rtl/ps2kbd.vhd new file mode 100644 index 00000000..028989f8 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/ps2kbd.vhd @@ -0,0 +1,212 @@ +-- +-- PS/2 serial port, input only +-- +-- Version : 0242 +-- +-- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) +-- +-- All rights reserved +-- +-- Redistribution and use in source and synthezised forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- Redistributions in synthesized form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- Neither the name of the author nor the names of other contributors may +-- be used to endorse or promote products derived from this software without +-- specific prior written permission. +-- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE +-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. +-- +-- Please report bugs to the author, but before you do so, please +-- make sure that this is not a derivative work and that +-- you have the latest version of this file. +-- +-- The latest version of this file can be found at: +-- http://www.fpgaarcade.com +-- +-- Limitations : +-- +-- File history : +-- +-- 0242 : First release +-- extended key handling added by MIKEJ +-- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +entity ps2kbd is + port( + Rst_n : in std_logic; + Clk : in std_logic; + Tick1us : in std_logic; + PS2_Clk : in std_logic; + PS2_Data : in std_logic; + Press : out std_logic; + Release : out std_logic; + Reset : out std_logic; + ScanE0 : out std_logic; + ScanCode : out std_logic_vector(7 downto 0)); +end ps2kbd; + +architecture rtl of ps2kbd is + + signal PS2_Sample : std_logic; + signal PS2_Data_s : std_logic; + + signal RX_Bit_Cnt : unsigned(3 downto 0); + signal RX_Byte : unsigned(2 downto 0); + signal RX_ShiftReg : std_logic_vector(7 downto 0); + signal RX_Release : std_logic; + signal RX_Received : std_logic; + signal RX_E0 : std_logic; + +begin + + ScanCode <= RX_ShiftReg; + + process (Clk, Rst_n) + variable PS2_Data_r : std_logic_vector(1 downto 0); + variable PS2_Clk_r : std_logic_vector(1 downto 0); + variable PS2_Clk_State : std_logic; + begin + if Rst_n = '0' then + PS2_Sample <= '0'; + PS2_Data_s <= '0'; + PS2_Data_r := "11"; + PS2_Clk_r := "11"; + PS2_Clk_State := '1'; + elsif Clk'event and Clk = '1' then + if Tick1us = '1' then + PS2_Sample <= '0'; + + -- Deglitch + if PS2_Data_r = "00" then + PS2_Data_s <= '0'; + end if; + if PS2_Data_r = "11" then + PS2_Data_s <= '1'; + end if; + if PS2_Clk_r = "00" then + if PS2_Clk_State = '1' then + PS2_Sample <= '1'; + end if; + PS2_Clk_State := '0'; + end if; + if PS2_Clk_r = "11" then + PS2_Clk_State := '1'; + end if; + + -- Double synchronise + PS2_Data_r(1) := PS2_Data_r(0); + PS2_Clk_r(1) := PS2_Clk_r(0); + PS2_Data_r(0) := PS2_Data; + PS2_Clk_r(0) := PS2_Clk; + end if; + end if; + end process; + + process (Clk, Rst_n) + variable Cnt : integer; + begin + if Rst_n = '0' then + RX_Bit_Cnt <= (others => '0'); + RX_ShiftReg <= (others => '0'); + RX_Received <= '0'; + Cnt := 0; + elsif Clk'event and Clk = '1' then + RX_Received <= '0'; + if Tick1us = '1' then + + if PS2_Sample = '1' then + if RX_Bit_Cnt = "0000" then + if PS2_Data_s = '0' then -- Start bit + RX_Bit_Cnt <= RX_Bit_Cnt + 1; + end if; + elsif RX_Bit_Cnt = "1001" then -- Parity bit + RX_Bit_Cnt <= RX_Bit_Cnt + 1; + -- Ignoring parity + elsif RX_Bit_Cnt = "1010" then -- Stop bit + if PS2_Data_s = '1' then + RX_Received <= '1'; + end if; + RX_Bit_Cnt <= "0000"; + else + RX_Bit_Cnt <= RX_Bit_Cnt + 1; + RX_ShiftReg(6 downto 0) <= RX_ShiftReg(7 downto 1); + RX_ShiftReg(7) <= PS2_Data_s; + end if; + end if; + + -- TimeOut + if PS2_Sample = '1' then + Cnt := 0; + elsif Cnt = 127 then + RX_Bit_Cnt <= "0000"; + Cnt := 0; + else + Cnt := Cnt + 1; + end if; + end if; + end if; + end process; + + process (Clk, Rst_n) + begin + if Rst_n = '0' then + Press <= '0'; + Release <= '0'; + Reset <= '0'; + RX_Byte <= (others => '0'); + RX_Release <= '0'; + ScanE0 <= '0'; + RX_E0 <= '0'; + elsif Clk'event and Clk = '1' then + Press <= '0'; + Release <= '0'; + Reset <= '0'; + if RX_Received = '1' then + RX_Byte <= RX_Byte + 1; + if RX_ShiftReg = x"F0" then + RX_Release <= '1'; + elsif RX_ShiftReg = x"E0" then + RX_E0 <= '1'; + else + ScanE0 <= RX_E0; + RX_E0 <= '0'; + + RX_Release <= '0'; + -- Normal key press + if RX_Release = '0' then + Press <= '1'; + end if; + -- Normal key release + if RX_Release = '1' then + Release <= '1'; + end if; + end if; + if RX_ShiftReg = x"aa" then + Reset <= '1'; + end if; + end if; + end if; + end process; + +end; diff --git a/Bally - Astrocade_MiST/rtl/roms/BIOS3159.BIN b/Bally - Astrocade_MiST/rtl/roms/BIOS3159.BIN new file mode 100644 index 0000000000000000000000000000000000000000..9b587b7a9b669278e3363428b326981b40f178c3 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/Bally - Astrocade_MiST/rtl/roms/balcheck.bin b/Bally - Astrocade_MiST/rtl/roms/balcheck.bin new file mode 100644 index 0000000000000000000000000000000000000000..97ea951c329f7db03d4f57de74ce67a65c45c3c7 GIT binary patch literal 2048 zcmZuyZ*1Gf6+cR}OuLFi+LC-tRrXG#EVk=r$w}I^l~}v+zhqnJdJep%K!X88tq((; zv_LF5j++6&R$!mDVITITFwkz=0<4VD58Ki;TWUZsD`;JDh%t>-hh&Hcr_-`lG15j8 zxjV`&ilPq`fA78fz4yp_kEiwDq90MQhQi??aP+*Zr4~~$)D-M!3EgkUN+@j)lu+1? zl(dH&?(Ni|<9qvJifXka)r>($)F6ygTVg9yDJW9?23vb!uvXj(8?{)*qWKQaxB%!Z*0 zB!nYqxiNW$>@i8W@k}emRo_WAYfB{*I$c7&HQ5((S!_CVw$|bR!T^{*oKyCoJ6-7Z zlJhF+T|bPM9ZlMHhvPr{!Y188$W|#0OlVzz(@!Lxc0MM z?dSLtE5FtPbzH>o8_II~k{|u&D-?WMtmFR)hWiRbi?3ohz5?Dv{q+^@k7!RtOutji8V--juv_lJ(FEM5kC31wPT|9e5Lcur_Fh7Jl?qNb zD|Z)%I(D~Gc_jT2+*=$nd%ArNnizBJ7kALA|1WAHWWI05p>Ir*ik!X4}{{4g5#o-)Qiw9aWmk}YJmX46OMEd z9|;gY>DD8phYj#FeqRX)p}QKd<4vZ(#_PIE21txVmWW6s(ntD9^a=4|vsSFUsP)pc z=a5iqL8pYcV6C-&50?A!5d{v&5u8_`I5oB(xb2-C`=^Hh`_Z`CR=A{1pC&H8t-wc$ z6kP>o^a@o36>9qXRFPD8U#(EXNTuVYuM!uE>^sBvtFYTsZYnXK?gm`Z$)Qi8=+<^? zd;G}k4BG$Iu|t!yXlndBU}k)D42_PB&49U?L$l)@)gujmfi!K*%ScrG)MOH3LGmT2ba5n$4W0NR8wZHtfi-Fv{ug)p$(1H2X-RT&NkpY%`*KD&!Q zS3UQ6)d~gcc#qE=ww&HO-%6Id%W3P%b=@8Qx8WWXkkgMoE;u6MOegZubIHl-MDpsp z)=mlaxCf>tg1@Jm>M3ui^q8qmC+Xp(J5lYLG&NDpB@6TroM+ys_E%~yUzq=pHrv|i zxXQbXg^u|a)bGsoAGCN-`v6PKQQ9ftQVPpcm5 z@`(;@FzInWa+Jw=CN7iD vweQEB_Fcc;=_+lW7TlfEU$S967Hq0?iFLE!K;*xAb^G1rzWyul#>4*yj>`@Y literal 0 HcmV?d00001 diff --git a/Bally - Astrocade_MiST/rtl/roms/balcheck.hex b/Bally - Astrocade_MiST/rtl/roms/balcheck.hex new file mode 100644 index 00000000..8799da19 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/roms/balcheck.hex @@ -0,0 +1,129 @@ +:10000000C3AD2087878787C92F0F0F2F0055AAFF01 +:10001000282777271620F308DB15A72029DB16A74A +:100020002030DB17A7200FDB14A72836FE01CA27D4 +:1000300026FE02CABA27FE01CAD925FE02CA4F26E9 +:10004000FE102818181CFE01CA1126FE02CA4827F5 +:100050001810FE01CAEA25FE02CA7326D979E60FF6 +:100060004FD9D9147AFE3C20401600CB4320117999 +:10007000FE8420043EB1180978A720053EA018018F +:10008000AFD3FF1C7BFE3C20201E00247CFE3C20C6 +:100090001826002C7DCD0320FEA0200478C606473C +:1000A0000478FE992003AF476FD908FBC9F3D9AF95 +:1000B000470E81575F676FD93EAAD3FF3E00D30832 +:1000C0003EC8D30AAF0E14ED78A720080C79FE18AD +:1000D000280918F31E0121EF23186CFD21E220C32B +:1000E000642118044E50004F31C84F3E08D30E21F2 +:1000F00014207CED477DD30DAFD30FED5EFB1601D1 +:10010000CDCF25F3D97AA7200E7BA7200AD91E02CE +:100110000EFF21EF2318300E80D9FB0100202100B3 +:1001200000AF8657230D20FA0520F77AFEA4200A97 +:10013000C34A217CFE28281218E71E037CD6084FEC +:1001400020020EA0214A21C3E623F3FD21512118EC +:100150001318044E50004FFBFD215E21180618684D +:100160003F4F00400E000601FD6605FD6E04707EE7 +:10017000A82806DD217921184B237CFDBE0320EE43 +:100180002B7CFDBE0228167EA82806DD21912118B1 +:1001900033782F77AE28E9DD2180211827237CFDD5 +:1001A000BE03280F782FAE2806DD21AF211815AF2A +:1001B0007718EACB2030B179A72002FDE91E04218F +:1001C000C821184FB14FDDE9FD211008DD2110488D +:1001D000AF4F060179D30CAF676FFD77007868FDEC +:1001E0007700AFFD770179A7280BCB1DCB1CCB1D6A +:1001F000CB1C3D20F5DD7E00BD2013DD7E01BC2043 +:100200000DCB1030CF793C4FFE0420C618071E05D9 +:1002100021152218333E40D30C111048214A220EDA +:100220000179FD77001ABE201A23CB2130F3CB19B8 +:10023000792FFD77001ABE200723CB3930F2181A28 +:10024000792F4F1E07215A2218474080102004089A +:100250000102FDFEF7FBDFEF7FBF3E08D30CAF4F7F +:1002600057210C20D31906047EFD7700FD7701DDB0 +:100270007E00BA2017DD7E01BA20112310EA7AC66B +:10028000555779C6054FFE1420DA18071E12219320 +:100290002218383E10CDCE22CDE322FE01281CFECE +:1002A0000228143E20CDCE222CCDE322FE012812BE +:1002B000FE022812C33A231E1018021E0821A32290 +:1002C00018091E0918021E11213A23C3E623D30C74 +:1002D000DB08210401AF575F4F6F0604C93E01C917 +:1002E0003E02C9CD3323CD3323CD3323AFBD20040C +:1002F0007AB118027AA9DDBE0020E279A72807DBCF +:1003000008BB20DC1805DB08B920D579844F10D351 +:10031000010004CB3BCB24CB2430C8CB147BA720DB +:10032000041E881802CB3B7AC655570100041E886C +:1003300030B1C9DD7200FD7100C906FFDB0EDB0FB5 +:100340000E10ED78A7C2C8230C79FE1420F4DB143C +:10035000DB15DB16DB170E1CED78FEFF20710C7928 +:10036000FE2020F410D606FF3E00D30878D300D339 +:1003700004D301D305D302D306D303D3073E14D34A +:10038000093EC8D30A5021DE2306080E0BEDB32127 +:10039000D62306080E18EDB33EFFD317D316D31499 +:1003A0007AD310D311D312D313D3154210BAF3D981 +:1003B00079CB7F280A0C79FE842008D9FB18FEA788 +:1003C00020010CD9FBC31B211E13214E2318171E1D +:1003D00014216823181048443400FFFDF5F5DB9222 +:1003E0004900DB924900F3D979D9E60FA728507B61 +:1003F000D3FF21F723183979D3FF21FF2318313E8A +:10040000CBD3FF21082418283EDED3FF2111241866 +:100410001FD978D9212024A720023EA0D3FF18108D +:100420003EAAD3FF21292418073EAAD3FF21EF2398 +:1004300016023EFF06FF10FE3D20F91520F4E9FBF1 +:10044000E9454E545220342D4449475420484558DC +:1004500000524541442041444452005752495445BA +:10046000204144445200454E545220322D444947C5 +:100470005420484558005245414420504F525400A2 +:10048000575249544520504F52540053545254200F +:100490004144445200454E545220322D4449475461 +:1004A0002048455800444154410042595445205485 +:1004B0004F205752495445002A2A002A2A2A2A0046 +:1004C00030453D30463D20202020202031303D3138 +:1004D000313D31323D31333D31343D31353D3136C1 +:1004E0003D31373D20202031433D31443D31453DB4 +:1004F00031463D22474F2220544F2052554E00AFE7 +:10050000D304D300D3093E0FD301D302D303FF1B7F +:100510000040B00F00C9FF3504280C4124C9FF3545 +:1005200004320C5124C9FF3504280C6624C9FF3558 +:1005300004280C9524FF3504320CAA24C90E0CDDC6 +:10054000210D02FF32C9FE0AFA4D25C607C630C981 +:10055000D5E53EFF32EC4FFF430820FE1320F8782C +:10056000FE102001AFFE14F26E2547CD4625E1D1E5 +:10057000C9F5A72009FF3548460CB8241807FF35F0 +:1005800048460CBB24210000CD5025FE18283EFE15 +:100590001528E2114846CD3D2578CD032067CD5082 +:1005A00025FE1528D0CD3D257CB067F1A72001C9D7 +:1005B000F5CD5025FE1528C6CD3D2578CD03206FFD +:1005C000CD5025FE1528B7CD3D257DB06FF1C93E34 +:1005D000FF06FF10FE3D20F9C9CDFF24CD1625CD25 +:1005E0001E253E01CD71257E18FDCDFF24CD2E2583 +:1005F000AFCD7125E57CD3FFCDCF25CDFF24CD1622 +:1006000025FF3504320C5B243E01CD7125C17018E5 +:10061000FDCDFF24CD2625FF3504320C7624AFCD49 +:1006200071254CED7818FCCDFF24CD2625FF35042F +:10063000320C8024AFCD7125E57CD3FFCDCF25CD05 +:10064000FF24CD2E25AFCD7125C148ED6118FCCD1D +:10065000FF24CD2E25AFCD7125E57CD3FFCDCF2551 +:10066000CDFF24CD1625CD1E253E01CD7125C170AF +:100670007E18FCCDFF2421C02411040ACDFB2621C5 +:10068000D824115000CDFB2608AF082110207CEDA6 +:10069000477DD30D3E03D30EFBDB10111C32CD1171 +:1006A00027DB11111C3CCD1127DB12111C46CD118B +:1006B00027DB13111C50CD1127DB14116800CD115D +:1006C00027DB1511680ACD1127DB16116814CD112F +:1006D00027DB1711681ECD1127DB1C116832CD11E5 +:1006E00027DB1D11683CCD1127DB1E116846CD119B +:1006F00027DB1F116850CD1127189E06037ECD3DC4 +:10070000252310F97BD6185F7AC60A57FE5A20EBCC +:10071000C967E6F00F0F0F0FCD4625CD3D257CE6CE +:100720000FCD4625CD3D25C9F308A7281708DB0EB8 +:10073000CB3F111C0ACD1127DB0FD608111C14CD9D +:100740001127FBC93C0818FA11004021A627011403 +:1007500000EDB021004001DC0FEDB02112207CED56 +:10076000477DD30D3E14D309010FF811002021005D +:10077000503E04ED59FB76F3D3003CD3013CD30249 +:100780003CD303A0D3043CD3053CD3063CD307C6DB +:10079000091C1C1C1C1C1C15C2A0271100203E0497 +:1007A000ED59DDE1FB76000000000055555555552B +:1007B000AAAAAAAAAAFFFFFFFFFFCDFF24CD1625F4 +:1007C000FF3504320C8B243E01CD7125E5E5CDCFFC +:1007D00025CDFF24FF3504280C9524FF3504320C69 +:1007E000A524FF35045A0CF324CDCF25AFCD7125B8 +:1007F00078FE182003E1E1E9D17C1213D518EA371D +:00000001FF diff --git a/Bally - Astrocade_MiST/rtl/roms/bally_bios_0.vhd b/Bally - Astrocade_MiST/rtl/roms/bally_bios_0.vhd new file mode 100644 index 00000000..a9e484ff --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/roms/bally_bios_0.vhd @@ -0,0 +1,493 @@ +-- generated with romgen v3.0 by MikeJ +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; + use ieee.numeric_std.all; + +library UNISIM; + use UNISIM.Vcomponents.all; + +entity BALLY_BIOS_0 is + port ( + CLK : in std_logic; + ENA : in std_logic; + ADDR : in std_logic_vector(11 downto 0); + DATA : out std_logic_vector(7 downto 0) + ); +end; + +architecture RTL of BALLY_BIOS_0 is + + function romgen_str2bv (str : string) return bit_vector is + variable result : bit_vector (str'length*4-1 downto 0); + begin + for i in 0 to str'length-1 loop + case str(str'high-i) is + when '0' => result(i*4+3 downto i*4) := x"0"; + when '1' => result(i*4+3 downto i*4) := x"1"; + when '2' => result(i*4+3 downto i*4) := x"2"; + when '3' => result(i*4+3 downto i*4) := x"3"; + when '4' => result(i*4+3 downto i*4) := x"4"; + when '5' => result(i*4+3 downto i*4) := x"5"; + when '6' => result(i*4+3 downto i*4) := x"6"; + when '7' => result(i*4+3 downto i*4) := x"7"; + when '8' => result(i*4+3 downto i*4) := x"8"; + when '9' => result(i*4+3 downto i*4) := x"9"; + when 'A' => result(i*4+3 downto i*4) := x"A"; + when 'B' => result(i*4+3 downto i*4) := x"B"; + when 'C' => result(i*4+3 downto i*4) := x"C"; + when 'D' => result(i*4+3 downto i*4) := x"D"; + when 'E' => result(i*4+3 downto i*4) := x"E"; + when 'F' => result(i*4+3 downto i*4) := x"F"; + when others => null; + end case; + end loop; + return result; + end romgen_str2bv; + + attribute INIT_00 : string; + attribute INIT_01 : string; + attribute INIT_02 : string; + attribute INIT_03 : string; + attribute INIT_04 : string; + attribute INIT_05 : string; + attribute INIT_06 : string; + attribute INIT_07 : string; + attribute INIT_08 : string; + attribute INIT_09 : string; + attribute INIT_0A : string; + attribute INIT_0B : string; + attribute INIT_0C : string; + attribute INIT_0D : string; + attribute INIT_0E : string; + attribute INIT_0F : string; + attribute INIT_10 : string; + attribute INIT_11 : string; + attribute INIT_12 : string; + attribute INIT_13 : string; + attribute INIT_14 : string; + attribute INIT_15 : string; + attribute INIT_16 : string; + attribute INIT_17 : string; + attribute INIT_18 : string; + attribute INIT_19 : string; + attribute INIT_1A : string; + attribute INIT_1B : string; + attribute INIT_1C : string; + attribute INIT_1D : string; + attribute INIT_1E : string; + attribute INIT_1F : string; + attribute INIT_20 : string; + attribute INIT_21 : string; + attribute INIT_22 : string; + attribute INIT_23 : string; + attribute INIT_24 : string; + attribute INIT_25 : string; + attribute INIT_26 : string; + attribute INIT_27 : string; + attribute INIT_28 : string; + attribute INIT_29 : string; + attribute INIT_2A : string; + attribute INIT_2B : string; + attribute INIT_2C : string; + attribute INIT_2D : string; + attribute INIT_2E : string; + attribute INIT_2F : string; + attribute INIT_30 : string; + attribute INIT_31 : string; + attribute INIT_32 : string; + attribute INIT_33 : string; + attribute INIT_34 : string; + attribute INIT_35 : string; + attribute INIT_36 : string; + attribute INIT_37 : string; + attribute INIT_38 : string; + attribute INIT_39 : string; + attribute INIT_3A : string; + attribute INIT_3B : string; + attribute INIT_3C : string; + attribute INIT_3D : string; + attribute INIT_3E : string; + attribute INIT_3F : string; + + component RAMB16_S4 + --pragma translate_off + generic ( + INIT_00 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_01 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_02 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_03 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_04 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_05 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_06 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_07 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_08 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_09 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_10 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_11 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_12 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_13 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_14 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_15 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_16 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_17 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_18 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_19 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_20 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_21 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_22 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_23 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_24 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_25 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_26 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_27 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_28 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_29 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_30 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_31 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_32 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_33 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_34 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_35 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_36 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_37 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_38 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_39 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000" + ); + --pragma translate_on + port ( + DO : out std_logic_vector (3 downto 0); + ADDR : in std_logic_vector (11 downto 0); + CLK : in std_logic; + DI : in std_logic_vector (3 downto 0); + EN : in std_logic; + SSR : in std_logic; + WE : in std_logic + ); + end component; + + signal rom_addr : std_logic_vector(11 downto 0); + +begin + + p_addr : process(ADDR) + begin + rom_addr <= (others => '0'); + rom_addr(11 downto 0) <= ADDR; + end process; + + rom0 : if true generate + attribute INIT_00 of inst : label is "5D5D5553F11B0063F9001033F92330039D06B0D3F27A60A3F0CCC073C1383F30"; + attribute INIT_01 of inst : label is "B3E1194ED56D9ED1D52ED36DAEDB6D563E9FDA30706F70B15568F2A13E9D001D"; + attribute INIT_02 of inst : label is "B0B333315D37D3A27D3AA80B5311A86ED76D9108D69FBA387B1B106B20F50C1F"; + attribute INIT_03 of inst : label is "4712A7D397E7D7C79757B6E62AE1B3F5C584E1B04A4B30D62290B9B60373A308"; + attribute INIT_04 of inst : label is "C36393E3134242E3F31DABBBDBCB0B6C5BC0BD1CBC71A6B6C1CA96366ABA6BB7"; + attribute INIT_05 of inst : label is "BBBB8F0000078FC3000300400F77F3FB3FF330FF0A0040800000020033CC13F3"; + attribute INIT_06 of inst : label is "63533FB07FCA09AAEFAA9B11114EDFE40DD34EF38E7D0EED55553730008BBBB8"; + attribute INIT_07 of inst : label is "00DDD49FC2FE0CE83E70D97D3CD9F3D8B1F82F8AB096D70C15DC4D241C09D8B1"; + attribute INIT_08 of inst : label is "035D1706F03032591C006F03052F33081D7EDADEFFFFAF5164084718804B3403"; + attribute INIT_09 of inst : label is "11D1D119301110D59B755F0B388B98B37FCFFDA08BB83B26D7F18368781BB26D"; + attribute INIT_0A of inst : label is "581130D37B3EF4FA81F61807CA8EF4FFBBBD190653B110DBF99B9065320D9311"; + attribute INIT_0B of inst : label is "99B06855111C0D33B907D7EFB98733E20D9D8AEDB6D55597D058F7B2FB2FFF1D"; + attribute INIT_0C of inst : label is "706EB80377E0EB80EE906D8EFBCFBCFAF9D01AF281B112FE387C036F8B510D1B"; + attribute INIT_0D of inst : label is "5987DF79E803327EAF970EE9D068964D068EB9D068980377E0EFB068EB906D89"; + attribute INIT_0E of inst : label is "BF3031B9A9B057976FD4A1390DC109F88AF71BAF1293CDFF1AFF2A90713CDFFA"; + attribute INIT_0F of inst : label is "34C139D38639D06FD15891287B980303FF9811E9E31DC1D9E940198E10D7554B"; + attribute INIT_10 of inst : label is "AC0F4B82E8603CDA068DF01471B04D591E7FB68FBEF31C0C99773C6886583E8D"; + attribute INIT_11 of inst : label is "860059B6797F67E9C6797067E06C87B9870C50E8D34019B7F67E78F6E13EC377"; + attribute INIT_12 of inst : label is "BBE811D54D5D5B05C87EFA1BEB0EBF919FD22FDAD0AB377107D687EA09B06F51"; + attribute INIT_13 of inst : label is "286BF819877DE877DE396907EB3863E35187EBEBF31B3B652253536340DD80BE"; + attribute INIT_14 of inst : label is "3D90FB463D20FB563D20FB881F4AFA25BA73EF0ADFEA385CDF02DF429EBF91EB"; + attribute INIT_15 of inst : label is "00EE8F423E70783DF0676083D881888FB500E54353F3A63F2AC07583548B78FB"; + attribute INIT_16 of inst : label is "284EB363EB83D06D3D0EDC09EF6700E18333DA005DB0780D0DF21900EE8CFF66"; + attribute INIT_17 of inst : label is "FA2F9F02DFE25363F3FA2E280EC8F920EF9AA0689D4F06F6A00E6803DBD02DBD"; + attribute INIT_18 of inst : label is "6D2EDE1BD68BD9B511401B0D29BB63E1E83348AF6391280EFE7589C09D881F92"; + attribute INIT_19 of inst : label is "48870FE363C1864BD68BD48CD091C2ED36D0ED16D59D05166D9D031879861D02"; + attribute INIT_1A of inst : label is "F99EDC34BBBEDF9E4BD134D25D33912D03D3FFB7FA8E4BD1E4BD026D30D30886"; + attribute INIT_1B of inst : label is "ED93111070ECF86D7E1EBFFFAFF255F62D7806FF68DFFC3696862DFE7857CF6F"; + attribute INIT_1C of inst : label is "037373A155B9101B98EB120D755F10FBC07BA6D363E1723EF33E561BD6EDB6D0"; + attribute INIT_1D of inst : label is "1BD9B0198E10B080B7B73A155B9C01B98EB1274ABB0D755F60FB9B0198E10308"; + attribute INIT_1E of inst : label is "B98E1B0D755F2B363EB97059C03738F38E064B9F6FC4DB8860BDDEDE6D61BD86"; + attribute INIT_1F of inst : label is "6DB850D1C4D8ED5D00E261D7DA75D553808D08DB377608371D604E7EA87E9201"; + attribute INIT_20 of inst : label is "ED9111DC4D1C057D15ED193ED18CD5546D58ED95ED66D70DD0946D3ED00106F0"; + attribute INIT_21 of inst : label is "93CE15D9D001D5D063ED9FF7B026D1A980EB016D4ED56D88ED97D0F7F7C36776"; + attribute INIT_22 of inst : label is "5BB8D8606936ED04D8ED10DD4900111B8037373A154B92D2D7B7718066EDC38E"; + attribute INIT_23 of inst : label is "88C8C8800000000000000000000091D9D00C311198E1018364ED8037373A1555"; + attribute INIT_24 of inst : label is "0000000000080000808080000000000000000000000808000088000800080080"; + attribute INIT_25 of inst : label is "0008880080080000088088080008800000000088888000000800000000000800"; + attribute INIT_26 of inst : label is "8800008000008080000000000000000000000000888800880880000008808800"; + attribute INIT_27 of inst : label is "8888888008000000088000008088888008000800880880888888080888800000"; + attribute INIT_28 of inst : label is "8888000008808888888888888888888888000000800000808888880000000888"; + attribute INIT_29 of inst : label is "0000880000088880008888888880000888088888800000080880080800088080"; + attribute INIT_2A of inst : label is "0008000080008000080000080000000800000008000000000080000000000008"; + attribute INIT_2B of inst : label is "2BBED58B8D9AFA1D7BDE06B321D654A987FB325CE30997DE9A510689D31D0000"; + attribute INIT_2C of inst : label is "000000000000000000000000000000000000000000000000009C3BED9852D43D"; + attribute INIT_2D of inst : label is "B0655B8BBD911B906FFBFB999D499906A06F38B065536BFC6590D00000000000"; + attribute INIT_2E of inst : label is "06F88C4DB63E92B3B06F917EF6E3806E7777981B199B065591F6FFFF481B1E99"; + attribute INIT_2F of inst : label is "68B401388B70BBDF8DF68FD12671DAE89B1BBDE6BD5FE1262D1D9A5DB4D97DE9"; + attribute INIT_30 of inst : label is "810BB9EBF81078EA36F618FBF8A331603307716E536080ED8971D06280BA6F66"; + attribute INIT_31 of inst : label is "9F750FFC2DFF2002FEBFFE100A3E00A0256F65D177403E484E243FEFC7C805F4"; + attribute INIT_32 of inst : label is "D16D40E728E4F2ED36D2FDE2F0681D191C01D9D55AF281385E3E001D312F0398"; + attribute INIT_33 of inst : label is "9D555952D43D551163E363E3A063EB711982FFE688387E1EFD0111159B05C50E"; + attribute INIT_34 of inst : label is "D618F697EDFD9D994F4E08115D818BF01800BF59F1FEF0011B7114F1D79085FD"; + attribute INIT_35 of inst : label is "C4879A070E97FF7CB4628A61E9890C9FE09BA8C980BD1CD54DF39DC5F0B3F6F5"; + attribute INIT_36 of inst : label is "1A00254E59B03FD17E6C8591AF17FF9FE6C85959916F50F9F688DE0F9BCD9D40"; + attribute INIT_37 of inst : label is "875D170435C5307E9C22923302F41C53C130541DB3583048796E57E9D80038D3"; + attribute INIT_38 of inst : label is "DE890C08E8F8887008E0B0E000B0FE81F3128DFFFFF08791076D09CC120938D8"; + attribute INIT_39 of inst : label is "DF49718BF9DF1FFF84E83E5FFFF9E15FE53F5E812F54BF403DF606DF843DFA46"; + attribute INIT_3A of inst : label is "19D0E195EA155F7F3AE01DE93EC2F319F32F9F624EE89F733337E76E488B6AE8"; + attribute INIT_3B of inst : label is "B806F4DF0992FEFCEDD6D87A15D9B7D05E4BEDA7D308E2AED01DF6F4DF099001"; + attribute INIT_3C of inst : label is "2DAFAEDB6D5006F3DF8F188421FA509CF8F2DF367797AEDB6DF6DF36F77EBBBB"; + attribute INIT_3D of inst : label is "E51F32533787F247FF72533787F2C36288E07FF925E31E01F81CF83115DBC3DD"; + attribute INIT_3E of inst : label is "0ECFC720CE57FADE36E317240EE4A3F2D00E2AFA101DAE2287F2187E583ECA7F"; + attribute INIT_3F of inst : label is "F524E401FDD59DF211EADE61EADE51EADE41F024EDF3AA81EFC2FECF41CFCF31"; + begin + inst : RAMB16_S4 + --pragma translate_off + generic map ( + INIT_00 => romgen_str2bv(inst'INIT_00), + INIT_01 => romgen_str2bv(inst'INIT_01), + INIT_02 => romgen_str2bv(inst'INIT_02), + INIT_03 => romgen_str2bv(inst'INIT_03), + INIT_04 => romgen_str2bv(inst'INIT_04), + INIT_05 => romgen_str2bv(inst'INIT_05), + INIT_06 => romgen_str2bv(inst'INIT_06), + INIT_07 => romgen_str2bv(inst'INIT_07), + INIT_08 => romgen_str2bv(inst'INIT_08), + INIT_09 => romgen_str2bv(inst'INIT_09), + INIT_0A => romgen_str2bv(inst'INIT_0A), + INIT_0B => romgen_str2bv(inst'INIT_0B), + INIT_0C => romgen_str2bv(inst'INIT_0C), + INIT_0D => romgen_str2bv(inst'INIT_0D), + INIT_0E => romgen_str2bv(inst'INIT_0E), + INIT_0F => romgen_str2bv(inst'INIT_0F), + INIT_10 => romgen_str2bv(inst'INIT_10), + INIT_11 => romgen_str2bv(inst'INIT_11), + INIT_12 => romgen_str2bv(inst'INIT_12), + INIT_13 => romgen_str2bv(inst'INIT_13), + INIT_14 => romgen_str2bv(inst'INIT_14), + INIT_15 => romgen_str2bv(inst'INIT_15), + INIT_16 => romgen_str2bv(inst'INIT_16), + INIT_17 => romgen_str2bv(inst'INIT_17), + INIT_18 => romgen_str2bv(inst'INIT_18), + INIT_19 => romgen_str2bv(inst'INIT_19), + INIT_1A => romgen_str2bv(inst'INIT_1A), + INIT_1B => romgen_str2bv(inst'INIT_1B), + INIT_1C => romgen_str2bv(inst'INIT_1C), + INIT_1D => romgen_str2bv(inst'INIT_1D), + INIT_1E => romgen_str2bv(inst'INIT_1E), + INIT_1F => romgen_str2bv(inst'INIT_1F), + INIT_20 => romgen_str2bv(inst'INIT_20), + INIT_21 => romgen_str2bv(inst'INIT_21), + INIT_22 => romgen_str2bv(inst'INIT_22), + INIT_23 => romgen_str2bv(inst'INIT_23), + INIT_24 => romgen_str2bv(inst'INIT_24), + INIT_25 => romgen_str2bv(inst'INIT_25), + INIT_26 => romgen_str2bv(inst'INIT_26), + INIT_27 => romgen_str2bv(inst'INIT_27), + INIT_28 => romgen_str2bv(inst'INIT_28), + INIT_29 => romgen_str2bv(inst'INIT_29), + INIT_2A => romgen_str2bv(inst'INIT_2A), + INIT_2B => romgen_str2bv(inst'INIT_2B), + INIT_2C => romgen_str2bv(inst'INIT_2C), + INIT_2D => romgen_str2bv(inst'INIT_2D), + INIT_2E => romgen_str2bv(inst'INIT_2E), + INIT_2F => romgen_str2bv(inst'INIT_2F), + INIT_30 => romgen_str2bv(inst'INIT_30), + INIT_31 => romgen_str2bv(inst'INIT_31), + INIT_32 => romgen_str2bv(inst'INIT_32), + INIT_33 => romgen_str2bv(inst'INIT_33), + INIT_34 => romgen_str2bv(inst'INIT_34), + INIT_35 => romgen_str2bv(inst'INIT_35), + INIT_36 => romgen_str2bv(inst'INIT_36), + INIT_37 => romgen_str2bv(inst'INIT_37), + INIT_38 => romgen_str2bv(inst'INIT_38), + INIT_39 => romgen_str2bv(inst'INIT_39), + INIT_3A => romgen_str2bv(inst'INIT_3A), + INIT_3B => romgen_str2bv(inst'INIT_3B), + INIT_3C => romgen_str2bv(inst'INIT_3C), + INIT_3D => romgen_str2bv(inst'INIT_3D), + INIT_3E => romgen_str2bv(inst'INIT_3E), + INIT_3F => romgen_str2bv(inst'INIT_3F) + ) + --pragma translate_on + port map ( + DO => DATA(3 downto 0), + ADDR => rom_addr, + CLK => CLK, + DI => "0000", + EN => ENA, + SSR => '0', + WE => '0' + ); + end generate; + rom1 : if true generate + attribute INIT_00 of inst : label is "EFEDDCFEF008021CFC00221CFC72721CCF17F20CF60F020CF213120C06C0DAF0"; + attribute INIT_01 of inst : label is "C27EDC05F05F07FEDD05F05F06F06FD52514F203101500C2DE331071273F002F"; + attribute INIT_02 of inst : label is "CAC2222EEF07F1107F11026CE2DEA104F04F7D0AC404F2027C04200E134D0713"; + attribute INIT_03 of inst : label is "C0E060A0B0907010101000F0B0E0D0C0F0007080A0C0707030707CEF22711033"; + attribute INIT_04 of inst : label is "40502060406080D01020A040B0A0907010C01030F090B00000A0C03050F0F0E0"; + attribute INIT_05 of inst : label is "CCCCCCCCCCC00CEC0CC00DD22CC2CCCC1EEEED22C20F000C0CC0004020604070"; + attribute INIT_06 of inst : label is "1D1DFA22B4E321CAF4F3CFFCDE07C000AC0D330DC34E035EEDCFFCCE02C00C0C"; + attribute INIT_07 of inst : label is "120D0CC4E3F3D1FD1F07F07F0ECCABE0004E24E2F003FE230EC0FC011F17E000"; + attribute INIT_08 of inst : label is "05444424422055454452442204544525441D0C0B33330B0000A0E0000207C0AC"; + attribute INIT_09 of inst : label is "DEDEFEECF1CDEBEE1E4DCA02CD0CC0C2627627030C0BCE05C42020E7027CE05C"; + attribute INIT_0A of inst : label is "51CEE20E72E6F7F61CF3EF223036F7FA11E0C000CE2DCBEE403C700CE0CCCEFC"; + attribute INIT_0B of inst : label is "03C004CDCEEE20E2EF223A6FE02AE270CCED406F06FEEC34F1E766E7FE7F4AED"; + attribute INIT_0C of inst : label is "78F72F1272903ED5F7102266FE6FE6F6FCF1E6F024CEC1F302AF12BA3CCCBE2C"; + attribute INIT_0D of inst : label is "FC07F219FF1211281AC78E700004C03F03C7C12026CF1272903AE03C7C10226C"; + attribute INIT_0E of inst : label is "EA2727EC80F211201A440DCF203031A0274AFE54F210AC54F24E2800100AC4E2"; + attribute INIT_0F of inst : label is "20100DC2010DC014D222CE877ACF102A4070005C0D5E04E00CF1C020EBE4ECFC"; + attribute INIT_10 of inst : label is "7F30101117F121002A7EF01010E07CEC137BC027C74E2E10C74783030D03957E"; + attribute INIT_11 of inst : label is "007C3C0D0740E7AC0D0741E7A1E026CC7F1002A7E2010C747E7A027EAE113800"; + attribute INIT_12 of inst : label is "CE01EED01CEDE02312B74E2ECCC4C4F2C4D3B4D3E11C273022302B7033C014D2"; + attribute INIT_13 of inst : label is "024C4F20172301723725302B7212B272302B7EFC4E2E23300F321D1D023302E7"; + attribute INIT_14 of inst : label is "AE033C00AE033C00AE033C0104D34E305FB274D2D4C2010FC4D2D4D3C8C4F2FC"; + attribute INIT_15 of inst : label is "3BF914D32702A1AE41F0EB1BE0107025C139F0FC1D4D31D4D3E2BF120012033C"; + attribute INIT_16 of inst : label is "D30FE2525D12D06D2D06D020F0E23DFF1222D0203D0281AEAE4D103CF31150E0"; + attribute INIT_17 of inst : label is "4E3AC4D2D4C21D1DA24E3712FFA14F38E4F302E10554000E03EFC107D2D07D2D"; + attribute INIT_18 of inst : label is "3D04D70CDF0CFEEEFD027C07C7CE525DE12202B3E2CD03CF475D7CF17E0104F3"; + attribute INIT_19 of inst : label is "03B03CF24E73240CDB0CF02BF114706D06D05D05DE1D00105C1D001CA7C07F00"; + attribute INIT_1A of inst : label is "0705F0DFCE04CAC90CDE07D07DE2C07D07D1527527C40CDFD0CD003D07D223B4"; + attribute INIT_1B of inst : label is "7DC2ECF160C762C77AAA744F30F3CEA0ECF1CC00020A430E7F10ECF3021533E0"; + attribute INIT_1C of inst : label is "12727114ECECF1CE020ED1BE4DCA125C227C0FC2424F58275827FF0CD05D05D0"; + attribute INIT_1D of inst : label is "0CDCE1C020E727F12727114ECECE1CE020ED105E11AE4DCA125CCE1C020E727F"; + attribute INIT_1E of inst : label is "E020EEBE4DCAFC2424ECF210F12747492300FC0F0434E70270CD06D06DB0CDC7"; + attribute INIT_1F of inst : label is "9D31F23F0FC04CF032F002D0EFAEDECE106C0ACE241EF120EC036F0CFCA7CF1C"; + attribute INIT_20 of inst : label is "7FCCEED0FCDE107F807FC004DE06CEC04DD04C105D05DF20F1104D04D0020150"; + attribute INIT_21 of inst : label is "1D03DED3D002DED0004DC5A5F108D4703AFF108D07F05F403CC4F183A430E000"; + attribute INIT_22 of inst : label is "FE00C0F3E1D07F07C03CE23553002F2CF12727114FBCF4E4EAE0022CE07F0D03"; + attribute INIT_23 of inst : label is "44F4F44000055520222220000000CEDFDE10DFCD020E7020E07FF12727114EDC"; + attribute INIT_24 of inst : label is "04266000022F2200A7D7A042222241222221000066669A4A9619421CC2F07872"; + attribute INIT_25 of inst : label is "437800F8F11F95317803087F8870877222262788888708421006600000000F00"; + attribute INIT_26 of inst : label is "087421012400F0F0012484214266066066066061078877887887444210F788F8"; + attribute INIT_27 of inst : label is "F8887898887888E88FF88E88FF88888F7888887F88F88F888F88778BAB872021"; + attribute INIT_28 of inst : label is "A8887888F88FF88888F8889AC8888AAD8F88888889ACA9878000007222227888"; + attribute INIT_29 of inst : label is "84210F222258888525888DAA88822558887888888222222F780788789AF88F69"; + attribute INIT_2A of inst : label is "020F0200852580021F12027A2222024F4202222A72711111700124807444447F"; + attribute INIT_2B of inst : label is "FC04C0100CC0EEAE7E3232233323332333235525542C07F700D2004EDEED0000"; + attribute INIT_2C of inst : label is "2EAEEAEAE2222EEAE8EE2E8E22EAAE262EE8E2E44444EAAAE0C0D04CC107F07F"; + attribute INIT_2D of inst : label is "C00CE8107CCEFE10153C3C12255222026AC20274EFB0E76FEECBEEEEE404040E"; + attribute INIT_2E of inst : label is "015010FC252511C2C015CE7A0EA01FEA0000024CC03C00CECE0E0000024CC703"; + attribute INIT_2F of inst : label is "CBC12B027C0207C4F33E74E2400ECB3C7CC0ECB0CFC4E240002DC07F07F07F71"; + attribute INIT_30 of inst : label is "1F121CFC4F2D02B1004F1C4C4F322EF1202720C7E00F123D170EC8F027C2C0E0"; + attribute INIT_31 of inst : label is "2B110F4E330F30034C1F4C320CCF2030545404444CF21F021F014F0F054133FF"; + attribute INIT_32 of inst : label is "D06D01158033F06D06D3F233F3C7ED00001101CEE4F012025F272020F1000110"; + attribute INIT_33 of inst : label is "1CCEFC07F07FECFE42425252F1525E4DEE13F3303B02A7C4F411000C3D2B7E06"; + attribute INIT_34 of inst : label is "032C3EA07F409CDC3F00011E5044B1F00B401FDC05F4F331FC4FE3FE0B0203F0"; + attribute INIT_35 of inst : label is "0117DF120C165A51D6002000FD7DC37F0C7C3237C6C061051071C044F004F7FE"; + attribute INIT_36 of inst : label is "0F0254544CF126EF43E37FCC1FD4A4D13E37EDCCDD3FD6FD0E023F4FFC009C02"; + attribute INIT_37 of inst : label is "064444254444504444444545054544544440454444444054444454010E00120D"; + attribute INIT_38 of inst : label is "74E110004E502B10074F10064010F4E34F0024FFFFF033332444254444224205"; + attribute INIT_39 of inst : label is "5F976A7E025FA00A21F70000002C0A4F064FE05204D074635744347422574024"; + attribute INIT_3A of inst : label is "E1D011ED0B1EC444F34F2D0610900D0C4E3AC4D3134E1F722227A0EA025C814E"; + attribute INIT_3B of inst : label is "2C1E4E5F97C1A2F16D16DCA1DEDC17DD5F817D17D039F817D10C0E4E5F97CF1C"; + attribute INIT_3C of inst : label is "7D3F15D15DEC1E4E5F7F0F0000FA50C1F4025F0E007415D15D025F0E40072222"; + attribute INIT_3D of inst : label is "4F109F312777F107F07F312777F130E030F37F06F34F14F2A1E2F000DEDE17D1"; + attribute INIT_3E of inst : label is "A31F759953D601C7244F250D32F80050D35F8040010C14F327F1F20FF20F307F"; + attribute INIT_3F of inst : label is "4D303F1C02CC1DFE140AC0F20AC0E20AC0C205D0F34F321034E3F31F5E1F7599"; + begin + inst : RAMB16_S4 + --pragma translate_off + generic map ( + INIT_00 => romgen_str2bv(inst'INIT_00), + INIT_01 => romgen_str2bv(inst'INIT_01), + INIT_02 => romgen_str2bv(inst'INIT_02), + INIT_03 => romgen_str2bv(inst'INIT_03), + INIT_04 => romgen_str2bv(inst'INIT_04), + INIT_05 => romgen_str2bv(inst'INIT_05), + INIT_06 => romgen_str2bv(inst'INIT_06), + INIT_07 => romgen_str2bv(inst'INIT_07), + INIT_08 => romgen_str2bv(inst'INIT_08), + INIT_09 => romgen_str2bv(inst'INIT_09), + INIT_0A => romgen_str2bv(inst'INIT_0A), + INIT_0B => romgen_str2bv(inst'INIT_0B), + INIT_0C => romgen_str2bv(inst'INIT_0C), + INIT_0D => romgen_str2bv(inst'INIT_0D), + INIT_0E => romgen_str2bv(inst'INIT_0E), + INIT_0F => romgen_str2bv(inst'INIT_0F), + INIT_10 => romgen_str2bv(inst'INIT_10), + INIT_11 => romgen_str2bv(inst'INIT_11), + INIT_12 => romgen_str2bv(inst'INIT_12), + INIT_13 => romgen_str2bv(inst'INIT_13), + INIT_14 => romgen_str2bv(inst'INIT_14), + INIT_15 => romgen_str2bv(inst'INIT_15), + INIT_16 => romgen_str2bv(inst'INIT_16), + INIT_17 => romgen_str2bv(inst'INIT_17), + INIT_18 => romgen_str2bv(inst'INIT_18), + INIT_19 => romgen_str2bv(inst'INIT_19), + INIT_1A => romgen_str2bv(inst'INIT_1A), + INIT_1B => romgen_str2bv(inst'INIT_1B), + INIT_1C => romgen_str2bv(inst'INIT_1C), + INIT_1D => romgen_str2bv(inst'INIT_1D), + INIT_1E => romgen_str2bv(inst'INIT_1E), + INIT_1F => romgen_str2bv(inst'INIT_1F), + INIT_20 => romgen_str2bv(inst'INIT_20), + INIT_21 => romgen_str2bv(inst'INIT_21), + INIT_22 => romgen_str2bv(inst'INIT_22), + INIT_23 => romgen_str2bv(inst'INIT_23), + INIT_24 => romgen_str2bv(inst'INIT_24), + INIT_25 => romgen_str2bv(inst'INIT_25), + INIT_26 => romgen_str2bv(inst'INIT_26), + INIT_27 => romgen_str2bv(inst'INIT_27), + INIT_28 => romgen_str2bv(inst'INIT_28), + INIT_29 => romgen_str2bv(inst'INIT_29), + INIT_2A => romgen_str2bv(inst'INIT_2A), + INIT_2B => romgen_str2bv(inst'INIT_2B), + INIT_2C => romgen_str2bv(inst'INIT_2C), + INIT_2D => romgen_str2bv(inst'INIT_2D), + INIT_2E => romgen_str2bv(inst'INIT_2E), + INIT_2F => romgen_str2bv(inst'INIT_2F), + INIT_30 => romgen_str2bv(inst'INIT_30), + INIT_31 => romgen_str2bv(inst'INIT_31), + INIT_32 => romgen_str2bv(inst'INIT_32), + INIT_33 => romgen_str2bv(inst'INIT_33), + INIT_34 => romgen_str2bv(inst'INIT_34), + INIT_35 => romgen_str2bv(inst'INIT_35), + INIT_36 => romgen_str2bv(inst'INIT_36), + INIT_37 => romgen_str2bv(inst'INIT_37), + INIT_38 => romgen_str2bv(inst'INIT_38), + INIT_39 => romgen_str2bv(inst'INIT_39), + INIT_3A => romgen_str2bv(inst'INIT_3A), + INIT_3B => romgen_str2bv(inst'INIT_3B), + INIT_3C => romgen_str2bv(inst'INIT_3C), + INIT_3D => romgen_str2bv(inst'INIT_3D), + INIT_3E => romgen_str2bv(inst'INIT_3E), + INIT_3F => romgen_str2bv(inst'INIT_3F) + ) + --pragma translate_on + port map ( + DO => DATA(7 downto 4), + ADDR => rom_addr, + CLK => CLK, + DI => "0000", + EN => ENA, + SSR => '0', + WE => '0' + ); + end generate; +end RTL; diff --git a/Bally - Astrocade_MiST/rtl/roms/bally_bios_1.vhd b/Bally - Astrocade_MiST/rtl/roms/bally_bios_1.vhd new file mode 100644 index 00000000..88ff69a4 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/roms/bally_bios_1.vhd @@ -0,0 +1,493 @@ +-- generated with romgen v3.0 by MikeJ +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; + use ieee.numeric_std.all; + +library UNISIM; + use UNISIM.Vcomponents.all; + +entity BALLY_BIOS_1 is + port ( + CLK : in std_logic; + ENA : in std_logic; + ADDR : in std_logic_vector(11 downto 0); + DATA : out std_logic_vector(7 downto 0) + ); +end; + +architecture RTL of BALLY_BIOS_1 is + + function romgen_str2bv (str : string) return bit_vector is + variable result : bit_vector (str'length*4-1 downto 0); + begin + for i in 0 to str'length-1 loop + case str(str'high-i) is + when '0' => result(i*4+3 downto i*4) := x"0"; + when '1' => result(i*4+3 downto i*4) := x"1"; + when '2' => result(i*4+3 downto i*4) := x"2"; + when '3' => result(i*4+3 downto i*4) := x"3"; + when '4' => result(i*4+3 downto i*4) := x"4"; + when '5' => result(i*4+3 downto i*4) := x"5"; + when '6' => result(i*4+3 downto i*4) := x"6"; + when '7' => result(i*4+3 downto i*4) := x"7"; + when '8' => result(i*4+3 downto i*4) := x"8"; + when '9' => result(i*4+3 downto i*4) := x"9"; + when 'A' => result(i*4+3 downto i*4) := x"A"; + when 'B' => result(i*4+3 downto i*4) := x"B"; + when 'C' => result(i*4+3 downto i*4) := x"C"; + when 'D' => result(i*4+3 downto i*4) := x"D"; + when 'E' => result(i*4+3 downto i*4) := x"E"; + when 'F' => result(i*4+3 downto i*4) := x"F"; + when others => null; + end case; + end loop; + return result; + end romgen_str2bv; + + attribute INIT_00 : string; + attribute INIT_01 : string; + attribute INIT_02 : string; + attribute INIT_03 : string; + attribute INIT_04 : string; + attribute INIT_05 : string; + attribute INIT_06 : string; + attribute INIT_07 : string; + attribute INIT_08 : string; + attribute INIT_09 : string; + attribute INIT_0A : string; + attribute INIT_0B : string; + attribute INIT_0C : string; + attribute INIT_0D : string; + attribute INIT_0E : string; + attribute INIT_0F : string; + attribute INIT_10 : string; + attribute INIT_11 : string; + attribute INIT_12 : string; + attribute INIT_13 : string; + attribute INIT_14 : string; + attribute INIT_15 : string; + attribute INIT_16 : string; + attribute INIT_17 : string; + attribute INIT_18 : string; + attribute INIT_19 : string; + attribute INIT_1A : string; + attribute INIT_1B : string; + attribute INIT_1C : string; + attribute INIT_1D : string; + attribute INIT_1E : string; + attribute INIT_1F : string; + attribute INIT_20 : string; + attribute INIT_21 : string; + attribute INIT_22 : string; + attribute INIT_23 : string; + attribute INIT_24 : string; + attribute INIT_25 : string; + attribute INIT_26 : string; + attribute INIT_27 : string; + attribute INIT_28 : string; + attribute INIT_29 : string; + attribute INIT_2A : string; + attribute INIT_2B : string; + attribute INIT_2C : string; + attribute INIT_2D : string; + attribute INIT_2E : string; + attribute INIT_2F : string; + attribute INIT_30 : string; + attribute INIT_31 : string; + attribute INIT_32 : string; + attribute INIT_33 : string; + attribute INIT_34 : string; + attribute INIT_35 : string; + attribute INIT_36 : string; + attribute INIT_37 : string; + attribute INIT_38 : string; + attribute INIT_39 : string; + attribute INIT_3A : string; + attribute INIT_3B : string; + attribute INIT_3C : string; + attribute INIT_3D : string; + attribute INIT_3E : string; + attribute INIT_3F : string; + + component RAMB16_S4 + --pragma translate_off + generic ( + INIT_00 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_01 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_02 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_03 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_04 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_05 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_06 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_07 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_08 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_09 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_10 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_11 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_12 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_13 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_14 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_15 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_16 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_17 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_18 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_19 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_20 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_21 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_22 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_23 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_24 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_25 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_26 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_27 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_28 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_29 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_30 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_31 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_32 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_33 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_34 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_35 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_36 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_37 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_38 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_39 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000" + ); + --pragma translate_on + port ( + DO : out std_logic_vector (3 downto 0); + ADDR : in std_logic_vector (11 downto 0); + CLK : in std_logic; + DI : in std_logic_vector (3 downto 0); + EN : in std_logic; + SSR : in std_logic; + WE : in std_logic + ); + end component; + + signal rom_addr : std_logic_vector(11 downto 0); + +begin + + p_addr : process(ADDR) + begin + rom_addr <= (others => '0'); + rom_addr(11 downto 0) <= ADDR; + end process; + + rom0 : if true generate + attribute INIT_00 of inst : label is "3F004E0B3C98F87F9028D0E000B0FE01FFFFFFFFFFFF752875289110010FF759"; + attribute INIT_01 of inst : label is "AD2AD980D0AD78FEBF4138EE9707B287EE21FFFFFEFF60FDF803E243F503116D"; + attribute INIT_02 of inst : label is "1311081A0E00132126543987402111009EE11508BFB1E3127D5ED1EA20010DB0"; + attribute INIT_03 of inst : label is "E4FF26D16F08980EB816402E88EFBBF2AD281E219EF1BD098B6E61001F28080E"; + attribute INIT_04 of inst : label is "B1BEE26FEEAB6E41E82E009EFFF0904326DE025E16D260DF8E029F816D38EF0B"; + attribute INIT_05 of inst : label is "2C71E8F6EB9E40BEFFF8F16F14F12F1B1815129B6E41EF1518BFE0A26DA815D0"; + attribute INIT_06 of inst : label is "811EA1005EFBF52AD206BA8BBBF8FB5E3989F87E38AEEEF1EA12AD580E126DE1"; + attribute INIT_07 of inst : label is "F0606B06F6787E32F0616287EE2157E381B3FDED1943FD33333989637370EE9C"; + attribute INIT_08 of inst : label is "EE41F32F94582E987E3418CEEE4127DE8100C8081F97B7F02EEE112A33EE0A12"; + attribute INIT_09 of inst : label is "F81E016E51181AE50DC000F81F8E48BE6388981C50D08F0081F8E587E387A01B"; + attribute INIT_0A of inst : label is "0A7FC6256FA0914F2419B892F21DF16FB6F08E284E7B60FB6FCE150E6FDEC0D9"; + attribute INIT_0B of inst : label is "6833D50F6EBC83FDEE309E9DD03FD6F3EAFF061B8FD7E9A8FDEE0AEF1D32DB00"; + attribute INIT_0C of inst : label is "00CF6BFF3128DFFC225DFF61FFFF777770269B17B03FD5B569B07DB1790610EE"; + attribute INIT_0D of inst : label is "FC23812F09104D09D0BD09D07D09E0AD5B000D87E7002F2B004F4B57990FF613"; + attribute INIT_0E of inst : label is "2A7F4AF224E285E482EF424E285EF3AFC242C7F2D1D43DF12701FA2F01F32381"; + attribute INIT_0F of inst : label is "1A06A5D514F0E4ED56D41144F66B12F586D7ED2F6EDDD56D4ED16A556BDA06FF"; + attribute INIT_10 of inst : label is "4F81F2F4EFC1065140DF3251F53E001FD467D0E068567D0E980F111D52D999F6"; + attribute INIT_11 of inst : label is "E8E6BD6BDF3236CF3A69D04A343B4394374354B168485F243FFD2F69D43D20D1"; + attribute INIT_12 of inst : label is "6D0ED90D018BF9031E539E330ED9D068B028F363ED6BDF3A98F69D6D3FB564B3"; + attribute INIT_13 of inst : label is "D56D37D17DC069D16D8869D1E869D386BD1ED6ED0E507800D11078F7F3066BD2"; + attribute INIT_14 of inst : label is "5557115E7017C191AF41106B0BF54035FD57DF6A47DF5A4F0E4114ED56D54D4E"; + attribute INIT_15 of inst : label is "810ED4019D001D4ED56D183333378D1113D881171F4F4110E154D4ED56D543A5"; + attribute INIT_16 of inst : label is "594F152D7999F61950688E6BD6BD9D4EE6BD5F414866BD9053D783B3501DD011"; + attribute INIT_17 of inst : label is "D96F2D1D364F3CE86D7ED9B1B409ED8F302FC27DFCA942855F216079E1F152D7"; + attribute INIT_18 of inst : label is "066BD3E883ECEE8CE281ED27D2ED300F6BD94F0E411154D54ED56D7ED3ED8E6B"; + attribute INIT_19 of inst : label is "7FFDF6FFF872787E749111D566BF1D56EBF559F5268EF21682E7F4A6837D1ED3"; + attribute INIT_1A of inst : label is "5912B740568B6FD0FF8658E976BD8EF697206BD8E7D070E4747F86BD816D8870"; + attribute INIT_1B of inst : label is "8F4658BEBA8FB48F4638BEBA87B28746108EAA8FB08746F80EAA87B5ED46D555"; + attribute INIT_1C of inst : label is "0FB7D10FB71107B7919111AB061F62BF52A407E9081C07EB10BF81155382B716"; + attribute INIT_1D of inst : label is "00004101010501500440819875A07EC1DC715D6FC1DC7D82D881C87941ED9751"; + attribute INIT_1E of inst : label is "5DF0EEF55DF0FFF88887823A22A0FCCF33F0A884004451045540154010473737"; + attribute INIT_1F of inst : label is "F9BFF2C3FFC2B2C7F887FCA2D1D01F3983FFFFF0000000055DF044855DF088E5"; + attribute INIT_20 of inst : label is "6FA5D5FC22E280E7FCAD02DA9187E9021987E87A877EDFDFBF8CDF98F9FAF1CD"; + attribute INIT_21 of inst : label is "D31633393D3333163511B9DF199B2FED06B09F608156BAFB9F180E60BD281990"; + attribute INIT_22 of inst : label is "068F11D58F8F81D933D42D85D94DEF0010010EDF81D48F11D989F71F23F06193"; + attribute INIT_23 of inst : label is "E016D9EFDB1016D226DE08E6ED9176D016D8E7BD0F80E061ED9F7DCE20EEFFFF"; + attribute INIT_24 of inst : label is "F6FD8F1DDFC860BDA88EE060BD0EC00E98090630E06F71B0BF5B6DCE07F0AD08"; + attribute INIT_25 of inst : label is "F4F3F21CE2F0EF21D9070E5EEB4F706203E86BED816D026D616DF2FD4F8DDFA8"; + attribute INIT_26 of inst : label is "93CE5D51384E98D8F021E8383E98D305E82E398D304E81E1938E5E419FE21EA1"; + attribute INIT_27 of inst : label is "87F82B006F6B0FF61F442EDF937B6BA33063337A3337A9112F8E7A55385E98D1"; + attribute INIT_28 of inst : label is "1C5BC5F64B287F24B2872D0D00FF2B0C818BF1800BDB0CFAF0F32FF0F23D3986"; + attribute INIT_29 of inst : label is "AD0D006DF81DD0DF51006DF11DF72F42FE98DD910EF5A98DDE18EF1AF02F2DAB"; + attribute INIT_2A of inst : label is "1D0E2082E401F81D021E48AC3F938EB8D0DAB6D866D086D3C6D006DFF1DD87F0"; + attribute INIT_2B of inst : label is "F88BC1B37281DB37BB203D7B10503F82B0F2D1D341FD34E7DDEC09D3C6D176D0"; + attribute INIT_2C of inst : label is "81D89CB89B888F8FBF8AAC32B8F0F8DFEA9D118ED5546021F81D2B452430F208"; + attribute INIT_2D of inst : label is "DE68F4518061BDFF2FD5DD7DF21F38ED34E5D9882222207118A67F48D38578F5"; + attribute INIT_2E of inst : label is "8F819B981DD0DF51D3DE2DEFFC18F64188FC1EFB63E9FED06D7100E1BDEFCC2E"; + attribute INIT_2F of inst : label is "E1BD61BD06C3FEDDEDE6D1861BDF81D46FF2FDAD360613DAD46011F915D55557"; + attribute INIT_30 of inst : label is "D36E28D7DF21109D02161BDE1BDE1BD88706BE9001F7DD3DE2D8F0ED6EDB6DB8"; + attribute INIT_31 of inst : label is "DBD5DC8AD7DF5126A09DE1BD48E7BDEFC8E1BD021DB146F81DBF3AE200E2EBED"; + attribute INIT_32 of inst : label is "61BDE1BD88EFD318861BDE1BDB26D6061BD27D7096D86D46D3ED50E1BDD3261B"; + attribute INIT_33 of inst : label is "111D20DBC525D0DF5100E1BD07DE1BD780EDFED17DE1BDA327DAE62EDC6211ED"; + attribute INIT_34 of inst : label is "1C6D176D016D236D9B73077FED39609418063EE8D0DF21E1BDD5DF51EFD81911"; + attribute INIT_35 of inst : label is "5204574AB9B191D57BBB633E393B92BBEF6873E30F6D315DB26D6F6D8B6D466D"; + attribute INIT_36 of inst : label is "42E3C683D0F304E0F406F0F40800F40B10F40C20F40F30F30B9F071248AF0941"; + attribute INIT_37 of inst : label is "010052AAEC89BEC89EC88BEC811E2E2E4E8E0E6D8FF00000000667CD27BD2FD8"; + attribute INIT_38 of inst : label is "0404050100625A0000000500526A00040500427A050422AA01040032AA000104"; + attribute INIT_39 of inst : label is "050405050552F34B550000040552F24040501001505505153F04000041515A00"; + attribute INIT_3A of inst : label is "00051005100450005400550455058000A240AA102A008A005500450001341042"; + attribute INIT_3B of inst : label is "0CC6220800C155551556158A008A00550045000174D0C2400001000000010005"; + attribute INIT_3C of inst : label is "6400510550510510510550550800A00A20220A2055051040F30011005D04F700"; + attribute INIT_3D of inst : label is "4AA20AA00AA20450055005510545450541054105450545450555055105500050"; + attribute INIT_3E of inst : label is "F9D004D6D2D4D6D2F9D0648662DCE4F9D90901004000400048005AA248004A80"; + attribute INIT_3F of inst : label is "FFFFFFFFFFFFFFFFFFFFF0C5F551FF0005DF0FFF8012E612168286D218161218"; + begin + inst : RAMB16_S4 + --pragma translate_off + generic map ( + INIT_00 => romgen_str2bv(inst'INIT_00), + INIT_01 => romgen_str2bv(inst'INIT_01), + INIT_02 => romgen_str2bv(inst'INIT_02), + INIT_03 => romgen_str2bv(inst'INIT_03), + INIT_04 => romgen_str2bv(inst'INIT_04), + INIT_05 => romgen_str2bv(inst'INIT_05), + INIT_06 => romgen_str2bv(inst'INIT_06), + INIT_07 => romgen_str2bv(inst'INIT_07), + INIT_08 => romgen_str2bv(inst'INIT_08), + INIT_09 => romgen_str2bv(inst'INIT_09), + INIT_0A => romgen_str2bv(inst'INIT_0A), + INIT_0B => romgen_str2bv(inst'INIT_0B), + INIT_0C => romgen_str2bv(inst'INIT_0C), + INIT_0D => romgen_str2bv(inst'INIT_0D), + INIT_0E => romgen_str2bv(inst'INIT_0E), + INIT_0F => romgen_str2bv(inst'INIT_0F), + INIT_10 => romgen_str2bv(inst'INIT_10), + INIT_11 => romgen_str2bv(inst'INIT_11), + INIT_12 => romgen_str2bv(inst'INIT_12), + INIT_13 => romgen_str2bv(inst'INIT_13), + INIT_14 => romgen_str2bv(inst'INIT_14), + INIT_15 => romgen_str2bv(inst'INIT_15), + INIT_16 => romgen_str2bv(inst'INIT_16), + INIT_17 => romgen_str2bv(inst'INIT_17), + INIT_18 => romgen_str2bv(inst'INIT_18), + INIT_19 => romgen_str2bv(inst'INIT_19), + INIT_1A => romgen_str2bv(inst'INIT_1A), + INIT_1B => romgen_str2bv(inst'INIT_1B), + INIT_1C => romgen_str2bv(inst'INIT_1C), + INIT_1D => romgen_str2bv(inst'INIT_1D), + INIT_1E => romgen_str2bv(inst'INIT_1E), + INIT_1F => romgen_str2bv(inst'INIT_1F), + INIT_20 => romgen_str2bv(inst'INIT_20), + INIT_21 => romgen_str2bv(inst'INIT_21), + INIT_22 => romgen_str2bv(inst'INIT_22), + INIT_23 => romgen_str2bv(inst'INIT_23), + INIT_24 => romgen_str2bv(inst'INIT_24), + INIT_25 => romgen_str2bv(inst'INIT_25), + INIT_26 => romgen_str2bv(inst'INIT_26), + INIT_27 => romgen_str2bv(inst'INIT_27), + INIT_28 => romgen_str2bv(inst'INIT_28), + INIT_29 => romgen_str2bv(inst'INIT_29), + INIT_2A => romgen_str2bv(inst'INIT_2A), + INIT_2B => romgen_str2bv(inst'INIT_2B), + INIT_2C => romgen_str2bv(inst'INIT_2C), + INIT_2D => romgen_str2bv(inst'INIT_2D), + INIT_2E => romgen_str2bv(inst'INIT_2E), + INIT_2F => romgen_str2bv(inst'INIT_2F), + INIT_30 => romgen_str2bv(inst'INIT_30), + INIT_31 => romgen_str2bv(inst'INIT_31), + INIT_32 => romgen_str2bv(inst'INIT_32), + INIT_33 => romgen_str2bv(inst'INIT_33), + INIT_34 => romgen_str2bv(inst'INIT_34), + INIT_35 => romgen_str2bv(inst'INIT_35), + INIT_36 => romgen_str2bv(inst'INIT_36), + INIT_37 => romgen_str2bv(inst'INIT_37), + INIT_38 => romgen_str2bv(inst'INIT_38), + INIT_39 => romgen_str2bv(inst'INIT_39), + INIT_3A => romgen_str2bv(inst'INIT_3A), + INIT_3B => romgen_str2bv(inst'INIT_3B), + INIT_3C => romgen_str2bv(inst'INIT_3C), + INIT_3D => romgen_str2bv(inst'INIT_3D), + INIT_3E => romgen_str2bv(inst'INIT_3E), + INIT_3F => romgen_str2bv(inst'INIT_3F) + ) + --pragma translate_on + port map ( + DO => DATA(3 downto 0), + ADDR => rom_addr, + CLK => CLK, + DI => "0000", + EN => ENA, + SSR => '0', + WE => '0' + ); + end generate; + rom1 : if true generate + attribute INIT_00 of inst : label is "000094C111101B1F075010064010F4C3FFFFFFFFFFFF0A600A60CC000007F4CC"; + attribute INIT_01 of inst : label is "CC10C01BE1CC030725372C0F75CA732A74C250000A40E195F7C1F014FE14218C"; + attribute INIT_02 of inst : label is "12111E18200710001000100014553668C74C2D1B5F71DCE1CCE4D24D2002BEE1"; + attribute INIT_03 of inst : label is "4C5F11C03020700F1103020F314C06F10C4174C2C4C2EF114004E2121A131D1D"; + attribute INIT_04 of inst : label is "00E4C36F4C3004C24D34D004C5FCA18C11C4C30314C03C3014C374014C014C00"; + attribute INIT_05 of inst : label is "33703C0E7204C004C5F6F06F06F06F16161616C004C14C2D155F4C311CD117C0"; + attribute INIT_06 of inst : label is "2BC4D20014C1FC10C12B22122E45FE3427CB02A72C0F74C14D210C2100E11C4C"; + attribute INIT_07 of inst : label is "F2C032030C02A723F2C3C02A74C2E00501E10C4D17310C111110103272020F71"; + attribute INIT_08 of inst : label is "74E24E3AC3125F12A723025F74E21CC4524250023FC727AC0F74C218C004C3E3"; + attribute INIT_09 of inst : label is "FD048284E201103F234852FD3F033D0F92114113F234242023F033CA72CA124C"; + attribute INIT_0A of inst : label is "225444545422CF3F1B2DC4C3F1C5FF3F804B0302034C124C5F004F005F00F230"; + attribute INIT_0B of inst : label is "F110C020E7EE210C03F20F700210C5F101FA000E5F004D35F004C34C13662220"; + attribute INIT_0C of inst : label is "000491F4F0024F4D8034F493FFFF00000067CEE7F126EEE00CF16E24A0000C0F"; + attribute INIT_0D of inst : label is "4A23220000200100102100105100107150A00106B10024A10004E111A10F493F"; + attribute INIT_0E of inst : label is "A344A34A303030F030F4A303030F4F34D42043F002D1BC4C24524B21524B2372"; + attribute INIT_0F of inst : label is "24007EDDD2F1306F06F0001150C7D3FD05F05F3F04F1105D05D3C7DC15C70144"; + attribute INIT_10 of inst : label is "1F25F3F402413CFF19C4A305FF03A2BA0107D83001007DC302BACDED1EC00049"; + attribute INIT_11 of inst : label is "E270CD15C4A30E34A314CC185185185185185164F1154F014F4D3A14C1BCE23F"; + attribute INIT_12 of inst : label is "4D04DC0024B1FC1D131D031D07F0F004F10300007D15C4A3C4F14C11C3C1D1BC"; + attribute INIT_13 of inst : label is "D05D07D07D321AC04D021AC4021AC121AC07D17C0002B707D402B744A0270CD0"; + attribute INIT_14 of inst : label is "DCF1B203181160CD2F00100E03FD19C1FC07D4A307D4A32F1300006F06F12C05"; + attribute INIT_15 of inst : label is "B207F0011F002F05F05FD100001023FCDBE010E05F2F00013E12C05D05DC0D1E"; + attribute INIT_16 of inst : label is "C75FC1EC30004927C001270CD15C7000B0CD34A20270CDE212FF172002BE0204"; + attribute INIT_17 of inst : label is "DC3F002D401580305F05FECAC0304F7F14C4D3234D3C302334A2D2B715FC1ECB"; + attribute INIT_18 of inst : label is "270CD0E020E0E020E120AD07D07D02BA15CC2F13000E12CE05D05D12C07DC70C"; + attribute INIT_19 of inst : label is "7F4B4B4A4A16151414CDEEDD175FEFD165FEDC4D39034A20203B4A3B107D07D0"; + attribute INIT_1A of inst : label is "CCD1C3F210271BCA5001D03C41AC0300C4021AC034F10830407FC1AC704D02B2"; + attribute INIT_1B of inst : label is "150C025F7024C1150D120F7024C2150C239F7025C3150D220F7025C05D05DFED"; + attribute INIT_1C of inst : label is "C5C182C4C192C4C182CCDE3C01F4A374A37E2B70020E2B7EE03F55CDD211C3F0"; + attribute INIT_1D of inst : label is "0000404150400540011010511A677710211A8899107119ABBC100119DEEFC192"; + attribute INIT_1E of inst : label is "FFF03E8FFFF03FEFFFF8F6BA88A33F0FCCF22A01551154010010451800080000"; + attribute INIT_1F of inst : label is "FCF0F30DA4D40043F02B4D3002D81FF1ECFFFFF00000000FFFF0344FFFF0384F"; + attribute INIT_20 of inst : label is "260EDE4D3030213B4D302030C02B7101102B7CB0CB07F434D47D0F01414D46D0"; + attribute INIT_21 of inst : label is "C2032001DC0002032EECE1181126605D01F11F302100E3FE1A024370CD061220"; + attribute INIT_22 of inst : label is "EE7462D0127472DC07D07D07D07D7F08208104D472D01462D04C1D0411F83E1D"; + attribute INIT_23 of inst : label is "F003DC3F182803D003D034F07DC003D003DC50CDD022F6E07DC07D03020F0000"; + attribute INIT_24 of inst : label is "4A1A046D0F0270CDD151D270CD41036FCF217B27700FD1E03F105D41CB493135"; + attribute INIT_25 of inst : label is "F3FF102001FC3412D6670C0F725F52C031F0D07D603D813D013D4A1B647D0F01"; + attribute INIT_26 of inst : label is "1D03F1E20D0F1CC04938300D0F1CC030FD0F01CC030FD0FF1D03F1F2C4D303F5"; + attribute INIT_27 of inst : label is "B14F0700D4010F4034F8014FC17E8E020030127120171CFD2F0350DF0D0F1CCF"; + attribute INIT_28 of inst : label is "0231204AC00834AC0003001000841100F461F064011C004D50FF019C4111C10D"; + attribute INIT_29 of inst : label is "313C503D472D13C412103D462D4134134318C1B0414A318C1B0514A3493A0170"; + attribute INIT_2A of inst : label is "7D6002B03020412D0111F0242F1D030115C003D403D403D003D103D482D12B49"; + attribute INIT_2B of inst : label is "F002351503600150B002318004343F0120F002DF65F0D734E13E11D003D003D0"; + attribute INIT_2C of inst : label is "1B51B51201207FC7C4F310C0D1E1D234D31DCD1CCDC00011412D01340140F043"; + attribute INIT_2D of inst : label is "D122F1012240CD0F3A12C16C4120DC30D73EDD0033333C1E51051F5189195185"; + attribute INIT_2E of inst : label is "1102CFD0ED15C41207D07D1F1322F101011021FE525105D011D23260CD1F2216"; + attribute INIT_2F of inst : label is "70CDB0CDC30D07D06D06D1270CD412D000F3A11C00011211C00011412EDEDCFE"; + attribute INIT_30 of inst : label is "0D731216C412B11D011F0CDE0CDB0CD02BC3E7140207D07D07D3F07D05D05D22"; + attribute INIT_31 of inst : label is "DF12C1FC16C41200E11DB0CD0250CD3F0270CD01118200412DF0D6303033F07D"; + attribute INIT_32 of inst : label is "A0CDD0CD023F18221E0CDD0CD413D3260CD07D120BD0BD0BD07D2260CD10C40C"; + attribute INIT_33 of inst : label is "DEED00CF17C015C4122250CD17DD0CD021BD07D17DD0CD1117D11115D1DF917D"; + attribute INIT_34 of inst : label is "003D003D803D303DC272CA7F7DFCF11302AE27D115C41290CD12C4123F172CFC"; + attribute INIT_35 of inst : label is "45254440151CCEDDA7225225FC72C1127502A7720F3DFDED413D003D203D003D"; + attribute INIT_36 of inst : label is "41042140F00000F00000F0000000000000000000000000000509054544020544"; + attribute INIT_37 of inst : label is "05040000A108E730A73006310101413121111101F008003300000867A807A302"; + attribute INIT_38 of inst : label is "0501000040000004050104400000050540010000450500004001050000400000"; + attribute INIT_39 of inst : label is "4001010105000004155555555100000750140540144005000000644140000005"; + attribute INIT_3A of inst : label is "0145010505050505550551055040A050A018A000A000A004550454001010001D"; + attribute INIT_3B of inst : label is "333FFB333200555145A1018000A004550454001000003D500040004000500050"; + attribute INIT_3C of inst : label is "1000500540540545555550510A00A08A00A00A05511510400000000044254433"; + attribute INIT_3D of inst : label is "8AA10AA08AA00510055045505150505150415041505151515550455005500500"; + attribute INIT_3E of inst : label is "19CF7280B182B0B119CF92A091807219CC00B1800001000100218AA5002102A1"; + attribute INIT_3F of inst : label is "FFFFFFFFFFFFFFFFFFFFFF40800E3FBEFFFF03FE8FE1E0E1E0C1C0B1E1E0E1E1"; + begin + inst : RAMB16_S4 + --pragma translate_off + generic map ( + INIT_00 => romgen_str2bv(inst'INIT_00), + INIT_01 => romgen_str2bv(inst'INIT_01), + INIT_02 => romgen_str2bv(inst'INIT_02), + INIT_03 => romgen_str2bv(inst'INIT_03), + INIT_04 => romgen_str2bv(inst'INIT_04), + INIT_05 => romgen_str2bv(inst'INIT_05), + INIT_06 => romgen_str2bv(inst'INIT_06), + INIT_07 => romgen_str2bv(inst'INIT_07), + INIT_08 => romgen_str2bv(inst'INIT_08), + INIT_09 => romgen_str2bv(inst'INIT_09), + INIT_0A => romgen_str2bv(inst'INIT_0A), + INIT_0B => romgen_str2bv(inst'INIT_0B), + INIT_0C => romgen_str2bv(inst'INIT_0C), + INIT_0D => romgen_str2bv(inst'INIT_0D), + INIT_0E => romgen_str2bv(inst'INIT_0E), + INIT_0F => romgen_str2bv(inst'INIT_0F), + INIT_10 => romgen_str2bv(inst'INIT_10), + INIT_11 => romgen_str2bv(inst'INIT_11), + INIT_12 => romgen_str2bv(inst'INIT_12), + INIT_13 => romgen_str2bv(inst'INIT_13), + INIT_14 => romgen_str2bv(inst'INIT_14), + INIT_15 => romgen_str2bv(inst'INIT_15), + INIT_16 => romgen_str2bv(inst'INIT_16), + INIT_17 => romgen_str2bv(inst'INIT_17), + INIT_18 => romgen_str2bv(inst'INIT_18), + INIT_19 => romgen_str2bv(inst'INIT_19), + INIT_1A => romgen_str2bv(inst'INIT_1A), + INIT_1B => romgen_str2bv(inst'INIT_1B), + INIT_1C => romgen_str2bv(inst'INIT_1C), + INIT_1D => romgen_str2bv(inst'INIT_1D), + INIT_1E => romgen_str2bv(inst'INIT_1E), + INIT_1F => romgen_str2bv(inst'INIT_1F), + INIT_20 => romgen_str2bv(inst'INIT_20), + INIT_21 => romgen_str2bv(inst'INIT_21), + INIT_22 => romgen_str2bv(inst'INIT_22), + INIT_23 => romgen_str2bv(inst'INIT_23), + INIT_24 => romgen_str2bv(inst'INIT_24), + INIT_25 => romgen_str2bv(inst'INIT_25), + INIT_26 => romgen_str2bv(inst'INIT_26), + INIT_27 => romgen_str2bv(inst'INIT_27), + INIT_28 => romgen_str2bv(inst'INIT_28), + INIT_29 => romgen_str2bv(inst'INIT_29), + INIT_2A => romgen_str2bv(inst'INIT_2A), + INIT_2B => romgen_str2bv(inst'INIT_2B), + INIT_2C => romgen_str2bv(inst'INIT_2C), + INIT_2D => romgen_str2bv(inst'INIT_2D), + INIT_2E => romgen_str2bv(inst'INIT_2E), + INIT_2F => romgen_str2bv(inst'INIT_2F), + INIT_30 => romgen_str2bv(inst'INIT_30), + INIT_31 => romgen_str2bv(inst'INIT_31), + INIT_32 => romgen_str2bv(inst'INIT_32), + INIT_33 => romgen_str2bv(inst'INIT_33), + INIT_34 => romgen_str2bv(inst'INIT_34), + INIT_35 => romgen_str2bv(inst'INIT_35), + INIT_36 => romgen_str2bv(inst'INIT_36), + INIT_37 => romgen_str2bv(inst'INIT_37), + INIT_38 => romgen_str2bv(inst'INIT_38), + INIT_39 => romgen_str2bv(inst'INIT_39), + INIT_3A => romgen_str2bv(inst'INIT_3A), + INIT_3B => romgen_str2bv(inst'INIT_3B), + INIT_3C => romgen_str2bv(inst'INIT_3C), + INIT_3D => romgen_str2bv(inst'INIT_3D), + INIT_3E => romgen_str2bv(inst'INIT_3E), + INIT_3F => romgen_str2bv(inst'INIT_3F) + ) + --pragma translate_on + port map ( + DO => DATA(7 downto 4), + ADDR => rom_addr, + CLK => CLK, + DI => "0000", + EN => ENA, + SSR => '0', + WE => '0' + ); + end generate; +end RTL; diff --git a/Bally - Astrocade_MiST/rtl/roms/bally_check.vhd b/Bally - Astrocade_MiST/rtl/roms/bally_check.vhd new file mode 100644 index 00000000..c7462864 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/roms/bally_check.vhd @@ -0,0 +1,379 @@ +-- generated with romgen v3.0 by MikeJ +library ieee; + use ieee.std_logic_1164.all; + use ieee.std_logic_unsigned.all; + use ieee.numeric_std.all; + +library UNISIM; + use UNISIM.Vcomponents.all; + +entity BALLY_CHECK is + port ( + CLK : in std_logic; + ENA : in std_logic; + ADDR : in std_logic_vector(10 downto 0); + DATA : out std_logic_vector(7 downto 0) + ); +end; + +architecture RTL of BALLY_CHECK is + + function romgen_str2bv (str : string) return bit_vector is + variable result : bit_vector (str'length*4-1 downto 0); + begin + for i in 0 to str'length-1 loop + case str(str'high-i) is + when '0' => result(i*4+3 downto i*4) := x"0"; + when '1' => result(i*4+3 downto i*4) := x"1"; + when '2' => result(i*4+3 downto i*4) := x"2"; + when '3' => result(i*4+3 downto i*4) := x"3"; + when '4' => result(i*4+3 downto i*4) := x"4"; + when '5' => result(i*4+3 downto i*4) := x"5"; + when '6' => result(i*4+3 downto i*4) := x"6"; + when '7' => result(i*4+3 downto i*4) := x"7"; + when '8' => result(i*4+3 downto i*4) := x"8"; + when '9' => result(i*4+3 downto i*4) := x"9"; + when 'A' => result(i*4+3 downto i*4) := x"A"; + when 'B' => result(i*4+3 downto i*4) := x"B"; + when 'C' => result(i*4+3 downto i*4) := x"C"; + when 'D' => result(i*4+3 downto i*4) := x"D"; + when 'E' => result(i*4+3 downto i*4) := x"E"; + when 'F' => result(i*4+3 downto i*4) := x"F"; + when others => null; + end case; + end loop; + return result; + end romgen_str2bv; + + attribute INITP_00 : string; + attribute INITP_01 : string; + attribute INITP_02 : string; + attribute INITP_03 : string; + attribute INITP_04 : string; + attribute INITP_05 : string; + attribute INITP_06 : string; + attribute INITP_07 : string; + + attribute INIT_00 : string; + attribute INIT_01 : string; + attribute INIT_02 : string; + attribute INIT_03 : string; + attribute INIT_04 : string; + attribute INIT_05 : string; + attribute INIT_06 : string; + attribute INIT_07 : string; + attribute INIT_08 : string; + attribute INIT_09 : string; + attribute INIT_0A : string; + attribute INIT_0B : string; + attribute INIT_0C : string; + attribute INIT_0D : string; + attribute INIT_0E : string; + attribute INIT_0F : string; + attribute INIT_10 : string; + attribute INIT_11 : string; + attribute INIT_12 : string; + attribute INIT_13 : string; + attribute INIT_14 : string; + attribute INIT_15 : string; + attribute INIT_16 : string; + attribute INIT_17 : string; + attribute INIT_18 : string; + attribute INIT_19 : string; + attribute INIT_1A : string; + attribute INIT_1B : string; + attribute INIT_1C : string; + attribute INIT_1D : string; + attribute INIT_1E : string; + attribute INIT_1F : string; + attribute INIT_20 : string; + attribute INIT_21 : string; + attribute INIT_22 : string; + attribute INIT_23 : string; + attribute INIT_24 : string; + attribute INIT_25 : string; + attribute INIT_26 : string; + attribute INIT_27 : string; + attribute INIT_28 : string; + attribute INIT_29 : string; + attribute INIT_2A : string; + attribute INIT_2B : string; + attribute INIT_2C : string; + attribute INIT_2D : string; + attribute INIT_2E : string; + attribute INIT_2F : string; + attribute INIT_30 : string; + attribute INIT_31 : string; + attribute INIT_32 : string; + attribute INIT_33 : string; + attribute INIT_34 : string; + attribute INIT_35 : string; + attribute INIT_36 : string; + attribute INIT_37 : string; + attribute INIT_38 : string; + attribute INIT_39 : string; + attribute INIT_3A : string; + attribute INIT_3B : string; + attribute INIT_3C : string; + attribute INIT_3D : string; + attribute INIT_3E : string; + attribute INIT_3F : string; + + component RAMB16_S9 + --pragma translate_off + generic ( + INITP_00 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_01 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_02 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_03 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_04 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_05 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_06 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INITP_07 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + + INIT_00 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_01 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_02 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_03 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_04 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_05 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_06 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_07 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_08 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_09 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_0F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_10 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_11 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_12 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_13 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_14 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_15 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_16 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_17 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_18 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_19 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_1F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_20 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_21 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_22 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_23 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_24 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_25 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_26 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_27 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_28 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_29 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_2F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_30 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_31 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_32 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_33 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_34 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_35 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_36 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_37 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_38 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_39 : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3A : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3B : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3C : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3D : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3E : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000"; + INIT_3F : bit_vector (255 downto 0) := x"0000000000000000000000000000000000000000000000000000000000000000" + ); + --pragma translate_on + port ( + DO : out std_logic_vector (7 downto 0); + DOP : out std_logic_vector (0 downto 0); + ADDR : in std_logic_vector (10 downto 0); + CLK : in std_logic; + DI : in std_logic_vector (7 downto 0); + DIP : in std_logic_vector (0 downto 0); + EN : in std_logic; + SSR : in std_logic; + WE : in std_logic + ); + end component; + + signal rom_addr : std_logic_vector(10 downto 0); + +begin + + p_addr : process(ADDR) + begin + rom_addr <= (others => '0'); + rom_addr(10 downto 0) <= ADDR; + end process; + + rom0 : if true generate + attribute INIT_00 of inst : label is "A716DB2920A715DB08F3201627772728FFAA55002F0F0F2FC98787878720ADC3"; + attribute INIT_01 of inst : label is "264FCA02FE25D9CA01FE27BACA02FE2627CA01FE3628A714DB0F20A717DB3020"; + attribute INIT_02 of inst : label is "0FE679D92673CA02FE25EACA01FE10182748CA02FE2611CA01FE1C18182810FE"; + attribute INIT_03 of inst : label is "0118A03E0520A7780918B13E042084FE79112043CB001640203CFE7A14D9D94F"; + attribute INIT_04 of inst : label is "4706C6780420A0FE2003CD7D2C002618203CFE7C24001E20203CFE7B1CFFD3AF"; + attribute INIT_05 of inst : label is "08D3003EFFD3AA3ED96F675F57810E47AFD9F3C9FB08D96F47AF032099FE7804"; + attribute INIT_06 of inst : label is "C320E221FD6C1823EF21011EF318092818FE790C0820A778ED140EAF0AD3C83E"; + attribute INIT_07 of inst : label is "0116FB5EED0FD3AF0DD37D47ED7C2014210ED3083E4FC8314F00504E04182164"; + attribute INIT_08 of inst : label is "0021200001FBD9800E301823EF21FF0E021ED90A20A77B0E20A77AD9F325CFCD"; + attribute INIT_09 of inst : label is "4F08D67C031EE718122828FE7C214AC30A20A4FE7AF72005FA200D235786AF00"; + attribute INIT_0A of inst : label is "68180618215E21FDFB4F00504E04181318215121FDF323E6C3214A21A00E0220"; + attribute INIT_0B of inst : label is "EE2003BEFD7C234B18217921DD0628A87E70046EFD0566FD0106000E40004F3F"; + attribute INIT_0C of inst : label is "FD7C232718218021DDE928AE772F783318219121DD0628A87E162802BEFD7C2B"; + attribute INIT_0D of inst : label is "21041EE9FD0220A779B13020CBEA1877AF151821AF21DD0628AE2F780F2803BE"; + attribute INIT_0E of inst : label is "FD68780077FD6F67AF0CD37901064FAF481021DD081021FDE9DD4FB14F1821C8"; + attribute INIT_0F of inst : label is "20BC017EDD1320BD007EDDF5203D1CCB1DCB1CCB1DCB0B28A7790177FDAF0077"; + attribute INIT_10 of inst : label is "0E224A214810110CD3403E3318221521051E0718C62004FE4F3C79CF3010CB0D"; + attribute INIT_11 of inst : label is "1A18F23039CB230720BE1A0077FD2F7919CBF33021CB231A20BE1A0077FD7901"; + attribute INIT_12 of inst : label is "4FAF0CD3083EBF7FEFDFFBF7FEFD02010804201080404718225A21071E4F2F79"; + attribute INIT_13 of inst : label is "C67AEA10231120BA017EDD1720BA007EDD0177FD0077FD7E040619D3200C2157"; + attribute INIT_14 of inst : label is "FE1C2801FE22E3CD22CECD103E3818229321121E0718DA2014FE4F05C6795755"; + attribute INIT_15 of inst : label is "22A321081E0218101E233AC3122802FE122801FE22E3CD2C22CECD203E142802"; + attribute INIT_16 of inst : label is "C9013EC904066F4F5F57AF01042108DB0CD323E6C3233A21111E0218091E0918"; + attribute INIT_17 of inst : label is "DB0728A779E22000BEDDA97A0218B17A0420BDAF2333CD2333CD2333CDC9023E"; + attribute INIT_18 of inst : label is "20A77B14CBC83024CB24CB3BCB040001D3104F8479D520B908DB0518DC20BB08"; + attribute INIT_19 of inst : label is "0FDB0EDBFF06C90071FD0072DDC9B130881E0400015755C67A3BCB0218881E04"; + attribute INIT_1A of inst : label is "790C7120FFFE78ED1C0E17DB16DB15DB14DBF42014FE790C23C8C2A778ED100E"; + attribute INIT_1B of inst : label is "D3143E07D303D306D302D305D301D304D300D37808D3003EFF06D610F42020FE"; + attribute INIT_1C of inst : label is "14D316D317D3FF3EB3ED180E080623D621B3ED0B0E080623DE21500AD3C83E09"; + attribute INIT_1D of inst : label is "A7FE18FBD9082084FE790C0A287FCB79D9F3BA104215D313D312D311D310D37A"; + attribute INIT_1E of inst : label is "92DBF5F5FDFF003444481018236821141E1718234E21131E211BC3FBD90C0120"; + attribute INIT_1F of inst : label is "3E311823FF21FFD379391823F721FFD37B5028A70FE6D979D9F3004992DB0049"; + attribute INIT_20 of inst : label is "1018FFD3A03E0220A7242021D978D91F18241121FFD3DE3E2818240821FFD3CB"; + attribute INIT_21 of inst : label is "FBE9F42015F9203DFE10FF06FF3E021623EF21FFD3AA3E0718242921FFD3AA3E"; + attribute INIT_22 of inst : label is "4554495257005244444120444145520058454820544749442D342052544E45E9"; + attribute INIT_23 of inst : label is "0054524F5020444145520058454820544749442D322052544E45005244444120"; + attribute INIT_24 of inst : label is "544749442D322052544E45005244444120545254530054524F50204554495257"; + attribute INIT_25 of inst : label is "002A2A2A2A002A2A004554495257204F54204554594200415441440058454820"; + attribute INIT_26 of inst : label is "36313D35313D34313D33313D32313D31313D30312020202020203D46303D4530"; + attribute INIT_27 of inst : label is "AF004E5552204F5420224F47223D46313D45313D44313D43312020203D37313D"; + attribute INIT_28 of inst : label is "35FFC924410C280435FFC9000FB040001BFF03D302D301D30F3E09D300D304D3"; + attribute INIT_29 of inst : label is "DD0C0EC924AA0C320435FF24950C280435FFC924660C280435FFC924510C3204"; + attribute INIT_2A of inst : label is "78F82013FE200843FF4FEC32FF3EE5D5C930C607C6254DFA0AFEC932FF020D21"; + attribute INIT_2B of inst : label is "35FF071824B80C464835FF0920A7F5C9D1E12546CD47256EF214FEAF012010FE"; + attribute INIT_2C of inst : label is "50CD672003CD78253DCD464811E22815FE3E2818FE2550CD00002124BB0C4648"; + attribute INIT_2D of inst : label is "6F2003CD78253DCDC62815FE2550CDF5C90120A7F167B07C253DCDD02815FE25"; + attribute INIT_2E of inst : label is "CD2516CD24FFCDC9F9203DFE10FF06FF3EC9F16FB07D253DCDB72815FE2550CD"; + attribute INIT_2F of inst : label is "16CD24FFCD25CFCDFFD37CE52571CDAF252ECD24FFCDFD187E2571CD013E251E"; + attribute INIT_30 of inst : label is "CDAF24760C320435FF2526CD24FFCDFD1870C12571CD013E245B0C320435FF25"; + attribute INIT_31 of inst : label is "CD25CFCDFFD37CE52571CDAF24800C320435FF2526CD24FFCDFC1878ED4C2571"; + attribute INIT_32 of inst : label is "25CFCDFFD37CE52571CDAF252ECD24FFCDFC1861ED48C12571CDAF252ECD24FF"; + attribute INIT_33 of inst : label is "2126FBCD0A041124C02124FFCDFC187E70C12571CD013E251ECD2516CD24FFCD"; + attribute INIT_34 of inst : label is "11CD321C1110DBFB0ED3033E0DD37D47ED7C20102108AF0826FBCD00501124D8"; + attribute INIT_35 of inst : label is "11CD00681114DB2711CD501C1113DB2711CD461C1112DB2711CD3C1C1111DB27"; + attribute INIT_36 of inst : label is "11CD3268111CDB2711CD1E681117DB2711CD14681116DB2711CD0A681115DB27"; + attribute INIT_37 of inst : label is "3DCD7E03069E182711CD5068111FDB2711CD4668111EDB2711CD3C68111DDB27"; + attribute INIT_38 of inst : label is "E67C253DCD2546CD0F0F0F0FF0E667C9EB205AFE570AC67A5F18D67BF9102325"; + attribute INIT_39 of inst : label is "CD141C1108D60FDB2711CD0A1C113FCB0EDB081728A708F3C9253DCD2546CD0F"; + attribute INIT_3A of inst : label is "ED7C201221B0ED0FDC01400021B0ED00140127A621400011FA18083CC9FB2711"; + attribute INIT_3B of inst : label is "02D33C01D33C00D3F376FB59ED043E500021200011F80F0109D3143E0DD37D47"; + attribute INIT_3C of inst : label is "043E20001127A0C2151C1C1C1C1C1C09C607D33C06D33C05D33C04D3A003D33C"; + attribute INIT_3D of inst : label is "2516CD24FFCDFFFFFFFFFFAAAAAAAAAA5555555555000000000076FBE1DD59ED"; + attribute INIT_3E of inst : label is "0C320435FF24950C280435FF24FFCD25CFCDE5E52571CD013E248B0C320435FF"; + attribute INIT_3F of inst : label is "37EA18D513127CD1E9E1E1032018FE782571CDAF25CFCD24F30C5A0435FF24A5"; + begin + inst : RAMB16_S9 + --pragma translate_off + generic map ( + INITP_00 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_01 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_02 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_03 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_04 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_05 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_06 => x"0000000000000000000000000000000000000000000000000000000000000000", + INITP_07 => x"0000000000000000000000000000000000000000000000000000000000000000", + + INIT_00 => romgen_str2bv(inst'INIT_00), + INIT_01 => romgen_str2bv(inst'INIT_01), + INIT_02 => romgen_str2bv(inst'INIT_02), + INIT_03 => romgen_str2bv(inst'INIT_03), + INIT_04 => romgen_str2bv(inst'INIT_04), + INIT_05 => romgen_str2bv(inst'INIT_05), + INIT_06 => romgen_str2bv(inst'INIT_06), + INIT_07 => romgen_str2bv(inst'INIT_07), + INIT_08 => romgen_str2bv(inst'INIT_08), + INIT_09 => romgen_str2bv(inst'INIT_09), + INIT_0A => romgen_str2bv(inst'INIT_0A), + INIT_0B => romgen_str2bv(inst'INIT_0B), + INIT_0C => romgen_str2bv(inst'INIT_0C), + INIT_0D => romgen_str2bv(inst'INIT_0D), + INIT_0E => romgen_str2bv(inst'INIT_0E), + INIT_0F => romgen_str2bv(inst'INIT_0F), + INIT_10 => romgen_str2bv(inst'INIT_10), + INIT_11 => romgen_str2bv(inst'INIT_11), + INIT_12 => romgen_str2bv(inst'INIT_12), + INIT_13 => romgen_str2bv(inst'INIT_13), + INIT_14 => romgen_str2bv(inst'INIT_14), + INIT_15 => romgen_str2bv(inst'INIT_15), + INIT_16 => romgen_str2bv(inst'INIT_16), + INIT_17 => romgen_str2bv(inst'INIT_17), + INIT_18 => romgen_str2bv(inst'INIT_18), + INIT_19 => romgen_str2bv(inst'INIT_19), + INIT_1A => romgen_str2bv(inst'INIT_1A), + INIT_1B => romgen_str2bv(inst'INIT_1B), + INIT_1C => romgen_str2bv(inst'INIT_1C), + INIT_1D => romgen_str2bv(inst'INIT_1D), + INIT_1E => romgen_str2bv(inst'INIT_1E), + INIT_1F => romgen_str2bv(inst'INIT_1F), + INIT_20 => romgen_str2bv(inst'INIT_20), + INIT_21 => romgen_str2bv(inst'INIT_21), + INIT_22 => romgen_str2bv(inst'INIT_22), + INIT_23 => romgen_str2bv(inst'INIT_23), + INIT_24 => romgen_str2bv(inst'INIT_24), + INIT_25 => romgen_str2bv(inst'INIT_25), + INIT_26 => romgen_str2bv(inst'INIT_26), + INIT_27 => romgen_str2bv(inst'INIT_27), + INIT_28 => romgen_str2bv(inst'INIT_28), + INIT_29 => romgen_str2bv(inst'INIT_29), + INIT_2A => romgen_str2bv(inst'INIT_2A), + INIT_2B => romgen_str2bv(inst'INIT_2B), + INIT_2C => romgen_str2bv(inst'INIT_2C), + INIT_2D => romgen_str2bv(inst'INIT_2D), + INIT_2E => romgen_str2bv(inst'INIT_2E), + INIT_2F => romgen_str2bv(inst'INIT_2F), + INIT_30 => romgen_str2bv(inst'INIT_30), + INIT_31 => romgen_str2bv(inst'INIT_31), + INIT_32 => romgen_str2bv(inst'INIT_32), + INIT_33 => romgen_str2bv(inst'INIT_33), + INIT_34 => romgen_str2bv(inst'INIT_34), + INIT_35 => romgen_str2bv(inst'INIT_35), + INIT_36 => romgen_str2bv(inst'INIT_36), + INIT_37 => romgen_str2bv(inst'INIT_37), + INIT_38 => romgen_str2bv(inst'INIT_38), + INIT_39 => romgen_str2bv(inst'INIT_39), + INIT_3A => romgen_str2bv(inst'INIT_3A), + INIT_3B => romgen_str2bv(inst'INIT_3B), + INIT_3C => romgen_str2bv(inst'INIT_3C), + INIT_3D => romgen_str2bv(inst'INIT_3D), + INIT_3E => romgen_str2bv(inst'INIT_3E), + INIT_3F => romgen_str2bv(inst'INIT_3F) + ) + --pragma translate_on + port map ( + DO => DATA(7 downto 0), + DOP => open, + ADDR => rom_addr, + CLK => CLK, + DI => "00000000", + DIP => "0", + EN => ENA, + SSR => '0', + WE => '0' + ); + end generate; +end RTL; diff --git a/Bally - Astrocade_MiST/rtl/roms/bios3159_0.bin b/Bally - Astrocade_MiST/rtl/roms/bios3159_0.bin new file mode 100644 index 0000000000000000000000000000000000000000..d35d6a300bc545b838bb1380a6cbedfda1af8871 GIT binary patch literal 4096 zcmX{(4Nw$kmS0cLboc!Ch-eS6$v5_{Hn4_~6@ml?kcA-^oMsg6 zAlh;!m7{j6_T0_ZUbgBgg_Wy=bF+@OdmFjbT>?iiboxdmgp^jQQ}nVkr)ftS6@ubS z-)r3Xrsw;<_y4`u-QRnS?j~lKi66NpXk1cPf{h6WrXJ9LYfQND%275aPq6q1e^@pq z3UB}+nAc(SGlDSY7bj=cR4$bRYHpjv`;J+jtf@}T1{6g1tV8RAWLZx1ck^AdxqZ&u zK}W8O%ynC4RV^pkb6vJvw^g3jBwlIo9Y?cbaE(r(z;lEW6Ued^(cYRILDPM?Ryr4< zxUlRRp)AT&0H z#u#K>KxJbU6<6lxZ{IFZE>B$E^zmhkKf8iR;7{DV%+O;dT%J+@rksk?Ifc>O#K(6b zrKwDJ2xY>dsTpr*>x?@&Wc7HHl2w}?&#uU|55)Z0PyD#{rg#CDC+^M^&a5MxOs0>0 z=v!+^-g6~WL>>OWT(upolwB7$To+C59};r%CYg)bb5S~9a5Z0YC1h0I6y=ZHsvENt zL)M9YD`psi{xdUVr3l-Hjs}1a+@H9=T)(5~dAzGx+}VP7EVkl~_NEtFcJ6wFgqwD> z>_W*di>|yP(D5`W5EWq)ofvg0Owe(n;?VJm{k+1+3UhU$93>`a!@56}IS;|GcV$h> zX{s65yqp}f%uiCNPuXS{_00M4>2edbkGu8a;)L<4aj?cww+Sz6)y6n?z{KavWAko2 zuZ?rNRV^VJhjqC2ABv~gTzK1LD)s1*Yg2E4Wr?337VNrlaJYUGzOVD3cvI8HXD8bz z1P+w|IGj{!67TWs!(o988EeKhrAe?D2Q+y6jRVHZx_KRZY4b+pm+~D~^$>b{Q;cVq z%cZ4(n7m3?q^WA8C%)mxFKtAd{j0>>R!Rm>Zo6~~gcC(S-?XLxbo0MiUy+M3@?zO- zG5Ib@tVi~rZn!O$WyKyq{Ts64U+dXn@tD9Q{6V75jqguPJHEdov5qcXUx-)iKb7@Y z_$Z&ym3xz^Fyz!D*vHv>vd5lja%Fxn$?_iQ$mVXO)2*{;$~K zF5%gw_!Db5=UQ*@;W3(it?r2e?Ogh#K%a}HPlo$tf;G*a!!{TDbzD~V3$8Q^EH>On zf9{fD6AH?u3)o)$ z0x#8Xig6xuum_e!rB$#fdDFws<;u@Qb;A`g`OwCZWtT*??20Jy7ashLt@10e_A`;- z7^NX-$-G0^{xVx(wrAc^8fxfr&T8Yi#S8dm?Wf|*y4o3Wrf}k(Eq^*#sPqU-9F#ME z;LfM%C05M5!wq9v;=v#HcK&>jN_%@sxKMs9X!m_8W`;6D+&^HaT7|Gfg%gg;=C1@d zrM-DOcBu!E%B%Ze;J$!^mDlsunoreo^)Q0r2;wg0=Yo#3mqKFaUOSh@j@tX;t%1t> zBKK~7L0BU}Bz(fm(*}qSVwDp>0k*k4I6~z3>>f$XkJVVFWj@{TzF-CSx2D09uJrxS z38cJ&t<%|*ej}$aOR7RhYQ&;eTTt#5YN~H|%10vApX{Q1Hkeat7om0|bswo7v>b2p zv$_8gtf2Rvs#sfvEyw3u`TXS|Jz8UJ9j(E<8YN9j!2B``LuBe$#h(6(o&tzUJxs{_ zy!sQ1`YNdb?`=7ej5y)3pK;~7?R{Qvx}k1Qp+JX>dr-NJV6$kOoCgG+S&#UPc`Xr5b0uMhJ&RM6y0h?}2;*Jb!YhE@ZVC69yd#bktm zQjx94i`+BnuMre$DB)^^R9mfZpWOIswTn`_ZGMoO1=?gP`7)yc-#(s`Y=57N+1Q)Y zU;y5~aXBYZGz}>aC!YRCID6$}h-ovcyJS`0AlQ}sP>uaqllq2*UD=c9k--Rs)Rb!a z+oqy@N2{Ifhe?Hy`~7es=+p{PK{_JdNn$N5XQ@32B5bWH^Q`Ru1x?X2CNLA=%5Kv+-oXE zqk~LzU|<=hATttgK=P(3Q=>L zILep+8#p~QHgwul23Q`vIx+$xgHt1K!DvduXnFu9_#1>|nHVU5%_yitZcJDeG@}{p z=vc)@My{F&?l3t(f-J5kYdH#mL+HqijzLk@geZ=Vm?8)_E;qsmFcO8CU50ScsuhGV zBmyu1Rhw6DK#>j1I_wfOIx=qV{^56a?s}%;>6&e2TdS%!Z>juV`NrT=^?EFG=BwKd z86F+Z2Iq)!CwIh}J8a`*KxSMrnj0D#np@q`9G)APn}d4@q&aLNcn*dkpaH-PD`3o_ zM)NlZkU1}>(hm>yr^!DqrW^YOvf|>8y#L1jOeUQ|h<4WID=zTa8fSM8G>4y4c5nN+hi3{Yvu-f~GaiZ6+k2*Gh&4-Ke+3fF&F%J>VA z*W$bD4j?S?`P~8;;4H>prBX@1+sC>HJE3avi$S9@wArY9R8NepA?DPcCs?bxkARw( zI{rue#kNU;Abji&BQh>Q7dKi%g&K@X?uIrU)*)T&1KzBdaC~an$<(8JE-$7g!HH4D zVEYBPW^C26VI}Je291dE1Ft-56r;vb0vW}lO>OSonvX*stFcwSmi&!d%t`dWr5mOK z)$WvW)M$1hqov&~7o2pj-R&;Z=oKmA)~L(N{NiEq*OeP!7RDz4%259EAJ* zm(V8m!L=B-)`hKL&!yZq8uRr6llERSdS{L5>1*=jwN$(=9eVPbmlJv)@Q?Qov693rTMuXO`R>Mxv9N*cY9N(xD)Ma z-udkI?d{J-!f01ZdrNaCHgC~>=6Sc!T#C0hwYR^3ceIA_mTgbhAj5$e@^iCy0o#1pN-R#*jJ6#K2Sq9yRWCuKDM zoyTZ7*YeMvf**U-z(S<!9Vmy^t^Nj{ORc?Yr(_)%5_HOj5UBzm5 z5wxdJ)Qr6wylqB_jCP+j2#b|jCXBeTcV0}hW6<81az?Fs_*?3c5*_RlBx8J6;}Wn* z-`z;nogaIRSTN7jSfDztF=Fu;Ur==?21M&)>`kw4F=E6Vb$L=)%+o>^I6~!}ND;(A zI7G*(d`D2V^pK9%^G^jov+N1njkNMovdFuCHuS^Ozua@&C{kIwN6-@Uv(jZ qD}yA}=dGW1cmp4Kl4m`E)atloj!nKl8LEFWx!DUJ3n6RetoZ*~6u&tD literal 0 HcmV?d00001 diff --git a/Bally - Astrocade_MiST/rtl/roms/bios3159_0.hex b/Bally - Astrocade_MiST/rtl/roms/bios3159_0.hex new file mode 100644 index 00000000..0968c853 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/roms/bios3159_0.hex @@ -0,0 +1,257 @@ +:1000000000F3AFD308C3610CC307201C3C1C20FFC6 +:10001000C30A2006FA0762FFC30D20FB7610FDC954 +:10002000C31020732372C9FFC31320210000C9FF2E +:10003000C31620008B0101FFE3F5C5D5DDE5FDE525 +:10004000FD210000FD397E23117A021F3836E5D5E7 +:1000500021CB00075F16001730032AFD4F195E23DE +:1000600056D5FD660BFD6E0AFD5603FD5E02D5DD1D +:10007000E1FD7E09FD5605FD5E04C9D1E17E23CB7D +:100080003F117C00D54F3012EB0600214B01CB779E +:1000900028032AFB4F0946CDA800D179FD4607FD6C +:1000A0004E0618AAE1D123E5CB60280A1A13FD7782 +:1000B000021A13FD7703FDE5E123232323CBA0CB15 +:1000C0003830031A13772320F6EBC97B007902320C +:1000D000067D00730BC40AA4008B017E040805FC96 +:1000E00005CF03DB01EE0AB206FE060B0715071962 +:1000F000071C077D079E07B903AD076A02E107C425 +:1001000007EB0BF60AFB0A56063306C90AAC010CCC +:10011000060B06BA01970CFB0C310D1B00CC0B151E +:100120000C760B900BAC0BBD0B4B0BAA0D21031FD8 +:1001300003DE028402640341036E03290356034C69 +:10014000037F03410C6C03230040020000C0C00089 +:10015000C0080004F0002AC02F2FD0E3E3EFEF1314 +:10016000CBCFC3CF27C7CF2020D4D00003C0C0003F +:10017000C3ECCF0807C0C0C0C0C0CFC8CBCBCBCB6F +:10018000C80BCB0B0BC82000E0C3C7F3F5C5D5E502 +:10019000ED5E3E00ED473EC8D30F3E34D30DCDA0FB +:1001A000040E0FCD7E04E1D1C1F1FBC93AFA4FFE36 +:1001B000AACA19203AEC4FB7202BAFF3D315D316A8 +:1001C000010B08ED7910FC111402CDF40CCDE50102 +:1001D0003C20E7FD360900FB2AE84F22E84F010BDF +:1001E00008EDB3AFC9CDEC03FD7709FD7007FE1331 +:1001F000D8FE1CD03EFF32EC4FC9C40DDD0D2010DF +:10020000C3A004C37B042008080107E408A0040677 +:100210000105BF0A3F3F3F3FBE0DCA0DDE174D41EE +:10022000582053434F52450023204F4620504C4105 +:10023000594552530023204F462047414D45530016 +:10024000CD5602EBCB71280778E60328012F47CD66 +:100250005602EBC3B80BCB08300A7D2F6F7C2F679B +:1002600023CB08C9CB08D8C32B00AFC5D547EB19A2 +:10027000E5EDB0E1D1C110F3C9E1E1FDE1DDE1D18E +:10028000C1F1E3C9CDC002E3C5060079CB39094FFE +:10029000EBEDB0C1D12BE3C5060009C10DEB1B1B73 +:1002A000AFFF74FF6E380A3C2720F8E136FFC11813 +:1002B0006AFF74FF6EE32B77E30D20E3E1C118556D +:1002C000DDE1AF4FFF72EBFF72EB676F78E510FD7A +:1002D0004739C5E5E5FD660BFD6E0A48DDE9CDC091 +:1002E000027E23E3A72809EBFF6EA73D2720F9EB49 +:1002F00023E30D20ECE1E1C1D5C5480600CB390967 +:10030000CB21EDB0C1C5CB38AFB62310FCA7280375 +:100310003EFF12C1E1CB412802FF6AE110FDC9FF97 +:100320006AFF6CEBFF6CEBFF6E682D2600197EFEFA +:1003300050D8EB3E009E27772310F82B7EF680776F +:10034000C9682D260019CB7EC83600EBAF3E009E53 +:1003500027772310F8C96826002D19CB7EC83600F0 +:10036000FD3406C94806000D097EEE8077C9AF1A34 +:100370008E2712132310F8FE99172FFD7708C9F561 +:100380002AEF4FCDAC03011700098A22EF4F2AF163 +:100390004F5FCDAC031922F14F5AEBF1A74F7A28EA +:1003A00008AF1930013C0D20F9C3D10A444DAF16F6 +:1003B0000729171520FB098AC9EB71237023AFEBBE +:1003C000CBF4C5E547EDB0E10E2809C110F4C90E24 +:1003D00009ED410CED51D30EC95E010108790F4FB3 +:1003E000A3200310F8C9AB777882E1C9282521DD65 +:1003F0004F1600CDD903160823CDD903011C0423C1 +:10040000ED785E933805D60838063C83774779C97E +:100410000C10EC21E34F7ECB7F2806CBBF773E113B +:10042000C9E5CD7400EB0117041100FFED78A6209B +:100430000A0D1C2310F6781E12180B140F30FC7ACC +:100440000707833C1E13E1AEE67F2807AE77E67F01 +:10045000477BC901100423ED78AE20050C10F77816 +:10046000C9CB67280CE610AE77E610477907D60CA3 +:10047000C9AE77E60F477907D60BC935C0700608B5 +:1004800021D54F1600CB39300A7EB728063D2720EC +:1004900001377723CB1A10ED3ADD4FB232DD4FC969 +:1004A00021F94FCB4EC0CBCEEB21EA4F7EB7281CB3 +:1004B00035200BE5DDE5CD1405DDE1E1180EEBCBD4 +:1004C0007EEB20083D3D2004D316D3152335F202E0 +:1004D00005363B23EB21E34FCBFEEB7EB7280135FE +:1004E000237E23B628132B7EB720093659237E3D61 +:1004F0002777180E3D2777180921F84FCB46280299 +:10050000CBFE21F94FCB8EC932D44FDD22D04FCD57 +:10051000FC0518032ACE4FDD2AD04F7E23B7FA5BA5 +:100520000532EA4F3AD44F011808CB3F3002EDA311 +:100530000605CB3F3002EDA30604CB3F3009EDA307 +:10054000CB3F38072B1804052318F5B720EC3AD217 +:100550004FD3163AD34FD315C3F405FE903015CBC5 +:100560005F280878011808EDB318B0E607F6104FB9 +:10057000EDA318A720077E2332D44F189EFEB0307B +:1005800006E60F5F1C183EFEC0300911D24FEDA0E9 +:10059000EDA01887200BDD3500200ADD232323186A +:1005A000F1FED03027E60FFE09200CDD6E00DD23C2 +:1005B000DD6600DD2318DB5E235623EBFE0438D214 +:1005C000DD2BDD7200DD2BDD730018C6FEE0300A86 +:1005D000E60F06004F545D0918E6200A3AF94FEE7F +:1005E0008032F94F18ACFEF028127E32EA4F23AF6A +:1005F000D316D31522CE4FDD22D04FC9AF32EA4FEA +:1006000032F94F011808ED7910FCC978D5577E4FA3 +:10061000FEC03802D1C923E63FBA2804232318EECE +:10062000D15E2356EBCB79C27D00CB712004D1F192 +:10063000E5EBE9FDCB08F6DDCB017EDD4E02DD36D4 +:100640000200FD7106C879A7C8110300DD19CD5657 +:1006500006110500DD19E5DD5601DD5E00DD6603EE +:10066000DD6E027C411910FDBC2804FDCB08B6DD0F +:10067000CB044628317CE34623FECF3007B838044C +:1006800046B8382023DD7003DD360200DDCB04DE02 +:10069000F1DDCB044EC87A2F577B2F5F13DD73003B +:1006A000DD7201C923E3DD7502DD7403E1DDCB04F6 +:1006B0009EC9AFCD4E0BEBCBF4D30CFD5E09790F89 +:1006C0000FE63F3C571528073EFFCDE20618F679A6 +:1006D000E6033C4FAF0D28060F0FC6C018F7CDE25A +:1006E00006AFE5C532FF0F3AFF4F4F7BAEA1AE77A5 +:1006F0007DC6286F7CCE006710F1C1E123C9DD7E85 +:1007000000DD560BDD5E06DDCB01F6F57E23835F53 +:100710007E238257F14E234623CDF60ACB77202C39 +:10072000CB5F2011AFC5D547EDB012D1EB0E280934 +:10073000EBC110F1C9EBC5E5411A137723772310FC +:10074000F8702370E10E2809C110EBC9CB5F2016A9 +:10075000AFC5D547EDA01B1BEA540712D1EB0E28FD +:1007600009EBC110ECC9EBC5E5411A13772B772BC8 +:1007700010F8702B70E10E2809C110EBC9DDCB0118 +:1007800076C8DDCB01B6DD660EDD6E0DDDCB007605 +:1007900028087BED443C4F06FF09CBF406003E28B9 +:1007A000934F7843772310FC091520F7C9EB4E23AC +:1007B0004623CBF2AFC5D547EDB0EBE10E2809EBF0 +:1007C000C110F2C97EA7C8FACE07FE643006CDE19B +:1007D000072318F0E6174723EBCDA800CD680018D3 +:1007E000E3C5E5DDE5A7FAED07DD210602FE2030D1 +:1007F0000DF5CD4E08CDF40CF13D20F5183BDD96FE +:10080000005F1600210000DD4E03DD46041910FDD7 +:100810000D20F7DD5606DD5E0519CD4E08D5DD4607 +:1008200004C5E5CD6C08E1DD4E0309C1FD7E0581FF +:10083000FD770510ECD1CDF40CDDE1E1C1C9FD7E01 +:10084000060707E6033C47AF378F10FD47C9CD3E8B +:100850000848FD5605FD7E04DD860110FBFEA0382C +:10086000097A41DD860210FB57AF5FC9DD4E0306F2 +:1008700000DDE5DD210000DD39DDE5D13E0CD319D9 +:100880003E08D30CFD7E06E6C028210707EBA7ED46 +:1008900042ED42F9CBB4F5411A137723772310F8D0 +:1008A000CB21F121000039545D3D20E1CD3E08CD42 +:1008B0007400FD7E06D319E630F608CD080BEBF583 +:1008C000C5D5E5411A137723772310F8FD7E04E69A +:1008D00003280170E10E2809D1C1F1D30C10E0DD2D +:1008E000F9DDE1C9000000000000002020202020E8 +:1008F0000020505050000000004848FC48FC484888 +:100900002078807008F020C0C810204098186090AF +:10091000A040A890686060600000000010202020C7 +:100920002020104020202020204000A870D870A84F +:1009300000002020F820200000000060602040001F +:100940000000F800000000000000006060000810D7 +:10095000204080007088888888887020602020204F +:100960002070708808708080F8708808300888705F +:1009700010305090F81010F880F00808887030405F +:1009800080F0888870F80810204040407088887097 +:1009900088887070888878081060006060006060E7 +:1009A0000060600060602040102040804020100007 +:1009B00000F800F80000402010081020407088085F +:1009C000102000207088B8A8B88078708888F888CF +:1009D0008888F08888F08888F070888080808870A7 +:1009E000F08888888888F0F88080E08080F8F88037 +:1009F00080E080808070888080988878888888F8F7 +:100A0000888888702020202020700808080808881E +:100A1000708890A0C0A09088808080808080F888B6 +:100A2000D8A8A888888888C8A898888888F88888D6 +:100A3000888888F8F08888F080808070888888A806 +:100A40009068F08888F0A09088708880700888701E +:100A5000F82020202020208888888888887088882E +:100A60008850502020888888A8A8D8888888502056 +:100A700050888888885020202020F8081020408046 +:100A8000F8704040404040700080402010080070E6 +:100A90001010101010702070A8202020200020407E +:100AA000F840200020202020A87020002010F810FE +:100AB000200000885020508800002000F80020000E +:100AC00000000000DDE1E3DDE948060021D50A0968 +:100AD0007EFD7709C920435E5C2552533B2F373892 +:100AE000392A3435362D3132332B26302E3DEB77F3 +:100AF000EDA1EAEF0AC9CD080B1805CD4E0BCBF2DC +:100B0000FD7304FD720518C9CD4E0BD30CC900E06E +:100B1000A0A0A0E04040404040E020E080E0E02095 +:100B20006020E0A0A0E02020E080E020E0E080E085 +:100B3000A0E0E020202020E0A0E0A0E0E0A0E02075 +:100B4000E0004000400040E0E0E0E0EDB0C9E5E654 +:100B5000FC6F7BE603B5F5E6407B28032FC6A06A51 +:100B60002600292929545D292919CB3FCB3F5F163F +:100B70000019EBF1E1C9CD7B0B188BE5C50600CB65 +:100B800039097EC1CB4128040F0F0F0FE60FE1C9D1 +:100B9000E5C50600CB3909C1CB412809070707077E +:100BA000AEE6F01803AEE60FAE77E1C95F1600CBF4 +:100BB00023CB12195E23562BCDF40C18085F1600B8 +:100BC000197EFD7709FD740BFD750AC9DD210D0243 +:100BD000064221EE4FC5FDCB06BECDEB0BC1CB7956 +:100BE000C83EBACDE107064221ED4F78E63F3DF819 +:100BF0004FCD7B0B2007CB782803B12014CBB8C690 +:100C000006E60FC62ACB702802F680CDE1077918D8 +:100C1000DD3E2018F00603E57EC60127772003237A +:100C200010F6E123233AF84FCB4FC811F64F0603D5 +:100C30001ABE2807D021F84FCBFEC91B2B10F11884 +:100C4000F4FF3530184C570CFF0EFF431402FE140E +:100C50002804FE1320F4C747414D45064F56455220 +:100C6000003A0020FEC3CA002031CE4FFF1BCE4FFA +:100C700032000032FF0F3D32EC4FFF001517BF2945 +:100C8000081913000F0211F30D2100207E23FE55D9 +:100C90002803211802FF4AE5E5CD190D11100C01BA +:100CA0000901DDE178C630FF323E2DFF32DD6603FB +:100CB000DD6E02FF343E0882571E1004DD6601DD42 +:100CC0006E00E57CB520DB39C501010111104DFF37 +:100CD0004EC17EA72803B838063E3FFF3218E9E12F +:100CE000D147EB5E235610FA235E2356234E23464C +:100CF000E1F1C5E5FD7304FD7205C9F5E5C5CD1942 +:100D00000DFF35082009B70DE1FF34E1F147CBF1C4 +:100D1000113030FF4EFF510FC9D5FF1B0040B80105 +:100D200000FF1BB841480D55E11118000E04FF34B7 +:100D3000C9D9CD990D4FFD7E07A9E63FC821360DD3 +:100D4000E5FF76FF430B00FF454C0DC9137F0D14E3 +:100D5000550D1C610DCB60C8793C283ACB79C00E8B +:100D6000FF793CC0D978D9FE01060A28020664DB67 +:100D70001C57AF5F6719CE002710FAD97718140CEB +:100D80002004CD990D0CCBF9FF40FE3D2808E60F5D +:100D9000D9FF60D5FF36D1D9C9C5D9E5783CE63E43 +:100DA0001FD94FAF47D1FF1AC1C9F5783CE63E477E +:100DB000F1ED6F2310FBC9454E5445522000FA0156 +:100DC000D30D28130000E80D190E47554E4649472C +:100DD000485400434845434B4D4154450043414C22 +:100DE00043554C41544F52005343524942424C499F +:100DF0004E470053454C4543542047414D456708F5 +:100E0000580D2843292042414C4C59204D4647203B +:100E10003139373800FFFFFFFFFF4D280201F34F44 +:100E200031E84EFF001B0040600E001BF04E7800C2 +:100E30000017B828085FE84E08000C1019E84E7D2E +:100E400046240A4F7D5324284F7D4630464F7D531C +:100E500030644F7B04D54F0221580EE5FF43650EE9 +:100E6000FF45A10EC92F0F0F0F050E0378FE1428A2 +:100E7000AF0F0FA1FF5D290FEB78A1677994FF5D9C +:100E8000E84E1A86CB582804AEE607AE7723232314 +:100E90002377FF19E84E3E1432D64FC9AF32E34FE5 +:100EA000C901D30F029C0E13690EDD21F04E3AF3F7 +:100EB0004F474FC5E511BA0ED5E9111E00DD19E106 +:100EC000C110F0C97990FF5DE44FE60FCD0110DD50 +:100ED0007E1A82FE983003DD771ADD7E1B84FE5574 +:100EE000D0DD771BC9DDE5D11AA7C8DD661DDD6E33 +:100EF0001CFF2EAF12C97990FF5DE44FE610C82B9E +:100F00002B2B2B2B7E07074FE603FF5D260FDD56AD +:100F10001BDD5E1A47790707E603FF5D220F48FFD6 +:100F20001CC90055AAFF01020408F801FF78FF5D03 +:100F3000E34FE610C0E5DD561BDD5E1AFF3ADD72B9 +:100F40001DDD731CEBDDE5D1010308FF2CE118AFBB +:100F500021F04E11F34E35F2690FFF7730FE08385D +:100F600002E6033C12FF777877231335F2770FFF01 +:100F7000770412FF777877231335F2930F11F54E2C +:100F8000FF770A3CFE0328F5FE0728F112FF7728B9 +:100F900032F24E1ACD0110010A4F0A82FE5030DDA6 +:100FA000025F030A84FE2E30D4025721F34E4623FB +:100FB0007ECD1A0F67D53E5C9092577CFF1C3EA0F9 +:100FC00091935F7CFF1CE154FF1C3EFF32EC4F3ECF +:100FD00001182A3AF34F3DFE04D2500F21C40ECD22 +:100FE000AA0E21E50ECDAA0E21F60ECDAA0E4111B4 +:100FF000E2FFDD19C5CD2D0FC110F43E0432D54FEF +:00000001FF diff --git a/Bally - Astrocade_MiST/rtl/roms/bios3159_1.bin b/Bally - Astrocade_MiST/rtl/roms/bios3159_1.bin new file mode 100644 index 0000000000000000000000000000000000000000..dfbc12860fa1ca4be56ca8a04d878154603c6a2b GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/Bally - Astrocade_MiST/rtl/roms/bios3159_1.hex b/Bally - Astrocade_MiST/rtl/roms/bios3159_1.hex new file mode 100644 index 00000000..d47a2891 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/roms/bios3159_1.hex @@ -0,0 +1,257 @@ +:10000000C9C547FF7F0001000001C1C90862A507FB +:100010000862A507FFFFFFFFFFFFFFFFFFFFFFFFD6 +:1000200031C04EFF001B0040600E001D08527009D9 +:10003000FF17B81F08191C131BC04E9400000F03B4 +:10004000CD8611214310E5FF431402FE13C078FF53 +:100050005D9F10E60F4FAE0F0F0F0F5F21C24E7E58 +:10006000A728327BA7C05779FE0EC82371345F2BB7 +:100070007E0F3807CDCA10EDB01809CD0A12CDCACF +:1000800010EBEDB021000022DA4E21DD4EE5CDC7A8 +:1000900012E1C3DE117BFF5BB810D521C14E7EC9D2 +:1000A000806061315152401407080913040506129B +:1000B0000102031170000E208A11E81011112311A2 +:1000C000DE10D8103812AF11201021E64E060B4872 +:1000D0001910FDEB21CF4EC921C24E711842CD0A35 +:1000E00012FF6B0BCF4E1838FE0220043601181B8E +:1000F000FE00087908200F3601CD1612FF5FC44EAE +:100100000B00CF4E1803CD4611084F7932C04E1860 +:100110000F3DC03602CD46113E0532C04ECD1612FF +:10012000C38410A9C0FF5FCF4E0900D04E32D84E15 +:1001300021C44E060B3ACE4EFF6632CE4EEB010B7B +:1001400000CD751118DACD16123AC04EFF5B58116A +:10015000D521CF4E11C44E060BC96211651168112D +:100160006B11FF6201FF6401FF6601FF68FF5FCF53 +:100170004E0B00C44E092B7EE60FC83E01773C3281 +:10018000C14ECD1612E10E001825CD0A1221DA4E0D +:1001900011CF4E7EFE0AC8237EA7280FB9C8792347 +:1001A0004E35EBFF584FEB2B2B182A2BB62012CDD8 +:1001B0000A12C5FF1BCF4E15000021DA4EC1B1282F +:1001C0001C79FE0E20072377233609180913131311 +:1001D0001313CD0F13347911DD4ECD0F13EB11082E +:1001E000530E07E521C24E7EA72802C631C620FF66 +:1001F00032237EA72807C60F36002B3600C620FF05 +:1002000032E13AC04E0E03C38A1221C14E7EFE0275 +:10021000C0AF772B77C9FF312800085C20402158F8 +:100220004ECDC71221E44E7EFE5C280134237EA70A +:100230002819FE52281534C9AF32E34F21E44E7E0F +:10024000CB41201AA7C8237EA7C8353E08FF312816 +:1002500000204F28403D20F53C11184918182396DE +:10026000FE0BD8343E08FF31D8FF2050804C3D2093 +:10027000F53E0A11180121E54E8621804E01D8FF76 +:10028000093D20FC0E0DFF560E00F5410E0CFF56E9 +:10029000CB4F2016CB473E0428023E08B04F068BBA +:1002A000FF36F1FF5DC112FF32C948CBD921B4122C +:1002B000FF34F1C9202A4F564552464C4F572A2049 +:1002C00000202B2D62633D11CF4E3AC04E0E0DFF24 +:1002D000583AD94E070DFF58EB010600AFFF1A0E32 +:1002E00013FF56CD0F13200D0D79FE0920F33E0E9E +:1002F000CD0F1328ECEB7EE60F2005CD031318F687 +:10030000FE0EC001060009A7412BED6710FBC906D0 +:1003100005EBE5ED6F2310FB77E1EBC97662000793 +:1003200007070707FFFFFFFF31964FFF4D3502829A +:10033000DC4FFF4D280201F34FFF1B964F0C0000CE +:10034000F331964FFF0019A917151BE44F04000065 +:100350001BA24F22000017BE67081D0000A00B550E +:100360001D7A001E09001D57001D09001D2B001DD0 +:1003700009001D04002109000F0221283322AC4F7F +:1003800021783322B34F21501F22BA4F21504722E8 +:10039000C14FCDB314DD210D02FF374C022442DCE6 +:1003A0004F3AF34FFE0538023E0432A44FFE0238A6 +:1003B00004FE0538023E0432A24F3AA44F473AA247 +:1003C0004F4F16007ACD5B16C5D57AC631DD5E0477 +:1003D000DD56051D1DFD4E06FF32FD5E07FD56086C +:1003E000D5FF32D17BC6065F1414010104FD6605FA +:1003F000FD6E043E10FF24D1D5DDE57A06004A21CA +:10040000964F090909CDE215DDE1D1C1AFB0280948 +:100410003EC0DD7706051806003E80DD7706140D28 +:10042000AFB120A03E03F5FF510532A34FCD90148C +:10043000F1F5C630114C2F0E44FF32FF5128FF1446 +:10044000F13D20E2CDB314CD4916AF32DD4FFF436D +:100450001402FF45581418F6416B14558314578342 +:10046000145983145B8314538A14C0CD49163AA3DC +:100470004F3CE60332A34FCD5B16DDCB067E28EE64 +:10048000C3BB14D615CB3FC31D16CD4916FF48C9B3 +:100490003AA34FCD5B16DD7E0306030F380210FB37 +:1004A000480600FD09FD7E00D3133E09D3153E1119 +:1004B000D310C9FF1BB841200D00C9DD4E00DD4639 +:1004C00002DDCB06762003AF474F78B7200141DD30 +:1004D000700078B720050E00CD7E16DD7E01CDAB15 +:1004E000162813CDA916280E41CDA9162808DD46D9 +:1004F00001CDA916203CDD7701DD7703DD5605DD52 +:100500005E04CD2415FD6605FD6E040101043E1058 +:10051000FF243AA54FDD77043AA64FDD7705CDFFDE +:1005200015C39014D5FF3B00EB0600110104FF2A10 +:10053000D1C9016C171180173E0521B117F5C5D53A +:10054000E51AD304C5DD5605DD5E04CD2415E13E74 +:1005500010010104FF24FF5107E1011808EDB3D198 +:10056000C1F13D2807130303030318D1FD5605FD10 +:100570005E04FD210000FD19110004FD7E0021B87C +:100580004101200DEDB12005032B7318F7FD231554 +:1005900020E9DDCB0676280421A44F35DDCB06BE4D +:1005A0000E040D79CD5B16DDCB067E28180600C53E +:1005B0007921964F09090937CDE215C1FF5479C554 +:1005C000B7CDE215C1FF511E79B720D621A24F3514 +:1005D00035280234C93ADC4F3D2732DC4FC2401384 +:1005E000FF78FD4E093004CBA1CBE9FD5E07FD5637 +:1005F000083E0C835F140643DD210D02FF36C9DD82 +:10060000CB067EC8DD7E03CD2E17DD5605DD5E04EC +:10061000E5CD2415E10101043E10FF24C9CD5B1690 +:10062000AFB02003DD7E02DD7702DDAE012812EEE1 +:100630000C280EEE0CEE032808EE03DDCB06762028 +:1006400003DD7E01DD770318B63AA44FB73E0228DA +:100650000621A24F3E089632D54FC9D5E5FF5B6E05 +:1006600016D5FDE1FF5B7616D5DDE1E1D1C9441772 +:100670004E1758176217A84FAF4FB64FBD4FFF77B1 +:1006800020B72808DD460178CDAB16C8FF770447B0 +:10069000043E800710FD473E08CDAB16200247C937 +:1006A000060F3E08CDAB1647C93E08D516080F5FAA +:1006B000A0CDBF167B28061520F437CB12D1C9C5B3 +:1006C000D5E5F5DD5604DD5E05CB57280A7AFE0038 +:1006D000282FD604571830CB5F280A7AFE9830218D +:1006E000C604571822CB47280A7BFE0B2813D604D2 +:1006F0005F1814CB4F280A7BFE5B2805C6045F18E1 +:1007000006F137CB121823D5D5C15158FF3B00E174 +:10071000EB7EB720EC012800097EB720E47A32A5F1 +:100720004F7B32A64FF11600CB3AE1D1C1C92189E6 +:1007300017CB47C0219117CB4FC0218D17CB5FC07E +:10074000219517C9FDEEE1D49917180C0118C8BD01 +:10075000B2A89D171C7D011C9F968D85A1171C2D8D +:10076000011C7E77706AA51718590118001414002F +:1007700000455100054001501140014400000000B7 +:100780000703070387040001801455410014050581 +:1007900014004155141450501408A82A20FFC3C354 +:1007A000FF0CFC3F30AA8282AAB362F887F8F8F8FF +:1007B000F8EFFF3F00FFFDF5F58FEE3E00FFFDF582 +:1007C000F54E883800FFFDF5F548443400FFFDF58F +:1007D000F50000000000000000FFFFFFFFFFC3E87E +:1007E00019F3FF1180DD210D023ADC4FB72808FF15 +:1007F000374C020B42DC4FAFD30C32FF0FFBC9FF6B +:100800000DDC614FDA4F194F1809FF0DDC784FDB13 +:100810004F3D4FFD7E07B7C80AB7C87EB7280911FC +:100820001200197EB72801C90A3D02200D3ADC4F9B +:10083000B73E1028023E0232DC4FE5DDE50A6F26A6 +:10084000002929116802DDCB00763E402801AF194E +:10085000EBFF3AEB060511280036FF1910FB1600D6 +:10086000DD5E0F626B2919118F1D19EBC1E1E523C4 +:10087000360123030303CDD319030323360123CD0C +:10088000D319E13680FF13124F01D71FC94809DD84 +:1008900021614F1804DD21784FDD4E0011800021C9 +:1008A0008000FF7EDD7409DD7508DD7204DD7303F1 +:1008B000C9DD21784F782F1805DD21614F78E6E0FA +:1008C0000F0F0F0FFE0E20023E0CDD770FC9DD7EED +:1008D00001E660FE20280FD0DDCB075EC8DD3601C3 +:1008E00000DD360701C9DD7E06FE48300EDD36022A +:1008F00002DD360180218B1DFF3EC9DD360100FE81 +:1009000058301D3A904FB7C01E4CDD560B15FF3BBB +:1009100000EB11D7FF06007E7023B6701920F8C9CE +:10092000FE60300C1E40DDCB007620DE1E5818DA4B +:10093000DDCB0076280CFF0DDD614F08AD1FA64F03 +:10094000180AFF0DDD784F64BD1FA24FDD3611067A +:10095000DD361280DD360168DD7E0BD608FE1330F1 +:1009600002C62057FF542B7EFE05CE00776069DD5E +:1009700021124F3EC0FF120E0C21021FF3FF34FF65 +:1009800051FA3E0132DE4FC921F41EF53E08D3195B +:10099000F1FE01D8FE043003CDC81903FE02D8FED3 +:1009A000053003CDC819FE03D803083E8132904FAD +:1009B00008CDC819FE04D80321E51DF53E0CD31956 +:1009C000F1CDC819FE05D803F5D50A573E08FF2218 +:1009D000D1F1C91A771303231A77231303360003BF +:1009E000230AEB86EB7713C9FF4D1E0284F44F31C7 +:1009F000064FFF001B064FD600007B02F84F17B8CA +:100A0000D60819C31D13124FC09F1F02F3FF005FCA +:100A1000DA4F0C00CB1D1B00406801FF1B6841F83A +:100A20000C001B124F8F00000D100D023708020B37 +:100A3000C4A24F3788020BC4A64F052C1B352C01CE +:100A40000B7A1D02AF32904F3AA14F1E5801BE1DC6 +:100A5000CD88193AA54F1E4001B91DCD88193E4FCA +:100A600032144F32174FDD21614FDD360010211552 +:100A70004FCD301DDD21784FDD360050CD301D3A91 +:100A8000904FB7281DDD218F4FDD360010DD360C6D +:100A900003DD360840DD360648DD360B0ACD501D35 +:100AA000180B3E08D319FF234C2A08F41E1112001C +:100AB000DD21184F0120043E02B820020E60DD71D6 +:100AC00000DD360701DD360C03DD1910EC3E1DEDAF +:100AD000473E74D30DFF5164F3DD210D02FF002B5F +:100AE0001208FF33403540010B871D3320020BBB3A +:100AF00007531B0D01683207531B513C2B0808FF9D +:100B0000384002FF0043140245341B02DD21184F18 +:100B10001112000604C5D5CDCE18D1C1DD193ADEBB +:100B20004F3D28DF10EF18DB02C30C1A3AF84FCB09 +:100B30007FC8FF7808281B09281B5CB9185DB1180D +:100B4000558F18579518938D1854FF17560A18513A +:100B5000E117C032323232320808D9DDE53E74D3B3 +:100B60000D3EC8D30F21124FCD671DCD251DAF32CD +:100B7000FF0FDDCB01462028110514FF28261EDDBE +:100B80006E122C2CFF1EDDCB016E203021D71D16DE +:100B900000DD5E0F195E2356EBFF1E210C1F1808A7 +:100BA000110416FF28213C1FFF1EDD720EDD730DA0 +:100BB00021154FCD501DDDE108D9FBC921081F18B3 +:100BC000E7F5C5D5E5DDE521194F1111000604CD86 +:100BD0001A1D231116000603CD1A1DAF32FF0F0692 +:100BE00004DD21184FDDCB01762811DD660EDD6EA8 +:100BF0000DDD7E0FD30C36C0DDCB01B6DDCB017E23 +:100C0000282BDD560BDD5E06DD7E00FF38DD720E23 +:100C1000DD730DDD770F210040197EEB36C0B7285C +:100C200008DDCB01BEDDCB01EEDDCB01F6111200FC +:100C3000DD1910B121124FCD671D28123E76D30D5C +:100C4000DD7E0BFE323E0030023E6AD30FFBDD211B +:100C5000184F0604218B1D111200DDCB017E280CDC +:100C6000FF3EDDCB075E2804DDCB01BEDD1910EAB7 +:100C7000060221154FCD671DCAF81CCD251DFBDDD1 +:100C8000CB0146C2031DDDCB016E2025DD7E03DDD9 +:100C9000B604DDB608DDB6092017DD7702DDCB012D +:100CA000662036DD36124BDDCB01DEDDCB01E618EA +:100CB0002821831DFF3E2808DDCB01DEDDCB01A608 +:100CC000DD7E1191F2D61CDD5E12161E1ADD771242 +:100CD000131ADDCB01DEDD7711DD7E0FDDBE1028BE +:100CE00007DDCB01DEDD7710DDCB015E2020211595 +:100CF0004FCD501D05C2751CFBCD0002DDE1E1D1D9 +:100D0000C1F1C921781DFF3E21154FCD251DDDCB39 +:100D1000019E21124FCD501D18DE7E23E6A0280132 +:100D2000341910F6C9F3DD7EFF77A7C023772BC9EE +:100D3000DD360332DD360180DD360701DD360C019C +:100D4000DD360604DD360B28DD360F06DD36124BA8 +:100D5000DDE5D1F3DD36FF00237E73A728065F7E35 +:100D60002B1B12C92B73C9F35E2323562B2B7BA796 +:100D7000D5DDE1C9C11B591B0A44474554205245E2 +:100D8000414459002F0A4844524157009F095B00D3 +:100D9000030F00030F00040F00020C00040F0001FA +:100DA0000B00040F00000800040F00FF0600040FF2 +:100DB00000FE0400030F00FD0348162C430E1244EE +:100DC000280D3FA27D0B87A27D6C870606000000E0 +:100DD00030300000800F0FF81D061E101E181E2454 +:100DE0001E321E421E0111081C3E6B08083C7EA9E3 +:100DF000083C7EEB89081CAE0A0A0205400051003F +:100E00000400010000400A0A0203500014000140DF +:100E10000A0A0202540055400A0702041000054065 +:100E2000540050000A060205004045001000500022 +:100E300040000A05020600400100050014005400AD +:100E400050000A05010501441040406004000F03F2 +:100E5000050155000545401501405001401500545D +:100E60007004020F02051550545050505050551543 +:100E70004B04030F02055500150015001400054032 +:100E8000D2140001041301100000455440005555D0 +:100E900040000AA800000AA200010AAA801402AABF +:100EA000005000A8054005555400155550005455F4 +:100EB00050005005540050015500100155401000DD +:100EC00005500000015000000040000001400000FB +:100ED0000054D23C000D04070110000045544000AE +:100EE000555540000AA800000A88150116A555416D +:100EF00015555555010C20303830B2F2F63C3C30D7 +:100F00003030474F54204D45000001010000030FD1 +:100F100000440011551015555002AA0002A200020B +:100F2000AA8000AA0000A80015550055555051553B +:100F3000504155004155004555000155000004162B +:100F400000055000005555000155554005555550B8 +:100F500015541554155005541540015415400154AD +:100F60001550055405541550015555400055550070 +:100F70000015540002AAAA8000AAAA0012AAAA84F4 +:100F800010A82A041020080452AAAA8510200804D8 +:100F90001000000410000004008011B00900C9CD49 +:100FA000991F247E0C8D129606A82496F0CD991FC9 +:100FB00012BD06BD248D12BD068D2470F0CD991F83 +:100FC00018E112E106E118E112BD06C812C806E1F7 +:100FD00012E106EE12E1F088EFFF3F00FFFDF5F0B1 +:100FE000E0B0FF3FE105058F054CF0FFFFFFFFFF7D +:100FF000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01 +:00000001FF diff --git a/Bally - Astrocade_MiST/rtl/scandoubler.v b/Bally - Astrocade_MiST/rtl/scandoubler.v new file mode 100644 index 00000000..5a3ccd17 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/scandoubler.v @@ -0,0 +1,195 @@ +// +// scandoubler.v +// +// Copyright (c) 2015 Till Harbaum +// Copyright (c) 2017 Sorgelig +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// TODO: Delay vsync one line + +`define BITS_TO_FIT(N) ( \ + N <= 2 ? 0 : \ + N <= 4 ? 1 : \ + N <= 8 ? 2 : \ + N <= 16 ? 3 : \ + N <= 32 ? 4 : \ + N <= 64 ? 5 : \ + N <= 128 ? 6 : \ + N <= 256 ? 7 : \ + N <= 512 ? 8 : \ + N <=1024 ? 9 : 10 ) + +module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) +( + // system interface + input clk_sys, + input ce_pix, + input ce_pix_actual, + + input hq2x, + + // shifter video interface + input hs_in, + input vs_in, + input line_start, + + input [DWIDTH:0] r_in, + input [DWIDTH:0] g_in, + input [DWIDTH:0] b_in, + input mono, + + // output interface + output reg hs_out, + output vs_out, + output [DWIDTH:0] r_out, + output [DWIDTH:0] g_out, + output [DWIDTH:0] b_out +); + + +localparam DWIDTH = HALF_DEPTH ? 2 : 5; + +assign vs_out = vs_in; + +reg [2:0] phase; +reg [2:0] ce_div; +reg [7:0] pix_len = 0; +wire [7:0] pl = pix_len + 1'b1; + +reg ce_x1, ce_x4; +reg req_line_reset; +wire ls_in = hs_in | line_start; +always @(negedge clk_sys) begin + reg old_ce; + reg [2:0] ce_cnt; + + reg [7:0] pixsz2, pixsz4 = 0; + + old_ce <= ce_pix; + if(~&pix_len) pix_len <= pix_len + 1'd1; + + ce_x4 <= 0; + ce_x1 <= 0; + + // use such odd comparison to place c_x4 evenly if master clock isn't multiple 4. + if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin + phase <= phase + 1'd1; + ce_x4 <= 1; + end + + if(~old_ce & ce_pix) begin + pixsz2 <= {1'b0, pl[7:1]}; + pixsz4 <= {2'b00, pl[7:2]}; + ce_x1 <= 1; + ce_x4 <= 1; + pix_len <= 0; + phase <= phase + 1'd1; + + ce_cnt <= ce_cnt + 1'd1; + if(ce_pix_actual) begin + phase <= 0; + ce_div <= ce_cnt + 1'd1; + ce_cnt <= 0; + req_line_reset <= 0; + end + + if(ls_in) req_line_reset <= 1; + end +end + +reg ce_sd; +always @(*) begin + case(ce_div) + 2: ce_sd = !phase[0]; + 4: ce_sd = !phase[1:0]; + default: ce_sd <= 1; + endcase +end + +localparam AWIDTH = `BITS_TO_FIT(LENGTH); +Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x +( + .clk(clk_sys), + .ce_x4(ce_x4 & ce_sd), + .inputpixel({b_in,g_in,r_in}), + .mono(mono), + .disable_hq2x(~hq2x), + .reset_frame(vs_in), + .reset_line(req_line_reset), + .read_y(sd_line), + .read_x(sd_h_actual), + .outpixel({b_out,g_out,r_out}) +); + +reg [10:0] sd_h_actual; +always @(*) begin + case(ce_div) + 2: sd_h_actual = sd_h[10:1]; + 4: sd_h_actual = sd_h[10:2]; + default: sd_h_actual = sd_h; + endcase +end + +reg [10:0] sd_h; +reg [1:0] sd_line; +always @(posedge clk_sys) begin + + reg [11:0] hs_max,hs_rise,hs_ls; + reg [10:0] hcnt; + reg [11:0] sd_hcnt; + + reg hs, hs2, vs, ls; + + if(ce_x1) begin + hs <= hs_in; + ls <= ls_in; + + if(ls && !ls_in) hs_ls <= {hcnt,1'b1}; + + // falling edge of hsync indicates start of line + if(hs && !hs_in) begin + hs_max <= {hcnt,1'b1}; + hcnt <= 0; + if(ls && !ls_in) hs_ls <= {10'd0,1'b1}; + end else begin + hcnt <= hcnt + 1'd1; + end + + // save position of rising edge + if(!hs && hs_in) hs_rise <= {hcnt,1'b1}; + + vs <= vs_in; + if(vs && ~vs_in) sd_line <= 0; + end + + if(ce_x4) begin + hs2 <= hs_in; + + // output counter synchronous to input and at twice the rate + sd_hcnt <= sd_hcnt + 1'd1; + sd_h <= sd_h + 1'd1; + if(hs2 && !hs_in) sd_hcnt <= hs_max; + if(sd_hcnt == hs_max) sd_hcnt <= 0; + + // replicate horizontal sync at twice the speed + if(sd_hcnt == hs_max) hs_out <= 0; + if(sd_hcnt == hs_rise) hs_out <= 1; + + if(sd_hcnt == hs_ls) sd_h <= 0; + if(sd_hcnt == hs_ls) sd_line <= sd_line + 1'd1; + end +end + +endmodule diff --git a/Bally - Astrocade_MiST/rtl/spram.vhd b/Bally - Astrocade_MiST/rtl/spram.vhd new file mode 100644 index 00000000..d86010fc --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/spram.vhd @@ -0,0 +1,91 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY spram IS + GENERIC + ( + init_file : string := ""; + --numwords_a : natural; + widthad_a : natural; + width_a : natural := 8; + outdata_reg_a : string := "UNREGISTERED" + ); + PORT + ( + address : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0); + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (width_a-1 DOWNTO 0); + wren : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0) + ); +END spram; + + +ARCHITECTURE SYN OF spram IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (width_a-1 DOWNTO 0); + + + + COMPONENT altsyncram + GENERIC ( + clock_enable_input_a : STRING; + clock_enable_output_a : STRING; + init_file : STRING; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + numwords_a : NATURAL; + operation_mode : STRING; + outdata_aclr_a : STRING; + outdata_reg_a : STRING; + power_up_uninitialized : STRING; + read_during_write_mode_port_a : STRING; + widthad_a : NATURAL; + width_a : NATURAL; + width_byteena_a : NATURAL + ); + PORT ( + wren_a : IN STD_LOGIC ; + clock0 : IN STD_LOGIC ; + address_a : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR (width_a-1 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(width_a-1 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + clock_enable_input_a => "BYPASS", + clock_enable_output_a => "BYPASS", + init_file => init_file, + intended_device_family => "Cyclone III", + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "altsyncram", + numwords_a => 2**widthad_a, + operation_mode => "SINGLE_PORT", + outdata_aclr_a => "NONE", + outdata_reg_a => outdata_reg_a, + power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", + widthad_a => widthad_a, + width_a => width_a, + width_byteena_a => 1 + ) + PORT MAP ( + wren_a => wren, + clock0 => clock, + address_a => address, + data_a => data, + q_a => sub_wire0 + ); + + + +END SYN; diff --git a/Bally - Astrocade_MiST/rtl/sprom.vhd b/Bally - Astrocade_MiST/rtl/sprom.vhd new file mode 100644 index 00000000..292a214f --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/sprom.vhd @@ -0,0 +1,83 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY sprom IS + GENERIC + ( + init_file : string := ""; + --numwords_a : natural; + widthad_a : natural; + width_a : natural := 8; + outdata_reg_a : string := "UNREGISTERED" + ); + PORT + ( + address : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0); + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0) + ); +END sprom; + + +ARCHITECTURE SYN OF sprom IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (width_a-1 DOWNTO 0); + + + + COMPONENT altsyncram + GENERIC ( + address_aclr_a : STRING; + clock_enable_input_a : STRING; + clock_enable_output_a : STRING; + init_file : STRING; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + numwords_a : NATURAL; + operation_mode : STRING; + outdata_aclr_a : STRING; + outdata_reg_a : STRING; + widthad_a : NATURAL; + width_a : NATURAL; + width_byteena_a : NATURAL + ); + PORT ( + clock0 : IN STD_LOGIC ; + address_a : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(width_a-1 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_aclr_a => "NONE", + clock_enable_input_a => "BYPASS", + clock_enable_output_a => "BYPASS", + init_file => init_file, + intended_device_family => "Cyclone III", + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "altsyncram", + numwords_a => 2**widthad_a, + operation_mode => "ROM", + outdata_aclr_a => "NONE", + outdata_reg_a => outdata_reg_a, + widthad_a => widthad_a, + width_a => width_a, + width_byteena_a => 1 + ) + PORT MAP ( + clock0 => clock, + address_a => address, + q_a => sub_wire0 + ); + + + +END SYN; diff --git a/Bally - Astrocade_MiST/rtl/video_mixer.sv b/Bally - Astrocade_MiST/rtl/video_mixer.sv new file mode 100644 index 00000000..ec953e53 --- /dev/null +++ b/Bally - Astrocade_MiST/rtl/video_mixer.sv @@ -0,0 +1,242 @@ +// +// +// Copyright (c) 2017 Sorgelig +// +// This program is GPL Licensed. See COPYING for the full license. +// +// +//////////////////////////////////////////////////////////////////////////////////////////////////////// + +`timescale 1ns / 1ps + +// +// LINE_LENGTH: Length of display line in pixels +// Usually it's length from HSync to HSync. +// May be less if line_start is used. +// +// HALF_DEPTH: If =1 then color dept is 3 bits per component +// For half depth 6 bits monochrome is available with +// mono signal enabled and color = {G, R} + +module video_mixer +#( + parameter LINE_LENGTH = 768, + parameter HALF_DEPTH = 0, + + parameter OSD_COLOR = 3'd7, + parameter OSD_X_OFFSET = 10'd0, + parameter OSD_Y_OFFSET = 10'd0 +) +( + // master clock + // it should be multiple by (ce_pix*4). + input clk_sys, + + // Pixel clock or clock_enable (both are accepted). + input ce_pix, + + // Some systems have multiple resolutions. + // ce_pix_actual should match ce_pix where every second or fourth pulse is enabled, + // thus half or qurter resolutions can be used without brake video sync while switching resolutions. + // For fixed single resolution (or when video sync stability isn't required) ce_pix_actual = ce_pix. + input ce_pix_actual, + + // OSD SPI interface + input SPI_SCK, + input SPI_SS3, + input SPI_DI, + + // scanlines (00-none 01-25% 10-50% 11-75%) + input [1:0] scanlines, + + // 0 = HVSync 31KHz, 1 = CSync 15KHz + input scandoubler_disable, + + // High quality 2x scaling + input hq2x, + + // YPbPr always uses composite sync + input ypbpr, + + // 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space) + input ypbpr_full, + + // color + input [DWIDTH:0] R, + input [DWIDTH:0] G, + input [DWIDTH:0] B, + + // Monochrome mode (for HALF_DEPTH only) + input mono, + + // interlace sync. Positive pulses. + input HSync, + input VSync, + + // Falling of this signal means start of informative part of line. + // It can be horizontal blank signal. + // This signal can be used to reduce amount of required FPGA RAM for HQ2x scan doubler + // If FPGA RAM is not an issue, then simply set it to 0 for whole line processing. + // Keep in mind: due to algo first and last pixels of line should be black to avoid side artefacts. + // Thus, if blank signal is used to reduce the line, make sure to feed at least one black (or paper) pixel + // before first informative pixel. + input line_start, + + // MiST video output signals + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + output VGA_VS, + output VGA_HS +); + +localparam DWIDTH = HALF_DEPTH ? 2 : 5; + +wire [DWIDTH:0] R_sd; +wire [DWIDTH:0] G_sd; +wire [DWIDTH:0] B_sd; +wire hs_sd, vs_sd; + +scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) scandoubler +( + .*, + .hs_in(HSync), + .vs_in(VSync), + .r_in(R), + .g_in(G), + .b_in(B), + + .hs_out(hs_sd), + .vs_out(vs_sd), + .r_out(R_sd), + .g_out(G_sd), + .b_out(B_sd) +); + +wire [DWIDTH:0] rt = (scandoubler_disable ? R : R_sd); +wire [DWIDTH:0] gt = (scandoubler_disable ? G : G_sd); +wire [DWIDTH:0] bt = (scandoubler_disable ? B : B_sd); + +generate + if(HALF_DEPTH) begin + wire [5:0] r = mono ? {gt,rt} : {rt,rt}; + wire [5:0] g = mono ? {gt,rt} : {gt,gt}; + wire [5:0] b = mono ? {gt,rt} : {bt,bt}; + end else begin + wire [5:0] r = rt; + wire [5:0] g = gt; + wire [5:0] b = bt; + end +endgenerate + +wire hs = (scandoubler_disable ? HSync : hs_sd); +wire vs = (scandoubler_disable ? VSync : vs_sd); + +reg scanline = 0; +always @(posedge clk_sys) begin + reg old_hs, old_vs; + + old_hs <= hs; + old_vs <= vs; + + if(old_hs && ~hs) scanline <= ~scanline; + if(old_vs && ~vs) scanline <= 0; +end + +wire [5:0] r_out, g_out, b_out; +always @(*) begin + case(scanlines & {scanline, scanline}) + 1: begin // reduce 25% = 1/2 + 1/4 + r_out = {1'b0, r[5:1]} + {2'b00, r[5:2]}; + g_out = {1'b0, g[5:1]} + {2'b00, g[5:2]}; + b_out = {1'b0, b[5:1]} + {2'b00, b[5:2]}; + end + + 2: begin // reduce 50% = 1/2 + r_out = {1'b0, r[5:1]}; + g_out = {1'b0, g[5:1]}; + b_out = {1'b0, b[5:1]}; + end + + 3: begin // reduce 75% = 1/4 + r_out = {2'b00, r[5:2]}; + g_out = {2'b00, g[5:2]}; + b_out = {2'b00, b[5:2]}; + end + + default: begin + r_out = r; + g_out = g; + b_out = b; + end + endcase +end + +wire [5:0] red, green, blue; +osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd +( + .*, + + .R_in(r_out), + .G_in(g_out), + .B_in(b_out), + .HSync(hs), + .VSync(vs), + + .R_out(red), + .G_out(green), + .B_out(blue) +); + +wire [5:0] yuv_full[225] = '{ + 6'd0, 6'd0, 6'd0, 6'd0, 6'd1, 6'd1, 6'd1, 6'd1, + 6'd2, 6'd2, 6'd2, 6'd3, 6'd3, 6'd3, 6'd3, 6'd4, + 6'd4, 6'd4, 6'd5, 6'd5, 6'd5, 6'd5, 6'd6, 6'd6, + 6'd6, 6'd7, 6'd7, 6'd7, 6'd7, 6'd8, 6'd8, 6'd8, + 6'd9, 6'd9, 6'd9, 6'd9, 6'd10, 6'd10, 6'd10, 6'd11, + 6'd11, 6'd11, 6'd11, 6'd12, 6'd12, 6'd12, 6'd13, 6'd13, + 6'd13, 6'd13, 6'd14, 6'd14, 6'd14, 6'd15, 6'd15, 6'd15, + 6'd15, 6'd16, 6'd16, 6'd16, 6'd17, 6'd17, 6'd17, 6'd17, + 6'd18, 6'd18, 6'd18, 6'd19, 6'd19, 6'd19, 6'd19, 6'd20, + 6'd20, 6'd20, 6'd21, 6'd21, 6'd21, 6'd21, 6'd22, 6'd22, + 6'd22, 6'd23, 6'd23, 6'd23, 6'd23, 6'd24, 6'd24, 6'd24, + 6'd25, 6'd25, 6'd25, 6'd25, 6'd26, 6'd26, 6'd26, 6'd27, + 6'd27, 6'd27, 6'd27, 6'd28, 6'd28, 6'd28, 6'd29, 6'd29, + 6'd29, 6'd29, 6'd30, 6'd30, 6'd30, 6'd31, 6'd31, 6'd31, + 6'd31, 6'd32, 6'd32, 6'd32, 6'd33, 6'd33, 6'd33, 6'd33, + 6'd34, 6'd34, 6'd34, 6'd35, 6'd35, 6'd35, 6'd35, 6'd36, + 6'd36, 6'd36, 6'd36, 6'd37, 6'd37, 6'd37, 6'd38, 6'd38, + 6'd38, 6'd38, 6'd39, 6'd39, 6'd39, 6'd40, 6'd40, 6'd40, + 6'd40, 6'd41, 6'd41, 6'd41, 6'd42, 6'd42, 6'd42, 6'd42, + 6'd43, 6'd43, 6'd43, 6'd44, 6'd44, 6'd44, 6'd44, 6'd45, + 6'd45, 6'd45, 6'd46, 6'd46, 6'd46, 6'd46, 6'd47, 6'd47, + 6'd47, 6'd48, 6'd48, 6'd48, 6'd48, 6'd49, 6'd49, 6'd49, + 6'd50, 6'd50, 6'd50, 6'd50, 6'd51, 6'd51, 6'd51, 6'd52, + 6'd52, 6'd52, 6'd52, 6'd53, 6'd53, 6'd53, 6'd54, 6'd54, + 6'd54, 6'd54, 6'd55, 6'd55, 6'd55, 6'd56, 6'd56, 6'd56, + 6'd56, 6'd57, 6'd57, 6'd57, 6'd58, 6'd58, 6'd58, 6'd58, + 6'd59, 6'd59, 6'd59, 6'd60, 6'd60, 6'd60, 6'd60, 6'd61, + 6'd61, 6'd61, 6'd62, 6'd62, 6'd62, 6'd62, 6'd63, 6'd63, + 6'd63 +}; + +// http://marsee101.blog19.fc2.com/blog-entry-2311.html +// Y = 16 + 0.257*R + 0.504*G + 0.098*B (Y = 0.299*R + 0.587*G + 0.114*B) +// Pb = 128 - 0.148*R - 0.291*G + 0.439*B (Pb = -0.169*R - 0.331*G + 0.500*B) +// Pr = 128 + 0.439*R - 0.368*G - 0.071*B (Pr = 0.500*R - 0.419*G - 0.081*B) + +wire [18:0] y_8 = 19'd04096 + ({red, 8'd0} + {red, 3'd0}) + ({green, 9'd0} + {green, 2'd0}) + ({blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0}); +wire [18:0] pb_8 = 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}) - ({green, 8'd0} + {green, 5'd0} + {green, 3'd0}) + ({blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0}); +wire [18:0] pr_8 = 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}) - ({green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}) - ({blue, 6'd0} + {blue , 3'd0}); + +wire [7:0] y = ( y_8[17:8] < 16) ? 8'd16 : ( y_8[17:8] > 235) ? 8'd235 : y_8[15:8]; +wire [7:0] pb = (pb_8[17:8] < 16) ? 8'd16 : (pb_8[17:8] > 240) ? 8'd240 : pb_8[15:8]; +wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[15:8]; + +assign VGA_R = ypbpr ? (ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]) : red; +assign VGA_G = ypbpr ? (ypbpr_full ? yuv_full[y -8'd16] : y[7:2]) : green; +assign VGA_B = ypbpr ? (ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]) : blue; +assign VGA_VS = (scandoubler_disable | ypbpr) ? 1'b1 : ~vs_sd; +assign VGA_HS = scandoubler_disable ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd; + +endmodule

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