diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.qsf b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.qsf index 8938f2a8..d88e9354 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.qsf +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.qsf @@ -40,7 +40,7 @@ # Project-Wide Assignments # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.0.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 "19:48:06 MAY 24,2017" set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files @@ -158,7 +158,7 @@ set_global_assignment -name GENERATE_RBF_FILE ON # SignalTap II Assignments # ======================== set_global_assignment -name ENABLE_SIGNALTAP OFF -set_global_assignment -name USE_SIGNALTAP_FILE output_files/druaga.stp +set_global_assignment -name USE_SIGNALTAP_FILE output_files/nk.stp # Power Estimation Assignments # ============================ @@ -220,34 +220,27 @@ set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SPI_DO 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 VHDL_FILE rtl/dpram.vhd +set_global_assignment -name VERILOG_FILE rtl/ninjakun_sprite.v set_global_assignment -name SYSTEMVERILOG_FILE rtl/NinjaKun_MiST.sv set_global_assignment -name VERILOG_FILE rtl/ninjakun_top.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_main.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_io_video.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_video.v set_global_assignment -name VERILOG_FILE rtl/hvgen.v -set_global_assignment -name VERILOG_FILE rtl/ninjakun_bg.v -set_global_assignment -name VERILOG_FILE rtl/ninjakun_fg.v -set_global_assignment -name VERILOG_FILE rtl/ninjakun_sp.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_psg.v set_global_assignment -name VHDL_FILE rtl/YM2149_linmix_sep.vhd set_global_assignment -name VERILOG_FILE rtl/ninjakun_cpumux.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_irqgen.v -set_global_assignment -name VERILOG_FILE rtl/ninjakun_clkgen.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_input.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_sadec.v set_global_assignment -name VERILOG_FILE rtl/ninjakun_adec.v set_global_assignment -name VERILOG_FILE rtl/dataselector_3D_8B.v set_global_assignment -name VERILOG_FILE rtl/dataselector_4D_9B.v set_global_assignment -name VERILOG_FILE rtl/dataselector_5D_8B.v -set_global_assignment -name VHDL_FILE rtl/rom/fg4_rom.vhd -set_global_assignment -name VHDL_FILE rtl/rom/fg3_rom.vhd -set_global_assignment -name VHDL_FILE rtl/rom/fg2_rom.vhd -set_global_assignment -name VHDL_FILE rtl/rom/fg1_rom.vhd set_global_assignment -name VERILOG_FILE rtl/z80ip.v set_global_assignment -name VERILOG_FILE rtl/pll.v set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv -set_global_assignment -name VERILOG_FILE rtl/mems.v set_global_assignment -name QIP_FILE ../../../common/mist/mist.qip set_global_assignment -name QIP_FILE ../../../common/CPU/T80/T80.qip set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.sdc b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.sdc new file mode 100644 index 00000000..80fe5371 --- /dev/null +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/NinjaKun_MiST.sdc @@ -0,0 +1,134 @@ +## Generated SDC file "vectrex_MiST.out.sdc" + +## Copyright (C) 1991-2013 Altera Corporation +## Your use of Altera Corporation's design tools, logic functions +## and other software and tools, and its AMPP partner logic +## functions, and any output files from any of the foregoing +## (including device programming or simulation files), and any +## associated documentation or information are expressly subject +## to the terms and conditions of the Altera Program License +## Subscription Agreement, Altera MegaCore Function License +## Agreement, or other applicable license agreement, including, +## without limitation, that your use is for the sole purpose of +## programming logic devices manufactured by Altera and sold by +## Altera or its authorized distributors. Please refer to the +## applicable agreement for further details. + + +## VENDOR "Altera" +## PROGRAM "Quartus II" +## VERSION "Version 13.1.0 Build 162 10/23/2013 SJ Web Edition" + +## DATE "Sun Jun 24 12:53:00 2018" + +## +## DEVICE "EP3C25E144C8" +## + +# Clock constraints + +# Automatically constrain PLL and other generated clocks +derive_pll_clocks -create_base_clocks + +# Automatically calculate clock uncertainty to jitter and other effects. +derive_clock_uncertainty + +# tsu/th constraints + +# tco constraints + +# tpd constraints + +#************************************************************** +# Time Information +#************************************************************** + +set_time_format -unit ns -decimal_places 3 + + + +#************************************************************** +# Create Clock +#************************************************************** + +create_clock -name {SPI_SCK} -period 41.666 -waveform { 20.8 41.666 } [get_ports {SPI_SCK}] + +set sys_clk "pll|altpll_component|auto_generated|pll1|clk[0]" +set sdram_clk "pll|altpll_component|auto_generated|pll1|clk[0]" +#************************************************************** +# Create Generated Clock +#************************************************************** + + +#************************************************************** +# Set Clock Latency +#************************************************************** + + + +#************************************************************** +# Set Clock Uncertainty +#************************************************************** + +#************************************************************** +# Set Input Delay +#************************************************************** + +set_input_delay -add_delay -clock_fall -clock [get_clocks {CLOCK_27}] 1.000 [get_ports {CLOCK_27}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {CONF_DATA0}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_DI}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SCK}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS2}] +set_input_delay -add_delay -clock_fall -clock [get_clocks {SPI_SCK}] 1.000 [get_ports {SPI_SS3}] + +set_input_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -max 6.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 $sys_clk] 1.000 [get_ports {AUDIO_L}] +set_output_delay -add_delay -clock_fall -clock [get_clocks $sys_clk] 1.000 [get_ports {AUDIO_R}] +set_output_delay -add_delay -clock_fall -clock [get_clocks $sys_clk] 1.000 [get_ports {LED}] +set_output_delay -add_delay -clock_fall -clock [get_clocks $sys_clk] 1.000 [get_ports {VGA_*}] + +set_output_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -max 1.5 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] +set_output_delay -clock [get_clocks $sdram_clk] -reference_pin [get_ports {SDRAM_CLK}] -min -0.8 [get_ports {SDRAM_D* SDRAM_A* SDRAM_BA* SDRAM_n* SDRAM_CKE}] + +#************************************************************** +# Set Clock Groups +#************************************************************** + +set_clock_groups -asynchronous -group [get_clocks {SPI_SCK}] -group [get_clocks {pll|altpll_component|auto_generated|pll1|clk[*]}] + +#************************************************************** +# Set False Path +#************************************************************** + + + +#************************************************************** +# Set Multicycle Path +#************************************************************** + +set_multicycle_path -to {VGA_*[*]} -setup 2 +set_multicycle_path -to {VGA_*[*]} -hold 1 + +#************************************************************** +# Set Maximum Delay +#************************************************************** + + + +#************************************************************** +# Set Minimum Delay +#************************************************************** + + + +#************************************************************** +# Set Input Transition +#************************************************************** + diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv index b10550c3..c3e3287e 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/NinjaKun_MiST.sv @@ -25,7 +25,6 @@ module NinjaKun_MiST ( output [1:0] SDRAM_BA, output SDRAM_CLK, output SDRAM_CKE - ); `include "rtl\build_id.v" @@ -33,7 +32,8 @@ module NinjaKun_MiST ( localparam CONF_STR = { "NINJAKUN;ROM;", "O2,Rotate Controls,Off,On;", - "O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;", + "O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;", + "O5,Blend,Off,On;", "O8,Difficulty,Normal,Hard;", "O9A,Lives,4,3,2,5;", "OB,1st Extra,30000,40000;", @@ -43,13 +43,13 @@ localparam CONF_STR = { "OH,Endless(If Free Play),No,Yes;", "OE,Demo Sound,Off,On;", "OI,Name Letters,8,3;", - "T6,Reset;", + "T0,Reset;", "V,v1.00.",`BUILD_DATE }; assign LED = ~ioctl_downl; assign AUDIO_R = AUDIO_L; -assign SDRAM_CLK = ~CLOCK_48; +assign SDRAM_CLK = CLOCK_48; assign SDRAM_CKE = 1; wire CLOCK_48, pll_locked; @@ -62,33 +62,33 @@ pll pll( 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 [15:0] audio; -wire hs, vs; +wire [15:0] audio; +wire hs, vs; wire [3:0] r, g, b; -wire [14:0] cpu1_rom_addr, cpu2_rom_addr; -wire [15:0] cpu1_rom_do, cpu2_rom_do; -//wire [12:0] sp_rom_addr; -//wire [31:0] sp_rom_do; -//wire [12:0] fg_rom_addr; -//wire [31:0] fg_rom_do; -wire [12:0] bg_rom_addr; -wire [31:0] bg_rom_do; +wire key_strobe; +wire key_pressed; +wire [7:0] key_code; + wire ioctl_downl; wire [7:0] ioctl_index; wire ioctl_wr; wire [24:0] ioctl_addr; wire [7:0] ioctl_dout; -wire key_strobe; -wire key_pressed; -wire [7:0] key_code; + +/* +ROM Structure (same as the original) +fg gfx 32k ninja-6.7n ninja-7.7p ninja-8.7s ninja-9.7t +bg gfx 32k ninja-10.2c ninja-11.2d ninja-12.4c ninja-13.4d +cpu1 32k ninja-1.7a ninja-2.7b ninja-3.7d ninja-4.7e +cpu2 32k ninja-5.7h ninja-2.7b ninja-3.7d ninja-4.7e +*/ data_io data_io( - .clk_sys ( CLOCK_48 ), + .clk_sys ( CLOCK_48 ), .SPI_SCK ( SPI_SCK ), .SPI_SS2 ( SPI_SS2 ), .SPI_DI ( SPI_DI ), @@ -99,42 +99,56 @@ data_io data_io( .ioctl_dout ( ioctl_dout ) ); -wire [24:0] sp_ioctl_addr = ioctl_addr - 17'h10000; +wire [24:0] cpu_ioctl_addr = ioctl_addr - 17'h10000; +reg port1_req, port2_req; + +wire [14:0] cpu1_rom_addr, cpu2_rom_addr; +wire [15:0] cpu1_rom_do, cpu2_rom_do; +wire [12:0] sp_rom_addr; +wire [31:0] sp_rom_do; +wire sp_rdy; +wire [12:0] fg_rom_addr; +wire [31:0] fg_rom_do; +wire [12:0] bg_rom_addr; +wire [31:0] bg_rom_do; -reg port1_req, port2_req; sdram sdram( .*, .init_n ( pll_locked ), - .clk ( CLOCK_48 ), + .clk ( CLOCK_48 ), - // port1 used for main + sound CPU + // port1 used for main + aux CPU .port1_req ( port1_req ), .port1_ack ( ), - .port1_a ( ioctl_addr[23:1] ), - .port1_ds ( {ioctl_addr[0], ~ioctl_addr[0]} ), + .port1_a ( cpu_ioctl_addr[23:1] ), + .port1_ds ( {cpu_ioctl_addr[0], ~cpu_ioctl_addr[0]} ), .port1_we ( ioctl_downl ), .port1_d ( {ioctl_dout, ioctl_dout} ), .port1_q ( ), .cpu1_addr ( ioctl_downl ? 16'hffff : {1'b0, cpu1_rom_addr[14:1]} ), .cpu1_q ( cpu1_rom_do ), - .cpu2_addr ( ioctl_downl ? 16'hffff : (16'h4000 + cpu2_rom_addr[14:1]) ), + .cpu2_addr ( ioctl_downl ? 16'hffff : {1'b1, cpu2_rom_addr[14:1]} ), .cpu2_q ( cpu2_rom_do ), - // port2 for sprite graphics + // port2 for graphics .port2_req ( port2_req ), .port2_ack ( ), - .port2_a ( {sp_ioctl_addr[12:0], sp_ioctl_addr[14]} ), - .port2_ds ( {sp_ioctl_addr[13], ~sp_ioctl_addr[13]} ), + .port2_a ( {ioctl_addr[23:15], ioctl_addr[14], ioctl_addr[12:0]} ), + .port2_ds ( {ioctl_addr[13], ~ioctl_addr[13]} ), .port2_we ( ioctl_downl ), .port2_d ( {ioctl_dout, ioctl_dout} ), .port2_q ( ), - .sp_addr ( ioctl_downl ? 15'h7fff : bg_rom_addr ), - .sp_q ( bg_rom_do ) + .fg_addr ( ioctl_downl ? 15'h7fff : {1'b0, fg_rom_addr} ), + .fg_q ( fg_rom_do ), + .sp_addr ( ioctl_downl ? 15'h7fff : {1'b0, sp_rom_addr} ), + .sp_q ( sp_rom_do ), + .sp_rdy ( sp_rdy ), + .bg_addr ( ioctl_downl ? 15'h7fff : {1'b1, bg_rom_addr} ), + .bg_q ( bg_rom_do ) ); - // ROM download controller always @(posedge CLOCK_48) begin reg ioctl_wr_last = 0; @@ -148,19 +162,19 @@ always @(posedge CLOCK_48) begin end end - reg reset = 1; reg rom_loaded = 0; always @(posedge CLOCK_48) begin reg ioctl_downlD; ioctl_downlD <= ioctl_downl; if (ioctl_downlD & ~ioctl_downl) rom_loaded <= 1; - reset <= status[0] | buttons[1] | status[6] | ~rom_loaded; + reset <= status[0] | buttons[1] | ~rom_loaded; end -wire PCLK; +wire PCLK_EN; wire [8:0] HPOS,VPOS; -wire [11:0] POUT; +wire [11:0] POUT; + ninjakun_top ninjakun_top( .RESET(reset), .MCLK(CLOCK_48), @@ -170,42 +184,44 @@ ninjakun_top ninjakun_top( .DSW2({~status[17], ~status[16], 1'b0, ~status[15], ~status[18], 3'b111}), .PH(HPOS), .PV(VPOS), - .PCLK(PCLK), + .PCLK_EN(PCLK_EN), .POUT(oPIX), .SNDOUT(audio), .CPU1ADDR(cpu1_rom_addr), .CPU1DT(cpu1_rom_addr[0] ? cpu1_rom_do[15:8] : cpu1_rom_do[7:0]), .CPU2ADDR(cpu2_rom_addr), .CPU2DT(cpu2_rom_addr[0] ? cpu2_rom_do[15:8] : cpu2_rom_do[7:0]), -// .sp_rom_addr(sp_rom_addr), -// .sp_rom_data(sp_rom_do), -// .fg_rom_addr(fg_rom_addr), -// .fg_rom_data(sp_rom_do), + .sp_rom_addr(sp_rom_addr), + .sp_rom_data(sp_rom_do), + .sp_rdy(sp_rdy), + .fg_rom_addr(fg_rom_addr), + .fg_rom_data(fg_rom_do), .bg_rom_addr(bg_rom_addr), .bg_rom_data(bg_rom_do) ); wire [7:0] oPIX; assign POUT = {{oPIX[7:6],oPIX[1:0]},{oPIX[5:4],oPIX[1:0]},{oPIX[3:2],oPIX[1:0]}}; - + hvgen hvgen( + .CLK(CLOCK_48), + .PCLK_EN(PCLK_EN), .HPOS(HPOS), .VPOS(VPOS), - .PCLK(PCLK), .iRGB(POUT), - .oRGB({r,g,b}), + .oRGB({b,g,r}), .HSYN(hs), .VSYN(vs) ); - + mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(11)) mist_video( .clk_sys ( CLOCK_48 ), .SPI_SCK ( SPI_SCK ), .SPI_SS3 ( SPI_SS3 ), .SPI_DI ( SPI_DI ), - .R ( r ), - .G ( g ), - .B ( b ), + .R ( r ), + .G ( g ), + .B ( b ), .HSync ( hs ), .VSync ( vs ), .VGA_R ( VGA_R ), @@ -214,7 +230,8 @@ mist_video #(.COLOR_DEPTH(4), .SD_HCNT_WIDTH(11)) mist_video( .VGA_VS ( VGA_VS ), .VGA_HS ( VGA_HS ), .rotate ( {1'b1,status[2]} ), - .ce_divider (1), + .ce_divider ( 1'b1 ), + .blend ( status[5] ), .scandoubler_disable( scandoublerD ), .scanlines ( status[4:3] ), .ypbpr ( ypbpr ) @@ -248,8 +265,8 @@ dac #(.C_bits(16))dac( // Rotated Normal //wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3]; //wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2]; -wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1]; -wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0]; +wire m_left = status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1]; +wire m_right = status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0]; wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4]; wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5]; @@ -265,9 +282,7 @@ reg btn_fire2 = 0; reg btn_coin = 0; always @(posedge CLOCK_48) begin - reg old_state; - old_state <= key_strobe; - if(old_state != key_strobe) begin + if(key_strobe) begin case(key_code) 'h75: btn_up <= key_pressed; // up 'h72: btn_down <= key_pressed; // down diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/dpram.vhd b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/dpram.vhd index 9ea85a26..284194c5 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/dpram.vhd +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/dpram.vhd @@ -1,130 +1,81 @@ -LIBRARY ieee; -USE ieee.std_logic_1164.all; +-- ----------------------------------------------------------------------- +-- +-- 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 altera_mf; -USE altera_mf.all; +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.numeric_std.ALL; -ENTITY dpram IS - GENERIC - ( - init_file : string := ""; - widthad_a : natural; - width_a : natural := 8; - outdata_reg_a : string := "UNREGISTERED"; - outdata_reg_b : string := "UNREGISTERED" +-- ----------------------------------------------------------------------- + +entity dpram is + generic ( + dWidth : integer := 8; + aWidth : integer := 10 ); - 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) + 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 dpram; +end entity; +-- ----------------------------------------------------------------------- -ARCHITECTURE SYN OF dpram IS +architecture rtl of dpram is + subtype addressRange is integer range 0 to ((2**aWidth)-1); + type ramDef is array(addressRange) of std_logic_vector((dWidth-1) downto 0); + signal ram: ramDef; + signal addr_a_reg: std_logic_vector((aWidth-1) downto 0); + signal addr_b_reg: std_logic_vector((aWidth-1) downto 0); +begin - SIGNAL sub_wire0 : STD_LOGIC_VECTOR (width_a-1 DOWNTO 0); - SIGNAL sub_wire1 : STD_LOGIC_VECTOR (width_a-1 DOWNTO 0); +-- ----------------------------------------------------------------------- + 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; - - 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; - read_during_write_mode_port_a : STRING; - read_during_write_mode_port_b : 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_a, - power_up_uninitialized => "FALSE", - read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", - read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", - 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; diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/hvgen.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/hvgen.v index f3c90116..8fc63e5d 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/hvgen.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/hvgen.v @@ -1,8 +1,9 @@ module hvgen ( + input CLK, + input PCLK_EN, output [8:0] HPOS, output [8:0] VPOS, - input PCLK, input [11:0] iRGB, output reg [11:0] oRGB, output reg HBLK = 1, @@ -14,28 +15,30 @@ module hvgen reg [8:0] hcnt = 0; reg [8:0] vcnt = 0; -assign HPOS = hcnt-16; -assign VPOS = vcnt-16; +assign HPOS = hcnt-9'd16; +assign VPOS = vcnt-9'd16; -always @(posedge PCLK) begin - case (hcnt) - 15: begin HBLK <= 0; hcnt <= hcnt+1; end - 272: begin HBLK <= 1; hcnt <= hcnt+1; end - 311: begin HSYN <= 0; hcnt <= hcnt+1; end - 342: begin HSYN <= 1; hcnt <= 471; end - 511: begin hcnt <= 0; - case (vcnt) - 15: begin VBLK <= 0; vcnt <= vcnt+1; end - 207: begin VBLK <= 1; vcnt <= vcnt+1; end - 226: begin VSYN <= 0; vcnt <= vcnt+1; end - 233: begin VSYN <= 1; vcnt <= 483; end - 511: begin vcnt <= 0; end - default: vcnt <= vcnt+1; - endcase - end - default: hcnt <= hcnt+1; - endcase - oRGB <= (HBLK|VBLK) ? 12'h0 : iRGB; +always @(posedge CLK) begin + if (PCLK_EN) begin + case (hcnt) + 15: begin HBLK <= 0; hcnt <= hcnt+1'd1; end + 272: begin HBLK <= 1; hcnt <= hcnt+1'd1; end + 311: begin HSYN <= 0; hcnt <= hcnt+1'd1; end + 342: begin HSYN <= 1; hcnt <= 471; end + 511: begin hcnt <= 0; + case (vcnt) + 15: begin VBLK <= 0; vcnt <= vcnt+1'd1; end + 207: begin VBLK <= 1; vcnt <= vcnt+1'd1; end + 226: begin VSYN <= 0; vcnt <= vcnt+1'd1; end + 233: begin VSYN <= 1; vcnt <= 483; end + 511: begin vcnt <= 0; end + default: vcnt <= vcnt+1'd1; + endcase + end + default: hcnt <= hcnt+1'd1; + endcase + oRGB <= (HBLK|VBLK) ? 12'h0 : iRGB; + end end endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/mems.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/mems.v deleted file mode 100644 index e143d0d8..00000000 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/mems.v +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright (c) 2011 MiSTer-X - -module VDPRAM400x2 -( - input CL0, - input [10:0] AD0, - input WR0, - input [7:0] WD0, - output [7:0] RD0, - - input CL1, - input [9:0] AD1, - output [15:0] RD1 -); - -reg A10; -always @( posedge CL0 ) A10 <= AD0[10]; - -wire [7:0] RD00, RD01; -DPRAM400 LS( CL0, AD0[9:0], WR0 & (~AD0[10]), WD0, RD00, CL1, AD1, 1'b0, 8'h0, RD1[ 7:0] ); -DPRAM400 HS( CL0, AD0[9:0], WR0 & ( AD0[10]), WD0, RD01, CL1, AD1, 1'b0, 8'h0, RD1[15:8] ); - -assign RD0 = A10 ? RD01 : RD00; - -endmodule - - -module DPRAM800 -( - input CL0, - input [10:0] AD0, - input WE0, - input [7:0] WD0, - output reg [7:0] RD0, - - input CL1, - input [10:0] AD1, - input WE1, - input [7:0] WD1, - output reg [7:0] RD1 -); - -reg [7:0] core[0:2047]; - -always @( posedge CL0 ) begin - if (WE0) core[AD0] <= WD0; - RD0 <= core[AD0]; -end - -always @( posedge CL1 ) begin - if (WE1) core[AD1] <= WD1; - RD1 <= core[AD1]; -end - -endmodule - - -module DPRAM400 -( - input CL0, - input [9:0] AD0, - input WE0, - input [7:0] WD0, - output reg [7:0] RD0, - - input CL1, - input [9:0] AD1, - input WE1, - input [7:0] WD1, - output reg [7:0] RD1 -); - -reg [7:0] core[0:1023]; - -always @( posedge CL0 ) begin - if (WE0) core[AD0] <= WD0; - RD0 <= core[AD0]; -end - -always @( posedge CL1 ) begin - if (WE1) core[AD1] <= WD1; - RD1 <= core[AD1]; -end - -endmodule - - -module DPRAM200 -( - input CL0, - input [8:0] AD0, - input WE0, - input [7:0] WD0, - output reg [7:0] RD0, - - input CL1, - input [8:0] AD1, - input WE1, - input [7:0] WD1, - output reg [7:0] RD1 -); - -reg [7:0] core[0:511]; - -always @( posedge CL0 ) begin - if (WE0) core[AD0] <= WD0; - RD0 <= core[AD0]; -end - -always @( posedge CL1 ) begin - if (WE1) core[AD1] <= WD1; - RD1 <= core[AD1]; -end - -endmodule - -// synopsys translate_off -`timescale 1 ps / 1 ps -// synopsys translate_on -module DPRAM1024 ( - address_a, - address_b, - clock_a, - clock_b, - data_a, - data_b, - wren_a, - wren_b, - q_a, - q_b); - - input [9:0] address_a; - input [9:0] address_b; - input clock_a; - input clock_b; - input [7:0] data_a; - input [7:0] data_b; - input wren_a; - input wren_b; - output [7:0] q_a; - output [7:0] q_b; -`ifndef ALTERA_RESERVED_QIS -// synopsys translate_off -`endif - tri1 clock_a; - tri0 wren_a; - tri0 wren_b; -`ifndef ALTERA_RESERVED_QIS -// synopsys translate_on -`endif - - wire [7:0] sub_wire0; - wire [7:0] sub_wire1; - wire [7:0] q_a = sub_wire0[7:0]; - wire [7:0] q_b = sub_wire1[7:0]; - - altsyncram altsyncram_component ( - .address_a (address_a), - .address_b (address_b), - .clock0 (clock_a), - .clock1 (clock_b), - .data_a (data_a), - .data_b (data_b), - .wren_a (wren_a), - .wren_b (wren_b), - .q_a (sub_wire0), - .q_b (sub_wire1), - .aclr0 (1'b0), - .aclr1 (1'b0), - .addressstall_a (1'b0), - .addressstall_b (1'b0), - .byteena_a (1'b1), - .byteena_b (1'b1), - .clocken0 (1'b1), - .clocken1 (1'b1), - .clocken2 (1'b1), - .clocken3 (1'b1), - .eccstatus (), - .rden_a (1'b1), - .rden_b (1'b1)); - defparam - altsyncram_component.address_reg_b = "CLOCK1", - altsyncram_component.clock_enable_input_a = "BYPASS", - altsyncram_component.clock_enable_input_b = "BYPASS", - altsyncram_component.clock_enable_output_a = "BYPASS", - altsyncram_component.clock_enable_output_b = "BYPASS", - altsyncram_component.indata_reg_b = "CLOCK1", - altsyncram_component.intended_device_family = "Cyclone III", - altsyncram_component.lpm_type = "altsyncram", - altsyncram_component.numwords_a = 1024, - altsyncram_component.numwords_b = 1024, - altsyncram_component.operation_mode = "BIDIR_DUAL_PORT", - altsyncram_component.outdata_aclr_a = "NONE", - altsyncram_component.outdata_aclr_b = "NONE", - altsyncram_component.outdata_reg_a = "CLOCK0", - altsyncram_component.outdata_reg_b = "CLOCK1", - altsyncram_component.power_up_uninitialized = "FALSE", - altsyncram_component.ram_block_type = "M9K", - altsyncram_component.read_during_write_mode_port_a = "NEW_DATA_NO_NBE_READ", - altsyncram_component.read_during_write_mode_port_b = "NEW_DATA_NO_NBE_READ", - altsyncram_component.widthad_a = 10, - altsyncram_component.widthad_b = 10, - altsyncram_component.width_a = 8, - altsyncram_component.width_b = 8, - altsyncram_component.width_byteena_a = 1, - altsyncram_component.width_byteena_b = 1, - altsyncram_component.wrcontrol_wraddress_reg_b = "CLOCK1"; - - -endmodule - -// synopsys translate_off -`timescale 1 ps / 1 ps -// synopsys translate_on -module fg_sp_dulport_rom ( - address_a, - address_b, - clock_a, - clock_b, - q_a, - q_b); - - input [12:0] address_a; - input [12:0] address_b; - input clock_a; - input clock_b; - output [31:0] q_a; - output [31:0] q_b; -`ifndef ALTERA_RESERVED_QIS -// synopsys translate_off -`endif - tri1 clock_a; -`ifndef ALTERA_RESERVED_QIS -// synopsys translate_on -`endif - - wire [31:0] sub_wire0; - wire [31:0] sub_wire1; - wire sub_wire2 = 1'h0; - wire [31:0] sub_wire3 = 32'h0; - wire [31:0] q_b = sub_wire0[31:0]; - wire [31:0] q_a = sub_wire1[31:0]; - - altsyncram altsyncram_component ( - .clock0 (clock_a), - .wren_a (sub_wire2), - .address_b (address_b), - .clock1 (clock_b), - .data_b (sub_wire3), - .wren_b (sub_wire2), - .address_a (address_a), - .data_a (sub_wire3), - .q_b (sub_wire0), - .q_a (sub_wire1) - // synopsys translate_off - , - .aclr0 (), - .aclr1 (), - .addressstall_a (), - .addressstall_b (), - .byteena_a (), - .byteena_b (), - .clocken0 (), - .clocken1 (), - .clocken2 (), - .clocken3 (), - .eccstatus (), - .rden_a (), - .rden_b () - // synopsys translate_on - ); - defparam - altsyncram_component.address_reg_b = "CLOCK1", - altsyncram_component.clock_enable_input_a = "BYPASS", - altsyncram_component.clock_enable_input_b = "BYPASS", - altsyncram_component.clock_enable_output_a = "BYPASS", - altsyncram_component.clock_enable_output_b = "BYPASS", - altsyncram_component.indata_reg_b = "CLOCK1", -`ifdef NO_PLI - altsyncram_component.init_file = "./rom/gfx1.rif" -`else - altsyncram_component.init_file = "./rom/gfx1.hex" -`endif -, - altsyncram_component.intended_device_family = "Cyclone III", - altsyncram_component.lpm_type = "altsyncram", - altsyncram_component.numwords_a = 8192, - altsyncram_component.numwords_b = 8192, - altsyncram_component.operation_mode = "BIDIR_DUAL_PORT", - altsyncram_component.outdata_aclr_a = "NONE", - altsyncram_component.outdata_aclr_b = "NONE", - altsyncram_component.outdata_reg_a = "CLOCK0", - altsyncram_component.outdata_reg_b = "CLOCK1", - altsyncram_component.power_up_uninitialized = "FALSE", - altsyncram_component.ram_block_type = "M9K", - altsyncram_component.widthad_a = 13, - altsyncram_component.widthad_b = 13, - altsyncram_component.width_a = 32, - altsyncram_component.width_b = 32, - altsyncram_component.width_byteena_a = 1, - altsyncram_component.width_byteena_b = 1, - altsyncram_component.wrcontrol_wraddress_reg_b = "CLOCK1"; - - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_bg.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_bg.v deleted file mode 100644 index fa24729e..00000000 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_bg.v +++ /dev/null @@ -1,44 +0,0 @@ -// BackGround Scanline Generator -module ninjakun_bg -( - input VCLK, - - input [8:0] PH, // CRTC - input [8:0] PV, - - input [7:0] BGSCX, // SCRREG - input [7:0] BGSCY, - - output reg [9:0] BGVAD, // VRAM - input [15:0] BGVDT, - - output reg [12:0] BGCAD, - input [31:0] BGCDT, - - output [8:0] BGOUT // OUTPUT -); - -wire [8:0] POSH = PH+BGSCX+2; -wire [8:0] POSV = PV+BGSCY+32; - -wire [9:0] CHRNO = {BGVDT[15:14],BGVDT[7:0]}; -reg [31:0] CDT; - -reg [3:0] PAL; -reg [3:0] OUT; -always @( posedge VCLK ) begin - case(POSH[2:0]) - 0: begin OUT <= CDT[7:4] ; PAL <= BGVDT[11:8]; end - 1: begin OUT <= CDT[3:0] ; BGVAD <= {POSV[7:3],POSH[7:3]}; end - 2: begin OUT <= CDT[15:12]; end - 3: begin OUT <= CDT[11:8] ; end - 4: begin OUT <= CDT[23:20]; BGCAD <= {CHRNO,POSV[2:0]}; end - 5: begin OUT <= CDT[19:16]; end - 6: begin OUT <= CDT[31:28]; end - 7: begin OUT <= CDT[27:24]; CDT <= BGCDT; end - endcase -end - -assign BGOUT = { 1'b1, PAL, OUT }; - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_clkgen.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_clkgen.v deleted file mode 100644 index ee7cc864..00000000 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_clkgen.v +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2011 MiSTer-X - -module ninjakun_clkgen -( - input MCLK, // 48MHz - - output VCLKx4, - output VCLK, - output VRAMCL, - output PCLK, - output CLK24M, - output CLK12M, - output CLK6M, - output CLK3M -); - -reg [3:0] CLKDIV; -always @( posedge MCLK ) CLKDIV <= CLKDIV+1'b1; - -assign VCLKx4 = CLKDIV[0]; // 24MHz -assign VCLK = CLKDIV[2]; // 6MHz -assign CLK24M = CLKDIV[0]; -assign CLK12M = CLKDIV[1]; -assign CLK6M = CLKDIV[2]; -assign CLK3M = CLKDIV[3]; - -assign VRAMCL = ~VCLKx4; -assign PCLK = ~VCLK; - - -endmodule - - diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v index 6541c67b..117e5cb0 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_cpumux.v @@ -1,6 +1,6 @@ module ninjakun_cpumux ( - input SHCLK, + input MCLK, output [15:0] CPADR, output [7:0] CPODT, input [7:0] CPIDT, @@ -8,6 +8,8 @@ module ninjakun_cpumux output CPWRT, output reg CP0CL, + output reg CP0CE_P, + output reg CP0CE_N, input [15:0] CP0AD, input [7:0] CP0OD, output [7:0] CP0ID, @@ -15,6 +17,8 @@ module ninjakun_cpumux input CP0WR, output reg CP1CL, + output reg CP1CE_P, + output reg CP1CE_N, input [15:0] CP1AD, input [7:0] CP1OD, output [7:0] CP1ID, @@ -23,24 +27,26 @@ module ninjakun_cpumux ); reg [7:0] CP0DT, CP1DT; -reg [2:0] PHASE; +reg [3:0] PHASE; reg CSIDE; -always @( posedge SHCLK ) begin // 24MHz +always @( posedge MCLK ) begin // 48MHz + CP0CE_P <= 0; CP0CE_N <= 0; + CP1CE_P <= 0; CP1CE_N <= 0; case (PHASE) - 0: begin CP0DT <= CPIDT; CSIDE <= 1'b0; end - 4: begin CP1DT <= CPIDT; CSIDE <= 1'b1; end + 0: begin CP0DT <= CPIDT; CP0CE_P <= 1; CP1CE_N <= 1; end + 1: CSIDE <= 0; + 8: begin CP1DT <= CPIDT; CP1CE_P <= 1; CP0CE_N <= 1; end + 9: CSIDE <= 1; default:; endcase end -always @( negedge SHCLK ) begin +always @( posedge MCLK ) begin case (PHASE) - 0: CP0CL <= 1'b1; - 2: CP0CL <= 1'b0; - 4: CP1CL <= 1'b1; - 6: CP1CL <= 1'b0; + 1: begin CP0CL <= 1; CP1CL <= 0; end + 9: begin CP1CL <= 1; CP0CL <= 0; end default:; endcase - PHASE <= PHASE+1; + PHASE <= PHASE+1'd1; end assign CPADR = CSIDE ? CP1AD : CP0AD; diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_fg.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_fg.v deleted file mode 100644 index 086c9a5e..00000000 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_fg.v +++ /dev/null @@ -1,41 +0,0 @@ -// ForeGround Scanline Generator -module ninjakun_fg -( - input VCLK, - - input [8:0] PH, // CRTC - input [8:0] PV, - - output reg [9:0] FGVAD, // VRAM - input [15:0] FGVDT, - - output reg [12:0] FGCAD, - input [31:0] FGCDT, - - output [9:0] FGOUT // PIXEL OUT : {PRIO,PALNO[8:0]} -); - -wire [8:0] POSH = PH+8+1; -wire [8:0] POSV = PV+32; - -wire [9:0] CHRNO = {1'b0,FGVDT[13],FGVDT[7:0]}; -reg [31:0] CDT; - -reg [4:0] PAL; -reg [3:0] OUT; -always @( posedge VCLK ) begin - case(POSH[2:0]) - 0: begin OUT <= CDT[7:4] ; PAL <= FGVDT[12:8]; end - 1: begin OUT <= CDT[3:0] ; FGVAD <= {POSV[7:3],POSH[7:3]}; end - 2: begin OUT <= CDT[15:12]; end - 3: begin OUT <= CDT[11:8] ; end - 4: begin OUT <= CDT[23:20]; FGCAD <= {CHRNO,POSV[2:0]}; end - 5: begin OUT <= CDT[19:16]; end - 6: begin OUT <= CDT[31:28]; end - 7: begin OUT <= CDT[27:24]; CDT <= FGCDT; end - endcase -end - -assign FGOUT = { PAL[4], 1'b0, PAL[3:0], OUT }; - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_input.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_input.v index 936322f5..5bd6fa87 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_input.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_input.v @@ -2,7 +2,7 @@ module ninjakun_input ( - input INPCL, + input MCLK, input RESET, input [7:0] CTR1i, // Control Panel (Negative Logic) @@ -24,7 +24,7 @@ module ninjakun_input reg [1:0] SYNCFLG; reg [7:0] CTR1,CTR2; -always @( posedge INPCL or posedge RESET ) begin +always @( posedge MCLK or posedge RESET ) begin if (RESET) begin SYNCFLG = 0; end diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v index ba510c6b..9dea211e 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_io_video.v @@ -2,12 +2,9 @@ module ninjakun_io_video ( - input SHCLK, - input CLK3M, + input MCLK, + input PCLK_EN, input RESET, - input VRCLK, - input VCLKx4, - input VCLK, input [8:0] PH, input [8:0] PV, input [15:0] CPADR, @@ -20,10 +17,11 @@ module ninjakun_io_video output VBLK, output [7:0] POUT, output [15:0] SNDOUT, -// output [12:0] sp_rom_addr, -// input [31:0] sp_rom_data, -// output [12:0] fg_rom_addr, -// input [31:0] fg_rom_data, + output [12:0] sp_rom_addr, + input [31:0] sp_rom_data, + input sp_rdy, + output [12:0] fg_rom_addr, + input [31:0] fg_rom_data, output [12:0] bg_rom_addr, input [31:0] bg_rom_data ); @@ -36,10 +34,10 @@ wire [10:0] SPAAD; wire [7:0] SPADT; wire [7:0] SCRPX, SCRPY; wire [8:0] PALET; -ninjakun_video video ( +NINJAKUN_VIDEO video ( .RESET(RESET), - .VCLKx4(VCLKx4), - .VCLK(VCLK), + .MCLK(MCLK), + .PCLK_EN(PCLK_EN), .PH(PH), .PV(PV), .PALAD(PALET), // Pixel Output (Palet Index) @@ -53,10 +51,11 @@ ninjakun_video video ( .SPADT(SPADT), .VBLK(VBLK), .DBGPD(1'b0), // Palet Display (for Debug) -// .sp_rom_addr(sp_rom_addr), -// .sp_rom_data(sp_rom_data), -// .fg_rom_addr(fg_rom_addr), -// .fg_rom_data(fg_rom_data), + .sp_rom_addr(sp_rom_addr), + .sp_rom_data(sp_rom_data), + .sp_rdy(sp_rdy), + .fg_rom_addr(fg_rom_addr), + .fg_rom_data(fg_rom_data), .bg_rom_addr(bg_rom_addr), .bg_rom_data(bg_rom_data) ); @@ -71,15 +70,17 @@ ninjakun_sadec sadec( .CS_PAL(CS_PAL) ); -wire [7:0] PSDAT, FGDAT, BGDAT, SPDAT, PLDAT; - +wire [7:0] PSDAT, FGDAT = CPADR[10] ? FGDAT16[15:8] : FGDAT16[7:0], BGDAT = CPADR[10] ? BGDAT16[15:8] : BGDAT16[7:0], SPDAT, PLDAT; +wire [15:0] FGDAT16, BGDAT16; wire [9:0] BGOFS = CPADR[9:0]+{SCRPY[7:3],SCRPX[7:3]}; wire [10:0] BGADR = {CPADR[10],BGOFS}; -VDPRAM400x2 fgv( SHCLK, CPADR[10:0], CS_FGV & CPWRT, CPODT, FGDAT, VRCLK, FGVAD, FGVDT ); -VDPRAM400x2 bgv( SHCLK, BGADR , CS_BGV & CPWRT, CPODT, BGDAT, VRCLK, BGVAD, BGVDT ); -DPRAM800 spa( SHCLK, CPADR[10:0], CS_SPA & CPWRT, CPODT, SPDAT, VRCLK, SPAAD, 1'b0, 8'h0, SPADT ); -DPRAM200 pal( SHCLK, CPADR[ 8:0], CS_PAL & CPWRT, CPODT, PLDAT, VCLK, PALET, 1'b0, 8'h0, POUT ); +dpram #(8,10) fgv_lo(MCLK, CS_FGV & CPWRT & ~CPADR[10], CPADR[9:0], CPODT, FGDAT16[ 7:0], MCLK, 1'b0, FGVAD, 8'd0, FGVDT[ 7:0]); +dpram #(8,10) fgv_hi(MCLK, CS_FGV & CPWRT & CPADR[10], CPADR[9:0], CPODT, FGDAT16[15:8], MCLK, 1'b0, FGVAD, 8'd0, FGVDT[15:8]); +dpram #(8,10) bgv_lo(MCLK, CS_BGV & CPWRT & ~BGADR[10], BGADR[9:0], CPODT, BGDAT16[ 7:0], MCLK, 1'b0, BGVAD, 8'd0, BGVDT[ 7:0]); +dpram #(8,10) bgv_hi(MCLK, CS_BGV & CPWRT & BGADR[10], BGADR[9:0], CPODT, BGDAT16[15:8], MCLK, 1'b0, BGVAD, 8'd0, BGVDT[15:8]); +dpram #(8,11) spa (MCLK, CS_SPA & CPWRT, CPADR[10:0], CPODT, SPDAT, ~MCLK, 1'b0, SPAAD, 8'h0, SPADT); +dpram #(8,9) pal (MCLK, CS_PAL & CPWRT, CPADR[8:0], CPODT, PLDAT, MCLK, 1'b0, PALET, 8'h0, POUT); dataselector_5D_8B cpxdsel( .out(CPIDT), @@ -96,8 +97,7 @@ dataselector_5D_8B cpxdsel( ); ninjakun_psg psg( - .AXSCLK(SHCLK), - .CLK(CLK3M), + .MCLK(MCLK), .ADR(CPADR[1:0]), .CS(CS_PSG), .WR(CPWRT), diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_irqgen.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_irqgen.v index 3fc16e62..f8ceb049 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_irqgen.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_irqgen.v @@ -1,6 +1,6 @@ module ninjakun_irqgen ( - input CLK, + input MCLK, input VBLK, input IRQ0_ACK, @@ -10,23 +10,23 @@ module ninjakun_irqgen output reg IRQ1 ); -`define CYCLES 12500 // 1/240sec. +`define CYCLES 18'd200000 // 1/240sec. reg pVBLK; wire VBTG = VBLK & (pVBLK^VBLK); -reg [13:0] cnt; +reg [17:0] cnt; wire IRQ1_ACT = (cnt == 1); wire CNTR_RST = (cnt == `CYCLES)|VBTG; -always @( posedge CLK ) begin +always @( posedge MCLK ) begin if (VBTG) IRQ0 <= 1'b1; if (IRQ1_ACT) IRQ1 <= 1'b1; if (IRQ0_ACK) IRQ0 <= 1'b0; if (IRQ1_ACK) IRQ1 <= 1'b0; - cnt <= CNTR_RST ? 0 : (cnt + 1'b1); + cnt <= CNTR_RST ? 18'd0 : (cnt + 1'b1); pVBLK <= VBLK; end diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v index dab109fa..7271381b 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_main.v @@ -1,7 +1,6 @@ module ninjakun_main( input RESET, - input CLK24M, - input CLK3M, + input MCLK, input VBLK, input [7:0] CTR1, @@ -12,19 +11,18 @@ module ninjakun_main( input [7:0] CPIDT, output CPRED, output CPWRT, + output [14:0] CPU1ADDR, input [7:0] CPU1DT, output [14:0] CPU2ADDR, input [7:0] CPU2DT ); -wire SHCLK = CLK24M; -wire INPCL = CLK24M; wire CP0IQ, CP0IQA; wire CP1IQ, CP1IQA; ninjakun_irqgen ninjakun_irqgen( - .CLK(CLK3M), + .MCLK(MCLK), .VBLK(VBLK), .IRQ0_ACK(CP0IQA), .IRQ1_ACK(CP1IQA), @@ -32,7 +30,7 @@ ninjakun_irqgen ninjakun_irqgen( .IRQ1(CP1IQ) ); -wire CP0CL, CP1CL; +wire CP0CE_P, CP0CE_N, CP1CE_P, CP1CE_N; wire [15:0] CP0AD, CP1AD; wire [7:0] CP0OD, CP1OD; wire [7:0] CP0DT, CP1DT; @@ -41,7 +39,9 @@ wire CP0RD, CP1RD; wire CP0WR, CP1WR; Z80IP cpu0( .reset_in(RESET), - .clk(CP0CL), + .clk(MCLK), + .clken_p(CP0CE_P), + .clken_n(CP0CE_N), .adr(CP0AD), .data_in(CP0DT), .data_out(CP0OD), @@ -53,7 +53,9 @@ Z80IP cpu0( Z80IP cpu1( .reset_in(RESET), - .clk(CP1CL), + .clk(MCLK), + .clken_p(CP1CE_P), + .clken_n(CP1CE_N), .adr(CP1AD), .data_in(CP1DT), .data_out(CP1OD), @@ -64,19 +66,21 @@ Z80IP cpu1( ); ninjakun_cpumux ioshare( - .SHCLK(SHCLK), + .MCLK(MCLK), .CPADR(CPADR), .CPODT(CPODT), .CPIDT(CPIDT), .CPRED(CPRED), .CPWRT(CPWRT), - .CP0CL(CP0CL), + .CP0CE_P(CP0CE_P), + .CP0CE_N(CP0CE_N), .CP0AD(CP0AD), .CP0OD(CP0OD), .CP0ID(CP0ID), .CP0RD(CP0RD), .CP0WR(CP0WR), - .CP1CL(CP1CL), + .CP1CE_P(CP1CE_P), + .CP1CE_N(CP1CE_N), .CP1AD(CP1AD), .CP1OD(CP1OD), .CP1ID(CP1ID), @@ -107,14 +111,14 @@ assign CPU2ADDR = CP1AD[14:0]; assign ROM1D = CPU2DT; wire [7:0] SHDT0, SHDT1; -DPRAM800 shmem( - SHCLK, { CP0AD[10] ,CP0AD[9:0]}, CS_SH0 & CP0WR, CP0OD, SHDT0, - SHCLK, {(~CP1AD[10]),CP1AD[9:0]}, CS_SH1 & CP1WR, CP1OD, SHDT1 -); + +dpram #(8,11) shmem( + MCLK, CS_SH0 & CP0WR, { CP0AD[10] ,CP0AD[9:0]}, CP0OD, SHDT0, + MCLK, CS_SH1 & CP1WR, {~CP1AD[10], CP1AD[9:0]}, CP1OD, SHDT1); wire [7:0] INPD0, INPD1; ninjakun_input inps( - .INPCL(INPCL), + .MCLK(MCLK), .RESET(RESET), .CTR1i(CTR1), // Control Panel (Negative Logic) .CTR2i(CTR2), diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v index 8cc26257..d74a98ce 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_psg.v @@ -1,7 +1,6 @@ module ninjakun_psg ( - input AXSCLK, - input CLK, + input MCLK, input [1:0] ADR, input CS, input WR, @@ -22,11 +21,11 @@ assign OD = ADR[1] ? OD1 : OD0; reg [7:0] SA0, SB0, SC0; wire [7:0] S0x; wire [1:0] S0c; reg [7:0] SA1, SB1, SC1; wire [7:0] S1x; wire [1:0] S1c; -reg [1:0] encnt; +reg [2:0] encnt; reg ENA; -always @(posedge AXSCLK) begin +always @(posedge MCLK) begin ENA <= (encnt==0); - encnt <= encnt+1; + encnt <= encnt+1'd1; case (S0c) 2'd0: SA0 <= S0x; 2'd1: SB0 <= S0x; @@ -65,7 +64,7 @@ YM2149 psg0( .I_IOB(DSW2), .ENA(ENA), .RESET_L(~RESET), - .CLK(AXSCLK) + .CLK(MCLK) ); YM2149 psg1( @@ -85,7 +84,7 @@ YM2149 psg1( .O_IOB(SCRPY), .ENA(ENA), .RESET_L(~RESET), - .CLK(AXSCLK) + .CLK(MCLK) ); wire [11:0] SND = SA0+SB0+SC0+SA1+SB1+SC1; diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sp.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v similarity index 75% rename from Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sp.v rename to Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v index 479f7ded..b31ec920 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sp.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_sprite.v @@ -1,9 +1,10 @@ // Copyright (c) 2011,19 MiSTer-X -module ninjakun_sp +module NINJAKUN_SP ( - input VCLKx4, - input VCLK, + input MCLK, + input PCLK_EN, + input RESET, input [8:0] PH, input [8:0] PV, @@ -27,18 +28,21 @@ wire [3:0] OTHP = (POUT[3:0]==1) ? POUT[7:4] : POUT[3:0]; reg [9:0] radr0=0,radr1=1; wire [7:0] POUTi; -LineDBuf ldbuf( - VCLKx4, radr0, POUTi, (radr0==radr1), - ~VCLKx4, {PV[0],WPAD}, WPIX, WPEN -); -always @(posedge VCLK) radr0 <= {~PV[0],PH}; -always @(negedge VCLK) begin - if (radr0!=radr1) POUT <= POUTi; - radr1 <= radr0; + +dpram #(8,10) ldbuf( + MCLK, WPEN, {PV[0], WPAD}, WPIX, 8'd0, + MCLK, (radr0==radr1), radr0, 8'd0, POUTi); + +always @(posedge MCLK) begin + radr0 <= {~PV[0],PH}; + if (PCLK_EN) begin + if (radr0!=radr1) POUT <= POUTi; + radr1 <= radr0; + end end NINJAKUN_SPENG eng ( - VCLKx4, PH, PV, + MCLK, RESET, PH, PV, SPAAD, SPADT, SPCAD, SPCDT, SPCFT, WPAD, WPIX, WPEN @@ -51,7 +55,8 @@ endmodule module NINJAKUN_SPENG ( - input VCLKx4, + input MCLK, + input RESET, input [8:0] PH, input [8:0] PV, @@ -59,7 +64,7 @@ module NINJAKUN_SPENG output [10:0] SPAAD, input [7:0] SPADT, - output [12:0] SPCAD, + output reg [12:0] SPCAD, input [31:0] SPCDT, input SPCFT, @@ -88,12 +93,11 @@ wire YHIT = (HV[7:4]==4'b1111) & (~DSABL); reg [7:0] XPOS; reg [4:0] WP; wire [3:0] WOFS = {4{FLIPH}}^(WP[3:0]); -assign WPAD = {1'b0,XPOS}-{XPOSH,8'h0}+WOFS-1; +assign WPAD = {1'b0,XPOS}-{XPOSH,8'h0}+WOFS-1'd1; assign WPEN = ~(WP[4]|(WPIX[3:0]==0)); reg [7:0] PTNO; reg CRS; -assign SPCAD = {PTNO, LV[3], CRS, LV[2:0]}; function [3:0] XOUT; input [2:0] N; @@ -123,13 +127,17 @@ assign WPIX = {PALNO, XOUT(WP[2:0],WP[3] ? CDT1 : CDT0)}; `define NEXT 7 reg [2:0] STATE; -always @( posedge VCLKx4 ) begin +always @( posedge MCLK ) begin + if (RESET) begin + STATE <= `WAIT; + SPCAD <= 13'h1fff; + end else case (STATE) `WAIT: begin WP <= 16; if (~PH[8]) begin - NV <= PV+17; + NV <= PV+5'd17; SPRNO <= 0; SPRIX <= 2; STATE <= `FETCH0; @@ -153,17 +161,17 @@ always @( posedge VCLKx4 ) begin STATE <= `FETCH3; end `FETCH3: begin - if (SPCFT) begin // Wait for CHRROM fetch cycle - XPOS <= SPADT; - CRS <= 0; - STATE <= `FETCH4; - end + XPOS <= SPADT; + CRS <= 0; + STATE <= `FETCH4; + SPCAD <= {PTNO, LV[3], 1'b0, LV[2:0]}; end `FETCH4: begin if (SPCFT) begin // Fetch CHRROM data (16pixels) if (~CRS) begin CDT0 <= SPCDT; CRS <= 1; + SPCAD <= {PTNO, LV[3], 1'b1, LV[2:0]}; end else begin CDT1 <= SPCDT; @@ -174,13 +182,13 @@ always @( posedge VCLKx4 ) begin end `DRAW: begin - WP <= WP+1; + WP <= WP+1'd1; if (WP[4]) STATE <= `NEXT; end `NEXT: begin CDT0 <= 0; CDT1 <= 0; - SPRNO <= SPRNO+1; + SPRNO <= SPRNO+1'd1; SPRIX <= 2; STATE <= (SPRNO==63) ? `WAIT : `FETCH0; end @@ -189,28 +197,3 @@ always @( posedge VCLKx4 ) begin end endmodule - - -module LineDBuf -( - input rC, - input [9:0] rA, - output [7:0] rD, - input rE, - - input wC, - input [9:0] wA, - input [7:0] wD, - input wE -); - -DPRAM1024 ram( - rA, wA, - rC, wC, - 8'h0, wD, - rE, wE, - rD -); - -endmodule - diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v index 421fcab2..2e6366e1 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_top.v @@ -2,30 +2,10 @@ "FPGA NinjaKun" for MiSTer Copyright (c) 2011,19 MiSTer-X + + Converted to SDRAM, single clock and + clock-enables for MiST ************************************************/ -/* -ROM_START( ninjakun ) - ROM_REGION( 0x8000, "maincpu", 0 ) - ROM_LOAD( "ninja-1.7a", 0x0000, 0x02000, CRC(1c1dc141) SHA1(423d3ed35e73a8d5bfce075a889b0322b207bd0d) ) - ROM_LOAD( "ninja-2.7b", 0x2000, 0x02000, CRC(39cc7d37) SHA1(7f0d0e1e92cb6a57f15eb7fc51a67112f1c5fc8e) ) - ROM_LOAD( "ninja-3.7d", 0x4000, 0x02000, CRC(d542bfe3) SHA1(3814d8f5b1acda21438fff4f71670fa653dc7b30) ) - ROM_LOAD( "ninja-4.7e", 0x6000, 0x02000, CRC(a57385c6) SHA1(77925a281e64889bfe967c3d42a388529aaf7eb6) ) - - ROM_REGION( 0x2000, "sub", 0 ) - ROM_LOAD( "ninja-5.7h", 0x0000, 0x02000, CRC(164a42c4) SHA1(16b434b33b76b878514f67c23315d4c6da7bfc9e) ) - - ROM_REGION( 0x08000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "ninja-6.7n", 0x0000, 0x02000, CRC(a74c4297) SHA1(87184d14c67331f2c8a2412e28f31427eddae799) ) - ROM_LOAD16_BYTE( "ninja-7.7p", 0x0001, 0x02000, CRC(53a72039) SHA1(d77d608ce9388a8956831369badd88a8eda8e102) ) - ROM_LOAD16_BYTE( "ninja-8.7s", 0x4000, 0x02000, CRC(4a99d857) SHA1(6aadb6a5c721a161a5c1bef5569c1e323e380cff) ) - ROM_LOAD16_BYTE( "ninja-9.7t", 0x4001, 0x02000, CRC(dede49e4) SHA1(8ce4bc02ec583b3885ca63fb5e2d5dad185fe192) ) - - ROM_REGION( 0x08000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "ninja-10.2c", 0x0000, 0x02000, CRC(0d55664a) SHA1(955a607b4401ce9f3f807d53833a766152b0ef9b) ) - ROM_LOAD16_BYTE( "ninja-11.2d", 0x0001, 0x02000, CRC(12ff9597) SHA1(10b572844ab32e3ae54abe3600fecc1a811ac713) ) - ROM_LOAD16_BYTE( "ninja-12.4c", 0x4000, 0x02000, CRC(e9b75807) SHA1(cf4c8ac962f785e9de5502df58eab9b3725aaa28) ) - ROM_LOAD16_BYTE( "ninja-13.4d", 0x4001, 0x02000, CRC(1760ed2c) SHA1(ee4c8efcce483c8051873714856824a1a1e14b61) ) -ROM_END*/ module ninjakun_top ( @@ -37,42 +17,34 @@ module ninjakun_top input [7:0] DSW2, input [8:0] PH, // PIXEL H input [8:0] PV, // PIXEL V - output PCLK, // PIXEL CLOCK + output PCLK_EN, // PIXEL CLOCK ENABLE output [7:0] POUT, // PIXEL OUT output [15:0] SNDOUT, // Sound Output (LPCM unsigned 16bits) output [14:0] CPU1ADDR, input [7:0] CPU1DT, output [14:0] CPU2ADDR, input [7:0] CPU2DT, -// output [12:0] sp_rom_addr, -// input [31:0] sp_rom_data, -// output [12:0] fg_rom_addr, -// input [31:0] fg_rom_data, + output [12:0] sp_rom_addr, + input [31:0] sp_rom_data, + input sp_rdy, + output [12:0] fg_rom_addr, + input [31:0] fg_rom_data, output [12:0] bg_rom_addr, input [31:0] bg_rom_data ); -wire VCLKx4, VCLK; -wire VRAMCL, CLK24M, CLK12M, CLK6M, CLK3M; -ninjakun_clkgen ninjakun_clkgen( - .MCLK(MCLK), // 48MHz - .VCLKx4(VCLKx4), - .VCLK(VCLK), - .VRAMCL(VRAMCL), - .PCLK(PCLK), - .CLK24M(CLK24M), - .CLK12M(CLK12M), - .CLK6M(CLK6M), - .CLK3M(CLK3M) -); +reg [3:0] CLKDIV; +always @( posedge MCLK ) CLKDIV <= CLKDIV+1'b1; + +assign PCLK_EN = CLKDIV[2:0] == 3'b111; wire [15:0] CPADR; wire [7:0] CPODT, CPIDT; wire CPRED, CPWRT, VBLK; + ninjakun_main ninjakun_main( .RESET(RESET), - .CLK24M(CLK24M), - .CLK3M(CLK3M), + .MCLK(MCLK), .VBLK(VBLK), .CTR1(CTR1), .CTR2(CTR2), @@ -95,12 +67,9 @@ wire [7:0] SPADT; wire [8:0] PALET; wire [7:0] SCRPX, SCRPY; ninjakun_io_video ninjakun_io_video( - .SHCLK(CLK24M), - .CLK3M(CLK3M), + .MCLK(MCLK), + .PCLK_EN(PCLK_EN), .RESET(RESET), - .VRCLK(VRAMCL), - .VCLKx4(VCLKx4), - .VCLK(VCLK), .PH(PH), .PV(PV), .CPADR(CPADR), @@ -113,10 +82,11 @@ ninjakun_io_video ninjakun_io_video( .VBLK(VBLK), .POUT(POUT), .SNDOUT(SNDOUT), -// .sp_rom_addr(sp_rom_addr), -// .sp_rom_data(sp_rom_data), -// .fg_rom_addr(fg_rom_addr), -// .fg_rom_data(fg_rom_data), + .sp_rom_addr(sp_rom_addr), + .sp_rom_data(sp_rom_data), + .sp_rdy(sp_rdy), + .fg_rom_addr(fg_rom_addr), + .fg_rom_data(fg_rom_data), .bg_rom_addr(bg_rom_addr), .bg_rom_data(bg_rom_data) ); diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v index 3b71695f..2632a4d0 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/ninjakun_video.v @@ -1,10 +1,11 @@ // Copyright (c) 2011,19 MiSTer-X -module ninjakun_video +module NINJAKUN_VIDEO ( input RESET, - input VCLKx4, - input VCLK, + input MCLK, + input PCLK_EN, + input [8:0] PH, input [8:0] PV, @@ -23,18 +24,20 @@ module ninjakun_video output VBLK, input DBGPD, // Palet Display (for Debug) -// output [12:0] sp_rom_addr, -// input [31:0] sp_rom_data, -// output [12:0] fg_rom_addr, -// input [31:0] fg_rom_data, - output [12:0] bg_rom_addr, - input [31:0] bg_rom_data + + output [12:0] sp_rom_addr, + input [31:0] sp_rom_data, + input sp_rdy, + output [12:0] fg_rom_addr, + input [31:0] fg_rom_data, + output [12:0] bg_rom_addr, + input [31:0] bg_rom_data ); assign VBLK = (PV>=193); // ROMs -wire SPCFT = 1'b1; +wire SPCFT = sp_rdy; wire [12:0] SPCAD; wire [31:0] SPCDT; @@ -47,83 +50,20 @@ wire [31:0] BGCDT; //NJFGROM sprom(~VCLKx4, SPCAD, SPCDT, ROMCL, ROMAD, ROMDT, ROMEN); //NJFGROM fgrom( ~VCLK, FGCAD, FGCDT, ROMCL, ROMAD, ROMDT, ROMEN); //NJBGROM bgrom( ~VCLK, BGCAD, BGCDT, ROMCL, ROMAD, ROMDT, ROMEN); -//assign sp_rom_addr = SPCAD; -//assign SPCDT = sp_rom_data; -//assign fg_rom_addr = FGCAD; -//assign FGCDT = fg_rom_data; -/* -static GFXDECODE_START( gfx_ninjakun ) - GFXDECODE_ENTRY( "gfx1", 0, layout16x16, 0x200, 16 ) // sprites - GFXDECODE_ENTRY( "gfx1", 0, layout8x8, 0x000, 16 ) // fg tiles - GFXDECODE_ENTRY( "gfx2", 0, layout8x8, 0x100, 16 ) // bg tiles -GFXDECODE_END*/ + +assign sp_rom_addr = SPCAD; +assign SPCDT = sp_rom_data; +assign fg_rom_addr = FGCAD; +assign FGCDT = fg_rom_data; assign bg_rom_addr = BGCAD; assign BGCDT = bg_rom_data; - -fg_sp_dulport_rom gfx1_rom( - .address_a(SPCAD), - .address_b(FGCAD), - .clock_a(VCLKx4), - .clock_b(VCLK), - .q_a(SPCDT), - .q_b(FGCDT) - ); - -/* -fg1_rom fg1_rom ( - .clk(~VCLKx4),//if sprite ? ~VCLKx4 : ~VCLK - .addr(SPCAD),//if sprite ? SPCAD : FGCAD - .data(SPCDT[7:0])//if sprite ? SPCDT[7:0] : FGCDT[7:0] -); - -fg2_rom fg2_rom ( - .clk(~VCLKx4), - .addr(SPCAD), - .data(SPCDT[15:8]) -); - -fg3_rom fg3_rom ( - .clk(~VCLKx4), - .addr(SPCAD), - .data(SPCDT[23:16]) -); - -fg4_rom fg4_rom ( - .clk(~VCLKx4), - .addr(SPCAD), - .data(SPCDT[31:24]) -);*//* - -fg1_rom fg1_rom ( - .clk(~VCLK),//if sprite ? ~VCLKx4 : ~VCLK - .addr(FGCAD),//if sprite ? SPCAD : FGCAD - .data(FGCDT[7:0])//if sprite ? SPCDT[7:0] : FGCDT[7:0] -); - -fg2_rom fg2_rom ( - .clk(~VCLK), - .addr(FGCAD), - .data(FGCDT[15:8]) -); - -fg3_rom fg3_rom ( - .clk(~VCLK), - .addr(FGCAD), - .data(FGCDT[23:16]) -); - -fg4_rom fg4_rom ( - .clk(~VCLK), - .addr(FGCAD), - .data(FGCDT[31:24]) -);*/ // Fore-Ground Scanline Generator wire FGPRI; wire [8:0] FGOUT; -ninjakun_fg fg( - VCLK, +NINJAKUN_FG fg( + MCLK, PCLK_EN, PH, PV, FGVAD, FGVDT, FGCAD, FGCDT, @@ -134,8 +74,8 @@ wire FGPPQ = FGOPQ & (~FGPRI); // Back-Ground Scanline Generator wire [8:0] BGOUT; -ninjakun_bg bg( - VCLK, +NINJAKUN_BG bg( + MCLK, PCLK_EN, PH, PV, BGSCX, BGSCY, BGVAD, BGVDT, @@ -145,8 +85,8 @@ ninjakun_bg bg( // Sprite Scanline Generator wire [8:0] SPOUT; -ninjakun_sp sp( - VCLKx4, VCLK, +NINJAKUN_SP sp( + MCLK, PCLK_EN, RESET, PH, PV, SPAAD, SPADT, SPCAD, SPCDT, SPCFT, @@ -155,20 +95,137 @@ ninjakun_sp sp( wire SPOPQ = (SPOUT[3:0]!=0); // Palet Display (for Debug) -wire [8:0] PDOUT = (PV[7]|PV[8]) ? 0 : {PV[6:2],PH[7:4]}; +wire [8:0] PDOUT = (PV[7]|PV[8]) ? 9'd0 : {PV[6:2],PH[7:4]}; // Color Mixer -dataselector_4D_9B dataselector_4D_9B( - .OUT(PALAD), - .EN1(DBGPD), - .IN1(PDOUT), - .EN2(FGPPQ), - .IN2(FGOUT), - .EN3(SPOPQ), - .IN3(SPOUT), - .EN4(FGOPQ), - .IN4(FGOUT), - .IND(BGOUT) +DSEL4_9B cmix( PALAD, + DBGPD, PDOUT, + FGPPQ, FGOUT, + SPOPQ, SPOUT, + FGOPQ, FGOUT, + BGOUT ); -endmodule \ No newline at end of file +endmodule + +// ForeGround Scanline Generator +module NINJAKUN_FG +( + input MCLK, + input PCLK_EN, + + input [8:0] PH, // CRTC + input [8:0] PV, + + output reg [9:0] FGVAD, // VRAM + input [15:0] FGVDT, + + output reg [12:0] FGCAD, + input [31:0] FGCDT, + + output [9:0] FGOUT // PIXEL OUT : {PRIO,PALNO[8:0]} +); + +wire [8:0] POSH = PH+9'd8+9'd1; +wire [8:0] POSV = PV+9'd32; + +wire [9:0] CHRNO = {1'b0,FGVDT[13],FGVDT[7:0]}; +reg [31:0] CDT; + +reg [4:0] PAL; +reg [3:0] OUT; +always @( posedge MCLK ) begin + if (PCLK_EN) + case(POSH[2:0]) + 0: begin OUT <= CDT[7:4] ; PAL <= FGVDT[12:8]; end + 1: begin OUT <= CDT[3:0] ; FGVAD <= {POSV[7:3],POSH[7:3]}; end + 2: begin OUT <= CDT[15:12]; end + 3: begin OUT <= CDT[11:8] ; end + 4: begin OUT <= CDT[23:20]; FGCAD <= {CHRNO,POSV[2:0]}; end + 5: begin OUT <= CDT[19:16]; end + 6: begin OUT <= CDT[31:28]; end + 7: begin OUT <= CDT[27:24]; CDT <= FGCDT; end + endcase +end + +assign FGOUT = { PAL[4], 1'b0, PAL[3:0], OUT }; + +endmodule + + +// BackGround Scanline Generator +module NINJAKUN_BG +( + input MCLK, + input PCLK_EN, + + input [8:0] PH, // CRTC + input [8:0] PV, + + input [7:0] BGSCX, // SCRREG + input [7:0] BGSCY, + + output reg [9:0] BGVAD, // VRAM + input [15:0] BGVDT, + + output reg [12:0] BGCAD, + input [31:0] BGCDT, + + output [8:0] BGOUT // OUTPUT +); + +wire [8:0] POSH = PH+BGSCX+9'd2; +wire [8:0] POSV = PV+BGSCY+9'd32; + +wire [9:0] CHRNO = {BGVDT[15:14],BGVDT[7:0]}; +reg [31:0] CDT; + +reg [3:0] PAL; +reg [3:0] OUT; +always @( posedge MCLK ) begin + if (PCLK_EN) + case(POSH[2:0]) + 0: begin OUT <= CDT[7:4] ; PAL <= BGVDT[11:8]; end + 1: begin OUT <= CDT[3:0] ; BGVAD <= {POSV[7:3],POSH[7:3]}; end + 2: begin OUT <= CDT[15:12]; end + 3: begin OUT <= CDT[11:8] ; end + 4: begin OUT <= CDT[23:20]; BGCAD <= {CHRNO,POSV[2:0]}; end + 5: begin OUT <= CDT[19:16]; end + 6: begin OUT <= CDT[31:28]; end + 7: begin OUT <= CDT[27:24]; CDT <= BGCDT; end + endcase +end + +assign BGOUT = { 1'b1, PAL, OUT }; + +endmodule + + +module DSEL4_9B +( + output [8:0] OUT, + + input EN1, + input [8:0] IN1, + + input EN2, + input [8:0] IN2, + + input EN3, + input [8:0] IN3, + + input EN4, + input [8:0] IN4, + + input [8:0] IND +); + +assign OUT = EN1 ? IN1: + EN2 ? IN2: + EN3 ? IN3: + EN4 ? IN4: + IND; + +endmodule + + diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/pll.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/pll.v index fd9fef10..2ce015c4 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/pll.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/pll.v @@ -14,11 +14,11 @@ // ************************************************************ // THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! // -// 13.1.0 Build 162 10/23/2013 SJ Web Edition +// 13.1.4 Build 182 03/12/2014 Patches 4.26 SJ Web Edition // ************************************************************ -//Copyright (C) 1991-2013 Altera Corporation +//Copyright (C) 1991-2014 Altera Corporation //Your use of Altera Corporation's design tools, logic functions //and other software and tools, and its AMPP partner logic //functions, and any output files from any of the foregoing @@ -39,27 +39,23 @@ 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_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 [0:0] sub_wire5 = 1'h0; + wire [0:0] sub_wire1 = sub_wire0[0:0]; + wire c0 = sub_wire1; wire locked = sub_wire2; - wire c0 = sub_wire3; - wire sub_wire4 = inclk0; - wire [1:0] sub_wire5 = {sub_wire6, sub_wire4}; + wire sub_wire3 = inclk0; + wire [1:0] sub_wire4 = {sub_wire5, sub_wire3}; altpll altpll_component ( - .inclk (sub_wire5), + .inclk (sub_wire4), .clk (sub_wire0), .locked (sub_wire2), .activeclock (), @@ -102,10 +98,6 @@ module pll ( altpll_component.clk0_duty_cycle = 50, altpll_component.clk0_multiply_by = 16, altpll_component.clk0_phase_shift = "0", - altpll_component.clk1_divide_by = 9, - altpll_component.clk1_duty_cycle = 50, - altpll_component.clk1_multiply_by = 2, - altpll_component.clk1_phase_shift = "0", altpll_component.compensate_clock = "CLK0", altpll_component.inclk0_input_frequency = 37037, altpll_component.intended_device_family = "Cyclone III", @@ -139,7 +131,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_USED", + altpll_component.port_clk1 = "PORT_UNUSED", altpll_component.port_clk2 = "PORT_UNUSED", altpll_component.port_clk3 = "PORT_UNUSED", altpll_component.port_clk4 = "PORT_UNUSED", @@ -180,11 +172,8 @@ endmodule // Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" // Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" // Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "9" -// 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 "48.000000" -// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "6.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" @@ -205,26 +194,18 @@ 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 "deg" // Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" // Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" -// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" // Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "16" -// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1" // Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" // Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "48.00000000" -// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "6.00000000" -// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" -// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" // Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" -// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" // Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" // Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" // Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" -// Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" // Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" // Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" -// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" // Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" // Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" // Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" @@ -247,14 +228,11 @@ 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 @@ -263,10 +241,6 @@ endmodule // Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" // Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "16" // Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" -// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "9" -// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" -// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "2" -// Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" // Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" // Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" // Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" @@ -299,7 +273,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_USED" +// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_UNUSED" // Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" // Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" // Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" @@ -318,13 +292,11 @@ 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 diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/gfx1.hex b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/gfx1.hex deleted file mode 100644 index bbc69dd9..00000000 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/gfx1.hex +++ /dev/null @@ -1,1026 +0,0 @@ -:020000040000FA -:200000000000000000000000000000000000000000000000000000000000000000000000E0 -:200020000000000000000000000000000000000000000000000000000000000000000000C0 -:20004000111111111111DDDDDDDDDDDDDDDDDDDD0111011101110DDD0DDD0D000D000D0067 -:2000600000100010001000D000D000DD00DD00DD00000000000100100010D010D010D00167 -:2000800000000000101100000000000000001011000000000000000000000000000010000E -:2000A0000000000000110001000100010001110100000000011001010101010101010110EF -:2000C0000111001D001D001D001D001D001D00DD11101D1D1D1D1D1D1D1D110D11D00D006E -:2000E000000000000000000000000000000000000000000000000000000000000000000000 -:2001000022112122212221222122212222112222221122112211221122112211221122223D -:200120002211212122212211212221222111222222112121222122112221212122112222F1 -:200140002221221122212221212121112221222221112122211121212221212122112222C3 -:200160002211212221222111212221222211222221112221221122112211221122112222DF -:20018000221121222122221121222122221122222211212121212211222121212211222290 -:2001A00022222212221222222212221222222222222222122212222222122212221222129F -:2001C0000000005500550099009900D90AD90A55440054405544DD439D409D409D3A55555C -:2001E0000055004D003400550044000400040022444344304300CC00430033003000220094 -:2002000000000000000000000000000000000000001000110011001D00DD00D000000000E2 -:20022000222222222222222222222222222222220010001D0111001D11110D1D001D000DCC -:20024000011111D111D0011100D111D1011100DD11001D0111100D0D0011011D10110D0D41 -:20026000001000D10001000001101D01011000DD0010001D001D000D000000000000D00058 -:20028000001000DD0000000000000000001000DD0010001D001D001D001D001D001D00DDE9 -:2002A0000000000000010010000100D0000000000000000000D0011100DD00D000D00000FD -:2002C000000000000000000000000010001D001D000000000000001100DD000000000000E6 -:2002E000000000000000000000000010001D00DD0000000000010010000D00D00000000006 -:20030000011111DD1100110011001100011100DD0110001D001D001D001D001D001D00DD0E -:20032000011110110D11011111DD110011110DDD011110110D11001100111011011100DDCC -:200340000011001100110111101111110D11000D111111DD111111110D111011011100DD68 -:20036000011111DD1100111111DD1100011100DD11110D1100110011001D001D001D00DDC6 -:20038000011111DD1100011111DD1100011100DD01111D111011011100111011011100DDB8 -:2003A0000000000000D000D0000000D000D000000000000000D000D0000000D000D000D0ED -:2003C0000010000D00D00100000000000010000D00000000011100DD011100DD0000000034 -:2003E0000100000000000010000D00D001000000011110DD0D00001100DD00D0000000D074 -:2004000001111DDD1D101DDD1D101DDD011100DD01111D111D111D1111111D111D110D0D5F -:20042000111111DD1100111111DD110011110DDD011111D11100110011001101011100DD46 -:20044000111111DD110011001100110011110DDD111111DD1100111111DD110011110DDDEE -:20046000111111DD1100111111DD110011000D00011111D111001111110D1100011100DDD7 -:20048000110011001100111111DD110011000D000010001D001D001D001D001D001D00DD4F -:2004A000001100110011001100110011011D00DD11001101111011111111110111010D0022 -:2004C00011001100110011001100110011110DDD110111111111111D110D110011000D00D9 -:2004E00011001100111011111D111D111D110D0D011111DD1100110011001100011100DDC0 -:20050000111111DD11001100111111DD11000D00011111DD110011001110111D011100DD1B -:20052000111111DD1100111111DD110011000D00011111D11100011100111111011100DD22 -:2005400011110D1D001D001D001D001D001D00DD110011001100110011001100011100DD8C -:20056000110011001100110011000101001000DD1110111D111D111D111D11110111000D1D -:2005800011001100110001111D111D111D110D0D1100110011000111001D001D001D00DDF9 -:2005A00011110D110011001D01DD11D011110DDD00000101001D0111001D01D100D0000012 -:2005C0000111001D001D001D001D001D001D00DD11101D1D1D1D1D1D1D1D110D11D00D0069 -:2005E0000000010000010010001D00D10100000000000000011100DD011100DD000000001C -:20060000111111111111111111111111DDDDDDDD00110011001100110011001100DD00DD7A -:20062000DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD00DD00DD00DD00DDDDDDDDDDDDDDDDDD8E -:20064000110011001100110011001100DD00DD00111111111111111111111111DDDDDDDD3A -:20066000DD00DD00DD00DD00DD00DD00DD00DD00DDDDDDDDDDDDDDDDDDD0DDD0DDD0DDD0F6 -:20068000111111111111111111111111DDDDDDDD100010001000100010001000D000D0001A -:2006A000DDDDDDDDDDDDDDDD0000000000000000D000D000D000D000000000000000000012 -:2006C000110011001100110011001100DD00DD0000000000000000000000000000000000FA -:2006E000DD00DD00DD00DD00DDDDDDDDDDDDDDDD0000000000000000DDDDDDDDDDDDDDDDB6 -:20070000DDDDDDDD00000000DDDDD000D000D0DDDDDDDDDD00000000DDDD00000000DDDD76 -:20072000D000D000D000D000D0DDD000D000DDDD0D0D0D0D0D0D0D0DDD0D00000000DDDD66 -:20074000DD00DD0000000000DDDD000000000D0DDDD0DDD000000000DDDD000000000D0DDD -:200760000D0D0D0D0D0D0D0D0D0D00000000DDDD0D0D0D0D0D0D0D000D0000000000DDDD1B -:200780000000000000000000DDDD0000000000D00000000000000000DDDD00000000D0DD68 -:2007A00000D000D000D000D000DD00000000DDDDD0D0D0D0D0D0D0D0D0D000000000DDDD88 -:2007C000DDDDDDDD00000000DDDD00000000D0D0DDDDDDDD00000000DDDD00000000D0004D -:2007E000D000D000D000D000D00000000000DDDD00D0D0D000D000D0D0D000000000DDDDC5 -:2008000000000000000000000000000D00DD00DD0000000D00DDDDDDDDDDDDDD3DDD3DDDC5 -:2008200000DD00DD00DD00DD00DD0DDD0DD40D4433DD33DD333D333D333D33DD33DD444D2A -:200840000000DD00DDDDDDDDDDDDD33DD3DDD3D30000000000000000DD00DD00DD0044004C -:20086000D3D3D3DDD3DD33DD334434DD44DDDDD444E044E04D4E444E44EF44EE44EE44EECA -:200880000D440D440D44004400D400D400DD00ED44D444D444D444D44DD444DDDDDDD3DDA3 -:2008A00000FE00FF000F00000000000000000000DDD4EDDDEEEEFFEEFFFF00FF000F0000DC -:2008C00044444444444444D444DD44D444DEDDEE44EF444F444F44FF44FF44FFEEF03EF014 -:2008E000333334EEEEFFE3FFFFFFFFFFFF000000FF00FF00FF00FF000000000000000000AA -:20090000003333333300000000030033333333330000000022002200220022002202222219 -:20092000222222222222222222222222222222220000000000000000000022002200220031 -:20094000220022202222222222222222222222220000020022002220222222222222222225 -:20096000000000000000000020002200220022223330330033003300330030003000300010 -:20098000000000000000000022222222222222220222222222222222222222222222222247 -:2009A000000200220022002200220022002202220000000000000000000000000000000243 -:2009C0000000000000000000000000002222222200000000000000000000222222222222C3 -:2009E000000000000000000022222222222222220000000030003000330033003333333355 -:200A0000000000222222022200220022000000000000000000000000000000000000000008 -:200A20000002000200020002000200220222222200020022002222222222022200220022EC -:200A4000000000000000000000000000000000002222022202220222022202222222222216 -:200A600000000000000000000022002200020000002200220222002200220022002202221C -:200A8000000000000000000000000000000000022222002222222222222222222222222256 -:200AA000000000000000000200220022002200000033003333333333003300030003000360 -:200AC00000000000000200200020002200220022000000000002002222222222222222223A -:200AE00000000000000000000000000000000002000000000000200020002200220022004E -:200B0000220022222222222222222220220022220000000022002000000022002200220053 -:200B2000220022002200220022002220222022222222222222222222222222222222222223 -:200B40000000000000000000220022202220220000000000000000000000000000002200AB -:200B6000200022002200220022002200222022222222222222222222222222222222222205 -:200B800022000000000000000000200020002200220022002200220022002220222222225D -:200BA000222022202200220020002000200020000000000000003333000000000000000087 -:200BC0000000000000000000000000000000330033333333333333333333333333333333B2 -:200BE0002222222222222222222222222222222222332233233322333333333333333333E8 -:200C0000223322332222222222222222222222223333333333333333223333333333333373 -:200C2000222222222222222322232223223322332233223322332233233333333333333393 -:200C4000222222222222222222232233223322332333333333333333333333333333333320 -:200C6000222222222222222222222223222322333333333323332233233333333333333342 -:200C800000000000000022222223222322332233000000330033003300330333033303336E -:200CA000000000000000000000000000000000330000000000000000000000333333333302 -:200CC000000000000000003333333333333333330333333333333333333333333333333349 -:200CE0000033003300330033003300330033003300000000000000330033003300030000C0 -:200D000000330333033333333333333333333333000000000000000000030033003300339A -:200D2000FFFFFF33F03FF0F3F0F3F00FFF00FFFF333300000000000000000000000000002C -:200D4000003000000000000000000000000000003333330000000000000033330000000064 -:200D600003333333330003330033000000000000030000003333333300000000000000006C -:200D800033000030003300330330330030000000333300000000000000000000003300005B -:200DA00000330000000000000000000000000000300033003330333333333333333333333C -:200DC00033333333003300030000000030033333003300000300030003000300333333336D -:200DE0000000000000000000300033000300003300000300330000003333000000000000BE -:200E0000000000000000003300303300330003000000333000330000000000000000000070 -:200E20003333333303330033003300330033000300000333000000000000300033003333E2 -:200E4000333003330033003300030003000000033300330000000000000000000000000024 -:200E60003333333303000300330030000000000033330033000000000000000000000000A4 -:200E80000333000000000000000000000000000000000000000000000000033300000000E6 -:200EA000000000000000000000003000333300000000000000000000000000003330003306 -:200EC0000000000000000000000000000033333300000000000000000000000033003333E0 -:200EE000333300000000000000000000000033330000330033330033000300000000003324 -:200F00000000000000003000330033333333333300000000000000000000330033003300A3 -:200F2000333303330033003300330003000000000000330033003330333333333333333318 -:200F400033003300330033003300330033003330333300330003000000000000000000002D -:200F6000333333330000000000000000333300003333333300000000000000000033003010 -:200F80003333333333003300030000000030003033333333000000000000000000000000F0 -:200FA00033330033000000000000000000000000FFFFFF00F00FF0F0F0F0F00FFF00FFFFE0 -:200FC000003000330003000000000000000000033330300000000000300030003000300055 -:200FE000FFFFFF00F03FF0F0F0F0F00FFF00FFFF000000003333000000000000000033333D -:20100000000000000000000000000000000000003330330033003300330030003000300011 -:20102000003333333300000000030033333333330000000030003000330033003333333350 -:201040000033003333333333003300030003000300000000000033330000000000000000BC -:2010600000000000000000000000000000003300FFFFFF00F00FF0F0F0F0F00FFF30FFFF55 -:20108000000000000000000000000000000000DD000000000000000000000000DD00DD00B9 -:2010A00000DD0099000000000000000000000000D900D000D00090000000000000000000B1 -:2010C000000000000000000000D000DD009D000900000000000000000D00DD00DD00D9001D -:2010E000000D000D00DD00990000000000000000DD00DD009900000000000000000000000D -:20110000000000000000000000000000000000DD000000000000000000000000DD00DD0038 -:2011200000DD0099000000000000000000000000D900D000D000D000900000000000000060 -:2011400000000000000000000000000000000000000000000000000000000000000000008F -:2011600000020000000000000000000000000000220000000000000000000000000000004B -:20118000000000000000000000900000000000000000000000000000000000000000009926 -:2011A00000000000000000900000000000000000000000000000000090009000000000007F -:2011C00000000000000000000000000000000000000000000000000000000000000000000F -:2011E0009994DDDD0000000000000000000000004446DDDD000000000000000000000000C4 -:2012000000000000000000000000000D00DD00DD0000000000000000DD00D900DD00DD0097 -:2012200000DD00DD000D00000000000000000000DD00DD00DD00DD00000000000000000073 -:20124000000000000000000000000000000000000000000000000000000000000000000688 -:201260009994DDDD0000000000000000000000004449DDD600DD000000000000000000006A -:20128000000000000000000000000000000099CC0000000000000000000000000000CC8895 -:2012A000D9990DDD0000000000000000000000009977DDDD00000000000000000000000008 -:2012C000000000000000000000090009009C009C000000009900D00000000000000000005B -:2012E000009C009C0009000900000000000000000000000000000000D0009900000000003B -:2013000000000000000000000000000000000000000000000000000000000000000900D9EB -:2013200000DD00CD0099000000000000000000000090DD90CC009900000000000000000008 -:20134000000000000000000000000020002000220000000000000000200020002000222287 -:2013600002222222552500500000000000000000222225525005000000000000000000002B -:201380000000000000000000000000000090999900000000000000000000000000009009F2 -:2013A0004999049900940090004000000000000099999999944490009000400000000000AE -:2013C00000000000000000000000000000DD00DD000000000000DD00D900D000D000DD0020 -:2013E000009900000000000D0009000000000000DD009900000000000000000000000000C8 -:20140000000000000000000D00DD00DD009D000900000000000000000D00DD00D900D000CC -:20142000000000DD00DD00990000000000000000DD009D000D000D000900000000000000BC -:20144000000000000000000000050055049504550000000000000000550055404444443D4D -:20146000045504440D44003300DD00000000000044D043003D00D000000000000000000006 -:20148000000000000000005500550095055504550000000054004440444344DD43004D004A -:2014A000044404440D44003300DD0000000000003000D0000000000000000000000000003B -:2014C000000000000000000000550095045504550000000000000000000050005500550076 -:2014E000044404440D4400D3000D00000000000054404444443D33D0DD00000000000000AE -:201500000000000000000000005500950455045500000000000000000000000000005000DF -:20152000045504440D440044004400DD000000005000550044004444444D33D0DD00000072 -:20154000000000000003000403340044004300430000000030004030430034003400340004 -:2015600000330035003500350035003300030000340053005300530053003400300000004A -:20158000000000030033003300340034004400443000330043004400540054302430243385 -:2015A0000044004400420042004500440034000092339233993399339230253054003300A2 -:2015C0000000000000030003003400440042004205004250224099309930994392242224A6 -:2015E000002200290029002900420034000300002292229222922225222422434430330020 -:2016000000040005003400450035003405440543050003045500350443304453235492346D -:201620000334034203420042004200440034000092449943994399539243223044003300D5 -:201640000000000000000000000D00DD00DD004D000000000000D000DD00DD005500D4D0F3 -:2016600000D500D400D500050000000000000000D4D04D505D005D000000000000000000EC -:20168000000000DD00DC00500D4D0D4D00450042DC000D00550D25DD4DCD2DD024D09D45CC -:2016A000DD4D0D4D00550DD40DDD0005000000009225D4554550D40DD40055D00000D00062 -:2016C00000000000000400040044005400525544500040004004445044004205444433448D -:2016E00005330042004400440050000400040000344434403244444044404404400000009E -:201700005003003403D40455345D54D44DD433443D00D433444545544D5344544454554DE9 -:20172000D445D4444DD4354D0434035D0034503354445D4454D544D54454445D4DD3D330AF -:201740000022002200EE02E8028807880D74007402000200EE0087ED87774777D477D47DA1 -:20176000009900D9009900220022004E00EE00DD499D292E292E222E22EEEEEDEEDDDDD0BA -:2017800000000000005000050500030000000005000050003005005300305000404000000F -:2017A000000044503500000000540050003000003003000000000044050304000300000006 -:2017C00000FF00990099009909D9999D99999D9900FF909990999999D99DDDD999899979DC -:2017E0009D99D997DD76007600680076007700D79D795577DD775578D57D8678877D88D09F -:20180000000000000044004300390099009D00D9000000004400344093449944D944994493 -:201820000D9D3D9D33334442D42403240D230033994499449944334344333433333333DD55 -:20184000000000000044004400330499049D00D90000000044004400344493449944994425 -:201860000099009D009D0044003200330023003299449444444444434433333323DD3300C3 -:201880000044004400330499049D00D90099009D44004400344493449944994499449444FA -:2018A000009D0044003200330023003200DD0000444444434433333323DD3300DD000000B4 -:2018C0000044004300390099009D00D90D9D3D9D4400344093449944D94499449944994495 -:2018E00033334442D42403240D23003300DD00009944334344333433333333DDDD00000019 -:2019000000000000000D004D0443342434443442D340D944DD349993699369939993999323 -:20192000332403240D440033003300DD000000003934434444434433333D33D0DD00000053 -:201940000000000000000000000D00460443342400000000D340D944DD349993D9936993C0 -:2019600034443442332403240D440033003300DD999399933934434444434433333D33D0AA -:2019800000000000000D004D0443342434443442D340D944DD3499936993699399939993A3 -:2019A000332403240D440033003300DD000000003934434444434433333D33D0DD000000D3 -:2019C0000044004400330499049D00D90099009D44004400344493449944994499449444B9 -:2019E000009D0044003200330023003200DD0000444444434433333323DD3300DD00000073 -:201A0000000000000044004400330499049D00D90000000044004400344493449944994463 -:201A20000099009D009D0044003200330023003299449444444444434433333323DD330001 -:201A400000000000000D004D0443342434443442D340D944DD3499936993699399939993E2 -:201A6000332403240D440033003300DD000000003934434444434433333D33D0DD00000012 -:201A80000044004400330499049D00D90099009D44004400344493449944994499449444F8 -:201AA000009D0044003200330023003200DD0000444444434433333323DD3300DD000000B2 -:201AC000000000000000000000000004904300390000000000000000000944003340D94419 -:201AE0000099009D0439342332443244D3330D339D449934993499443344443333333333D8 -:201B0000000000000000000000000000000300330000000000000000000000003300D34049 -:201B20000099009904993449342432443234D3339D44993499349944994444444443333375 -:201B4000000000000000000400990069006909990000000000004400449049999999996D42 -:201B60000999399933993344D34203240D230033996D49994499444442434433333333DD50 -:201B8000000D009D00DD05DD05440443003D00DDDD00DD00DDD0D4DD33D033D03DD0DD002A -:201BA0000DDDAADD0ADD00FF00DF00DD00DD00E0DDDDDDDADDDAFF00DD00DD00DD00EE00A9 -:201BC000000000D9009D00DD00440044004300DDDD00DDD0DDDDDDDD33DD33DD33DDDDD02F -:201BE00000DD00DD00DD00FF00DD00DD000D0000DDDDDDDDDDD0DDD0DDD0ED00D000000050 -:201C0000000000D9009D00DD00440043003D00DDDD00DDD0DDDDD3DD33DD33DD3DDDDDD0F5 -:201C200000DD00DD00DD00FF00DD00DD00ED000EDD00DDD0DDD0ADF0DDD0DD00DD000E0010 -:201C4000000000D9009D00DD00330033003300DDDD00DDDDDDDDDDDDDDDDDDDDDDDDDDD0D5 -:201C600000DD00DD00DD00FF00DD00DD000D00EEDD00DDD0DDDAFF00DDD0DD00DD00000072 -:201C8000000000D9009D00DD00440043003D00DDDD00DDD0DDDDD3DD33DD33DD3DDDDDD075 -:201CA00000DD00DD00DD00FA00DA00DD00000000DD00DDD0DDD0FF00DDD0DD00DD0000003F -:201CC000000D009D00DD05DD05440443003D00DDDD00DD00DDD0D3DD33D033D03DD0DD00EA -:201CE00000DD0ADD0ADD00FF00FD00DD00DD0000DDD0DDD0DA00FA00DD00DD00DD00EE00D0 -:201D00000000000D00DD00D900DD00DD00440044DD00DDDDDDDDDDDDDDDD3DDD3DDD3DDDAB -:201D200000D300DD000D000D000D000D000D000EDDD0DDD0DDDDFFDFDFADDDDDD0DD000EB1 -:201D40000000000D00DD00D900DD00DD00440044DD00DDD0DDDDDDDDDDDDDDDD33DD33DDEC -:201D6000004300DDAADD0ADF00DD000D000D000E33D0DDD0DDDDFFADDFAADDDDD0DD000EBA -:201D80000000000D00DD00D900DD00DD00440044DD00DDDDDDDDDDDDDDDDD3DD33DD33DDA9 -:201DA000004D00DD00DD00DF00DD000D000D000E3DD0DDD0DDDDFFDFDFADDDDDD0DD000EE5 -:201DC000000000DD00DD004400440033A0DDAADDDD00DDD0DDD033DD33DD33DDDADDDAD0C2 -:201DE0000DDD0DDD00DD00DD00FF000D00000000DD00DDD0DDD0DDDFDDFDFFDDDD00EE00D5 -:201E0000000000000000001100340034003400340000000011005500591055105551555161 -:201E2000003400330033001100000000000000005551451044103300110000000000000064 -:201E40000000000000000011006700670067006700000000110088008910881088818881F9 -:201E600000670066006600110000000000000000888178107710660011000000000000008F -:201E8000000000000000001100BF00BF00BF00BF000000001100FF00F910FF10FFF1FFF12D -:201EA00000BF00BB00BB00110000000000000000FFF1FF10FF10BB00110000000000000002 -:201EC000000000000000001100E200E200E200E20000000011002200291022102221222145 -:201EE00000E200EE00EE00110000000000000000222122102210EE0011000000000000006D -:201F0000000000660ADC0ADC0A110A110A810888000000000000000000000000000000003E -:201F20000A810A110A810A110ADC0ADC006600000000000000000000000000000000000023 -:201F40000000000000DD00D9009D009D00DD00DDDDD0DDDDDDDDDDDDDDDDDDDDDDDDDDDD14 -:201F6000004400330ADD00DD00FF00DD00DD00E044DD33D0DD0ADDDDDDD0FDE0DDE000E0A1 -:201F80000000000000DD00D9009D009D0DDD0D99DDD0DDDDDDDDDDDDDDDD99DD999D999D4A -:201FA0000DD9009900DDAADD0AFD0EDF0EDD0000999D999D9900DDDDDDDDFFE0DDE000E06A -:201FC0000000000000DD00D1001D00990D690D69DDD0DDDDDDDDDDDDDDDDDDDDDDDDD9DDF2 -:201FE0000D99009900990ADD00FD0EDF0EDD0000D9DDD9D0DD00DDDADFDAFDE0DDE000E027 -:202000000000000000000000000000000000000000000000000000000000000000000000C0 -:202020000000000000000000000000000000000000000000000000000000000000000000A0 -:20204000101010101010D0D0D0D0DDD0DDD0DDD0111111111111DDDDDDDDDD00DD00DD0068 -:20206000110011001100DD00DD00DDDDDDDDDDDD0000000000110000000000000000001123 -:2020800000000000010010101010101010100100000000000010001000100010101010113D -:2020A0000000000001110000000000000000100000000000110000000000000000001101DB -:2020C00011111111111111111111110111000D001100000000000000000001001000DD0027 -:2020E0000000000000000000000000000000000000000000000000000000000000000000E0 -:20210000111211211121112111211121111222221122212221222122212221222122222232 -:2021200011122211221111121122112211112222111222112211221222112211111222229D -:20214000221122112111121122111111221122221111112211121211221122111112222290 -:2021600011121121112211121121112111122222111122112212221221222122212222221F -:20218000111211211121111211211121111222221112221122111111221122111112222252 -:2021A0002222212221222222212221222222222222222122212222222122212222222222E7 -:2021C00000550555555500990999066DA66D45554000440054405500D400D400D4A043A0DF -:2021E00053550444005500CC0044004300430022550044003300C000300000000000000026 -:20220000000000000000000000000000000000000000010001D001D00100000010000D00FD -:202220002222222222222222222222222222222210001D0011101DDD11001DD01D000D000E -:202240001100D11001DD1100D110011D11D0DD0010101D0D1DD0D10010100D1DD01D00DDC4 -:2022600001001D001DD001D01D10D00D1111DD0D010000000000000000000000000000006B -:2022800011001D001D001D001D001D0011000D0011000D00000000000000000011000D0042 -:2022A00000001010010D00D0010010100D0D00000000010001001100D1D001000000000030 -:2022C0000000000000000000000001000000000000000000000011100DDD000000000000F2 -:2022E0000000000000000000000001000100000000000010000D00D0010010000D000000D1 -:2023000011001D101D1D1D1D1D1D1D1D110DDDD011001100110011001100110011000D0048 -:202320001100DD10001D11DD1DD010001110DDDD1100DD10001D01DD0010001D11DDDDD0FB -:202340000010011D101D0D1DD01D111DDD1D00DD11101DDD1100DD10D01D001D11DDDDD048 -:2023600011001D10100D11001D10101D110DDDD01110DD1D01DD01D011D0110011000D00F2 -:2023800011D01D1D1D1D11D01D1D1D1D11D0DD0011D0DD1D001D111DDD1D001D11D0DD00DA -:2023A0000000110011000D00110011000D0000000000110011000D0011001100010001006C -:2023C0000000010010000D001000010000000000000000001100DDD01100DDD00000000052 -:2023E0000000100001000000010010000D00D0001100DD10001D010D01D0000001000000E3 -:202400001100DD10111D1D1D111D0D1D110DDDD01100DD10001D001D111DDD1D001D00DDD9 -:2024200011001D101D1D110D1D101D1D110DDDD011001D101DDD1D001D001D1011DDDDD09A -:2024400011001D101D1D1D1D1D1D1D1D110DDDD011101DDD1D0011101DDD1D001110DDDD40 -:2024600011101DDD1D0011101DDD1D001D00DD0011001D101DDD1D101D1D1D1D110DDDD04E -:2024800010101D1D1D1D111D1D1D1D1D1D1DDD0D11001100110011001100110011000D005E -:2024A000010001D001D001D001D001D011D0DD0010101D0D1DD011001D101D1D1D1DDDDDA5 -:2024C00010001D001D001D001D001D001110DDDD1110111D111D1D1D1D1D1D1D1D1DDD0D31 -:2024E0001010111D111D111D111D011D001D00DD11001D101D1D1D1D1D1D1D1D110DDDD0FB -:2025000011001D101D1D1D1D11DD1DD01D00DD0011001D101D1D1D1D1D1D1D1D11DDDDD073 -:2025200011001D101D1D11DD1D101D1D1D1DDD0D11001D101DDD1100DD10001D11DDDDD0BC -:20254000111011DD110011001100110011000D0010101D1D1D1D1D1D1D1D1D1D11DDDDD02D -:2025600010101D1D1D1D1D1D1D1D110D11D00D0010101D1D1D1D1D1D1D1D111D10DDDDD077 -:2025800010101D1D1D1D110DDD10001D001D00DD10101D1D1D1D110D11D0110011000D00C3 -:2025A0001110DD1D01DD11D011001D001110DDDD0000010011D0110011D0D100D0D00000F3 -:2025C00011111111111111111111110111000D001100000000000000000001001000DD0022 -:2025E00000000010100D01D0010010000D10D00D000000001110DDDD1110DDDD000000001C -:20260000110011001100110011001100DD00DD0000110011001100110011001100DD00DD7A -:20262000DD00DD00DD00DD00DDDDDDDDDDDDDDDD00DD00DD00DD00DDDDDDDDDDDDDDDDDDE2 -:20264000000100010001000100010001000D000D111111111111111111111111DDDDDDDD1A -:20266000000D000D000D000D000D000D000D000DDDDDDDDDDDDDDDDDDD00DD00DD00DD0096 -:20268000111111111111111111111111DDDDDDDD00110011001100110011001100DD00DDDA -:2026A000DDDDDDDDDDDDDDDD000000000000000000DD00DD00DD00DD00DD00DD00DD00DD4A -:2026C000110011001100110011001100DD00DD0000000000000000000000000000000000DA -:2026E000DD00DD00DD00DD00DDDDDDDDDDDDDDDD0000000000000000DDDDDDDDDDDDDDDD96 -:20270000DDDDDDDD00000000DDDD000000000D0DDDDDDDDD00000000DDDD000000000DDD59 -:202720000D0D0D0D0D0D0D0D0D0D00000000DDDD0D0D0D0D0D0D0D0D0D0D00000000DDDD21 -:20274000000D000D00000000DDDD00000000DDDDDD00DD0000000000DDDD00000000DD0D8D -:202760000D0D0D0DDDDD000D000D00000000DDDD0D0D0D0D0DDD0DD00DD000000000DDDD05 -:202780000000000000000000DDDD00000000000000DD00DD00000000DDDD00000000DDD05E -:2027A000000000000000000000D000000000DDDDD0D0D0D0D0D0D0D0D0D000000000DDDDB5 -:2027C000DDDDDDDD00000000DDDD00000000DDDDDDDDDDDD00000000DDDD000D000DDD0DDF -:2027E0000DD00DDD0DD00DD00DDD00000000DDDDD00DD00DD00DD00DDD0D000D000DDDDD82 -:20280000000000000000000000DD003300D300D3000000DDDDDDDDDDDDDDDDDDDDDDDDDDC9 -:202820000DDD0DD3DDD3DDD3DDDDDD33DD43DD443DDD33DD33DD33DD33DDDDD33DD344D431 -:202840000000D000DD00DDDD33DD33DD3344334400000000000000000000D000DE00DE0077 -:202860003D443D44D344D344DD44DD44DD44DDD44E0044004400DD004D004DF044F044F06F -:20288000DD4444444444DD44ED44EE440FDD0FDD4D444D444D44DD44DD444444DD44DDDD53 -:2028A000003D00EE00FE00FF00000000000000004333DD43E3EEEE3EFFFFFFFF00FF000062 -:2028C0004D444D444D444D444DD4DD44DDEEDDDE44F044F044F044004F004F00FF00FF0070 -:2028E0004DEEEEEFEEFF33FFFFFFFF00F0000000FF00FF00F00000000000000000000000C6 -:20290000033333333333003300330033333333330000000000002000222222222222222220 -:20292000222222222222222222222222222222220000000000000000000000002000220035 -:20294000220022002200220222222222222222220000200022002200222222222222222269 -:2029600000000000000000000000200022222222330030000000000000000000000000004C -:202980000000000000000022222222222222222222222222222222222222222222222222E5 -:2029A000002200220022022202222222222222220000000000000000000000000022002259 -:2029C0000000000000000000000000002222222200000000000000000000222222222222A3 -:2029E0000000000000000000222222222222222200000000000000000000000033333333FB -:202A0000002202222222222222220022000000000000000000000000000000000000000280 -:202A2000002200220022002200220222222222220022002222222222222222222222022284 -:202A4000000000000000000000000000000200222222222222222222222222222222222232 -:202A600000000000000200220222002200220022002202222222222202220022222222220C -:202A80000000000000020002000000000022002222222222222222222222222222222222CE -:202AA000000000000002002200222222022200220300033033333333003300330033003378 -:202AC0000000000000000000000200220222222200220002002222222222222222222222D0 -:202AE0000000000000000000000000000000000000000000000000000000000000002000B6 -:202B00002200220022222222222022002022222200000000000000000000000020002000BF -:202B200020002000220022002200220022002200220022202220222222222222222222228F -:202B40000000000000000000000022002200200000000000000000000000000000002000F1 -:202B600000000000000020002000220022002222222222222220222222222222222222226F -:202B800000000000000000000000000000000000000020002000220022002200220022202B -:202BA000220022002200000000000000000000000000000000003333000000000000000049 -:202BC000000000000000000000000000000030003333333333333333333333333333333395 -:202BE000222222222222222222232233222222332233333333333333333333333333333373 -:202C00003333223322332222222222222233223333333333333333333333333333333333FE -:202C2000222222222222223222322233223322332333223333333333333333333333333312 -:202C40002222222222232222223323332333223333333333333333333333333333333333DD -:202C60002222222222222222222222332233233333333333333323333333333333333333E0 -:202C80000000000000002222223322332233333300330333033333333333333333333333EE -:202CA000000000000000000000000000003333330000000000000000003333333333333316 -:202CC0000000000000000333333333333333333333333333333333333333333333333333F6 -:202CE000003303330033033333333333033303330000000000300033333300330033003368 -:202D0000333333333333333333333333333333330000000000000000303030333333033324 -:202D2000FFFF33FFF03F0F3F0F3FF03F00FFFFFF3333000000000000000000000000000006 -:202D400033000000000000000000000000000000333333000000000000003330003300030E -:202D600033333333300033000033000300000000300033333333333000000000000000008F -:202D8000330033000333333333003000000000003333000000000000000000003333000002 -:202DA0000033000000000000000000000000000000330000330033003333333333333333AF -:202DC0003333333303330033003300030033333333333300300030003000330033333333C7 -:202DE00000000000000000000000300033033333000033000000000033330000000000006E -:202E0000000000000033003033003000000030000000330000300033000300030000000020 -:202E20003333333333333333033303330033003300333333000000000000000030003330FC -:202E4000330033003330003300330033003300333003000000000000000000000000000077 -:202E600033333333300000000000000000000000333333330000000000000000000000008A -:202E8000333300000000000000000000000000000000000000000000000033330000000066 -:202EA000000000000000000000000000333300000000000000000000000000003300033343 -:202EC0000000000000000000000000000333333300000000000000000000000000003333F0 -:202EE00033300033000000000000000000003300330033003300033300330000000333339E -:202F00000000000000000000300033333333333300000000000000000000000030003000EF -:202F20003333333303330333003300330033000300000000330033003300333033333333F5 -:202F4000000000003000300030003000330033003333003300330033000300030003000043 -:202F6000333333330000000000000000333000003333333300000000000000000033030020 -:202F800033333333000000003300330003000300333333330000000000000000000000002D -:202FA00033330033000000000000000000000000FFFF00FFF00F0F0F0F0FF00F00FFFFFF44 -:202FC0003300000300330033000300030003003333000000000000000000000000000000E6 -:202FE000FFFF00FFF33F0F0F0F0FF00F00FFFFFF000000333333000000000000000033336B -:2030000000000000000000000000000000000000330030000000000000000000000000004D -:2030200003333333333300330033003333333333000000000000000000000000333333335D -:2030400003000330333333330033003300330033000000000000333300000000000000003C -:2030600000000000000000000000000000003000FFFF00FFF00F0F0F0F0FF00F00FFFFFFEC -:20308000000000000000000D00DD00DD00DD0DD9000000000000000000000000D000DD00F9 -:2030A00009DD009D000D000D000900000000000099000000000000000000000000000000D1 -:2030C0000000000000000000000000D000DD00D90000000000000000D0009000000000000A -:2030E00000DD00D90090000000000000000000000000D000D000900000000000000000005A -:2031000000000000000000D000DD00DD00DD00D9000000000000000000000000DD00D900B9 -:203120000DDD099D000D000900000000000000009000000000000000000000000000000059 -:20314000000000000000000000090000000200020000000000000000000000000000000062 -:20316000092000020002000000090000000000000900000000000000000000000000000010 -:20318000000000000009000900000000000000000000000000000000090000000000000014 -:2031A00099000000000000000000000000000000000000000000090000000000000000006D -:2031C0000000000000000000000000000000000000000000000000000000000000000000EF -:2031E0004449DDDD0000000000000000000000009478DDDD000000000000000000000000C2 -:20320000000000000000000000DD00DD00DD00DD00000000000000000000D0009D009D0030 -:2032200000DD00DD00DD00DD0000000000000000DD00DD00D0000000000000000000000090 -:203240000000000000000000000000000000000000000000000000000000000000000078F6 -:203260004449DDDD0000000000000000000000009444DD7800DD00000000000000000000FD -:203280000000000000000000000000000000CCCC0000000000000000000000000800C88046 -:2032A0009999DDDD000000000000000000000000987DD8DD0D00000000000000000000004B -:2032C000000000000000009900CD00DD00D000D0000000000000000000000000000000000B -:2032E00000D000D000DD00CD009900000000000000000000000000000000000000000000EB -:2033000000000000000000000000000090009D000000000000000000000000000000000080 -:20332000090009DD00CC00990000000000000000DD00DC00990000000000000000000000E7 -:20334000000000000000000000000002022222220000000000000000000002002202222299 -:203360002222522202220225055000000000000022252250250050000000000000000000C7 -:20338000000000000000000000000990099909990000000000000000000000009000990027 -:2033A000999999994999044900040000000000009900999099494904040000000000000081 -:2033C0000000000000000000000D0D0D0DDD09D90000000000000000000000000000D0002A -:2033E00000DD00DD00DD00D90090000000000000DD009D000900000000000000000000004A -:2034000000000000000000000000000000DD00D90000000000000000D000DD0099000000B0 -:2034200000DD0DD90990000000000000000000000000D000D0009000000000000000000000 -:2034400000000000000000000055555555555954000000000000000000005400444044D426 -:20346000454444444443D33D0DD00000000000003D00D000000000000000000000000000BA -:20348000000000000055005505545554594455440000000000004400443033D0DD000000B2 -:2034A000454444434443D33D0DD00000000000000000000000000000000000000000000088 -:2034C000000000000000000005505555595545550000000000000000000000000000500055 -:2034E000444544444444DD3300DD0000000000004404444044D0DD00000000000000000089 -:20350000000000000000000005505555595545550000000000000000000000000000000064 -:20352000445544554444D4440D44003300DD0000000000004400444044D0DD00000000009F -:203540000003304400440043003500350355045503000000000000000000300030004000AF -:2035600034553435342334320423035500330000430043004300430040003000000000006E -:20358000003400340044004403440342034233420000000030003300430043004300440085 -:2035A000332933293399339903290352004500334400540024002400540044004300000007 -:2035C000000500340534044203220329549944995000300043002450254092309943994302 -:2035E00034993492349203920399002200440003994329532953293099302200440030004C -:20360000000000300043004405433544533244290000050054004300530043004330355016 -:203620005429359934995499339905220044003343302550245024002400450043000000EF -:20364000000000000000000D005D005D0D44054D000000000000000050005D00DD00DD0099 -:203660000DDD0D4500DD00DD00DD0000000000005D00D500DD00D000000000000000000098 -:203680000000000D0D050054DDD4D544054D522900000D00D000050054D0D4D0440044DD11 -:2036A0005D49C5D20542D554D042D04500DD000D240D4D00DD0055D005D00D000D000000DD -:2036C0000000000540050544044440234543444300000000400000005500455024003440DB -:2036E00044330444402404440444450400040005444425004400450000004000400000000F -:203700000033333D55444D5435D44545454534453005D40034305530D5454D434D43545363 -:203720004D554D445444D4DD454445D333550033D4D5344344434445DD3055304300440563 -:203740000000000008EEDE888888884478DD78DD20002D00E7007E20772D777D77DD77D082 -:203760009944E922E922E222EE22DEEE0DEE00DD9900D90099D022D022D0E4D0EE00DD0060 -:203780000000000500050003500035000000005000000000000000500000050000000400EE -:2037A000000000000004000000000400030000000044004405000000000000003000000041 -:2037C0000FF90D990D990D99009999DD998999890FF099DD99DD99D0D900DD999999999995 -:2037E00099869986DD867886D7768778DD670077969956DDD6D058D0D80076D068D0870016 -:2038000000000000004404330399D9DDD9999D99000000004000440044003430933093337E -:203820006969696933344243244424423332DD339333933334334433443D333033D0330031 -:2038400000000000004444444433439943DD39990000000000004400440044304430444360 -:20386000DD999969D664D64433333223D3320D33444344334433443D433033D03300DD0000 -:20388000004444444433439943DD3999DD99996900004400440044304430444344434433AA -:2038A000D664D64433333223D3320D3300DD00004433443D433033D03300DD000000000059 -:2038C000004404330399D9DDD9999D9969696969400044004400343093309333933393338E -:2038E00033344243244424423332DD3300DD000034334433443D333033D03300DD000000E7 -:20390000000D009900694269249D443D42432443440033009940D9449D449D4499439943D8 -:20392000244433443344D3340D33003300DD00009943333D443044D033003D00D0000000C6 -:2039400000000000000D009900D94269249D443600000000440033009940D9449D449D44D3 -:2039600042432443244433443344D3340D330033994399439943333D443044D033003D008F -:20398000000D009900694269249D443D42432443440033009940D9449D449D449943994358 -:2039A000244433443344D3340D33003300DD00009943333D443044D033003D00D000000046 -:2039C000004444444433439943DD3999DD9999690000440044004430443044434443443369 -:2039E000D664D64433333223D3320D3300DD00004433443D433033D03300DD000000000018 -:203A000000000000004444444433439943DD3999000000000000440044004430443044439E -:203A2000DD999969D664D64433333223D3320D33444344334433443D433033D03300DD003E -:203A4000000D009900694269249D443D42432443440033009940D9449D449D449943994397 -:203A6000244433443344D3340D33003300DD00009943333D443044D033003D00D000000085 -:203A8000004444444433439943DD3999DD99996900004400440044304430444344434433A8 -:203AA000D664D64433333223D3320D3300DD00004433443D433033D03300DD000000000057 -:203AC000000000000000009090000044043303DD000000000000900000004000440934001A -:203AE000099909DD439D24994233324432333333934099439943934334334433333D33D039 -:203B00000000000000000000000000000033033D00000000000000000000000040003400BE -:203B2000099909DD43DD449924993244324432339300994099439943943344334433333DA9 -:203B4000000000000000004409449D949D99999900000000090000909900990999009990A5 -:203B60009999999499444444344233423332DD339990999399434433443D243023D033007E -:203B800000DD0DDDD9DDDDDD443344334333DDDD0000DD00DD00DD00DD00DD00DD00DD00C5 -:203BA000DDDDDDDDDDDD0FFFDDDFDDDD0D0D0E00DD00DD00DDA0F000DD00DD00D00000007A -:203BC00000DD00DD0DDD5DDD5444443304D30DDDD000DD00DD004DD03D003D00DD00DD005C -:203BE00000DD0DDD0DDDAAFF0DFD00DE00DD00EEDD00DD00DD00AA00AD00DD0000000000ED -:203C000000DD00DD0DDD5DDD5433443304330DDDD000DD00DD00DDD0DD00DD00DD00DD00FC -:203C200000DD00DD00DA00FA00DD00DD00DD0000DD00DD00DD00FF00DD00DD00D000E0005F -:203C400000DD00DD0DDD0DD3443343333D3D0DDDDD00DD00DDD0DDDDDDD0DD00DD00DD002A -:203C600000DDAADDAADD00FF0DDD00DD00DD0000DD00DD00DD00FF00DD00DE00DE00000087 -:203C800000DD00DD0DDD5DDD5433443344330DDDD000DD00DD00DDDDDDD0DD00DD00DD005F -:203CA00000DD0DDD0DDD00AD0DAD00DD00DD00EEDD00DD00DD00FF00DD00DD0000000000F4 -:203CC00000DD0DDDD9DDDDDD443344334433DDDD0000DD00DD00DD00DD00DD00DD00DD0083 -:203CE0000DDDDDDDDDDD0FFFDDDD0DDDED0D0E00DD00DD00AD00A000DD00D00000000000F8 -:203D0000000D00DD009D00DD0DDD0DDD54435433DD00DDD0DD00DD00DD00DD00DD00DD0095 -:203D2000043300DD00DD00AA00AD00DD00DD00E0DD00DD00DD00FA00DAD0DDD000E000E0F9 -:203D4000000D00DD009D00DD0DDD5DDD54434433DD00DD00DD00DD00DD003D003D003D00C5 -:203D600004D300DDDDDDDDFF0DDF00DD00DD00E0DD00DD00DD00FF00DDD0DDD000E000E0C3 -:203D8000000D00DD009D00DD0DDD0DDD05430533DD00DD00DD00DD00DD00DD00DD00DD0083 -:203DA000043300DDAADDAAFF00DF00DD00DD00E0DD00DD00DD00FA00DAD0DDD000E000E09E -:203DC00000D9009D5DDD54444433D3D3DDDD0DDDDD00DD003D003D003D00DDD0DD00AD0032 -:203DE000DDDDDDDDDDDD00DD00DD00FF000D0000DD00DD00DDEEDDDEDFD0FD00DD00E00026 -:203E000000000000001100450145015513551345000000000000110055009500950055000B -:203E200013440144013400330011000000000000550055004400110000000000000000006E -:203E400000000000001100780178018816881678000000000000110088009800980088005A -:203E60001677017701670066001100000000000088008800770011000000000000000000C6 -:203E800000000000001100FF01FF01FF1BFF1BFF0000000000001100FF009F009F00FF0091 -:203EA0001BFF01FF01BF00BB0011000000000000FF00FF00FF00110000000000000000004E -:203EC0000000000000110022012201221E221E220000000000001100220092009200220070 -:203EE0001E22012201E200EE00110000000000002200220022001100000000000000000006 -:203F000000006600BEB0BEB011B018B011B08880000000000000000000000000000000000D -:203F200011B018B018B011B0BEB0BEB066000000000000000000000000000000000000002D -:203F4000000000DD00DD0DDDDDDDDDDDDDDD5DDDDD00DD00DD00DDD0DDD0DDD0DDD03DD0FD -:203F6000554403D3A0DDDDDD0DDDEEFFEEDD0E003D00DD00DDA0DD00FF00DE00DE000E00AE -:203F8000000000DD00DD0DDDDDDDDDDDDDD9D9D9DD00DD00DD00DDD0DDD099D0DDD0DDD0ED -:203FA000D9D9D9D90DDDDDDDDDDDEDFFEDDDEE00990099009900DDAAFDA0DE00DE000E00E2 -:203FC000000000DD00DD0DDDDDDDD99D9D999D99DD00DD00DD00D9D0DD90DDD0DDD0999071 -:203FE00099999999099DADDDADDDEDFFEEDDEE00D9009900DD00DDA0FD00DE00DE000E006B -:204000000000000000000000000000000000000000000009009B0091001B00BB001B0091E9 -:204020000009009100BB09BC09CC09BC0011009999091111BCCBCFFFFCFFCCCC1911001933 -:2040400099901119BB11B1BB11CC11CC1BCCB1BC000090991911CCFBFFBFFFCFCFCFCFCFE5 -:20406000CBBC0CCFCFFFCFFFCFFCBBFF11119999FFCFFFCFBFFF1CCBBC1CBBB11999000032 -:20408000099991111BCCBCFFCFFFFFBBBB1BB19999001190CC19BF11FCB1CCB9BB99190004 -:2040A000CB00CC90FC90CB00BB00990000000000000000000000000000000000000000002E -:2040C000000000000000000000000099091191BC000000000000000000001910B1B9CBCCB6 -:2040E00091CC91CF09FF09CC0011000000000000CCFFCBFC1CB1FF101F100900000000006F -:2041000000000000000000000009009109BB09BB0000000000000000009099B911F1BCF1EC -:2041200000CC0010000000000000000000000000B110CC0011000000000000000000000005 -:2041400000000000000000000000000000DD00DD00000000000000DDDDDDDDDDDDDDDDD0ED -:2041600000DD00DD00DD00000000000000000000DD00DD00000000000000000000000000EE -:204180000000000000000000000000000000004400000000000000000000000000DD0DDD14 -:2041A00004440044004400000000000000000000DDDD4DD044000000000000000000000014 -:2041C00000000000000000440044004400440044000000000000000000000000000040004B -:2041E000004400440000000000000000000000004DDD44D0440000000000000000000000B5 -:204200000000000000440044044404440444004400000000000000004000440044004400EE -:2042200000440044000000000000000000000000444044404444444400400000000000009E -:2042400000000000000D00D90AD90DD900DD00DD0000DD00DD00DD00DD99D999D9D9D9DD0E -:2042600000DDEDDDEDFD0DFF00DD00DD00DD000ED9D9D999DD99DD00DDAA0DA00000000051 -:20428000004300450054003400320037003D0937550033D0445D5335545D5455545D3495D3 -:2042A0009999999909DD009D00990099009900FF94999999DD9D999999DD999D999DDFDDA4 -:2042C000004300450054005400390037003D0937550033D0355D4335444D3455344D34444C -:2042E0000999009900DD00990099009D009900FF949D999DD99D99D099009900FF00DD00EB -:2043000000550053003400340027007700DD0077550053D0535D5335535D5353535D495D3F -:20432000009D009900DD00990099009900FF00DD495D99009D0099D09DD0D99DD99D0DFD1B -:2043400000550053003400340072007700DD0077550053D0535D5335535D5353595D995D5E -:20436000009D0099009900DC00990099009900FF995D99009900DD00D9D0D99D099D0DFDF4 -:2043800000430043003400340097007700DD0077550033D0535D5355535D5355535D595D5F -:2043A000099D09990DDD009D00D900D900F900DD595D999DDD9D99D0990099009900FF000D -:2043C0000043004300340034003A0037003D0037550033D0335D5435355D3553355D359523 -:2043E0000999099900DD009D0099009900FF00DD95999999DD9D999999DD99D099D0FF009E -:204400000007004700430047004300430043004355D0535D33453733F3547353D395739980 -:204420000949099900DD009900990099009900FF99999999DD99D9D9999DD999D9990DFD98 -:2044400000000004003400D4004400D400940094355043353335473323557355D399D39919 -:204460000094009900DD00D900990099009900FF7999999DDDD09D9D99999D999D99DDFDE8 -:2044800000000004003400D4004409949D949D94358043853334435379537735DD99DD99EF -:2044A0009994D9990DDD00D900990099009900FF7799999DDDD99D9D99999D999D99D0FD2F -:2044C00000730033003400720037993D993D9937550053D0355D735D35453599359935991F -:2044E000999909990DDD009D00990099009900DF95999999DD9D99D0999DD999D9990DFF4E -:204500000000000505450535003500430043094450005300350535D5345D345D949D7499C3 -:2045200009D4099409DD009400D90099009900FFD49974999D9994DDD9D0999D999DFFDD6B -:2045400000000000000000000000000000000F0000000000000000000000000088784D7689 -:20456000F99DF9D9D999FD99F9D9D9D90D9D00DD4D7788776677888796669977977766662B -:20458000000000000000000000090009FF09FF9D000000000000000090009000998088881C -:2045A000F99DD9DDD99D0DDD099DF99DF99DF9D966775D885D875D77777666879977996648 -:2045C00000D900990F990D9900D9009D00990999000F009F00999999D99DDDD999999D797D -:2045E00099999D999D76D9760D680076007700D75579DD79DD77557D2577867D877888DD6B -:20460000000000220022022202820288009800980000220022E022ED22ED97EDD96DD9DD32 -:20462000004408772287D2870DEE00EE0076002D46D0660077207722EEDDEED076D022008C -:20464000000000220022022202220288009800980000220022E022ED26ED97EDD96DD9DD4E -:20466000008400770087028702EE0DEE0076002277D06600776076D072D072D026D0DD008B -:20468000000400220022002200720088008800880000220022E0222E222E776E9766976DFC -:2046A000004400770088002200E2007700D7002277DD77D07660666DEEEDEEDD66DD22D024 -:2046C000000000020022002200270089008D008D040024E0222E222272227722772277668B -:2046E000004400D70066006600EE00D800870022776D666666666666EEEEEE667D66DD220A -:20470000004000220022002200820087008700870400240022E0222E222E776E9766976D2C -:20472000004400770088008800EE00EE0066002277DD66607766776DEEED77ED77DD22D0EA -:20474000000000000002002200220029000D000D0000222E2222222227729987DD87DD7787 -:204760000004003703930999039303330D3200DD4476F876D2767D66EEEEE7EE6676DD2DF4 -:20478000000000000002002200220029000D000D0040224E222222222227887789878D77FC -:2047A0000330399399FF99DD39933333D33D0DD24466777627762666DEEEEE776676DD2DF4 -:2047C000004000220022002200820087008700870400240022E0222E222E776E9766976D6C -:2047E000004300770088008800E800DE000D000077DD776D766D6DEDDE77EE672DD2D00D21 -:204800000000005500550099009900D90AD90A554400444D54449D43993D993D993A44553C -:204820000D550034004520552D440244004D00D04443443D43D0CC3D4333333DDDD200009B -:2048400000000000005500550099009900D900D900004400544D5444D5439D3D9D3D9DF8EC -:204860000055005500D300A500AC00D500050022448F443D433D443DCC2D332D3D2DD0D0B6 -:204880000000000000550055009900990096009600004400544D55445543D43DD43DD438CC -:2048A0000055005500AA00DA000D002300D2000D548F443D553A433DCCCD44D05442DD2DFB -:2048C0000005005505550D9D009900D900D9AA55440044D04444443D44D04408438043FA6F -:2048E000A444D3340D3300CC023502330D3300DD3333433D33D0CC32433244D2552DDDD093 -:204900000000000000550055009900990096009600004400444D54445433D43DD43DD4386D -:204920000055005500AA00AA00D3000300330022448F43335533443D5CCD543D22DDDDD096 -:2049400000000000005500550099009900D900D900004400444D55449D33993D993D993D09 -:204960000055005500430044005C02550D55002D55F8448F445D4455CCAA44AA4D33D02294 -:20498000000000000055005500990099009D009D000054D0554455445544D543D543D543CA -:2049A0000055003500AA00AA00D4000400040022553754333433CCCD43323D323D322D2D5B -:2049C000000000000055005500D9009900D600D6000054D0554455449944994369436943A8 -:2049E0000055AA45DA440D3300DD000400040022553754433433CCCD43323D323D322D2249 -:204A000000000000005500550099009900D900D9000054D0554455449D449933993399336D -:204A2000005500450044003300DD0004000400225537534334AACCCA43323D323D322D2D1B -:204A400000000099099909D909D90999A999AA99000043D044334433D93399939993D933BF -:204A600044554455D4450DCC00550024002D00DD443D44334433CC3D44224422332DDDD03E -:204A80000000000000050055009900D90099009900000999999999D999D999999999D9998A -:204AA0000055A055AA55D4550D5C0024002200224443333D44444443CC3D442D432D3DD0B6 -:204AC000000000550055009900D900D90A990A554400444D54449D43993D993D993A44557A -:204AE0000D550034004520552D440244004D00D04443443D43D0CC3D4333333DDDD20000D9 -:204B0000000000550055004400990099006900D9443D4433543344339D3A995A9955995F8D -:204B20000044004300CC00350035022500D200004458553DCCCD533D53DD3DD02D00DD0021 -:204B400000000000000000550055009900990069000000004400544D55449D43993D993D06 -:204B600000690055005505A40DAC00D40044002299375570443D353DC5D03532AA42DA221A -:204B800000000055009905D90D990099A055A35509009990999999999999999459445443F4 -:204BA000A334DDCC0054055404330D42002D00D0443333C2CC52443233DDDD000000000058 -:204BC00000900999999999999999A999A499D354000055405944999499949994D944444409 -:204BE0000D3400CC00550044003300DD00000000333344CDCC5544443334DD44002D00D05A -:204C0000004000220022002200820087008700870400240022E0222E222E776E9766976D27 -:204C200000442277DD88006800E700DE000D000077DD676D66EDDD77EE77EE6622DDDD0094 -:204C4000000000420042002200220022002700790000220022E0222E222E222E722E997D00 -:204C6000009D229DD2840D7800E702EE0D6600DDDDDDDD774476776D76EDEE22D62D0DD0D7 -:204C8000000000420042002200220022002700790000220022E0222E222E222E722E997DC0 -:204CA0000099009D07882288DDE800EE002600DD99D0DD774776776D77EDEE2D66DDDDD002 -:204CC0000000000000220042002200220099209900000000220022E0222E299E999999993B -:204CE0002DD98899D8990D88008800E800EE00279999999979974766776D77EDEE2D66DD3B -:204D000000090000095500450055009909990999000000005500555055555555595599958B -:204D2000599959998899D8840D8400E805EE0D77999D999D4977D476D46D47EDEE65DD55B2 -:204D40000000008802EE0DE8008802882277D99900000720EE2287ED877D4777477779998C -:204D6000009900D9009900990022004E004E00DD999D999E999E292E22EEEEEDEEDDDDD096 -:204D800000000000000000000000040B0D44004D00000000FBBDBBBBFBBF444B43DB943B02 -:204DA000004D44444D4DD9D94444DDBB00BB00FB943344334433D933443BBBBBBBFBFBBBDA -:204DC000000000000000000004000D44004D004D00000000BFB0BBBB444B43DB943B9433BC -:204DE00044444444D9D9DDDDD9D9444400FB0DBB44334433D933DD33D933433BFBFBBBBB3A -:204E00000000000004000D44004D004D44444D4D00000000444D43DB943B9433443344334E -:204E2000D9D9D9D94444DDDD00BB00BB0DFB0DBBD933D933433DDDDBBBBBBBBBFBFBBBBBDE -:204E400004400D4400D400DD444444449D9D0DDD044043D0D93DD933443344339D33DD3391 -:204E60009D9D4444DDDD00BB00BB0DBF0DBB00DD9D33433DDDDBBBBBBBBBBFBFBBBBDDDD2D -:204E800004400D4400D400DD444444449D9D9D9D044043D0D93DD933443344339D339D3341 -:204EA0004444DDDD00DB00BB00BB0DBF0DBB00DD433DDDDFBBBBBBBBBBBBBFBFBBBBDDDDA2 -:204EC00004000D440044004D44444444D9D90DDD444043D09430943344334433D933DD3314 -:204EE0000DDD0DDDD9D94444DDDD00FB00BB00DDDD3DDD3DD93D433DDDDDBBBBBBBFDDDD29 -:204F0000000004000D440044004D44444444D9D90000444043D09430943344334433D933CD -:204F2000DDDDD9D944440DDD00BB00BB00FB00BBDD33D93D443DDDDDBBBBBBBBFBFBBBBBAE -:204F4000000B04BB0D44004D004D44444444D9D9BB00444043D0943B943344334433D933F8 -:204F6000DDDDD9D93333DBBB0BBB0DBB00FB00DBDD33D93B33BBBBBBBBBBBBBBFBFDBB003E -:204F8000040B0D44004D004D44444444D9D90DDD444043D09430943344334433D933DD333F -:204FA0000DDD0DDDD9D93333DBBB0DBB00BF00DBDD3BDD3BD93F333BBBBBBBBBBFBDBB0034 -:204FC00000BB00BF00BB0BBB0B43BF43BBD3B499BB00BFB0BBBBBBBBBB44444D44D3493372 -:204FE000B499B49DB444DB440BD400D90033000049934D9344334D3344939D3D333000004A -:20500000000000BF00BB0BBB0B43BF43BBD3B499BB00BFB0BBBBBBBBBB44444D44D34933EC -:20502000B49DB49DB444DB440BD400DD00D900334D934D9344334D334433DD9D9D30333017 -:205040000000000004000D4400D400944444444400000000444043D0993B99334933443359 -:20506000D9D90DDD0DDD0DDD0DDD0DDDD9D94444D933DD33DD3DDDDBDDBBDDBBD9BF44BBFD -:20508000000000000000004404D40094444444440000000044004400994B99D3443344338A -:2050A000D9D90DDD0DDD0DDD0DDDD9D933330BBBD933DD33DD3DDDDBDDBBD9BB33BBBFFBF6 -:2050C0000000000B00BB00440B0D0BDDBBDDBB9D0000440099009D309944449944D9D499E8 -:2050E000FB3DBB33BBB3BBBBFBFB0BBB00BB00BBD933DD33DD33DDD3393B33BBB3F0BB00D8 -:205100000009009900DD00DD90DD9DD9DD9990D999009900DD90DD9DDD9D9D9D99DD990095 -:20512000DD9909DD0D9900DD009D009D00D0009D9D00D90999DDDDD09DD9D9D90D0D00996C -:205140000009009900DD00DD90DD90D9D09990D999009900DD90DD9DDD9DDD9D99D099003C -:20516000D09909DD0D9900DD00090009000D00999D00D99999DDDD909D90D9D00D9900DD5A -:205180000009009900D900D900D9009900990099990099D0D99DDD9DDD9DDD9D99D099002F -:2051A0009099D0DD9D999DDD0D000000000000009D00D909D9D0DD00D0009D009D009900B4 -:2051C00000090099009D009D009D009900990099990099009990D99DD99DD99D99D09900CC -:2051E0009099D0DD90999DDDDDD90009000D00999D00D90009D9DDDDD900D9D90DD9000D41 -:2052000000090099009D009D009D00990099009D990099009990D99DD99DD99D99DD990971 -:20522000009900DD0909999DDDD00000000000009D09D90D99D9D9D9DD0DD900DD009D0016 -:205240000009009900D900D900D900990099009999009900D990DD9DDD9DDD9D99DD990935 -:20526000009990DD9909DD9D00D00009000D00009D09D90D99D9D9D9DDDDD9D0DD00009D99 -:2052800000000099009D00DD00DD00DD0099009D99009990DD99DD99DD999D99999DD9D0D2 -:2052A000009909DD99D9DD0D00090009000D00999900DD00999DDDD0999DDDD00000000916 -:2052C00000000000009900DD00DD00DD00D90099000099D0999DDD99DD99DD99DD99999D7F -:2052E000009D009900DD000D00090009000D009999D09999D99DDDD0999DDDD0000000092C -:205300000000009900D900D900D90099009900D999009990D999DD99DD99DD99999D99D920 -:20532000009900DD00D9000D00000009000D0099999DDDD09900DD00D9D90D0D0000000934 -:20534000000900DD00DD00DD00D9909990D9D0999900DD00DD90DD9DDD9D999D99D09900CA -:20536000D9DD0D9900DD00090009000D009900DDD90099D9D90D9D00D9D90D09000D009923 -:2053800000090099009900DD90DD9DDDDDD99099990099009990DD9DDD9DDD9DDDD0990020 -:2053A0009DD9DDDD09000D00009D90DD9900DD009D00DD099DDDD90DDDDDD9D09D00D00074 -:2053C000000000000009009900DD00DD90DDDDD90000000099009900DD90DD9DDD9DDD9D41 -:2053E00090999DD9DD99D9DD0DDD0009009D99D099D099009D09D9DD99D0DDD99D09D90DE0 -:20540000000000000000000000000009009900DD0000000000000000000099009900DD906E -:2054200000DD00DD90D99D99DDD999DDDDDD00DDDD9DDD9DDD9D99DD99D9DDDD99D9DDDD14 -:2054400009009D09D99D09D00D09099D099D0DDD009099D9D9D999DDDD099D09DD0D999039 -:20546000000990999D9D9D9DDD9D0099009900D9D990999999D9D9D9D9D9D999999D99D07F -:20548000000000BB00BB00BB00BB0BBB0BBB0DBBBB00BBD0BBBD55BD44BD32D0D2D0220035 -:2054A00000DD040B00B200D2000200B200BB00BD2200BBB02BD02B00BB00DBD0DBBBBB22C4 -:2054C000000000BB00BB00BB00BB0BBB0BBB0DBBBB00BBD0BBBD4BBD42BD22D022D02200C1 -:2054E00000DD000000020002000200B200BB00BB2B00BB00BB002B00BB00BBD0BBBBDD221A -:20550000000B00BB00BB0BB50B44BB33BBBDDBD0BB00BB00BBD0B2D022D022002B002B00FD -:205520000D02002B002D00220022002B00DB00BBBD00BD00BD00BD00BD00BB00BBBB22D02B -:20554000000B00BB00BB0BBB0BB4BBB3BBBDDBDDBB00BB00BBD0B2D022D0220022002B00C3 -:205560004DD240B2002200220022002200D2000BBD00BD00BD00BD00BB00BB00BBBBBD2DEB -:20558000000000BB00BB00BB00BB0BBB0BBB0DBDBB00BBD0BBBD5BBD42BD22D022D02200EE -:2055A00000D000BB00D200B200B200B200DD00002B00BB00DB00BB00BB00BBD0DBBBBB2266 -:2055C000000000BB00BB00BB00BB0BBB0BBB0DBBBB00BBD0BBBD5BBD42BD22D022D02200B0 -:2055E00000DD00BB0002000200B200B200BD00D02B00BB00BB00BB00BB002BD02DBBBBD297 -:20560000000000BB00BB00BB00BB0BBB0BBB0D55BB00BBD0BBBD88BD77BD62D0D2D0220083 -:20562000005500DD0002000200B200B200BB00BD22D0BBD02B002B00BB00DBD0DBBBBB22AC -:205640000000000B0BBBB5BB54555444D5440D440000BB00BBD078BD67BD22BDD2D022001C -:205660000045005D00D2000200B200B200B200BD22D0BBD02B002B00BB00DBD0DBBBBB2235 -:205680000BBBBB55D44504440D3400330043004300000000D0007B007800B2D052D022D080 -:2056A00000330D440D5500D200220022002200D222002B002BB02BD0BB00DB00DBBBBB2DC3 -:2056C0000BBBB2BB222B2222D2220D22002200220000D0004D004500450022002200220092 -:2056E00000DD00020002002200220002000B00BB2B00BB002BB0BBD0BB00DDD022BDD22236 -:20570000000B00BB00BB00BB00BB00BB00BB0BBBBB00BBD0BBBDBBBDB5BDB4D0B3D0BB0BE1 -:205720000DBB00DD000B00020BB20B220DB200DDDDBD2BD02B0022002BB022D0222022001E -:205740000000000000050055009900D900990099000000005500599D999999999999999938 -:205760000055055D052500D2052205220D220022599DD5D0525525D022052255225D22D091 -:2057800000000000000B0099099909990999099900000000BB90BBD0BBBDB9BD999D999DAD -:2057A0000D9900BD0B2B0DD200220B220BB20D22B9D0DBB0B2B02B002200220B2BBB22BD81 -:2057C0000000000B000B00B900B90BBB0DDBB02BBB00BBD0BBBD9BBB9BBBBB99B999B9D916 -:2057E000B024BB44BB44D22202220222020B0DDBB9DDB9D92999BD99DBDDDD000000BD0014 -:2058000000020032003200DD00D900DD00DD0553330033003300D500D330DD55DDD0DD53DA -:205820000533053305330D3300DD0053005300333353335333533DDDD5D0D5D005D0033DBF -:20584000000000030003005D003D00DD00DD00D5230023002330DD509D33DD55DDDD3D5307 -:2058600000D500D300D300DD000D00000000000333533353DD53D5DDD5D0D5D033D03DD078 -:20588000000200020002005D0032005D000D0003330033003330D550D333D555DDDD53D00B -:2058A0000033003D003D000D00550053003300DD533D533D3DDDDDDDDD3DD03D00330033F5 -:2058C00000230023002200DD002D00DD00DD003D330033003300550033305555DDD03D007A -:2058E000003D00D500D500DD00530033003300333DD03DD0D3D0DDD0D5D005D00D3D033D8A -:20590000000000030003005D003D00DD00DD00D5230023002330DD50FD33DD55DDDD3D43F6 -:2059200000D500D300D300DD000300030000000333433D433D3DDDDD53D03DD03DD03DD092 -:20594000000000030003005D003D00DD00DD00D5230023002330DD50FD33DD55DDDD3D53A6 -:2059600000530053003300D3005D0033003300DD3353335333533DDDDDD005D005D033D0D5 -:2059800000000000000000050003005D0F0D055D330033302233DD55D933DD55DDDD555565 -:2059A0000FD503D50FD30DDD00D500D500D5003355553333DDDD33DDDD53DD53D053D0334D -:2059C0000000000000000005000300AD0FDA05D5330033302233DD55D933DD55DDDDD55D08 -:2059E0009997D3D30FDA0DAD00D500D500D50033D55DD3DD3D3333DDDD53DD53D053D03394 -:205A00000000000000000000000000D100D100D10000000000000000001010D11D011D01E6 -:205A200000D100D100D000D000000000000000001D011D010D10D0DD00000000000000001E -:205A4000000000000000000000000110001D000D00000000000000001011D10D01D001D06A -:205A600000D00100011000DD000000000000000001D001D01011DD0D0000000000000000BA -:205A8000000000000000000000000110001D000D00000000000000001011D10D01D001D02A -:205AA0000010011D000D00D0000000000000000001D001D01011DD0D00000000000000002E -:205AC00000000000000000000010001D001D011D00000000000000001011D10D01D001D0BD -:205AE000011D001D001D000D000000000000000001D001D01011DD0D000000000000000094 -:205B00000000000000000000011001DD0100001000000000000000001011D10D01D001D0E4 -:205B2000001D011D000D00D0000000000000000001D001D01011DD0D0000000000000000A0 -:205B4000000000000000000000000110010D010000000000000000001011D10D01D001D084 -:205B60000110011D000D00D0000000000000000001D001D01011DD0D00000000000000006C -:205B800000000000000000000110011D001D000D00000000000000001011D10D01D001D00B -:205BA00000D0000000000000000000000000000001D001D01011DD0D000000000000000068 -:205BC000000000000000000000000110011D000D00000000000000001011D10D01D001D0E8 -:205BE0000110011D000D00D0000000000000000001D001D01011DD0D0000000000000000EC -:205C0000000000000000000500A3000A0F0D05DD330033302233DD55D933DD55DDDD555515 -:205C20009779D3DD0FDD0D0A00A500D500D50033D55533333D3333DDDD53DD53D053D03389 -:205C4000000000000000000000030003005D003D000000000000230023003330DD50BD33DE -:205C600000DD00DD05D5055305DD0055003300DDDD55DDDD3D5533553D553D55DDDD533387 -:205C8000000000030003005D003D00DD00DD55DD230023002330DD504D33DD55DDDD3D55B4 -:205CA00055D5D3D50DD3005D0033003300DD0000333333D333D333DDDD33D3330D33003D7D -:205CC0000000000300030533553D55DD35DDD3D53300230023302355DDD52D55DD5333331D -:205CE0000D530053003300D3003D003D0033003333DD333D33DD333D3D33D033003D003328 -:205D000000000000000000000000000000000003000000000000000000000000230023D06A -:205D200000D3005D003D05DD05DD33D3DDDD00553330DD5DDD33DD55DDDD3D3D3D3D3DDD76 -:205D40000000000000020032003200DD00DD00D500000033333333D33303D50DD330DD5562 -:205D600000535533053D05D005000DD000D000D0DDD0DD05330533D533D533D533D5DDDD0E -:205D8000000000000055005500690AD9AA99559900004400544D54449D33993D993D993D0D -:205DA00045554455D4430D3400DC00550044002244D0335D33553333CC3D4442D3320D226C -:205DC00000000000000300680068006100610061000000003000660066001600160016008F -:205DE00000BB0061006100610068006800030000BB00160016001600660066003D00DD000F -:205E0000000000010019009900DD01DD01DD01DD00001100991099919D919DD99DD999D9E8 -:205E20000199019900D900D9001D00010000000099999D9D99D19DD1DD101100000000001C -:205E4000001101F201FD01DD01DD01DD01DA01DA11112DFFDDDFDDDFDDDDDDDDAADDAADDA8 -:205E600001DA01DD01D201DE01D401D401440011AADDAADDADEDD24429449E44E444111160 -:205E8000001101BB01BB01AA01DD01AA019905591111BBB9AABBAAABAADAAAAAA6AAA955D7 -:205EA0005DD55DDD5DDD05DD01DD015501660011AA9D55DDDDDD4DD5455B4666466641110F -:205EC00000000000000000000111110D01D001D0000000000000000011110D0DD0D0D0D074 -:205EE00001D001D011110D0D0000000000000000D0D0D0D011110D0D000000000000000048 -:205F0000000000000055005500D9009D0A96AA9900004400444D5544994DDD4D664D993D77 -:205F2000D55504350D44005300CC005500D50002554354333333333DCCD054004400D20067 -:205F40000000000000000055005500990099009D000000004400544D5544D5439D3D9D3D7E -:205F6000009D0455AA55DA430DCC00430033002D9D37553333333333CCDD333DD3330D221D -:205F80000000000000050055005505550D550055000000005500555D5555999D999096D0CB -:205FA00000450044AA43DA330DCC00430033002D96D3444344333333CCDD3330D3330D22D4 -:205FC0000000000000000000000000000000000000000000009900990919B91111BB0BBB11 -:205FE0000009009900990991091109BB00BB00FF901B99B1BBB11B11BBB1BBBBFFBB00FF0C -:206000000000000000000000000000000000000000090099001100BB09BB09BF09BC00BB06 -:20602000009109BB91C11B1C1B1FBBC199B10019909B19B0FCBBFCFFFFFFCCCF91BC009944 -:2060400099001199B11111BBBBFFBCCCBCCCBCCC00009999111111BCC1FCFCFCFFFBFFBB93 -:206060001BCCBCFFCFFCFFCCFFC1CB1B11991900FFFCFCFCCCCCCFCCBBBBB91990900000F1 -:2060800099991191BCC1CCFFFFFFCCFCB9BB109190001900B100CC90CC90CB00BB009900D8 -:2060A000B900CB00CB00B9009900000000000000000000000000000000000000000000003F -:2060C00000000000000000000000090091991BCB0000000000000000000099001190CCB1F0 -:2060E000BCCCBCFCBFFF1B119100000000000000CFC1CFB1FF10FF00C1009900000000006D -:2061000000000000000000000099991111CB1BCF00000000000000009900BC00BC00CC0099 -:2061200091FB0111000000000000000000000000CF00CB0010000000000000000000000017 -:206140000000000000000000000000DD00DD0DDD0000000000000DD0DDDDDDD0DD00DD009D -:20616000DDDD00DD0DDD00000000000000000000DD000000000000000000000000000000C1 -:206180000000000000000000000000000000040000000000000000000000000000D0DDD07E -:2061A00000444444004400000000000000000000DD00DD00400000000000000000000000D5 -:2061C0000000000000000000404044444444044400000000000000000000000000000000E7 -:2061E00004440044004400000000000000000000DD00DD00400000000000000000000000D5 -:206200000000000004000044004444444444444400000000000000000000000040004400D6 -:2062200004440044004400000000000000000000440044004400440044000000000000003A -:20624000000000DD00DDA099A0D9D099DDDD0DDD00000000D000DD009990999999999D9955 -:20626000FDDDDFDDDDDDDDDD0DFD00DF00D000E09999999999900000DD00DD000000000034 -:2062800000550445043444430472447794DD94775D003500540053D0350033D0990099D0B1 -:2062A00094D999999DDD099D9999999D999DDFD099D0999DD99D9DDD990099009900FF0079 -:2062C00000330443043344440479447794DD94775D003500540035D0350033D0990099D0AC -:2062E00094D9999999DD0D990DD9099909DF0DFD990099009D00D9009D009D00DD000000AA -:2063000000350543043344430423447304D394735D003500540035D0530033D09400990018 -:206320009499D99900DD0D99099909990DFD0DD0990099009D00D900990099009900FF009E -:20634000003505430433044303330333033300335D003500540035D0530033D03400940064 -:206360000099009900D909DC99C9999D99DDDFD0940094009400DD00990099009900FF000D -:206380000055044504334443D4934473D4D394735D003500340053D0530053D09400990049 -:2063A000949999999DDDD999099909990D9900FF990099009D00D900DD009D009D00D0001A -:2063C0000035044304354443047A447794DD94775D003500540035D0330033D0990099D0A9 -:2063E00094D999999DDD009D099909D90DD9000D99D0999DD99D9DD0990099009900FD0026 -:20640000003300350043044400F7047709DD99775700370053D0355D53D0533D59D0595D4C -:20642000999D999999DD00D90999099909990DFD599D9999DDD9999D99D099D099D0FF0067 -:2064400000830083003400740027007700DD09DD580038005355353D4555543D5955599DB4 -:2064600009770D9900DD009D00990099009900FD5DD09900DD00990099D0999D999DFFDDC7 -:20648000008300830034007400399937993DD93D555053D03555735D3455353D3555359DE0 -:2064A000D997999999DDDD9D00990099009900FD959D999DDDD099D099D0999D999DFFDD53 -:2064C0000055044504334472047744DD94DD94777D00350035005300359035D999D9999968 -:2064E00094D999999DDDD99D09990D99009900FF999D99D0D9009D00990099D099D0DFD0FE -:2065000000530553053305355435543499979D770000D500350033003500350049004DD0FC -:2065200099DD99779999D9990DD9999D999D0DFDD9D099D0D9D099D0DD0099009900FD00A5 -:20654000000000000000000000000000F008999D00000000000000000000000087004460E2 -:20656000999999999D99D9999D9999999999DDD64D8888666677886766887776776D66D03E -:20658000000000000000009900990099999999980000000000000000000000008000886065 -:2065A00099999999999DD99999999996999999996686527755665287777766767766666D47 -:2065C0000F00FF90F999F999DD9909DD99999989000009F099FF99FDD9D0DD009990999941 -:2065E0009986998699867886D775D7787D6700775699D699D69958DD25D0760068008700EE -:20660000040004222222222222279979DD7DDD7D40004E0022002200620066006600660053 -:206620000844887788778877EEEE88EE88D7220D6D00660066006600EE0066006D002D00A4 -:20664000040004222222222228729979DD7DDD7D40004E0022002200220066006600660002 -:206660008847D87788778877EEEE88E7D8220D2D6D006600660066002E0066006D00DD0002 -:206680000000002202222222222729990DDD0DDD40004E002200220062D076D076D076D0BB -:2066A00004470D77088708770E6E0D77027600DD7600660066006600EE00EE0066002D0091 -:2066C00000040022002202220222009700D900D900002200220022E022ED62ED76ED76DD87 -:2066E000007700772266D2660DEE007E02770DDD66D0660066606662EEDDEED0662DDDD01D -:206700000000002202222222222729990DDD0DDD00002E002200220062D076D076D076D09A -:2067200004470D77087728770EEE0DEE026600DD6600760076002200E200EE0076002D0049 -:20674000004000420022002200720088008800F80400240022E0222E222E886E9866986D36 -:2067600000DF338D9988998799EE33EE33D6DD2287DD88602766266DEEED77ED77DD22D098 -:20678000004000420022002200270088009800D80000220022E0222E722E996ED966D96D74 -:2067A000334499779FF29DDD99EE336E3366DD2247DD88607766666DEEEDE7ED77DD22D0D6 -:2067C000000000220222222222270DDD0DDD099900002E002200220062D076D076D076D0FA -:2067E00004370D777777767226722DEDD02200DD760066006600EE00E720662DDD2D00DDD2 -:206800000054055555550D990999066DA66D45554D004400444044D0D400D400D4A043A090 -:206820005354D4440D5555CC5544D4432DDD000055D044003300CC2033203320DDD0000081 -:206840000000005505555555DD990999066D066D00004D004400444044D04300438043D09F -:2068600005550D5400340A440DCC005400430022430033003300AA00CA0033003300D200F4 -:206880000000005505555555D99D09990DD90DD900004D004400444D44D04300438043D06C -:2068A00005550D540055004400CC00350033002D4300330033003300CC00440044D0220001 -:2068C000004455545555995599D496D496D45554D00044004400430033003300330038A03D -:2068E00044443344D3330DCCD344D3552DDD000033A033D03300CC00330033004D00D00019 -:206900000000005405555555D99D09990DD90DD900004D004400444044D04300438033D009 -:2069200005550D540055003300C5003502330D2D330033D033D04300CC0042002D00DD0017 -:2069400000000055055555550D990999066D066D00004D004400444044D0D400D400D4808B -:2069600005550D5504440A4405CC55552544D2DD43D03500550055D0C5D033D03320D2D0E3 -:206980000000000500550555009D0099006900690000440044D05544553D55D055D05570A9 -:2069A000005505555433D4CC0D44004300430022540044D043D0AA003AD0D3D033D0D20061 -:2069C000000000050055055500990099009D009D0000440044D05540D5339DDD9DD09D70AE -:2069E000005544553433D33C0DD40043004400225500443043AACCAD3DDDD3D033D0DDD00D -:206A000000000005005505550D99009900D600D60000440044D054405433D4DDD4D0D470CB -:206A200000550455AA33AA3CDDD400430044002253D0443D433DCCD03DD0D3D033D0D20046 -:206A40000000999499999D999D9999999999999D0000330033D0333D9933D93D99DA99AA93 -:206A60000D5545544455D4CC22552244D23300DD43333333333DCCD043D032D0D200DD0077 -:206A80000000000000440544559D09990999059D0000990099909D9D9D9D999D999D99D086 -:206AA00005440D5455554455D4CC024402440DD34400440A44AA443DC3D0320022002200D3 -:206AC0000054055555550D99066D066DA99945554D004400444044D0D400D400D4A043A0CE -:206AE0005354D4440D5555CC5544D4432DDD000055D044003300CC2033203320DDD00000BF -:206B000000550055055544440D990999A6664DDD4400443044D044D043A0D3A0D3D8D58035 -:206B2000D4440D350CCC035533552253DD2200DD55F05500CC0033003300DD000000000049 -:206B4000000000000055055555550D9909990DD6000000004D004400544054D0D400D400C0 -:206B60000DD6055553554A334ACCDD33053D222DD400530044004400430043D0A4D0A2D011 -:206B80000000005559D99999999959DD5555345599006600DD409944994A994A993A443D8E -:206BA0004344DD3355CC55444433D4DD02000D0033D0CCD044D045D033D0DD0000000000A5 -:206BC000990099556695DD9D9999999999DD44440000550099009930D9DD99D099D0444A8A -:206BE00033442D3325CC2444D4330DDD0000000033AACCDD4500445D334D24D0D2000D00B5 -:206C00000000002202222222222709990DDD0DDD00002E002200220062D076D076D076D0B5 -:206C200004447D22677DD6870D7700EE00DD0000760066006620EE72E76266DD2D00D00092 -:206C40000000002202222222222222222222D797000024002400220022D022D027D077D0E4 -:206C60000DD888D87744D7870E7726EE22DDDD0097009722772D76D06E00E6006200DD0074 -:206C80000000002202222222222222222222D797000024002400220022D022D027D077D0A4 -:206CA0000D9888D87844D7870E8722EED26D0DD097009700776077226EDDE2002200DD002A -:206CC00000000000002202222222222229229992000000002E002400220099D099D09DD2BB -:206CE0009997999789878844D8870E8722EED26D99D29977996D77DD77D06E00E200220087 -:206D0000000000000055055555559955DD95DD959000000055905400550055D099D099D033 -:206D200099979998994488DDD8DD0E4458EE55DDD9D599059977776D77D07E00E75066DDB2 -:206D40000000220028EEDE880884884D884D997400007200E7007ED077007720772299DD8E -:206D6000999799929992E922EE22DEEE0DEE00DD99D0D90099D099D022D0E4D0E400DD0053 -:206D800000000000000000BB00FB44BBD4440DD900000000BF00BBD0BFD044BD3DFD33BD3C -:206DA0000DD944444444D9D94444DDFB0DBBDBBB33BB44BB43FB43BB33BBFBFBBBBBBBBD72 -:206DC00000000000000000BB44BBD4440DD90DD900000000BF00BB0044D03DB033FD33BD7A -:206DE0004444D4D4D9D9DDDDD9D94444DBBBBBBB44BB43BF43BB33BB33FB33BBBBBBBBBBBC -:206E0000000000004400D4440DD90DD9444444440000000044003DD033D033BD44FD43BDB5 -:206E2000D9D9D9D94444DDDD0DFBDBBBBBBBBBBB43BB33BF33BBDDBBFBFBBBBBBBBBBBBD52 -:206E40004400D4440944094D44444D4D9D9DDDDD44003D00930093D044D043DD9DFDDDBD3E -:206E60009D9D4444DDDD0DBFDBBBBBBBBBBBDDDD9DBB33BBDDBBBFBFBBBBBBBBBBBDDDD021 -:206E80004400D4440944094D44444D4D9D9D9D9D44003D00930093D044D043DD9DFD9DBDBE -:206EA0004444DDDD00BB0DBFDBBBBBBBBBBBDDDD33BBDDBBBBBBBFBFBBBBBBBBBBBDDDD042 -:206EC0004400D4440DD90DD94444D4D4D9D9DDDD44003D00330033D044D043BD43BD33BD33 -:206EE000DDDDDDDDD9D94444DDDDBBBBBBBFDDDD33DB33FB33BB33BBDDBFFBBBBBBDDDD0F1 -:206F000000004400D4440DD90DD94444D4D4D9D9000044003D003300330044B043BD43BD8C -:206F2000DDDDD9D94444DDDD0BFB0BBBBBBBBBBB33FB33BB33BBDDBBFBFBBBBBBBBBBBBDEF -:206F400000BB44FBD4440DD90DD94444D4D4D9D9B00044003D00330033F044B043BB43BBFA -:206F6000DDDDD9D93333BBBBFBFBBBBBDBBB00BB33FB33BB33BBBBBDFBF0BBD0BB00BD009C -:206F800044BBD4440DD90DD94444D4D4D9D9DDDD44003D003300330044B043B043BB33BBB8 -:206FA000DDDDDDDDD9D93333BFBFBBBBDBBB00BB33BF33BB33BB33BBBFBDBBD0BB00BD00C5 -:206FC00000BB0BBBBBBBBFBF44BBD4444D4444940000BB00BB00BFB044B044BB4DBB993F04 -:206FE000499449D4444444D43944D3DD03330000993BD93B433B33BD3DB09D003300000081 -:2070000000BB0BBBBBBBBFBF44BBD4444D444494BB00BB00BB00BFB044B044BB4DBB993B0C -:2070200049D449D4444444D43344D9DD03DD0333D93FD93B433B33BD3DB0DD009D003300FF -:20704000000000004400D444DDDD99994444D4D40000000044003D00330033B094B043BBDF -:20706000D9D9DDDDDDDDDDDDDDDDDDDDD9D9444443BF33BB33BBDDBBDFBF33BB33BBDDB005 -:207080000000000004004444DDDD99994444D4D40000000040004400D4003DB044B043FBD1 -:2070A000D9D9DDDDDDDDDDDDDDDDD9D93333BFFB43BB33BB33FBDDBB33BB33FB3DBBBBB033 -:2070C000000000B40B44B444444944D444D944DD40004000940094009400993349304930D8 -:2070E000B3DDBB9DFB3DBB33BBB3BBBBFBFB0BBB3930D3B0DDB0DDB0D30033003B00B000EB -:2071000000990999999D9D9D9D9D9D999999D99D900099009900D900D990D99999DD9D9D86 -:20712000D9990DDD9DD9D00D00D9000D00009900D09DD0DD99D0DD009900DDD000D0009D0E -:2071400000990999999D9D9D9D9D9D999999099D900099009900D990D999D9DD999D9D9D79 -:2071600009990DDD9D09D00D00D900DD00D0009DD0D0D0009D00DD009D00DD0009000D0063 -:20718000009909999DDD9DDDDDDDDD9D99999DD99D009900990099009990999999DD9D9D71 -:2071A000D9990DDD00DD9909DD09009900DD0009D09D00D09900DD009000D0000000D000AC -:2071C000009909999DDDDDDDDDDDD9DD99999DD99000990099009900990099909999DDDD1F -:2071E0009999DDDD00009900DDD900DD0000009D0090D0D09990DDD09D00D9D00DD000D0E1 -:20720000009909999DDDDDDDDDDDD9DD9999D9999000990099009900990099909999DDDDE2 -:207220009999DDDD009DD0DDD9090D09000D0099D0D0D00099D0DDD09DD09D009D00D0007D -:20724000009909999DDDDDDDDDDDDD9D99999D9D9000990099009900990099909999DDDD16 -:207260009999DDDD009DD9D00D090009009D00D900D0D0D09900DDD0D9D0D9000D00990069 -:207280000099009909D909D909D909990999009999009900D900DDD0DDD9DDD999DD9909FD -:2072A000009900DDD99D0DD000D000D0000009D0DD099D9D99D0DD00D9909D9DD0DD00993D -:2072C000000000990099099D0D9D0D9D0D99099900009900990099D0D9D0D9D0D9D099000B -:2072E0000D9D009900DD009900D000D0000009D09900DD00D900DD00D99D9D9DD0DD00993A -:207300000099009909DD0DDD0DDD0D9D099900D999009900990099D099D099D099909DD0C0 -:20732000009909DD999DDDDD009D00D0000009D0DD009D00D900DD00D9009D90D0DD00991C -:207340000099099D9D9D9D9D9D999999999D099990009900D900D900D990999999DD9D9021 -:207360000DDD9DD9D0DD000900DD00D0009000D0D0D09990DDD09900DDD000D000D0009DF1 -:20738000009909999999999D9D9D9D9D9D9909999000990099009999D9D9D90DD99D9D9DC2 -:2073A000099D0DDD9000D09900DD0999DDDD0000D0D000D000009D90D09D9DDDD09900DD41 -:2073C0000000000000990999999D9D9D9D9D9D9900000000900099009900D990D999D9DD3F -:2073E0009999D99D09999DDDD9D90DDD00099D0D999D9D9DD0D0D0009900DD0099D0DD9945 -:207400000000000000000000000000990999999D0000000000000000000090009900990039 -:207420009D9D9D9D9D999999D99DDDDD9999DDDDD900D900D90099909DD9D99DD9D0DD002E -:207440000000009000D9D909D90D0D00D000D00909009D00D9D099D9DDD990D9D00D99905F -:207460000099009909DD09DD09DD09DD0D9900999DD9990D9DD0DDD0DDD0DDD099009D003D -:2074800000BB00BB0BBBBBBBBBB4BBB3BBBBDBBDBD00BB00BB00220022002B002B00BD00C5 -:2074A0004DD20022002200220022002200220BDDBB00DD00BD00BD00BD00BB0BBDBDB2D068 -:2074C00000BB00BB0BBBBBB5BB44BB33BBBDBBD2BD00BB00BB002B002B002B002B00BD0072 -:2074E0004D22402B00220022002D002D002B0BDDBB00DB00D000D000BD00BB0BD2B022D0D4 -:2075000000BB0BBBBBBBBB5BBB4BBBB2BB22BB22D000BD00BB00BB00BB00BD00BD00D00029 -:20752000DD2200BB00DB022B02BB0DBB00BB0BBD00000000000000000000D000BB002200D4 -:2075400000BB0BBBBBBBBB55BB44BB32BB22BB22D000BD00BB00BB00BB00BD00BD00D00076 -:20756000DD220BBB0DDB002B0022002B002B00BB0000000000000000D000BD00BBB02200E6 -:2075800000BB00BB0BBBBBB5BB44BB33BBD2BB02BD00BB00BB002B002B002B002B00BD006C -:2075A000DD2200220022002200220B22002200DBD000D000D000D000BD00BB00BBBBBDD05F -:2075C00000BB00BB0BBBBBB5BB44BB33BBBDBBD2BD00BB00BB002B002B002B002B00BD0071 -:2075E000DD22002200220022002200220B2200DDD000BB00DD00D000BD00BB00BBBBBB20D7 -:2076000000BB00BB0BBBBBBBBBB7BBB6BBB5555DBD00BB00BB00220022002B002B00BD0029 -:2076200055D2DD22002200220022002200220BDDBB00DB00D000D000BD00BB0BBBBBB22D84 -:20764000000000BBBBBB55B644B6445B4445545D0000D000BB002B0022002B002B00BD0030 -:2076600054D25522DD220022002200220B22BB2DBB00DB00D000D000BD00BB00BDBBB2D04B -:20768000BBD055BD44BB43564356D4450D340D35000000000000D000BD00BB002B002B00E2 -:2076A000D44544525522DD2200220B220B22BB2DBD00BB00DD00D000D000BD00BBB0B20072 -:2076C000BBD022BB22B32223222222222222D222000000000000D000BD00BD00BD00BD00A4 -:2076E0000D220022002200220022002B002200DDD000BB00DD00D000BD00BB002B0022228A -:2077000000BB00BB0BBB0BBB05BB04BB03BB0DBBBD00BB00BB00BB005B004B003B00BD00D6 -:20772000BDBBDD4D004200220022BB22BB22DD22BB00DD00D000D000D000BB00BD002200C6 -:2077400000000000005500550555099509950555000000005D00990099D09DD099D099D0F1 -:20776000055500555555DD22002255225522D52299005D005500DD005DD055D055002500B6 -:207780000000000000BB99BB999B9D9B999B999B00000000BD00BB90BB009900D90999002F -:2077A00099BBDBBBBBBBDD220D220D22BB22BB229900BD00BB00DD00BD00BDD0BBD02B0064 -:2077C00000BB00BB0099009D00990099B0BBDBBBD000BB00BB00BBD0BBBD999D99999999E7 -:2077E00002BB224B22222222222222BB2DBD22BB9D9999999999999DDDD0B000D0000000F2 -:2078000000320032002205DD03D95DDD0DDDDD33000030003300550033005500DD00D500FE -:20782000D533D533D333DD3305DD05DD05D033D0D500D500D500DD005300530053003300FE -:2078400000230023002200DD009D05DD00DD055330003300330055003300D550DD00D5D06A -:207860000533053305330D3300DD0055005D0033D5D0D5D0D5D053D0530053003300DD0096 -:2078800000320032002200DD00D200DD00DD00D5300033003300550033005550DD00D300B1 -:2078A00000D50055005500DD0033003D033D00DDD300D3003300DD0053005300D5D033D0DB -:2078C00000230023002305D5032405D500DD0055000030003300550033005500DD003D00D8 -:2078E00003550355035300DD053D05DD05D033D0330033003D00DD0033003300530033003D -:2079000000230023002200DD00FD05DD00DD0553300033003300550033005550DD00D5D0C9 -:207920000533053305330DDD0055005300530033D5D054D054D0DD00D300D3003300DD0007 -:2079400000230023002200DD00FD05DD00DD5D3330003300330055003300D550DD00D5D0D1 -:207960005D335D335D33DD3305DD05D033D00DD0D5D0D5D0D5D0DDD05300530053003300E8 -:207980000002003200320FDDFAD9FADDDADD5AD5330033003300D500D330DD55DDD0D55D83 -:2079A0003ADD3AD3DA3DFA33FADDDF530D530033D55DD3D0DD003DD0D5D0D5D005D0033DA5 -:2079C0000002003200320FDDFAD9FDDDD0DD5555330033003300D500D330DD55DDD05500AC -:2079E00079D53333DDDDF033FADDDF530D53003355003300DD003D00D5D0D5D005D0033D59 -:207A000000000000000000000111110D01D001D00000000000000000010010001DD01DD0A9 -:207A200001D001D00111000D00000000000000001DD01DD001D000000000000000000000DA -:207A4000000000000000000011010D10D01D011D000000000000000000000110D11DD11DFF -:207A6000101D0D1D1101DD000000000000000000D11DD11DD00D00D0000000000000000037 -:207A8000000000000000000011010D10D01D111D000000000000000000000110D11DD11DAF -:207AA0000D1D001D11010D000000000000000000D11DD11DD00D00D00000000000000000D7 -:207AC000000000000000000000010110101D0D1D000000000000000000000110D11DD11D50 -:207AE000111DDD1D000100000000000000000000D11DD11DD00D00D00000000000000000D4 -:207B000000000000000000001101DD10111DDD1D000000000000000000000110D11DD11D51 -:207B2000001D001D11010D000000000000000000D11DD11DD00D00D0000000000000000063 -:207B4000000000000000000011010D10D01D111D000000000000000000000110D11DD11DEE -:207B6000DD1DD01D11010D000000000000000000D11DD11DD00D00D0000000000000000076 -:207B800000000000000000001101DD10D01D011D000000000000000000000110D11DD11DEE -:207BA000101D1D1D1D010D000000000000000000D11DD11DD00D00D00000000000000000AA -:207BC000000000000000000011010D10D01D111D000000000000000000000110D11DD11D6E -:207BE0000D1DD01D11010D000000000000000000D11DD11DD00D00D00000000000000000C6 -:207C00000002003200320FDDFDD9FDDDD0AD55D5330033003300D500D330DD55DDD0D55046 -:207C2000999733D3DDADF033F0DDDF530D530033D550D3D0DDD03D00D5D0D5D005D0033DBE -:207C400000000000000000220022002300DD00BD0000000000003000330033005500330005 -:207C600005DD00DD0D335D33DDD3D5D3D3DD3335D550DD00DD3D3D3DDD3D55D03300D3D05A -:207C800000230023002200DD004D05DD00DDD55530003300330055003300D550DD00D30076 -:207CA000D3333333DD33053305DD55DD0DDD0000D33DDD3D333DDDDDD3003300DD000300D8 -:207CC0000033002300235022D3DD3D2D3DDD3D333000330033003D00333DDD3DDD3DDDD0F1 -:207CE000DD33003300330533533353DDD5D053D03D0033003D00D500D5D005D033D033DD49 -:207D00000000000000000000000000000022002200000000000000000000000030003300BC -:207D2000002300DD0DDDD5DDDDDD55333DDDD55D3300550033D0D550DDD05553D55D55008D -:207D40000000000000320032002205DD03DD5D5D050005000DD030D033D05500330055005A -:207D60000D3D3DDD3D053D533D33333333D3D3DDDD00D030303D333D333D333D3D3DD0D08D -:207D80000000005405555555D666DDDDD999D99900004D004400444044D0D300D300D3000F -:207DA0003555435455333344DDCC0533053D22204300350033AA33ADCCD044D033D0D2D0B4 -:207DC00000000000004300660066001100C1001C0000000000000000D000D000D000D00066 -:207DE00000BB00C100CC001100660066004300DDD000D000D000D000D000D000D00000008E -:207E0000000000110199199919D99DD99DD99D990000100091009900DD00DD10DD10DD1013 -:207E20009999D9D91D991DD901DD001100000000991099109D009D00D10010000000000056 -:207E400011111FDDFF22FFDDFFAAFFAAFFAAFFAA1110DF11DDF1DDF1DDF1DDF1ADF1ADF1DE -:207E6000FFAAFFA5FFDAF42DF4E2444214291111ADF1DDF12DF19DF1ED414D4144111110B6 -:207E8000119119BBBBAABBDABAAABA995566D99A9110BB11ABB1DAB1ADB199B169B19AB12C -:207EA000DD5ADDD5DDDDD943554566451644111455515D51DD51D9B155B166B1666111102E -:207EC00000000000000000000000D111D111D111000000000000000000001110111D111D7F -:207EE000D111D1111000DDD00000000000000000111D111D000DD0D00000000000000000F8 -:207F00000000005505555555059905D90569059900004D00440044D0D4009D009DA09DAAE6 -:207F2000535554554433D4330DCC005500550022433D343034D03300CC0044004D002D0028 -:207F400000000000005505555555D99909990D69000000004D0044004400443043D043009F -:207F60004D69455544554433DDCC0433443D22D04300330033AA33ADCCD033003300D20047 -:207F800000000000005505555555555DD5D905D900000000D0005500550099009900D900C5 -:207FA00044D9444444344433DDCC0433443D22D0D900440044AA33ADCCD033003300D2001B -:207FC00000000000000000000000000000000000000000000099999991991111BB11BBBB48 -:207FE0000099099999999911111B11BBFFBF00F001BB9111BB11BB11BB11BBBBFFBB00FFD3 -:00000001FF diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/make_rom.bat b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/make_rom.bat deleted file mode 100644 index 488a426c..00000000 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/make_rom.bat +++ /dev/null @@ -1,12 +0,0 @@ -copy /b ninja-1.7a + ninja-2.7b + ninja-3.7d + ninja-4.7e cpu1_rom.bin -copy /b ninja-5.7h + ninja-2.7b + ninja-3.7d + ninja-4.7e cpu2_rom.bin -copy /b ninja-10.2c + ninja-11.2d + ninja-12.4c + ninja-13.4d bg.bin -copy /b cpu1_rom.bin + cpu2_rom.bin + bg.bin NINJAKUN.ROM - -copy /b ninja-6.7n + ninja-7.7p + ninja-8.7s + ninja-9.7t fg.bin -make_vhdl_prom.exe ninja-6.7n fg1_rom.vhd -make_vhdl_prom.exe ninja-7.7p fg2_rom.vhd -make_vhdl_prom.exe ninja-8.7s fg3_rom.vhd -make_vhdl_prom.exe ninja-9.7t fg4_rom.vhd - -pause \ No newline at end of file diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/make_vhdl_prom.exe b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/make_vhdl_prom.exe deleted file mode 100644 index 1e5618bf..00000000 Binary files a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/make_vhdl_prom.exe and /dev/null differ diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/ninjakun.zip b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/ninjakun.zip deleted file mode 100644 index 4fb804ba..00000000 Binary files a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/ninjakun.zip and /dev/null differ diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/srec_cat.exe b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/srec_cat.exe deleted file mode 100644 index 39c7b3c8..00000000 Binary files a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/rom/srec_cat.exe and /dev/null differ diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/sdram.sv b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/sdram.sv index 41f5b7a8..ed64b325 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/sdram.sv +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/sdram.sv @@ -59,8 +59,13 @@ module sdram ( input [15:0] port2_d, output reg [31:0] port2_q, + input [16:2] bg_addr, + output reg [31:0] bg_q, + input [16:2] fg_addr, + output reg [31:0] fg_q, input [16:2] sp_addr, - output reg [31:0] sp_q + output reg [31:0] sp_q, + output reg sp_rdy ); localparam RASCAS_DELAY = 3'd2; // tRCD=20ns -> 2 cycles@<100MHz @@ -81,7 +86,7 @@ localparam RFRSH_CYCLES = 10'd842; /* SDRAM state machine for 2 bank interleaved access - 1 word burst, CL2 + 2 words burst, CL2 cmd issued registered 0 RAS0 cas1 - data0 read burst terminated 1 ras0 @@ -153,7 +158,7 @@ assign SDRAM_nWE = sd_cmd[0]; reg [24:1] addr_latch[2]; reg [24:1] addr_latch_next[2]; reg [16:1] addr_last[2]; -reg [16:2] addr_last2[2]; +reg [16:2] addr_last2[4]; reg [15:0] din_latch[2]; reg [1:0] oe_latch; reg [1:0] we_latch; @@ -162,14 +167,16 @@ reg [1:0] ds[2]; reg port1_state; reg port2_state; -localparam PORT_NONE = 2'd0; -localparam PORT_CPU1 = 2'd1; -localparam PORT_CPU2 = 2'd2; -localparam PORT_SP = 2'd1; -localparam PORT_REQ = 2'd3; +localparam PORT_NONE = 3'd0; +localparam PORT_CPU1 = 3'd1; +localparam PORT_CPU2 = 3'd2; +localparam PORT_SP = 3'd1; +localparam PORT_FG = 3'd2; +localparam PORT_BG = 3'd3; +localparam PORT_REQ = 3'd4; -reg [1:0] next_port[2]; -reg [1:0] port[2]; +reg [2:0] next_port[2]; +reg [2:0] port[2]; reg refresh; reg [10:0] refresh_cnt; @@ -203,6 +210,12 @@ always @(*) begin end else if (sp_addr != addr_last2[PORT_SP]) begin next_port[1] = PORT_SP; addr_latch_next[1] = { 1'b1, 7'd0, sp_addr, 1'b0 }; + end else if (fg_addr != addr_last2[PORT_FG]) begin + next_port[1] = PORT_FG; + addr_latch_next[1] = { 1'b1, 7'd0, fg_addr, 1'b0 }; + end else if (bg_addr != addr_last2[PORT_BG]) begin + next_port[1] = PORT_BG; + addr_latch_next[1] = { 1'b1, 7'd0, bg_addr, 1'b0 }; end else begin next_port[1] = PORT_NONE; addr_latch_next[1] = addr_latch[1]; @@ -218,6 +231,8 @@ always @(posedge clk) begin sd_cmd <= CMD_NOP; // default: idle refresh_cnt <= refresh_cnt + 1'd1; + sp_rdy <= 0; + if(init) begin // initialization takes place at the end of the reset phase if(t == STATE_RAS0) begin @@ -328,6 +343,8 @@ always @(posedge clk) begin if(t == STATE_READ1 && oe_latch[1]) begin case(port[1]) PORT_REQ: port2_q[15:0] <= sd_din; + PORT_FG : fg_q[15:0] <= sd_din; + PORT_BG : bg_q[15:0] <= sd_din; PORT_SP : sp_q[15:0] <= sd_din; default: ; endcase; @@ -338,10 +355,13 @@ always @(posedge clk) begin if(t == STATE_READ1b && oe_latch[1]) begin case(port[1]) PORT_REQ: begin port2_q[31:16] <= sd_din; port2_ack <= port2_req; end - PORT_SP : begin sp_q[31:16] <= sd_din; end + PORT_FG : begin fg_q[31:16] <= sd_din; end + PORT_BG : begin bg_q[31:16] <= sd_din; end + PORT_SP : begin sp_q[31:16] <= sd_din; sp_rdy <= 1; end default: ; endcase; end + end end diff --git a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/z80ip.v b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/z80ip.v index 922eaede..467280cc 100644 --- a/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/z80ip.v +++ b/Arcade_MiST/Nova2001_Hardware/NinjaKun_MiST/rtl/z80ip.v @@ -4,6 +4,8 @@ module Z80IP ( input reset_in, input clk, + input clken_p, + input clken_n, output [15:0] adr, input [7:0] data_in, output [7:0] data_out, @@ -19,8 +21,10 @@ wire nmireq = 0; wire i_mreq, i_iorq, i_rd, i_wr, i_rfsh; -T80s cpu( - .CLK(~clk), +T80pa cpu( + .CLK(clk), + .CEN_p(clken_p), + .CEN_n(clken_n), .RESET_n(~reset_in), .INT_n(~intreq), .NMI_n(~nmireq),