From b0122417219dfcf0ae1c842db6de8504deff576c Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Thu, 20 Dec 2018 03:15:15 +0100 Subject: [PATCH] [C64] Add Protovision 4 player joystick interface --- cores/c64/rtl/fpga64_sid_iec.vhd | 8 +++++++- cores/c64/rtl/mist/c64_mist.vhd | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cores/c64/rtl/fpga64_sid_iec.vhd b/cores/c64/rtl/fpga64_sid_iec.vhd index 0841761..498ba85 100644 --- a/cores/c64/rtl/fpga64_sid_iec.vhd +++ b/cores/c64/rtl/fpga64_sid_iec.vhd @@ -85,6 +85,9 @@ entity fpga64_sid_iec is -- joystick interface joyA : in unsigned(6 downto 0); joyB : in unsigned(6 downto 0); + -- 4 player interface + joyC : in unsigned(6 downto 0); + joyD : in unsigned(6 downto 0); -- serial port, for connection to pheripherals serioclk : out std_logic; @@ -829,7 +832,10 @@ div1m: process(clk32) -- this process devides 32 MHz to 1MHz (for the SID) end process; cia2_pai(5 downto 0) <= cia2_pao(5 downto 0); - cia2_pbi(7 downto 0) <= cia2_pbo; + cia2_pbi(7 downto 6) <= cia2_pbo(7 downto 6); + + -- Protovision 4 player interface + cia2_pbi(5 downto 0) <= not joyC(5 downto 0) when cia2_pbo(7) = '1' else not joyD(5 downto 0); -- ----------------------------------------------------------------------- -- VIC bank to address lines diff --git a/cores/c64/rtl/mist/c64_mist.vhd b/cores/c64/rtl/mist/c64_mist.vhd index edd7254..bf78c3a 100644 --- a/cores/c64/rtl/mist/c64_mist.vhd +++ b/cores/c64/rtl/mist/c64_mist.vhd @@ -351,10 +351,14 @@ end component cartridge; signal joyA : std_logic_vector(31 downto 0); signal joyB : std_logic_vector(31 downto 0); + signal joyC : std_logic_vector(31 downto 0); + signal joyD : std_logic_vector(31 downto 0); signal joyA_int : std_logic_vector(6 downto 0); signal joyB_int : std_logic_vector(6 downto 0); signal joyA_c64 : std_logic_vector(6 downto 0); signal joyB_c64 : std_logic_vector(6 downto 0); + signal joyC_c64 : std_logic_vector(6 downto 0); + signal joyD_c64 : std_logic_vector(6 downto 0); signal reset_key : std_logic; signal cart_detach_key :std_logic; -- cartridge detach key CTRL-D - LCA @@ -469,6 +473,8 @@ begin joystick_0 => joyA, joystick_1 => joyB, + joystick_2 => joyC, + joystick_3 => joyD, conf_str => to_slv(CONF_STR), @@ -557,6 +563,8 @@ begin -- rearrange joystick contacta for c64 joyA_int <= joyA(6 downto 4) & joyA(0) & joyA(1) & joyA(2) & joyA(3); joyB_int <= joyB(6 downto 4) & joyB(0) & joyB(1) & joyB(2) & joyB(3); + joyC_c64 <= joyC(6 downto 4) & joyC(0) & joyC(1) & joyC(2) & joyC(3); + joyD_c64 <= joyD(6 downto 4) & joyD(0) & joyD(1) & joyD(2) & joyD(3); -- swap joysticks if requested joyA_c64 <= joyB_int when status(3)='1' else joyA_int; @@ -818,6 +826,8 @@ begin ba => open, joyA => unsigned(joyA_c64), joyB => unsigned(joyB_c64), + joyC => unsigned(joyC_c64), + joyD => unsigned(joyD_c64), serioclk => open, ces => ces, SIDclk => open,