mirror of
https://github.com/wfjm/w11.git
synced 2026-04-25 20:01:57 +00:00
BUGFIX: cc state unchanged after abort - mtp/mfp case
- rtl/w11a/ - pdp11_dpath.vhd: use c_dpath_dsrc_src,c_dpath_ddst_dst - pdp11_sequencer.vhd: BUGFIX: cc state unchanged after abort (mtp/mfp) - tools/tcode - cpu_basics.mac: add F4.1-6 - cpu_details.mac: add B3.2-3
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
-- $Id: sys_w11a_c7.vhd 1340 2023-01-01 08:43:05Z mueller $
|
||||
-- $Id: sys_w11a_c7.vhd 1342 2023-01-02 15:18:19Z mueller $
|
||||
-- SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-- Copyright 2017-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
-- Copyright 2017-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
--
|
||||
------------------------------------------------------------------------------
|
||||
-- Module Name: sys_w11a_c7 - syn
|
||||
@@ -28,6 +28,7 @@
|
||||
--
|
||||
-- Synthesized:
|
||||
-- Date Rev viv Target flop lutl lutm bram slic
|
||||
-- 2023-01-02 1342 2022.1 xc7a35t-1 3434 6005 279 50.0 1969
|
||||
-- 2022-12-31 1340 2022.1 xc7a35t-1 3450 6018 279 50.0 1986
|
||||
-- 2022-12-27 1339 2022.1 xc7a35t-1 3454 6026 279 50.0 2013
|
||||
-- 2022-12-06 1324 2022.1 xc7a35t-1 3447 5998 278 50.0 1992
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-- $Id: pdp11_dpath.vhd 1339 2022-12-27 12:11:34Z mueller $
|
||||
-- $Id: pdp11_dpath.vhd 1342 2023-01-02 15:18:19Z mueller $
|
||||
-- SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-- Copyright 2006-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
-- Copyright 2006-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
--
|
||||
------------------------------------------------------------------------------
|
||||
-- Module Name: pdp11_dpath - syn
|
||||
@@ -19,6 +19,7 @@
|
||||
--
|
||||
-- Revision History:
|
||||
-- Date Rev Version Comment
|
||||
-- 2023-01-01 1342 1.2.8 use c_dpath_dsrc_src,c_dpath_ddst_dst
|
||||
-- 2022-12-27 1339 1.2.7 remove PCOUT port
|
||||
-- 2022-10-25 1309 1.2.6 rename _gpr -> _gr
|
||||
-- 2015-07-19 702 1.2.5 set new DM_STAT_DP fields
|
||||
@@ -242,7 +243,7 @@ begin
|
||||
if rising_edge(CLK) then
|
||||
|
||||
if CNTL.dsrc_we = '1' then
|
||||
if CNTL.dsrc_sel = '0' then
|
||||
if CNTL.dsrc_sel = c_dpath_dsrc_src then
|
||||
R_DSRC <= GR_DSRC;
|
||||
else
|
||||
R_DSRC <= DRES;
|
||||
@@ -250,7 +251,7 @@ begin
|
||||
end if;
|
||||
|
||||
if CNTL.ddst_we = '1' then
|
||||
if CNTL.ddst_sel = '0' then
|
||||
if CNTL.ddst_sel = c_dpath_ddst_dst then
|
||||
R_DDST <= GR_DDST;
|
||||
else
|
||||
R_DDST <= DRES;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-- $Id: pdp11_sequencer.vhd 1340 2023-01-01 08:43:05Z mueller $
|
||||
-- $Id: pdp11_sequencer.vhd 1342 2023-01-02 15:18:19Z mueller $
|
||||
-- SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-- Copyright 2006-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
-- Copyright 2006-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
--
|
||||
------------------------------------------------------------------------------
|
||||
-- Module Name: pdp11_sequencer - syn
|
||||
@@ -13,7 +13,7 @@
|
||||
--
|
||||
-- Revision History:
|
||||
-- Date Rev Version Comment
|
||||
-- 2022-12-31 1340 1.6.27 BUGFIX: cc state unchanged after abort
|
||||
-- 2023-01-01 1342 1.6.27 BUGFIX: cc state unchanged after abort
|
||||
-- 2022-12-26 1337 1.6.26 tbit logic overhaul 2, now fully 11/70 compatible
|
||||
-- 2022-12-12 1330 1.6.25 implement MMR0,MMR2 instruction complete
|
||||
-- 2022-12-10 1329 1.6.24 BUGFIX: get correct PS after vector push abort
|
||||
@@ -2070,6 +2070,8 @@ begin
|
||||
|
||||
when s_opa_mtp_pop_w => -- -----------------------------------
|
||||
nstate := s_opa_mtp_pop_w;
|
||||
ndpcntl.ddst_sel := c_dpath_ddst_dst; -- DDST = R(DST)
|
||||
ndpcntl.ddst_we := '1'; -- update DDST (needed for sp)
|
||||
ndpcntl.dres_sel := c_dpath_res_vmdout; -- DRES = VMDOUT
|
||||
ndpcntl.dtmp_sel := c_dpath_dtmp_dres; -- DTMP = DRES
|
||||
do_memcheck(nstate, nstatus, imemok);
|
||||
@@ -2087,8 +2089,6 @@ begin
|
||||
end case;
|
||||
end if;
|
||||
end if;
|
||||
ndpcntl.ddst_sel := c_dpath_ddst_dst; -- DDST = R(DST)
|
||||
ndpcntl.ddst_we := '1'; -- update DDST (needed for sp)
|
||||
|
||||
when s_opa_mtp_reg => -- -----------------------------------
|
||||
ndpcntl.ounit_asel := c_ounit_asel_dtmp; -- OUNIT A = DTMP
|
||||
@@ -2104,7 +2104,6 @@ begin
|
||||
ndpcntl.ounit_asel := c_ounit_asel_dtmp; -- OUNIT A = DTMP
|
||||
ndpcntl.ounit_bsel := c_ounit_bsel_const; -- OUNIT B = const(0)
|
||||
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
|
||||
ndpcntl.psr_ccwe := '1'; -- set cc (from ounit too)
|
||||
ndpcntl.vmaddr_sel := c_dpath_vmaddr_ddst;-- VA = DDST
|
||||
nvmcntl.dspace := IREG(15); -- msb indicates I/D: 0->I, 1->D
|
||||
nvmcntl.mode := PSW.pmode;
|
||||
@@ -2114,8 +2113,11 @@ begin
|
||||
|
||||
when s_opa_mtp_mem_w => -- -----------------------------------
|
||||
nstate := s_opa_mtp_mem_w;
|
||||
ndpcntl.ounit_asel := c_ounit_asel_dtmp; -- OUNIT A = DTMP (for cc)
|
||||
ndpcntl.ounit_bsel := c_ounit_bsel_const; -- OUNIT B = const(0) (for cc)
|
||||
do_memcheck(nstate, nstatus, imemok);
|
||||
if imemok then
|
||||
ndpcntl.psr_ccwe := '1'; -- set cc (ounit via res_sel)
|
||||
idm_idone := '1'; -- instruction done
|
||||
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
|
||||
end if;
|
||||
@@ -2166,7 +2168,6 @@ begin
|
||||
ndpcntl.ounit_asel := c_ounit_asel_ddst; -- OUNIT A=DDST
|
||||
ndpcntl.ounit_bsel := c_ounit_bsel_const; -- OUNIT B=const(0)
|
||||
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
|
||||
ndpcntl.psr_ccwe := '1'; -- set cc (from ounit too)
|
||||
ndpcntl.vmaddr_sel := c_dpath_vmaddr_dsrc; -- VA = DSRC
|
||||
nvmcntl.dspace := '1';
|
||||
nvmcntl.kstack := is_kmode;
|
||||
@@ -2176,8 +2177,11 @@ begin
|
||||
|
||||
when s_opa_mfp_push_w => -- -----------------------------------
|
||||
nstate := s_opa_mfp_push_w;
|
||||
ndpcntl.ounit_asel := c_ounit_asel_ddst; -- OUNIT A=DDST (for cc)
|
||||
ndpcntl.ounit_bsel := c_ounit_bsel_const; -- OUNIT B=const(0) (for cc)
|
||||
do_memcheck(nstate, nstatus, imemok);
|
||||
if imemok then
|
||||
ndpcntl.psr_ccwe := '1'; -- set cc (ounit via res_sel)
|
||||
idm_idone := '1'; -- instruction done
|
||||
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
|
||||
end if;
|
||||
|
||||
Reference in New Issue
Block a user