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;
33 dbus_oe_n : in std_logic;
34 abus_oe_n : in std_logic;
35 addr_inc_n : in std_logic;
36 add_carry : in std_logic;
37 inc_carry : out std_logic;
38 int_d_bus : inout std_logic_vector (dsize - 1 downto 0);
39 int_a_bus : out std_logic_vector (dsize - 1 downto 0)
44 generic (dsize : integer := 8);
45 port ( set_clk : in std_logic;
46 trig_clk : in std_logic;
51 instruction : in std_logic_vector (dsize - 1 downto 0);
52 status_reg : inout std_logic_vector (dsize - 1 downto 0);
53 pcl_we_n : out std_logic;
54 pcl_d_oe_n : out std_logic;
55 pcl_a_oe_n : out std_logic;
56 pch_we_n : out std_logic;
57 pch_d_oe_n : out std_logic;
58 pch_a_oe_n : out std_logic;
59 pc_inc_n : out std_logic;
60 inst_we_n : out std_logic;
61 dbuf_int_oe_n : out std_logic;
62 dbuf_ext_oe_n : out std_logic;
63 dbuf_int_we_n : out std_logic;
64 dbuf_ext_we_n : out std_logic;
65 dl_int_d_oe_n : out std_logic;
66 dl_int_al_oe_n : out std_logic;
67 dl_int_ah_oe_n : out std_logic;
68 sp_we_n : out std_logic;
69 sp_int_d_oe_n : out std_logic;
70 sp_int_a_oe_n : out std_logic;
71 x_we_n : out std_logic;
72 x_oe_n : out std_logic;
73 y_we_n : out std_logic;
74 y_oe_n : out std_logic;
87 d : in std_logic_vector (dsize - 1 downto 0);
88 q : out std_logic_vector (dsize - 1 downto 0)
98 int_we_n : in std_logic;
99 ext_we_n : in std_logic;
100 int_oe_n : in std_logic;
101 ext_oe_n : in std_logic;
102 int_dbus : inout std_logic_vector (dsize - 1 downto 0);
103 ext_dbus : inout std_logic_vector (dsize - 1 downto 0)
113 int_d_oe_n : in std_logic;
114 int_al_oe_n : in std_logic;
115 int_ah_oe_n : in std_logic;
116 int_dbus : inout std_logic_vector (dsize - 1 downto 0);
117 int_abus_l : out std_logic_vector (dsize - 1 downto 0);
118 int_abus_h : out std_logic_vector (dsize - 1 downto 0)
129 int_d_oe_n : in std_logic;
130 int_a_oe_n : in std_logic;
131 int_dbus : inout std_logic_vector (dsize - 1 downto 0);
132 int_abus_l : out std_logic_vector (dsize - 1 downto 0);
133 int_abus_h : out std_logic_vector (dsize - 1 downto 0)
137 component processor_status
143 res_n : in std_logic;
144 dec_we_n : in std_logic;
145 bus_we_n : in std_logic;
146 dec_oe_n : in std_logic;
147 bus_oe_n : in std_logic;
148 decoder : inout std_logic_vector (dsize - 1 downto 0);
149 int_dbus : inout std_logic_vector (dsize - 1 downto 0)
153 signal set_clk : std_logic;
154 signal trigger_clk : std_logic;
156 signal pcl_d_we_n : std_logic;
157 signal pcl_d_oe_n : std_logic;
158 signal pcl_a_oe_n : std_logic;
159 signal pch_d_we_n : std_logic;
160 signal pch_d_oe_n : std_logic;
161 signal pch_a_oe_n : std_logic;
162 signal pc_inc_n : std_logic;
163 signal pc_cry : std_logic;
164 signal pc_cry_n : std_logic;
165 signal dum_terminate : std_logic := 'Z';
167 signal inst_we_n : std_logic;
168 signal dbuf_int_oe_n : std_logic;
169 signal dbuf_ext_oe_n : std_logic;
170 signal dbuf_int_we_n : std_logic;
171 signal dbuf_ext_we_n : std_logic;
172 signal dl_int_d_oe_n : std_logic;
173 signal dl_int_al_oe_n : std_logic;
174 signal dl_int_ah_oe_n : std_logic;
176 signal sp_we_n : std_logic;
177 signal sp_int_d_oe_n : std_logic;
178 signal sp_int_a_oe_n : std_logic;
180 signal x_we_n : std_logic;
181 signal x_oe_n : std_logic;
182 signal y_we_n : std_logic;
183 signal y_oe_n : std_logic;
185 --internal bus (address hi/lo, data)
186 signal internal_abus_h : std_logic_vector (dsize - 1 downto 0);
187 signal internal_abus_l : std_logic_vector (dsize - 1 downto 0);
188 signal internal_dbus : std_logic_vector (dsize - 1 downto 0);
190 signal instruction : std_logic_vector (dsize - 1 downto 0);
191 signal status_reg : std_logic_vector (dsize - 1 downto 0);
195 pc_l : pc generic map (dsize, 16#00#)
196 port map(trigger_clk, rst_n, pcl_d_we_n, pcl_d_oe_n, pcl_a_oe_n,
197 pc_inc_n, '0', pc_cry, internal_dbus, internal_abus_l);
198 pc_h : pc generic map (dsize, 16#80#)
199 port map(trigger_clk, rst_n, pch_d_we_n, pch_d_oe_n, pch_a_oe_n,
200 pc_cry_n, pc_cry, dum_terminate, internal_dbus, internal_abus_h);
202 dec_inst : decoder generic map (dsize)
203 port map(set_clk, trigger_clk, rst_n, irq_n, nmi_n,
204 rdy, instruction, status_reg,
205 pcl_d_we_n, pcl_d_oe_n, pcl_a_oe_n,
206 pch_d_we_n, pch_d_oe_n, pch_a_oe_n,
209 dbuf_int_oe_n, dbuf_ext_oe_n, dbuf_int_we_n, dbuf_ext_we_n,
210 dl_int_d_oe_n, dl_int_al_oe_n, dl_int_ah_oe_n,
211 sp_we_n, sp_int_d_oe_n, sp_int_a_oe_n,
212 x_we_n, x_oe_n, y_we_n, y_oe_n,
215 instruction_register : dff generic map (dsize)
216 port map(trigger_clk, inst_we_n, '0', d_io, instruction);
218 data_bus_buffer : dbus_buf generic map (dsize)
219 port map(set_clk, dbuf_int_we_n, dbuf_ext_we_n,
220 dbuf_int_oe_n, dbuf_ext_oe_n, internal_dbus, d_io);
222 input_data_latch : input_dl generic map (dsize)
223 port map('0', dl_int_d_oe_n, dl_int_al_oe_n, dl_int_ah_oe_n,
224 internal_dbus, internal_abus_l, internal_abus_h);
226 stack_pointer : sp generic map (dsize)
227 port map(trigger_clk, sp_we_n, sp_int_d_oe_n, sp_int_a_oe_n,
228 internal_dbus, internal_abus_l, internal_abus_h);
230 status_reg_component : processor_status generic map (dsize)
231 port map(trigger_clk, rst_n, '1', '1', '0', '1',
232 status_reg, internal_dbus);
234 x_reg : dff generic map (dsize)
235 port map(trigger_clk, x_we_n, x_oe_n, internal_dbus, internal_dbus);
237 y_reg : dff generic map (dsize)
238 port map(trigger_clk, y_we_n, y_oe_n, internal_dbus, internal_dbus);
242 phi2 <= not input_clk;
243 set_clk <= input_clk;
244 trigger_clk <= not input_clk;
245 pc_cry_n <= not pc_cry;
247 addr(asize - 1 downto dsize) <= internal_abus_h;
248 addr(dsize - 1 downto 0) <= internal_abus_l;
250 reset_p : process (rst_n)
252 if (rst_n'event and rst_n = '0') then