mirror of
https://github.com/wfjm/w11.git
synced 2026-01-13 15:37:43 +00:00
tbench: add ibd_ibmon, finish ibd_ibtst
This commit is contained in:
parent
374dfe30cc
commit
8abe1ed421
@ -30,6 +30,7 @@ The full set of tests is only run for tagged releases.
|
||||
- simclkv: test bench clock generator with variable period
|
||||
- new verification codes
|
||||
- tbench/w11a_ibtst/*: tbench for ibd_ibtst
|
||||
- tbench/w11a_ibmon/*: tbench for ibd_ibmon
|
||||
- test_w11a_sdreg.tcl: tbench for sdreg
|
||||
|
||||
### Changes
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
# $Id: cpu_all.dat 1112 2019-02-17 11:10:04Z mueller $
|
||||
# $Id: cpu_all.dat 1115 2019-02-24 12:53:04Z mueller $
|
||||
#
|
||||
## steering file for all cpu tests
|
||||
#
|
||||
@cp/cp_all.dat
|
||||
#
|
||||
@w11a_ibtst/w11a_ibtst_all.dat
|
||||
@w11a_ibmon/w11a_ibmon_all.dat
|
||||
#
|
||||
@w11a/w11a_all.dat
|
||||
#
|
||||
|
||||
278
tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl
Normal file
278
tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl
Normal file
@ -0,0 +1,278 @@
|
||||
# $Id: test_ibmon_cpu.tcl 1118 2019-03-05 19:26:39Z 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-05 1118 1.0 Initial version
|
||||
# 2019-02-24 1115 0.1 First draft
|
||||
#
|
||||
# Test register response
|
||||
# 1. write/read IB space via bwm/brm (use MMU SAR SM I regs)
|
||||
# 2. write/read IB space via wibr/ribr (use MMU SAR SM I regs)
|
||||
# 3. test membe (byte write) via wibr/ribr
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
rlc log "test_ibmon_cpu: test basics with cpu register accesses --------------"
|
||||
|
||||
if {[$cpu get hasibmon] == 0} {
|
||||
rlc log " test_ibmon_cpu-W: no ibmon unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibmon
|
||||
set print 0
|
||||
|
||||
# -- Section A ---------------------------------------------------------------
|
||||
rlc log " A exercise monitor data access via data/addr regs ---------"
|
||||
|
||||
rlc log " A1: capture write/read rem and loc -----------------"
|
||||
# write/read rem and loc with ibmon on; check that 4 lines acquired
|
||||
set cntlstastd [regbld ibd_ibmon::CNTL conena remena locena {func "STA"}]
|
||||
set cntlsto [regbld ibd_ibmon::CNTL {func "STO"}]
|
||||
set statmsk [regbld ibd_ibmon::STAT wrap susp run]
|
||||
set sarsi0 [$cpu imap sarsi.0]
|
||||
set sarsi1 [$cpu imap sarsi.1]
|
||||
set sarsi2 [$cpu imap sarsi.2]
|
||||
|
||||
$cpu cp \
|
||||
-wreg im.hilim 0177776 \
|
||||
-wreg im.lolim 0160000 \
|
||||
-wreg im.cntl $cntlstastd \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \
|
||||
-wibr sarsi.0 0xdead \
|
||||
-ribr sarsi.0 -edata 0xdead \
|
||||
-wal $sarsi0 \
|
||||
-wm 0xbeef \
|
||||
-rm -edata 0xbeef \
|
||||
-wreg im.cntl $cntlsto \
|
||||
-rreg im.stat -edata 0x0000 $statmsk \
|
||||
-rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 4}]
|
||||
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
|
||||
# build expect list: list of {eflag eaddr edata enbusy} sublists
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $sarsi0 0xbeef 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0xbeef 0]
|
||||
|
||||
rlc log " A1.1: read all in one rblk -------------------------"
|
||||
$cpu cp \
|
||||
-wreg im.addr 0x0000 \
|
||||
-rblk im.data 16 -edata $edat $emsk \
|
||||
-rreg im.addr -edata 16
|
||||
|
||||
rlc log " A1.2: random address read --------------------------"
|
||||
foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0 \
|
||||
0x9 0xb 0xd 0xf 0xe 0xc 0xa 0x8} {
|
||||
$cpu cp \
|
||||
-wreg im.addr $addr \
|
||||
-rreg im.data -edata [lindex $edat $addr] [lindex $emsk $addr] \
|
||||
-rreg im.addr -edata [expr {$addr + 1}]
|
||||
}
|
||||
|
||||
rlc log " A1.3: random address with rblk length 2 ------------"
|
||||
foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0 \
|
||||
0x9 0xb 0xd 0xe 0xc 0xa 0x8} {
|
||||
$cpu cp \
|
||||
-wreg im.addr $addr \
|
||||
-rblk im.data 2 -edata [lrange $edat $addr [expr {$addr + 1}] ] \
|
||||
[lrange $emsk $addr [expr {$addr + 1}] ] \
|
||||
-rreg im.addr -edata [expr {$addr + 2}]
|
||||
}
|
||||
|
||||
# -- Section B ---------------------------------------------------------------
|
||||
rlc log " B test rreg,wreg capture: ack,we,be* flags ----------------"
|
||||
rlc log " B1.1: test byte racc access (via wibr/ribr) --------"
|
||||
# word write/read already tested in section A; now go for byte writes
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be0 we] $sarsi0 0x00aa 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0xbeaa 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 we] $sarsi0 0x5500 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x55aa 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra we] $sarsi0 0xfade 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x55aa 0]
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wmembe 1 \
|
||||
-wibr sarsi.0 0x00aa \
|
||||
-ribr sarsi.0 -edata 0xbeaa \
|
||||
-wmembe 2 \
|
||||
-wibr sarsi.0 0x5500 \
|
||||
-ribr sarsi.0 -edata 0x55aa \
|
||||
-wmembe 0 \
|
||||
-wibr sarsi.0 0xfade \
|
||||
-ribr sarsi.0 -edata 0x55aa
|
||||
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " B1.2: test byte cacc access (via wm/rm) ------------"
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be0 we] $sarsi0 0xff34 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0x5534 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 we] $sarsi0 0x12ff 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0x1234 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca we] $sarsi0 0xfade 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0x1234 0]
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wal $sarsi0 \
|
||||
-wmembe 1 \
|
||||
-wm 0xff34 \
|
||||
-rm -edata 0x5534 \
|
||||
-wmembe 2 \
|
||||
-wm 0x12ff \
|
||||
-rm -edata 0x1234 \
|
||||
-wmembe 0 \
|
||||
-wm 0xfade \
|
||||
-rm -edata 0x1234
|
||||
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " B1.3: test loc access (via cpu code) --------------"
|
||||
# check that burst flag is seen for write of rmw
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack be1 be0 we] $sarsi0 0xffff 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack rmw be1 be0 ] $sarsi0 0xffff 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bu ack rmw be1 be0 we] $sarsi0 0x0000 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack be1 be0 ] $sarsi0 0x0000 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack rmw be0 ] $sarsi0 0x0000 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bu ack rmw be0 we] $sarsi0 0xffff 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack be1 be0 ] $sarsi0 0x00ff 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack rmw be1 ] $sarsi0 0x00ff 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bu ack rmw be1 we] $sarsi0 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack be1 be0 ] $sarsi0 0x01ff 0]
|
||||
|
||||
$cpu ldasm -lst lst -sym sym {
|
||||
. = 1000
|
||||
stack:
|
||||
start: mov #177777,(r0)
|
||||
inc (r0)
|
||||
mov (r0),r1
|
||||
decb (r0)
|
||||
mov (r0),r2
|
||||
incb 1(r0)
|
||||
mov (r0),r3
|
||||
halt
|
||||
stop:
|
||||
}
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
rw11::asmrun $cpu sym r0 $sarsi0
|
||||
rw11::asmwait $cpu sym
|
||||
rw11::asmtreg $cpu r1 0x0000 \
|
||||
r2 0x00ff \
|
||||
r3 0x01ff
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
# -- Section C ---------------------------------------------------------------
|
||||
rlc log " C test access mode enable flags ---------------------------"
|
||||
$cpu ldasm -lst lst -sym sym {
|
||||
. = 1000
|
||||
stack:
|
||||
start: mov r1,(r0)
|
||||
stop:
|
||||
}
|
||||
|
||||
rlc log " C1.1: test conena ----------------------------------"
|
||||
# note that ibr access set cacc and racc flags
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0x0100 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $sarsi1 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x0100 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi1 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi2 0x0102 0]
|
||||
|
||||
ibd_ibmon::start $cpu conena 1 remena 0 locena 0
|
||||
$cpu cp \
|
||||
-wibr sarsi.0 0x0100 \
|
||||
-wal $sarsi1 \
|
||||
-wm 0x0101 \
|
||||
-wr0 $sarsi2 \
|
||||
-wr1 0x0102 \
|
||||
-wpc $sym(start) \
|
||||
-step \
|
||||
-rpc -edata $sym(stop) \
|
||||
-ribr sarsi.0 -edata 0x0100 \
|
||||
-wal $sarsi1 \
|
||||
-rm -edata 0x0101 \
|
||||
-ribr sarsi.2 -edata 0x0102
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C1.2: test remena ----------------------------------"
|
||||
# Note: use -wal and -wr0 setup above, skip -rpc also
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0x0200 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x0200 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi2 0x0202 0]
|
||||
|
||||
ibd_ibmon::start $cpu conena 0 remena 1 locena 0
|
||||
$cpu cp \
|
||||
-wibr sarsi.0 0x0200 \
|
||||
-wm 0x0201 \
|
||||
-wr1 0x0202 \
|
||||
-wpc $sym(start) \
|
||||
-step \
|
||||
-ribr sarsi.0 -edata 0x0200 \
|
||||
-wal $sarsi1 \
|
||||
-rm -edata 0x0201 \
|
||||
-ribr sarsi.2 -edata 0x0202
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C1.3: test locena ----------------------------------"
|
||||
# Note: again reuse -wal and -wr0 setup above, skip -rpc also
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack be1 be0 we] $sarsi2 0x0302 0] \
|
||||
|
||||
ibd_ibmon::start $cpu conena 0 remena 0 locena 1
|
||||
$cpu cp \
|
||||
-wibr sarsi.0 0x0300 \
|
||||
-wm 0x0301 \
|
||||
-wr1 0x0302 \
|
||||
-wpc $sym(start) \
|
||||
-step \
|
||||
-ribr sarsi.0 -edata 0x0300 \
|
||||
-wal $sarsi1 \
|
||||
-rm -edata 0x0301 \
|
||||
-ribr sarsi.2 -edata 0x0302
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
# -- Section D ---------------------------------------------------------------
|
||||
rlc log " D test hilim,lolim ----------------------------------------"
|
||||
# allow sarsi0,sarsi1, block sarsi2
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0x1100 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi1 0x1101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x1100 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi1 0x1101 0]
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wreg im.hilim $sarsi1 \
|
||||
-wreg im.lolim $sarsi0 \
|
||||
-wibr sarsi.0 0x1100 \
|
||||
-wibr sarsi.1 0x1101 \
|
||||
-wibr sarsi.2 0x1102 \
|
||||
-ribr sarsi.0 -edata 0x1100 \
|
||||
-ribr sarsi.1 -edata 0x1101 \
|
||||
-ribr sarsi.2 -edata 0x1102 \
|
||||
-wreg im.hilim 0177777 \
|
||||
-wreg im.lolim 0160000
|
||||
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
387
tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl
Normal file
387
tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl
Normal file
@ -0,0 +1,387 @@
|
||||
# $Id: test_ibmon_ibtst.tcl 1118 2019-03-05 19:26:39Z 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-05 1118 1.0 Initial version
|
||||
#
|
||||
# Test register response
|
||||
# 1. write/read IB space via bwm/brm (use MMU SAR SM I regs)
|
||||
# 2. write/read IB space via wibr/ribr (use MMU SAR SM I regs)
|
||||
# 3. test membe (byte write) via wibr/ribr
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
rlc log "test_ibmon_ibtest: tests with ibd_ibtst as target -------------------"
|
||||
|
||||
if {[$cpu get hasibmon] == 0} {
|
||||
rlc log " test_ibmon_ibtst-W: no ibmon unit found, test aborted"
|
||||
return
|
||||
}
|
||||
if {[$cpu get hasibtst] == 0} {
|
||||
rlc log " test_ibmon_ibtst-W: no ibtst unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibmon
|
||||
package require ibd_ibtst
|
||||
set print 0
|
||||
|
||||
# -- Section A ---------------------------------------------------------------
|
||||
rlc log " A exercise ack,nak,tout,busy and nbusy --------------------"
|
||||
|
||||
set itdata [$cpu imap it.data]
|
||||
set itfifo [$cpu imap it.fifo]
|
||||
|
||||
# only data and fifo visible for ibmon to keep logs short
|
||||
$cpu cp \
|
||||
-wreg im.hilim $itfifo \
|
||||
-wreg im.lolim $itdata
|
||||
|
||||
rlc log " A1: ack,nak on data --------------------------------"
|
||||
# disable/enable rem/loc side visibility of data
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 we] $itdata 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 ] $itdata {} 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] $itdata 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] $itdata {} 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x1111 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x1111 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] $itdata 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] $itdata {} 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 we] $itdata 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 ] $itdata {} 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itdata 0x2222 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itdata 0x2222 0]
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wal $itdata \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL ] \
|
||||
-wibr it.data 0xdead -estaterr \
|
||||
-ribr it.data -estaterr \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL remw remr] \
|
||||
-wibr it.data 0x1111 \
|
||||
-ribr it.data -edata 0x1111 \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL locw locr] \
|
||||
-wibr it.data 0xdead -estaterr \
|
||||
-ribr it.data -estaterr \
|
||||
-wm 0x2222 \
|
||||
-rm -edata 0x2222
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " A2: ack with busy on data --------------------------"
|
||||
# enable loc/rem side visibility of data, enable bsy
|
||||
# use 3 cases: bsyw; bsyr; bsyw+bsyr; check that delay only on loc side
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 we] $itdata 0x0102 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itdata 0x0102 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x0201 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x0201 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itdata 0x0202 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 ] $itdata 0x0202 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x0301 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x0301 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 we] $itdata 0x0302 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 ] $itdata 0x0302 8]
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyw remw remr locw locr] \
|
||||
-wibr it.data 0x0101 \
|
||||
-ribr it.data -edata 0x0101 \
|
||||
-wm 0x0102 \
|
||||
-rm -edata 0x0102 \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyr remw remr locw locr] \
|
||||
-wibr it.data 0x0201 \
|
||||
-ribr it.data -edata 0x0201 \
|
||||
-wm 0x0202 \
|
||||
-rm -edata 0x0202 \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyw bsyr remw remr locw locr] \
|
||||
-wibr it.data 0x0301 \
|
||||
-ribr it.data -edata 0x0301 \
|
||||
-wm 0x0302 \
|
||||
-rm -edata 0x0302
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
|
||||
rlc log " A3: nak on data (bsy,bsy+datab,datto,datto+datab) --"
|
||||
# disable loc side visibility of data and use
|
||||
# --> prompt nak (as above)
|
||||
# bsy --> delayed nak on write
|
||||
# bsy --> delayed nak on read
|
||||
# bsy+datab --> delayed nak with ack while busy
|
||||
# datto --> timeout
|
||||
# datto+bsy --> timeout (should look plain timeout)
|
||||
# datto+bsy+datab --> timeout with inital ack
|
||||
|
||||
set ibtout 63; # ibus timeout
|
||||
|
||||
# [list [regbld ibd_ibmon::FLAGS to bsy nak ack ca be1 be0 we]
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] \
|
||||
$itdata 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] \
|
||||
$itdata {} 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy nak ca be1 be0 we] \
|
||||
$itdata 0xdead 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] \
|
||||
$itdata {} 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] \
|
||||
$itdata 0xdead 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy nak ca be1 be0 ] \
|
||||
$itdata {} 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy nak ack ca be1 be0 we] \
|
||||
$itdata 0xdead 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS bsy nak ack ca be1 be0 ] \
|
||||
$itdata {} 8] \
|
||||
[list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 we] \
|
||||
$itdata 0xdead $ibtout] \
|
||||
[list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 ] \
|
||||
$itdata {} $ibtout] \
|
||||
[list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 we] \
|
||||
$itdata 0xdead $ibtout] \
|
||||
[list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 ] \
|
||||
$itdata {} $ibtout] \
|
||||
[list [regbld ibd_ibmon::FLAGS to bsy nak ack ca be1 be0 we] \
|
||||
$itdata 0xdead $ibtout] \
|
||||
[list [regbld ibd_ibmon::FLAGS to bsy nak ack ca be1 be0 ] \
|
||||
$itdata {} $ibtout]
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyw remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyr remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datab bsyw bsyr remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datto remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datto bsyw bsyr remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datab datto bsyw bsyr remw remr] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
# -- Section B ---------------------------------------------------------------
|
||||
rlc log " B fifo basics ---------------------------------------------"
|
||||
rlc log " B1: fifo read test (write 2, read 3) -------------"
|
||||
# use remw locr
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0102 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itfifo 0x0101 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itfifo 0x0102 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] $itfifo {} 0] \
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
$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
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " B2: fifo write test (write 16, read 15) ------------"
|
||||
# use locw remr
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0200 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0201 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0202 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0203 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0204 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0205 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0206 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0207 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0208 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0209 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020a 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020b 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020c 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020d 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020e 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] $itfifo 0x020f 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0200 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0201 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0202 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0203 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0204 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0205 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0206 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0207 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0208 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0209 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020a 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020b 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020c 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020d 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020e 0]
|
||||
|
||||
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} \
|
||||
-edone 15 -estaterr \
|
||||
-rbibr it.fifo 15 \
|
||||
-edata {0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 \
|
||||
0x0208 0x0209 0x020a 0x020b 0x020c 0x020d 0x020e}
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
# -- Section C ---------------------------------------------------------------
|
||||
rlc log " C test repeat collapes ------------------------------------"
|
||||
rlc log " C1: dry run, no collapse active --------------------"
|
||||
# use remw remr (for simplicity)
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0300 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0301 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0302 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0303 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0300 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0301 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0302 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0303 0]
|
||||
|
||||
ibd_ibmon::start $cpu
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \
|
||||
-wbibr it.fifo {0x0300 0x0301 0x0302 0x0303} \
|
||||
-rbibr it.fifo 4 -edata {0x0300 0x0301 0x0302 0x0303}
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C2.1: read collapse active -------------------------"
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0400 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0401 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0402 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0403 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0400 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0403 0]
|
||||
|
||||
ibd_ibmon::start $cpu rcolr 1
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \
|
||||
-wbibr it.fifo {0x0400 0x0401 0x0402 0x0403} \
|
||||
-rbibr it.fifo 4 -edata {0x0400 0x0401 0x0402 0x0403}
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C2.2: write collapse active ------------------------"
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0500 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0503 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0500 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0501 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0502 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0503 0]
|
||||
|
||||
ibd_ibmon::start $cpu rcolw 1
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \
|
||||
-wbibr it.fifo {0x0500 0x0501 0x0502 0x0503} \
|
||||
-rbibr it.fifo 4 -edata {0x0500 0x0501 0x0502 0x0503}
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C2.3: read and write collapse active ---------------"
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0600 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0603 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0600 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0603 0]
|
||||
|
||||
ibd_ibmon::start $cpu rcolw 1 rcolr 1
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \
|
||||
-wbibr it.fifo {0x0600 0x0601 0x0602 0x0603} \
|
||||
-rbibr it.fifo 4 -edata {0x0600 0x0601 0x0602 0x0603}
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C2.4: non-collapse of write-read same address ------"
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0700 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0700 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0701 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0701 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0702 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0702 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0703 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0703 0]
|
||||
|
||||
ibd_ibmon::start $cpu rcolw 1 rcolr 1
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \
|
||||
-wibr it.fifo 0x0700 \
|
||||
-ribr it.fifo -edata 0x0700 \
|
||||
-wibr it.fifo 0x0701 \
|
||||
-ribr it.fifo -edata 0x0701 \
|
||||
-wibr it.fifo 0x0702 \
|
||||
-ribr it.fifo -edata 0x0702 \
|
||||
-wibr it.fifo 0x0703 \
|
||||
-ribr it.fifo -edata 0x0703
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
|
||||
rlc log " C2.5: non-collapse of reads to different address ---"
|
||||
ibd_ibmon::raw_edata edat emsk \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0xbabe 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0800 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0803 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0800 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0801 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0802 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0803 0] \
|
||||
[list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0]
|
||||
|
||||
ibd_ibmon::start $cpu rcolw 1 rcolr 1
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \
|
||||
-wibr it.data 0xbabe \
|
||||
-wbibr it.fifo {0x0800 0x0801 0x0802 0x0803} \
|
||||
-ribr it.fifo -edata 0x0800 \
|
||||
-ribr it.data -edata 0xbabe \
|
||||
-ribr it.fifo -edata 0x0801 \
|
||||
-ribr it.data -edata 0xbabe \
|
||||
-ribr it.fifo -edata 0x0802 \
|
||||
-ribr it.data -edata 0xbabe \
|
||||
-ribr it.fifo -edata 0x0803 \
|
||||
-ribr it.data -edata 0xbabe
|
||||
ibd_ibmon::stop $cpu
|
||||
if {$print} {puts [ibd_ibmon::print $cpu]}
|
||||
ibd_ibmon::raw_check $cpu $edat $emsk
|
||||
193
tools/tbench/w11a_ibmon/test_ibmon_regs.tcl
Normal file
193
tools/tbench/w11a_ibmon/test_ibmon_regs.tcl
Normal file
@ -0,0 +1,193 @@
|
||||
# $Id: test_ibmon_regs.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-01 1116 1.0 Initial version
|
||||
# 2019-02-24 1115 0.1 First draft
|
||||
#
|
||||
# Test register response
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
rlc log "test_ibmon_regs: test register response -----------------------------"
|
||||
|
||||
if {[$cpu get hasibmon] == 0} {
|
||||
rlc log " test_ibmon_regs-W: no ibmon unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibmon
|
||||
|
||||
# -- Section A ---------------------------------------------------------------
|
||||
rlc log " A basic register access tests -----------------------------"
|
||||
|
||||
rlc log " A1: write/read cntl---------------------------------"
|
||||
# test that starting captures option flags, and that stoping keeps them
|
||||
# test that NOOP is a noop and doesn't change flags
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL locena {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL locena] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL remena {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL remena] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL conena {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL conena] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL wstop {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL rcolr {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL rcolr] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL rcolw {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL rcolw] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL wstop remena locena {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop remena locena ] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop remena locena] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "NOOP"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop remena locena]
|
||||
|
||||
rlc log " A2: write cntl, read stat --------------------------"
|
||||
# test that susp/run follow functions set to cntl
|
||||
# test that sus/res does not change option flags
|
||||
set statmsk [regbld ibd_ibmon::STAT wrap susp run]
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL wstop locena {func "STA"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena ] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena ] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "RES"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena ] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk
|
||||
# test that suspend/resume of a stopped system is a noop
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "RES"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk
|
||||
# test that start of a suspended system clears suspend
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk
|
||||
# test that suspend of a suspended system is a noop
|
||||
# test that stop of a suspended system clears suspend
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk
|
||||
# get amax for later usage
|
||||
$cpu cp \
|
||||
-rreg im.stat rstat
|
||||
set bsize [regget ibd_ibmon::STAT(bsize) $rstat]
|
||||
set amax [expr {( 256 << $bsize ) - 1}]
|
||||
|
||||
rlc log " A3: test addr --------------------------------------"
|
||||
rlc log " A3.1: write/read addr when stopped -----------------"
|
||||
foreach {laddr waddr} [list 0x0000 0 0x0000 3 $amax 0 $amax 3] {
|
||||
set addr [regbld ibd_ibmon::ADDR [list laddr $laddr] [list waddr $waddr]]
|
||||
$cpu cp \
|
||||
-wreg im.addr $addr \
|
||||
-rreg im.addr -edata $addr
|
||||
}
|
||||
|
||||
rlc log " A3.2: verify that starting clears addr -------------"
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STO"] \
|
||||
-wreg im.addr [regbldkv ibd_ibmon::ADDR laddr $amax] \
|
||||
-rreg im.addr -edata [regbldkv ibd_ibmon::ADDR laddr $amax] \
|
||||
-wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STA"] \
|
||||
-rreg im.addr -edata 0x00 \
|
||||
-wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STO"]
|
||||
|
||||
rlc log " A3.3: test err when started and addr written -------"
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STA"] \
|
||||
-wreg im.addr 0x100 -estaterr \
|
||||
-wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STO"]
|
||||
|
||||
rlc log " A4: test data --------------------------------------"
|
||||
rlc log " A4.1: when stopped ---------------------------------"
|
||||
# stop, set addr, and four times data, check addr
|
||||
# at 5th data read waddr goes 0 and laddr incs
|
||||
$cpu cp \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \
|
||||
-wreg im.addr [regbld ibd_ibmon::ADDR {laddr 010} {waddr 0}] \
|
||||
-rreg im.data \
|
||||
-rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 010} {waddr 001}] \
|
||||
-rreg im.data \
|
||||
-rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 010} {waddr 002}] \
|
||||
-rreg im.data \
|
||||
-rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 010} {waddr 003}] \
|
||||
-rreg im.data \
|
||||
-rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 011} {waddr 000}]
|
||||
|
||||
rlc log " A4.2: test err when written ------------------------"
|
||||
$cpu cp -wreg im.data 0x100 -estaterr
|
||||
|
||||
rlc log " A5: test hilim/lolim -------------------------------"
|
||||
# check also that upper 3 bits are stuck 1, lsb stuck 0
|
||||
$cpu cp \
|
||||
-wreg im.hilim 0162346 \
|
||||
-wreg im.lolim 0161234 \
|
||||
-rreg im.hilim -edata 0162346 \
|
||||
-rreg im.lolim -edata 0161234 \
|
||||
-wreg im.hilim 0017777 \
|
||||
-wreg im.lolim 0000001 \
|
||||
-rreg im.hilim -edata 0177776 \
|
||||
-rreg im.lolim -edata 0160000
|
||||
|
||||
rlc log " A6: test reset behavior ----------------------------"
|
||||
# a reset will start ibtst with conena remena locena and hilim/lolim fully open
|
||||
|
||||
rlc log " A6.1: no reset on BRESET ---------------------------"
|
||||
# no reset on BRESET and CRESET (cp -creset), only on GRESET (rbus init)
|
||||
$cpu cp \
|
||||
-wreg im.hilim 0172000 \
|
||||
-wreg im.lolim 0171000 \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL wstop locena {func "STA"}] \
|
||||
-wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-rreg im.hilim -edata 0172000 \
|
||||
-rreg im.lolim -edata 0171000 \
|
||||
-breset \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-rreg im.hilim -edata 0172000 \
|
||||
-rreg im.lolim -edata 0171000
|
||||
|
||||
rlc log " A6.2: no reset on CRESET ---------------------------"
|
||||
$cpu cp \
|
||||
-creset \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \
|
||||
-rreg im.hilim -edata 0172000 \
|
||||
-rreg im.lolim -edata 0171000
|
||||
|
||||
rlc log " A6.2: test reset on GRESET -------------------------"
|
||||
# GRESET, triggered by rbus init against cpu conf register
|
||||
|
||||
rlc exec -init [$cpu rmap conf] [regbld rw11::INIT greset]
|
||||
|
||||
$cpu cp \
|
||||
-rreg im.cntl -edata [regbld ibd_ibmon::CNTL conena remena locena] \
|
||||
-rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \
|
||||
-rreg im.hilim -edata 0177776 \
|
||||
-rreg im.lolim -edata 0160000
|
||||
|
||||
# harvest breset/creset triggered attn's
|
||||
rlc exec -attn
|
||||
rlc wtlam 0.
|
||||
7
tools/tbench/w11a_ibmon/w11a_ibmon_all.dat
Normal file
7
tools/tbench/w11a_ibmon/w11a_ibmon_all.dat
Normal file
@ -0,0 +1,7 @@
|
||||
# $Id: w11a_ibmon_all.dat 1117 2019-03-03 12:49:26Z mueller $
|
||||
#
|
||||
## steering file for all w11a_ibmon tests
|
||||
#
|
||||
test_ibmon_regs.tcl
|
||||
test_ibmon_cpu.tcl
|
||||
test_ibmon_ibtst.tcl
|
||||
@ -1,10 +1,11 @@
|
||||
# $Id: test_ibtst_data.tcl 1112 2019-02-17 11:10:04Z mueller $
|
||||
# $Id: test_ibtst_data.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-05 1118 1.0.1 use -wal
|
||||
# 2019-02-16 1112 1.0 Initial version
|
||||
#
|
||||
# Test data register response
|
||||
@ -20,7 +21,7 @@
|
||||
rlc log "test_ibtst_data: test data register response -------------------------"
|
||||
|
||||
if {[$cpu get hasibtst] == 0} {
|
||||
rlc log " test_ibtst_data-W: no ibtest unit found, test aborted"
|
||||
rlc log " test_ibtst_data-W: no ibtst unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibtst
|
||||
@ -29,7 +30,7 @@ rlc log " A1: data loc/rem access ----------------------------"
|
||||
# test loc/rem write: n/n; y/n; n/y; y/y
|
||||
# test loc/rem read: n/n; y/n; n/y; y/y
|
||||
$cpu cp \
|
||||
-wa [cpu0 imap it.data] \
|
||||
-wal [$cpu imap it.data] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL ] \
|
||||
-wm 0xdead -estaterr \
|
||||
-wibr it.data 0xdead -estaterr \
|
||||
@ -55,9 +56,15 @@ $cpu cp \
|
||||
-rm -edata 0xdead \
|
||||
-ribr it.data -edata 0xdead
|
||||
|
||||
rlc log " A2: data loc nak and timeout -----------------------"
|
||||
# test datto; should look like nak
|
||||
rlc log " A2: data loc nak and bsy,bsy+ack,timeout -----------"
|
||||
# should all give rbus
|
||||
$cpu cp \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyw bsyr ] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyw bsyr datab ] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datto ] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr
|
||||
@ -92,3 +99,7 @@ $cpu cp \
|
||||
-wibr it.data 0xdead \
|
||||
-breset \
|
||||
-ribr it.data -edata 0x0000
|
||||
|
||||
# harvest breset/creset triggered attn's
|
||||
rlc exec -attn -edata 0
|
||||
rlc wtlam 0.
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
# $Id: test_ibtst_fifo.tcl 1112 2019-02-17 11:10:04Z mueller $
|
||||
# $Id: test_ibtst_fifo.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-05 1118 1.0.1 use -wal
|
||||
# 2019-02-16 1112 1.0 Initial version
|
||||
#
|
||||
# Test fifo register response
|
||||
@ -20,7 +21,7 @@
|
||||
rlc log "test_ibtst_fifo: test fifo register response -------------------------"
|
||||
|
||||
if {[$cpu get hasibtst] == 0} {
|
||||
rlc log " test_ibtst_fifo-W: no ibtest unit found, test aborted"
|
||||
rlc log " test_ibtst_fifo-W: no ibtst unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibtst
|
||||
@ -28,7 +29,7 @@ package require ibd_ibtst
|
||||
rlc log " A1: fifo loc/rem access ----------------------------"
|
||||
# test off->off; loc->loc; loc->rem; rem->loc; rem->rem
|
||||
$cpu cp \
|
||||
-wa [cpu0 imap it.fifo] \
|
||||
-wal [cpu0 imap it.fifo] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr ] \
|
||||
-wm 0xdead -estaterr \
|
||||
-wibr it.fifo 0xdead -estaterr \
|
||||
@ -132,3 +133,7 @@ $cpu cp \
|
||||
-breset \
|
||||
-ribr it.stat -edata [regbld ibd_ibtst::STAT] \
|
||||
-ribr it.fifo -estaterr
|
||||
|
||||
# harvest breset/creset triggered attn's
|
||||
rlc exec -attn -edata 0
|
||||
rlc wtlam 0.
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
# $Id: test_ibtst_regs.tcl 1112 2019-02-17 11:10:04Z mueller $
|
||||
# $Id: test_ibtst_regs.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-05 1118 1.0.1 rename dly[rw] -> bsy[rw]; add datab; use -wal
|
||||
# 2019-02-16 1112 1.0 Initial version
|
||||
#
|
||||
# Test cntl register response
|
||||
@ -20,7 +21,7 @@
|
||||
rlc log "test_ibtst_regs: test cntl/stat register access ----------------------"
|
||||
|
||||
if {[$cpu get hasibtst] == 0} {
|
||||
rlc log " test_ibtst_regs-W: no ibtest unit found, test aborted"
|
||||
rlc log " test_ibtst_regs-W: no ibtst unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibtst
|
||||
@ -36,14 +37,16 @@ $cpu cp \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL remr] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL remw] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL remw] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL dlyr] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL dlyr] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL dlyw] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL dlyw] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyr] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL bsyr] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL bsyw] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL bsyw] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL nobyt] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL nobyt] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datto] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL datto] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL datab] \
|
||||
-rreg it.cntl -edata [regbld ibd_ibtst::CNTL datab] \
|
||||
-wreg it.cntl 0x0000 \
|
||||
-rreg it.cntl -edata -0x0000
|
||||
|
||||
@ -58,9 +61,13 @@ $cpu cp \
|
||||
rlc log " A3: cntl,stat only rem accessible ------------------"
|
||||
$cpu cp \
|
||||
-rreg it.stat -edata 0x0000 \
|
||||
-wa [cpu0 imap it.cntl] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wa [cpu0 imap it.stat] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr
|
||||
-wal [cpu0 imap it.cntl] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr \
|
||||
-wal [cpu0 imap it.stat] \
|
||||
-wm 0xdead -estaterr \
|
||||
-rm -estaterr
|
||||
|
||||
# harvest breset/creset triggered attn's
|
||||
rlc exec -attn -edata 0
|
||||
rlc wtlam 0.
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
# $Id: test_ibtst_stat.tcl 1112 2019-02-17 11:10:04Z mueller $
|
||||
# $Id: test_ibtst_stat.tcl 1118 2019-03-05 19:26:39Z 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-05 1118 1.0.1 rename dly[rw] -> bsy[rw]; use -wal
|
||||
# 2019-02-16 1112 1.0 Initial version
|
||||
#
|
||||
# Test stat register response
|
||||
@ -20,14 +21,14 @@
|
||||
rlc log "test_ibtst_stat: test stat register response -------------------------"
|
||||
|
||||
if {[$cpu get hasibtst] == 0} {
|
||||
rlc log " test_ibtst_data-W: no ibtest unit found, test aborted"
|
||||
rlc log " test_ibtst_data-W: no ibtst unit found, test aborted"
|
||||
return
|
||||
}
|
||||
package require ibd_ibtst
|
||||
|
||||
rlc log " A1: data rem access --------------------------------"
|
||||
$cpu cp \
|
||||
-wa [cpu0 imap it.data] \
|
||||
-wal [cpu0 imap it.data] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr ] \
|
||||
-wibr it.data 0x1234 \
|
||||
-ribr it.stat -edata [regbld ibd_ibtst::STAT racc cacc be1 be0 we ] \
|
||||
@ -68,7 +69,7 @@ $cpu cp \
|
||||
-wr1 [expr {[cpu0 imap it.data] + 1}] \
|
||||
-wr2 0xdead \
|
||||
-wpc 02000 \
|
||||
-wa [cpu0 imap it.data] \
|
||||
-wal [cpu0 imap it.data] \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr remr locw locr ]
|
||||
|
||||
# step through code and check
|
||||
@ -101,7 +102,7 @@ rlc log " A4: data cpu write -> rem read (busy=8) ------------"
|
||||
$cpu cp \
|
||||
-wr2 0xdead \
|
||||
-wpc 02000 \
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr dlyw dlyr remr locw locr ]
|
||||
-wreg it.cntl [regbld ibd_ibtst::CNTL fclr bsyw bsyr remr locw locr ]
|
||||
|
||||
# step through code and check (same sequence as above)
|
||||
$cpu cp \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user