Revision 428
Added by markw about 10 years ago
| common/a8core/atari5200core_simplesdram.vhd | ||
|---|---|---|
| 
     		-- JOYSTICK
 
   | 
||
| 
     		JOY1_X : IN signed(7 downto 0);
 
   | 
||
| 
     		JOY1_Y : IN signed(7 downto 0);
 
   | 
||
| 
     		JOY1_BUTTON : IN std_logic;
 
   | 
||
| 
     		JOY2_X : IN signed(7 downto 0);
 
   | 
||
| 
     		JOY2_Y : IN signed(7 downto 0);
 
   | 
||
| 
     		JOY2_BUTTON : IN std_logic;
 
   | 
||
| 
     | 
||
| 
     		JOY1_N : IN std_logic_vector(4 downto 0); -- FRLDU, 0=pressed
 
   | 
||
| 
     		JOY2_N : IN std_logic_vector(4 downto 0); -- FRLDU, 0=pressed
 
   | 
||
| 
     | 
||
| 
     		-- Pokey keyboard matrix
 
   | 
||
| 
     		-- Standard component available to connect this to PS2
 
   | 
||
| 
     		KEYBOARD_RESPONSE : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
 
   | 
||
| ... | ... | |
| 
     BEGIN
 
   | 
||
| 
     | 
||
| 
     -- triggers
 
   | 
||
| 
     TRIG(0) <= JOY1_BUTTON;
 
   | 
||
| 
     TRIG(1) <= JOY2_BUTTON;
 
   | 
||
| 
     TRIG(0) <= JOY1_N(4);
 
   | 
||
| 
     TRIG(1) <= JOY2_N(4);
 
   | 
||
| 
     | 
||
| 
     -- pots 
 
   | 
||
| 
     pot0 : entity work.pot_from_signed
 
   | 
||
| ... | ... | |
| 
     		ENABLED => CONSOL_OUT(2),
 
   | 
||
| 
     		POT_RESET => POT_RESET,
 
   | 
||
| 
     		POS => JOY1_X,
 
   | 
||
| 
     		FORCE_LOW => NOT(JOY1_N(2)),
 
   | 
||
| 
     		FORCE_HIGH => NOT(JOY1_N(3)),
 
   | 
||
| 
     		POT_HIGH => POT_IN(0)
 
   | 
||
| 
     	);
 
   | 
||
| 
     pot1 : entity work.pot_from_signed
 
   | 
||
| ... | ... | |
| 
     		ENABLED => CONSOL_OUT(2),
 
   | 
||
| 
     		POT_RESET => POT_RESET,
 
   | 
||
| 
     		POS => JOY1_Y,
 
   | 
||
| 
     		FORCE_LOW => NOT(JOY1_N(0)),
 
   | 
||
| 
     		FORCE_HIGH => NOT(JOY1_N(1)),
 
   | 
||
| 
     		POT_HIGH => POT_IN(1)
 
   | 
||
| 
     	);
 
   | 
||
| 
     pot2 : entity work.pot_from_signed
 
   | 
||
| ... | ... | |
| 
     		ENABLED => CONSOL_OUT(2),
 
   | 
||
| 
     		POT_RESET => POT_RESET,
 
   | 
||
| 
     		POS => JOY2_X,
 
   | 
||
| 
     		FORCE_LOW => NOT(JOY2_N(2)),
 
   | 
||
| 
     		FORCE_HIGH => NOT(JOY2_N(3)),
 
   | 
||
| 
     		POT_HIGH => POT_IN(2)
 
   | 
||
| 
     	);
 
   | 
||
| 
     pot3 : entity work.pot_from_signed
 
   | 
||
| ... | ... | |
| 
     		ENABLED => CONSOL_OUT(2),
 
   | 
||
| 
     		POT_RESET => POT_RESET,
 
   | 
||
| 
     		POS => JOY2_Y,
 
   | 
||
| 
     		FORCE_LOW => NOT(JOY2_N(0)),
 
   | 
||
| 
     		FORCE_HIGH => NOT(JOY2_N(1)),
 
   | 
||
| 
     		POT_HIGH => POT_IN(3)
 
   | 
||
| 
     	);
 
   | 
||
| 
     POT_IN(7 downto 4) <= (others=>'0');
 
   | 
||
| common/a8core/pot_from_signed.vhdl | ||
|---|---|---|
| 
     	line_length : integer := 114;
 
   | 
||
| 
     	min_lines : integer := 0;
 
   | 
||
| 
     	max_lines : integer := 227;
 
   | 
||
| 
     	reverse : integer := 0
 
   | 
||
| 
     	reverse : integer := 0;
 
   | 
||
| 
     	force_to : signed(7 downto 0) := to_signed(100,8)
 
   | 
||
| 
     );
 
   | 
||
| 
     PORT 
 
   | 
||
| 
     ( 
 
   | 
||
| ... | ... | |
| 
     	ENABLED : IN STD_LOGIC;
 
   | 
||
| 
     	POT_RESET : IN STD_LOGIC;
 
   | 
||
| 
     	POS : IN SIGNED(7 downto 0);
 
   | 
||
| 
     	FORCE_LOW : IN STD_LOGIC:='0';
 
   | 
||
| 
     	FORCE_HIGH : IN STD_LOGIC:='0';
 
   | 
||
| 
     	POT_HIGH : OUT STD_LOGIC
 
   | 
||
| 
     );
 
   | 
||
| 
     END pot_from_signed;
 
   | 
||
| ... | ... | |
| 
     		end if;
 
   | 
||
| 
     	end process;
 
   | 
||
| 
     | 
||
| 
     	process(count_reg,pot_reset,count_enable,pot_out_next,enabled,pos)
 
   | 
||
| 
     	process(count_reg,pot_reset,count_enable,pot_out_next,enabled,pos,force_low,force_high)
 
   | 
||
| 
     		variable pos2 : signed(7 downto 0);
 
   | 
||
| 
     	begin
 
   | 
||
| 
     		pos2 := pos;
 
   | 
||
| 
     		if (abs(pos2) < 16 and force_low='1') then
 
   | 
||
| 
     			pos2 := -force_to;
 
   | 
||
| 
     		end if;
 
   | 
||
| 
     		if (abs(pos2) < 16 and force_high='1') then
 
   | 
||
| 
     			pos2 := force_to;
 
   | 
||
| 
     		end if;
 
   | 
||
| 
     | 
||
| 
     		count_next <= count_reg;
 
   | 
||
| 
     | 
||
| 
     		if (pot_reset ='1' or enabled = '0') then
 
   | 
||
| 
     			if (reverse = 1) then
 
   | 
||
| 
     				count_next <= std_logic_vector(to_unsigned(-to_integer(pos)+127+(line_length*min_lines/count_cycles),10));
 
   | 
||
| 
     				count_next <= std_logic_vector(to_unsigned(-to_integer(pos2)+127+(line_length*min_lines/count_cycles),10));
 
   | 
||
| 
     			else
 
   | 
||
| 
     				count_next <= std_logic_vector(to_unsigned(to_integer(pos)+128+(line_length*min_lines/count_cycles),10));
 
   | 
||
| 
     				count_next <= std_logic_vector(to_unsigned(to_integer(pos2)+128+(line_length*min_lines/count_cycles),10));
 
   | 
||
| 
     			end if;
 
   | 
||
| 
     		end if;
 
   | 
||
| 
     | 
||
digital stick support for 5200