Line 9... |
Line 9... |
intr_reg, page_reg, par_bit, sign_bit, tflg_reg, vector_int, xhlt_reg,
|
intr_reg, page_reg, par_bit, sign_bit, tflg_reg, vector_int, xhlt_reg,
|
zero_bit, add_sel, alua_sel, alub_sel, aluop_sel, clearb, clkc, cflg_en,
|
zero_bit, add_sel, alua_sel, alub_sel, aluop_sel, clearb, clkc, cflg_en,
|
data_in, di_ctl, dma_req, do_ctl, ex_af_pls, ex_bank_pls, ex_dehl_inst,
|
data_in, di_ctl, dma_req, do_ctl, ex_af_pls, ex_bank_pls, ex_dehl_inst,
|
hflg_ctl, ief_ctl, imd_ctl, int_req, ivec_rd, ld_ctrl, ld_inst, ld_page,
|
hflg_ctl, ief_ctl, imd_ctl, int_req, ivec_rd, ld_ctrl, ld_inst, ld_page,
|
nflg_ctl, nmi_req, page_sel, pc_sel, pflg_ctl, resetb, sflg_en, tflg_ctl,
|
nflg_ctl, nmi_req, page_sel, pc_sel, pflg_ctl, resetb, sflg_en, tflg_ctl,
|
wait_st, wr_addr, zflg_en);
|
wait_st, wr_addr, zflg_en, rreg_en);
|
|
|
input cflg_en; /* carry flag control */
|
input cflg_en; /* carry flag control */
|
input clearb; /* master (testing) reset */
|
input clearb; /* master (testing) reset */
|
input clkc; /* main cpu clock */
|
input clkc; /* main cpu clock */
|
input dma_req; /* dma request */
|
input dma_req; /* dma request */
|
Line 25... |
Line 25... |
input ld_ctrl; /* load control register */
|
input ld_ctrl; /* load control register */
|
input ld_inst; /* load instruction register */
|
input ld_inst; /* load instruction register */
|
input ld_page; /* load page register */
|
input ld_page; /* load page register */
|
input nmi_req; /* nmi request */
|
input nmi_req; /* nmi request */
|
input resetb; /* internal (user) reset */
|
input resetb; /* internal (user) reset */
|
|
input rreg_en; /* update R register */
|
input sflg_en; /* sign flag control */
|
input sflg_en; /* sign flag control */
|
input wait_st; /* wait state identifier */
|
input wait_st; /* wait state identifier */
|
input zflg_en; /* zero flag control */
|
input zflg_en; /* zero flag control */
|
input [3:0] page_sel; /* instruction decode "page" control */
|
input [3:0] page_sel; /* instruction decode "page" control */
|
input [7:0] data_in; /* read data bus */
|
input [7:0] data_in; /* read data bus */
|
Line 89... |
Line 90... |
wire hi_byte; /* replicate data byte */
|
wire hi_byte; /* replicate data byte */
|
wire ld_m_aa, ld_m_ff, ld_m_bb, ld_m_cc; /* register loads */
|
wire ld_m_aa, ld_m_ff, ld_m_bb, ld_m_cc; /* register loads */
|
wire ld_m_dd, ld_m_ee, ld_m_hh, ld_m_ll;
|
wire ld_m_dd, ld_m_ee, ld_m_hh, ld_m_ll;
|
wire ld_a_aa, ld_a_ff, ld_a_bb, ld_a_cc;
|
wire ld_a_aa, ld_a_ff, ld_a_bb, ld_a_cc;
|
wire ld_a_dd, ld_a_ee, ld_a_hh, ld_a_ll;
|
wire ld_a_dd, ld_a_ee, ld_a_hh, ld_a_ll;
|
wire ld_sp, ld_ix, ld_iy;
|
wire ld_sp;
|
|
wire ld_ixh, ld_ixl, ld_iyh, ld_iyl;
|
wire ld_ii, ld_rr, ld_tmp;
|
wire ld_ii, ld_rr, ld_tmp;
|
wire ld_dout_io, ld_dout_mem; /* load data out */
|
wire ld_dout_io, ld_dout_mem; /* load data out */
|
wire ld_flag; /* load flags */
|
wire ld_flag; /* load flags */
|
wire ld_regf; /* load register file */
|
wire ld_regf; /* load register file */
|
wire ld_tflg; /* load temp flag */
|
wire ld_tflg; /* load temp flag */
|
Line 303... |
Line 305... |
assign ld_a_dd = ld_regf && wr_addr[`WR_DD] && alt_bnk_reg;
|
assign ld_a_dd = ld_regf && wr_addr[`WR_DD] && alt_bnk_reg;
|
assign ld_a_ee = ld_regf && wr_addr[`WR_EE] && alt_bnk_reg;
|
assign ld_a_ee = ld_regf && wr_addr[`WR_EE] && alt_bnk_reg;
|
assign ld_a_hh = ld_regf && wr_addr[`WR_HH] && alt_bnk_reg;
|
assign ld_a_hh = ld_regf && wr_addr[`WR_HH] && alt_bnk_reg;
|
assign ld_a_ll = ld_regf && wr_addr[`WR_LL] && alt_bnk_reg;
|
assign ld_a_ll = ld_regf && wr_addr[`WR_LL] && alt_bnk_reg;
|
assign ld_sp = ld_regf && wr_addr[`WR_SP];
|
assign ld_sp = ld_regf && wr_addr[`WR_SP];
|
assign ld_ix = ld_regf && wr_addr[`WR_IX];
|
assign ld_ixh = ld_regf && wr_addr[`WR_IXH];
|
assign ld_iy = ld_regf && wr_addr[`WR_IY];
|
assign ld_ixl = ld_regf && wr_addr[`WR_IXL];
|
|
assign ld_iyh = ld_regf && wr_addr[`WR_IYH];
|
|
assign ld_iyl = ld_regf && wr_addr[`WR_IYL];
|
assign ld_ii = ld_regf && wr_addr[`WR_II];
|
assign ld_ii = ld_regf && wr_addr[`WR_II];
|
assign ld_rr = ld_regf && wr_addr[`WR_RR];
|
assign ld_rr = ld_regf && wr_addr[`WR_RR];
|
assign ld_tmp = ld_regf && wr_addr[`WR_TMP];
|
assign ld_tmp = ld_regf && wr_addr[`WR_TMP];
|
|
|
assign af_reg_out = (alt_af_reg) ? {a_aa_reg, a_ff_reg} : {m_aa_reg, m_ff_reg};
|
assign af_reg_out = (alt_af_reg) ? {a_aa_reg, a_ff_reg} : {m_aa_reg, m_ff_reg};
|
Line 323... |
Line 327... |
assign zero_bit = af_reg_out[6];
|
assign zero_bit = af_reg_out[6];
|
assign hi_byte = (wr_addr[`WR_AA] && !wr_addr[`WR_FF]) ||
|
assign hi_byte = (wr_addr[`WR_AA] && !wr_addr[`WR_FF]) ||
|
(wr_addr[`WR_BB] && !wr_addr[`WR_CC]) ||
|
(wr_addr[`WR_BB] && !wr_addr[`WR_CC]) ||
|
(wr_addr[`WR_DD] && !wr_addr[`WR_EE]) ||
|
(wr_addr[`WR_DD] && !wr_addr[`WR_EE]) ||
|
(wr_addr[`WR_HH] && !wr_addr[`WR_LL]) ||
|
(wr_addr[`WR_HH] && !wr_addr[`WR_LL]) ||
|
|
(wr_addr[`WR_IXH]&& !wr_addr[`WR_IXL]) ||
|
|
(wr_addr[`WR_IYH]&& !wr_addr[`WR_IYL]) ||
|
wr_addr[`WR_II] || wr_addr[`WR_RR];
|
wr_addr[`WR_II] || wr_addr[`WR_RR];
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* cpu registers */
|
/* cpu registers */
|
Line 368... |
Line 374... |
if (ld_a_cc) a_cc_reg <= data_bus[7:0];
|
if (ld_a_cc) a_cc_reg <= data_bus[7:0];
|
if (ld_a_dd) a_dd_reg <= de_reg_in[15:8];
|
if (ld_a_dd) a_dd_reg <= de_reg_in[15:8];
|
if (ld_a_ee) a_ee_reg <= de_reg_in[7:0];
|
if (ld_a_ee) a_ee_reg <= de_reg_in[7:0];
|
if (ld_a_hh) a_hh_reg <= data_bus[15:8];
|
if (ld_a_hh) a_hh_reg <= data_bus[15:8];
|
if (ld_a_ll) a_ll_reg <= data_bus[7:0];
|
if (ld_a_ll) a_ll_reg <= data_bus[7:0];
|
if (ld_ix) ix_reg <= data_bus;
|
if (ld_ixh) ix_reg[15:8] <= data_bus[15:8];
|
if (ld_iy) iy_reg <= data_bus;
|
if (ld_ixl) ix_reg[7:0] <= data_bus[7:0];
|
|
if (ld_iyh) iy_reg[15:8] <= data_bus[15:8];
|
|
if (ld_iyl) iy_reg[7:0] <= data_bus[7:0];
|
end
|
end
|
end
|
end
|
|
|
always @ (posedge clkc or negedge resetb) begin
|
always @ (posedge clkc or negedge resetb) begin
|
if (!resetb) begin
|
if (!resetb) begin
|
Line 384... |
Line 392... |
tmp_reg <= 16'h0000;
|
tmp_reg <= 16'h0000;
|
end
|
end
|
else begin
|
else begin
|
if (ld_ii) ii_reg <= data_bus[15:8];
|
if (ld_ii) ii_reg <= data_bus[15:8];
|
if (ld_pc) pc_reg <= data_bus;
|
if (ld_pc) pc_reg <= data_bus;
|
if (ld_rr) rr_reg <= data_bus[15:8];
|
if (ld_rr)
|
|
rr_reg <= data_bus[15:8];
|
|
`ifdef RREG_EMU
|
|
else
|
|
rr_reg[6:0] <= rr_reg[6:0] + {6'h0, rreg_en && !dmar_reg && !wait_st};
|
|
`endif
|
if (ld_sp) sp_reg <= data_bus;
|
if (ld_sp) sp_reg <= data_bus;
|
if (ld_tmp) tmp_reg <= (ivec_rd) ? {ii_reg, data_in} : data_bus;
|
if (ld_tmp) tmp_reg <= (ivec_rd) ? {ii_reg, data_in} : data_bus;
|
end
|
end
|
end
|
end
|
|
|