mirror of
https://github.com/wfjm/w11.git
synced 2026-04-03 05:15:12 +00:00
minor changes
- asm-11/lib/vec_devcatch.mac: use tti,tto instead of dlr,dlt
- ibdr_pc11: set rbuf.[rp]size0 (like dl11)
- librw11/Rw11Cntl{LP11,PC11}: use RtraceTools::
This commit is contained in:
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
--
|
||||
@@ -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
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
--
|
||||
@@ -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;
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
; 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)
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
; 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)
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
; 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$
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
; 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$
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
@@ -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
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
@@ -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
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
@@ -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 <functional>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
#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
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
@@ -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);
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
# 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 -------------------"
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
# 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.
|
||||
|
||||
@@ -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 <W.F.J.Mueller@gsi.de>
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user