mirror of
https://github.com/wfjm/w11.git
synced 2026-01-22 19:10:51 +00:00
add cp -brf,-bwf; fix rblk handling for aborted transfers
- RlinkCommand: - add BlockDoneAll() - Print(): use BlockDone() as length for rblk - RlinkConnect: DecodeResponse(): rblk expect check over BlockDone - RtclRlinkConnect: M_exec(): tranfer BlockDone values after rblk - RtclRw11Cpu: - M_cp(): tranfer BlockDone values after rblk - add cp -brf and -bwf; add range checks for cp -wa
This commit is contained in:
parent
8abe1ed421
commit
ed5c8b7fc1
@ -37,6 +37,13 @@ The full set of tests is only run for tagged releases.
|
||||
- tools changes
|
||||
- Rw11Cpu,RtclRw11Cpu: add ibmon setup and HasIbtst()
|
||||
- RtclGet.ipp: use const& for oper() of string& and Rtime&
|
||||
- RlinkCommand: add BlockDoneAll()
|
||||
- RtclRw11Cpu: add cp -brf and -bwf; add range checks for cp -wa
|
||||
- ensure that after aborted rblk only BlockDone words are processed
|
||||
- RlinkCommand: Print(): use BlockDone() as length for rblk
|
||||
- RlinkConnect: DecodeResponse(): rblk expect check over BlockDone
|
||||
- RtclRlinkConnect: M_exec(): tranfer BlockDone values after rblk
|
||||
- RtclRw11Cpu: M_cp(): tranfer BlockDone values after rblk
|
||||
- firmware changes
|
||||
- rbd_rbmon: more robust ack,err trace when busy
|
||||
- rbd_tester: use now fifo_simple_dram
|
||||
|
||||
@ -7,6 +7,17 @@ This file descibes general issues.
|
||||
|
||||
The case id indicates the release when the issue was first recognized.
|
||||
|
||||
### V0.50-8 {[issue #21](https://github.com/wfjm/w11/issues/21)} --RK11,RL11: no proper NXM check in 18bit systems
|
||||
|
||||
No `NXM` error is generated when a UNIBUS device DMA transfer reaches the top
|
||||
of memory in 18 bit addressing. Seen originally for RK11, but RL11 and DEUNA
|
||||
are also affected.
|
||||
|
||||
In normal operation is minor non-conformity is not relevant because operating
|
||||
systems never setup DMA transfers to/from non-existing memory. However, some
|
||||
highly space optimized crash dump routines use this to detect end-of-memory
|
||||
and might endless loop. Also maindec's might test this border case and fail.
|
||||
|
||||
### V0.50-10 {[issue #20](https://github.com/wfjm/w11/issues/20)} -- DL11: output chars lost when device polling used
|
||||
Part of the console output can be lost when `xxdp` test `eqkce1` is
|
||||
run on FPGA, also some kernel messages during the 2.11bsd boot sequence.
|
||||
|
||||
@ -63,11 +63,6 @@ differences.
|
||||
The RK11/RK05 hardware poll logic is probably not reflecting the
|
||||
behaviour of the real drive.
|
||||
|
||||
- **TCK-035 pri=L: RK11: no proper `NXM` check in 18bit systems**
|
||||
No `NXM` error is generated when a RK11 read or write reaches the top
|
||||
of memory in 18 bit addressing. Crash dump routines use this to detect
|
||||
end-of-memory.
|
||||
|
||||
- **TCK-032 pri=M: RK11: polling on `DRY` in `RKDS` doesn't work**
|
||||
`DRY` in `RKDS` goes 1->0 immediately with `RDY` in `RKCS` when a function is
|
||||
started. In a real RK05 drive `DRY` went to 0 after a short delay. Some
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// $Id: RlinkCommand.cpp 1091 2018-12-23 12:38:29Z mueller $
|
||||
// $Id: RlinkCommand.cpp 1121 2019-03-11 08:59:12Z mueller $
|
||||
//
|
||||
// Copyright 2011-2018 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
// Copyright 2011-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
// This program is free software; you may redistribute and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free
|
||||
@ -13,6 +13,7 @@
|
||||
//
|
||||
// Revision History:
|
||||
// Date Rev Version Comment
|
||||
// 2019-03-10 1121 1.4.3 Print(): use BlockDone() as length for rblk data
|
||||
// 2018-12-23 1091 1.4.2 CmdWblk(),SetBlockWrite(): add move version
|
||||
// 2018-12-19 1090 1.4.1 use RosPrintf(bool)
|
||||
// 2018-12-01 1076 1.4 use unique_ptr
|
||||
@ -31,7 +32,6 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/*!
|
||||
\file
|
||||
\brief Implemenation of class RlinkCommand.
|
||||
*/
|
||||
|
||||
@ -407,7 +407,7 @@ void RlinkCommand::Print(std::ostream& os,
|
||||
bool dcheck = (HasExpect() && Expect().BlockValue().size() > 0);
|
||||
size_t ncol = (80-4-5)/(dwidth+2);
|
||||
|
||||
size_t size = BlockSize();
|
||||
size_t size = BlockDone();
|
||||
const uint16_t* pdat = BlockPointer();
|
||||
|
||||
for (size_t i=0; i<size; i++) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// $Id: RlinkCommand.hpp 1092 2018-12-24 08:01:50Z mueller $
|
||||
// $Id: RlinkCommand.hpp 1121 2019-03-11 08:59:12Z mueller $
|
||||
//
|
||||
// Copyright 2011-2018 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
// Copyright 2011-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
// This program is free software; you may redistribute and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free
|
||||
@ -13,6 +13,7 @@
|
||||
//
|
||||
// Revision History:
|
||||
// Date Rev Version Comment
|
||||
// 2019-03-10 1121 1.4.3 add BlockDoneAll()
|
||||
// 2018-12-24 1092 1.4.2 rename IsBlockExt -> HasBlockExt
|
||||
// 2018-12-23 1091 1.4.1 CmdWblk(),SetBlockWrite(): add move version
|
||||
// 2018-12-01 1076 1.4 use unique_ptr
|
||||
@ -29,7 +30,6 @@
|
||||
|
||||
|
||||
/*!
|
||||
\file
|
||||
\brief Declaration of class RlinkCommand.
|
||||
*/
|
||||
|
||||
@ -102,6 +102,7 @@ namespace Retro {
|
||||
const uint16_t* BlockPointer() const;
|
||||
size_t BlockSize() const;
|
||||
size_t BlockDone() const;
|
||||
bool BlockDoneAll() const;
|
||||
uint8_t Status() const;
|
||||
uint32_t Flags() const;
|
||||
bool TestFlagAny(uint32_t mask) const;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// $Id: RlinkCommand.ipp 1092 2018-12-24 08:01:50Z mueller $
|
||||
// $Id: RlinkCommand.ipp 1121 2019-03-11 08:59:12Z mueller $
|
||||
//
|
||||
// Copyright 2011-2018 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
// Copyright 2011-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
// This program is free software; you may redistribute and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free
|
||||
@ -13,6 +13,7 @@
|
||||
//
|
||||
// Revision History:
|
||||
// Date Rev Version Comment
|
||||
// 2019-03-10 1121 1.4.2 add BlockDoneAll()
|
||||
// 2018-12-24 1092 1.4.1 rename IsBlockExt -> HasBlockExt
|
||||
// 2018-12-01 1076 1.4 use unique_ptr
|
||||
// 2015-04-02 661 1.3 expect logic: add stat check, Print() without cntx
|
||||
@ -23,7 +24,6 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/*!
|
||||
\file
|
||||
\brief Implemenation (inline) of class RlinkCommand.
|
||||
*/
|
||||
|
||||
@ -260,6 +260,14 @@ inline size_t RlinkCommand::BlockDone() const
|
||||
//------------------------------------------+-----------------------------------
|
||||
//! FIXME_docs
|
||||
|
||||
inline bool RlinkCommand::BlockDoneAll() const
|
||||
{
|
||||
return BlockDone() == BlockSize();
|
||||
}
|
||||
|
||||
//------------------------------------------+-----------------------------------
|
||||
//! FIXME_docs
|
||||
|
||||
inline uint8_t RlinkCommand::Status() const
|
||||
{
|
||||
return fStatus;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// $Id: RlinkConnect.cpp 1091 2018-12-23 12:38:29Z mueller $
|
||||
// $Id: RlinkConnect.cpp 1121 2019-03-11 08:59:12Z mueller $
|
||||
//
|
||||
// Copyright 2011-2018 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
// Copyright 2011-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
// This program is free software; you may redistribute and/or modify it under
|
||||
// the terms of the GNU General Public License as published by the Free
|
||||
@ -13,6 +13,7 @@
|
||||
//
|
||||
// Revision History:
|
||||
// Date Rev Version Comment
|
||||
// 2019-03-10 1121 2.8.5 DecodeResponse(): rblk expect check over BlockDone
|
||||
// 2018-12-22 1091 2.8.4 Open(): (-Wpessimizing-move fix); add BadPort()
|
||||
// 2018-12-19 1090 2.8.3 use RosPrintf(bool)
|
||||
// 2018-12-18 1089 2.8.2 use c++ style casts
|
||||
@ -48,7 +49,6 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/*!
|
||||
\file
|
||||
\brief Implemenation of RlinkConnect.
|
||||
*/
|
||||
|
||||
@ -996,7 +996,7 @@ int RlinkConnect::DecodeResponse(RlinkCommandList& clist, size_t ibeg,
|
||||
cmd.SetFlagBit(RlinkCommand::kFlagChkData);
|
||||
}
|
||||
} else if (ccode==RlinkCommand::kCmdRblk) {
|
||||
size_t nerr = expect.BlockCheck(cmd.BlockPointer(), cmd.BlockSize());
|
||||
size_t nerr = expect.BlockCheck(cmd.BlockPointer(), cmd.BlockDone());
|
||||
if (nerr != 0) {
|
||||
fStats.Inc(kStatNChkData);
|
||||
cmd.SetFlagBit(RlinkCommand::kFlagChkData);
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// $Id: RtclRlinkConnect.cpp 1114 2019-02-23 18:01:55Z mueller $
|
||||
// $Id: RtclRlinkConnect.cpp 1121 2019-03-11 08:59:12Z mueller $
|
||||
//
|
||||
// Copyright 2011-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
@ -13,6 +13,7 @@
|
||||
//
|
||||
// Revision History:
|
||||
// Date Rev Version Comment
|
||||
// 2019-03-10 1121 1.6.10 M_exec(): tranfer BlockDone values after rblk
|
||||
// 2019-02-23 1114 1.6.9 use std::bind instead of lambda
|
||||
// 2018-12-23 1091 1.6.8 use AddWblk(move)
|
||||
// 2018-12-18 1089 1.6.7 use c++ style casts
|
||||
@ -52,7 +53,6 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/*!
|
||||
\file
|
||||
\brief Implemenation of class RtclRlinkConnect.
|
||||
*/
|
||||
|
||||
@ -380,7 +380,7 @@ int RtclRlinkConnect::M_exec(RtclArgs& args)
|
||||
pres = Tcl_NewIntObj(int(cmd.Data()));
|
||||
break;
|
||||
case RlinkCommand::kCmdRblk:
|
||||
pres = Rtcl::NewListIntObj(cmd.Block());
|
||||
pres = Rtcl::NewListIntObj(cmd.Block().data(), cmd.BlockDone());
|
||||
break;
|
||||
}
|
||||
if(!Rtcl::SetVar(interp, vardata[icmd], pres)) return kERR;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// $Id: RtclRw11Cpu.cpp 1114 2019-02-23 18:01:55Z mueller $
|
||||
// $Id: RtclRw11Cpu.cpp 1121 2019-03-11 08:59:12Z mueller $
|
||||
//
|
||||
// Copyright 2013-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
//
|
||||
@ -13,6 +13,8 @@
|
||||
//
|
||||
// Revision History:
|
||||
// Date Rev Version Comment
|
||||
// 2019-03-10 1121 1.2.28 M_cp(): tranfer BlockDone values after rblk
|
||||
// 2019-03-09 1120 1.2.27 add -brf,-bwf; add range checks for -wa
|
||||
// 2019-02-23 1114 1.2.26 use std::bind instead of lambda
|
||||
// 2019-02-15 1112 1.2.25 add HasIbtst() getter
|
||||
// 2018-12-23 1091 1.2.24 use AddWbibr(move),AddWblk(move)
|
||||
@ -55,7 +57,6 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/*!
|
||||
\file
|
||||
\brief Implemenation of RtclRw11Cpu.
|
||||
*/
|
||||
|
||||
@ -359,7 +360,7 @@ int RtclRw11Cpu::M_cp(RtclArgs& args)
|
||||
"-rsp|-rpc|-wsp|-wpc|"
|
||||
"-rps|-wps|"
|
||||
"-ral|-rah|-wal|-wah|-wa|"
|
||||
"-rm|-rmi|-rma|-wm|-wmi|-wma|-brm|-bwm|"
|
||||
"-rm|-rmi|-rma|-wm|-wmi|-wma|-brm|-bwm|-brf|-bwf|"
|
||||
"-start|-stop|-step|-creset|-breset|"
|
||||
"-suspend|-resume|"
|
||||
"-stapc|"
|
||||
@ -495,6 +496,7 @@ int RtclRw11Cpu::M_cp(RtclArgs& args)
|
||||
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
|
||||
clist.AddWreg(base + Rw11Cpu::kCPAH, data);
|
||||
|
||||
// Note: -wa without -p22 or -ubm options is equivalent to -wal
|
||||
} else if (opt == "-wa") { // -wa addr ?varStat [-p22 -ubm]--
|
||||
uint32_t addr=0;
|
||||
if (!args.GetArg("addr", addr, 017777776)) return kERR;
|
||||
@ -509,8 +511,24 @@ int RtclRw11Cpu::M_cp(RtclArgs& args)
|
||||
ah |= Rw11Cpu::kCPAH_M_22BIT;
|
||||
} else if (subopt == "-ubm") { // -ubm
|
||||
ah |= Rw11Cpu::kCPAH_M_UBM22;
|
||||
if (addr > 0777776) {
|
||||
ostringstream sos;
|
||||
sos << "-E: value '" << addr
|
||||
<< "' for 'addr' out of range 0...0777776";
|
||||
args.AppendResult(sos);
|
||||
return kERR;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((ah & (Rw11Cpu::kCPAH_M_22BIT|Rw11Cpu::kCPAH_M_UBM22)) == 0 &&
|
||||
addr > 0177776) {
|
||||
ostringstream sos;
|
||||
sos << "-E: value '" << addr
|
||||
<< "' for 'addr' out of range 0...0177776";
|
||||
args.AppendResult(sos);
|
||||
return kERR;
|
||||
}
|
||||
|
||||
clist.AddWreg(base + Rw11Cpu::kCPAL, al);
|
||||
if (ah!=0) clist.AddWreg(base + Rw11Cpu::kCPAH, ah);
|
||||
|
||||
@ -563,6 +581,19 @@ int RtclRw11Cpu::M_cp(RtclArgs& args)
|
||||
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
|
||||
clist.AddWblk(base + Rw11Cpu::kCPMEMI, move(block));
|
||||
|
||||
} else if (opt == "-brf") { // -brf size ?varData ?varStat ---
|
||||
int32_t bsize=0;
|
||||
if (!args.GetArg("bsize", bsize, 1, Connect().BlockSizeMax())) return kERR;
|
||||
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR;
|
||||
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
|
||||
clist.AddRblk(base + Rw11Cpu::kCPMEM, size_t(bsize));
|
||||
|
||||
} else if (opt == "-bwf") { // -bwf block ?varStat -----------
|
||||
vector<uint16_t> block;
|
||||
if (!args.GetArg("data", block, 1, Connect().BlockSizeMax())) return kERR;
|
||||
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
|
||||
clist.AddWblk(base + Rw11Cpu::kCPMEM, move(block));
|
||||
|
||||
} else if (opt == "-start") { // -start ?varStat ---------------
|
||||
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
|
||||
clist.AddWreg(base + Rw11Cpu::kCPCNTL, Rw11Cpu::kCPFUNC_START);
|
||||
@ -766,7 +797,7 @@ int RtclRw11Cpu::M_cp(RtclArgs& args)
|
||||
break;
|
||||
|
||||
case RlinkCommand::kCmdRblk:
|
||||
pres = Rtcl::NewListIntObj(cmd.Block());
|
||||
pres = Rtcl::NewListIntObj(cmd.Block().data(), cmd.BlockDone());
|
||||
break;
|
||||
}
|
||||
if(!Rtcl::SetVar(interp, vardata[icmd], pres)) return kERR;
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
# $Id: test_ibmon_ibtst.tcl 1118 2019-03-05 19:26:39Z mueller $
|
||||
# $Id: test_ibmon_ibtst.tcl 1120 2019-03-09 18:19:31Z mueller $
|
||||
#
|
||||
# Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
# License disclaimer see License.txt in $RETROBASE directory
|
||||
#
|
||||
# Revision History:
|
||||
# Date Rev Version Comment
|
||||
# 2019-03-09 1120 1.0.1 use -brm,-bwf
|
||||
# 2019-03-05 1118 1.0 Initial version
|
||||
#
|
||||
# Test register response
|
||||
@ -201,7 +202,7 @@ $cpu cp \
|
||||
-wal $itfifo \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw locr] \
|
||||
-wbibr it.fifo {0x0101 0x0102} \
|
||||
-rblk mem 3 -edone 2 -edata {0x0101 0x0102} -estaterr
|
||||
-brf 3 -edone 2 -edata {0x0101 0x0102} -estaterr
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
@ -244,8 +245,8 @@ ibd_ibmon::raw_edata edat emsk \
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr locw remr] \
|
||||
-wblk mem {0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 \
|
||||
0x0208 0x0209 0x020a 0x020b 0x020c 0x020d 0x020e 0x020f} \
|
||||
-bwf {0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 \
|
||||
0x0208 0x0209 0x020a 0x020b 0x020c 0x020d 0x020e 0x020f} \
|
||||
-edone 15 -estaterr \
|
||||
-rbibr it.fifo 15 \
|
||||
-edata {0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user