diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf b/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf index 44396042..741659d1 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/Bagman.qsf @@ -1,6 +1,6 @@ # -------------------------------------------------------------------------- # # -# 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 @@ -17,8 +17,8 @@ # -------------------------------------------------------------------------- # # # Quartus II 64-Bit -# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition -# Date created = 20:09:19 June 07, 2018 +# Version 13.1.4 Build 182 03/12/2014 SJ Web Edition +# Date created = 16:46:43 March 20, 2019 # # -------------------------------------------------------------------------- # # @@ -48,12 +48,12 @@ set_global_assignment -name SYSTEMVERILOG_FILE rtl/bagman_mist.sv set_global_assignment -name VHDL_FILE rtl/bagman.vhd set_global_assignment -name VHDL_FILE rtl/bagman_tile_bit1.vhd set_global_assignment -name VHDL_FILE rtl/bagman_tile_bit0.vhd -set_global_assignment -name VHDL_FILE rtl/bagman_speech2.vhd -set_global_assignment -name VHDL_FILE rtl/bagman_speech1.vhd -set_global_assignment -name VHDL_FILE rtl/bagman_speech.vhd set_global_assignment -name VHDL_FILE rtl/bagman_program.vhd set_global_assignment -name VHDL_FILE rtl/bagman_palette.vhd set_global_assignment -name VHDL_FILE rtl/bagman_pal16r6.vhd +set_global_assignment -name VHDL_FILE rtl/bagman_speech.vhd +set_global_assignment -name VHDL_FILE rtl/bagman_speech1.vhd +set_global_assignment -name VHDL_FILE rtl/bagman_speech2.vhd set_global_assignment -name VHDL_FILE rtl/plc10_speech_synthetizer.vhd set_global_assignment -name VHDL_FILE rtl/T80/T80s.vhd set_global_assignment -name VHDL_FILE rtl/T80/T80_Reg.vhd @@ -67,7 +67,6 @@ set_global_assignment -name VHDL_FILE rtl/video_gen.vhd set_global_assignment -name SYSTEMVERILOG_FILE rtl/scandoubler.sv set_global_assignment -name SYSTEMVERILOG_FILE rtl/osd.sv set_global_assignment -name SYSTEMVERILOG_FILE rtl/mist_io.sv -set_global_assignment -name SYSTEMVERILOG_FILE rtl/keyboard.sv set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd set_global_assignment -name SYSTEMVERILOG_FILE rtl/dac.sv @@ -124,8 +123,6 @@ set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 # Fitter Assignments # ================== set_global_assignment -name DEVICE EP3C25E144C8 -#set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF -#set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON @@ -166,14 +163,13 @@ set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" - # Incremental Compilation Assignments # =================================== -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top + set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top + set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top + set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top # end DESIGN_PARTITION(Top) # ------------------------- # end ENTITY(bagman_mist) # ----------------------- -set_global_assignment -name VHDL_FILE rtl/line_doubler.vhd set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf b/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf index fcafdab0..35eb1fc3 100644 Binary files a/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf and b/Arcade_MiST/Custom Hardware/Bagman_MiST/Release/Bagman.rbf differ diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman.vhd b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman.vhd index 4734ff79..2e819137 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman.vhd +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman.vhd @@ -211,22 +211,9 @@ video_b <= video_s(7 downto 6); video_hblank <= hblank; video_vblank <= vblank; -video_hs <= hsync_o when tv15Khz_mode = '0' else hsync; -video_vs <= vsync_o when tv15Khz_mode = '0' else vsync; -video_s <= video_o when tv15Khz_mode = '0' else video_i; - - --- line doubler -line_doubler : entity work.line_doubler -port map( - clock_12mhz => clock_12, - video_i => video_i, - hsync_i => hsync, - vsync_i => vsync, - video_o => video_o, - hsync_o => hsync_o, - vsync_o => vsync_o -); +video_hs <= hsync; +video_vs <= vsync; +video_s <= video_i; ------------------ -- player controls diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv index 459d6a23..5707ec5e 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/bagman_mist.sv @@ -23,26 +23,29 @@ localparam CONF_STR = { "O2,Rotate Controls,Off,On;", "O34,Scandoubler Fx,None,HQ2x,CRT 25%,CRT 50%;", "T6,Reset;", - "V,v1.10.",`BUILD_DATE + "V,v1.20.",`BUILD_DATE }; -wire clock_48, clock_12; +assign LED = 1; +assign AUDIO_R = AUDIO_L; + +wire clock_24, clock_12, clock_6; pll pll( .inclk0(CLOCK_27), - .c0(clock_48), - .c1(clock_12) + .c0(clock_24), + .c1(clock_12), + .c2(clock_6) ); wire [31:0] status; wire [1:0] buttons; wire [1:0] switches; -wire [11:0] kbjoy; +wire [11:0] kbjoy; wire [7:0] joystick_0; wire [7:0] joystick_1; -wire scandoubler_disable; +wire scandoublerD; wire ypbpr; -wire ps2_kbd_clk, ps2_kbd_data; -assign LED = 1; +wire [10:0] ps2_key; wire [12:0] audio; wire hs, vs; wire hb, vb; @@ -50,88 +53,9 @@ wire blankn = ~(hb | vb); wire [2:0] r, g; wire [1:0] b; -dac dac( - .CLK(clock_48), - .RESET(1'b0), - .DACin(audio), - .DACout(AUDIO_L) - ); - -assign AUDIO_R = AUDIO_L; - -video_mixer #( - .LINE_LENGTH(480), - .HALF_DEPTH(1)) -video_mixer( - .clk_sys(clock_48), - .ce_pix(clock_12), - .ce_pix_actual(clock_12), - .SPI_SCK(SPI_SCK), - .SPI_SS3(SPI_SS3), - .SPI_DI(SPI_DI), - .R(r), - .G(g), - .B({b,b[0]}), - .HSync(hs), - .VSync(vs), - .VGA_R(VGA_R), - .VGA_G(VGA_G), - .VGA_B(VGA_B), - .VGA_VS(VGA_VS), - .VGA_HS(VGA_HS), - .scandoubler_disable(1'b1), - .scanlines(scandoubler_disable ? 2'b00 : {status[4:3] == 3, status[4:3] == 2}), - .hq2x(status[4:3]==1), - .rotate({1'b1,status[2]}),//(left/right,on/off) - .ypbpr(ypbpr), - .ypbpr_full(1), - .line_start(0), - .mono(0) -); - -mist_io #( - .STRLEN(($size(CONF_STR)>>3))) -mist_io( - .clk_sys (clock_48 ), - .conf_str (CONF_STR ), - .SPI_SCK (SPI_SCK ), - .CONF_DATA0 (CONF_DATA0 ), - .SPI_SS2 (SPI_SS2 ), - .SPI_DO (SPI_DO ), - .SPI_DI (SPI_DI ), - .buttons (buttons ), - .switches (switches ), - .scandoubler_disable(scandoubler_disable), - .ypbpr (ypbpr ), - .ps2_kbd_clk (ps2_kbd_clk ), - .ps2_kbd_data (ps2_kbd_data ), - .joystick_0 (joystick_0 ), - .joystick_1 (joystick_1 ), - .status (status ) - ); - -keyboard keyboard( - .clk(clock_48), - .reset(), - .ps2_kbd_clk(ps2_kbd_clk), - .ps2_kbd_data(ps2_kbd_data), - .joystick(kbjoy) - ); -// Normal Rotated -wire m_up = ~status[2] ? kbjoy[6] | joystick_0[1] | joystick_1[1] : kbjoy[4] | joystick_0[3] | joystick_1[3]; -wire m_down = ~status[2] ? kbjoy[7] | joystick_0[0] | joystick_1[0] : kbjoy[5] | joystick_0[2] | joystick_1[2]; -wire m_left = ~status[2] ? kbjoy[5] | joystick_0[2] | joystick_1[2] : kbjoy[6] | joystick_0[1] | joystick_1[1]; -wire m_right = ~status[2] ? kbjoy[4] | joystick_0[3] | joystick_1[3] : kbjoy[7] | joystick_0[0] | joystick_1[0]; - -wire m_fire = kbjoy[0] | joystick_0[4] | joystick_1[4]; -wire m_start1 = kbjoy[1]; -wire m_start2 = kbjoy[2]; -wire m_coin = kbjoy[3]; - bagman bagman( .clock_12(clock_12), .reset(status[0] | status[6] | buttons[1]), - .tv15Khz_mode(scandoubler_disable), .video_r(r), .video_g(g), .video_b(b), @@ -140,9 +64,9 @@ bagman bagman( .video_hs(hs), .video_vs(vs), .audio_out(audio), - .start2(m_start2), - .start1(m_start1), - .coin1(m_coin), + .start2(btn_two_players), + .start1(btn_one_player), + .coin1(btn_coin), .fire1(m_fire), .right1(m_right), .left1(m_left), @@ -155,4 +79,100 @@ bagman bagman( .up2(m_up) ); +video_mixer video_mixer( + .clk_sys(clock_24), + .ce_pix(clock_6), + .ce_pix_actual(clock_6), + .SPI_SCK(SPI_SCK), + .SPI_SS3(SPI_SS3), + .SPI_DI(SPI_DI), + .R(blankn ? r : "000"), + .G(blankn ? g : "000"), + .B(blankn ? {b,b[0]} : "000"), + .HSync(hs), + .VSync(vs), + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .scandoublerD(scandoublerD), + .scanlines(scandoublerD ? 2'b00 : status[4:3]), + .rotate({1'b1,status[2]}),//(left/right,on/off) + .ypbpr(ypbpr), + .ypbpr_full(1), + .line_start(0), + .mono(0) +); + +mist_io #( + .STRLEN(($size(CONF_STR)>>3))) +mist_io( + .clk_sys (clock_24 ), + .conf_str (CONF_STR ), + .SPI_SCK (SPI_SCK ), + .CONF_DATA0 (CONF_DATA0 ), + .SPI_SS2 (SPI_SS2 ), + .SPI_DO (SPI_DO ), + .SPI_DI (SPI_DI ), + .buttons (buttons ), + .switches (switches ), + .scandoublerD (scandoublerD ), + .ypbpr (ypbpr ), + .ps2_key (ps2_key ), + .joystick_0 (joystick_0 ), + .joystick_1 (joystick_1 ), + .status (status ) + ); + +dac #( + .MSBI(12)) +dac( + .CLK(clock_24), + .RESET(1'b0), + .DACin(audio), + .DACout(AUDIO_L) + ); + +// 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_fire = btn_fire1 | joystick_0[4] | joystick_1[4]; +wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5]; + +reg btn_one_player = 0; +reg btn_two_players = 0; +reg btn_left = 0; +reg btn_right = 0; +reg btn_down = 0; +reg btn_up = 0; +reg btn_fire1 = 0; +reg btn_fire2 = 0; +reg btn_fire3 = 0; +reg btn_coin = 0; +wire pressed = ps2_key[9]; +wire [7:0] code = ps2_key[7:0]; + +always @(posedge clock_24) begin + reg old_state; + old_state <= ps2_key[10]; + if(old_state != ps2_key[10]) begin + case(code) + 'h75: btn_up <= pressed; // up + 'h72: btn_down <= pressed; // down + 'h6B: btn_left <= pressed; // left + 'h74: btn_right <= pressed; // right + 'h76: btn_coin <= pressed; // ESC + 'h05: btn_one_player <= pressed; // F1 + 'h06: btn_two_players <= pressed; // F2 + 'h14: btn_fire3 <= pressed; // ctrl + 'h11: btn_fire2 <= pressed; // alt + 'h29: btn_fire1 <= pressed; // Space + endcase + end +end + + endmodule diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv index 1230c5ca..525a06ac 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/build_id.sv @@ -1,2 +1,2 @@ -`define BUILD_DATE "190304" -`define BUILD_TIME "173111" +`define BUILD_DATE "190320" +`define BUILD_TIME "164646" diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/keyboard.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/keyboard.sv deleted file mode 100644 index 44b455a5..00000000 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/keyboard.sv +++ /dev/null @@ -1,80 +0,0 @@ -module keyboard -( - input clk, - input reset, - input ps2_kbd_clk, - input ps2_kbd_data, - - output reg[9:0] joystick -); - -reg [11:0] shift_reg = 12'hFFF; -wire[11:0] kdata = {ps2_kbd_data,shift_reg[11:1]}; -wire [7:0] kcode = kdata[9:2]; -reg release_btn = 0; - -reg [7:0] code; -reg input_strobe = 0; - -always @(negedge clk) begin - reg old_reset = 0; - - old_reset <= reset; - - if(~old_reset & reset)begin - joystick <= 0; - end - - if(input_strobe) begin - case(code) - 'h16: joystick[1] <= ~release_btn; // 1 - 'h1E: joystick[2] <= ~release_btn; // 2 - - 'h75: joystick[4] <= ~release_btn; // arrow up - 'h72: joystick[5] <= ~release_btn; // arrow down - 'h6B: joystick[6] <= ~release_btn; // arrow left - 'h74: joystick[7] <= ~release_btn; // arrow right - - 'h29: joystick[0] <= ~release_btn; // Space - 'h11: joystick[8] <= ~release_btn; // Left Alt - 'h0d: joystick[9] <= ~release_btn; // Tab - 'h76: joystick[3] <= ~release_btn; // Escape - endcase - end -end - -always @(posedge clk) begin - reg [3:0] prev_clk = 0; - reg old_reset = 0; - reg action = 0; - - old_reset <= reset; - input_strobe <= 0; - - if(~old_reset & reset)begin - prev_clk <= 0; - shift_reg <= 12'hFFF; - end else begin - prev_clk <= {ps2_kbd_clk,prev_clk[3:1]}; - if(prev_clk == 1) begin - if (kdata[11] & ^kdata[10:2] & ~kdata[1] & kdata[0]) begin - shift_reg <= 12'hFFF; - if (kcode == 8'he0) ; - // Extended key code follows - else if (kcode == 8'hf0) - // Release code follows - action <= 1; - else begin - // Cancel extended/release flags for next time - action <= 0; - release_btn <= action; - code <= kcode; - input_strobe <= 1; - end - end else begin - shift_reg <= kdata; - end - end - end -end -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/line_doubler.vhd b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/line_doubler.vhd deleted file mode 100644 index 1fde522b..00000000 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/line_doubler.vhd +++ /dev/null @@ -1,89 +0,0 @@ ---------------------------------------------------------------------------------- --- Line doubler - Dar - Feb 2014 ---------------------------------------------------------------------------------- -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity line_doubler is -port( - clock_12mhz : in std_logic; - video_i : in std_logic_vector(7 downto 0); - hsync_i : in std_logic; - vsync_i : in std_logic; - video_o : out std_logic_vector(7 downto 0); - hsync_o : out std_logic; - vsync_o : out std_logic -); -end line_doubler; - -architecture struct of line_doubler is - -signal hsync_i_reg : std_logic; -signal vsync_i_reg : std_logic; -signal hcnt_i : integer range 0 to 1023; -signal vcnt_i : integer range 0 to 511; -signal hcnt_o : integer range 0 to 511; - -signal flip_flop : std_logic; - -type ram_1024x8 is array(0 to 1023) of std_logic_vector(7 downto 0); -signal ram1 : ram_1024x8; -signal ram2 : ram_1024x8; -signal video : std_logic_vector(7 downto 0); - -begin - -process(clock_12mhz) -begin - if rising_edge(clock_12mhz) then - - hsync_i_reg <= hsync_i; - vsync_i_reg <= vsync_i; - - if (vsync_i = '0' and vsync_i_reg = '1') then - vcnt_i <= 0; - else - if (hsync_i = '0' and hsync_i_reg = '1') then - vcnt_i <= vcnt_i + 1; - end if; - end if; - - if (hsync_i = '0' and hsync_i_reg = '1') then - flip_flop <= not flip_flop; - hcnt_i <= 0; - else - hcnt_i <= hcnt_i + 1; - end if; - - if (hsync_i = '0' and hsync_i_reg = '1') or hcnt_o = 383 then - hcnt_o <= 0; - else - hcnt_o <= hcnt_o + 1; - end if; - - if hcnt_o = 0 then hsync_o <= '0'; - elsif hcnt_o = 4 then hsync_o <= '1'; - end if; - - if vcnt_i = 0 then vsync_o <= '0'; - elsif vcnt_i = 4 then vsync_o <= '1'; - end if; - - end if; -end process; - -process(clock_12mhz) -begin - if rising_edge(clock_12mhz) then - if flip_flop = '0' then - ram1(hcnt_i/2) <= video_i; - video <= ram2(hcnt_o); - else - ram2(hcnt_i/2) <= video_i; - video <= ram1(hcnt_o); - end if; - end if; - video_o <= video; -end process; - -end architecture; \ No newline at end of file diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/mist_io.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/mist_io.sv index dcc7ecde..2f41221f 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/mist_io.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/mist_io.sv @@ -5,6 +5,7 @@ // http://code.google.com/p/mist-board/ // // Copyright (c) 2014 Till Harbaum +// Copyright (c) 2015-2017 Sorgelig // // This source file is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published @@ -47,13 +48,16 @@ module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) output SPI_DO, input SPI_DI, - output reg [7:0] joystick_0, - output reg [7:0] joystick_1, + output reg [7:0] joystick_0, + output reg [7:0] joystick_1, +// output reg [31:0] joystick_2, +// output reg [31:0] joystick_3, +// output reg [31:0] joystick_4, output reg [15:0] joystick_analog_0, output reg [15:0] joystick_analog_1, output [1:0] buttons, output [1:0] switches, - output scandoubler_disable, + output scandoublerD, output ypbpr, output reg [31:0] status, @@ -61,13 +65,13 @@ module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) // SD config input sd_conf, input sd_sdhc, - output img_mounted, // signaling that new image has been mounted + output [1:0] img_mounted, // signaling that new image has been mounted output reg [31:0] img_size, // size of image in bytes // SD block level access input [31:0] sd_lba, - input sd_rd, - input sd_wr, + input [1:0] sd_rd, + input [1:0] sd_wr, output reg sd_ack, output reg sd_ack_conf, @@ -82,192 +86,222 @@ module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) output reg ps2_kbd_data, output ps2_mouse_clk, output reg ps2_mouse_data, - input ps2_caps_led, + + // ps2 alternative interface. + + // [8] - extended, [9] - pressed, [10] - toggles with every press/release + output reg [10:0] ps2_key = 0, + + // [24] - toggles with every event + output reg [24:0] ps2_mouse = 0, // ARM -> FPGA download + input ioctl_ce, output reg ioctl_download = 0, // signal indicating an active download output reg [7:0] ioctl_index, // menu index used to upload the file - output ioctl_wr, - output reg [23:0] ioctl_addr, + output reg ioctl_wr = 0, + output reg [24:0] ioctl_addr, output reg [7:0] ioctl_dout ); -reg [7:0] b_data; -reg [6:0] sbuf; -reg [7:0] cmd; -reg [2:0] bit_cnt; // counts bits 0-7 0-7 ... -reg [9:0] byte_cnt; // counts bytes reg [7:0] but_sw; reg [2:0] stick_idx; -reg mount_strobe = 0; +reg [1:0] mount_strobe = 0; assign img_mounted = mount_strobe; assign buttons = but_sw[1:0]; assign switches = but_sw[3:2]; -assign scandoubler_disable = but_sw[4]; +assign scandoublerD = but_sw[4]; assign ypbpr = but_sw[5]; -wire [7:0] spi_dout = { sbuf, SPI_DI}; - // this variant of user_io is for 8 bit cores (type == a4) only wire [7:0] core_type = 8'ha4; // command byte read by the io controller -wire [7:0] sd_cmd = { 4'h5, sd_conf, sd_sdhc, sd_wr, sd_rd }; +wire drive_sel = sd_rd[1] | sd_wr[1]; +wire [7:0] sd_cmd = { 4'h6, sd_conf, sd_sdhc, sd_wr[drive_sel], sd_rd[drive_sel] }; + +reg [7:0] cmd; +reg [2:0] bit_cnt; // counts bits 0-7 0-7 ... +reg [9:0] byte_cnt; // counts bytes reg spi_do; assign SPI_DO = CONF_DATA0 ? 1'bZ : spi_do; -wire [7:0] kbd_led = { 2'b01, 4'b0000, ps2_caps_led, 1'b1}; +reg [7:0] spi_data_out; -// drive MISO only when transmitting core id -always@(negedge SPI_SCK) begin - if(!CONF_DATA0) begin - // first byte returned is always core type, further bytes are - // command dependent - if(byte_cnt == 0) begin - spi_do <= core_type[~bit_cnt]; +// SPI transmitter +always@(negedge SPI_SCK) spi_do <= spi_data_out[~bit_cnt]; - end else begin - case(cmd) - // reading config string - 8'h14: begin - // returning a byte from string - if(byte_cnt < STRLEN + 1) spi_do <= conf_str[{STRLEN - byte_cnt,~bit_cnt}]; - else spi_do <= 0; - end - - // reading sd card status - 8'h16: begin - if(byte_cnt == 1) spi_do <= sd_cmd[~bit_cnt]; - else if((byte_cnt >= 2) && (byte_cnt < 6)) spi_do <= sd_lba[{5-byte_cnt, ~bit_cnt}]; - else spi_do <= 0; - end - - // reading sd card write data - 8'h18: - spi_do <= b_data[~bit_cnt]; - - // reading keyboard LED status - 8'h1f: - spi_do <= kbd_led[~bit_cnt]; - - default: - spi_do <= 0; - endcase - end - end -end - -reg b_wr2,b_wr3; -always @(negedge clk_sys) begin - b_wr3 <= b_wr2; - sd_buff_wr <= b_wr3; -end +reg [7:0] spi_data_in; +reg spi_data_ready = 0; // SPI receiver always@(posedge SPI_SCK or posedge CONF_DATA0) begin + reg [6:0] sbuf; + reg [31:0] sd_lba_r; + reg drive_sel_r; if(CONF_DATA0) begin - b_wr2 <= 0; bit_cnt <= 0; byte_cnt <= 0; - sd_ack <= 0; - sd_ack_conf <= 0; - end else begin - b_wr2 <= 0; - - sbuf <= spi_dout[6:0]; + spi_data_out <= core_type; + end + else + begin bit_cnt <= bit_cnt + 1'd1; - if(bit_cnt == 5) begin - if (byte_cnt == 0) sd_buff_addr <= 0; - if((byte_cnt != 0) & (sd_buff_addr != 511)) sd_buff_addr <= sd_buff_addr + 1'b1; - if((byte_cnt == 1) & ((cmd == 8'h17) | (cmd == 8'h19))) sd_buff_addr <= 0; - end + sbuf <= {sbuf[5:0], SPI_DI}; // finished reading command byte if(bit_cnt == 7) begin + if(!byte_cnt) cmd <= {sbuf, SPI_DI}; + + spi_data_in <= {sbuf, SPI_DI}; + spi_data_ready <= ~spi_data_ready; if(~&byte_cnt) byte_cnt <= byte_cnt + 8'd1; - if(byte_cnt == 0) begin - cmd <= spi_dout; - - if(spi_dout == 8'h19) begin - sd_ack_conf <= 1; - sd_buff_addr <= 0; - end - if((spi_dout == 8'h17) || (spi_dout == 8'h18)) begin - sd_ack <= 1; - sd_buff_addr <= 0; - end - if(spi_dout == 8'h18) b_data <= sd_buff_din; - - mount_strobe <= 0; - - end else begin - case(cmd) - // buttons and switches - 8'h01: but_sw <= spi_dout; - 8'h02: joystick_0 <= spi_dout; - 8'h03: joystick_1 <= spi_dout; + spi_data_out <= 0; + case({(!byte_cnt) ? {sbuf, SPI_DI} : cmd}) + // reading config string + 8'h14: if(byte_cnt < STRLEN) spi_data_out <= conf_str[(STRLEN - byte_cnt - 1)<<3 +:8]; - // store incoming ps2 mouse bytes - 8'h04: begin - ps2_mouse_fifo[ps2_mouse_wptr] <= spi_dout; - ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1; - end + // reading sd card status + 8'h16: if(byte_cnt == 0) begin + spi_data_out <= sd_cmd; + sd_lba_r <= sd_lba; + drive_sel_r <= drive_sel; + end else if (byte_cnt == 1) begin + spi_data_out <= drive_sel_r; + end else if(byte_cnt < 6) spi_data_out <= sd_lba_r[(5-byte_cnt)<<3 +:8]; - // store incoming ps2 keyboard bytes - 8'h05: begin - ps2_kbd_fifo[ps2_kbd_wptr] <= spi_dout; - ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1; - end - - 8'h15: status[7:0] <= spi_dout; - - // send SD config IO -> FPGA - // flag that download begins - // sd card knows data is config if sd_dout_strobe is asserted - // with sd_ack still being inactive (low) - 8'h19, - // send sector IO -> FPGA - // flag that download begins - 8'h17: begin - sd_buff_dout <= spi_dout; - b_wr2 <= 1; - end + // reading sd card write data + 8'h18: spi_data_out <= sd_buff_din; + endcase + end + end +end - 8'h18: b_data <= sd_buff_din; +reg [31:0] ps2_key_raw = 0; +wire pressed = (ps2_key_raw[15:8] != 8'hf0); +wire extended = (~pressed ? (ps2_key_raw[23:16] == 8'he0) : (ps2_key_raw[15:8] == 8'he0)); - // joystick analog - 8'h1a: begin - // first byte is joystick index - if(byte_cnt == 1) stick_idx <= spi_dout[2:0]; - else if(byte_cnt == 2) begin - // second byte is x axis - if(stick_idx == 0) joystick_analog_0[15:8] <= spi_dout; - else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_dout; - end else if(byte_cnt == 3) begin - // third byte is y axis - if(stick_idx == 0) joystick_analog_0[7:0] <= spi_dout; - else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_dout; - end - end +// transfer to clk_sys domain +always@(posedge clk_sys) begin + reg old_ss1, old_ss2; + reg old_ready1, old_ready2; + reg [2:0] b_wr; + reg got_ps2 = 0; - // notify image selection - 8'h1c: mount_strobe <= 1; + old_ss1 <= CONF_DATA0; + old_ss2 <= old_ss1; + old_ready1 <= spi_data_ready; + old_ready2 <= old_ready1; + + sd_buff_wr <= b_wr[0]; + if(b_wr[2] && (~&sd_buff_addr)) sd_buff_addr <= sd_buff_addr + 1'b1; + b_wr <= (b_wr<<1); - // send image info - 8'h1d: if(byte_cnt<5) img_size[(byte_cnt-1)<<3 +:8] <= spi_dout; - - // status, 32bit version - 8'h1e: if(byte_cnt<5) status[(byte_cnt-1)<<3 +:8] <= spi_dout; - default: ; - endcase + if(old_ss2) begin + got_ps2 <= 0; + sd_ack <= 0; + sd_ack_conf <= 0; + sd_buff_addr <= 0; + if(got_ps2) begin + if(cmd == 4) ps2_mouse[24] <= ~ps2_mouse[24]; + if(cmd == 5) begin + ps2_key <= {~ps2_key[10], pressed, extended, ps2_key_raw[7:0]}; + if(ps2_key_raw == 'hE012E07C) ps2_key[9:0] <= 'h37C; // prnscr pressed + if(ps2_key_raw == 'h7CE0F012) ps2_key[9:0] <= 'h17C; // prnscr released + if(ps2_key_raw == 'hF014F077) ps2_key[9:0] <= 'h377; // pause pressed end end end + else + if(old_ready2 ^ old_ready1) begin + + if(cmd == 8'h18 && ~&sd_buff_addr) sd_buff_addr <= sd_buff_addr + 1'b1; + + if(byte_cnt < 2) begin + + if (cmd == 8'h19) sd_ack_conf <= 1; + if((cmd == 8'h17) || (cmd == 8'h18)) sd_ack <= 1; + mount_strobe <= 0; + + if(cmd == 5) ps2_key_raw <= 0; + end else begin + + case(cmd) + // buttons and switches + 8'h01: but_sw <= spi_data_in; + 8'h02: joystick_0 <= spi_data_in; + 8'h03: joystick_1 <= spi_data_in; +// 8'h60: if (byte_cnt < 5) joystick_0[(byte_cnt-1)<<3 +:8] <= spi_data_in; +// 8'h61: if (byte_cnt < 5) joystick_1[(byte_cnt-1)<<3 +:8] <= spi_data_in; +// 8'h62: if (byte_cnt < 5) joystick_2[(byte_cnt-1)<<3 +:8] <= spi_data_in; +// 8'h63: if (byte_cnt < 5) joystick_3[(byte_cnt-1)<<3 +:8] <= spi_data_in; +// 8'h64: if (byte_cnt < 5) joystick_4[(byte_cnt-1)<<3 +:8] <= spi_data_in; + // store incoming ps2 mouse bytes + 8'h04: begin + got_ps2 <= 1; + case(byte_cnt) + 2: ps2_mouse[7:0] <= spi_data_in; + 3: ps2_mouse[15:8] <= spi_data_in; + 4: ps2_mouse[23:16] <= spi_data_in; + endcase + ps2_mouse_fifo[ps2_mouse_wptr] <= spi_data_in; + ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1; + end + + // store incoming ps2 keyboard bytes + 8'h05: begin + got_ps2 <= 1; + ps2_key_raw[31:0] <= {ps2_key_raw[23:0], spi_data_in}; + ps2_kbd_fifo[ps2_kbd_wptr] <= spi_data_in; + ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1; + end + + 8'h15: status[7:0] <= spi_data_in; + + // send SD config IO -> FPGA + // flag that download begins + // sd card knows data is config if sd_dout_strobe is asserted + // with sd_ack still being inactive (low) + 8'h19, + // send sector IO -> FPGA + // flag that download begins + 8'h17: begin + sd_buff_dout <= spi_data_in; + b_wr <= 1; + end + + // joystick analog + 8'h1a: begin + // first byte is joystick index + if(byte_cnt == 2) stick_idx <= spi_data_in[2:0]; + else if(byte_cnt == 3) begin + // second byte is x axis + if(stick_idx == 0) joystick_analog_0[15:8] <= spi_data_in; + else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_data_in; + end else if(byte_cnt == 4) begin + // third byte is y axis + if(stick_idx == 0) joystick_analog_0[7:0] <= spi_data_in; + else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_data_in; + end + end + + // notify image selection + 8'h1c: mount_strobe[spi_data_in[0]] <= 1; + + // send image info + 8'h1d: if(byte_cnt<6) img_size[(byte_cnt-2)<<3 +:8] <= spi_data_in; + + // status, 32bit version + 8'h1e: if(byte_cnt<6) status[(byte_cnt-2)<<3 +:8] <= spi_data_in; + default: ; + endcase + end + end end @@ -415,31 +449,28 @@ end /////////////////////////////// DOWNLOADING /////////////////////////////// reg [7:0] data_w; -reg [23:0] addr_w; +reg [24:0] addr_w; reg rclk = 0; localparam UIO_FILE_TX = 8'h53; localparam UIO_FILE_TX_DAT = 8'h54; localparam UIO_FILE_INDEX = 8'h55; +reg rdownload = 0; + // data_io has its own SPI interface to the io controller always@(posedge SPI_SCK, posedge SPI_SS2) begin reg [6:0] sbuf; reg [7:0] cmd; reg [4:0] cnt; - reg [23:0] addr; + reg [24:0] addr; if(SPI_SS2) cnt <= 0; else begin - rclk <= 0; - // don't shift in last bit. It is evaluated directly // when writing to ram if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI}; - // increase target address after write - if(rclk) addr <= addr + 1'd1; - // count 0-7 8-15 8-15 ... if(cnt < 15) cnt <= cnt + 1'd1; else cnt <= 8; @@ -451,11 +482,15 @@ always@(posedge SPI_SCK, posedge SPI_SS2) begin if((cmd == UIO_FILE_TX) && (cnt == 15)) begin // prepare if(SPI_DI) begin - addr <= 0; - ioctl_download <= 1; + case(ioctl_index[4:0]) + 1: addr <= 25'h200000; // TRD buffer at 2MB + 2: addr <= 25'h400000; // tape buffer at 4MB + default: addr <= 25'h150000; // boot rom + endcase + rdownload <= 1; end else begin addr_w <= addr; - ioctl_download <= 0; + rdownload <= 0; end end @@ -463,7 +498,8 @@ always@(posedge SPI_SCK, posedge SPI_SS2) begin if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin addr_w <= addr; data_w <= {sbuf, SPI_DI}; - rclk <= 1; + addr <= addr + 1'd1; + rclk <= ~rclk; end // expose file (menu) index @@ -471,21 +507,24 @@ always@(posedge SPI_SCK, posedge SPI_SS2) begin end end -assign ioctl_wr = |ioctl_wrd; -reg [1:0] ioctl_wrd; - -always@(negedge clk_sys) begin +// transfer to ioctl_clk domain. +// ioctl_index is set before ioctl_download, so it's stable already +always@(posedge clk_sys) begin reg rclkD, rclkD2; - rclkD <= rclk; - rclkD2 <= rclkD; - ioctl_wrd<= {ioctl_wrd[0],1'b0}; + if(ioctl_ce) begin + ioctl_download <= rdownload; - if(rclkD & ~rclkD2) begin - ioctl_dout <= data_w; - ioctl_addr <= addr_w; - ioctl_wrd <= 2'b11; + rclkD <= rclk; + rclkD2 <= rclkD; + ioctl_wr <= 0; + + if(rclkD != rclkD2) begin + ioctl_dout <= data_w; + ioctl_addr <= addr_w; + ioctl_wr <= 1; + end end end -endmodule +endmodule \ No newline at end of file diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/pll.qip b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/pll.qip new file mode 100644 index 00000000..afd958be --- /dev/null +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/pll.qip @@ -0,0 +1,4 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "13.1" +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "pll.v"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/pll.v b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/pll.v index 202524dc..34c7949f 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/pll.v +++ b/Arcade_MiST/Custom Hardware/Bagman_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 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 @@ -40,26 +40,30 @@ module pll ( inclk0, c0, c1, + c2, locked); input inclk0; output c0; output c1; + output c2; output locked; wire [4:0] sub_wire0; wire sub_wire2; - wire [0:0] sub_wire6 = 1'h0; + wire [0:0] sub_wire7 = 1'h0; + wire [2:2] sub_wire4 = sub_wire0[2:2]; wire [0:0] sub_wire3 = sub_wire0[0:0]; wire [1:1] sub_wire1 = sub_wire0[1:1]; wire c1 = sub_wire1; wire locked = sub_wire2; wire c0 = sub_wire3; - wire sub_wire4 = inclk0; - wire [1:0] sub_wire5 = {sub_wire6, sub_wire4}; + wire c2 = sub_wire4; + wire sub_wire5 = inclk0; + wire [1:0] sub_wire6 = {sub_wire7, sub_wire5}; altpll altpll_component ( - .inclk (sub_wire5), + .inclk (sub_wire6), .clk (sub_wire0), .locked (sub_wire2), .activeclock (), @@ -98,7 +102,7 @@ module pll ( .vcounderrange ()); defparam altpll_component.bandwidth_type = "AUTO", - altpll_component.clk0_divide_by = 26, + altpll_component.clk0_divide_by = 52, altpll_component.clk0_duty_cycle = 50, altpll_component.clk0_multiply_by = 47, altpll_component.clk0_phase_shift = "0", @@ -106,6 +110,10 @@ module pll ( altpll_component.clk1_duty_cycle = 50, altpll_component.clk1_multiply_by = 47, altpll_component.clk1_phase_shift = "0", + altpll_component.clk2_divide_by = 208, + altpll_component.clk2_duty_cycle = 50, + altpll_component.clk2_multiply_by = 47, + altpll_component.clk2_phase_shift = "0", altpll_component.compensate_clock = "CLK0", altpll_component.inclk0_input_frequency = 37037, altpll_component.intended_device_family = "Cyclone III", @@ -140,7 +148,7 @@ module pll ( altpll_component.port_scanwrite = "PORT_UNUSED", altpll_component.port_clk0 = "PORT_USED", altpll_component.port_clk1 = "PORT_USED", - altpll_component.port_clk2 = "PORT_UNUSED", + altpll_component.port_clk2 = "PORT_USED", altpll_component.port_clk3 = "PORT_UNUSED", altpll_component.port_clk4 = "PORT_UNUSED", altpll_component.port_clk5 = "PORT_UNUSED", @@ -179,12 +187,15 @@ endmodule // Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" // Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" // Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" -// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "26" +// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "52" // Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "104" +// Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "208" // Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" // Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" -// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "48.807693" +// Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "24.403847" // Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "12.201923" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "6.100962" // 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" @@ -206,25 +217,33 @@ endmodule // Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" // Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" // Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" // Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" // Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" // Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +// Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" // Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "47" // Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "47" +// Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "47" // Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" -// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "48.78400000" +// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "24.39200000" // Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "12.19600000" +// Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "6.09800000" // Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" // Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" // Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" // Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" // Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" // Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" // Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" // Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" // Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" // Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" // Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" // Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" // Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" // Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" @@ -248,18 +267,21 @@ endmodule // Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" // Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" // Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +// Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" // Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" // Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" // Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" // Retrieval info: PRIVATE: USE_CLK0 STRING "1" // Retrieval info: PRIVATE: USE_CLK1 STRING "1" +// Retrieval info: PRIVATE: USE_CLK2 STRING "1" // Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" // Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +// Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" // Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" // Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" // Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all // Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" -// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "26" +// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "52" // Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" // Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "47" // Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" @@ -267,6 +289,10 @@ endmodule // Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" // Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "47" // Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "208" +// Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "47" +// Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" // Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" // Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" // Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" @@ -300,7 +326,7 @@ endmodule // Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" // Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" // Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" -// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" // Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" // Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" // Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" @@ -319,12 +345,14 @@ endmodule // 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: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" // Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" // Retrieval info: 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: c2 0 0 0 0 @clk 0 0 1 2 // 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/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv index 3dd47eec..79d8ca03 100644 --- a/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv +++ b/Arcade_MiST/Custom Hardware/Bagman_MiST/rtl/video_mixer.sv @@ -20,8 +20,8 @@ module video_mixer #( - parameter LINE_LENGTH = 768, - parameter HALF_DEPTH = 0, + parameter LINE_LENGTH = 480, + parameter HALF_DEPTH = 1, parameter OSD_COLOR = 3'd4, parameter OSD_X_OFFSET = 10'd0, @@ -50,7 +50,7 @@ module video_mixer input [1:0] scanlines, // 0 = HVSync 31KHz, 1 = CSync 15KHz - input scandoubler_disable, + input scandoublerD, // High quality 2x scaling input hq2x, @@ -113,9 +113,9 @@ scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) scandoubler .b_out(B_sd) ); -wire [DWIDTH:0] rt = (scandoubler_disable ? R : R_sd); -wire [DWIDTH:0] gt = (scandoubler_disable ? G : G_sd); -wire [DWIDTH:0] bt = (scandoubler_disable ? B : B_sd); +wire [DWIDTH:0] rt = (scandoublerD ? R : R_sd); +wire [DWIDTH:0] gt = (scandoublerD ? G : G_sd); +wire [DWIDTH:0] bt = (scandoublerD ? B : B_sd); generate if(HALF_DEPTH) begin @@ -129,8 +129,8 @@ generate end endgenerate -wire hs = (scandoubler_disable ? HSync : hs_sd); -wire vs = (scandoubler_disable ? VSync : vs_sd); +wire hs = (scandoublerD ? HSync : hs_sd); +wire vs = (scandoublerD ? VSync : vs_sd); reg scanline = 0; always @(posedge clk_sys) begin @@ -237,7 +237,7 @@ wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[1 assign VGA_R = ypbpr ? (ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]) : red; assign VGA_G = ypbpr ? (ypbpr_full ? yuv_full[y -8'd16] : y[7:2]) : green; assign VGA_B = ypbpr ? (ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]) : blue; -assign VGA_VS = (scandoubler_disable | ypbpr) ? 1'b1 : ~vs_sd; -assign VGA_HS = scandoubler_disable ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd; +assign VGA_VS = (scandoublerD | ypbpr) ? 1'b1 : ~vs_sd; +assign VGA_HS = scandoublerD ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd; endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt index 99b12544..49293e17 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt index a01e42b0..4767d316 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt index bddd7b9c..43f4d04c 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/README.txt index 418057cf..512d0e18 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/README.txt index 2f94a981..d3a83bb6 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/README.txt @@ -12,11 +12,15 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- -- Joystick support. -- --------------------------------------------------------------------------------- + + +ToDo: Change Sound and add Speech \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/README.txt index 31ed16e5..846fd542 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/README.txt index 68bb7f43..af0153f8 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/README.txt index 4f191295..60917297 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/README.txt index 428cdd6f..e07cca59 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/README.txt index 81149461..a402af10 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/README.txt index 4178fafb..f20f8e06 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F1 : Start 2 player -- SPACE : Select -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/README.txt index bd2def7c..9d75bb33 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements -- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/ZigZag_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/ZigZag_MiST/README.txt index ae99ecca..5133a7aa 100644 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/ZigZag_MiST/README.txt +++ b/Arcade_MiST/Galaxian Hardware/Z80 Based/ZigZag_MiST/README.txt @@ -13,8 +13,9 @@ -- -- Keyboard inputs : -- --- F2 : Coin + Start 2 players --- F1 : Coin + Start 1 player +-- ESC : Coin +-- F1 : Start 1 player +-- F2 : Start 2 player -- SPACE : Fire -- ARROW KEYS : Movements --