mirror of
https://github.com/Gehstock/Mist_FPGA.git
synced 2026-01-30 05:23:54 +00:00
RallyX: use MRAs, add New Rally-X, Jungler, Loco-Motion, Commando, Tactician
This commit is contained in:
@@ -3,8 +3,17 @@
|
||||
-- Arcade: Rally-X port to MiST
|
||||
-- 19 September 2019
|
||||
-- From: https://github.com/MrX-8B/MiSTer-Arcade-RallyX
|
||||
--
|
||||
|
||||
-- Enhanced with Konami/SEGA games
|
||||
-- Time Pilot sound board by DarFpga
|
||||
-- TODO:
|
||||
-- - Starfield generator for Tactician
|
||||
--
|
||||
-- Usage:
|
||||
-- - Create ROM and ARC files from the MRA files using the MRA utility.
|
||||
-- Example: mra -A -z /path/to/mame/roms "Rally-X.mra"
|
||||
-- - Copy the ROM files to the root of the SD Card
|
||||
-- - Copy the RBF and ARC files to the same folder on the SD Card
|
||||
--
|
||||
---------------------------------------------------------------------------------
|
||||
-- FPGA New Rally-X for Spartan-3 Starter Board
|
||||
------------------------------------------------
|
||||
@@ -40,7 +40,7 @@
|
||||
# Project-Wide Assignments
|
||||
# ========================
|
||||
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2
|
||||
set_global_assignment -name LAST_QUARTUS_VERSION 13.1
|
||||
set_global_assignment -name LAST_QUARTUS_VERSION "13.1 SP4.26"
|
||||
set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017"
|
||||
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
||||
set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL
|
||||
@@ -79,6 +79,59 @@ set_location_assignment PIN_127 -to SPI_SS2
|
||||
set_location_assignment PIN_91 -to SPI_SS3
|
||||
set_location_assignment PIN_13 -to CONF_DATA0
|
||||
set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component"
|
||||
set_location_assignment PIN_49 -to SDRAM_A[0]
|
||||
set_location_assignment PIN_44 -to SDRAM_A[1]
|
||||
set_location_assignment PIN_42 -to SDRAM_A[2]
|
||||
set_location_assignment PIN_39 -to SDRAM_A[3]
|
||||
set_location_assignment PIN_4 -to SDRAM_A[4]
|
||||
set_location_assignment PIN_6 -to SDRAM_A[5]
|
||||
set_location_assignment PIN_8 -to SDRAM_A[6]
|
||||
set_location_assignment PIN_10 -to SDRAM_A[7]
|
||||
set_location_assignment PIN_11 -to SDRAM_A[8]
|
||||
set_location_assignment PIN_28 -to SDRAM_A[9]
|
||||
set_location_assignment PIN_50 -to SDRAM_A[10]
|
||||
set_location_assignment PIN_30 -to SDRAM_A[11]
|
||||
set_location_assignment PIN_32 -to SDRAM_A[12]
|
||||
set_location_assignment PIN_83 -to SDRAM_DQ[0]
|
||||
set_location_assignment PIN_79 -to SDRAM_DQ[1]
|
||||
set_location_assignment PIN_77 -to SDRAM_DQ[2]
|
||||
set_location_assignment PIN_76 -to SDRAM_DQ[3]
|
||||
set_location_assignment PIN_72 -to SDRAM_DQ[4]
|
||||
set_location_assignment PIN_71 -to SDRAM_DQ[5]
|
||||
set_location_assignment PIN_69 -to SDRAM_DQ[6]
|
||||
set_location_assignment PIN_68 -to SDRAM_DQ[7]
|
||||
set_location_assignment PIN_86 -to SDRAM_DQ[8]
|
||||
set_location_assignment PIN_87 -to SDRAM_DQ[9]
|
||||
set_location_assignment PIN_98 -to SDRAM_DQ[10]
|
||||
set_location_assignment PIN_99 -to SDRAM_DQ[11]
|
||||
set_location_assignment PIN_100 -to SDRAM_DQ[12]
|
||||
set_location_assignment PIN_101 -to SDRAM_DQ[13]
|
||||
set_location_assignment PIN_103 -to SDRAM_DQ[14]
|
||||
set_location_assignment PIN_104 -to SDRAM_DQ[15]
|
||||
set_location_assignment PIN_58 -to SDRAM_BA[0]
|
||||
set_location_assignment PIN_51 -to SDRAM_BA[1]
|
||||
set_location_assignment PIN_85 -to SDRAM_DQMH
|
||||
set_location_assignment PIN_67 -to SDRAM_DQML
|
||||
set_location_assignment PIN_60 -to SDRAM_nRAS
|
||||
set_location_assignment PIN_64 -to SDRAM_nCAS
|
||||
set_location_assignment PIN_66 -to SDRAM_nWE
|
||||
set_location_assignment PIN_59 -to SDRAM_nCS
|
||||
set_location_assignment PIN_33 -to SDRAM_CKE
|
||||
set_location_assignment PIN_43 -to SDRAM_CLK
|
||||
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[*]
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[*]
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[0]
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[1]
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQMH
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQML
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nRAS
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCAS
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nWE
|
||||
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCS
|
||||
set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*]
|
||||
set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM_DQ[*]
|
||||
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_*
|
||||
|
||||
# Classic Timing Assignments
|
||||
# ==========================
|
||||
@@ -134,33 +187,39 @@ set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -
|
||||
|
||||
# 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
|
||||
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(rallyX_mist)
|
||||
# -----------------------
|
||||
set_global_assignment -name ENABLE_SIGNALTAP OFF
|
||||
set_global_assignment -name USE_SIGNALTAP_FILE output_files/timeplt.stp
|
||||
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON
|
||||
set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION ON
|
||||
set_global_assignment -name AUTO_RESOURCE_SHARING ON
|
||||
set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION ON
|
||||
set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION ON
|
||||
set_global_assignment -name SYSTEMVERILOG_FILE rtl/rallyX_mist.sv
|
||||
set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv
|
||||
set_global_assignment -name VERILOG_FILE rtl/fpga_nrx.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/nrx_video.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/nrx_hvgen.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/nrx_sprite.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/nrx_sound.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/nrx_psg_voice.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/nrx_namco.v
|
||||
set_global_assignment -name VERILOG_FILE rtl/rams.v
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_wav_rom.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_prg_rom.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_dot_rom.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_chr_rom.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_pal_rom.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_col_rom.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/roms/nrx_nam_rom.vhd
|
||||
set_global_assignment -name VERILOG_FILE rtl/pll.v
|
||||
set_global_assignment -name VHDL_FILE rtl/dpram.vhd
|
||||
set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip
|
||||
set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip
|
||||
set_global_assignment -name VHDL_FILE rtl/spram.vhd
|
||||
set_global_assignment -name VHDL_FILE rtl/time_pilot_sound_board.vhd
|
||||
set_global_assignment -name VHDL_FILE ../../common/Sound/ym2149/vol_table_array.vhd
|
||||
set_global_assignment -name VHDL_FILE ../../common/Sound/ym2149/YM2149.vhd
|
||||
set_global_assignment -name QIP_FILE ../../common/mist/mist.qip
|
||||
set_global_assignment -name QIP_FILE ../../common/CPU/T80/T80.qip
|
||||
set_global_assignment -name SIGNALTAP_FILE output_files/spr.stp
|
||||
set_global_assignment -name SIGNALTAP_FILE output_files/bg.stp
|
||||
set_global_assignment -name SIGNALTAP_FILE output_files/timeplt.stp
|
||||
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
||||
@@ -53,6 +53,8 @@ set_time_format -unit ns -decimal_places 3
|
||||
|
||||
create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_ports {SPI_SCK}]
|
||||
|
||||
set sdram_clk "pll|altpll_component|auto_generated|pll1|clk[0]"
|
||||
|
||||
#**************************************************************
|
||||
# Create Generated Clock
|
||||
#**************************************************************
|
||||
@@ -79,26 +81,33 @@ set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [ge
|
||||
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}]
|
||||
set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}]
|
||||
|
||||
set_input_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -max 6.6 [get_ports SDRAM_DQ[*]]
|
||||
set_input_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -min 3.5 [get_ports SDRAM_DQ[*]]
|
||||
|
||||
#**************************************************************
|
||||
# Set Output Delay
|
||||
#**************************************************************
|
||||
|
||||
set_output_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DO}]
|
||||
set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {AUDIO_L}]
|
||||
set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {AUDIO_R}]
|
||||
set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {LED}]
|
||||
set_output_delay -add_delay -clock_fall -clock [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] 1.000 [get_ports {VGA_*}]
|
||||
|
||||
set_output_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -max 1.5 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}]
|
||||
set_output_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -min -0.8 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}]
|
||||
|
||||
#**************************************************************
|
||||
# Set Clock Groups
|
||||
#**************************************************************
|
||||
|
||||
set_clock_groups -asynchronous -group [get_clocks {SPI_SCK}] -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[*]}]
|
||||
set_clock_groups -asynchronous -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[0]}] -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[1]}]
|
||||
|
||||
#**************************************************************
|
||||
# Set False Path
|
||||
#**************************************************************
|
||||
|
||||
set_false_path -to [get_ports {AUDIO_L}]
|
||||
set_false_path -to [get_ports {AUDIO_R}]
|
||||
|
||||
|
||||
#**************************************************************
|
||||
@@ -1,123 +0,0 @@
|
||||
LIBRARY ieee;
|
||||
USE ieee.std_logic_1164.all;
|
||||
|
||||
LIBRARY altera_mf;
|
||||
USE altera_mf.all;
|
||||
|
||||
ENTITY dpram IS
|
||||
GENERIC
|
||||
(
|
||||
init_file : string := "";
|
||||
numwords_a : natural := 0; -- not used any more
|
||||
widthad_a : natural;
|
||||
width_a : natural := 8;
|
||||
outdata_reg_a : string := "UNREGISTERED";
|
||||
outdata_reg_b : string := "UNREGISTERED"
|
||||
);
|
||||
PORT
|
||||
(
|
||||
address_a : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0);
|
||||
address_b : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0);
|
||||
clock_a : IN STD_LOGIC ;
|
||||
clock_b : IN STD_LOGIC ;
|
||||
data_a : IN STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
data_b : IN STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
wren_a : IN STD_LOGIC := '1';
|
||||
wren_b : IN STD_LOGIC := '1';
|
||||
q_a : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
q_b : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0)
|
||||
);
|
||||
END dpram;
|
||||
|
||||
|
||||
ARCHITECTURE SYN OF dpram IS
|
||||
|
||||
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
SIGNAL sub_wire1 : STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
|
||||
COMPONENT altsyncram
|
||||
GENERIC (
|
||||
address_reg_b : STRING;
|
||||
clock_enable_input_a : STRING;
|
||||
clock_enable_input_b : STRING;
|
||||
clock_enable_output_a : STRING;
|
||||
clock_enable_output_b : STRING;
|
||||
indata_reg_b : STRING;
|
||||
init_file : STRING;
|
||||
intended_device_family : STRING;
|
||||
lpm_type : STRING;
|
||||
numwords_a : NATURAL;
|
||||
numwords_b : NATURAL;
|
||||
operation_mode : STRING;
|
||||
outdata_aclr_a : STRING;
|
||||
outdata_aclr_b : STRING;
|
||||
outdata_reg_a : STRING;
|
||||
outdata_reg_b : STRING;
|
||||
power_up_uninitialized : STRING;
|
||||
widthad_a : NATURAL;
|
||||
widthad_b : NATURAL;
|
||||
width_a : NATURAL;
|
||||
width_b : NATURAL;
|
||||
width_byteena_a : NATURAL;
|
||||
width_byteena_b : NATURAL;
|
||||
wrcontrol_wraddress_reg_b : STRING
|
||||
);
|
||||
PORT (
|
||||
wren_a : IN STD_LOGIC ;
|
||||
clock0 : IN STD_LOGIC ;
|
||||
wren_b : IN STD_LOGIC ;
|
||||
clock1 : IN STD_LOGIC ;
|
||||
address_a : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0);
|
||||
address_b : IN STD_LOGIC_VECTOR (widthad_a-1 DOWNTO 0);
|
||||
q_a : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
q_b : OUT STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
data_a : IN STD_LOGIC_VECTOR (width_a-1 DOWNTO 0);
|
||||
data_b : IN STD_LOGIC_VECTOR (width_a-1 DOWNTO 0)
|
||||
);
|
||||
END COMPONENT;
|
||||
|
||||
BEGIN
|
||||
q_a <= sub_wire0(width_a-1 DOWNTO 0);
|
||||
q_b <= sub_wire1(width_a-1 DOWNTO 0);
|
||||
|
||||
altsyncram_component : altsyncram
|
||||
GENERIC MAP (
|
||||
address_reg_b => "CLOCK1",
|
||||
clock_enable_input_a => "BYPASS",
|
||||
clock_enable_input_b => "BYPASS",
|
||||
clock_enable_output_a => "BYPASS",
|
||||
clock_enable_output_b => "BYPASS",
|
||||
indata_reg_b => "CLOCK1",
|
||||
init_file => init_file,
|
||||
intended_device_family => "Cyclone III",
|
||||
lpm_type => "altsyncram",
|
||||
numwords_a => 2**widthad_a,
|
||||
numwords_b => 2**widthad_a,
|
||||
operation_mode => "BIDIR_DUAL_PORT",
|
||||
outdata_aclr_a => "NONE",
|
||||
outdata_aclr_b => "NONE",
|
||||
outdata_reg_a => outdata_reg_a,
|
||||
outdata_reg_b => outdata_reg_b,
|
||||
power_up_uninitialized => "FALSE",
|
||||
widthad_a => widthad_a,
|
||||
widthad_b => widthad_a,
|
||||
width_a => width_a,
|
||||
width_b => width_a,
|
||||
width_byteena_a => 1,
|
||||
width_byteena_b => 1,
|
||||
wrcontrol_wraddress_reg_b => "CLOCK1"
|
||||
)
|
||||
PORT MAP (
|
||||
wren_a => wren_a,
|
||||
clock0 => clock_a,
|
||||
wren_b => wren_b,
|
||||
clock1 => clock_b,
|
||||
address_a => address_a,
|
||||
address_b => address_b,
|
||||
data_a => data_a,
|
||||
data_b => data_b,
|
||||
q_a => sub_wire0,
|
||||
q_b => sub_wire1
|
||||
);
|
||||
|
||||
END SYN;
|
||||
@@ -1,197 +0,0 @@
|
||||
/**************************************************************
|
||||
FPGA New Rally-X (Main part)
|
||||
***************************************************************/
|
||||
module fpga_nrx
|
||||
(
|
||||
input RESET, // RESET
|
||||
input CLK24M, // Clock 24.576MHz
|
||||
output hsync,
|
||||
output vsync,
|
||||
output hblank,
|
||||
output vblank,
|
||||
output [2:0] r,
|
||||
output [2:0] g,
|
||||
output [1:0] b,
|
||||
|
||||
|
||||
output [7:0] SND, // Sound (unsigned PCM)
|
||||
|
||||
input [7:0] DSW, // DipSW
|
||||
input [7:0] CTR1, // Controler (Negative logic)
|
||||
input [7:0] CTR2,
|
||||
|
||||
output [1:0] LAMP
|
||||
);
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// Clock Generators
|
||||
//--------------------------------------------------
|
||||
reg [2:0] _CCLK;
|
||||
always @( posedge CLK24M ) _CCLK <= _CCLK+1;
|
||||
|
||||
wire CLK = CLK24M; // 24MHz
|
||||
//wire CCLKx2 = _CCLK[1]; // CPU CLOCKx2 : 6.0MHz
|
||||
wire CCLK = _CCLK[2]; // CPU CLOCK : 3.0MHz
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// CPU
|
||||
//--------------------------------------------------
|
||||
// memory access signals
|
||||
wire rd, wr, me, ie, rf, m1;
|
||||
wire [15:0] ad;
|
||||
wire [7:0] odt, viddata;
|
||||
|
||||
wire mx = rf & (~me);
|
||||
wire mr = mx & (~rd);
|
||||
wire mw = mx & (~wr);
|
||||
|
||||
// interrupt signal/vector generator & other latches
|
||||
reg inte = 1'b0;
|
||||
reg intl = 1'b0;
|
||||
reg [7:0] intv = 8'h0;
|
||||
|
||||
reg bang = 1'b0;
|
||||
|
||||
reg lp0r = 1'b0;
|
||||
reg lp1r = 1'b0;
|
||||
assign LAMP = { lp1r, lp0r };
|
||||
|
||||
wire vblk = (VP==224)&(HP<=8);
|
||||
|
||||
wire lat_Wce = ( ad[15:4] == 12'hA18 ) & mw;
|
||||
|
||||
wire bngw = ( lat_Wce & ( ad[3:0] == 4'h0 ) );
|
||||
wire iewr = ( lat_Wce & ( ad[3:0] == 4'h1 ) );
|
||||
//wire flip = ( lat_Wce & ( ad[3:0] == 4'h3 ) );
|
||||
wire lp0w = ( lat_Wce & ( ad[3:0] == 4'h4 ) );
|
||||
wire lp1w = ( lat_Wce & ( ad[3:0] == 4'h5 ) );
|
||||
wire iowr = ( (~wr) & (~ie) & m1 );
|
||||
|
||||
always @( posedge CCLK ) begin
|
||||
if ( iowr ) intv <= odt;
|
||||
if ( vblk ) intl <= 1'b1;
|
||||
if ( iewr ) begin
|
||||
inte <= odt[0];
|
||||
intl <= 1'b0;
|
||||
end
|
||||
if ( bngw ) bang <= odt[0];
|
||||
if ( lp0w ) lp0r <= odt[0];
|
||||
if ( lp1w ) lp1r <= odt[0];
|
||||
end
|
||||
|
||||
wire irq_n = ~( intl & inte );
|
||||
|
||||
|
||||
// address decoders
|
||||
wire rom_Rce = ( ( ad[15:14] == 2'b00 ) & mr ); // $0000-$3FFF(R)
|
||||
wire ram_Rce = ( ( ad[15:11] == 5'b1001_1 ) & mr ); // $9800-$9FFF(R)
|
||||
wire ram_Wce = ( ( ad[15:11] == 5'b1001_1 ) & mw ); // $9800-$9FFF(W)
|
||||
wire inp_Rce = ( ( ad[15:12] == 4'b1010 ) & mr ); // $A000-$AFFF(R)
|
||||
wire snd_Wce = ( ( ad[15:8] == 8'b1010_0001 ) & mw ); // $A100-$A1FF(W)
|
||||
wire vid_Rce;
|
||||
|
||||
|
||||
wire [7:0] romdata;
|
||||
nrx_prg_rom nrx_prg_rom (
|
||||
.clk(CCLK),
|
||||
.addr(ad[13:0]),
|
||||
.data(romdata)
|
||||
);
|
||||
|
||||
// Work RAM (2KB)
|
||||
wire [7:0] ramdata;
|
||||
GSPRAM #(11,8) workram(
|
||||
.CL(CCLK),
|
||||
.AD(ad[10:0]),
|
||||
.WE(ram_Wce),
|
||||
.DI(odt),
|
||||
.DO(ramdata)
|
||||
);
|
||||
|
||||
|
||||
// Controler/DipSW input
|
||||
wire [7:0] in0data = CTR1;
|
||||
wire [7:0] in1data = CTR2;
|
||||
wire [7:0] in2data = DSW;
|
||||
wire [7:0] inpdata = ad[8] ? in2data : ad[7] ? in1data : in0data;
|
||||
|
||||
|
||||
// databus selector
|
||||
wire [7:0] romd = rom_Rce ? romdata : 8'h00;
|
||||
wire [7:0] ramd = ram_Rce ? ramdata : 8'h00;
|
||||
wire [7:0] vidd = vid_Rce ? viddata : 8'h00;
|
||||
wire [7:0] inpd = inp_Rce ? inpdata : 8'h00;
|
||||
wire [7:0] irqv = ( (~m1) & (~ie) ) ? intv : 8'h00;
|
||||
|
||||
wire [7:0] idt = romd | ramd | irqv | vidd | inpd;
|
||||
|
||||
|
||||
T80s z80(
|
||||
.RESET_n(~RESET),
|
||||
.CLK(~CCLK),
|
||||
.WAIT_n(1'b1),
|
||||
.INT_n(irq_n),
|
||||
.NMI_n(1'b1),
|
||||
.BUSRQ_n(1'b1),
|
||||
.DI(idt),
|
||||
.M1_n(m1),
|
||||
.MREQ_n(me),
|
||||
.IORQ_n(ie),
|
||||
.RD_n(rd),
|
||||
.WR_n(wr),
|
||||
.RFSH_n(rf),
|
||||
.HALT_n(),
|
||||
.BUSAK_n(),
|
||||
.A(ad),
|
||||
.DO(odt)
|
||||
);
|
||||
|
||||
//--------------------------------------------------
|
||||
// VIDEO
|
||||
//--------------------------------------------------
|
||||
wire [8:0] HP;
|
||||
wire [8:0] VP;
|
||||
wire PCLK;
|
||||
|
||||
nrx_video video(
|
||||
.VCLKx4(CLK),
|
||||
.HPOS(HP+3),
|
||||
.VPOS(VP+1),
|
||||
.PCLK(PCLK),
|
||||
.POUT({b,g,r}),
|
||||
.CPUCLK(CCLK),
|
||||
.CPUADDR(ad),
|
||||
.CPUDI(odt),
|
||||
.CPUDO(viddata),
|
||||
.CPUME(mx),
|
||||
.CPUWE(mw),
|
||||
.CPUDT(vid_Rce)
|
||||
);
|
||||
|
||||
nrx_hvgen hvgen(
|
||||
.HPOS(HP),
|
||||
.VPOS(VP),
|
||||
.PCLK(PCLK),
|
||||
.HBLK(hblank),
|
||||
.VBLK(vblank),
|
||||
.HSYN(hsync),
|
||||
.VSYN(vsync)
|
||||
);
|
||||
|
||||
//--------------------------------------------------
|
||||
// SOUND
|
||||
//--------------------------------------------------
|
||||
|
||||
nrx_sound sound(
|
||||
.CLK24M(CLK),
|
||||
.CCLK(CCLK),
|
||||
.SND(SND),
|
||||
.AD(ad),
|
||||
.DI(odt[3:0]),
|
||||
.WR(snd_Wce),
|
||||
.BANG(bang)
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -1,36 +0,0 @@
|
||||
module nrx_hvgen
|
||||
(
|
||||
output [8:0] HPOS,
|
||||
output [8:0] VPOS,
|
||||
input PCLK,
|
||||
output reg HBLK = 1,
|
||||
output reg VBLK = 1,
|
||||
output reg HSYN = 1,
|
||||
output reg VSYN = 1
|
||||
);
|
||||
|
||||
reg [8:0] hcnt = 0;
|
||||
reg [8:0] vcnt = 0;
|
||||
|
||||
assign HPOS = hcnt;
|
||||
assign VPOS = vcnt;
|
||||
|
||||
always @(posedge PCLK) begin
|
||||
case (hcnt)
|
||||
287: begin HBLK <= 1; HSYN <= 0; hcnt <= hcnt+1; end
|
||||
311: begin HSYN <= 1; hcnt <= hcnt+1; end
|
||||
383: begin
|
||||
HBLK <= 0; HSYN <= 1; hcnt <= 0;
|
||||
case (vcnt)
|
||||
223: begin VBLK <= 1; vcnt <= vcnt+1; end
|
||||
226: begin VSYN <= 0; vcnt <= vcnt+1; end
|
||||
233: begin VSYN <= 1; vcnt <= vcnt+1; end
|
||||
242: begin VBLK <= 0; vcnt <= 0; end
|
||||
default: vcnt <= vcnt+1;
|
||||
endcase
|
||||
end
|
||||
default: hcnt <= hcnt+1;
|
||||
endcase
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -1,35 +0,0 @@
|
||||
/**************************************************************
|
||||
FPGA New Rally-X (Sound Part)
|
||||
***************************************************************/
|
||||
|
||||
module nrx_namco
|
||||
(
|
||||
input clk,
|
||||
input [7:0] a0,
|
||||
input [7:0] a1,
|
||||
input [7:0] a2,
|
||||
output reg [3:0] d0,
|
||||
output reg [3:0] d1,
|
||||
output reg [3:0] d2
|
||||
);
|
||||
|
||||
reg [1:0] ph=0;
|
||||
|
||||
reg [7:0] ad;
|
||||
wire [7:0] dt;
|
||||
nrx_nam_rom namrom(
|
||||
.clk(clk),
|
||||
.addr(ad),
|
||||
.data(dt)
|
||||
);
|
||||
|
||||
always @(negedge clk) begin
|
||||
case (ph)
|
||||
0: begin d2 <= dt[3:0]; ad <= a0; ph <= 1; end
|
||||
1: begin d0 <= dt[3:0]; ad <= a1; ph <= 2; end
|
||||
2: begin d1 <= dt[3:0]; ad <= a2; ph <= 0; end
|
||||
default:;
|
||||
endcase
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -1,154 +0,0 @@
|
||||
|
||||
module NRX_SPRITE
|
||||
(
|
||||
input VCLKx4,
|
||||
input HBLK,
|
||||
|
||||
input [8:0] HPOS,
|
||||
input [8:0] VPOS,
|
||||
|
||||
output reg [10:0] SPRAADRS,
|
||||
input [15:0] SPRADATA,
|
||||
|
||||
output [3:0] ARAMADRS,
|
||||
input [7:0] ARAMDATA,
|
||||
|
||||
output [11:0] SPCHRADR,
|
||||
input [7:0] SPCHRDAT,
|
||||
|
||||
output [7:0] DROMAD,
|
||||
input [7:0] DROMDT,
|
||||
|
||||
output reg [8:0] SPCOL
|
||||
);
|
||||
|
||||
reg [1:0] clkcnt;
|
||||
always @( posedge VCLKx4 ) clkcnt<=clkcnt+1;
|
||||
wire VCLKx2 = clkcnt[0];
|
||||
wire VCLK = clkcnt[1];
|
||||
|
||||
wire SIDE = VPOS[0];
|
||||
|
||||
|
||||
reg [19:0] SPATR0;
|
||||
reg [36:0] SPATRS[0:31];
|
||||
reg [3:0] WWADR;
|
||||
reg bHit;
|
||||
|
||||
assign ARAMADRS = SPRAADRS[3:0];
|
||||
|
||||
|
||||
reg [7:0] WRADR;
|
||||
reg [8:0] HPOSW;
|
||||
reg [8:0] SPWCL;
|
||||
|
||||
wire [36:0] SPA = SPATRS[{~SIDE,WRADR[7:4]}];
|
||||
|
||||
wire [3:0] SH = WRADR[3:0]+4'h4;
|
||||
wire [3:0] SV = SPA[35:32];
|
||||
|
||||
wire [2:0] SPFY = { 3{SPA[1]} };
|
||||
wire [1:0] SPFX = { 1'b0, SPA[0] };
|
||||
wire [5:0] SPPL = SPA[29:24];
|
||||
|
||||
assign SPCHRADR = { SPA[7:2], ( SV[3] ^ SPA[1] ), ( SH[3:2] ^ SPFX ), ( SV[2:0] ^ SPFY ) };
|
||||
wire [7:0] CHRO = SPCHRDAT;
|
||||
|
||||
|
||||
wire [8:0] YM = ( SPRADATA[15:8] + 8'h10 ) + VPOS[7:0];
|
||||
|
||||
assign DROMAD = { 1'b0, (~SPA[19:17]), SPA[33:32], WRADR[3:2] };
|
||||
|
||||
always @ ( posedge VCLKx2 ) begin
|
||||
|
||||
// in H-BLANK
|
||||
if ( HBLK ) begin
|
||||
|
||||
// Sprite V-hit check & list-up
|
||||
if ( SPRAADRS < 10'h20 ) begin
|
||||
if ( SPRAADRS[0] ) begin
|
||||
if ( bHit ) begin
|
||||
SPATRS[{SIDE,WWADR}] <= { 1'b1, SPATR0[3:0], SPRADATA, SPATR0[19:4] };
|
||||
WWADR <= WWADR+1;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
if ( YM[7:4] == 4'b1111 ) begin
|
||||
bHit <= 1;
|
||||
SPATR0 <= { SPRADATA, YM[3:0] };
|
||||
end
|
||||
else bHit <= 0;
|
||||
end
|
||||
SPRAADRS <= ( SPRAADRS == 10'h1F ) ? 10'h34 : (SPRAADRS+1);
|
||||
end
|
||||
// Rader-dot V-hit check & list-up
|
||||
else begin
|
||||
if ( SPRAADRS < 10'h40 ) begin
|
||||
if ( YM[7:2] == 6'b111111 ) begin
|
||||
SPATRS[{SIDE,WWADR}] <= { 1'b0, 2'b00, YM[1:0], 8'h0, ARAMDATA, SPRADATA };
|
||||
WWADR <= WWADR+1;
|
||||
end
|
||||
SPRAADRS <= SPRAADRS+1;
|
||||
end
|
||||
else SPATRS[{SIDE,WWADR}] <= 0;
|
||||
end
|
||||
|
||||
if ( SPA ) begin
|
||||
// Rend Sprite
|
||||
if ( SPA[36] ) begin
|
||||
HPOSW <= ( WRADR[3:0] ) ? (HPOSW+1) : { SPA[31], SPA[23:16] };
|
||||
case ( SH[1:0] ^ {2{SPFX[0]}} )
|
||||
2'b00: SPWCL <= { 1'b0, SPPL, CHRO[7], CHRO[3] };
|
||||
2'b01: SPWCL <= { 1'b0, SPPL, CHRO[6], CHRO[2] };
|
||||
2'b10: SPWCL <= { 1'b0, SPPL, CHRO[5], CHRO[1] };
|
||||
2'b11: SPWCL <= { 1'b0, SPPL, CHRO[4], CHRO[0] };
|
||||
endcase
|
||||
WRADR <= WRADR+1;
|
||||
end
|
||||
// Rend Rader-dot
|
||||
else begin
|
||||
HPOSW <= ( WRADR[3:0] ) ? (HPOSW+1) : ({ (~SPA[16]), SPA[7:0] });
|
||||
SPWCL <= ( DROMDT[1:0] != 2'b11 ) ? { 1'b1, 6'b000100, DROMDT[1:0] } : 0;
|
||||
WRADR <= WRADR+4;
|
||||
end
|
||||
end
|
||||
else SPWCL <= 0;
|
||||
|
||||
end
|
||||
|
||||
// in H-DISP
|
||||
else begin
|
||||
SPRAADRS <= 10'h14;
|
||||
WWADR <= 0;
|
||||
WRADR <= 0;
|
||||
SPWCL <= 0;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
reg [9:0] radr0=0,radr1=1;
|
||||
wire [8:0] SPCOLi;
|
||||
dpram #(
|
||||
.widthad_a(10),
|
||||
.width_a(9))
|
||||
linebuffer(
|
||||
.address_a({SIDE,HPOS}),
|
||||
.address_b({~SIDE,HPOSW}),
|
||||
.clock_a(VCLKx2),
|
||||
.clock_b(VCLKx2),
|
||||
.data_a(9'h0),
|
||||
.data_b(SPWCL),
|
||||
.wren_a(radr0==radr1),
|
||||
.wren_b((SPWCL[0]|SPWCL[1])),
|
||||
.q_a(SPCOLi),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
always @(posedge VCLK) radr0 <= {SIDE,HPOS};
|
||||
always @(negedge VCLK) begin
|
||||
if (radr0!=radr1) SPCOL <= SPCOLi;
|
||||
radr1 <= radr0;
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -1,241 +0,0 @@
|
||||
/**************************************************************
|
||||
FPGA New Rally-X (Video Part)
|
||||
***************************************************************/
|
||||
module nrx_video
|
||||
(
|
||||
input VCLKx4, // 24.976MHz
|
||||
|
||||
input [8:0] HPOS,
|
||||
input [8:0] VPOS,
|
||||
output PCLK,
|
||||
output reg [7:0] POUT,
|
||||
|
||||
input CPUCLK,
|
||||
input [15:0] CPUADDR,
|
||||
input [7:0] CPUDI,
|
||||
output [7:0] CPUDO,
|
||||
input CPUME,
|
||||
input CPUWE,
|
||||
output CPUDT
|
||||
);
|
||||
|
||||
//-----------------------------------------
|
||||
// Clock generators
|
||||
//-----------------------------------------
|
||||
reg VCLKx2;
|
||||
always @( posedge VCLKx4 ) begin
|
||||
VCLKx2 <= ~VCLKx2;
|
||||
end
|
||||
|
||||
reg VCLK;
|
||||
always @( posedge VCLKx2 ) begin
|
||||
VCLK <= ~VCLK;
|
||||
end
|
||||
|
||||
//-----------------------------------------
|
||||
// BG scroll registers
|
||||
//-----------------------------------------
|
||||
reg [7:0] BGHSCR;
|
||||
reg [7:0] BGVSCR;
|
||||
|
||||
always @ ( posedge CPUCLK ) begin
|
||||
if ( ( CPUADDR == 16'hA130 ) & CPUME & CPUWE ) begin
|
||||
BGHSCR <= CPUDI-3;
|
||||
end
|
||||
if ( ( CPUADDR == 16'hA140 ) & CPUME & CPUWE ) begin
|
||||
BGVSCR <= CPUDI;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
//-----------------------------------------
|
||||
// HV
|
||||
//-----------------------------------------
|
||||
wire [8:0] BGHPOS = HPOS + { 1'b0, BGHSCR };
|
||||
wire [8:0] BGVPOS = VPOS + { 1'b0, BGVSCR };
|
||||
|
||||
wire oHB = ( HPOS > 288 ) ? 1 : 0;
|
||||
wire oVB = ( VPOS > 224 ) ? 1 : 0;
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// VideoRAM Scanner
|
||||
//----------------------------------------
|
||||
wire BF = ( HPOS >= 224 );
|
||||
wire [8:0] HP = BF ? HPOS : BGHPOS;
|
||||
wire [8:0] VP = ( BF ? VPOS : BGVPOS ) + 9'h0F;
|
||||
|
||||
wire [10:0] SPRAADRS;
|
||||
wire [3:0] ARAMADRS;
|
||||
|
||||
reg [10:0] VRAMADRS;
|
||||
always @ ( HPOS ) begin
|
||||
VRAMADRS <= oHB ?
|
||||
SPRAADRS :
|
||||
BF ? { 1'b0, VP[7:3], 2'b00, HP[5:3] } : { 1'b1, VP[7:3], HP[7:3] };
|
||||
end
|
||||
|
||||
wire [7:0] CHRC;
|
||||
wire [7:0] ATTR;
|
||||
wire [7:0] ARDT;
|
||||
|
||||
wire [7:0] V0DO, V1DO;
|
||||
|
||||
wire CEV0 = ( ( CPUADDR[15:12] == 4'b1000 ) & (~CPUADDR[11]) ) & CPUME;
|
||||
wire CEV1 = ( ( CPUADDR[15:12] == 4'b1000 ) & CPUADDR[11] ) & CPUME;
|
||||
wire CEAT = ( CPUADDR[15:4] == 12'b1010_0000_0000 ) & CPUME;
|
||||
|
||||
wire [7:0] DTV0 = CEV0 ? V0DO : 8'h00;
|
||||
wire [7:0] DTV1 = CEV1 ? V1DO : 8'h00;
|
||||
|
||||
assign CPUDO = DTV0 | DTV1;
|
||||
assign CPUDT = ( ~CPUWE ) & ( CEV0 | CEV1 );
|
||||
|
||||
GDPRAM #(11,8) vram0( VCLKx4, VRAMADRS, CHRC, CPUCLK, CPUADDR[10:0], ( CPUWE & CEV0 ), CPUDI, V0DO );
|
||||
/*dpram #(
|
||||
.widthad_a(11),
|
||||
.width_a(8))
|
||||
vram0(
|
||||
.address_a(VRAMADRS),
|
||||
.address_b(CPUADDR[10:0]),
|
||||
.clock_a(VCLKx4),
|
||||
.clock_b(CPUCLK),
|
||||
.data_a(),
|
||||
.data_b(CPUDI),
|
||||
.wren_a(),
|
||||
.wren_b(( CPUWE & CEV0 )),
|
||||
.q_a(CHRC),
|
||||
.q_b(V0DO)
|
||||
);*/
|
||||
|
||||
GDPRAM #(11,8) vram1( VCLKx4, VRAMADRS, ATTR, CPUCLK, CPUADDR[10:0], ( CPUWE & CEV1 ), CPUDI, V1DO );
|
||||
/*dpram #(
|
||||
.widthad_a(11),
|
||||
.width_a(8))
|
||||
vram1(
|
||||
.address_a(VRAMADRS),
|
||||
.address_b(CPUADDR[10:0]),
|
||||
.clock_a(VCLKx4),
|
||||
.clock_b(CPUCLK),
|
||||
.data_a(),
|
||||
.data_b(CPUDI),
|
||||
.wren_a(),
|
||||
.wren_b(( CPUWE & CEV1 )),
|
||||
.q_a(ATTR),
|
||||
.q_b(V1DO)
|
||||
); */
|
||||
GDPRAM #(4,8) aram0( VCLKx4, ARAMADRS, ARDT, CPUCLK, CPUADDR[3:0], ( CPUWE & CEAT ), CPUDI );
|
||||
/*dpram #(
|
||||
.widthad_a(8),
|
||||
.width_a(4))
|
||||
aram0(
|
||||
.address_a(ARAMADRS),
|
||||
.address_b(CPUADDR[3:0]),
|
||||
.clock_a(VCLKx4),
|
||||
.clock_b(CPUCLK),
|
||||
.data_a(),
|
||||
.data_b(CPUDI),
|
||||
.wren_a(),
|
||||
.wren_b(( CPUWE & CEAT )),
|
||||
.q_a(ARDT),
|
||||
.q_b()
|
||||
); */
|
||||
|
||||
wire BGF = ATTR[5];
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// BG/Sprite chip data reader
|
||||
//----------------------------------------
|
||||
wire BGFX = ATTR[6];
|
||||
wire [2:0] BGFY = { ATTR[7], ATTR[7], ATTR[7] };
|
||||
|
||||
wire [11:0] SPCHRADR;
|
||||
wire [11:0] CHRA = oHB ? SPCHRADR : { CHRC, ( HP[2] ^ BGFX ), ( VP[2:0] ^ BGFY ) };
|
||||
|
||||
wire [7:0] CHRO;
|
||||
nrx_chr_rom chrrom(
|
||||
.clk(VCLKx4),
|
||||
.addr(CHRA),
|
||||
.data(CHRO)
|
||||
);
|
||||
|
||||
//----------------------------------------
|
||||
// Rader-dot chip ROM
|
||||
//----------------------------------------
|
||||
wire [7:0] DROMAD;
|
||||
wire [7:0] DROMDT;
|
||||
nrx_dot_rom dotrom(
|
||||
.clk(VCLKx4),
|
||||
.addr(DROMAD),
|
||||
.data(DROMDT)
|
||||
);
|
||||
|
||||
//----------------------------------------
|
||||
// BG/FG scanline generator
|
||||
//----------------------------------------
|
||||
wire [5:0] BGPL = ATTR[5:0];
|
||||
reg [7:0] BGCOL;
|
||||
|
||||
always @ ( posedge VCLK ) begin
|
||||
case ( HP[1:0]^{2{BGFX}} )
|
||||
2'b00: BGCOL <= { BGPL, CHRO[4], CHRO[0] };
|
||||
2'b01: BGCOL <= { BGPL, CHRO[5], CHRO[1] };
|
||||
2'b10: BGCOL <= { BGPL, CHRO[6], CHRO[2] };
|
||||
2'b11: BGCOL <= { BGPL, CHRO[7], CHRO[3] };
|
||||
endcase
|
||||
end
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// Sprite Engine
|
||||
//----------------------------------------
|
||||
wire [8:0] SPCOL;
|
||||
NRX_SPRITE speng(
|
||||
.VCLKx4(VCLKx4),
|
||||
.HBLK(oHB),
|
||||
.HPOS(HPOS),
|
||||
.VPOS(VPOS),
|
||||
.SPRAADRS(SPRAADRS),
|
||||
.SPRADATA({ ATTR, CHRC }),
|
||||
.ARAMADRS(ARAMADRS),
|
||||
.ARAMDATA(ARDT),
|
||||
.SPCHRADR(SPCHRADR),
|
||||
.SPCHRDAT(CHRO),
|
||||
.DROMAD(DROMAD),
|
||||
.DROMDT(DROMDT),
|
||||
.SPCOL(SPCOL)
|
||||
);
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// Color mixer
|
||||
//----------------------------------------
|
||||
wire bBGOPAQUE = ( ( BF | BGF ) & (~SPCOL[8]) );
|
||||
wire bSPTRANSP = ( SPCOL[1:0] == 2'b00 );
|
||||
|
||||
wire [7:0] OUTCOL = ( bBGOPAQUE | bSPTRANSP ) ? BGCOL : SPCOL[7:0];
|
||||
wire [3:0] CLUT;
|
||||
nrx_col_rom colrom(
|
||||
.clk(~VCLKx4),
|
||||
.addr(OUTCOL),
|
||||
.data(CLUT)
|
||||
);
|
||||
|
||||
wire [4:0] PALA = SPCOL[8] ? SPCOL[4:0] : { 1'b0, CLUT };
|
||||
wire [7:0] PALO;
|
||||
|
||||
nrx_pal_rom palrom(
|
||||
.clk(VCLKx4),
|
||||
.addr(PALA),
|
||||
.data(PALO)
|
||||
);
|
||||
|
||||
//----------------------------------------
|
||||
// Color output
|
||||
//----------------------------------------
|
||||
always @ ( posedge PCLK ) POUT <= (oHB|oVB) ? 8'h0 : PALO;
|
||||
assign PCLK = VCLK;
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -1,174 +0,0 @@
|
||||
module rallyX_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 = {
|
||||
"RallyX;;",
|
||||
"O8A,Difficulty,M1,M2,M3,M4,M5,M6,M7,M8;",
|
||||
"OBC,Bonus Life,M1,M2,M3,Nothing;",
|
||||
"OF,Service Mode,Off,On;",
|
||||
"O34,Scanlines,None,CRT 25%,CRT 50%,CRT 75%;",
|
||||
"O5,Blend ,Off,On;",
|
||||
"T6,Reset;",
|
||||
"V,v1.00.",`BUILD_DATE
|
||||
};
|
||||
|
||||
assign LED = 1;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
|
||||
wire clock_24, clock_12;
|
||||
pll pll(
|
||||
.inclk0(CLOCK_27),
|
||||
.c0(clock_24)//24.576MHz
|
||||
);
|
||||
|
||||
wire [31:0] status;
|
||||
wire [1:0] buttons;
|
||||
wire [1:0] switches;
|
||||
wire [11:0] kbjoy;
|
||||
wire [7:0] joystick_0;
|
||||
wire [7:0] joystick_1;
|
||||
wire scandoublerD;
|
||||
wire ypbpr;
|
||||
wire [7:0] audio;
|
||||
wire hs, vs;
|
||||
wire hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire [2:0] r, g;
|
||||
wire [1:0] b;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
|
||||
wire [7:0] iDSW = ~{ 2'b00, status[10:8], status[12:11], status[15] };
|
||||
wire [7:0] iCTR1 = ~{ btn_coin, btn_one_player, m_up1, m_down1, m_right1, m_left1, m_fire1, 1'b0 };
|
||||
wire [7:0] iCTR2 = ~{ btn_coin, btn_two_players, m_up2, m_down2, m_right2, m_left2, m_fire2, 1'b0 };
|
||||
|
||||
|
||||
fpga_nrx fpga_nrx(
|
||||
.RESET(status[0] | status[6] | buttons[1]),
|
||||
.CLK24M(clock_24),
|
||||
.hsync(hs),
|
||||
.vsync(vs),
|
||||
.hblank(hb),
|
||||
.vblank(vb),
|
||||
.r(r),
|
||||
.g(g),
|
||||
.b(b),
|
||||
.SND(audio),
|
||||
.DSW(iDSW),
|
||||
.CTR1(iCTR1),
|
||||
.CTR2(iCTR2),
|
||||
.LAMP()
|
||||
);
|
||||
|
||||
|
||||
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(10)) mist_video(
|
||||
.clk_sys ( clock_24 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS3 ( SPI_SS3 ),
|
||||
.SPI_DI ( SPI_DI ),
|
||||
.R ( blankn ? r : 0 ),
|
||||
.G ( blankn ? g : 0 ),
|
||||
.B ( blankn ? {b,1'b0} : 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 ),
|
||||
.blend ( status[5] ),
|
||||
.scandoubler_disable( scandoublerD ),
|
||||
.scanlines ( status[4:3] ),
|
||||
.ypbpr ( ypbpr )
|
||||
);
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_24 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status )
|
||||
);
|
||||
|
||||
dac #(.C_bits(16))dac(
|
||||
.clk_i(clock_24),
|
||||
.res_n_i(1),
|
||||
.dac_i({audio,audio}),
|
||||
.dac_o(AUDIO_L)
|
||||
);
|
||||
|
||||
wire m_up1 = btn_up | joystick_0[3];
|
||||
wire m_down1 = btn_down | joystick_0[2];
|
||||
wire m_left1 = btn_left | joystick_0[1];
|
||||
wire m_right1 = btn_right | joystick_0[0];
|
||||
wire m_fire1 = btn_fire1 | joystick_0[4];
|
||||
|
||||
wire m_up2 = joystick_1[3];
|
||||
wire m_down2 = joystick_1[2];
|
||||
wire m_left2 = joystick_1[1];
|
||||
wire m_right2 = joystick_1[0];
|
||||
wire m_fire2 = joystick_1[4];
|
||||
|
||||
|
||||
reg btn_one_player = 0;
|
||||
reg btn_two_players = 0;
|
||||
reg btn_left = 0;
|
||||
reg btn_right = 0;
|
||||
reg btn_down = 0;
|
||||
reg btn_up = 0;
|
||||
reg btn_fire1 = 0;
|
||||
//reg btn_fire2 = 0;
|
||||
//reg btn_fire3 = 0;
|
||||
reg btn_coin = 0;
|
||||
|
||||
always @(posedge clock_24) begin
|
||||
reg old_state;
|
||||
old_state <= key_strobe;
|
||||
if(old_state != key_strobe) begin
|
||||
case(key_code)
|
||||
'h75: btn_up <= key_pressed; // up
|
||||
'h72: btn_down <= key_pressed; // down
|
||||
'h6B: btn_left <= key_pressed; // left
|
||||
'h74: btn_right <= key_pressed; // right
|
||||
'h76: btn_coin <= key_pressed; // ESC
|
||||
'h05: btn_one_player <= key_pressed; // F1
|
||||
'h06: btn_two_players <= key_pressed; // F2
|
||||
// 'h14: btn_fire3 <= key_pressed; // ctrl
|
||||
// 'h11: btn_fire2 <= key_pressed; // alt
|
||||
'h29: btn_fire1 <= key_pressed; // Space
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -1,64 +0,0 @@
|
||||
|
||||
|
||||
|
||||
module GSPRAM #(parameter AW,parameter DW)
|
||||
(
|
||||
input CL,
|
||||
input [(AW-1):0] AD,
|
||||
input WE,
|
||||
input [(DW-1):0] DI,
|
||||
output reg [(DW-1):0] DO
|
||||
);
|
||||
|
||||
reg [(DW-1):0] core[0:((2**AW)-1)];
|
||||
|
||||
always @(posedge CL) begin
|
||||
DO <= core[AD];
|
||||
if (WE) core[AD] <= DI;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
module GDPRAM #(parameter AW,parameter DW)
|
||||
(
|
||||
input CL0,
|
||||
input [(AW-1):0] AD0,
|
||||
output reg [(DW-1):0] DO0,
|
||||
|
||||
input CL1,
|
||||
input [(AW-1):0] AD1,
|
||||
input WE1,
|
||||
input [(DW-1):0] DI1,
|
||||
output reg [(DW-1):0] DO1
|
||||
);
|
||||
|
||||
reg [(DW-1):0] core[0:((2**AW)-1)];
|
||||
|
||||
always @(posedge CL0) DO0 <= core[AD0];
|
||||
always @(posedge CL1) begin DO1 <= core[AD1]; if (WE1) core[AD1] <= DI1; end
|
||||
|
||||
endmodule
|
||||
|
||||
/*
|
||||
module GLINEBUF #(parameter AW,parameter DW)
|
||||
(
|
||||
input CL0,
|
||||
input [(AW-1):0] AD0,
|
||||
input WE0,
|
||||
output reg [(DW-1):0] DO0,
|
||||
|
||||
input CL1,
|
||||
input [(AW-1):0] AD1,
|
||||
input WE1,
|
||||
input [(DW-1):0] DI1
|
||||
);
|
||||
|
||||
reg [(DW-1):0] core[0:((2**AW)-1)];
|
||||
|
||||
always @(posedge CL0) begin DO0 <= core[AD0]; if (WE0) core[AD0] <= 0; end
|
||||
always @(posedge CL1) if (WE1) core[AD1] <= DI1;
|
||||
|
||||
endmodule*/
|
||||
|
||||
|
||||
@@ -1,278 +0,0 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all,ieee.numeric_std.all;
|
||||
|
||||
entity nrx_chr_rom is
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr : in std_logic_vector(11 downto 0);
|
||||
data : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture prom of nrx_chr_rom is
|
||||
type rom is array(0 to 4095) of std_logic_vector(7 downto 0);
|
||||
signal rom_data: rom := (
|
||||
X"CC",X"66",X"33",X"33",X"33",X"22",X"CC",X"00",X"11",X"22",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"FF",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"33",X"00",
|
||||
X"EE",X"33",X"77",X"EE",X"CC",X"00",X"FF",X"00",X"33",X"66",X"00",X"11",X"33",X"77",X"77",X"00",
|
||||
X"FF",X"66",X"CC",X"EE",X"33",X"33",X"EE",X"00",X"33",X"00",X"00",X"11",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"EE",X"66",X"66",X"FF",X"66",X"66",X"00",X"00",X"11",X"33",X"66",X"77",X"00",X"00",X"00",
|
||||
X"EE",X"00",X"EE",X"33",X"33",X"33",X"EE",X"00",X"77",X"66",X"77",X"00",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"00",X"00",X"EE",X"33",X"33",X"EE",X"00",X"11",X"33",X"66",X"77",X"66",X"66",X"33",X"00",
|
||||
X"FF",X"33",X"66",X"CC",X"88",X"88",X"88",X"00",X"77",X"66",X"00",X"00",X"11",X"11",X"11",X"00",
|
||||
X"CC",X"22",X"22",X"CC",X"FF",X"33",X"EE",X"00",X"33",X"66",X"77",X"33",X"44",X"44",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"FF",X"33",X"66",X"CC",X"00",X"33",X"66",X"66",X"33",X"00",X"00",X"33",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"FF",X"33",X"33",X"00",X"11",X"33",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"EE",X"33",X"33",X"EE",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"77",X"00",
|
||||
X"EE",X"33",X"00",X"00",X"00",X"33",X"EE",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"33",X"66",X"CC",X"00",X"77",X"66",X"66",X"66",X"66",X"66",X"77",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"00",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"66",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"22",X"99",X"11",X"11",X"99",X"22",X"CC",X"33",X"44",X"99",X"AA",X"AA",X"99",X"44",X"33",
|
||||
X"0F",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"07",X"07",X"00",X"0F",X"0F",X"0C",X"0F",X"0F",X"08",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",
|
||||
X"01",X"09",X"09",X"09",X"09",X"09",X"09",X"09",X"0F",X"0F",X"01",X"0F",X"0F",X"01",X"0F",X"0F",
|
||||
X"0F",X"0F",X"09",X"09",X"09",X"09",X"09",X"09",X"0F",X"0F",X"09",X"09",X"09",X"09",X"09",X"09",
|
||||
X"0F",X"0F",X"08",X"08",X"08",X"08",X"0F",X"0F",X"00",X"09",X"09",X"09",X"09",X"09",X"09",X"08",
|
||||
X"03",X"07",X"06",X"06",X"06",X"06",X"07",X"03",X"0E",X"0E",X"00",X"00",X"00",X"00",X"0E",X"0E",
|
||||
X"00",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"0F",X"0F",X"01",X"01",X"01",X"01",X"0F",X"0F",
|
||||
X"EE",X"11",X"DD",X"55",X"FF",X"00",X"EE",X"00",X"33",X"44",X"55",X"55",X"55",X"44",X"33",X"00",
|
||||
X"CC",X"CC",X"88",X"88",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"00",X"33",X"33",
|
||||
X"66",X"66",X"22",X"44",X"00",X"00",X"00",X"00",X"33",X"33",X"11",X"22",X"00",X"00",X"00",X"00",
|
||||
X"66",X"66",X"FF",X"66",X"FF",X"66",X"66",X"00",X"33",X"33",X"77",X"33",X"77",X"33",X"33",X"00",
|
||||
X"88",X"EE",X"88",X"EE",X"BB",X"EE",X"88",X"00",X"00",X"33",X"66",X"33",X"00",X"33",X"00",X"00",
|
||||
X"11",X"22",X"44",X"88",X"33",X"55",X"77",X"00",X"77",X"55",X"66",X"00",X"11",X"22",X"44",X"00",
|
||||
X"00",X"88",X"88",X"33",X"AA",X"44",X"BB",X"00",X"33",X"44",X"55",X"33",X"66",X"44",X"33",X"00",
|
||||
X"88",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"11",X"11",X"00",X"11",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"88",X"00",X"00",X"00",X"88",X"CC",X"00",X"00",X"11",X"33",X"33",X"33",X"11",X"00",X"00",
|
||||
X"88",X"CC",X"66",X"66",X"66",X"CC",X"88",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"11",X"00",
|
||||
X"88",X"AA",X"CC",X"88",X"CC",X"AA",X"88",X"00",X"00",X"22",X"11",X"00",X"11",X"22",X"00",X"00",
|
||||
X"00",X"88",X"88",X"EE",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"33",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"11",X"22",X"00",
|
||||
X"00",X"00",X"00",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"11",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"33",X"22",X"CC",X"00",X"11",X"22",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"FF",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"33",X"00",
|
||||
X"EE",X"33",X"77",X"EE",X"CC",X"00",X"FF",X"00",X"33",X"66",X"00",X"11",X"33",X"77",X"77",X"00",
|
||||
X"FF",X"66",X"CC",X"EE",X"33",X"33",X"EE",X"00",X"33",X"00",X"00",X"11",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"EE",X"66",X"66",X"FF",X"66",X"66",X"00",X"00",X"11",X"33",X"66",X"77",X"00",X"00",X"00",
|
||||
X"EE",X"00",X"EE",X"33",X"33",X"33",X"EE",X"00",X"77",X"66",X"77",X"00",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"00",X"00",X"EE",X"33",X"33",X"EE",X"00",X"11",X"33",X"66",X"77",X"66",X"66",X"33",X"00",
|
||||
X"FF",X"33",X"66",X"CC",X"88",X"88",X"88",X"00",X"77",X"66",X"00",X"00",X"11",X"11",X"11",X"00",
|
||||
X"CC",X"22",X"22",X"CC",X"FF",X"33",X"EE",X"00",X"33",X"66",X"77",X"33",X"44",X"44",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"FF",X"33",X"66",X"CC",X"00",X"33",X"66",X"66",X"33",X"00",X"00",X"33",X"00",
|
||||
X"00",X"88",X"88",X"00",X"88",X"88",X"00",X"00",X"00",X"11",X"11",X"00",X"11",X"11",X"00",X"00",
|
||||
X"00",X"88",X"88",X"00",X"88",X"88",X"00",X"00",X"00",X"11",X"11",X"00",X"11",X"00",X"11",X"00",
|
||||
X"66",X"CC",X"88",X"00",X"88",X"CC",X"66",X"00",X"00",X"00",X"11",X"33",X"11",X"00",X"00",X"00",
|
||||
X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00",X"00",X"00",X"77",X"77",X"00",X"77",X"77",X"00",X"00",
|
||||
X"00",X"88",X"CC",X"66",X"CC",X"88",X"00",X"00",X"33",X"11",X"00",X"00",X"00",X"11",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"66",X"CC",X"00",X"CC",X"CC",X"33",X"66",X"66",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"FF",X"33",X"33",X"00",X"11",X"33",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"EE",X"33",X"33",X"EE",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"77",X"00",
|
||||
X"EE",X"33",X"00",X"00",X"00",X"33",X"EE",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"33",X"66",X"CC",X"00",X"77",X"66",X"66",X"66",X"66",X"66",X"77",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"00",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"66",X"00",
|
||||
X"FF",X"00",X"00",X"77",X"33",X"33",X"FF",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"33",X"33",X"33",X"FF",X"33",X"33",X"33",X"00",X"66",X"66",X"66",X"77",X"66",X"66",X"66",X"00",
|
||||
X"FF",X"CC",X"CC",X"CC",X"CC",X"CC",X"FF",X"00",X"33",X"00",X"00",X"00",X"00",X"00",X"33",X"00",
|
||||
X"33",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"66",X"33",X"00",
|
||||
X"33",X"66",X"CC",X"88",X"CC",X"EE",X"77",X"00",X"66",X"66",X"66",X"77",X"77",X"66",X"66",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"33",X"77",X"FF",X"FF",X"BB",X"33",X"33",X"00",X"66",X"77",X"77",X"77",X"66",X"66",X"66",X"00",
|
||||
X"33",X"33",X"BB",X"FF",X"FF",X"77",X"33",X"00",X"66",X"77",X"77",X"77",X"66",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"33",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"EE",X"00",X"00",X"00",X"77",X"66",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"FF",X"66",X"DD",X"00",X"33",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"77",X"CC",X"EE",X"77",X"00",X"77",X"66",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"CC",X"66",X"00",X"EE",X"33",X"33",X"EE",X"00",X"33",X"66",X"66",X"33",X"00",X"66",X"33",X"00",
|
||||
X"FF",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"00",X"33",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"33",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"66",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"33",X"33",X"33",X"77",X"EE",X"CC",X"88",X"00",X"66",X"66",X"66",X"77",X"33",X"11",X"00",X"00",
|
||||
X"33",X"33",X"BB",X"FF",X"FF",X"77",X"33",X"00",X"66",X"66",X"66",X"77",X"77",X"77",X"66",X"00",
|
||||
X"33",X"77",X"EE",X"CC",X"EE",X"77",X"33",X"00",X"66",X"77",X"33",X"11",X"33",X"77",X"66",X"00",
|
||||
X"33",X"33",X"33",X"EE",X"CC",X"CC",X"CC",X"00",X"33",X"33",X"33",X"11",X"00",X"00",X"00",X"00",
|
||||
X"FF",X"77",X"EE",X"CC",X"88",X"00",X"FF",X"00",X"77",X"00",X"00",X"11",X"33",X"77",X"77",X"00",
|
||||
X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"88",X"88",X"88",X"88",X"88",X"88",X"88",
|
||||
X"0F",X"0F",X"3F",X"BF",X"DB",X"FF",X"F6",X"FF",X"0F",X"0F",X"0F",X"0F",X"1F",X"1F",X"0F",X"3F",
|
||||
X"0F",X"EF",X"7F",X"96",X"F3",X"FF",X"F9",X"FF",X"0F",X"4F",X"FF",X"F3",X"FF",X"F7",X"FF",X"FF",
|
||||
X"0F",X"0F",X"0F",X"0F",X"87",X"8F",X"0F",X"4F",X"0F",X"0F",X"CF",X"87",X"FC",X"FF",X"BF",X"EF",
|
||||
X"FA",X"FB",X"FD",X"FF",X"B6",X"DB",X"EF",X"F6",X"7F",X"7E",X"3D",X"5F",X"7D",X"7D",X"3F",X"7E",
|
||||
X"F9",X"F7",X"FE",X"7F",X"FF",X"F9",X"EF",X"F7",X"F7",X"F7",X"9F",X"EF",X"FE",X"F5",X"7F",X"FF",
|
||||
X"EB",X"EB",X"CF",X"2F",X"EB",X"E7",X"EF",X"6F",X"FD",X"F3",X"FC",X"FF",X"F5",X"FB",X"EF",X"FB",
|
||||
X"7E",X"FF",X"FB",X"FD",X"7B",X"1F",X"0F",X"0F",X"3F",X"2F",X"1F",X"1F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F7",X"FF",X"FF",X"FF",X"FF",X"F9",X"EF",X"0F",X"CC",X"FF",X"FD",X"FD",X"17",X"E9",X"6F",X"0F",
|
||||
X"0F",X"CF",X"8F",X"8F",X"0F",X"0F",X"0F",X"0F",X"F7",X"FF",X"FA",X"F7",X"7F",X"0F",X"0F",X"0F",
|
||||
X"FF",X"5F",X"0F",X"8F",X"C3",X"F3",X"9F",X"3F",X"FF",X"FF",X"FF",X"CF",X"CF",X"CF",X"CF",X"FF",
|
||||
X"FF",X"EF",X"CF",X"CF",X"8F",X"FF",X"8F",X"8F",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FF",X"3F",X"1F",X"1F",X"1F",X"1F",X"3F",X"FF",X"3F",X"2F",X"2F",X"2F",X"79",X"F8",X"78",
|
||||
X"7F",X"FF",X"FF",X"DF",X"1F",X"3F",X"3C",X"FC",X"FF",X"FF",X"FF",X"FF",X"EF",X"CF",X"CF",X"EF",
|
||||
X"0F",X"0F",X"DF",X"6F",X"2F",X"0F",X"3F",X"3F",X"FF",X"BF",X"1F",X"0F",X"1F",X"9F",X"EF",X"C7",
|
||||
X"5F",X"9F",X"1F",X"3F",X"FF",X"FF",X"FF",X"FF",X"78",X"F8",X"1E",X"1F",X"1F",X"3F",X"FF",X"FF",
|
||||
X"3C",X"3F",X"1F",X"1F",X"2F",X"6F",X"FF",X"FF",X"FF",X"EF",X"CF",X"CF",X"CF",X"EF",X"FF",X"FF",
|
||||
X"3F",X"7F",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"E7",X"97",X"0F",X"0F",X"0F",X"1F",X"3F",X"FF",
|
||||
X"FF",X"7F",X"7F",X"9F",X"9F",X"1F",X"3F",X"FF",X"FF",X"CF",X"CF",X"3C",X"3C",X"1F",X"EF",X"FF",
|
||||
X"EE",X"7F",X"1D",X"9F",X"97",X"9F",X"3F",X"7F",X"EC",X"CF",X"8F",X"3E",X"38",X"3E",X"8F",X"CF",
|
||||
X"DD",X"7F",X"3F",X"9F",X"95",X"9F",X"3F",X"7F",X"FF",X"CF",X"8F",X"3E",X"34",X"3E",X"8F",X"CF",
|
||||
X"1D",X"1F",X"C7",X"C3",X"C7",X"1F",X"3F",X"FF",X"CD",X"CF",X"17",X"9E",X"9B",X"CF",X"EF",X"FF",
|
||||
X"EF",X"3F",X"1F",X"C7",X"C3",X"C7",X"1F",X"3F",X"33",X"EF",X"CF",X"9F",X"9E",X"9F",X"CF",X"EB",
|
||||
X"8B",X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"6F",X"6E",X"CF",X"8F",X"3E",X"3C",X"3E",X"8F",X"4F",
|
||||
X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"7F",X"FF",X"E6",X"8F",X"3E",X"3C",X"3E",X"8F",X"CF",X"FF",
|
||||
X"3F",X"1F",X"C7",X"C3",X"C7",X"1F",X"3E",X"FF",X"EF",X"CF",X"9F",X"9E",X"9F",X"CF",X"AF",X"FF",
|
||||
X"FF",X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"7F",X"FF",X"CF",X"8F",X"3E",X"3C",X"3E",X"8F",X"CF",
|
||||
X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"5D",X"FF",X"CF",X"8F",X"3E",X"3C",X"3E",X"8F",X"0B",X"FF",
|
||||
X"FF",X"FE",X"FE",X"FF",X"EF",X"FE",X"FC",X"ED",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FF",X"F7",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FA",X"F3",X"FF",X"FF",X"F7",X"F7",X"F7",
|
||||
X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"77",X"F7",X"FF",X"DF",X"CF",X"F8",X"BC",X"E8",X"BC",X"3C",
|
||||
X"E9",X"DF",X"F8",X"F8",X"F8",X"78",X"78",X"78",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FE",X"FE",X"FE",X"EF",X"D6",X"FF",X"FF",X"F3",X"B3",X"F1",X"B1",X"10",X"91",X"91",X"11",
|
||||
X"77",X"11",X"7F",X"77",X"31",X"75",X"FA",X"FF",X"78",X"E0",X"E3",X"E8",X"E0",X"E0",X"C0",X"EC",
|
||||
X"68",X"D2",X"F2",X"F6",X"FE",X"FE",X"FE",X"FF",X"FE",X"EF",X"FF",X"FC",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FF",X"F7",X"FB",X"FF",X"FE",X"FF",X"FF",X"31",X"90",X"B1",X"FC",X"77",X"77",X"77",X"FF",
|
||||
X"FF",X"FF",X"FF",X"FF",X"FF",X"F3",X"FF",X"FF",X"EC",X"EC",X"FF",X"FF",X"F2",X"F0",X"FF",X"79",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",
|
||||
X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"30",X"70",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"10",X"10",X"00",X"00",X"00",X"00",X"10",X"10",
|
||||
X"F0",X"F0",X"F0",X"F0",X"30",X"00",X"00",X"00",X"F0",X"F0",X"F0",X"F0",X"C0",X"00",X"00",X"00",
|
||||
X"F0",X"F0",X"F0",X"78",X"1E",X"78",X"F0",X"F0",X"F0",X"78",X"1E",X"0F",X"0F",X"0F",X"1E",X"78",
|
||||
X"F0",X"F0",X"E1",X"E1",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"78",X"78",X"3C",X"3C",X"F0",X"F0",X"F0",X"F0",
|
||||
X"F0",X"FC",X"F6",X"F0",X"FC",X"F6",X"F6",X"FC",X"F0",X"F3",X"F6",X"F6",X"F3",X"F0",X"F6",X"F3",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"FF",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"F3",X"F7",X"EF",X"CF",X"CF",X"CF",X"CF",X"CF",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",
|
||||
X"FF",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"FF",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"CF",X"CF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F0",X"60",X"40",X"F0",X"70",X"70",X"C0",X"B3",X"F0",X"E0",X"F0",X"C0",X"83",X"C1",X"E0",X"D0",
|
||||
X"F0",X"F0",X"30",X"DC",X"9C",X"0E",X"0F",X"0F",X"F0",X"F0",X"C0",X"B3",X"33",X"67",X"67",X"67",
|
||||
X"F0",X"F0",X"F0",X"F0",X"D0",X"70",X"38",X"38",X"F0",X"F0",X"90",X"F0",X"B0",X"C0",X"41",X"60",
|
||||
X"67",X"67",X"67",X"67",X"47",X"47",X"00",X"0D",X"F0",X"F0",X"F0",X"C0",X"83",X"83",X"81",X"C1",
|
||||
X"0F",X"0C",X"1F",X"2F",X"2F",X"4F",X"4F",X"0F",X"09",X"0D",X"0D",X"0D",X"0D",X"09",X"0D",X"0E",
|
||||
X"70",X"F0",X"70",X"38",X"38",X"1C",X"18",X"1C",X"60",X"70",X"88",X"0F",X"0F",X"0B",X"0D",X"0D",
|
||||
X"0D",X"0D",X"0D",X"0D",X"07",X"83",X"C0",X"F0",X"83",X"83",X"C0",X"E0",X"F0",X"90",X"90",X"F0",
|
||||
X"0F",X"0F",X"0F",X"0E",X"0F",X"0E",X"10",X"F0",X"0E",X"08",X"0B",X"0B",X"0F",X"0E",X"10",X"F0",
|
||||
X"18",X"70",X"70",X"F0",X"F0",X"50",X"70",X"F0",X"0D",X"0F",X"00",X"70",X"60",X"C1",X"E0",X"F0",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"E0",X"D0",X"D0",X"D0",X"D0",X"D0",X"60",X"F0",X"E0",X"C0",X"E0",X"E0",X"E0",X"E0",X"C0",
|
||||
X"F0",X"E0",X"50",X"50",X"D0",X"D0",X"D0",X"60",X"F0",X"C0",X"B0",X"B0",X"E0",X"D0",X"B0",X"80",
|
||||
X"F0",X"E0",X"50",X"50",X"D0",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"F0",X"E0",X"F0",X"B0",X"C0",
|
||||
X"F0",X"E0",X"D0",X"D0",X"D0",X"50",X"D0",X"E0",X"F0",X"A0",X"A0",X"A0",X"A0",X"80",X"E0",X"E0",
|
||||
X"F0",X"60",X"D0",X"D0",X"50",X"50",X"50",X"E0",X"F0",X"80",X"B0",X"80",X"F0",X"F0",X"B0",X"C0",
|
||||
X"F0",X"E0",X"50",X"D0",X"D0",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"B0",X"80",X"B0",X"B0",X"C0",
|
||||
X"F0",X"60",X"50",X"D0",X"D0",X"D0",X"D0",X"E0",X"F0",X"80",X"F0",X"E0",X"E0",X"D0",X"D0",X"D0",
|
||||
X"F0",X"E0",X"50",X"50",X"D0",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"B0",X"C0",X"B0",X"B0",X"C0",
|
||||
X"F0",X"E0",X"50",X"50",X"50",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"B0",X"C0",X"F0",X"B0",X"C0",
|
||||
X"00",X"10",X"B0",X"F0",X"B0",X"10",X"10",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"30",X"D0",X"D0",X"D0",X"D0",X"D0",X"30",X"F0",X"70",X"A0",X"A0",X"A0",X"A0",X"A0",X"70",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"90",X"60",X"60",X"60",X"60",X"60",X"90",
|
||||
X"F0",X"90",X"60",X"E0",X"D0",X"B0",X"00",X"F0",X"F0",X"F0",X"F0",X"50",X"B0",X"50",X"F0",X"F0",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"10",X"B0",X"F0",X"B0",X"10",X"10",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"D0",X"F0",X"D0",X"80",X"80",X"C0",
|
||||
X"B0",X"F0",X"90",X"00",X"00",X"00",X"00",X"00",X"10",X"10",X"10",X"00",X"00",X"00",X"00",X"00",
|
||||
X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00",X"D0",X"F0",X"90",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"F0",X"E1",X"69",X"0F",X"0F",X"0F",X"0F",X"F0",X"F0",X"96",X"87",X"C3",X"C3",X"E1",X"E1",
|
||||
X"F0",X"C3",X"87",X"0F",X"0F",X"0F",X"0F",X"0F",X"B4",X"3C",X"3C",X"1E",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F0",X"F0",X"96",X"1E",X"1E",X"3C",X"3C",X"3C",X"78",X"78",X"78",X"2D",X"0F",X"0F",X"0F",X"0F",
|
||||
X"8F",X"5F",X"5F",X"9F",X"5F",X"5F",X"9F",X"0F",X"F3",X"E3",X"E3",X"3F",X"A7",X"E3",X"F3",X"E1",
|
||||
X"8F",X"8F",X"CF",X"AF",X"9F",X"8F",X"8F",X"0F",X"CF",X"2F",X"2F",X"EF",X"2F",X"2F",X"2F",X"0F",
|
||||
X"F8",X"7C",X"78",X"FC",X"7C",X"5E",X"DE",X"1E",X"9F",X"AF",X"AF",X"AF",X"AF",X"AF",X"9F",X"0F",
|
||||
X"0F",X"0F",X"0F",X"1E",X"78",X"F0",X"F0",X"F0",X"E1",X"C3",X"C3",X"87",X"87",X"1E",X"78",X"F0",
|
||||
X"0F",X"0F",X"0F",X"69",X"78",X"F0",X"F0",X"F0",X"0F",X"0F",X"0F",X"0F",X"0F",X"87",X"96",X"D2",
|
||||
X"0F",X"0F",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"0F",X"0F",X"1E",X"1E",X"1E",X"96",X"D2",X"D2",
|
||||
X"F0",X"00",X"FF",X"FF",X"FF",X"FF",X"CC",X"BB",X"F0",X"E0",X"D1",X"B3",X"B3",X"B3",X"91",X"FF",
|
||||
X"F7",X"FF",X"77",X"BB",X"BB",X"BB",X"33",X"CC",X"F0",X"70",X"00",X"77",X"77",X"FF",X"33",X"DD",
|
||||
X"F0",X"70",X"B8",X"DC",X"DC",X"DC",X"DC",X"30",X"F8",X"EC",X"DD",X"DD",X"FF",X"FF",X"FF",X"FF",
|
||||
X"77",X"77",X"55",X"BB",X"33",X"BB",X"CC",X"66",X"FF",X"FF",X"FF",X"FF",X"44",X"D9",X"D1",X"C0",
|
||||
X"33",X"BB",X"BB",X"22",X"AA",X"DD",X"FF",X"FF",X"CC",X"FF",X"FF",X"EE",X"DD",X"DD",X"BB",X"77",
|
||||
X"CC",X"EE",X"EE",X"EE",X"FF",X"10",X"F0",X"F0",X"FF",X"FF",X"FF",X"33",X"DD",X"DD",X"EE",X"EE",
|
||||
X"DD",X"DD",X"EE",X"FF",X"EE",X"EE",X"00",X"F0",X"B3",X"B3",X"B3",X"77",X"77",X"91",X"E0",X"F0",
|
||||
X"EE",X"99",X"77",X"FF",X"FF",X"FF",X"FF",X"00",X"FF",X"FF",X"77",X"99",X"EE",X"DD",X"DD",X"30",
|
||||
X"70",X"B8",X"B8",X"DC",X"DC",X"30",X"F0",X"F0",X"CC",X"FF",X"FF",X"FF",X"FF",X"BB",X"88",X"70",
|
||||
X"0F",X"69",X"69",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"87",X"87",X"87",X"87",X"87",X"87",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"C3",X"C3",X"C3",X"C3",X"C3",X"C3",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"E3",X"E3",X"E3",X"E3",X"E3",X"E3",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"EF",X"EF",X"EF",X"EF",X"EF",X"EF",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",
|
||||
X"EE",X"00",X"CC",X"00",X"00",X"00",X"00",X"08",X"77",X"66",X"77",X"66",X"66",X"00",X"00",X"00",
|
||||
X"66",X"66",X"66",X"66",X"CC",X"00",X"00",X"00",X"66",X"66",X"66",X"66",X"33",X"00",X"00",X"02",
|
||||
X"EE",X"00",X"CC",X"00",X"EE",X"00",X"00",X"02",X"77",X"66",X"77",X"66",X"77",X"00",X"80",X"80",
|
||||
X"00",X"00",X"00",X"00",X"EE",X"00",X"00",X"08",X"66",X"66",X"66",X"66",X"77",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"FF",X"33",X"33",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"FF",X"00",X"00",X"77",X"33",X"33",X"FF",X"00",X"11",X"33",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"33",X"33",X"33",X"77",X"EE",X"CC",X"88",X"00",X"33",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"66",X"66",X"66",X"77",X"33",X"11",X"00",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"66",X"77",X"77",X"77",X"66",X"66",X"66",X"00",
|
||||
X"33",X"77",X"FF",X"FF",X"BB",X"33",X"33",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"77",X"CC",X"EE",X"77",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"77",X"66",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"CC",X"CC",X"CC",X"00",X"00",X"00",X"00",X"00",X"33",X"33",X"33",X"00",X"00",X"00",
|
||||
X"01",X"03",X"8B",X"8F",X"8B",X"03",X"03",X"12",X"08",X"0C",X"1D",X"1F",X"1D",X"0C",X"0C",X"84",
|
||||
X"00",X"EE",X"EE",X"EE",X"EE",X"EE",X"00",X"00",X"00",X"77",X"77",X"77",X"77",X"77",X"00",X"00",
|
||||
X"16",X"16",X"16",X"1E",X"17",X"27",X"22",X"22",X"86",X"86",X"86",X"87",X"8E",X"4E",X"44",X"44",
|
||||
X"00",X"00",X"08",X"08",X"33",X"7F",X"77",X"66",X"00",X"00",X"00",X"00",X"00",X"00",X"77",X"77",
|
||||
X"33",X"77",X"77",X"66",X"00",X"01",X"03",X"12",X"00",X"07",X"07",X"0F",X"0F",X"0F",X"0E",X"86",
|
||||
X"00",X"00",X"00",X"88",X"88",X"88",X"00",X"00",X"FF",X"EF",X"EF",X"01",X"00",X"11",X"11",X"00",
|
||||
X"16",X"3C",X"78",X"3C",X"CF",X"23",X"44",X"44",X"C2",X"86",X"0C",X"3B",X"3B",X"77",X"77",X"77",
|
||||
X"00",X"00",X"00",X"0C",X"0E",X"0E",X"0E",X"08",X"00",X"00",X"00",X"33",X"FF",X"FF",X"EE",X"01",
|
||||
X"00",X"00",X"00",X"88",X"88",X"8B",X"16",X"3C",X"77",X"FF",X"EE",X"02",X"03",X"0F",X"0F",X"87",
|
||||
X"77",X"FF",X"EE",X"00",X"00",X"00",X"00",X"00",X"03",X"23",X"DD",X"11",X"66",X"00",X"00",X"00",
|
||||
X"F0",X"E1",X"4B",X"0E",X"1F",X"77",X"77",X"77",X"86",X"0C",X"00",X"00",X"CC",X"CC",X"CC",X"00",
|
||||
X"00",X"00",X"CC",X"CC",X"CC",X"08",X"0E",X"0F",X"00",X"33",X"33",X"33",X"00",X"03",X"EF",X"13",
|
||||
X"00",X"EE",X"EE",X"EE",X"08",X"0F",X"0F",X"F0",X"00",X"00",X"11",X"11",X"11",X"00",X"0F",X"87",
|
||||
X"0F",X"0E",X"08",X"CC",X"CC",X"CC",X"00",X"00",X"13",X"EF",X"03",X"00",X"33",X"33",X"33",X"00",
|
||||
X"F0",X"0F",X"0F",X"08",X"EE",X"EE",X"EE",X"00",X"87",X"0F",X"00",X"11",X"11",X"11",X"00",X"00");
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
data <= rom_data(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
end architecture;
|
||||
@@ -1,38 +0,0 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all,ieee.numeric_std.all;
|
||||
|
||||
entity nrx_col_rom is
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr : in std_logic_vector(7 downto 0);
|
||||
data : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture prom of nrx_col_rom is
|
||||
type rom is array(0 to 255) of std_logic_vector(7 downto 0);
|
||||
signal rom_data: rom := (
|
||||
X"00",X"00",X"00",X"00",X"00",X"09",X"0E",X"01",X"00",X"02",X"05",X"01",X"00",X"0C",X"08",X"00",
|
||||
X"00",X"03",X"08",X"02",X"00",X"03",X"08",X"0E",X"00",X"02",X"08",X"00",X"08",X"02",X"02",X"02",
|
||||
X"08",X"0F",X"0F",X"0F",X"08",X"0B",X"09",X"0F",X"08",X"0B",X"0F",X"02",X"00",X"02",X"03",X"07",
|
||||
X"00",X"07",X"03",X"0A",X"00",X"0A",X"08",X"06",X"00",X"06",X"08",X"00",X"00",X"04",X"08",X"06",
|
||||
X"00",X"0C",X"08",X"06",X"00",X"07",X"03",X"0A",X"00",X"0E",X"02",X"07",X"00",X"05",X"03",X"07",
|
||||
X"00",X"03",X"0A",X"07",X"00",X"0B",X"08",X"06",X"00",X"03",X"08",X"02",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"0F",X"08",X"00",X"00",X"02",X"00",X"0D",X"03",X"04",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0F",X"0F",X"0F",X"00",X"00",X"00",X"00",
|
||||
X"00",X"03",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"00",X"03",X"00",X"0E",X"02",X"0A",
|
||||
X"00",X"09",X"00",X"00",X"00",X"00",X"09",X"09",X"00",X"00",X"09",X"00",X"00",X"02",X"00",X"00",
|
||||
X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"05",X"00",X"02",X"02",X"02",
|
||||
X"05",X"00",X"00",X"00",X"05",X"00",X"00",X"02",X"05",X"00",X"00",X"03",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
data <= rom_data(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
end architecture;
|
||||
@@ -1,38 +0,0 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all,ieee.numeric_std.all;
|
||||
|
||||
entity nrx_dot_rom is
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr : in std_logic_vector(7 downto 0);
|
||||
data : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture prom of nrx_dot_rom is
|
||||
type rom is array(0 to 255) of std_logic_vector(7 downto 0);
|
||||
signal rom_data: rom := (
|
||||
X"02",X"02",X"03",X"03",X"02",X"02",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"01",X"01",X"03",X"03",X"01",X"01",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"00",X"00",X"03",X"03",X"00",X"00",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",
|
||||
X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",
|
||||
X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"02",X"02",X"02",X"02",X"02",X"01",X"01",X"02",X"02",X"01",X"01",X"02",X"02",X"02",X"02",X"02",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
data <= rom_data(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
end architecture;
|
||||
@@ -1,38 +0,0 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all,ieee.numeric_std.all;
|
||||
|
||||
entity nrx_nam_rom is
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr : in std_logic_vector(7 downto 0);
|
||||
data : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture prom of nrx_nam_rom is
|
||||
type rom is array(0 to 255) of std_logic_vector(7 downto 0);
|
||||
signal rom_data: rom := (
|
||||
X"08",X"08",X"08",X"08",X"08",X"0F",X"0F",X"08",X"08",X"00",X"00",X"00",X"08",X"08",X"08",X"08",
|
||||
X"0F",X"0F",X"0F",X"08",X"00",X"00",X"08",X"08",X"08",X"08",X"0F",X"0F",X"08",X"08",X"00",X"00",
|
||||
X"08",X"08",X"08",X"00",X"08",X"0F",X"0F",X"0F",X"08",X"08",X"08",X"00",X"08",X"08",X"08",X"00",
|
||||
X"00",X"00",X"00",X"08",X"00",X"00",X"08",X"08",X"08",X"08",X"00",X"00",X"00",X"08",X"00",X"00",
|
||||
X"08",X"08",X"0F",X"08",X"08",X"08",X"0F",X"08",X"08",X"00",X"00",X"00",X"08",X"0F",X"08",X"08",
|
||||
X"0F",X"08",X"08",X"00",X"00",X"00",X"08",X"0F",X"08",X"08",X"08",X"0F",X"08",X"00",X"00",X"00",
|
||||
X"08",X"08",X"08",X"00",X"08",X"08",X"0F",X"0F",X"00",X"00",X"08",X"08",X"08",X"0F",X"0F",X"0F",
|
||||
X"00",X"08",X"08",X"00",X"0F",X"0F",X"08",X"08",X"08",X"08",X"0F",X"08",X"00",X"00",X"00",X"08",
|
||||
X"0F",X"00",X"0F",X"00",X"0F",X"00",X"0F",X"00",X"0F",X"00",X"0F",X"00",X"0F",X"00",X"0F",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"01",X"02",X"03",X"04",X"05",X"06",X"07",X"08",X"09",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",X"0F",
|
||||
X"0E",X"0D",X"0C",X"0B",X"0A",X"09",X"08",X"07",X"06",X"05",X"04",X"03",X"02",X"01",X"00",X"00",
|
||||
X"01",X"01",X"02",X"02",X"03",X"03",X"04",X"04",X"05",X"05",X"06",X"06",X"07",X"07",X"08",X"08",
|
||||
X"09",X"09",X"0A",X"0A",X"0B",X"0B",X"0C",X"0C",X"0D",X"0D",X"0E",X"0E",X"0F",X"0F",X"00",X"00",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
data <= rom_data(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
end architecture;
|
||||
@@ -1,278 +0,0 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all,ieee.numeric_std.all;
|
||||
|
||||
entity nrx_nchr_rom is
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr : in std_logic_vector(11 downto 0);
|
||||
data : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture prom of nrx_nchr_rom is
|
||||
type rom is array(0 to 4095) of std_logic_vector(7 downto 0);
|
||||
signal rom_data: rom := (
|
||||
X"CC",X"66",X"33",X"33",X"33",X"22",X"CC",X"00",X"11",X"22",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"FF",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"33",X"00",
|
||||
X"EE",X"33",X"77",X"EE",X"CC",X"00",X"FF",X"00",X"33",X"66",X"00",X"11",X"33",X"77",X"77",X"00",
|
||||
X"FF",X"66",X"CC",X"EE",X"33",X"33",X"EE",X"00",X"33",X"00",X"00",X"11",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"EE",X"66",X"66",X"FF",X"66",X"66",X"00",X"00",X"11",X"33",X"66",X"77",X"00",X"00",X"00",
|
||||
X"EE",X"00",X"EE",X"33",X"33",X"33",X"EE",X"00",X"77",X"66",X"77",X"00",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"00",X"00",X"EE",X"33",X"33",X"EE",X"00",X"11",X"33",X"66",X"77",X"66",X"66",X"33",X"00",
|
||||
X"FF",X"33",X"66",X"CC",X"88",X"88",X"88",X"00",X"77",X"66",X"00",X"00",X"11",X"11",X"11",X"00",
|
||||
X"CC",X"22",X"22",X"CC",X"FF",X"33",X"EE",X"00",X"33",X"66",X"77",X"33",X"44",X"44",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"FF",X"33",X"66",X"CC",X"00",X"33",X"66",X"66",X"33",X"00",X"00",X"33",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"FF",X"33",X"33",X"00",X"11",X"33",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"EE",X"33",X"33",X"EE",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"77",X"00",
|
||||
X"EE",X"33",X"00",X"00",X"00",X"33",X"EE",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"33",X"66",X"CC",X"00",X"77",X"66",X"66",X"66",X"66",X"66",X"77",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"00",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"66",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"22",X"99",X"11",X"11",X"99",X"22",X"CC",X"33",X"44",X"99",X"AA",X"AA",X"99",X"44",X"33",
|
||||
X"0F",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",
|
||||
X"07",X"07",X"00",X"0F",X"0F",X"0C",X"0F",X"0F",X"08",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",
|
||||
X"01",X"09",X"09",X"09",X"09",X"09",X"09",X"09",X"0F",X"0F",X"01",X"0F",X"0F",X"01",X"0F",X"0F",
|
||||
X"0F",X"0F",X"09",X"09",X"09",X"09",X"09",X"09",X"0F",X"0F",X"09",X"09",X"09",X"09",X"09",X"09",
|
||||
X"0F",X"0F",X"08",X"08",X"08",X"08",X"0F",X"0F",X"00",X"09",X"09",X"09",X"09",X"09",X"09",X"08",
|
||||
X"03",X"07",X"06",X"06",X"06",X"06",X"07",X"03",X"0E",X"0E",X"00",X"00",X"00",X"00",X"0E",X"0E",
|
||||
X"00",X"08",X"08",X"08",X"08",X"08",X"08",X"00",X"0F",X"0F",X"01",X"01",X"01",X"01",X"0F",X"0F",
|
||||
X"EE",X"11",X"DD",X"55",X"FF",X"00",X"EE",X"00",X"33",X"44",X"55",X"55",X"55",X"44",X"33",X"00",
|
||||
X"CC",X"CC",X"88",X"88",X"00",X"00",X"00",X"00",X"11",X"11",X"11",X"11",X"11",X"00",X"33",X"33",
|
||||
X"66",X"66",X"22",X"44",X"00",X"00",X"00",X"00",X"33",X"33",X"11",X"22",X"00",X"00",X"00",X"00",
|
||||
X"66",X"66",X"FF",X"66",X"FF",X"66",X"66",X"00",X"33",X"33",X"77",X"33",X"77",X"33",X"33",X"00",
|
||||
X"88",X"EE",X"88",X"EE",X"BB",X"EE",X"88",X"00",X"00",X"33",X"66",X"33",X"00",X"33",X"00",X"00",
|
||||
X"11",X"22",X"44",X"88",X"33",X"55",X"77",X"00",X"77",X"55",X"66",X"00",X"11",X"22",X"44",X"00",
|
||||
X"00",X"88",X"88",X"33",X"AA",X"44",X"BB",X"00",X"33",X"44",X"55",X"33",X"66",X"44",X"33",X"00",
|
||||
X"88",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"11",X"11",X"00",X"11",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"88",X"00",X"00",X"00",X"88",X"CC",X"00",X"00",X"11",X"33",X"33",X"33",X"11",X"00",X"00",
|
||||
X"88",X"CC",X"66",X"66",X"66",X"CC",X"88",X"00",X"11",X"00",X"00",X"00",X"00",X"00",X"11",X"00",
|
||||
X"88",X"AA",X"CC",X"88",X"CC",X"AA",X"88",X"00",X"00",X"22",X"11",X"00",X"11",X"22",X"00",X"00",
|
||||
X"00",X"88",X"88",X"EE",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"33",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"11",X"22",X"00",
|
||||
X"00",X"00",X"00",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"33",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"11",X"11",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"33",X"22",X"CC",X"00",X"11",X"22",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"FF",X"00",X"00",X"11",X"00",X"00",X"00",X"00",X"33",X"00",
|
||||
X"EE",X"33",X"77",X"EE",X"CC",X"00",X"FF",X"00",X"33",X"66",X"00",X"11",X"33",X"77",X"77",X"00",
|
||||
X"FF",X"66",X"CC",X"EE",X"33",X"33",X"EE",X"00",X"33",X"00",X"00",X"11",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"EE",X"66",X"66",X"FF",X"66",X"66",X"00",X"00",X"11",X"33",X"66",X"77",X"00",X"00",X"00",
|
||||
X"EE",X"00",X"EE",X"33",X"33",X"33",X"EE",X"00",X"77",X"66",X"77",X"00",X"00",X"66",X"33",X"00",
|
||||
X"EE",X"00",X"00",X"EE",X"33",X"33",X"EE",X"00",X"11",X"33",X"66",X"77",X"66",X"66",X"33",X"00",
|
||||
X"FF",X"33",X"66",X"CC",X"88",X"88",X"88",X"00",X"77",X"66",X"00",X"00",X"11",X"11",X"11",X"00",
|
||||
X"CC",X"22",X"22",X"CC",X"FF",X"33",X"EE",X"00",X"33",X"66",X"77",X"33",X"44",X"44",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"FF",X"33",X"66",X"CC",X"00",X"33",X"66",X"66",X"33",X"00",X"00",X"33",X"00",
|
||||
X"00",X"88",X"88",X"00",X"88",X"88",X"00",X"00",X"00",X"11",X"11",X"00",X"11",X"11",X"00",X"00",
|
||||
X"00",X"88",X"88",X"00",X"88",X"88",X"00",X"00",X"00",X"11",X"11",X"00",X"11",X"00",X"11",X"00",
|
||||
X"66",X"CC",X"88",X"00",X"88",X"CC",X"66",X"00",X"00",X"00",X"11",X"33",X"11",X"00",X"00",X"00",
|
||||
X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00",X"00",X"00",X"77",X"77",X"00",X"77",X"77",X"00",X"00",
|
||||
X"00",X"88",X"CC",X"66",X"CC",X"88",X"00",X"00",X"33",X"11",X"00",X"00",X"00",X"11",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"66",X"CC",X"00",X"CC",X"CC",X"33",X"66",X"66",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"FF",X"33",X"33",X"00",X"11",X"33",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"EE",X"33",X"33",X"EE",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"77",X"00",
|
||||
X"EE",X"33",X"00",X"00",X"00",X"33",X"EE",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"33",X"66",X"CC",X"00",X"77",X"66",X"66",X"66",X"66",X"66",X"77",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"00",X"00",X"77",X"66",X"66",X"77",X"66",X"66",X"66",X"00",
|
||||
X"FF",X"00",X"00",X"77",X"33",X"33",X"FF",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"33",X"33",X"33",X"FF",X"33",X"33",X"33",X"00",X"66",X"66",X"66",X"77",X"66",X"66",X"66",X"00",
|
||||
X"FF",X"CC",X"CC",X"CC",X"CC",X"CC",X"FF",X"00",X"33",X"00",X"00",X"00",X"00",X"00",X"33",X"00",
|
||||
X"33",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"66",X"33",X"00",
|
||||
X"33",X"66",X"CC",X"88",X"CC",X"EE",X"77",X"00",X"66",X"66",X"66",X"77",X"77",X"66",X"66",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"33",X"77",X"FF",X"FF",X"BB",X"33",X"33",X"00",X"66",X"77",X"77",X"77",X"66",X"66",X"66",X"00",
|
||||
X"33",X"33",X"BB",X"FF",X"FF",X"77",X"33",X"00",X"66",X"77",X"77",X"77",X"66",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"33",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"EE",X"00",X"00",X"00",X"77",X"66",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"FF",X"66",X"DD",X"00",X"33",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"77",X"CC",X"EE",X"77",X"00",X"77",X"66",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"CC",X"66",X"00",X"EE",X"33",X"33",X"EE",X"00",X"33",X"66",X"66",X"33",X"00",X"66",X"33",X"00",
|
||||
X"FF",X"CC",X"CC",X"CC",X"CC",X"CC",X"CC",X"00",X"33",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"33",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"66",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"33",X"33",X"33",X"77",X"EE",X"CC",X"88",X"00",X"66",X"66",X"66",X"77",X"33",X"11",X"00",X"00",
|
||||
X"33",X"33",X"BB",X"FF",X"FF",X"77",X"33",X"00",X"66",X"66",X"66",X"77",X"77",X"77",X"66",X"00",
|
||||
X"33",X"77",X"EE",X"CC",X"EE",X"77",X"33",X"00",X"66",X"77",X"33",X"11",X"33",X"77",X"66",X"00",
|
||||
X"33",X"33",X"33",X"EE",X"CC",X"CC",X"CC",X"00",X"33",X"33",X"33",X"11",X"00",X"00",X"00",X"00",
|
||||
X"FF",X"77",X"EE",X"CC",X"88",X"00",X"FF",X"00",X"77",X"00",X"00",X"11",X"33",X"77",X"77",X"00",
|
||||
X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"88",X"88",X"88",X"88",X"88",X"88",X"88",
|
||||
X"0F",X"0F",X"3F",X"BF",X"DB",X"FF",X"F6",X"FF",X"0F",X"0F",X"0F",X"0F",X"1F",X"1F",X"0F",X"3F",
|
||||
X"0F",X"EF",X"7F",X"96",X"F3",X"FF",X"F9",X"FF",X"0F",X"4F",X"FF",X"F3",X"FF",X"F7",X"FF",X"FF",
|
||||
X"0F",X"0F",X"0F",X"0F",X"87",X"8F",X"0F",X"4F",X"0F",X"0F",X"CF",X"87",X"FC",X"FF",X"BF",X"EF",
|
||||
X"FA",X"FB",X"FD",X"FF",X"B6",X"DB",X"EF",X"F6",X"7F",X"7E",X"3D",X"5F",X"7D",X"7D",X"3F",X"7E",
|
||||
X"F9",X"F7",X"FE",X"7F",X"FF",X"F9",X"EF",X"F7",X"F7",X"F7",X"9F",X"EF",X"FE",X"F5",X"7F",X"FF",
|
||||
X"EB",X"EB",X"CF",X"2F",X"EB",X"E7",X"EF",X"6F",X"FD",X"F3",X"FC",X"FF",X"F5",X"FB",X"EF",X"FB",
|
||||
X"7E",X"FF",X"FB",X"FD",X"7B",X"1F",X"0F",X"0F",X"3F",X"2F",X"1F",X"1F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F7",X"FF",X"FF",X"FF",X"FF",X"F9",X"EF",X"0F",X"CC",X"FF",X"FD",X"FD",X"17",X"E9",X"6F",X"0F",
|
||||
X"0F",X"CF",X"8F",X"8F",X"0F",X"0F",X"0F",X"0F",X"F7",X"FF",X"FA",X"F7",X"7F",X"0F",X"0F",X"0F",
|
||||
X"FF",X"5F",X"0F",X"8F",X"C3",X"F3",X"9F",X"3F",X"FF",X"FF",X"FF",X"CF",X"CF",X"CF",X"CF",X"FF",
|
||||
X"FF",X"EF",X"CF",X"CF",X"8F",X"FF",X"8F",X"8F",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FF",X"3F",X"1F",X"1F",X"1F",X"1F",X"3F",X"FF",X"3F",X"2F",X"2F",X"2F",X"79",X"F8",X"78",
|
||||
X"7F",X"FF",X"FF",X"DF",X"1F",X"3F",X"3C",X"FC",X"FF",X"FF",X"FF",X"FF",X"EF",X"CF",X"CF",X"EF",
|
||||
X"0F",X"0F",X"DF",X"6F",X"2F",X"0F",X"3F",X"3F",X"FF",X"BF",X"1F",X"0F",X"1F",X"9F",X"EF",X"C7",
|
||||
X"5F",X"9F",X"1F",X"3F",X"FF",X"FF",X"FF",X"FF",X"78",X"F8",X"1E",X"1F",X"1F",X"3F",X"FF",X"FF",
|
||||
X"3C",X"3F",X"1F",X"1F",X"2F",X"6F",X"FF",X"FF",X"FF",X"EF",X"CF",X"CF",X"CF",X"EF",X"FF",X"FF",
|
||||
X"3F",X"7F",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"E7",X"97",X"0F",X"0F",X"0F",X"1F",X"3F",X"FF",
|
||||
X"FF",X"7F",X"7F",X"9F",X"9F",X"1F",X"3F",X"FF",X"FF",X"CF",X"CF",X"3C",X"3C",X"1F",X"EF",X"FF",
|
||||
X"EE",X"7F",X"1D",X"9F",X"97",X"9F",X"3F",X"7F",X"EC",X"CF",X"8F",X"3E",X"38",X"3E",X"8F",X"CF",
|
||||
X"DD",X"7F",X"3F",X"9F",X"95",X"9F",X"3F",X"7F",X"FF",X"CF",X"8F",X"3E",X"34",X"3E",X"8F",X"CF",
|
||||
X"1D",X"1F",X"C7",X"C3",X"C7",X"1F",X"3F",X"FF",X"CD",X"CF",X"17",X"9E",X"9B",X"CF",X"EF",X"FF",
|
||||
X"EF",X"3F",X"1F",X"C7",X"C3",X"C7",X"1F",X"3F",X"33",X"EF",X"CF",X"9F",X"9E",X"9F",X"CF",X"EB",
|
||||
X"8B",X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"6F",X"6E",X"CF",X"8F",X"3E",X"3C",X"3E",X"8F",X"4F",
|
||||
X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"7F",X"FF",X"E6",X"8F",X"3E",X"3C",X"3E",X"8F",X"CF",X"FF",
|
||||
X"3F",X"1F",X"C7",X"C3",X"C7",X"1F",X"3E",X"FF",X"EF",X"CF",X"9F",X"9E",X"9F",X"CF",X"AF",X"FF",
|
||||
X"FF",X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"7F",X"FF",X"CF",X"8F",X"3E",X"3C",X"3E",X"8F",X"CF",
|
||||
X"7F",X"3F",X"9F",X"97",X"9F",X"3F",X"5D",X"FF",X"CF",X"8F",X"3E",X"3C",X"3E",X"8F",X"0B",X"FF",
|
||||
X"FF",X"FE",X"FE",X"FF",X"EF",X"FE",X"FC",X"ED",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FF",X"F7",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FA",X"F3",X"FF",X"FF",X"F7",X"F7",X"F7",
|
||||
X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"77",X"F7",X"FF",X"DF",X"CF",X"F8",X"BC",X"E8",X"BC",X"3C",
|
||||
X"E9",X"DF",X"F8",X"F8",X"F8",X"78",X"78",X"78",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FE",X"FE",X"FE",X"EF",X"D6",X"FF",X"FF",X"F3",X"B3",X"F1",X"B1",X"10",X"91",X"91",X"11",
|
||||
X"77",X"11",X"7F",X"77",X"31",X"75",X"FA",X"FF",X"78",X"E0",X"E3",X"E8",X"E0",X"E0",X"C0",X"EC",
|
||||
X"68",X"D2",X"F2",X"F6",X"FE",X"FE",X"FE",X"FF",X"FE",X"EF",X"FF",X"FC",X"FF",X"FF",X"FF",X"FF",
|
||||
X"FF",X"FF",X"F7",X"FB",X"FF",X"FE",X"FF",X"FF",X"31",X"90",X"B1",X"FC",X"77",X"77",X"77",X"FF",
|
||||
X"FF",X"FF",X"FF",X"FF",X"FF",X"F3",X"FF",X"FF",X"EC",X"EC",X"FF",X"FF",X"F2",X"F0",X"FF",X"79",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",
|
||||
X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"30",X"70",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"10",X"10",X"00",X"00",X"00",X"00",X"10",X"10",
|
||||
X"F0",X"F0",X"F0",X"F0",X"30",X"00",X"00",X"00",X"F0",X"F0",X"F0",X"F0",X"C0",X"00",X"00",X"00",
|
||||
X"F0",X"F0",X"F0",X"78",X"1E",X"78",X"F0",X"F0",X"F0",X"78",X"1E",X"0F",X"0F",X"0F",X"1E",X"78",
|
||||
X"F0",X"F0",X"E1",X"E1",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"78",X"78",X"3C",X"3C",X"F0",X"F0",X"F0",X"F0",
|
||||
X"F0",X"FC",X"F6",X"F0",X"FC",X"F6",X"F6",X"FC",X"F0",X"F3",X"F6",X"F6",X"F3",X"F0",X"F6",X"F3",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F2",X"FE",X"F0",X"F0",X"F6",X"F6",X"F6",X"F6",X"F6",X"F7",X"F0",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"FF",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"F3",X"F7",X"EF",X"CF",X"CF",X"CF",X"CF",X"CF",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",
|
||||
X"FF",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"FF",X"FF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"CF",X"CF",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F0",X"60",X"40",X"F0",X"70",X"70",X"C0",X"B3",X"F0",X"E0",X"F0",X"C0",X"83",X"C1",X"E0",X"D0",
|
||||
X"F0",X"F0",X"30",X"DC",X"9C",X"0E",X"0F",X"0F",X"F0",X"F0",X"C0",X"B3",X"33",X"67",X"67",X"67",
|
||||
X"F0",X"F0",X"F0",X"F0",X"D0",X"70",X"38",X"38",X"F0",X"F0",X"90",X"F0",X"B0",X"C0",X"41",X"60",
|
||||
X"67",X"67",X"67",X"67",X"47",X"47",X"00",X"0D",X"F0",X"F0",X"F0",X"C0",X"83",X"83",X"81",X"C1",
|
||||
X"0F",X"0C",X"1F",X"2F",X"2F",X"4F",X"4F",X"0F",X"09",X"0D",X"0D",X"0D",X"0D",X"09",X"0D",X"0E",
|
||||
X"70",X"F0",X"70",X"38",X"38",X"1C",X"18",X"1C",X"60",X"70",X"88",X"0F",X"0F",X"0B",X"0D",X"0D",
|
||||
X"0D",X"0D",X"0D",X"0D",X"07",X"83",X"C0",X"F0",X"83",X"83",X"C0",X"E0",X"F0",X"90",X"90",X"F0",
|
||||
X"0F",X"0F",X"0F",X"0E",X"0F",X"0E",X"10",X"F0",X"0E",X"08",X"0B",X"0B",X"0F",X"0E",X"10",X"F0",
|
||||
X"18",X"70",X"70",X"F0",X"F0",X"50",X"70",X"F0",X"0D",X"0F",X"00",X"70",X"60",X"C1",X"E0",X"F0",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"E0",X"D0",X"D0",X"D0",X"D0",X"D0",X"60",X"F0",X"E0",X"C0",X"E0",X"E0",X"E0",X"E0",X"C0",
|
||||
X"F0",X"E0",X"50",X"50",X"D0",X"D0",X"D0",X"60",X"F0",X"C0",X"B0",X"B0",X"E0",X"D0",X"B0",X"80",
|
||||
X"F0",X"E0",X"50",X"50",X"D0",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"F0",X"E0",X"F0",X"B0",X"C0",
|
||||
X"F0",X"E0",X"D0",X"D0",X"D0",X"50",X"D0",X"E0",X"F0",X"A0",X"A0",X"A0",X"A0",X"80",X"E0",X"E0",
|
||||
X"F0",X"60",X"D0",X"D0",X"50",X"50",X"50",X"E0",X"F0",X"80",X"B0",X"80",X"F0",X"F0",X"B0",X"C0",
|
||||
X"F0",X"E0",X"50",X"D0",X"D0",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"B0",X"80",X"B0",X"B0",X"C0",
|
||||
X"F0",X"60",X"50",X"D0",X"D0",X"D0",X"D0",X"E0",X"F0",X"80",X"F0",X"E0",X"E0",X"D0",X"D0",X"D0",
|
||||
X"F0",X"E0",X"50",X"50",X"D0",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"B0",X"C0",X"B0",X"B0",X"C0",
|
||||
X"F0",X"E0",X"50",X"50",X"50",X"50",X"50",X"E0",X"F0",X"C0",X"B0",X"B0",X"C0",X"F0",X"B0",X"C0",
|
||||
X"00",X"10",X"B0",X"F0",X"B0",X"10",X"10",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"30",X"D0",X"D0",X"D0",X"D0",X"D0",X"30",X"F0",X"70",X"A0",X"A0",X"A0",X"A0",X"A0",X"70",
|
||||
X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"90",X"60",X"60",X"60",X"60",X"60",X"90",
|
||||
X"F0",X"90",X"60",X"E0",X"D0",X"B0",X"00",X"F0",X"F0",X"F0",X"F0",X"50",X"B0",X"50",X"F0",X"F0",
|
||||
X"F0",X"00",X"D0",X"90",X"E0",X"60",X"90",X"F0",X"F0",X"F0",X"F0",X"50",X"B0",X"50",X"F0",X"F0",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"10",X"B0",X"F0",X"B0",X"10",X"10",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"D0",X"F0",X"D0",X"80",X"80",X"C0",
|
||||
X"B0",X"F0",X"90",X"00",X"00",X"00",X"00",X"00",X"10",X"10",X"10",X"00",X"00",X"00",X"00",X"00",
|
||||
X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00",X"D0",X"F0",X"90",X"00",X"00",X"00",X"00",X"00",
|
||||
X"F0",X"F0",X"E1",X"69",X"0F",X"0F",X"0F",X"0F",X"F0",X"F0",X"96",X"87",X"C3",X"C3",X"E1",X"E1",
|
||||
X"F0",X"C3",X"87",X"0F",X"0F",X"0F",X"0F",X"0F",X"B4",X"3C",X"3C",X"1E",X"0F",X"0F",X"0F",X"0F",
|
||||
X"F0",X"F0",X"96",X"1E",X"1E",X"3C",X"3C",X"3C",X"78",X"78",X"78",X"2D",X"0F",X"0F",X"0F",X"0F",
|
||||
X"8F",X"5F",X"5F",X"9F",X"5F",X"5F",X"9F",X"0F",X"F3",X"E3",X"E3",X"3F",X"A7",X"E3",X"F3",X"E1",
|
||||
X"8F",X"8F",X"CF",X"AF",X"9F",X"8F",X"8F",X"0F",X"CF",X"2F",X"2F",X"EF",X"2F",X"2F",X"2F",X"0F",
|
||||
X"F8",X"7C",X"78",X"FC",X"7C",X"5E",X"DE",X"1E",X"9F",X"AF",X"AF",X"AF",X"AF",X"AF",X"9F",X"0F",
|
||||
X"0F",X"0F",X"0F",X"1E",X"78",X"F0",X"F0",X"F0",X"E1",X"C3",X"C3",X"87",X"87",X"1E",X"78",X"F0",
|
||||
X"0F",X"0F",X"0F",X"69",X"78",X"F0",X"F0",X"F0",X"0F",X"0F",X"0F",X"0F",X"0F",X"87",X"96",X"D2",
|
||||
X"0F",X"0F",X"F0",X"F0",X"F0",X"F0",X"F0",X"F0",X"0F",X"0F",X"1E",X"1E",X"1E",X"96",X"D2",X"D2",
|
||||
X"F0",X"00",X"FF",X"FF",X"FF",X"FF",X"CC",X"BB",X"F0",X"E0",X"D1",X"B3",X"B3",X"B3",X"91",X"FF",
|
||||
X"F7",X"FF",X"77",X"BB",X"BB",X"BB",X"33",X"CC",X"F0",X"70",X"00",X"77",X"77",X"FF",X"33",X"DD",
|
||||
X"F0",X"70",X"B8",X"DC",X"DC",X"DC",X"DC",X"30",X"F8",X"EC",X"DD",X"DD",X"FF",X"FF",X"FF",X"FF",
|
||||
X"77",X"77",X"55",X"BB",X"33",X"BB",X"CC",X"66",X"FF",X"FF",X"FF",X"FF",X"44",X"D9",X"D1",X"C0",
|
||||
X"33",X"BB",X"BB",X"22",X"AA",X"DD",X"FF",X"FF",X"CC",X"FF",X"FF",X"EE",X"DD",X"DD",X"BB",X"77",
|
||||
X"CC",X"EE",X"EE",X"EE",X"FF",X"10",X"F0",X"F0",X"FF",X"FF",X"FF",X"33",X"DD",X"DD",X"EE",X"EE",
|
||||
X"DD",X"DD",X"EE",X"FF",X"EE",X"EE",X"00",X"F0",X"B3",X"B3",X"B3",X"77",X"77",X"91",X"E0",X"F0",
|
||||
X"EE",X"99",X"77",X"FF",X"FF",X"FF",X"FF",X"00",X"FF",X"FF",X"77",X"99",X"EE",X"DD",X"DD",X"30",
|
||||
X"70",X"B8",X"B8",X"DC",X"DC",X"30",X"F0",X"F0",X"CC",X"FF",X"FF",X"FF",X"FF",X"BB",X"88",X"70",
|
||||
X"0F",X"69",X"69",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"87",X"87",X"87",X"87",X"87",X"87",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"C3",X"C3",X"C3",X"C3",X"C3",X"C3",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"E3",X"E3",X"E3",X"E3",X"E3",X"E3",X"00",
|
||||
X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"CF",X"CF",X"CF",X"CF",X"CF",X"CF",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"EF",X"EF",X"EF",X"EF",X"EF",X"EF",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"F3",X"F3",X"F3",X"F3",X"F3",X"F3",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",
|
||||
X"EE",X"00",X"CC",X"00",X"00",X"00",X"00",X"08",X"77",X"66",X"77",X"66",X"66",X"00",X"00",X"00",
|
||||
X"66",X"66",X"66",X"66",X"CC",X"00",X"00",X"00",X"66",X"66",X"66",X"66",X"33",X"00",X"00",X"02",
|
||||
X"EE",X"00",X"CC",X"00",X"EE",X"00",X"00",X"02",X"77",X"66",X"77",X"66",X"77",X"00",X"80",X"80",
|
||||
X"00",X"00",X"00",X"00",X"EE",X"00",X"00",X"08",X"66",X"66",X"66",X"66",X"77",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"CC",X"66",X"33",X"33",X"FF",X"33",X"33",X"00",X"11",X"33",X"66",X"66",X"66",X"33",X"11",X"00",
|
||||
X"FF",X"00",X"00",X"77",X"33",X"33",X"FF",X"00",X"11",X"33",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"33",X"33",X"33",X"77",X"EE",X"CC",X"88",X"00",X"33",X"66",X"66",X"66",X"66",X"66",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"33",X"33",X"33",X"EE",X"00",X"66",X"66",X"66",X"77",X"33",X"11",X"00",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"66",X"77",X"77",X"77",X"66",X"66",X"66",X"00",
|
||||
X"33",X"77",X"FF",X"FF",X"BB",X"33",X"33",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"EE",X"33",X"33",X"77",X"CC",X"EE",X"77",X"00",X"33",X"33",X"33",X"33",X"33",X"33",X"33",X"00",
|
||||
X"FF",X"00",X"00",X"EE",X"00",X"00",X"FF",X"00",X"77",X"66",X"66",X"66",X"77",X"66",X"66",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
|
||||
X"00",X"88",X"88",X"88",X"00",X"00",X"00",X"08",X"00",X"33",X"33",X"33",X"00",X"00",X"01",X"03",
|
||||
X"03",X"8B",X"CF",X"8B",X"07",X"07",X"0F",X"1E",X"08",X"3B",X"7F",X"3B",X"0C",X"0C",X"0F",X"0F",
|
||||
X"08",X"00",X"EE",X"EE",X"EE",X"EE",X"EE",X"00",X"03",X"00",X"EE",X"EE",X"FF",X"EE",X"EE",X"00",
|
||||
X"3C",X"3C",X"3C",X"3C",X"2F",X"6F",X"6F",X"66",X"87",X"86",X"86",X"86",X"9F",X"CE",X"CE",X"CC",
|
||||
X"0C",X"0C",X"3B",X"7F",X"77",X"66",X"08",X"0C",X"00",X"00",X"00",X"00",X"01",X"00",X"66",X"FF",
|
||||
X"11",X"33",X"11",X"00",X"0F",X"0F",X"0F",X"16",X"CD",X"8B",X"8B",X"07",X"0F",X"0F",X"4B",X"E1",
|
||||
X"0C",X"0E",X"06",X"88",X"CC",X"EE",X"CC",X"88",X"EE",X"FF",X"45",X"01",X"00",X"11",X"11",X"00",
|
||||
X"1E",X"3C",X"3E",X"7E",X"DD",X"DD",X"BB",X"33",X"E1",X"C3",X"86",X"8E",X"BF",X"9D",X"33",X"11",
|
||||
X"CC",X"CC",X"8B",X"8F",X"0F",X"0E",X"19",X"77",X"00",X"33",X"77",X"FF",X"77",X"11",X"03",X"77",
|
||||
X"00",X"07",X"8F",X"8F",X"07",X"1E",X"3C",X"F8",X"11",X"33",X"3B",X"0C",X"0F",X"87",X"C3",X"87",
|
||||
X"77",X"22",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"CC",X"33",X"77",X"66",X"00",X"00",X"00",
|
||||
X"F0",X"ED",X"8F",X"0F",X"2E",X"33",X"77",X"33",X"87",X"0F",X"0F",X"07",X"88",X"CC",X"88",X"00",
|
||||
X"00",X"00",X"EE",X"EE",X"EE",X"44",X"0F",X"0F",X"77",X"77",X"77",X"11",X"07",X"EF",X"FF",X"07",
|
||||
X"CC",X"CC",X"CD",X"01",X"0F",X"0F",X"F0",X"F0",X"00",X"00",X"08",X"0C",X"0C",X"0F",X"0F",X"87",
|
||||
X"0F",X"44",X"EE",X"EE",X"EE",X"00",X"00",X"00",X"FF",X"EF",X"07",X"11",X"77",X"77",X"77",X"00",
|
||||
X"F0",X"0F",X"0F",X"01",X"CD",X"CC",X"CC",X"00",X"0F",X"0F",X"0C",X"0C",X"08",X"00",X"00",X"00");
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
data <= rom_data(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
end architecture;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,24 +0,0 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all,ieee.numeric_std.all;
|
||||
|
||||
entity nrx_pal_rom is
|
||||
port (
|
||||
clk : in std_logic;
|
||||
addr : in std_logic_vector(4 downto 0);
|
||||
data : out std_logic_vector(7 downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
architecture prom of nrx_pal_rom is
|
||||
type rom is array(0 to 31) of std_logic_vector(7 downto 0);
|
||||
signal rom_data: rom := (
|
||||
X"00",X"00",X"06",X"3F",X"5A",X"F1",X"15",X"18",X"66",X"D1",X"2A",X"03",X"A4",X"91",X"BF",X"F6",
|
||||
X"00",X"07",X"F6",X"00",X"00",X"07",X"F6",X"00",X"00",X"07",X"F6",X"00",X"00",X"07",X"F6",X"F6");
|
||||
begin
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
data <= rom_data(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
end architecture;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
36
Arcade_MiST/Namco Rally-X Hardware/meta/Commando (SEGA).mra
Normal file
36
Arcade_MiST/Namco Rally-X Hardware/meta/Commando (SEGA).mra
Normal file
@@ -0,0 +1,36 @@
|
||||
<misterromdescription>
|
||||
<name>Commando (SEGA)</name>
|
||||
<mameversion>0220</mameversion>
|
||||
<setname>commsega</setname>
|
||||
<year>1980</year>
|
||||
<manufacturer>SEGA</manufacturer>
|
||||
<rbf>rallyx</rbf>
|
||||
<switches base="8">
|
||||
<dip bits="15" name="Cabinet" ids="Cocktail,Upright"/>
|
||||
<dip bits="14" name="Difficulty" ids="Easy,Hard"/>
|
||||
<dip bits="10,12" name="Coin A" ids="1C_1C,2C_1C,3C_1C,4C_1C,1C_2C,1C_3C,2C_3C,Free Play"/>
|
||||
<dip bits="8,9" name="Lives" ids="3,4,5,6"/>
|
||||
</switches>
|
||||
<rom index="1"><part>0b</part></rom>
|
||||
<rom index="0" zip="commsega.zip" md5="f28363ca8751084d3477c797d862bbae">
|
||||
<part name="csega1"/>
|
||||
<part name="csega2"/>
|
||||
<part name="csega3"/>
|
||||
<part name="csega4"/>
|
||||
<part name="csega5"/>
|
||||
<part name="csega5"/>
|
||||
|
||||
<part name="csega8"/>
|
||||
<part name="csega8"/>
|
||||
|
||||
<part name="csega7"/>
|
||||
<part name="csega6"/>
|
||||
|
||||
<part name="gg3.bpr"/>
|
||||
|
||||
<part repeat="0x100">FF</part>
|
||||
|
||||
<part name="gg2.bpr"/>
|
||||
<part name="gg1.bpr"/>
|
||||
</rom>
|
||||
</misterromdescription>
|
||||
32
Arcade_MiST/Namco Rally-X Hardware/meta/Jungler.mra
Normal file
32
Arcade_MiST/Namco Rally-X Hardware/meta/Jungler.mra
Normal file
@@ -0,0 +1,32 @@
|
||||
<misterromdescription>
|
||||
<name>Jungler</name>
|
||||
<mameversion>0220</mameversion>
|
||||
<setname>jungler</setname>
|
||||
<year>1980</year>
|
||||
<manufacturer>Konami</manufacturer>
|
||||
<rbf>rallyx</rbf>
|
||||
<rom index="1"><part>1</part></rom>
|
||||
<rom index="0" zip="jungler.zip" md5="d0f3409b8873b05a36668eb9e5ca69a0">
|
||||
<part name="jungr1"/>
|
||||
<part name="jungr2"/>
|
||||
<part name="jungr3"/>
|
||||
<part name="jungr4"/>
|
||||
|
||||
<part name="1b"/>
|
||||
<part name="1b"/>
|
||||
<part name="1b"/>
|
||||
<part name="1b"/>
|
||||
|
||||
<part name="5k"/>
|
||||
<part name="5m"/>
|
||||
<part name="5k"/>
|
||||
<part name="5m"/>
|
||||
|
||||
<part name="82s129.10g"/>
|
||||
|
||||
<part repeat="0x100">FF</part>
|
||||
|
||||
<part name="tbp24s10.9d"/>
|
||||
<part name="18s030.8b"/>
|
||||
</rom>
|
||||
</misterromdescription>
|
||||
36
Arcade_MiST/Namco Rally-X Hardware/meta/Loco-motion.mra
Normal file
36
Arcade_MiST/Namco Rally-X Hardware/meta/Loco-motion.mra
Normal file
@@ -0,0 +1,36 @@
|
||||
<misterromdescription>
|
||||
<name>Loco-motion</name>
|
||||
<mameversion>0220</mameversion>
|
||||
<setname>locomotn</setname>
|
||||
<year>1980</year>
|
||||
<manufacturer>Konami</manufacturer>
|
||||
<rbf>rallyx</rbf>
|
||||
<switches base="8">
|
||||
<dip bits="4,5" name="Lives" ids="3,4,5,255"/>
|
||||
<dip bits="3" name="Cabinet" ids="Cocktail,Upright"/>
|
||||
<dip bits="1" name="Intermissions" ids="On,Off"/>
|
||||
<dip bits="0" name="Demo Sounds" ids="Off,On"/>
|
||||
</switches>
|
||||
<rom index="1"><part>3</part></rom>
|
||||
<rom index="0" zip="locomotn.zip" md5="ffa8d1e4e0ccb462c23a83ef1c2bb041">
|
||||
<part name="1a.cpu"/>
|
||||
<part name="2a.cpu"/>
|
||||
<part name="3.cpu"/>
|
||||
<part name="4.cpu"/>
|
||||
<part name="5.cpu"/>
|
||||
<part name="5.cpu"/>
|
||||
|
||||
<part name="1b_s1.bin"/>
|
||||
<part name="1b_s1.bin"/>
|
||||
|
||||
<part name="5l_c1.bin"/>
|
||||
<part name="c2.cpu"/>
|
||||
|
||||
<part name="10g.bpr"/>
|
||||
|
||||
<part repeat="0x100">FF</part>
|
||||
|
||||
<part name="9d.bpr"/>
|
||||
<part name="8b.bpr"/>
|
||||
</rom>
|
||||
</misterromdescription>
|
||||
1062
Arcade_MiST/Namco Rally-X Hardware/meta/New Rally-X.mra
Normal file
1062
Arcade_MiST/Namco Rally-X Hardware/meta/New Rally-X.mra
Normal file
File diff suppressed because it is too large
Load Diff
1056
Arcade_MiST/Namco Rally-X Hardware/meta/Rally-X.mra
Normal file
1056
Arcade_MiST/Namco Rally-X Hardware/meta/Rally-X.mra
Normal file
File diff suppressed because it is too large
Load Diff
35
Arcade_MiST/Namco Rally-X Hardware/meta/Tactician.mra
Normal file
35
Arcade_MiST/Namco Rally-X Hardware/meta/Tactician.mra
Normal file
@@ -0,0 +1,35 @@
|
||||
<misterromdescription>
|
||||
<name>Tactician</name>
|
||||
<mameversion>0220</mameversion>
|
||||
<setname>tactcian</setname>
|
||||
<year>1980</year>
|
||||
<manufacturer>Sega</manufacturer>
|
||||
<rbf>rallyx</rbf>
|
||||
<switches default="FF,FF" base="8">
|
||||
<dip bits="4,5" name="Lives" ids="255,5,4,3"/>
|
||||
<dip bits="1,2" name="Coinage" ids="4C_1C,1C_2C,2C_1C,1C_1C"/>
|
||||
<dip bits="0" name="Bonus Life" ids="20k/80k/100k,10k/80k/100k"/>
|
||||
</switches>
|
||||
<rom index="1"><part>7</part></rom>
|
||||
<rom index="0" zip="tactcian.zip" md5="7245488c961632efdae1e859eeb707fd">
|
||||
<part name="tacticia.001"/>
|
||||
<part name="tacticia.002"/>
|
||||
<part name="tacticia.003"/>
|
||||
<part name="tacticia.004"/>
|
||||
<part name="tacticia.005"/>
|
||||
<part name="tacticia.006"/>
|
||||
|
||||
<part name="tacticia.s2"/>
|
||||
<part name="tacticia.s1"/>
|
||||
|
||||
<part name="tacticia.c1"/>
|
||||
<part name="tacticia.c2"/>
|
||||
|
||||
<part name="tact6301.004"/>
|
||||
|
||||
<part repeat="0x100">FF</part>
|
||||
|
||||
<part name="tact6301.003"/>
|
||||
<part name="tact6331.002"/>
|
||||
</rom>
|
||||
</misterromdescription>
|
||||
81
Arcade_MiST/Namco Rally-X Hardware/rtl/dpram.vhd
Normal file
81
Arcade_MiST/Namco Rally-X Hardware/rtl/dpram.vhd
Normal file
@@ -0,0 +1,81 @@
|
||||
-- -----------------------------------------------------------------------
|
||||
--
|
||||
-- Syntiac's generic VHDL support files.
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
-- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com)
|
||||
-- http://www.syntiac.com/fpga64.html
|
||||
--
|
||||
-- Modified April 2016 by Dar (darfpga@aol.fr)
|
||||
-- http://darfpga.blogspot.fr
|
||||
-- Remove address register when writing
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
--
|
||||
-- dpram.vhd
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
--
|
||||
-- generic ram.
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
use IEEE.numeric_std.ALL;
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
entity dpram is
|
||||
generic (
|
||||
dWidth : integer := 8;
|
||||
aWidth : integer := 10
|
||||
);
|
||||
port (
|
||||
clk_a : in std_logic;
|
||||
we_a : in std_logic := '0';
|
||||
addr_a : in std_logic_vector((aWidth-1) downto 0);
|
||||
d_a : in std_logic_vector((dWidth-1) downto 0) := (others => '0');
|
||||
q_a : out std_logic_vector((dWidth-1) downto 0);
|
||||
|
||||
clk_b : in std_logic;
|
||||
we_b : in std_logic := '0';
|
||||
addr_b : in std_logic_vector((aWidth-1) downto 0);
|
||||
d_b : in std_logic_vector((dWidth-1) downto 0) := (others => '0');
|
||||
q_b : out std_logic_vector((dWidth-1) downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
architecture rtl of dpram is
|
||||
subtype addressRange is integer range 0 to ((2**aWidth)-1);
|
||||
type ramDef is array(addressRange) of std_logic_vector((dWidth-1) downto 0);
|
||||
signal ram: ramDef;
|
||||
signal addr_a_reg: std_logic_vector((aWidth-1) downto 0);
|
||||
signal addr_b_reg: std_logic_vector((aWidth-1) downto 0);
|
||||
begin
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
process(clk_a)
|
||||
begin
|
||||
if rising_edge(clk_a) then
|
||||
if we_a = '1' then
|
||||
ram(to_integer(unsigned(addr_a))) <= d_a;
|
||||
end if;
|
||||
q_a <= ram(to_integer(unsigned(addr_a)));
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(clk_b)
|
||||
begin
|
||||
if rising_edge(clk_b) then
|
||||
if we_b = '1' then
|
||||
ram(to_integer(unsigned(addr_b))) <= d_b;
|
||||
end if;
|
||||
q_b <= ram(to_integer(unsigned(addr_b)));
|
||||
end if;
|
||||
end process;
|
||||
|
||||
end architecture;
|
||||
|
||||
275
Arcade_MiST/Namco Rally-X Hardware/rtl/fpga_nrx.v
Normal file
275
Arcade_MiST/Namco Rally-X Hardware/rtl/fpga_nrx.v
Normal file
@@ -0,0 +1,275 @@
|
||||
/**************************************************************
|
||||
FPGA New Rally-X (Main part)
|
||||
***************************************************************/
|
||||
module fpga_nrx
|
||||
(
|
||||
input RESET, // RESET
|
||||
input CLK24M, // Clock 24.576MHz
|
||||
input CLK14M, // For Time Pilot sound board (Konami games)
|
||||
input mod_jungler,
|
||||
input mod_loco,
|
||||
input mod_tact,
|
||||
input mod_comm,
|
||||
|
||||
output hsync,
|
||||
output vsync,
|
||||
output hblank,
|
||||
output vblank,
|
||||
output [2:0] r,
|
||||
output [2:0] g,
|
||||
output [1:0] b,
|
||||
|
||||
output [14:0] cpu_rom_addr,
|
||||
input [7:0] cpu_rom_data,
|
||||
|
||||
output [7:0] SND, // Sound (unsigned PCM)
|
||||
|
||||
input [7:0] DSW1, // DipSW
|
||||
input [7:0] DSW2,
|
||||
input [7:0] CTR1, // Controler (Negative logic)
|
||||
input [7:0] CTR2,
|
||||
|
||||
output [1:0] LAMP,
|
||||
|
||||
input ROMCL, // Downloaded ROM image
|
||||
input [15:0] ROMAD,
|
||||
input [7:0] ROMDT,
|
||||
input ROMEN
|
||||
);
|
||||
|
||||
|
||||
//--------------------------------------------------
|
||||
// Clock Generators
|
||||
//--------------------------------------------------
|
||||
reg [2:0] _CCLK;
|
||||
always @( posedge CLK24M ) _CCLK <= _CCLK+1'd1;
|
||||
|
||||
wire CLK = CLK24M; // 24MHz
|
||||
wire CCLK_EN = _CCLK == 3'b011; // CPU CLOCK ENABLE : 3.0MHz
|
||||
|
||||
//--------------------------------------------------
|
||||
// CPU
|
||||
//--------------------------------------------------
|
||||
// memory access signals
|
||||
wire rd, wr, me, ie, rf, m1;
|
||||
wire [15:0] ad;
|
||||
wire [7:0] odt, viddata;
|
||||
|
||||
wire mx = rf & (~me);
|
||||
wire mr = mx & (~rd);
|
||||
wire mw = mx & (~wr);
|
||||
|
||||
// interrupt signal/vector generator & other latches
|
||||
reg inte = 1'b0;
|
||||
reg intl = 1'b0;
|
||||
reg [7:0] intv = 8'h0;
|
||||
|
||||
reg bang = 1'b0;
|
||||
|
||||
reg lp0r = 1'b0;
|
||||
reg lp1r = 1'b0;
|
||||
assign LAMP = { lp1r, lp0r };
|
||||
|
||||
wire vblk = (VP==224)&(HP<=8);
|
||||
|
||||
|
||||
wire bngw = ( lat_Wce & ( ad[3:0] == 4'h0 ) );
|
||||
wire iewr = ( lat_Wce & ( ad[3:0] == 4'h1 ) );
|
||||
//wire flip = ( lat_Wce & ( ad[3:0] == 4'h3 ) );
|
||||
wire lp0w = ( lat_Wce & ( ad[3:0] == 4'h4 ) );
|
||||
wire lp1w = ( lat_Wce & ( ad[3:0] == 4'h5 ) );
|
||||
wire iowr = ( (~wr) & (~ie) & m1 );
|
||||
|
||||
always @( posedge CLK ) begin
|
||||
if (CCLK_EN) begin
|
||||
if ( iowr ) intv <= odt;
|
||||
if ( vblk ) intl <= 1'b1;
|
||||
if ( iewr ) begin
|
||||
inte <= odt[0];
|
||||
intl <= 1'b0;
|
||||
end
|
||||
if ( bngw ) bang <= odt[0];
|
||||
if ( lp0w ) lp0r <= odt[0];
|
||||
if ( lp1w ) lp1r <= odt[0];
|
||||
end
|
||||
end
|
||||
|
||||
wire irq_n = ~( intl & inte );
|
||||
|
||||
|
||||
// address decoders
|
||||
wire rom_Rce = ( ( ad[15:14] == 2'b00 ) & mr ); // $0000-$3FFF(R)
|
||||
wire rom_Rce2= ( ( ad[15:14] == 2'b01 ) & mr ); // $4000-$7FFF(R)
|
||||
wire ram_Rce = ( ( ad[15:11] == 5'b1001_1 ) & mr ); // $9800-$9FFF(R)
|
||||
wire ram_Wce = ( ( ad[15:11] == 5'b1001_1 ) & mw ); // $9800-$9FFF(W)
|
||||
wire inp_Rce = ( ( ad[15:12] == 4'b1010 ) & mr ); // $A000-$AFFF(R)
|
||||
wire lat_Wce = ( ad[15:3] == {12'hA18, 1'b0} ) & mw; // $A180-$A187(W)
|
||||
wire snd_Wce = ( ad[15:5] == {8'hA1, 3'b000} ) & mw; // $A100-$A11F(W)
|
||||
wire vid_Rce;
|
||||
|
||||
wire [7:0] romdata;
|
||||
assign cpu_rom_addr = ad[14:0];
|
||||
assign romdata = cpu_rom_data;
|
||||
/*
|
||||
dpram #(8,14) nrx_prg_rom(
|
||||
.clk_a(CLK),
|
||||
.addr_a(ad[13:0]),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(romdata),
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD),
|
||||
.we_b(ROMEN & (ROMAD[15:14]==2'b00)),
|
||||
.d_b(ROMDT),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
wire [7:0] romdata2;
|
||||
dpram #(8,13) nrx_prg_rom2(
|
||||
.clk_a(CLK),
|
||||
.addr_a(ad[12:0]),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(romdata2),
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD),
|
||||
.we_b(ROMEN & (ROMAD[15:13]==3'b010)),
|
||||
.d_b(ROMDT),
|
||||
.q_b()
|
||||
);
|
||||
*/
|
||||
// Work RAM (2KB)
|
||||
wire [7:0] ramdata;
|
||||
spram #(8,11) workram(
|
||||
.clk(CLK),
|
||||
.addr(ad[10:0]),
|
||||
.we(ram_Wce),
|
||||
.d(odt),
|
||||
.q(ramdata)
|
||||
);
|
||||
|
||||
// Controler/DipSW input
|
||||
wire [7:0] in0data = CTR1;
|
||||
wire [7:0] in1data = CTR2;
|
||||
wire [7:0] in2data = DSW1;
|
||||
wire [7:0] in3data = DSW2;
|
||||
wire [7:0] inpdata = ad[8] ? ((mod_jungler & ad[7]) ? in3data : in2data) : ad[7] ? in1data : in0data;
|
||||
|
||||
|
||||
// databus selector
|
||||
wire [7:0] romd = rom_Rce ? romdata : 8'h00;
|
||||
wire [7:0] romd2 = rom_Rce2? romdata : 8'h00;
|
||||
wire [7:0] ramd = ram_Rce ? ramdata : 8'h00;
|
||||
wire [7:0] vidd = vid_Rce ? viddata : 8'h00;
|
||||
wire [7:0] inpd = inp_Rce ? inpdata : 8'h00;
|
||||
wire [7:0] irqv = ( (~m1) & (~ie) ) ? intv : 8'h00;
|
||||
|
||||
wire [7:0] idt = romd | romd2 | ramd | irqv | vidd | inpd;
|
||||
|
||||
|
||||
T80s z80(
|
||||
.RESET_n(~RESET),
|
||||
.CLK(CLK),
|
||||
.CEN(CCLK_EN),
|
||||
.WAIT_n(1'b1),
|
||||
.INT_n(irq_n | mod_jungler),
|
||||
.NMI_n(irq_n | ~mod_jungler),
|
||||
.BUSRQ_n(1'b1),
|
||||
.DI(idt),
|
||||
.M1_n(m1),
|
||||
.MREQ_n(me),
|
||||
.IORQ_n(ie),
|
||||
.RD_n(rd),
|
||||
.WR_n(wr),
|
||||
.RFSH_n(rf),
|
||||
.HALT_n(),
|
||||
.BUSAK_n(),
|
||||
.A(ad),
|
||||
.DO(odt)
|
||||
);
|
||||
|
||||
//--------------------------------------------------
|
||||
// VIDEO
|
||||
//--------------------------------------------------
|
||||
wire [8:0] HP;
|
||||
wire [8:0] VP;
|
||||
wire PCLK_EN;
|
||||
|
||||
nrx_video video(
|
||||
.VCLKx4(CLK),
|
||||
.mod_jungler(mod_jungler),
|
||||
.mod_loco(mod_loco),
|
||||
.mod_tact(mod_tact),
|
||||
.mod_comm(mod_comm),
|
||||
.HPOS(HP+3),
|
||||
.VPOS(VP+1),
|
||||
.PCLK_EN(PCLK_EN),
|
||||
.POUT({b,g,r}),
|
||||
.CPUADDR(ad),
|
||||
.CPUDI(odt),
|
||||
.CPUDO(viddata),
|
||||
.CPUME(mx),
|
||||
.CPUWE(mw),
|
||||
.CPUDT(vid_Rce),
|
||||
.ROMCL(ROMCL),
|
||||
.ROMAD(ROMAD),
|
||||
.ROMDT(ROMDT),
|
||||
.ROMEN(ROMEN)
|
||||
);
|
||||
|
||||
nrx_hvgen hvgen(
|
||||
.CLK(CLK),
|
||||
.HPOS(HP),
|
||||
.VPOS(VP),
|
||||
.PCLK_EN(PCLK_EN),
|
||||
.HBLK(hblank),
|
||||
.VBLK(vblank),
|
||||
.HSYN(hsync),
|
||||
.VSYN(vsync)
|
||||
);
|
||||
|
||||
//--------------------------------------------------
|
||||
// SOUND
|
||||
//--------------------------------------------------
|
||||
wire [7:0] nrx_snd;
|
||||
wire [10:0] timepilot_snd;
|
||||
reg [7:0] timepilot_snd_dat;
|
||||
reg [2:0] timepilot_snd_trig;
|
||||
|
||||
always @(posedge CLK) begin
|
||||
if (RESET)
|
||||
timepilot_snd_dat <= 0;
|
||||
else if (snd_Wce)
|
||||
timepilot_snd_dat <= odt;
|
||||
end
|
||||
|
||||
always @(posedge CLK14M) timepilot_snd_trig = {bang, timepilot_snd_trig[2:1]};
|
||||
|
||||
assign SND = mod_jungler ? timepilot_snd[10:3] : nrx_snd;
|
||||
|
||||
nrx_sound sound(
|
||||
.CLK24M(CLK),
|
||||
.SND(nrx_snd),
|
||||
.AD(ad),
|
||||
.DI(odt[3:0]),
|
||||
.WR(snd_Wce & ~mod_jungler),
|
||||
.BANG(bang & ~mod_jungler),
|
||||
.ROMCL(ROMCL),
|
||||
.ROMAD(ROMAD),
|
||||
.ROMDT(ROMDT),
|
||||
.ROMEN(ROMEN)
|
||||
);
|
||||
|
||||
time_pilot_sound_board sound2(
|
||||
.clock_14(CLK14M),
|
||||
.reset(RESET),
|
||||
.audio_out(timepilot_snd),
|
||||
.sound_cmd(timepilot_snd_dat),
|
||||
.sound_trig(timepilot_snd_trig[0]),
|
||||
.ROMCL(ROMCL),
|
||||
.ROMAD(ROMAD[12:0]),
|
||||
.ROMDT(ROMDT),
|
||||
.ROMEN(ROMEN & (ROMAD[15:13]==3'b011)) // 6000-7FFF
|
||||
);
|
||||
|
||||
endmodule
|
||||
43
Arcade_MiST/Namco Rally-X Hardware/rtl/nrx_hvgen.v
Normal file
43
Arcade_MiST/Namco Rally-X Hardware/rtl/nrx_hvgen.v
Normal file
@@ -0,0 +1,43 @@
|
||||
module nrx_hvgen
|
||||
(
|
||||
input CLK,
|
||||
output [8:0] HPOS,
|
||||
output [8:0] VPOS,
|
||||
input PCLK_EN,
|
||||
output reg HBLK = 1,
|
||||
output reg VBLK = 1,
|
||||
output reg HSYN = 1,
|
||||
output reg VSYN = 1
|
||||
);
|
||||
|
||||
reg [8:0] hcnt = 0;
|
||||
reg [8:0] vcnt = 0;
|
||||
|
||||
assign HPOS = hcnt;
|
||||
assign VPOS = vcnt;
|
||||
|
||||
always @(posedge CLK) begin
|
||||
if (PCLK_EN) begin
|
||||
hcnt <= hcnt + 1'd1;
|
||||
case (hcnt)
|
||||
291: HBLK <= 1;
|
||||
300: HSYN <= 0;
|
||||
324: HSYN <= 1;
|
||||
383: begin
|
||||
hcnt <= 0;
|
||||
vcnt <= vcnt + 1'd1;
|
||||
case (vcnt)
|
||||
223: VBLK <= 1;
|
||||
228: VSYN <= 0;
|
||||
235: VSYN <= 1;
|
||||
242: begin VBLK <= 0; vcnt <= 0; end
|
||||
default: ;
|
||||
endcase
|
||||
end
|
||||
1: HBLK <= 0;
|
||||
default: ;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -6,13 +6,17 @@
|
||||
module nrx_sound
|
||||
(
|
||||
input CLK24M,
|
||||
input CCLK,
|
||||
output reg [7:0] SND,
|
||||
input [15:0] AD,
|
||||
input [3:0] DI,
|
||||
input WR,
|
||||
|
||||
input BANG
|
||||
input BANG,
|
||||
|
||||
input ROMCL,
|
||||
input [15:0] ROMAD,
|
||||
input [7:0] ROMDT,
|
||||
input ROMEN
|
||||
);
|
||||
|
||||
reg [11:0] ccnt;
|
||||
@@ -24,25 +28,29 @@ wire SCLK = ccnt[7];
|
||||
|
||||
wire [7:0] wa0, wa1, wa2;
|
||||
wire [3:0] wd0, wd1, wd2;
|
||||
nrx_namco namco(
|
||||
.clk(SCLKx8),
|
||||
.a0(wa0),
|
||||
.a1(wa1),
|
||||
.a2(wa2),
|
||||
.d0(wd0),
|
||||
.d1(wd1),
|
||||
.d2(wd2)
|
||||
);
|
||||
|
||||
NPSG_WAV waverom(
|
||||
SCLKx8, wa0, wa1, wa2, wd0, wd1, wd2,
|
||||
ROMCL,ROMAD[7:0],ROMDT[3:0],ROMEN & (ROMAD[15:8]==8'hA1)
|
||||
);
|
||||
|
||||
reg bWavPlay = 1'b0;
|
||||
reg [13:0] wap = 14'h0000;
|
||||
wire [7:0] wdp;
|
||||
wire [7:0] wo = bWavPlay ? wdp : 8'h80;
|
||||
|
||||
nrx_wav_rom nrx_wav_rom (
|
||||
.clk(CLK6K),
|
||||
.addr(wap),
|
||||
.data(wdp)
|
||||
dpram #(8,14) bangpcm(
|
||||
.clk_a(CLK6K),
|
||||
.addr_a(wap),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(wdp),
|
||||
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD[13:0]),
|
||||
.d_b(ROMDT),
|
||||
.we_b(ROMEN & (ROMAD[15:14]==2'b01)),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
always @( posedge CLK6K ) begin
|
||||
@@ -99,7 +107,7 @@ nrx_psg_voice voice2(
|
||||
reg [7:0] wout;
|
||||
always @( posedge SCLK ) SND <= ( { 2'b0, wo } ) + ( o0 + o1 + o2 );
|
||||
|
||||
always @( posedge CCLK ) begin
|
||||
always @( posedge CLK24M ) begin
|
||||
if ( WR ) case ( AD[4:0] )
|
||||
|
||||
5'h05: n0 <= DI[2:0];
|
||||
@@ -131,3 +139,50 @@ always @( posedge CCLK ) begin
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module NPSG_WAV
|
||||
(
|
||||
input clk,
|
||||
input [7:0] a0,
|
||||
input [7:0] a1,
|
||||
input [7:0] a2,
|
||||
|
||||
output reg [3:0] d0,
|
||||
output reg [3:0] d1,
|
||||
output reg [3:0] d2,
|
||||
|
||||
input ROMCL,
|
||||
input [7:0] ROMAD,
|
||||
input [3:0] ROMDT,
|
||||
input ROMEN
|
||||
);
|
||||
|
||||
reg [1:0] ph=0;
|
||||
|
||||
reg [7:0] ad;
|
||||
wire [3:0] dt;
|
||||
|
||||
dpram #(4,8) wrom(
|
||||
.clk_a(clk),
|
||||
.addr_a(ad),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(dt),
|
||||
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD),
|
||||
.we_b(ROMEN),
|
||||
.d_b(ROMDT),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
always @(negedge clk) begin
|
||||
case (ph)
|
||||
0: begin d2 <= dt; ad <= a0; ph <= 1; end
|
||||
1: begin d0 <= dt; ad <= a1; ph <= 2; end
|
||||
2: begin d1 <= dt; ad <= a2; ph <= 0; end
|
||||
default:;
|
||||
endcase
|
||||
end
|
||||
|
||||
endmodule
|
||||
178
Arcade_MiST/Namco Rally-X Hardware/rtl/nrx_sprite.v
Normal file
178
Arcade_MiST/Namco Rally-X Hardware/rtl/nrx_sprite.v
Normal file
@@ -0,0 +1,178 @@
|
||||
|
||||
module NRX_SPRITE
|
||||
(
|
||||
input VCLKx4,
|
||||
input VCLKx2_EN,
|
||||
input VCLK_EN,
|
||||
input HBLK,
|
||||
input mod_jungler,
|
||||
input mod_loco,
|
||||
input mod_tact,
|
||||
input mod_comm,
|
||||
|
||||
input [8:0] HPOS,
|
||||
input [8:0] VPOS,
|
||||
|
||||
output reg [10:0] SPRAADRS,
|
||||
input [15:0] SPRADATA,
|
||||
|
||||
output [3:0] ARAMADRS,
|
||||
input [7:0] ARAMDATA,
|
||||
|
||||
output [12:0] SPCHRADR,
|
||||
input [7:0] SPCHRDAT,
|
||||
|
||||
output [7:0] DROMAD,
|
||||
input [7:0] DROMDT,
|
||||
|
||||
output reg [8:0] SPCOL
|
||||
);
|
||||
|
||||
wire SIDE = VPOS[0];
|
||||
|
||||
|
||||
reg [19:0] SPATR0;
|
||||
reg [36:0] SPATRS[0:31];
|
||||
reg [3:0] WWADR;
|
||||
reg bHit;
|
||||
|
||||
assign ARAMADRS = SPRAADRS[3:0];
|
||||
|
||||
reg [7:0] WRADR;
|
||||
reg [8:0] HPOSW;
|
||||
reg [8:0] SPWCL;
|
||||
|
||||
wire [36:0] SPA = SPATRS[{~SIDE,WRADR[7:4]}];
|
||||
|
||||
wire [3:0] SH = WRADR[3:0] + (mod_jungler ? 4'h0 : 4'h4);
|
||||
wire [3:0] SV = SPA[35:32];
|
||||
|
||||
wire [2:0] SPFY = { 3{SPA[1]} };
|
||||
wire [1:0] SPFX = {2{mod_tact}} ^ { mod_loco ? ~SPA[1] : mod_jungler, mod_loco ? SPA[1] : SPA[0] };
|
||||
wire [5:0] SPPL = SPA[29:24];
|
||||
|
||||
assign SPCHRADR = { mod_loco ? {SPA[7], SPA[0], SPA[6:2]} : {1'b0, SPA[7:2]},
|
||||
mod_jungler ^ SV[3] ^ SPA[1],
|
||||
SH[3:2] ^ SPFX,
|
||||
{3{mod_jungler}} ^ SV[2:0] ^ SPFY };
|
||||
|
||||
wire [7:0] CHRO = SPCHRDAT;
|
||||
|
||||
|
||||
wire [8:0] YM = ((mod_jungler & ~mod_tact) ? (9'd258 - SPRADATA[15:8]) : (SPRADATA[15:8] + 8'h10)) + VPOS[7:0];
|
||||
wire [8:0] YM2 = ((mod_jungler & ~mod_tact) ? (9'd270 - SPRADATA[15:8]) : (SPRADATA[15:8] + 8'h10)) + VPOS[7:0];
|
||||
|
||||
assign DROMAD = { 1'b0, (mod_jungler ? ~SPA[18:16] : ~SPA[19:17]), SPA[33:32], WRADR[3:2] };
|
||||
|
||||
reg HBLK_D;
|
||||
|
||||
always @ ( posedge VCLKx4 ) begin
|
||||
|
||||
HBLK_D <= HBLK;
|
||||
if (VCLKx2_EN) begin
|
||||
|
||||
// in H-BLANK
|
||||
if (HBLK_D) begin
|
||||
|
||||
// Sprite V-hit check & list-up
|
||||
if ( SPRAADRS < 10'h20 ) begin
|
||||
if ( SPRAADRS[0] ) begin
|
||||
if ( bHit ) begin
|
||||
SPATRS[{SIDE,WWADR}] <= { 1'b1, SPATR0[3:0], SPRADATA, SPATR0[19:4] };
|
||||
WWADR <= WWADR+1'd1;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
if ( YM[7:4] == 4'b1111 ) begin
|
||||
bHit <= 1;
|
||||
SPATR0 <= { SPRADATA, YM[3:0] };
|
||||
end
|
||||
else bHit <= 0;
|
||||
end
|
||||
SPRAADRS <= ( SPRAADRS == 10'h1F ) ? (mod_comm ? 10'h20 : 10'h34) : (SPRAADRS+1'd1);
|
||||
end
|
||||
// Rader-dot V-hit check & list-up
|
||||
else begin
|
||||
if ( SPRAADRS < 10'h40 ) begin
|
||||
if ( YM2[7:2] == 6'b111111 ) begin
|
||||
SPATRS[{SIDE,WWADR}] <= { 1'b0, 2'b00, YM2[1:0], 8'h0, ARAMDATA, SPRADATA };
|
||||
WWADR <= WWADR+1'd1;
|
||||
end
|
||||
SPRAADRS <= SPRAADRS+1'd1;
|
||||
end
|
||||
else SPATRS[{SIDE,WWADR}] <= 0;
|
||||
end
|
||||
|
||||
if ( SPA ) begin
|
||||
// Rend Sprite
|
||||
if ( SPA[36] ) begin
|
||||
HPOSW <= WRADR[3:0] ? (HPOSW+1'd1) : ((mod_jungler & ~mod_tact) ? ((mod_loco ? 9'd242 : 9'd278)-{ SPA[31], SPA[23:16] }) : ({ SPA[31], SPA[23:16] } + 2'd3));
|
||||
|
||||
case ({ mod_jungler, {2{mod_jungler}} ^ SH[1:0] ^ {2{SPFX[0]}} } )
|
||||
3'b000: SPWCL <= { 1'b0, SPPL, CHRO[7], CHRO[3] };
|
||||
3'b001: SPWCL <= { 1'b0, SPPL, CHRO[6], CHRO[2] };
|
||||
3'b010: SPWCL <= { 1'b0, SPPL, CHRO[5], CHRO[1] };
|
||||
3'b011: SPWCL <= { 1'b0, SPPL, CHRO[4], CHRO[0] };
|
||||
|
||||
3'b100: SPWCL <= { 1'b0, SPPL, CHRO[3], CHRO[7] };
|
||||
3'b101: SPWCL <= { 1'b0, SPPL, CHRO[2], CHRO[6] };
|
||||
3'b110: SPWCL <= { 1'b0, SPPL, CHRO[1], CHRO[5] };
|
||||
3'b111: SPWCL <= { 1'b0, SPPL, CHRO[0], CHRO[4] };
|
||||
endcase
|
||||
WRADR <= WRADR+1'd1;
|
||||
end
|
||||
// Rend Rader-dot
|
||||
else begin
|
||||
HPOSW <=
|
||||
WRADR[3:0] ?
|
||||
(HPOSW+1'd1) :
|
||||
(mod_tact ? { 1'b0, SPA[7:0] } :
|
||||
mod_loco ? { 1'b0, ~SPA[7:0] } :
|
||||
mod_jungler ? { SPA[19], ~SPA[7:0] + 8'd35 } :
|
||||
({ ~SPA[16], SPA[7:0] } + 2'd3));
|
||||
SPWCL <= ( DROMDT[1:0] != 2'b11 ) ? { 1'b1, 6'b000100, DROMDT[1:0] } : 9'd0;
|
||||
WRADR <= WRADR+4'd4;
|
||||
end
|
||||
end
|
||||
else SPWCL <= 0;
|
||||
|
||||
end
|
||||
|
||||
// in H-DISP
|
||||
else begin
|
||||
SPRAADRS <= mod_comm ? 10'h0 : 10'h14;
|
||||
WWADR <= 0;
|
||||
WRADR <= 0;
|
||||
SPWCL <= 0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
reg [9:0] radr0=0,radr1=1;
|
||||
wire [8:0] SPCOLi;
|
||||
|
||||
dpram #(9,10)
|
||||
linebuffer(
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(radr0),
|
||||
.we_a(radr0==radr1),
|
||||
.d_a(9'h0),
|
||||
.q_a(SPCOLi),
|
||||
|
||||
.clk_b(VCLKx4),
|
||||
.addr_b({~SIDE,HPOSW}),
|
||||
.d_b(SPWCL),
|
||||
.we_b((SPWCL[0]|SPWCL[1])),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
always @(posedge VCLKx4) begin
|
||||
radr0 <= {SIDE,HPOS};
|
||||
if (VCLK_EN) begin
|
||||
if (radr0!=radr1) SPCOL <= SPCOLi;
|
||||
radr1 <= radr0;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
283
Arcade_MiST/Namco Rally-X Hardware/rtl/nrx_video.v
Normal file
283
Arcade_MiST/Namco Rally-X Hardware/rtl/nrx_video.v
Normal file
@@ -0,0 +1,283 @@
|
||||
/**************************************************************
|
||||
FPGA New Rally-X (Video Part)
|
||||
***************************************************************/
|
||||
module nrx_video
|
||||
(
|
||||
input VCLKx4, // 24.976MHz
|
||||
input mod_jungler,
|
||||
input mod_loco,
|
||||
input mod_tact,
|
||||
input mod_comm,
|
||||
|
||||
input [8:0] HPOS,
|
||||
input [8:0] VPOS,
|
||||
output PCLK_EN,
|
||||
output reg [7:0] POUT,
|
||||
|
||||
input [15:0] CPUADDR,
|
||||
input [7:0] CPUDI,
|
||||
output [7:0] CPUDO,
|
||||
input CPUME,
|
||||
input CPUWE,
|
||||
output CPUDT,
|
||||
|
||||
input ROMCL,
|
||||
input [15:0] ROMAD,
|
||||
input [7:0] ROMDT,
|
||||
input ROMEN
|
||||
);
|
||||
|
||||
//-----------------------------------------
|
||||
// Clock generators
|
||||
//-----------------------------------------
|
||||
reg [1:0] VCLK_CNT;
|
||||
wire VCLKx2_EN;
|
||||
always @(posedge VCLKx4) VCLK_CNT <= VCLK_CNT + 1'd1;
|
||||
assign PCLK_EN = VCLK_CNT == 2'b00;
|
||||
assign VCLKx2_EN = !VCLK_CNT[0];
|
||||
|
||||
//-----------------------------------------
|
||||
// BG scroll registers
|
||||
//-----------------------------------------
|
||||
reg [7:0] BGHSCR;
|
||||
reg [7:0] BGVSCR;
|
||||
|
||||
always @ ( posedge VCLKx4 ) begin
|
||||
if ( ( CPUADDR == 16'hA130 ) & CPUME & CPUWE ) begin
|
||||
BGHSCR <= CPUDI-3'd3;
|
||||
end
|
||||
if ( ( CPUADDR == 16'hA140 ) & CPUME & CPUWE ) begin
|
||||
BGVSCR <= CPUDI;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
//-----------------------------------------
|
||||
// HV
|
||||
//-----------------------------------------
|
||||
wire [8:0] BGHPOS = HPOS + { 1'b0, BGHSCR };
|
||||
wire [8:0] BGVPOS = VPOS + { 1'b0, BGVSCR };
|
||||
|
||||
wire oHB = HPOS > 291;
|
||||
wire oVB = VPOS > 224;
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// VideoRAM Scanner
|
||||
//----------------------------------------
|
||||
wire BF = ( HPOS >= 227 );
|
||||
wire [8:0] HP = ( BF ? HPOS : BGHPOS ) - 2'd3;
|
||||
wire [8:0] VP = ( BF ? VPOS : BGVPOS ) + 9'h0F;
|
||||
|
||||
wire [10:0] SPRAADRS;
|
||||
wire [3:0] ARAMADRS;
|
||||
|
||||
reg [10:0] VRAMADRS;
|
||||
always @ ( * ) begin
|
||||
VRAMADRS = oHB ?
|
||||
SPRAADRS :
|
||||
BF ? { 1'b0, VP[7:3], 2'b00, HP[5:3] } : { 1'b1, VP[7:3], HP[7:3] };
|
||||
end
|
||||
|
||||
wire [7:0] CHRC;
|
||||
wire [7:0] ATTR;
|
||||
wire [7:0] ARDT;
|
||||
|
||||
wire [7:0] V0DO, V1DO;
|
||||
|
||||
wire CEV0 = ( ( CPUADDR[15:12] == 4'b1000 ) & (~CPUADDR[11]) ) & CPUME;
|
||||
wire CEV1 = ( ( CPUADDR[15:12] == 4'b1000 ) & CPUADDR[11] ) & CPUME;
|
||||
wire CEAT = ( CPUADDR[15:4] == 12'b1010_0000_0000 ) & CPUME;
|
||||
|
||||
wire [7:0] DTV0 = CEV0 ? V0DO : 8'h00;
|
||||
wire [7:0] DTV1 = CEV1 ? V1DO : 8'h00;
|
||||
|
||||
assign CPUDO = DTV0 | DTV1;
|
||||
assign CPUDT = ( ~CPUWE ) & ( CEV0 | CEV1 );
|
||||
|
||||
dpram #(8,11)
|
||||
vram0(
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(VRAMADRS),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(CHRC),
|
||||
|
||||
.clk_b(VCLKx4),
|
||||
.addr_b(CPUADDR[10:0]),
|
||||
.we_b(( CPUWE & CEV0 )),
|
||||
.d_b(CPUDI),
|
||||
.q_b(V0DO)
|
||||
);
|
||||
|
||||
dpram #(8,11)
|
||||
vram1(
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(VRAMADRS),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(ATTR),
|
||||
|
||||
.clk_b(VCLKx4),
|
||||
.addr_b(CPUADDR[10:0]),
|
||||
.we_b(CPUWE & CEV1),
|
||||
.d_b(CPUDI),
|
||||
.q_b(V1DO)
|
||||
);
|
||||
|
||||
dpram #(8,4)
|
||||
aram0(
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(ARAMADRS),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(ARDT),
|
||||
|
||||
.clk_b(VCLKx4),
|
||||
.addr_b(CPUADDR[3:0]),
|
||||
.we_b(CPUWE & CEAT),
|
||||
.d_b(CPUDI),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
wire BGF = ATTR[5];
|
||||
|
||||
//----------------------------------------
|
||||
// BG/Sprite chip data reader
|
||||
//----------------------------------------
|
||||
wire BGFX = mod_loco ? ~ATTR[7] : ATTR[6];
|
||||
wire [2:0] BGFY = { ATTR[7], ATTR[7], ATTR[7] };
|
||||
|
||||
wire [12:0] SPCHRADR;
|
||||
wire [12:0] CHRA = oHB ? SPCHRADR : { mod_loco? {CHRC[7], ATTR[6], CHRC[6:0]} : {1'b0, CHRC}, ( HP[2] ^ BGFX ), ( VP[2:0] ^ BGFY ) };
|
||||
|
||||
wire [7:0] CHRO;
|
||||
dpram #(8,13) chrrom (
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(CHRA),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(CHRO),
|
||||
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD[12:0]),
|
||||
.we_b(ROMEN & (ROMAD[15:13]==3'b100)), //8000-9FFF
|
||||
.d_b(ROMDT),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
//----------------------------------------
|
||||
// Rader-dot chip ROM
|
||||
//----------------------------------------
|
||||
wire [7:0] DROMAD;
|
||||
wire [7:0] DROMDT;
|
||||
dpram #(8,8) dotrom (
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(DROMAD),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(DROMDT),
|
||||
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD[7:0]),
|
||||
.we_b(ROMEN & (ROMAD[15:8]==8'hA0)),
|
||||
.d_b(ROMDT),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
//----------------------------------------
|
||||
// BG/FG scanline generator
|
||||
//----------------------------------------
|
||||
wire [5:0] BGPL = ATTR[5:0];
|
||||
reg [7:0] BGCOL;
|
||||
|
||||
always @ ( posedge VCLKx4 ) begin
|
||||
if (PCLK_EN) begin
|
||||
case ( { mod_jungler, HP[1:0]^{2{BGFX}} } )
|
||||
3'b000: BGCOL <= { BGPL, CHRO[4], CHRO[0] };
|
||||
3'b001: BGCOL <= { BGPL, CHRO[5], CHRO[1] };
|
||||
3'b010: BGCOL <= { BGPL, CHRO[6], CHRO[2] };
|
||||
3'b011: BGCOL <= { BGPL, CHRO[7], CHRO[3] };
|
||||
|
||||
3'b100: BGCOL <= { BGPL, CHRO[0], CHRO[4] };
|
||||
3'b101: BGCOL <= { BGPL, CHRO[1], CHRO[5] };
|
||||
3'b110: BGCOL <= { BGPL, CHRO[2], CHRO[6] };
|
||||
3'b111: BGCOL <= { BGPL, CHRO[3], CHRO[7] };
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// Sprite Engine
|
||||
//----------------------------------------
|
||||
wire [8:0] SPCOL;
|
||||
NRX_SPRITE speng(
|
||||
.VCLKx4(VCLKx4),
|
||||
.VCLKx2_EN(VCLKx2_EN),
|
||||
.VCLK_EN(PCLK_EN),
|
||||
.mod_jungler(mod_jungler),
|
||||
.mod_loco(mod_loco),
|
||||
.mod_tact(mod_tact),
|
||||
.mod_comm(mod_comm),
|
||||
.HBLK(oHB),
|
||||
.HPOS(HPOS),
|
||||
.VPOS(VPOS),
|
||||
.SPRAADRS(SPRAADRS),
|
||||
.SPRADATA({ ATTR, CHRC }),
|
||||
.ARAMADRS(ARAMADRS),
|
||||
.ARAMDATA(ARDT),
|
||||
.SPCHRADR(SPCHRADR),
|
||||
.SPCHRDAT(CHRO),
|
||||
.DROMAD(DROMAD),
|
||||
.DROMDT(DROMDT),
|
||||
.SPCOL(SPCOL)
|
||||
);
|
||||
|
||||
|
||||
//----------------------------------------
|
||||
// Color mixer
|
||||
//----------------------------------------
|
||||
wire bBGOPAQUE = ~mod_jungler & ( BF | BGF ) & ~SPCOL[8];
|
||||
wire bSPTRANSP = ( SPCOL[1:0] == 2'b00 );
|
||||
|
||||
wire [7:0] OUTCOL = ( bBGOPAQUE | bSPTRANSP ) ? BGCOL : SPCOL[7:0];
|
||||
wire [3:0] CLUT;
|
||||
|
||||
dpram #(4,8) colrom (
|
||||
.clk_a(~VCLKx4),
|
||||
.addr_a(OUTCOL),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(CLUT),
|
||||
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD[7:0]),
|
||||
.we_b(ROMEN & (ROMAD[15:8]==8'hA2)),
|
||||
.d_b(ROMDT[3:0]),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
wire [4:0] PALA = SPCOL[8] ? SPCOL[4:0] : { 1'b0, CLUT };
|
||||
wire [7:0] PALO;
|
||||
|
||||
dpram #(8,5) palrom (
|
||||
.clk_a(VCLKx4),
|
||||
.addr_a(PALA),
|
||||
.we_a(1'b0),
|
||||
.d_a(),
|
||||
.q_a(PALO),
|
||||
|
||||
.clk_b(ROMCL),
|
||||
.addr_b(ROMAD[4:0]),
|
||||
.we_b(ROMEN & (ROMAD[15:5]=={8'hA3,3'b000})),
|
||||
.d_b(ROMDT),
|
||||
.q_b()
|
||||
);
|
||||
|
||||
//----------------------------------------
|
||||
// Color output
|
||||
//----------------------------------------
|
||||
always @ ( posedge VCLKx4 ) if (PCLK_EN) POUT <= (oHB|oVB) ? 8'h0 : PALO;
|
||||
|
||||
endmodule
|
||||
@@ -14,7 +14,7 @@
|
||||
// ************************************************************
|
||||
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
|
||||
//
|
||||
// 13.1.4 Build 182 03/12/2014 SJ Web Edition
|
||||
// 13.1.4 Build 182 03/12/2014 Patches 4.26 SJ Web Edition
|
||||
// ************************************************************
|
||||
|
||||
|
||||
@@ -39,23 +39,27 @@
|
||||
module pll (
|
||||
inclk0,
|
||||
c0,
|
||||
c1,
|
||||
locked);
|
||||
|
||||
input inclk0;
|
||||
output c0;
|
||||
output c1;
|
||||
output locked;
|
||||
|
||||
wire [4:0] sub_wire0;
|
||||
wire sub_wire2;
|
||||
wire [0:0] sub_wire5 = 1'h0;
|
||||
wire [0:0] sub_wire1 = sub_wire0[0:0];
|
||||
wire c0 = sub_wire1;
|
||||
wire [0:0] sub_wire6 = 1'h0;
|
||||
wire [0:0] sub_wire3 = sub_wire0[0:0];
|
||||
wire [1:1] sub_wire1 = sub_wire0[1:1];
|
||||
wire c1 = sub_wire1;
|
||||
wire locked = sub_wire2;
|
||||
wire sub_wire3 = inclk0;
|
||||
wire [1:0] sub_wire4 = {sub_wire5, sub_wire3};
|
||||
wire c0 = sub_wire3;
|
||||
wire sub_wire4 = inclk0;
|
||||
wire [1:0] sub_wire5 = {sub_wire6, sub_wire4};
|
||||
|
||||
altpll altpll_component (
|
||||
.inclk (sub_wire4),
|
||||
.inclk (sub_wire5),
|
||||
.clk (sub_wire0),
|
||||
.locked (sub_wire2),
|
||||
.activeclock (),
|
||||
@@ -98,6 +102,10 @@ module pll (
|
||||
altpll_component.clk0_duty_cycle = 50,
|
||||
altpll_component.clk0_multiply_by = 71,
|
||||
altpll_component.clk0_phase_shift = "0",
|
||||
altpll_component.clk1_divide_by = 27,
|
||||
altpll_component.clk1_duty_cycle = 50,
|
||||
altpll_component.clk1_multiply_by = 14,
|
||||
altpll_component.clk1_phase_shift = "0",
|
||||
altpll_component.compensate_clock = "CLK0",
|
||||
altpll_component.inclk0_input_frequency = 37037,
|
||||
altpll_component.intended_device_family = "Cyclone III",
|
||||
@@ -131,7 +139,7 @@ module pll (
|
||||
altpll_component.port_scanread = "PORT_UNUSED",
|
||||
altpll_component.port_scanwrite = "PORT_UNUSED",
|
||||
altpll_component.port_clk0 = "PORT_USED",
|
||||
altpll_component.port_clk1 = "PORT_UNUSED",
|
||||
altpll_component.port_clk1 = "PORT_USED",
|
||||
altpll_component.port_clk2 = "PORT_UNUSED",
|
||||
altpll_component.port_clk3 = "PORT_UNUSED",
|
||||
altpll_component.port_clk4 = "PORT_UNUSED",
|
||||
@@ -172,8 +180,11 @@ endmodule
|
||||
// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0"
|
||||
// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8"
|
||||
// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "78"
|
||||
// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
|
||||
// Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000"
|
||||
// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "24.576923"
|
||||
// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "14.000000"
|
||||
// Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0"
|
||||
// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
|
||||
// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
|
||||
@@ -194,18 +205,26 @@ endmodule
|
||||
// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available"
|
||||
// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
|
||||
// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps"
|
||||
// Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any"
|
||||
// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
|
||||
// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0"
|
||||
// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "71"
|
||||
// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
|
||||
// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "24.57600000"
|
||||
// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "14.00000000"
|
||||
// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0"
|
||||
// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1"
|
||||
// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
|
||||
// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz"
|
||||
// Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1"
|
||||
// Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0"
|
||||
// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
|
||||
// Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000"
|
||||
// Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0"
|
||||
// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
|
||||
// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps"
|
||||
// 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"
|
||||
@@ -228,11 +247,14 @@ endmodule
|
||||
// Retrieval info: PRIVATE: SPREAD_USE STRING "0"
|
||||
// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
|
||||
// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
|
||||
// Retrieval info: PRIVATE: STICKY_CLK1 STRING "1"
|
||||
// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
|
||||
// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1"
|
||||
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
|
||||
// Retrieval info: PRIVATE: USE_CLK0 STRING "1"
|
||||
// Retrieval info: PRIVATE: USE_CLK1 STRING "1"
|
||||
// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
|
||||
// Retrieval info: PRIVATE: USE_CLKENA1 STRING "0"
|
||||
// Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0"
|
||||
// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
|
||||
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
|
||||
@@ -241,6 +263,10 @@ endmodule
|
||||
// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
|
||||
// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "71"
|
||||
// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
|
||||
// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "27"
|
||||
// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50"
|
||||
// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "14"
|
||||
// Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0"
|
||||
// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
|
||||
// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037"
|
||||
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
|
||||
@@ -273,7 +299,7 @@ endmodule
|
||||
// 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_UNUSED"
|
||||
// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED"
|
||||
// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED"
|
||||
// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED"
|
||||
// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED"
|
||||
@@ -292,11 +318,13 @@ endmodule
|
||||
// Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5"
|
||||
// Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]"
|
||||
// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0"
|
||||
// Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1"
|
||||
// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0"
|
||||
// Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked"
|
||||
// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
|
||||
// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
|
||||
// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
|
||||
// Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1
|
||||
// Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.v TRUE
|
||||
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE
|
||||
255
Arcade_MiST/Namco Rally-X Hardware/rtl/rallyX_mist.sv
Normal file
255
Arcade_MiST/Namco Rally-X Hardware/rtl/rallyX_mist.sv
Normal file
@@ -0,0 +1,255 @@
|
||||
module rallyX_mist (
|
||||
output LED,
|
||||
output [5:0] VGA_R,
|
||||
output [5:0] VGA_G,
|
||||
output [5:0] VGA_B,
|
||||
output VGA_HS,
|
||||
output VGA_VS,
|
||||
output AUDIO_L,
|
||||
output AUDIO_R,
|
||||
input SPI_SCK,
|
||||
output SPI_DO,
|
||||
input SPI_DI,
|
||||
input SPI_SS2,
|
||||
input SPI_SS3,
|
||||
input CONF_DATA0,
|
||||
input CLOCK_27,
|
||||
|
||||
output [12:0] SDRAM_A,
|
||||
inout [15:0] SDRAM_DQ,
|
||||
output SDRAM_DQML,
|
||||
output SDRAM_DQMH,
|
||||
output SDRAM_nWE,
|
||||
output SDRAM_nCAS,
|
||||
output SDRAM_nRAS,
|
||||
output SDRAM_nCS,
|
||||
output [1:0] SDRAM_BA,
|
||||
output SDRAM_CLK,
|
||||
output SDRAM_CKE
|
||||
);
|
||||
|
||||
`include "rtl\build_id.v"
|
||||
|
||||
localparam CONF_STR = {
|
||||
"RALLYX;;",
|
||||
"O2,Rotate Controls,Off,On;",
|
||||
"O34,Scanlines,None,CRT 25%,CRT 50%,CRT 75%;",
|
||||
"O5,Blend,Off,On;",
|
||||
"DIP;",
|
||||
"T0,Reset;",
|
||||
"V,v1.00.",`BUILD_DATE
|
||||
};
|
||||
|
||||
wire rotate = status[2];
|
||||
wire [1:0] scanlines = status[4:3];
|
||||
wire blend = status[5];
|
||||
wire [1:0] orientation = {core_mod[2], core_mod[0]};
|
||||
|
||||
assign LED = ~ioctl_downl;
|
||||
assign AUDIO_R = AUDIO_L;
|
||||
assign SDRAM_CLK = clock_24;
|
||||
assign SDRAM_CKE = 1;
|
||||
|
||||
wire pll_locked, clock_24, clock_14;
|
||||
pll pll(
|
||||
.inclk0(CLOCK_27),
|
||||
.c0(clock_24), //24.576MHz
|
||||
.c1(clock_14),
|
||||
.locked(pll_locked)
|
||||
);
|
||||
|
||||
wire [6:0] core_mod;
|
||||
wire [31:0] status;
|
||||
wire [1:0] buttons;
|
||||
wire [1:0] switches;
|
||||
wire [7:0] joystick_0;
|
||||
wire [7:0] joystick_1;
|
||||
wire scandoublerD;
|
||||
wire ypbpr;
|
||||
wire no_csync;
|
||||
wire [7:0] audio;
|
||||
wire hs, vs;
|
||||
wire hb, vb;
|
||||
wire blankn = ~(hb | vb);
|
||||
wire [2:0] r, g;
|
||||
wire [1:0] b;
|
||||
wire key_strobe;
|
||||
wire key_pressed;
|
||||
wire [7:0] key_code;
|
||||
|
||||
reg [7:0] iDSW1, iDSW2, iCTR1, iCTR2;
|
||||
|
||||
always @(*) begin
|
||||
iDSW1 = ~status[15:8];
|
||||
iDSW2 = ~status[23:16];
|
||||
iCTR1 = ~{ m_coin1, m_one_player, m_up, m_down, m_right, m_left, m_fireA, 1'b0 };
|
||||
iCTR2 = ~{ m_coin2, m_two_players, m_up2, m_down2, m_right2, m_left2, m_fire2A, 1'b0 };
|
||||
|
||||
if (core_mod[0]) begin
|
||||
//Jungler, Loco-Motion, Tactician
|
||||
iCTR1 = ~{ m_coin1, m_coin2, m_right, m_left, m_fireA, 1'b0, m_fireB, m_up2 };
|
||||
iCTR2 = ~{ m_one_player, m_two_players, m_left2, m_right2, m_fire2A, m_fire2B, m_down2, m_up };
|
||||
iDSW1[7] = ~m_down;
|
||||
end
|
||||
if (core_mod[3]) begin
|
||||
//Commando
|
||||
iCTR1 = ~{ m_coin1, m_coin2, m_right, m_left, m_fireB, 2'b00, m_up };
|
||||
iCTR2 = ~{ m_one_player, m_two_players, m_left2, m_right2, m_fire2B, m_fire2A, m_down2, m_up };
|
||||
iDSW1[7] = ~m_down;
|
||||
iDSW1[6] = ~m_fireA;
|
||||
end
|
||||
end
|
||||
|
||||
wire ioctl_downl;
|
||||
wire [7:0] ioctl_index;
|
||||
wire ioctl_wr;
|
||||
wire [24:0] ioctl_addr;
|
||||
wire [7:0] ioctl_dout;
|
||||
reg port1_req;
|
||||
reg [15:0] rom_dout;
|
||||
reg [14:0] rom_addr;
|
||||
|
||||
data_io data_io(
|
||||
.clk_sys ( clock_24 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS2 ( SPI_SS2 ),
|
||||
.SPI_DI ( SPI_DI ),
|
||||
.ioctl_download( ioctl_downl ),
|
||||
.ioctl_index ( ioctl_index ),
|
||||
.ioctl_wr ( ioctl_wr ),
|
||||
.ioctl_addr ( ioctl_addr ),
|
||||
.ioctl_dout ( ioctl_dout )
|
||||
);
|
||||
|
||||
sdram #(.MHZ(24)) sdram(
|
||||
.*,
|
||||
.init_n ( pll_locked ),
|
||||
.clk ( clock_24 ),
|
||||
|
||||
// ROM upload
|
||||
.port1_req ( port1_req ),
|
||||
.port1_ack ( ),
|
||||
.port1_a ( ioctl_addr[22:1] ),
|
||||
.port1_ds ( { ioctl_addr[0], ~ioctl_addr[0] } ),
|
||||
.port1_we ( ioctl_downl ),
|
||||
.port1_d ( {ioctl_dout, ioctl_dout} ),
|
||||
|
||||
// CPU
|
||||
.cpu1_addr ( ioctl_downl ? 17'h1ffff : {3'b000, rom_addr[14:1] } ),
|
||||
.cpu1_q ( rom_dout )
|
||||
);
|
||||
|
||||
always @(posedge clock_24) begin
|
||||
reg ioctl_wr_last = 0;
|
||||
|
||||
ioctl_wr_last <= ioctl_wr;
|
||||
if (ioctl_downl) begin
|
||||
if (~ioctl_wr_last && ioctl_wr) begin
|
||||
port1_req <= ~port1_req;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
fpga_nrx fpga_nrx(
|
||||
.RESET(status[0] | buttons[1]),
|
||||
.CLK24M(clock_24),
|
||||
.CLK14M(clock_14),
|
||||
.mod_jungler(core_mod[0]),
|
||||
.mod_loco(core_mod[1]),
|
||||
.mod_tact(core_mod[2]),
|
||||
.mod_comm(core_mod[3]),
|
||||
.hsync(hs),
|
||||
.vsync(vs),
|
||||
.hblank(hb),
|
||||
.vblank(vb),
|
||||
.r(r),
|
||||
.g(g),
|
||||
.b(b),
|
||||
.cpu_rom_addr(rom_addr),
|
||||
.cpu_rom_data(rom_addr[0] ? rom_dout[15:8] : rom_dout[7:0]),
|
||||
.SND(audio),
|
||||
.DSW1(iDSW1),
|
||||
.DSW2(iDSW2),
|
||||
.CTR1(iCTR1),
|
||||
.CTR2(iCTR2),
|
||||
.LAMP(),
|
||||
// ROM download
|
||||
.ROMCL(clock_24),
|
||||
.ROMAD(ioctl_addr[15:0]),
|
||||
.ROMDT(ioctl_dout),
|
||||
.ROMEN(ioctl_wr)
|
||||
);
|
||||
|
||||
mist_video #(.COLOR_DEPTH(3), .SD_HCNT_WIDTH(11)) mist_video(
|
||||
.clk_sys ( clock_24 ),
|
||||
.SPI_SCK ( SPI_SCK ),
|
||||
.SPI_SS3 ( SPI_SS3 ),
|
||||
.SPI_DI ( SPI_DI ),
|
||||
.R ( blankn ? r : 0 ),
|
||||
.G ( blankn ? g : 0 ),
|
||||
.B ( blankn ? {b,1'b0} : 0 ),
|
||||
.HSync ( hs ),
|
||||
.VSync ( vs ),
|
||||
.VGA_R ( VGA_R ),
|
||||
.VGA_G ( VGA_G ),
|
||||
.VGA_B ( VGA_B ),
|
||||
.VGA_VS ( VGA_VS ),
|
||||
.VGA_HS ( VGA_HS ),
|
||||
.ce_divider ( 1'b1 ),
|
||||
.blend ( blend ),
|
||||
.rotate ( {orientation[1], rotate} ),
|
||||
.scandoubler_disable( scandoublerD ),
|
||||
.scanlines ( scanlines ),
|
||||
.ypbpr ( ypbpr ),
|
||||
.no_csync ( no_csync )
|
||||
);
|
||||
|
||||
user_io #(.STRLEN(($size(CONF_STR)>>3)))user_io(
|
||||
.clk_sys (clock_24 ),
|
||||
.conf_str (CONF_STR ),
|
||||
.SPI_CLK (SPI_SCK ),
|
||||
.SPI_SS_IO (CONF_DATA0 ),
|
||||
.SPI_MISO (SPI_DO ),
|
||||
.SPI_MOSI (SPI_DI ),
|
||||
.buttons (buttons ),
|
||||
.switches (switches ),
|
||||
.scandoubler_disable (scandoublerD ),
|
||||
.ypbpr (ypbpr ),
|
||||
.no_csync (no_csync ),
|
||||
.key_strobe (key_strobe ),
|
||||
.key_pressed (key_pressed ),
|
||||
.key_code (key_code ),
|
||||
.joystick_0 (joystick_0 ),
|
||||
.joystick_1 (joystick_1 ),
|
||||
.status (status ),
|
||||
.core_mod (core_mod )
|
||||
);
|
||||
|
||||
dac #(.C_bits(16))dac(
|
||||
.clk_i(core_mod[0] ? clock_14 : clock_24),
|
||||
.res_n_i(1),
|
||||
.dac_i({audio,audio}),
|
||||
.dac_o(AUDIO_L)
|
||||
);
|
||||
|
||||
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
|
||||
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
|
||||
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
|
||||
|
||||
arcade_inputs inputs (
|
||||
.clk ( clock_24 ),
|
||||
.key_strobe ( key_strobe ),
|
||||
.key_pressed ( key_pressed ),
|
||||
.key_code ( key_code ),
|
||||
.joystick_0 ( joystick_0 ),
|
||||
.joystick_1 ( joystick_1 ),
|
||||
.rotate ( rotate ),
|
||||
.orientation ( orientation ),
|
||||
.joyswap ( 1'b0 ),
|
||||
.oneplayer ( 1'b1 ),
|
||||
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
|
||||
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
|
||||
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
|
||||
);
|
||||
|
||||
endmodule
|
||||
10
Arcade_MiST/Namco Rally-X Hardware/rtl/rommap.txt
Normal file
10
Arcade_MiST/Namco Rally-X Hardware/rtl/rommap.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
0000-3FFF CPU instruction
|
||||
4000-7FFF "BANG!" PCM data or CPU ROM / TimePilot sound board CPU ROM
|
||||
8000-9FFF Background/Object pattern
|
||||
A000-A0FF Rader dot pattern
|
||||
A100-A1FF Sound wave
|
||||
A200-A2FF Lookup table
|
||||
A300-A31F Palette
|
||||
|
||||
[EOF]
|
||||
232
Arcade_MiST/Namco Rally-X Hardware/rtl/sdram.sv
Normal file
232
Arcade_MiST/Namco Rally-X Hardware/rtl/sdram.sv
Normal file
@@ -0,0 +1,232 @@
|
||||
//
|
||||
// sdram.v
|
||||
//
|
||||
// sdram controller implementation for the MiST board
|
||||
// https://github.com/mist-devel/mist-board
|
||||
//
|
||||
// Copyright (c) 2013 Till Harbaum <till@harbaum.org>
|
||||
// Copyright (c) 2019 Gyorgy Szombathelyi
|
||||
//
|
||||
// This source file is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This source file is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
|
||||
module sdram (
|
||||
|
||||
// interface to the MT48LC16M16 chip
|
||||
inout reg [15:0] SDRAM_DQ, // 16 bit bidirectional data bus
|
||||
output reg [12:0] SDRAM_A, // 13 bit multiplexed address bus
|
||||
output reg SDRAM_DQML, // two byte masks
|
||||
output reg SDRAM_DQMH, // two byte masks
|
||||
output reg [1:0] SDRAM_BA, // two banks
|
||||
output SDRAM_nCS, // a single chip select
|
||||
output SDRAM_nWE, // write enable
|
||||
output SDRAM_nRAS, // row address select
|
||||
output SDRAM_nCAS, // columns address select
|
||||
|
||||
// cpu/chipset interface
|
||||
input init_n, // init signal after FPGA config to initialize RAM
|
||||
input clk, // sdram clock
|
||||
|
||||
input port1_req,
|
||||
output reg port1_ack,
|
||||
input port1_we,
|
||||
input [23:1] port1_a,
|
||||
input [1:0] port1_ds,
|
||||
input [15:0] port1_d,
|
||||
|
||||
input [17:1] cpu1_addr,
|
||||
output reg [15:0] cpu1_q
|
||||
);
|
||||
|
||||
parameter MHZ = 80; // 80 MHz default clock, adjust to calculate the refresh rate correctly
|
||||
|
||||
localparam RASCAS_DELAY = 3'd1; // tRCD=20ns -> 2 cycles@<100MHz, 1 cycle @<50MHz
|
||||
localparam BURST_LENGTH = 3'b000; // 000=1, 001=2, 010=4, 011=8
|
||||
localparam ACCESS_TYPE = 1'b0; // 0=sequential, 1=interleaved
|
||||
localparam CAS_LATENCY = 3'd2; // 2/3 allowed
|
||||
localparam OP_MODE = 2'b00; // only 00 (standard operation) allowed
|
||||
localparam NO_WRITE_BURST = 1'b1; // 0= write burst enabled, 1=only single access write
|
||||
|
||||
localparam MODE = { 3'b000, NO_WRITE_BURST, OP_MODE, CAS_LATENCY, ACCESS_TYPE, BURST_LENGTH};
|
||||
|
||||
// 64ms/8192 rows = 7.8us
|
||||
localparam RFRSH_CYCLES = 16'd78*MHZ/10;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// ------------------------ cycle state machine ------------------------
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
SDRAM state machine
|
||||
1 word burst, CL2, <50MHz
|
||||
cmd issued registered
|
||||
0 RAS0
|
||||
1 CAS0
|
||||
2
|
||||
3
|
||||
4 data returned
|
||||
*/
|
||||
|
||||
localparam STATE_RAS0 = 3'd0; // first state in cycle
|
||||
localparam STATE_CAS0 = STATE_RAS0 + RASCAS_DELAY; // CAS phase - 3
|
||||
localparam STATE_READ0 = STATE_CAS0 + CAS_LATENCY + 1'd1; // 4
|
||||
localparam STATE_LAST = 3'd4;
|
||||
|
||||
reg [2:0] t;
|
||||
|
||||
always @(posedge clk) begin
|
||||
t <= t + 1'd1;
|
||||
if (t == STATE_LAST) t <= STATE_RAS0;
|
||||
end
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// --------------------------- startup/reset ---------------------------
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
// wait 1ms (32 8Mhz cycles) after FPGA config is done before going
|
||||
// into normal operation. Initialize the ram in the last 16 reset cycles (cycles 15-0)
|
||||
reg [4:0] reset;
|
||||
reg init = 1'b1;
|
||||
always @(posedge clk, negedge init_n) begin
|
||||
if(!init_n) begin
|
||||
reset <= 5'h1f;
|
||||
init <= 1'b1;
|
||||
end else begin
|
||||
if((t == STATE_LAST) && (reset != 0)) reset <= reset - 5'd1;
|
||||
init <= !(reset == 0);
|
||||
end
|
||||
end
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// ------------------ generate ram control signals ---------------------
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
// all possible commands
|
||||
localparam CMD_INHIBIT = 4'b1111;
|
||||
localparam CMD_NOP = 4'b0111;
|
||||
localparam CMD_ACTIVE = 4'b0011;
|
||||
localparam CMD_READ = 4'b0101;
|
||||
localparam CMD_WRITE = 4'b0100;
|
||||
localparam CMD_BURST_TERMINATE = 4'b0110;
|
||||
localparam CMD_PRECHARGE = 4'b0010;
|
||||
localparam CMD_AUTO_REFRESH = 4'b0001;
|
||||
localparam CMD_LOAD_MODE = 4'b0000;
|
||||
|
||||
reg [3:0] sd_cmd; // current command sent to sd ram
|
||||
reg [15:0] sd_din;
|
||||
// drive control signals according to current command
|
||||
assign SDRAM_nCS = sd_cmd[3];
|
||||
assign SDRAM_nRAS = sd_cmd[2];
|
||||
assign SDRAM_nCAS = sd_cmd[1];
|
||||
assign SDRAM_nWE = sd_cmd[0];
|
||||
|
||||
reg [24:1] addr_latch;
|
||||
reg [24:1] addr_latch_next;
|
||||
reg [15:0] din_latch;
|
||||
reg oe_latch;
|
||||
reg we_latch;
|
||||
reg [1:0] ds;
|
||||
|
||||
localparam PORT_NONE = 2'd0;
|
||||
localparam PORT_CPU1 = 2'd1;
|
||||
localparam PORT_REQ = 2'd2;
|
||||
|
||||
reg [2:0] next_port;
|
||||
reg [2:0] port;
|
||||
reg port1_state;
|
||||
reg [17:1] last_addr;
|
||||
|
||||
// PORT1
|
||||
always @(*) begin
|
||||
if (port1_req ^ port1_state) begin
|
||||
next_port = PORT_REQ;
|
||||
addr_latch_next = { 1'b0, port1_a };
|
||||
end else if (cpu1_addr != last_addr) begin
|
||||
next_port = PORT_CPU1;
|
||||
addr_latch_next = { 7'd0, cpu1_addr };
|
||||
end else begin
|
||||
next_port = PORT_NONE;
|
||||
addr_latch_next = addr_latch;
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
|
||||
SDRAM_DQ <= 16'bZZZZZZZZZZZZZZZZ;
|
||||
{ SDRAM_DQMH, SDRAM_DQML } <= 2'b11;
|
||||
sd_cmd <= CMD_NOP; // default: idle
|
||||
|
||||
if(init) begin
|
||||
// initialization takes place at the end of the reset phase
|
||||
if(t == STATE_RAS0) begin
|
||||
|
||||
if(reset == 15) begin
|
||||
sd_cmd <= CMD_PRECHARGE;
|
||||
SDRAM_A[10] <= 1'b1; // precharge all banks
|
||||
end
|
||||
|
||||
if(reset == 10 || reset == 8) begin
|
||||
sd_cmd <= CMD_AUTO_REFRESH;
|
||||
end
|
||||
|
||||
if(reset == 2) begin
|
||||
sd_cmd <= CMD_LOAD_MODE;
|
||||
SDRAM_A <= MODE;
|
||||
SDRAM_BA <= 2'b00;
|
||||
end
|
||||
end
|
||||
end else begin
|
||||
// RAS phase
|
||||
if(t == STATE_RAS0) begin
|
||||
addr_latch <= addr_latch_next;
|
||||
port <= next_port;
|
||||
{ oe_latch, we_latch } <= 2'b00;
|
||||
|
||||
if (next_port != PORT_NONE) begin
|
||||
sd_cmd <= CMD_ACTIVE;
|
||||
SDRAM_A <= addr_latch_next[22:10];
|
||||
SDRAM_BA <= addr_latch_next[24:23];
|
||||
if (next_port == PORT_REQ) begin
|
||||
{ oe_latch, we_latch } <= { ~port1_we, port1_we };
|
||||
ds <= port1_ds;
|
||||
din_latch <= port1_d;
|
||||
port1_state <= port1_req;
|
||||
end else begin
|
||||
{ oe_latch, we_latch } <= 2'b10;
|
||||
last_addr <= cpu1_addr;
|
||||
ds <= 2'b11;
|
||||
end
|
||||
end else begin
|
||||
sd_cmd <= CMD_AUTO_REFRESH;
|
||||
end
|
||||
end
|
||||
|
||||
// CAS phase
|
||||
if(t == STATE_CAS0 && (we_latch || oe_latch)) begin
|
||||
sd_cmd <= we_latch?CMD_WRITE:CMD_READ;
|
||||
{ SDRAM_DQMH, SDRAM_DQML } <= ~ds;
|
||||
if (we_latch) begin
|
||||
SDRAM_DQ <= din_latch;
|
||||
port1_ack <= port1_req;
|
||||
end
|
||||
SDRAM_A <= { 4'b0010, addr_latch[9:1] }; // auto precharge
|
||||
SDRAM_BA <= addr_latch[24:23];
|
||||
end
|
||||
|
||||
// data returned
|
||||
if(t == STATE_READ0 && oe_latch) cpu1_q <= SDRAM_DQ;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
63
Arcade_MiST/Namco Rally-X Hardware/rtl/spram.vhd
Normal file
63
Arcade_MiST/Namco Rally-X Hardware/rtl/spram.vhd
Normal file
@@ -0,0 +1,63 @@
|
||||
-- -----------------------------------------------------------------------
|
||||
--
|
||||
-- Syntiac's generic VHDL support files.
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
-- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com)
|
||||
-- http://www.syntiac.com/fpga64.html
|
||||
--
|
||||
-- Modified April 2016 by Dar (darfpga@aol.fr)
|
||||
-- http://darfpga.blogspot.fr
|
||||
-- Remove address register when writing
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
--
|
||||
-- spram.vhd
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
--
|
||||
-- generic ram.
|
||||
--
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
use IEEE.numeric_std.ALL;
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
entity spram is
|
||||
generic (
|
||||
dWidth : integer := 8;
|
||||
aWidth : integer := 10
|
||||
);
|
||||
port (
|
||||
clk : in std_logic;
|
||||
we : in std_logic := '0';
|
||||
addr : in std_logic_vector((aWidth-1) downto 0);
|
||||
d : in std_logic_vector((dWidth-1) downto 0) := (others => '0');
|
||||
q : out std_logic_vector((dWidth-1) downto 0)
|
||||
);
|
||||
end entity;
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
architecture rtl of spram is
|
||||
subtype addressRange is integer range 0 to ((2**aWidth)-1);
|
||||
type ramDef is array(addressRange) of std_logic_vector((dWidth-1) downto 0);
|
||||
signal ram: ramDef;
|
||||
begin
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
process(clk)
|
||||
begin
|
||||
if rising_edge(clk) then
|
||||
if we = '1' then
|
||||
ram(to_integer(unsigned(addr))) <= d;
|
||||
end if;
|
||||
q <= ram(to_integer(unsigned(addr)));
|
||||
end if;
|
||||
end process;
|
||||
|
||||
end architecture;
|
||||
|
||||
@@ -0,0 +1,428 @@
|
||||
---------------------------------------------------------------------------------
|
||||
-- Time pilot sound board by Dar (darfpga@aol.fr) (29/10/2017)
|
||||
-- http://darfpga.blogspot.fr
|
||||
---------------------------------------------------------------------------------
|
||||
-- gen_ram.vhd
|
||||
--------------------------------
|
||||
-- Copyright 2005-2008 by Peter Wendrich (pwsoft@syntiac.com)
|
||||
-- http://www.syntiac.com/fpga64.html
|
||||
---------------------------------------------------------------------------------
|
||||
-- T80/T80se - Version : 0247
|
||||
-----------------------------
|
||||
-- Z80 compatible microprocessor core
|
||||
-- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org)
|
||||
---------------------------------------------------------------------------------
|
||||
-- YM2149 (AY-3-8910)
|
||||
-- Copyright (c) MikeJ - Jan 2005
|
||||
---------------------------------------------------------------------------------
|
||||
-- Educational use only
|
||||
-- Do not redistribute synthetized file with roms
|
||||
-- Do not redistribute roms whatever the form
|
||||
-- Use at your own risk
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.std_logic_unsigned.all;
|
||||
use ieee.numeric_std.all;
|
||||
|
||||
entity time_pilot_sound_board is
|
||||
port(
|
||||
clock_14 : in std_logic;
|
||||
reset : in std_logic;
|
||||
|
||||
sound_cmd : in std_logic_vector(7 downto 0);
|
||||
sound_trig : in std_logic;
|
||||
|
||||
audio_out : out std_logic_vector(10 downto 0);
|
||||
|
||||
ROMCL : in std_logic;
|
||||
ROMAD : in std_logic_vector(12 downto 0);
|
||||
ROMDT : in std_logic_vector(7 downto 0);
|
||||
ROMEN : in std_logic
|
||||
);
|
||||
end time_pilot_sound_board;
|
||||
|
||||
architecture struct of time_pilot_sound_board is
|
||||
|
||||
signal reset_n: std_logic;
|
||||
signal clock_14n : std_logic;
|
||||
|
||||
signal clock_div1 : std_logic_vector(11 downto 0) := (others => '0');
|
||||
signal biquinary_div : std_logic_vector(3 downto 0) := (others => '0');
|
||||
|
||||
signal cpu_clock_en : std_logic;
|
||||
signal ayx_clock_en : std_logic;
|
||||
|
||||
signal cpu_addr : std_logic_vector(15 downto 0);
|
||||
signal cpu_di : std_logic_vector( 7 downto 0);
|
||||
signal cpu_do : std_logic_vector( 7 downto 0);
|
||||
signal cpu_rd_n : std_logic;
|
||||
signal cpu_wr_n : std_logic;
|
||||
signal cpu_mreq_n : std_logic;
|
||||
signal cpu_irq_n : std_logic;
|
||||
signal cpu_iorq_n : std_logic;
|
||||
signal cpu_m1_n : std_logic;
|
||||
|
||||
signal cpu_rom_do : std_logic_vector( 7 downto 0);
|
||||
signal wram_do : std_logic_vector( 7 downto 0);
|
||||
signal wram_we : std_logic;
|
||||
|
||||
signal clr_irq_n : std_logic;
|
||||
signal sen1_n : std_logic;
|
||||
signal sen2_n : std_logic;
|
||||
signal sen3_n : std_logic;
|
||||
signal sen4_n : std_logic;
|
||||
|
||||
signal sound_trig_r : std_logic;
|
||||
|
||||
signal ay1_do : std_logic_vector(7 downto 0);
|
||||
signal ay1_cs_n : std_logic;
|
||||
signal ay1_bdir : std_logic;
|
||||
signal ay1_bc1 : std_logic;
|
||||
signal ay1_audio_muxed : std_logic_vector(7 downto 0);
|
||||
signal ay1_audio_chan : std_logic_vector(1 downto 0);
|
||||
signal ay1_port_b_di : std_logic_vector(7 downto 0);
|
||||
|
||||
signal ay2_do : std_logic_vector(7 downto 0);
|
||||
signal ay2_cs_n : std_logic;
|
||||
signal ay2_bdir : std_logic;
|
||||
signal ay2_bc1 : std_logic;
|
||||
signal ay2_audio_muxed : std_logic_vector(7 downto 0);
|
||||
signal ay2_audio_chan : std_logic_vector(1 downto 0);
|
||||
|
||||
signal ay1_chan_a : std_logic_vector(7 downto 0);
|
||||
signal ay1_chan_b : std_logic_vector(7 downto 0);
|
||||
signal ay1_chan_c : std_logic_vector(7 downto 0);
|
||||
signal ay2_chan_a : std_logic_vector(7 downto 0);
|
||||
signal ay2_chan_b : std_logic_vector(7 downto 0);
|
||||
signal ay2_chan_c : std_logic_vector(7 downto 0);
|
||||
|
||||
signal filter_cmd_we : std_logic;
|
||||
signal filter_cmd : std_logic_vector(11 downto 0);
|
||||
signal mult_cmd : std_logic_vector(1 downto 0);
|
||||
signal mult_value : integer range 0 to 779;
|
||||
|
||||
signal Vc_1a : integer range -256*1024 to 256*1024-1;
|
||||
signal Vc_1b : integer range -256*1024 to 256*1024-1;
|
||||
signal Vc_1c : integer range -256*1024 to 256*1024-1;
|
||||
signal Vc_2a : integer range -256*1024 to 256*1024-1;
|
||||
signal Vc_2b : integer range -256*1024 to 256*1024-1;
|
||||
signal Vc_2c : integer range -256*1024 to 256*1024-1;
|
||||
signal Vc : integer range -256*1024 to 256*1024-1;
|
||||
signal Vin : integer range -256 to 255;
|
||||
signal dV : integer range -512 to 511;
|
||||
signal Vcn_a : integer range -1024*1024 to 1024*1024-1;
|
||||
signal Vcn_b : integer range -1024*1024 to 1024*1024-1;
|
||||
signal Vcn_c : integer range -256*1024 to 256*1024-1;
|
||||
|
||||
begin
|
||||
|
||||
clock_14n <= not clock_14;
|
||||
reset_n <= not reset;
|
||||
|
||||
--------------------------------------------------------
|
||||
-- RC filters equation
|
||||
--
|
||||
-- Vc : capacitor voltage = output voltage
|
||||
-- fs : sample frequency
|
||||
-- Vin : voltage at resistor input
|
||||
--
|
||||
-- Vc(k+1) = Vc(k) + (Vin-Vc(k))/(fs.R.C)
|
||||
--
|
||||
-- Vcn * 1024 <= Vcn * 1024 + (Vin-Vc) * 1024/(fs.R.C)
|
||||
-- With Vcn = 1024 * Vc
|
||||
--------------------------------------------------------
|
||||
-- Filters will be run at 14.318MHz/512 = 27.96KHz
|
||||
--------------------------------------------------------
|
||||
-- 6 filters have to be implemented
|
||||
-- RC equation is time multiplexed to save multiplier
|
||||
-- for small FPGA
|
||||
--------------------------------------------------------
|
||||
|
||||
-- mux Vc
|
||||
with clock_div1(3 downto 0) select
|
||||
Vc <= Vc_1a when X"0", -- Vc_xy : [0..255*1024]
|
||||
Vc_1b when X"1", -- => Vc : [-256*1024..255*1024]
|
||||
Vc_1c when X"2",
|
||||
Vc_2a when X"3",
|
||||
Vc_2b when X"4",
|
||||
Vc_2c when others;
|
||||
|
||||
-- mux Vin
|
||||
with clock_div1(3 downto 0) select
|
||||
Vin <= to_integer(unsigned(ay1_chan_a)) when X"0", -- ayx_chan_y : [0..255]
|
||||
to_integer(unsigned(ay1_chan_b)) when X"1", -- => Vin : [-256:255]
|
||||
to_integer(unsigned(ay1_chan_c)) when X"2",
|
||||
to_integer(unsigned(ay2_chan_a)) when X"3",
|
||||
to_integer(unsigned(ay2_chan_b)) when X"4",
|
||||
to_integer(unsigned(ay2_chan_c)) when others;
|
||||
|
||||
-- compute dV
|
||||
dV <= Vin-Vc/1024; -- Vc/1024 : [0..255], dv : [-255..511] => [-512..511]
|
||||
|
||||
-- mux filter cmd
|
||||
with clock_div1(3 downto 0) select
|
||||
mult_cmd <= filter_cmd( 7 downto 6) when X"0",
|
||||
filter_cmd( 9 downto 8) when X"1",
|
||||
filter_cmd(11 downto 10) when X"2",
|
||||
filter_cmd( 1 downto 0) when X"3",
|
||||
filter_cmd( 3 downto 2) when X"4",
|
||||
filter_cmd( 5 downto 4) when others;
|
||||
|
||||
-- mux multiplier value
|
||||
with mult_cmd select
|
||||
mult_value <= 779 when "10", -- 0.047uF/1KOhm => (1024/fs.R.C = 779, cut fcy 3386Hz)
|
||||
166 when "01", -- 0.220uF/1KOhm => (1024/fs.R.C = 166, cut fcy 723Hz)
|
||||
137 when "11", -- 0.267uF/1KOhm => (1024/fs.R.C = 137, cut fcy 596Hz)
|
||||
779 when others; -- Not use
|
||||
|
||||
-- compute Vcn
|
||||
Vcn_a <= Vin*1024 when mult_cmd = "00" else Vc + dv*mult_value; -- => Vcn_a : [-1024*1024..1023*1024]
|
||||
|
||||
-- limit to > 0
|
||||
Vcn_b <= 0 when Vcn_a < 0 else Vcn_a;
|
||||
|
||||
-- limit to < 255*1024
|
||||
Vcn_c <= 255*1024 when Vcn_b > 255*1024 else Vcn_b;
|
||||
|
||||
-- demux/store result and mix channels
|
||||
process (clock_14)
|
||||
begin
|
||||
if rising_edge(clock_14) then -- 14.318MHz/512 => fs = 27.96KHz
|
||||
|
||||
-- demux & down sample
|
||||
if clock_div1(8 downto 0) = '0'&X"00" then Vc_1a <= Vcn_c; end if;
|
||||
if clock_div1(8 downto 0) = '0'&X"01" then Vc_1b <= Vcn_c; end if;
|
||||
if clock_div1(8 downto 0) = '0'&X"02" then Vc_1c <= Vcn_c; end if;
|
||||
if clock_div1(8 downto 0) = '0'&X"03" then Vc_2a <= Vcn_c; end if;
|
||||
if clock_div1(8 downto 0) = '0'&X"04" then Vc_2b <= Vcn_c; end if;
|
||||
if clock_div1(8 downto 0) = '0'&X"05" then Vc_2c <= Vcn_c; end if;
|
||||
|
||||
-- rescale and mix channels with down sample
|
||||
if clock_div1(8 downto 0) = '0'&X"06" then
|
||||
audio_out <= std_logic_vector(to_unsigned(Vc_1a/1024,11)) +
|
||||
std_logic_vector(to_unsigned(Vc_1b/1024,11)) +
|
||||
std_logic_vector(to_unsigned(Vc_1c/1024,11)) +
|
||||
std_logic_vector(to_unsigned(Vc_2a/1024,11)) +
|
||||
std_logic_vector(to_unsigned(Vc_2b/1024,11)) +
|
||||
std_logic_vector(to_unsigned(Vc_2c/1024,11));
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
-- divide clocks
|
||||
-- random generator ?
|
||||
process (clock_14, reset)
|
||||
begin
|
||||
if reset='1' then
|
||||
clock_div1 <= (others =>'0');
|
||||
biquinary_div <= (others =>'0');
|
||||
else
|
||||
if rising_edge(clock_14) then
|
||||
clock_div1 <= clock_div1 + '1';
|
||||
|
||||
if clock_div1 = X"800" then
|
||||
if biquinary_div(3 downto 1) = "100" then
|
||||
biquinary_div(3 downto 1) <= "000";
|
||||
biquinary_div(0) <= not biquinary_div(0);
|
||||
else
|
||||
biquinary_div(3 downto 1) <= biquinary_div(3 downto 1) + '1';
|
||||
end if;
|
||||
end if;
|
||||
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- make clocks for cpu and sound generators
|
||||
cpu_clock_en <= '1' when clock_div1(2 downto 0) = "011" else '0';
|
||||
ayx_clock_en <= '1' when clock_div1(2 downto 0) = "111" else '0';
|
||||
|
||||
-- mux rom/ram/devices data ouput to cpu data input w.r.t cpu address
|
||||
cpu_di <= cpu_rom_do when cpu_addr(15 downto 13) = "000" and cpu_rd_n = '0' and cpu_mreq_n = '0' else -- 0000-1FFF
|
||||
wram_do when cpu_addr(15 downto 12) = "0010" and cpu_rd_n = '0' and cpu_mreq_n = '0' else -- 2000-2FFF
|
||||
ay1_do when cpu_addr(15 downto 13) = "010" and cpu_rd_n = '0' and cpu_mreq_n = '0' else -- 4000-5FFF
|
||||
ay2_do when cpu_addr(15 downto 13) = "011" and cpu_rd_n = '0' and cpu_mreq_n = '0' else -- 6000-7FFF
|
||||
X"FF";
|
||||
|
||||
-- write enable to working ram and filter command register
|
||||
wram_we <= '1' when cpu_wr_n = '0' and cpu_addr(15 downto 12) = "0010" else '0';
|
||||
filter_cmd_we <= '1' when cpu_wr_n = '0' and cpu_addr(15 downto 12) = "0011" else '0';
|
||||
|
||||
-- chip select with r/w direction to AY chips
|
||||
sen1_n <= '0' when cpu_mreq_n = '0' and cpu_addr(15 downto 12) = X"4" else '1';
|
||||
sen2_n <= '0' when cpu_mreq_n = '0' and cpu_addr(15 downto 12) = X"5" else '1';
|
||||
sen3_n <= '0' when cpu_mreq_n = '0' and cpu_addr(15 downto 12) = X"6" else '1';
|
||||
sen4_n <= '0' when cpu_mreq_n = '0' and cpu_addr(15 downto 12) = X"7" else '1';
|
||||
|
||||
-- finalise AY r/w & address controls
|
||||
ay1_bc1 <= not sen2_n or ( cpu_wr_n and not sen1_n);
|
||||
ay1_bdir <= not sen2_n or (not cpu_wr_n and not sen1_n);
|
||||
ay1_cs_n <= sen1_n and sen2_n;
|
||||
|
||||
ay2_bc1 <= not sen4_n or ( cpu_wr_n and not sen3_n);
|
||||
ay2_bdir <= not sen4_n or (not cpu_wr_n and not sen3_n);
|
||||
ay2_cs_n <= sen3_n and sen4_n;
|
||||
|
||||
-- input random (?) to AY1 chip
|
||||
ay1_port_b_di <= biquinary_div(0)&biquinary_div(3)&biquinary_div(2)&clock_div1(11)&"0000";
|
||||
|
||||
-- clear irq when reset and irq acknowledge
|
||||
clr_irq_n <= reset_n and (cpu_m1_n or cpu_iorq_n);
|
||||
|
||||
-- regsiter filters commands (11 bits data are cpu address)
|
||||
process (clock_14, cpu_clock_en)
|
||||
begin
|
||||
if rising_edge(clock_14) and cpu_clock_en = '1' then
|
||||
if filter_cmd_we = '1' then filter_cmd <= cpu_addr(11 downto 0); end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- latch sound trigger rising edge to set cpu_irq, and manage clear
|
||||
process (clock_14)
|
||||
begin
|
||||
if rising_edge(clock_14) then
|
||||
|
||||
sound_trig_r <= sound_trig;
|
||||
|
||||
if clr_irq_n = '0' then
|
||||
cpu_irq_n <= '1';
|
||||
else
|
||||
if sound_trig ='1' and sound_trig_r = '0' then
|
||||
cpu_irq_n <= '0';
|
||||
end if;
|
||||
end if;
|
||||
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- demux AY chips output
|
||||
process (clock_14, ayx_clock_en)
|
||||
begin
|
||||
if rising_edge(clock_14) and ayx_clock_en = '1' then
|
||||
if ay1_audio_chan = "00" then ay1_chan_a <= ay1_audio_muxed; end if;
|
||||
if ay1_audio_chan = "01" then ay1_chan_b <= ay1_audio_muxed; end if;
|
||||
if ay1_audio_chan = "10" then ay1_chan_c <= ay1_audio_muxed; end if;
|
||||
if ay2_audio_chan = "00" then ay2_chan_a <= ay2_audio_muxed; end if;
|
||||
if ay2_audio_chan = "01" then ay2_chan_b <= ay2_audio_muxed; end if;
|
||||
if ay2_audio_chan = "10" then ay2_chan_c <= ay2_audio_muxed; end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- microprocessor Z80
|
||||
cpu : entity work.T80se
|
||||
generic map(Mode => 0, T2Write => 1, IOWait => 1)
|
||||
port map(
|
||||
RESET_n => reset_n,
|
||||
CLK_n => clock_14,
|
||||
CLKEN => cpu_clock_en,
|
||||
WAIT_n => '1',
|
||||
INT_n => cpu_irq_n,
|
||||
NMI_n => '1',
|
||||
BUSRQ_n => '1',
|
||||
M1_n => cpu_m1_n,
|
||||
MREQ_n => cpu_mreq_n,
|
||||
IORQ_n => cpu_iorq_n,
|
||||
RD_n => cpu_rd_n,
|
||||
WR_n => cpu_wr_n,
|
||||
RFSH_n => open,
|
||||
HALT_n => open,
|
||||
BUSAK_n => open,
|
||||
A => cpu_addr,
|
||||
DI => cpu_di,
|
||||
DO => cpu_do
|
||||
);
|
||||
|
||||
-- cpu1 program ROM
|
||||
rom_cpu1 : entity work.dpram
|
||||
generic map( dWidth => 8, aWidth => 13)
|
||||
port map(
|
||||
clk_a => clock_14n,
|
||||
addr_a => cpu_addr(12 downto 0),
|
||||
we_a => '0',
|
||||
q_a => cpu_rom_do,
|
||||
clk_b => ROMCL,
|
||||
addr_b => ROMAD,
|
||||
we_b => ROMEN,
|
||||
d_b => ROMDT
|
||||
);
|
||||
|
||||
-- working RAM
|
||||
wram : entity work.spram
|
||||
generic map( dWidth => 8, aWidth => 10)
|
||||
port map(
|
||||
clk => clock_14n,
|
||||
we => wram_we,
|
||||
addr => cpu_addr(9 downto 0),
|
||||
d => cpu_do,
|
||||
q => wram_do
|
||||
);
|
||||
|
||||
-- AY-3-8910 #1
|
||||
ay_3_8910_1 : entity work.YM2149
|
||||
port map(
|
||||
-- data bus
|
||||
I_DA => cpu_do, -- in std_logic_vector(7 downto 0);
|
||||
O_DA => ay1_do, -- out std_logic_vector(7 downto 0);
|
||||
O_DA_OE_L => open, -- out std_logic;
|
||||
-- control
|
||||
I_A9_L => ay1_cs_n, -- in std_logic;
|
||||
I_A8 => '1', -- in std_logic;
|
||||
I_BDIR => ay1_bdir, -- in std_logic;
|
||||
I_BC2 => '1', -- in std_logic;
|
||||
I_BC1 => ay1_bc1, -- in std_logic;
|
||||
I_SEL_L => '1', -- in std_logic;
|
||||
|
||||
O_AUDIO => ay1_audio_muxed, -- out std_logic_vector(7 downto 0);
|
||||
O_CHAN => ay1_audio_chan, -- out std_logic_vector(1 downto 0);
|
||||
|
||||
-- port a
|
||||
I_IOA => sound_cmd, -- in std_logic_vector(7 downto 0);
|
||||
O_IOA => open, -- out std_logic_vector(7 downto 0);
|
||||
O_IOA_OE_L => open, -- out std_logic;
|
||||
-- port b
|
||||
I_IOB => ay1_port_b_di, -- in std_logic_vector(7 downto 0);
|
||||
O_IOB => open, -- out std_logic_vector(7 downto 0);
|
||||
O_IOB_OE_L => open, -- out std_logic;
|
||||
|
||||
ENA => ayx_clock_en, -- in std_logic; -- clock enable for higher speed operation
|
||||
RESET_L => reset_n, -- in std_logic;
|
||||
CLK => clock_14 -- in std_logic
|
||||
);
|
||||
|
||||
-- AY-3-8910 #2
|
||||
ay_3_8910_2 : entity work.YM2149
|
||||
port map(
|
||||
-- data bus
|
||||
I_DA => cpu_do, -- in std_logic_vector(7 downto 0);
|
||||
O_DA => ay2_do, -- out std_logic_vector(7 downto 0);
|
||||
O_DA_OE_L => open, -- out std_logic;
|
||||
-- control
|
||||
I_A9_L => ay2_cs_n, -- in std_logic;
|
||||
I_A8 => '1', -- in std_logic;
|
||||
I_BDIR => ay2_bdir, -- in std_logic;
|
||||
I_BC2 => '1', -- in std_logic;
|
||||
I_BC1 => ay2_bc1, -- in std_logic;
|
||||
I_SEL_L => '1', -- in std_logic;
|
||||
|
||||
O_AUDIO => ay2_audio_muxed, -- out std_logic_vector(7 downto 0);
|
||||
O_CHAN => ay2_audio_chan, -- out std_logic_vector(1 downto 0);
|
||||
|
||||
-- port a
|
||||
I_IOA => (others => '0'), -- in std_logic_vector(7 downto 0);
|
||||
O_IOA => open, -- out std_logic_vector(7 downto 0);
|
||||
O_IOA_OE_L => open, -- out std_logic;
|
||||
-- port b
|
||||
I_IOB => (others => '0'), -- in std_logic_vector(7 downto 0);
|
||||
O_IOB => open, -- out std_logic_vector(7 downto 0);
|
||||
O_IOB_OE_L => open, -- out std_logic;
|
||||
|
||||
ENA => ayx_clock_en, -- in std_logic; -- clock enable for higher speed operation
|
||||
RESET_L => reset_n, -- in std_logic;
|
||||
CLK => clock_14 -- in std_logic
|
||||
);
|
||||
|
||||
|
||||
end struct;
|
||||
Reference in New Issue
Block a user