Index: ../chameleon/chameleon_c64_joykeyb.vhd =================================================================== --- ../chameleon/chameleon_c64_joykeyb.vhd (revision 126) +++ ../chameleon/chameleon_c64_joykeyb.vhd (revision 871) @@ -85,8 +85,13 @@ signal cnt : unsigned(3 downto 0) := (others => '0'); signal col : integer range 0 to 7 := 0; signal keys_reg : unsigned(63 downto 0) := (others => '1'); + signal last_keys_reg : unsigned(63 downto 0) := (others => '1'); + signal approved_keys_reg : unsigned(63 downto 0) := (others => '1'); + signal joystick1_reg : unsigned(4 downto 0); + signal joystick1_prev_reg : unsigned(4 downto 0); + signal joystick2_prev_reg : unsigned(4 downto 0); begin - keys <= keys_reg; + keys <= approved_keys_reg; req <= req_reg; process(clk) @@ -193,6 +198,8 @@ a <= X"DC00"; req_reg <= not req_reg; joystick1 <= d(4 downto 0); + joystick1_prev_reg <= joystick1_reg; + joystick1_reg <= d(4 downto 0); state <= STORE_JOY2; when STORE_JOY2 => joystick2 <= d(4 downto 0); @@ -200,6 +207,12 @@ if enable_4player then state <= READ_JOY34; end if; + last_keys_reg <= keys_reg; + if ((joystick1_reg and d(4 downto 0) and joystick1_prev_reg and joystick2_prev_reg) = "11111" and last_keys_reg = keys_reg) then + approved_keys_reg <= keys_reg; + end if; + joystick2_prev_reg <= d(4 downto 0); + when READ_JOY34 => -- read user port for joystick 3 or 4 we <= '0';