1
0
mirror of https://github.com/wfjm/w11.git synced 2026-04-25 03:45:42 +00:00

pdp11_sequencer: BUGFIX: correct mmu trap vs interrupt priority

- rtl/w11a/pdp11_sequencer: BUGFIX: correct mmu trap vs interrupt priority
- tools/asm-11/lib/halt_checks.mac: add htstge
- tools/tcode
  - cpu_details.mac: add test A1.2
  - cpu_mmu.mac: add test E2.1
This commit is contained in:
wfjm
2022-11-29 08:41:18 +01:00
parent 85f1854c60
commit f6ff0fa701
5 changed files with 119 additions and 17 deletions

View File

@@ -1,4 +1,4 @@
-- $Id: pdp11_sequencer.vhd 1321 2022-11-24 15:06:47Z mueller $
-- $Id: pdp11_sequencer.vhd 1322 2022-11-28 19:31:57Z mueller $
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Copyright 2006-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
@@ -13,6 +13,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2022-11-28 1322 1.6.21 BUGFIX: correct mmu trap vs interrupt priority
-- 2022-11-24 1321 1.6.20 BUGFIX: correct mmu trap handing in s_idecode
-- 2022-11-21 1320 1.6.19 rename some rsv->ser and cpustat_type trap_->treq_;
-- remove vm_cntl_type.trap_done;
@@ -538,12 +539,12 @@ begin
pnmmumoni : inout mmu_moni_type) is
begin
pnmmumoni.idone := '1';
if unsigned(INT_PRI) > unsigned(PSW.pri) then
pnstate := s_idle;
elsif R_STATUS.treq_mmu='1' or pnstatus.treq_mmu='1' or
if R_STATUS.treq_mmu='1' or pnstatus.treq_mmu='1' or
R_STATUS.treq_ysv='1' or pnstatus.treq_ysv='1' or
PSW.tflag='1' then
pnstate := s_trap_disp;
elsif unsigned(INT_PRI) > unsigned(PSW.pri) then
pnstate := s_idle;
elsif R_STATUS.cpugo='1' and -- running
R_STATUS.cpususp='0' and -- and not suspended
not R_STATUS.cmdbusy='1' then -- and no cmd pending
@@ -562,12 +563,12 @@ begin
pndpcntl := pndpcntl; -- dummy to add driver (vivado)
pnvmcntl := pnvmcntl; -- "
pnmmumoni.idone := '1';
if unsigned(INT_PRI) > unsigned(PSW.pri) then
pnstate := s_idle;
elsif R_STATUS.treq_mmu='1' or pnstatus.treq_mmu='1' or
if R_STATUS.treq_mmu='1' or pnstatus.treq_mmu='1' or
R_STATUS.treq_ysv='1' or pnstatus.treq_ysv='1' or
PSW.tflag='1' then
pnstate := s_trap_disp;
elsif unsigned(INT_PRI) > unsigned(PSW.pri) then
pnstate := s_idle;
elsif R_STATUS.cpugo='1' and -- running
R_STATUS.cpususp='0' and -- and not suspended
not R_STATUS.cmdbusy='1' then -- and no cmd pending