|
LIBRARY ieee;
|
|
USE ieee.std_logic_1164.all;
|
|
USE ieee.numeric_std.all;
|
|
|
|
ENTITY config_regs_6502 IS
|
|
PORT (
|
|
CLK: in std_logic;
|
|
RESET_N: in std_logic;
|
|
|
|
SEM_OUT: out std_logic;
|
|
BANKA_ENABLE: out std_logic;
|
|
BANK8_ENABLE: out std_logic;
|
|
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 config_regs_6502;
|
|
|
|
ARCHITECTURE vhdl OF config_regs_6502 IS
|
|
|
|
signal sem_next : std_logic;
|
|
signal sem_reg : std_logic;
|
|
|
|
signal banka_enable_next : std_logic;
|
|
signal banka_enable_reg : std_logic;
|
|
|
|
signal bank8_enable_next : std_logic;
|
|
signal bank8_enable_reg : std_logic;
|
|
|
|
signal bank_half_next : std_logic;
|
|
signal bank_half_reg : std_logic;
|
|
|
|
signal bank_select_next : std_logic;
|
|
signal bank_select_reg : std_logic;
|
|
|
|
signal enable_65816_next : std_logic;
|
|
signal enable_65816_reg : std_logic;
|
|
|
|
begin
|
|
process(clk,reset_n)
|
|
begin
|
|
if (reset_n='0') then
|
|
sem_reg <= '1';
|
|
banka_enable_reg <= '0';
|
|
bank8_enable_reg <= '0';
|
|
bank_half_reg <= '1';
|
|
bank_select_reg <= '0';
|
|
enable_65816_reg <= '0';
|
|
elsif (clk'event and clk='1') then
|
|
sem_reg <= sem_next;
|
|
banka_enable_reg <= banka_enable_next;
|
|
bank8_enable_reg <= bank8_enable_next;
|
|
bank_half_reg <= bank_half_next;
|
|
bank_select_reg <= bank_select_next;
|
|
enable_65816_reg <= enable_65816_next;
|
|
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,sem_write_65816,sem_value_65816)
|
|
begin
|
|
sem_next <= sem_reg;
|
|
banka_enable_next <= banka_enable_reg;
|
|
bank8_enable_next <= bank8_enable_reg;
|
|
bank_half_next <= bank_half_reg;
|
|
bank_select_next <= bank_select_reg;
|
|
enable_65816_next <= enable_65816_reg;
|
|
|
|
if (rw_n='0') then
|
|
sem_next <= data_in(7);
|
|
banka_enable_next <= data_in(5);
|
|
bank8_enable_next <= data_in(4);
|
|
bank_half_next <= data_in(3);
|
|
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;
|
|
sem_out <= sem_reg;
|
|
banka_enable <= banka_enable_reg;
|
|
bank8_enable <= bank8_enable_reg;
|
|
bank_half_select<=bank_half_reg;
|
|
bank_select<=bank_select_reg;
|
|
enable_65816<=enable_65816_reg;
|
|
|
|
end vhdl;
|