1
0
mirror of https://github.com/wfjm/w11.git synced 2026-04-30 21:49:43 +00:00
Files
wfjm.w11/tools/tbench/dz11/test_dz11_loop.tcl
2019-07-08 09:18:35 +02:00

308 lines
10 KiB
Tcl

# $Id: test_dz11_loop.tcl 1178 2019-06-30 12:39:40Z mueller $
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
# Revision History:
# Date Rev Version Comment
# 2019-05-18 1150 1.0 Initial version
# 2019-05-11 1148 0.1 First draft
#
# Test DZ11 combined receiver + transmitter response
# ----------------------------------------------------------------------------
rlc log "test_dz11_loop: test dz11 receiver+transmit response ----------------"
package require ibd_dz11
if {![ibd_dz11::setup]} {
rlc log " test_dz11_tx-W: device not found, test aborted"
return
}
rlc set statmask $rw11::STAT_DEFMASK
rlc set statvalue 0
set attndl [expr {1<<$ibd_dz11::ANUM}]
set attncpu [expr {1<<$rw11::ANUM}]
# -- Section A ---------------------------------------------------------------
rlc log " A1: init dz11 ---------------------------------------------"
# - issue csr.clr
# - remember 'awdth' retrieved from rcsr for later tests
# - set rlim's to 0, clear fifos
# - harvest any dangling attn
$cpu cp \
-wma dza.csr [regbld ibd_dz11::CSR clr] \
-ribr dza.csr dzcntl \
-wibr dza.csr [regbld ibd_dz11::RRLIMW {rrlim 0} {trlim 0} \
rcl tcl {func "SRLIM"}]
set awdth [regget ibd_dz11::RCNTLR(awdth) $dzcntl]
rlc exec -attn
rlc wtlam 0.
rlc log " A2: backend -> cpu -> backend loop ------------------------"
# load test code
# rx enable lines 1,3,5
# store chars in line buffers
# transmit all received buffers
$cpu ldasm -lst lst -sym sym {
.include |lib/defs_cpu.mac|
.include |lib/defs_dz.mac|
.include |lib/vec_cpucatch.mac|
.include |lib/vec_devcatch.mac|
;
. = va.dzr ; setup DZ11 receiver interrupt vector
.word vh.dzr
.word cp.pr7
;
. = va.dzt ; setup DZ11 transmitter interrupt vector
.word vh.dzt
.word cp.pr7
;
. = 1000 ; code area
stack:
;
start: spl 7
mov #<dz.tie!dz.rie!dz.mse>,@#dz.csr ; start dz11
mov #<dz.rxo!dz.f96!dz.cl8!5>,@#dz.lpr ; rxon line 5
mov #<dz.rxo!dz.f96!dz.cl8!3>,@#dz.lpr ; rxon line 3
mov #<dz.rxo!dz.f96!dz.cl8!1>,@#dz.lpr ; rxon line 1
spl 0
1$: wait
br 1$
;
vh.dzr: mov @#dz.rbu,r0 ; read rbuf
bmi 1$ ; valid ?
rti
1$: inc rxcnt ; count chars
mov r0,r1
swab r1
bic #177770,r1 ; line number
asl r1 ; word offset
mov wrptr(r1),r2 ; wr ptr to line buffer
movb r0,(r2)+ ; store
mov r2,wrptr(r1)
asr r1 ; byte offset again
bisb lpat(r1),@#dz.len ; tx enable line
br vh.dzr ; go for next
;
vh.dzt: movb @#dz.csr+1,r1 ; get tline
bic #177770,r1
asl r1 ; word offset
mov rdptr(r1),r2 ; rd ptr to line buffer
cmp r2,wrptr(r1) ; chars to go ?
bne 1$
asr r1 ; if not back to byte offset
bicb lpat(r1),@#dz.len ; tx disable line
rti
1$: inc txcnt ; count chars
movb (r2)+,@#dz.tbu ; send char
mov r2,rdptr(r1)
cmp txcnt,#18.
beq 2$
rti
2$: halt
stop:
;
rxcnt: .word 0
txcnt: .word 0
lpat: .byte ^b00000001,^b00000010,^b00000100,^b00001000
.byte ^b00010000,^b00100000,^b01000000,^b10000000
rdptr: .word line0,line1,line2,line3,line4,line5,line6,line7
wrptr: .word line0,line1,line2,line3,line4,line5,line6,line7
line0: .blkb 32.
line1: .blkb 32.
line2: .blkb 32.
line3: .blkb 32.
line4: .blkb 32.
line5: .blkb 32.
line6: .blkb 32.
line7: .blkb 32.
}
#puts $lst
rw11::asmrun $cpu sym
$cpu cp \
-wbibr dza.tdr [list \
[regbld ibd_dz11::RFDAT {line 1} {data 0x11} ] \
[regbld ibd_dz11::RFDAT {line 3} {data 0x31} ] \
[regbld ibd_dz11::RFDAT {line 5} {data 0x51} ] \
[regbld ibd_dz11::RFDAT {line 1} {data 0x12} ] \
[regbld ibd_dz11::RFDAT {line 3} {data 0x32} ]]
$cpu cp \
-wbibr dza.tdr [list \
[regbld ibd_dz11::RFDAT {line 5} {data 0x52} ] \
[regbld ibd_dz11::RFDAT {line 1} {data 0x13} ] \
[regbld ibd_dz11::RFDAT {line 3} {data 0x33} ] \
[regbld ibd_dz11::RFDAT {line 5} {data 0x53} ] \
[regbld ibd_dz11::RFDAT {line 1} {data 0x14} ]]
$cpu cp \
-wbibr dza.tdr [list \
[regbld ibd_dz11::RFDAT {line 3} {data 0x34} ] \
[regbld ibd_dz11::RFDAT {line 5} {data 0x54} ] \
[regbld ibd_dz11::RFDAT {line 1} {data 0x15} ] \
[regbld ibd_dz11::RFDAT {line 3} {data 0x35} ] \
[regbld ibd_dz11::RFDAT {line 5} {data 0x55} ] \
[regbld ibd_dz11::RFDAT {line 1} {data 0x16} ] \
[regbld ibd_dz11::RFDAT {line 3} {data 0x36} ] \
[regbld ibd_dz11::RFDAT {line 5} {data 0x56} ]]
rw11::asmwait $cpu sym
#puts [rw11::cml $cpu]
# expect as data
# 4 cal message (csr changed, mse set; 3 times rxon update)
# 18 char message (in random order)
$cpu cp \
-ribr dza.tcr -edata [regbldkv ibd_dz11::RFUSE rfuse 0 tfuse 22] \
-rbibr dza.tdr 4 -edata [list \
[regbldkv ibd_dz11::RFDAT val 1 last 0 cal 1 \
line $ibd_dz11::CAL_CSR data [regbld ibd_dz11::CSR mse]] \
[regbldkv ibd_dz11::RFDAT val 1 last 0 cal 1 \
line $ibd_dz11::CAL_RXON data 040] \
[regbldkv ibd_dz11::RFDAT val 1 last 0 cal 1 \
line $ibd_dz11::CAL_RXON data 050] \
[regbldkv ibd_dz11::RFDAT val 1 last 0 cal 1 \
line $ibd_dz11::CAL_RXON data 052] \
] \
-rbibr dza.tdr 18 tdata
# setup line - char list
set texpect {
{}
{0x11 0x12 0x13 0x14 0x15 0x16}
{}
{0x31 0x32 0x33 0x34 0x35 0x36}
{}
{0x51 0x52 0x53 0x54 0x55 0x56}
{}
{}
}
set tcount {0 0 0 0 0 0 0 0}
foreach tword $tdata {
#puts [regtxt ibd_dz11::RFDAT $tword]
set line [regget ibd_dz11::RFDAT(line) $tword]
set data [regget ibd_dz11::RFDAT(data) $tword]
set cind [lindex $tcount $line]
set cexp [lindex $texpect $line $cind]
if {$data != $cexp } {
rlc log "FAIL: mismatch for line=$line cind=$cind: got $data expect $cexp"
rlc errcnt -inc
}
lset tcount $line [expr {$cind + 1}]
}
# -- Section B ---------------------------------------------------------------
rlc log " B1: cpu -> cpu loop using maintenance mode ----------------"
# re-init dz11
$cpu cp \
-wma dza.csr [regbld ibd_dz11::CSR clr] \
-wibr dza.csr [regbld ibd_dz11::RCNTLW rcl tcl]
# harvest any dangling attn
rlc exec -attn
rlc wtlam 0.
# load test code
# enable maintenance mode
# rx enable lines 6,5,3,1
# tx enable lines 6,5,3,1
# send a,b --> to line 6
# send A,B,C,D,E,F --> to line 5
# send 1,2,3 --> to line 3
# send 7,8 --> to line 1
# check received agains send chars
$cpu ldasm -lst lst -sym sym {
.include |lib/defs_cpu.mac|
.include |lib/defs_dz.mac|
.include |lib/vec_cpucatch.mac|
.include |lib/vec_devcatch.mac|
;
. = va.dzr ; setup DZ11 receiver interrupt vector
.word vh.dzr
.word cp.pr7
;
. = va.dzt ; setup DZ11 transmitter interrupt vector
.word vh.dzt
.word cp.pr7
;
. = 1000 ; code area
stack:
;
start: spl 7
mov #<dz.tie!dz.rie!dz.mse!dz.mai>,@#dz.csr ; start dz11
movb #^b01101010,@#dz.len ; tx ena lines 6,5,3,1
mov #<dz.rxo!dz.f96!dz.cl8!6>,@#dz.lpr ; rxon line 6
mov #<dz.rxo!dz.f96!dz.cl8!5>,@#dz.lpr ; rxon line 5
mov #<dz.rxo!dz.f96!dz.cl8!3>,@#dz.lpr ; rxon line 3
mov #<dz.rxo!dz.f96!dz.cl8!1>,@#dz.lpr ; rxon line 1
spl 0
1$: wait
br 1$
;
vh.dzt: movb @#dz.csr+1,r1 ; get tline
bic #177770,r1
asl r1 ; word offset
mov tlptr(r1),r2 ; tx ptr to char for line
tstb (r2) ; end of transmission ?
bne 1$
asr r1 ; byte offset again
bicb lpat(r1),@#dz.len ; and disable line
rti
1$: movb (r2)+,@#dz.tbu ; send next char
mov r2,tlptr(r1)
rti
vh.dzr: mov @#dz.rbu,r0 ; read rbuf
bmi 1$ ; valid ?
cmp #nchar,rcnt ; all received ?
beq 3$ ; then quit
rti
1$: inc rcnt ; count chars
mov r0,r1
swab r1
bic #177770,r1 ; line number
asl r1 ; word offset
mov rlptr(r1),r2 ; rx ptr to char for line
cmpb r0,(r2)+ ; match ?
beq 2$
halt ; if not error halt
2$: mov r2,rlptr(r1)
br vh.dzr ; go for next
;
3$: halt
stop:
;
lpat: .byte ^b00000001,^b00000010,^b00000100,^b00001000
.byte ^b00010000,^b00100000,^b01000000,^b10000000
tlptr: .word line0,line1,line2,line3,line4,line5,line6,line7
line0: .asciz //
line1: .asciz /78/
line2: .asciz //
line3: .asciz /123/
line4: .asciz //
line5: .asciz /ABCDEF/
line6: .asciz /ab/
line7: .asciz //
linee:
nchar = linee - line0 - 8.
;
.even
rcnt: .word 0
rlptr: .word line0,line1,line2,line3,line4,line5,line6,line7
}
#puts $lst
rw11::asmrun $cpu sym
rw11::asmwait $cpu sym
#puts [ibd_dz11::rdump]
#puts [rw11::cml $cpu]
# harvest any dangling attn
rlc exec -attn
rlc wtlam 0.