a_sel <= ADDR_INC;
abl <= addr_out;
- --TODO: must handle page crossing case...
ea_carry <= addr_c;
elsif (indir_x_n = '0') then
---save BAH.
ah_buf_we_n <= '0';
ah_reg_in <= int_d_bus;
- elsif (exec_cycle = T5) then
+ elsif (exec_cycle = T5 or exec_cycle = T0) then
ah_buf_we_n <= '1';
--output ah/al reg.
ea_carry <= addr_c;
elsif (exec_cycle = T4) then
+ ah_buf_we_n <= '1';
+
---add y reg.
a_sel <= ADDR_ADC;
al_reg_in <= addr_out;
tmp_buf_we_n <= '0';
tmp_reg_in <= ah_reg;
- elsif (exec_cycle = T5) then
+ elsif (exec_cycle = T5 or exec_cycle = T0) then
al_buf_we_n <= '1';
tmp_buf_we_n <= '1';
ea_carry <= '0';
- a_sel <= ADDR_INC;
- addr1 <= tmp_reg;
- ---next page.
- abh <= addr_out;
- abl <= al_reg;
+
+ if (pg_next_n = '0') then
+ a_sel <= ADDR_INC;
+ addr1 <= tmp_reg;
+ ---next page.
+ abh <= addr_out;
+ abl <= al_reg;
+ else
+ abh <= tmp_reg;
+ abl <= al_reg;
+ end if;
else
al_buf_we_n <= '1';
ah_buf_we_n <= '1';