Revision 687
Added by markw over 7 years ago
| ultimate_cart/veronica/config_regs_6502.vhd | ||
|---|---|---|
|
BANK_HALF_SELECT: out std_logic;
|
||
|
BANK_SELECT: out std_logic;
|
||
|
ENABLE_65816: out std_logic;
|
||
|
|
||
|
|
||
|
SEM_WRITE_65816 : in std_logic;
|
||
|
SEM_VALUE_65816 : in std_logic;
|
||
|
|
||
|
DATA_IN: in std_logic_vector(7 downto 0);
|
||
|
DATA_OUT: out std_logic_vector(7 downto 0);
|
||
|
RW_N: in std_logic
|
||
| ... | ... | |
|
end if;
|
||
|
end process;
|
||
|
|
||
|
process(data_in,rw_n,sem_reg,banka_enable_reg,bank8_enable_reg,bank_half_reg,bank_select_reg,enable_65816_reg)
|
||
|
process(data_in,rw_n,sem_reg,banka_enable_reg,bank8_enable_reg,bank_half_reg,bank_select_reg,enable_65816_reg,sem_write_65816,sem_value_65816)
|
||
|
begin
|
||
|
sem_next <= sem_reg;
|
||
|
banka_enable_next <= banka_enable_reg;
|
||
| ... | ... | |
|
bank_select_next <= data_in(1);
|
||
|
enable_65816_next <= data_in(0);
|
||
|
end if;
|
||
|
|
||
|
if (sem_write_65816='1') then
|
||
|
sem_next <= sem_value_65816;
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
|
data_out <= sem_reg&'1'&banka_enable_reg&bank8_enable_reg&bank_half_reg&'1'&bank_select_reg&enable_65816_reg;
|
||
| ultimate_cart/veronica/config_regs_veronica.vhd | ||
|---|---|---|
|
WINDOW_ADDRESS: out std_logic;
|
||
|
BANK_HALF_SELECT: out std_logic;
|
||
|
|
||
|
SEM_WRITE : out std_logic;
|
||
|
SEM_VALUE : out std_logic;
|
||
|
|
||
|
DATA_IN: in std_logic_vector(7 downto 0);
|
||
|
DATA_OUT: out std_logic_vector(7 downto 0);
|
||
|
RW_N: in std_logic
|
||
| ... | ... | |
|
begin
|
||
|
window_address_next <= window_address_reg;
|
||
|
bank_half_next <= bank_half_reg;
|
||
|
sem_write <= '0';
|
||
|
sem_value <= '0'; -- Not important
|
||
|
|
||
|
if (rw_n='0') then
|
||
|
window_address_next <= data_in(6);
|
||
|
bank_half_next <= data_in(5);
|
||
|
sem_write <= '1';
|
||
|
sem_value <= not(data_in(7));
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
| ultimate_cart/veronica/veronica.vhd | ||
|---|---|---|
|
-- Some unknown inputs
|
||
|
abort : in std_logic; -- another interrupt (active low)
|
||
|
be : in std_logic; -- bus enable (active high)
|
||
|
err_i : in std_logic; -- set to 0 in example
|
||
|
rty_i : in std_logic; -- set to 0 in example
|
||
|
err_i : in std_logic; -- set to 1 in example
|
||
|
rty_i : in std_logic; -- set to 1 in example
|
||
|
|
||
|
-- Some unknown outputs
|
||
|
vpa : out std_logic; -- valid program address
|
||
| ... | ... | |
|
signal atari_bank_half_select : std_logic;
|
||
|
signal atari_config_data : std_logic_vector(7 downto 0);
|
||
|
|
||
|
-- common config
|
||
|
-- common config
|
||
|
signal common_bank_select : std_logic;
|
||
|
|
||
|
-- semaphora
|
||
|
signal common_sem : std_logic;
|
||
|
signal common_bank_select : std_logic;
|
||
|
signal veronica_sem_write : std_logic;
|
||
|
signal veronica_sem_value : std_logic;
|
||
|
|
||
|
-- cart driving
|
||
|
signal cart_bus_data_out : std_logic_vector(7 downto 0);
|
||
| ... | ... | |
|
sem_in => common_sem,
|
||
|
window_address => veronica_window_address,
|
||
|
bank_half_select => veronica_bank_half_select,
|
||
|
sem_write => veronica_sem_write,
|
||
|
sem_value => veronica_sem_value,
|
||
|
|
||
|
data_in => veronica_write_data,
|
||
|
data_out => veronica_config_data,
|
||
| ... | ... | |
|
bank_half_select => atari_bank_half_select,
|
||
|
bank_select => common_bank_select,
|
||
|
enable_65816 => veronica_reset,
|
||
|
sem_write_65816 => veronica_sem_write,
|
||
|
sem_value_65816 => veronica_sem_value,
|
||
|
|
||
|
data_in => atari_write_data,
|
||
|
data_out => atari_config_data,
|
||
Veronica should be able to change the semaphore too.