2 use ieee.std_logic_1164.all;
5 generic ( dsize : integer := 8;
8 port ( input_clk : in std_logic; --phi0 input pin.
17 addr : out std_logic_vector ( asize - 1 downto 0);
18 d_io : inout std_logic_vector ( dsize - 1 downto 0)
22 architecture rtl of mos6502 is
27 reset_addr : integer := 0
30 trig_clk : in std_logic;
32 dbus_in_n : in std_logic;
33 dbus_out_n : in std_logic;
34 abus_out_n : in std_logic;
35 addr_inc_n : in std_logic;
36 addr_page_nxt_n : out std_logic;
37 int_d_bus : inout std_logic_vector (dsize - 1 downto 0);
38 int_a_bus : out std_logic_vector (dsize - 1 downto 0)
43 generic (dsize : integer := 8);
44 port ( set_clk : in std_logic;
45 trig_clk : in std_logic;
50 instruction : in std_logic_vector (dsize - 1 downto 0);
51 status_reg : in std_logic_vector (dsize - 1 downto 0);
52 pcl_d_i_n : out std_logic;
53 pcl_d_o_n : out std_logic;
54 pcl_a_o_n : out std_logic;
55 pch_d_i_n : out std_logic;
56 pch_d_o_n : out std_logic;
57 pch_a_o_n : out std_logic;
58 pc_inc_n : out std_logic;
63 component instruction_reg
68 trig_clk : in std_logic;
69 cpu_d_bus : in std_logic_vector (dsize - 1 downto 0);
70 to_decoder : out std_logic_vector (dsize - 1 downto 0)
74 signal set_clk : std_logic;
75 signal trigger_clk : std_logic;
77 signal pcl_d_in_n : std_logic;
78 signal pcl_d_out_n : std_logic;
79 signal pcl_a_out_n : std_logic;
80 signal pch_d_in_n : std_logic;
81 signal pch_d_out_n : std_logic;
82 signal pch_a_out_n : std_logic;
83 signal pc_inc_n : std_logic;
84 signal pc_page_nxt_n : std_logic;
85 signal dum_terminate : std_logic := 'Z';
87 --internal bus (address hi/lo, data)
88 signal internal_abus_h : std_logic_vector (dsize - 1 downto 0);
89 signal internal_abus_l : std_logic_vector (dsize - 1 downto 0);
90 signal internal_dbus : std_logic_vector (dsize - 1 downto 0);
92 signal instruction : std_logic_vector (dsize - 1 downto 0);
93 signal status_reg : std_logic_vector (dsize - 1 downto 0);
97 pc_l : pc generic map (dsize, 16#00#)
98 port map(trigger_clk, rst_n, pcl_d_in_n, pcl_d_out_n, pcl_a_out_n,
99 pc_inc_n, pc_page_nxt_n, internal_dbus, internal_abus_l);
100 pc_h : pc generic map (dsize, 16#80#)
101 port map(trigger_clk, rst_n, pch_d_in_n, pch_d_out_n, pch_a_out_n,
102 pc_page_nxt_n, dum_terminate, internal_dbus, internal_abus_h);
104 dec_inst : decoder generic map (dsize)
105 port map(set_clk, trigger_clk, rst_n, irq_n, nmi_n,
106 rdy, instruction, status_reg,
107 pcl_d_in_n, pcl_d_out_n, pcl_a_out_n,
108 pch_d_in_n, pch_d_out_n, pch_a_out_n,
112 instruction_register : instruction_reg generic map (dsize)
113 port map(trigger_clk, d_io, instruction);
117 phi2 <= not input_clk;
118 set_clk <= input_clk;
119 trigger_clk <= not input_clk;
121 addr(asize - 1 downto dsize) <= internal_abus_h;
122 addr(dsize - 1 downto 0) <= internal_abus_l;
124 reset_p : process (rst_n)
126 if (rst_n'event and rst_n = '0') then