1
0
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:
wfjm
2019-04-28 12:57:18 +02:00
parent 1c9dbeb4ed
commit 42461113b0
13 changed files with 108 additions and 121 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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)

View File

@@ -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)

View File

@@ -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$

View File

@@ -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$

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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 -------------------"

View File

@@ -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.

View File

@@ -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