diff --git a/rtl/ibus/ibdr_pc11.vhd b/rtl/ibus/ibdr_pc11.vhd index 14df3c39..5965f81b 100644 --- a/rtl/ibus/ibdr_pc11.vhd +++ b/rtl/ibus/ibdr_pc11.vhd @@ -1,4 +1,4 @@ --- $Id: ibdr_pc11.vhd 1137 2019-04-24 10:49:19Z mueller $ +-- $Id: ibdr_pc11.vhd 1140 2019-04-28 10:21:21Z mueller $ -- -- Copyright 2009-2019 by Walter F.J. Mueller -- @@ -27,6 +27,7 @@ -- -- Revision History: -- Date Rev Version Comment +-- 2019-04-27 1140 1.4.2 set rbuf.[rp]size0 -- 2019-04-24 1137 1.4.1 add rcsr.ir,ique,iack and pcsr.ir fields (rem) -- 2019-04-06 1126 1.4 for pc11_buf compat: pbuf.pval in bit 15 and 8; -- move rbusy reporting from pbuf to rbuf register @@ -84,6 +85,9 @@ architecture syn of ibdr_pc11 is constant rcsr_ibf_renb : integer := 0; constant rbuf_ibf_rbusy : integer := 15; + constant rbuf_ibf_rsize0: integer := 8; + constant rbuf_ibf_psize0: integer := 0; + subtype rbuf_ibf_data is integer range 7 downto 0; constant pcsr_ibf_perr : integer := 15; constant pcsr_ibf_prdy : integer := 7; @@ -234,9 +238,8 @@ begin when ibaddr_rbuf => -- RBUF -- reader data buffer -------- - idout(r.rbuf'range) := r.rbuf; - if IB_MREQ.racc = '0' then -- cpu --------------------- + idout(rbuf_ibf_data) := r.rbuf; if ibreq = '1' then -- !! PC11 is unusual !! n.rdone := '0'; -- *any* read or write will clear done n.rbuf := (others=>'0'); -- and the reader buffer @@ -244,9 +247,11 @@ begin end if; else -- rri --------------------- - idout(rbuf_ibf_rbusy) := r.rbusy; + idout(rbuf_ibf_rbusy) := r.rbusy; + idout(rbuf_ibf_rsize0) := r.rdone; -- rbuf occupied when rdone=1 + idout(rbuf_ibf_psize0) := not r.prdy; -- pbuf empty when prdy=1 if ibw0 = '1' then - n.rbuf := IB_MREQ.din(n.rbuf'range); + n.rbuf := IB_MREQ.din(rbuf_ibf_data); n.rbusy := '0'; n.rdone := '1'; if r.rie = '1' then -- if interrupts on diff --git a/rtl/ibus/ibdr_pc11_buf.vhd b/rtl/ibus/ibdr_pc11_buf.vhd index 14393a7b..62eefa39 100644 --- a/rtl/ibus/ibdr_pc11_buf.vhd +++ b/rtl/ibus/ibdr_pc11_buf.vhd @@ -1,4 +1,4 @@ --- $Id: ibdr_pc11_buf.vhd 1137 2019-04-24 10:49:19Z mueller $ +-- $Id: ibdr_pc11_buf.vhd 1139 2019-04-27 14:00:38Z mueller $ -- -- Copyright 2019- by Walter F.J. Mueller -- @@ -169,7 +169,7 @@ begin EMPTY => RBUF_EMPTY, FULL => RBUF_FULL, SIZE => RBUF_SIZE - ); + ); PBUF : fifo_simple_dram generic map ( @@ -185,7 +185,7 @@ begin EMPTY => PBUF_EMPTY, FULL => PBUF_FULL, SIZE => PBUF_SIZE - ); + ); RRLIM : ib_rlim_slv port map ( @@ -197,7 +197,7 @@ begin STOP => BRESET, DONE => open, BUSY => RRLIM_BUSY - ); + ); PRLIM : ib_rlim_slv port map ( @@ -217,10 +217,10 @@ begin if BRESET = '1' then -- BRESET is 1 for system and ibus reset R_REGS <= regs_init; -- if RESET = '0' then -- if RESET=0 we do just an ibus reset - R_REGS.rerr <= N_REGS.rerr; -- keep RERR flag - R_REGS.rrlim <= N_REGS.rrlim; -- keep RRLIM flag - R_REGS.perr <= N_REGS.perr; -- keep PERR flag - R_REGS.prlim <= N_REGS.prlim; -- keep PRLIM flag + R_REGS.rerr <= N_REGS.rerr; -- keep RERR flag + R_REGS.rrlim <= N_REGS.rrlim; -- keep RRLIM field + R_REGS.perr <= N_REGS.perr; -- keep PERR flag + R_REGS.prlim <= N_REGS.prlim; -- keep PRLIM field end if; else R_REGS <= N_REGS; @@ -228,7 +228,7 @@ begin end if; end process proc_regs; - proc_next : process (R_REGS, IB_MREQ, EI_ACK_PTR, EI_ACK_PTP, RESET, BRESET, + proc_next : process (R_REGS, IB_MREQ, EI_ACK_PTR, EI_ACK_PTP, RESET, RBUF_DO, RBUF_EMPTY, RBUF_FULL, RBUF_SIZE, RRLIM_BUSY, PBUF_DO, PBUF_EMPTY, PBUF_FULL, PBUF_SIZE, PRLIM_BUSY) variable r : regs_type := regs_init; @@ -448,7 +448,7 @@ begin when others => null; end case; - end if; + end if; -- other state changes if EI_ACK_PTR = '1' then @@ -477,8 +477,8 @@ begin n.prdy := '0'; -- clear ready n.pintreq := '0'; -- clear interrupt else -- not busy and fifo not full - n.prdy := '1'; -- set done - if r.prdy='0' and -- done going 0->1 + n.prdy := '1'; -- set ready + if r.prdy='0' and -- ready going 0->1 r.perr='0' and r.pie='1' then -- and err=0 and interrupt enabled n.pintreq := '1'; -- request interrupt end if; diff --git a/tools/asm-11/lib/vec_devcatch.mac b/tools/asm-11/lib/vec_devcatch.mac index de918485..21cdf747 100644 --- a/tools/asm-11/lib/vec_devcatch.mac +++ b/tools/asm-11/lib/vec_devcatch.mac @@ -1,4 +1,4 @@ -; $Id: vec_devcatch.mac 1122 2019-03-17 08:15:42Z mueller $ +; $Id: vec_devcatch.mac 1139 2019-04-27 14:00:38Z mueller $ ; Copyright 2015- by Walter F.J. Mueller ; License disclaimer see License.txt in $RETROBASE directory ; @@ -26,9 +26,9 @@ ; 314? 5 8 8 ^ DZ11-TX ; . = 000060 -v..dlr: .word v..dlr+2 ; vec 60 (DL11-RX 1st) +v..tti: .word v..tti+2 ; vec 60 (DL11-RX 1st) .word 0 -v..dlt: .word v..dlt+2 ; vec 64 (DL11-TX 1st) +v..tto: .word v..tto+2 ; vec 64 (DL11-TX 1st) .word 0 ; v..ptr: .word v..ptr+2 ; vec 70 (PC11/PTR) diff --git a/tools/asm-11/lib/vec_devcatch_reset.mac b/tools/asm-11/lib/vec_devcatch_reset.mac index c09c9000..a97aaa98 100644 --- a/tools/asm-11/lib/vec_devcatch_reset.mac +++ b/tools/asm-11/lib/vec_devcatch_reset.mac @@ -1,13 +1,13 @@ -; $Id: vec_devcatch_reset.mac 1124 2019-03-24 21:20:33Z mueller $ +; $Id: vec_devcatch_reset.mac 1139 2019-04-27 14:00:38Z mueller $ ; Copyright 2015-2019 by Walter F.J. Mueller ; License disclaimer see License.txt in $RETROBASE directory ; ; re-write vector catcher for device interrupts (subset used by w11) ; - mov #v..dlr+2,v..dlr ; vec 60 (DL11-RX 1st) - clr v..dlr+2 - mov #v..dlt+2,v..dlt ; vec 64 (DL11-TX 1st) - clr v..dlt+2 + mov #v..tti+2,v..tti ; vec 60 (DL11-RX 1st) + clr v..tti+2 + mov #v..tto+2,v..tto ; vec 64 (DL11-TX 1st) + clr v..tto+2 ; mov #v..ptr+2,v..ptr ; vec 70 (PC11/PTR) clr v..ptr+2 @@ -42,6 +42,7 @@ clr v..d2r+2 mov #v..d2t+2,v..d2t ; vec 304 (DL11-TX 2nd) clr v..d2t+2 +; mov #v..dzr+2,v..dzr ; vec 310 (DZ11-RX) clr v..dzr+2 mov #v..dzt+2,v..dzt ; vec 314 (DZ11-TX) diff --git a/tools/mcode/dl11/dl11echo.mac b/tools/mcode/dl11/dl11echo.mac index 7cce21a2..54d29097 100644 --- a/tools/mcode/dl11/dl11echo.mac +++ b/tools/mcode/dl11/dl11echo.mac @@ -1,4 +1,4 @@ -; $Id: dl11echo.mac 1135 2019-04-23 12:56:23Z mueller $ +; $Id: dl11echo.mac 1139 2019-04-27 14:00:38Z mueller $ ; Copyright 2019- by Walter F.J. Mueller ; License disclaimer see License.txt in $RETROBASE directory ; @@ -32,12 +32,12 @@ .include |lib/vec_cpucatch.mac| .include |lib/vec_devcatch.mac| - . = v..dlr ; DL11 rx vector - .word vh.dlr + . = v..tti ; DL11 rx vector + .word vh.tti .word cp.ars!cp.pr7 ; use alt-reg-set ! - . = v..dlt ; DL11 tx vector - .word vh.dlt + . = v..tto ; DL11 tx vector + .word vh.tto .word cp.ars!cp.pr7 ; use alt-reg-set ! . = v..kwl ; KW11-L vector @@ -80,7 +80,7 @@ nultsk: mov #pat,r0 ; ; receive interrupt handler ---------------------- ; -vh.dlr: mov @#ti.buf,r0 ; read char +vh.tti: mov @#ti.buf,r0 ; read char movb r0,curchr ; and remember jsr pc,@curhdl ; call handler jsr pc,chkesc ; check for ESC @@ -91,7 +91,7 @@ vh.dlr: mov @#ti.buf,r0 ; read char ; ; transmit interrupt handler --------------------- ; -vh.dlt: mov rptr,r1 ; load pointer +vh.tto: mov rptr,r1 ; load pointer movb (r1)+,@#to.buf ; send char cmp r1,#bufe ; ring wrap ? blo 1$ diff --git a/tools/mcode/sys/blink.mac b/tools/mcode/sys/blink.mac index 854b3699..02bc3141 100644 --- a/tools/mcode/sys/blink.mac +++ b/tools/mcode/sys/blink.mac @@ -1,4 +1,4 @@ -; $Id: blink.mac 1138 2019-04-26 08:14:56Z mueller $ +; $Id: blink.mac 1139 2019-04-27 14:00:38Z mueller $ ; Copyright 2019- by Walter F.J. Mueller ; License disclaimer see License.txt in $RETROBASE directory ; @@ -36,8 +36,8 @@ .include |lib/vec_cpucatch.mac| .include |lib/vec_devcatch.mac| - . = v..dlr ; DL11 rx vector - .word vh.dlr + . = v..tti ; DL11 rx vector + .word vh.tti .word cp.ars!cp.pr7 ; use alt-reg-set ! . = v..kwl ; KW11-L vector @@ -99,7 +99,7 @@ nultsk: mov curspd,r5 ; load speed ; ; receive interrupt handler ---------------------- ; -vh.dlr: mov @#ti.buf,r0 ; read char +vh.tti: mov @#ti.buf,r0 ; read char mov r0,r1 sub #'0,r1 ; in 0..9 range ? blt 100$ diff --git a/tools/src/librw11/Rw11CntlLP11.cpp b/tools/src/librw11/Rw11CntlLP11.cpp index 19167e78..b765699d 100644 --- a/tools/src/librw11/Rw11CntlLP11.cpp +++ b/tools/src/librw11/Rw11CntlLP11.cpp @@ -1,4 +1,4 @@ -// $Id: Rw11CntlLP11.cpp 1133 2019-04-19 18:43:00Z mueller $ +// $Id: Rw11CntlLP11.cpp 1140 2019-04-28 10:21:21Z mueller $ // // Copyright 2013-2019 by Walter F.J. Mueller // @@ -13,6 +13,7 @@ // // Revision History: // Date Rev Version Comment +// 2019-04-27 1140 1.3.4 use RtraceTools:: // 2019-04-19 1133 1.3.3 use ExecWibr() // 2019-04-14 1131 1.3.2 remove SetOnline(), use UnitSetup() // 2019-04-07 1127 1.3.1 add fQueBusy, queue protection; fix logic; @@ -43,6 +44,7 @@ #include "librtools/Rexception.hpp" #include "librtools/RlogMsg.hpp" +#include "RtraceTools.hpp" #include "Rw11CntlLP11.hpp" using namespace std; @@ -68,6 +70,8 @@ const uint16_t Rw11CntlLP11::kBUF; const uint16_t Rw11CntlLP11::kProbeOff; const bool Rw11CntlLP11::kProbeInt; const bool Rw11CntlLP11::kProbeRem; + +const uint16_t Rw11CntlLP11::kFifoMaxSize; const uint16_t Rw11CntlLP11::kCSR_M_ERROR; const uint16_t Rw11CntlLP11::kCSR_V_RLIM; @@ -234,12 +238,8 @@ void Rw11CntlLP11::ProcessUnbuf(uint16_t buf) << " buf=" << RosPrintBvi(buf,8) << " val=" << val; if (val) { - lmsg << " char="; - if (ochr>=040 && ochr<0177) { - lmsg << "'" << char(ochr) << "'"; - } else { - lmsg << RosPrintBvi(ochr,8); - } + lmsg << " char=" << RosPrintBvi(ochr,8) << " "; + RtraceTools::TraceChar(lmsg, ochr); } } @@ -297,7 +297,7 @@ void Rw11CntlLP11::ProcessBuf(const RlinkCommand& cmd, bool prim) fbeg = (pbuf[0] >>kBUF_V_SIZE) & kBUF_B_SIZE; fend = (pbuf[done-1]>>kBUF_V_SIZE) & kBUF_B_SIZE; fdel = fbeg-fend+1; - smin = 128; + smin = kFifoMaxSize; } for (size_t i=0; i < done; i++) { @@ -339,28 +339,11 @@ void Rw11CntlLP11::ProcessBuf(const RlinkCommand& cmd, bool prim) << "," << RosPrintf(smin,"d",3) << " que=" << fQueBusy; - if (fTraceLevel > 1 && done > 0) { - size_t nchar = 0; - for (size_t i=0; i < done; i++) { - uint8_t ochr = pbuf[i] & kBUF_M_BUF; - if (ochr>=040 && ochr<0177) { - if (nchar == 0) lmsg << "\n '"; - lmsg << char(ochr); - nchar += 1; - if (nchar >= 64) { - lmsg << "'"; - nchar = 0; - } - } else { - if (nchar > 0) lmsg << "'"; - lmsg << "\n " << RosPrintBvi(ochr,8); - nchar = 0; - } - } - if (nchar > 0) lmsg << "'"; - } + if (fTraceLevel > 1) RtraceTools::TraceBuffer(lmsg, pbuf, + done, fTraceLevel); } + // re-sizing the prim rblk invalidates pbuf -> so must be done last if (prim) { // if primary list fPrimClist[fPC_buf].SetBlockRead(fRblkSize); // setup size for next attn diff --git a/tools/src/librw11/Rw11CntlLP11.hpp b/tools/src/librw11/Rw11CntlLP11.hpp index f6605a1b..8deee808 100644 --- a/tools/src/librw11/Rw11CntlLP11.hpp +++ b/tools/src/librw11/Rw11CntlLP11.hpp @@ -1,4 +1,4 @@ -// $Id: Rw11CntlLP11.hpp 1132 2019-04-14 20:23:40Z mueller $ +// $Id: Rw11CntlLP11.hpp 1140 2019-04-28 10:21:21Z mueller $ // // Copyright 2013-2019 by Walter F.J. Mueller // @@ -66,7 +66,9 @@ namespace Retro { static const uint16_t kProbeOff = kCSR; //!< probe address offset (rcsr) static const bool kProbeInt = true; //!< probe int active static const bool kProbeRem = true; //!< probr rem active - + + static const uint16_t kFifoMaxSize = 127; //!< maximal fifo size + static const uint16_t kCSR_M_ERROR = kWBit15; //!< csr.err mask static const uint16_t kCSR_V_RLIM = 12; //!< csr.rlim shift static const uint16_t kCSR_B_RLIM = 007; //!< csr.rlim bit mask diff --git a/tools/src/librw11/Rw11CntlPC11.cpp b/tools/src/librw11/Rw11CntlPC11.cpp index 751ff9ec..cd496166 100644 --- a/tools/src/librw11/Rw11CntlPC11.cpp +++ b/tools/src/librw11/Rw11CntlPC11.cpp @@ -1,4 +1,4 @@ -// $Id: Rw11CntlPC11.cpp 1134 2019-04-21 17:18:03Z mueller $ +// $Id: Rw11CntlPC11.cpp 1140 2019-04-28 10:21:21Z mueller $ // // Copyright 2013-2019 by Walter F.J. Mueller // @@ -13,6 +13,7 @@ // // Revision History: // Date Rev Version Comment +// 2019-04-27 1140 1.5.1 use RtraceTools:: // 2019-04-20 1134 1.5 add pc11_buf readout // 2019-04-13 1131 1.4.1 BootCode(): boot loader rewritten // remove SetOnline(), use UnitSetup() @@ -35,6 +36,7 @@ */ #include +#include #include #include "librtools/RosFill.hpp" @@ -43,6 +45,7 @@ #include "librtools/Rexception.hpp" #include "librtools/RlogMsg.hpp" +#include "RtraceTools.hpp" #include "Rw11CntlPC11.hpp" using namespace std; @@ -73,6 +76,8 @@ const uint16_t Rw11CntlPC11::kUnit_PP; const uint16_t Rw11CntlPC11::kProbeOff; const bool Rw11CntlPC11::kProbeInt; const bool Rw11CntlPC11::kProbeRem; + +const uint16_t Rw11CntlPC11::kFifoMaxSize; const uint16_t Rw11CntlPC11::kRCSR_M_ERROR; const uint16_t Rw11CntlPC11::kRCSR_V_RLIM; @@ -310,7 +315,7 @@ void Rw11CntlPC11::SetPrRlim(uint16_t rlim) void Rw11CntlPC11::SetPpRlim(uint16_t rlim) { - if (rlim > kRCSR_B_RLIM) + if (rlim > kPCSR_B_RLIM) throw Rexception("Rw11CntlPC11::SetPpRlim","Bad args: rlim too large"); fPpRlim = rlim; @@ -396,8 +401,8 @@ void Rw11CntlPC11::ProcessUnbuf(uint16_t rbuf, uint16_t pbuf) << " pbuf=" << RosPrintBvi(pbuf,8) << " pval=" << pval << " rbusy=" << rbusy - << " char=" << RosPrintBvi(ochr,8); - if (ochr>=040 && ochr<0177) lmsg << " '" << char(ochr) << "'"; + << " char=" << RosPrintBvi(ochr,8) << " "; + RtraceTools::TraceChar(lmsg, ochr); } } @@ -422,8 +427,8 @@ void Rw11CntlPC11::ProcessUnbuf(uint16_t rbuf, uint16_t pbuf) RlogMsg lmsg(LogFile()); lmsg << "-I " << Name() << ": pr" << " rbusy=" << rbusy - << " char=" << RosPrintBvi(ichr,8); - if (ichr>=040 && ichr<0177) lmsg << " '" << char(ichr) << "'"; + << " char=" << RosPrintBvi(ichr,8) << " "; + RtraceTools::TraceChar(lmsg, ochr); } Cpu().ExecWibr(fBase+kRBUF, ichr); @@ -501,15 +506,8 @@ void Rw11CntlPC11::PrProcessBuf(uint16_t rbuf) << " rsize=" << RosPrintf(rsize,"d",3) << " drain=" << fPrDrain << " size=" << RosPrintf(iblock.size(),"d",3); - if (fTraceLevel > 1) { - size_t nchar = 0; - for (auto& o: iblock) { - if (nchar == 0) lmsg << "\n '"; - lmsg << ' ' << RosPrintBvi(uint8_t(o),8); - nchar += 1; - if (nchar >= 16) nchar = 0; - } - } + if (fTraceLevel > 1) RtraceTools::TraceBuffer(lmsg, iblock.data(), + iblock.size(), fTraceLevel); } fStats.Inc(kStatNPrBlk); @@ -551,7 +549,7 @@ void Rw11CntlPC11::PpProcessBuf(const RlinkCommand& cmd, bool prim, fbeg = (pbuf[0] >>kPBUF_V_SIZE) & kPBUF_B_SIZE; fend = (pbuf[done-1]>>kPBUF_V_SIZE) & kPBUF_B_SIZE; fdel = fbeg-fend+1; - smin = 128; + smin = kFifoMaxSize; } for (size_t i=0; i < done; i++) { @@ -591,16 +589,8 @@ void Rw11CntlPC11::PpProcessBuf(const RlinkCommand& cmd, bool prim, lmsg << " rsize=" << RosPrintf(rsize,"d",3); } - if (fTraceLevel > 1 && done > 0) { - size_t nchar = 0; - for (size_t i=0; i < done; i++) { - if (nchar == 0) lmsg << "\n '"; - uint8_t ochr = pbuf[i] & kPBUF_M_BUF; - lmsg << ' ' << RosPrintBvi(ochr,8); - nchar += 1; - if (nchar >= 16) nchar = 0; - } - } + if (fTraceLevel > 1) RtraceTools::TraceBuffer(lmsg, pbuf, + done, fTraceLevel); } // re-sizing the prim rblk invalidates pbuf -> so must be done last diff --git a/tools/src/librw11/Rw11CntlPC11.hpp b/tools/src/librw11/Rw11CntlPC11.hpp index 70bd97c8..9e791979 100644 --- a/tools/src/librw11/Rw11CntlPC11.hpp +++ b/tools/src/librw11/Rw11CntlPC11.hpp @@ -1,4 +1,4 @@ -// $Id: Rw11CntlPC11.hpp 1134 2019-04-21 17:18:03Z mueller $ +// $Id: Rw11CntlPC11.hpp 1140 2019-04-28 10:21:21Z mueller $ // // Copyright 2013-2019 by Walter F.J. Mueller // @@ -81,12 +81,14 @@ namespace Retro { static const bool kProbeInt = true; //!< probe int active static const bool kProbeRem = true; //!< probr rem active + static const uint16_t kFifoMaxSize = 127; //!< maximal fifo size + static const uint16_t kRCSR_M_ERROR = kWBit15; //!< rcsr.err mask static const uint16_t kRCSR_V_RLIM = 12; //!< rcsr.rlim shift static const uint16_t kRCSR_B_RLIM = 007; //!< rcsr.rlim bit mask static const uint16_t kRCSR_V_TYPE = 8; //!< rcsr.type shift static const uint16_t kRCSR_B_TYPE = 0007; //!< rcsr.type bit mask - static const uint16_t kRCSR_M_FCLR = kWBit05; //!< rcsr.fclr mask + static const uint16_t kRCSR_M_FCLR = kWBit01; //!< rcsr.fclr mask static const uint16_t kRBUF_M_RBUSY = kWBit15; //!< rbuf.rbusy mask static const uint16_t kRBUF_V_SIZE = 8; //!< rbuf.size shift static const uint16_t kRBUF_B_SIZE = 0177; //!< rbuf.size bit mask @@ -105,14 +107,14 @@ namespace Retro { kStatNPrBlk= Rw11Cntl::kDimStat, //!< done wblk kStatNPpQue, //!< queue rblk kDimStat - }; + }; // PrDrain state definitions enum prdrain { kPrDrain_Idle = 0, //!< draining not active kPrDrain_Pend, //!< draining pending kPrDrain_Done //!< draining done - }; + }; protected: int AttnHandler(RlinkServer::AttnArgs& args); diff --git a/tools/tbench/pc11/test_pc11_loop.tcl b/tools/tbench/pc11/test_pc11_loop.tcl index 6779ed1e..1fc71c98 100644 --- a/tools/tbench/pc11/test_pc11_loop.tcl +++ b/tools/tbench/pc11/test_pc11_loop.tcl @@ -1,4 +1,4 @@ -# $Id: test_pc11_loop.tcl 1134 2019-04-21 17:18:03Z mueller $ +# $Id: test_pc11_loop.tcl 1139 2019-04-27 14:00:38Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory @@ -8,7 +8,7 @@ # 2019-04-20 1134 1.0 Initial version # 2019-04-07 1129 0.1 First draft # -# Test paper reader + puncher response +# Test PC11 reader + puncher response # ---------------------------------------------------------------------------- rlc log "test_pc11_loop: test pc11 reader+puncher response -------------------" diff --git a/tools/tbench/pc11/test_pc11_pp.tcl b/tools/tbench/pc11/test_pc11_pp.tcl index ce6eeb09..a23d3371 100644 --- a/tools/tbench/pc11/test_pc11_pp.tcl +++ b/tools/tbench/pc11/test_pc11_pp.tcl @@ -1,4 +1,4 @@ -# $Id: test_pc11_pp.tcl 1137 2019-04-24 10:49:19Z mueller $ +# $Id: test_pc11_pp.tcl 1140 2019-04-28 10:21:21Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory @@ -8,8 +8,7 @@ # 2019-04-21 1134 1.0 Initial version # 2019-04-07 1129 0.1 First draft # -# Test paper puncher response -# A: register basics +# Test PC11 puncher response # ---------------------------------------------------------------------------- rlc log "test_pc11_pp: test pc11 paper puncher resonse -----------------------" @@ -25,6 +24,10 @@ rlc set statvalue 0 set attnpc [expr {1<<$ibd_pc11::ANUM}] set attncpu [expr {1<<$rw11::ANUM}] +# remember 'type' retrieved from rcsr for later tests +$cpu cp -ribr pca.rcsr pcrcsr +set type [regget ibd_pc11::RRCSR(type) $pcrcsr] + # -- Section A --------------------------------------------------------------- rlc log " A1: test csr response -------------------------------------" rlc log " A1.1: csr err, rdy ---------------------------------" @@ -51,10 +54,6 @@ $cpu cp \ -breset \ -rma pca.pcsr -edata [regbld ibd_pc11::PCSR rdy] -# remember 'type' retrieved from rcsr for later tests -$cpu cp -ribr pca.rcsr pcrcsr -set type [regget ibd_pc11::RRCSR(type) $pcrcsr] - rlc log " A1.2: csr ie, ir -----------------------------------" # loc IE=1 --> seen on loc and rem; rem sees IR=1 # rem IE=0 --> stays, IE not rem writable @@ -93,15 +92,19 @@ if {$type > 0} { # if buffered test rlim if {$type == 0} { # unbuffered -------------------------- rlc log " A2: test data response (unbuffered) -----------------------" rlc log " A2.1: loc write, rem read ------------------------" - # loc wr buf --> test RDY=0 + # --> test PSIZE=0 + # loc wr buf --> test RDY=0 PSIZE=1 # loc rd buf --> test RDY=0 (loc read is noop); test attn send - # rem wr buf --> test RDY=1 + # rem wr buf --> test RDY=1 PSIZE=0 $cpu cp \ + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF {psize 0}] \ -wma pca.pbuf 0107 \ + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF {psize 1}] \ -rma pca.pcsr -edata [regbld ibd_pc11::PCSR] \ -rma pca.pbuf \ -rma pca.pcsr -edata [regbld ibd_pc11::PCSR] \ -ribr pca.pbuf -edata [regbld ibd_pc11::RPBUF val {size 1} {data 0107} ] \ + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF {psize 0}] \ -rma pca.pcsr -edata [regbld ibd_pc11::PCSR rdy] # expect and harvest attn (drop other attn potentially triggered by breset) rlc wtlam 1. diff --git a/tools/tbench/pc11/test_pc11_pr.tcl b/tools/tbench/pc11/test_pc11_pr.tcl index 1a3fd69e..9dfc6121 100644 --- a/tools/tbench/pc11/test_pc11_pr.tcl +++ b/tools/tbench/pc11/test_pc11_pr.tcl @@ -1,4 +1,4 @@ -# $Id: test_pc11_pr.tcl 1137 2019-04-24 10:49:19Z mueller $ +# $Id: test_pc11_pr.tcl 1140 2019-04-28 10:21:21Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory @@ -8,7 +8,7 @@ # 2019-04-21 1134 1.0 Initial version # 2019-04-12 1131 0.1 First draft # -# Test paper reader response +# Test PC11 reader response # ---------------------------------------------------------------------------- rlc log "test_pc11_pr: test pc11 paper reader resonse ------------------------" @@ -24,6 +24,10 @@ rlc set statvalue 0 set attnpc [expr {1<<$ibd_pc11::ANUM}] set attncpu [expr {1<<$rw11::ANUM}] +# remember 'type' retrieved from rcsr for later tests +$cpu cp -ribr pca.rcsr pcrcsr +set type [regget ibd_pc11::RRCSR(type) $pcrcsr] + # -- Section A --------------------------------------------------------------- rlc log " A1: test csr response -------------------------------------" rlc log " A1.1: csr err --------------------------------------" @@ -50,10 +54,6 @@ $cpu cp \ -breset \ -rma pca.rcsr -edata [regbld ibd_pc11::RCSR ] -# remember 'type' retrieved from rcsr for later tests -$cpu cp -ribr pca.rcsr pcrcsr -set type [regget ibd_pc11::RRCSR(type) $pcrcsr] - rlc log " A1.2: csr ie ---------------------------------------" # loc IE=1 --> seen on loc and rem # rem IE=0 --> stays, IE not rem writable @@ -94,23 +94,24 @@ if {$type == 0} { # unbuffered -------------------------- rlc log " A2.1: rem write, loc read ------------------------" # loc wr csr.ena --> test BUSY=1; test rem rbuf.busy; test attn send $cpu cp \ - -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF] \ + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF {rsize 0}] \ -wma pca.rcsr [regbld ibd_pc11::RCSR ena] \ -rma pca.rcsr -edata [regbld ibd_pc11::RCSR busy] \ - -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF rbusy] + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF rbusy {rsize 0}] # expect and harvest attn (drop other attn potentially triggered by breset) rlc wtlam 1. rlc exec -attn -edata $attnpc $attnpc - # rem wr buf --> test DONE=1 (1 cmd delay) - # loc rd buf --> test DONE=0; test rem rbuf.busy=0 + # rem wr buf --> test DONE=1 RSIZE=1 (1 cmd delay) + # loc rd buf --> test DONE=0 RRIZE=0 test rem rbuf.busy=0 # loc rd buf --> test that buf cleared $cpu cp \ -wibr pca.rbuf 0107 \ + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF {rsize 1}] \ -rma pca.rcsr \ -rma pca.rcsr -edata [regbld ibd_pc11::RCSR done] \ -rma pca.rbuf -edata 0107 \ -rma pca.rcsr -edata [regbld ibd_pc11::RCSR ] \ - -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF ] \ + -ribr pca.rbuf -edata [regbld ibd_pc11::RRBUF {rsize 0}] \ -rma pca.rbuf -edata 0x0 rlc log " A2.2: rem write, loc write (discards data) -------" @@ -195,7 +196,7 @@ if {$type == 0} { # unbuffered -------------------------- # rem wr buf --> test rbuf.size=2 # 2* rem wr buf --> test rbuf.size=4 # breset --> test rbuf.size=4 - # 2* rem wr buf --> test rbuf.size=3 + # 3* rem wr buf --> test rbuf.size=7 # csr.fclr --> test rbuf.size=0 $cpu cp \ -wibr pca.rbuf 0xaa \ @@ -286,7 +287,7 @@ stack: ; start: spl 7 ;;; lock-out interrupts mov #vh.ptr,@#va.ptr ;;; setup ptr handler - mov #pr.ie,@#pr.csr ;;; enable ptr interrupts + mov #pr.ie,@#pr.csr ;;; enable ptr interrupt bis #pr.ena,@#pr.csr ;;; reader enable (read next) 1$: tstb @#pr.csr ;;; wait for done set bpl 1$ ;;; @@ -358,7 +359,7 @@ $cpu ldasm -lst lst -sym sym { stack: ; start: mov #buf,r5 ; set output buffer - mov #pp.ie,@#pr.csr ; enable interrupt + mov #pr.ie,@#pr.csr ; enable interrupt bis #pr.ena,@#pr.csr ; reader enable (read next) 1$: wait ; wait for interrupt br 1$ ; forever