OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /w11
    from Rev 34 to Rev 33
    Reverse comparison

Rev 34 → Rev 33

/trunk/tools/asm-11/lib/vec_cpucatch.mac
1,8 → 1,8
; $Id: vec_cpucatch.mac 710 2015-08-31 06:19:56Z mueller $
; $Id: vec_cpucatch.mac 503 2013-04-06 19:44:13Z mueller $
; Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
; License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
;
; vector catcher for basic cpu interrupts
; vector catcher for the basic cpu interrupts
;
. = 000004
v..iit: .word v..iit+2 ; vec 4
trunk/tools/tcl/ibd_pc11 Property changes : Deleted: svn:ignore ## -1,34 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log -pkgIndex.tcl Index: trunk/tools/tcl/ibd_rl11/.cvsignore =================================================================== --- trunk/tools/tcl/ibd_rl11/.cvsignore (revision 34) +++ trunk/tools/tcl/ibd_rl11/.cvsignore (nonexistent) @@ -1 +0,0 @@ -pkgIndex.tcl Index: trunk/tools/tcl/ibd_rl11/util.tcl =================================================================== --- trunk/tools/tcl/ibd_rl11/util.tcl (revision 34) +++ trunk/tools/tcl/ibd_rl11/util.tcl (nonexistent) @@ -1,47 +0,0 @@ -# $Id: util.tcl 719 2015-12-27 09:45:43Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-12-26 719 1.0 Initial version -# - -package provide ibd_rl11 1.0 - -package require rlink -package require rw11util -package require rw11 - -namespace eval ibd_rl11 { - # - # setup register descriptions for ibd_rl11 --------------------------------- - # - - regdsc CS {err 15} {de 14} {e 13 4} {ds 9 2} {crdy 7} {ie 6} {ba 5 2} \ - {func 3 3 "s:NOOP:WCHK:GS:SEEK:RHDR:WR:RD:RNHC"} \ - {drdy 0} - regdsc RCS {mprem 15 5} {mploc 10 3} {ena_mprem 5} {ena_mploc 4} - - variable FUNC_NOOP [bvi b3 "000"] - variable FUNC_WCHK [bvi b3 "001"] - variable FUNC_GS [bvi b3 "010"] - variable FUNC_SEEK [bvi b3 "011"] - variable FUNC_RHDR [bvi b3 "100"] - variable FUNC_WR [bvi b3 "101"] - variable FUNC_RD [bvi b3 "110"] - variable FUNC_RNHC [bvi b3 "111"] - - rw11util::regmap_add ibd_rl11 rl?.cs {l? CS r? RCS} - - variable ANUM 5 -} Index: trunk/tools/tcl/ibd_rl11 =================================================================== --- trunk/tools/tcl/ibd_rl11 (revision 34) +++ trunk/tools/tcl/ibd_rl11 (nonexistent)
trunk/tools/tcl/ibd_rl11 Property changes : Deleted: svn:ignore ## -1,34 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log -pkgIndex.tcl Index: trunk/tools/tcl/ibd_rk11/.cvsignore =================================================================== --- trunk/tools/tcl/ibd_rk11/.cvsignore (revision 34) +++ trunk/tools/tcl/ibd_rk11/.cvsignore (nonexistent) @@ -1 +0,0 @@ -pkgIndex.tcl Index: trunk/tools/tcl/ibd_rk11/util.tcl =================================================================== --- trunk/tools/tcl/ibd_rk11/util.tcl (revision 34) +++ trunk/tools/tcl/ibd_rk11/util.tcl (nonexistent) @@ -1,57 +0,0 @@ -# $Id: util.tcl 719 2015-12-27 09:45:43Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-12-26 719 1.0 Initial version -# - -package provide ibd_rk11 1.0 - -package require rlink -package require rw11util -package require rw11 - -namespace eval ibd_rk11 { - # - # setup register descriptions for ibd_rk11 --------------------------------- - # - - regdsc DS {id 15 3} {hden 11} {dru 10} {sin 9} {sok 8} {dry 7} \ - {adry 6} {wps 5} {scsa 4} {sc 3 4} - regdsc ER {dre 15} {ovr 14} {wlo 13} {pge 11} \ - {nxm 10} {nxd 7} {nxc 6} {nxs 5} {cse 1} {wce 0} - regdsc CS {err 15} {he 14} {scp 13} {maint 12} {iba 11} {fmt 10} \ - {rwa 9} {sse 8} {rdy 7} {ide 6} {mex 5 2} \ - {func 3 3 "s:CRES:WR:RD:WCHK:SEEK:RCHK:DRES:WLCK"} \ - {go 0} - regdsc DA {drsel 15 3} {cyl 12 8} {sur 4} {sc 3 4} - regdsc RMR {rid 15 3} {crdone 11} {sbclr 10} {creset 9} {fdone 8} {sdone 7 8} - - variable FUNC_CRES [bvi b3 "000"] - variable FUNC_WR [bvi b3 "001"] - variable FUNC_RD [bvi b3 "010"] - variable FUNC_WCHK [bvi b3 "011"] - variable FUNC_SEEK [bvi b3 "100"] - variable FUNC_RCHK [bvi b3 "101"] - variable FUNC_DRES [bvi b3 "110"] - variable FUNC_WLCK [bvi b3 "111"] - - rw11util::regmap_add ibd_rk11 rk?.ds {?? DS} - rw11util::regmap_add ibd_rk11 rk?.er {?? ER} - rw11util::regmap_add ibd_rk11 rk?.cs {?? CS} - rw11util::regmap_add ibd_rk11 rk?.da {?? DA} - rw11util::regmap_add ibd_rk11 rk?.mr {r? RMR} - - variable ANUM 4 -} Index: trunk/tools/tcl/ibd_rk11 =================================================================== --- trunk/tools/tcl/ibd_rk11 (revision 34) +++ trunk/tools/tcl/ibd_rk11 (nonexistent)
trunk/tools/tcl/ibd_rk11 Property changes : Deleted: svn:ignore ## -1,34 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log -pkgIndex.tcl Index: trunk/tools/tcl/rw11util/regmap.tcl =================================================================== --- trunk/tools/tcl/rw11util/regmap.tcl (revision 34) +++ trunk/tools/tcl/rw11util/regmap.tcl (nonexistent) @@ -1,97 +0,0 @@ -# $Id: regmap.tcl 720 2015-12-28 14:52:45Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-12-28 720 1.0 Initial version -# 2015-12-26 719 0.1 First draft -# - -package provide rw11util 1.0 - -package require rlink -package require rwxxtpp - -namespace eval rw11util { - - variable regmap - array set regmap {} - variable regmap_loaded 0 - - # - # regmap_add: add a register definition - # - proc regmap_add {pack name amlist} { - variable regmap - if {[info exists regmap($name)]} { - error "E-regmap_add: register '$name' already defined" - } - - set regmap($name) [list $pack $amlist] - return "" - } - - # - # regmap_get: get a register definition - # - proc regmap_get {name am} { - variable regmap - variable regmap_loaded - - if {!$regmap_loaded} {regmap_load} - - foreach key [array names regmap] { - if {[string match $key $name]} { - set dsc $regmap($key) - set pack [lindex $dsc 0] - set amlist [lindex $dsc 1] - foreach {amp reg} $amlist { - if {[string match $amp $am]} { - package require $pack - return "${pack}::${reg}" - } - } - } - } - return "" - } - - # - # regmap_txt: get text representation of a register - # - proc regmap_txt {name am val} { - set rdsc [regmap_get $name $am] - if {$rdsc eq ""} return "" - return [regtxt $rdsc $val] - } - - # - # regmap_load: load all rw11 register definitions - # - proc regmap_load {} { - variable regmap_loaded - package require rw11 - package require ibd_dl11 - package require ibd_ibmon - package require ibd_lp11 - package require ibd_pc11 - package require ibd_rhrp - package require ibd_rk11 - package require ibd_rl11 - package require ibd_tm11 - set regmap_loaded 1 - return "" - } - - -} Index: trunk/tools/tcl/rw11util/.cvsignore =================================================================== --- trunk/tools/tcl/rw11util/.cvsignore (revision 34) +++ trunk/tools/tcl/rw11util/.cvsignore (nonexistent) @@ -1 +0,0 @@ -pkgIndex.tcl Index: trunk/tools/tcl/rw11util =================================================================== --- trunk/tools/tcl/rw11util (revision 34) +++ trunk/tools/tcl/rw11util (nonexistent)
trunk/tools/tcl/rw11util Property changes : Deleted: svn:ignore ## -1,34 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log -pkgIndex.tcl Index: trunk/tools/tcl/ibd_dl11/.cvsignore =================================================================== --- trunk/tools/tcl/ibd_dl11/.cvsignore (revision 34) +++ trunk/tools/tcl/ibd_dl11/.cvsignore (nonexistent) @@ -1 +0,0 @@ -pkgIndex.tcl Index: trunk/tools/tcl/ibd_dl11/util.tcl =================================================================== --- trunk/tools/tcl/ibd_dl11/util.tcl (revision 34) +++ trunk/tools/tcl/ibd_dl11/util.tcl (nonexistent) @@ -1,38 +0,0 @@ -# $Id: util.tcl 719 2015-12-27 09:45:43Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-12-26 719 1.0 Initial version -# - -package provide ibd_dl11 1.0 - -package require rlink -package require rw11util -package require rw11 - -namespace eval ibd_dl11 { - # - # setup register descriptions for ibd_dl11 --------------------------------- - # - - regdsc RCSR {done 7} {ie 6} - regdsc RRCSR {done 7} {ie 6} {rlim 14 3} - - regdsc XCSR {done 7} {ie 6} {maint 2} - - rw11util::regmap_add ibd_dl11 tt?.rcsr {l? RCSR r? RRCSR} - rw11util::regmap_add ibd_dl11 tt?.xcsr {?? XCSR} - -} Index: trunk/tools/tcl/ibd_dl11 =================================================================== --- trunk/tools/tcl/ibd_dl11 (revision 34) +++ trunk/tools/tcl/ibd_dl11 (nonexistent)
trunk/tools/tcl/ibd_dl11 Property changes : Deleted: svn:ignore ## -1,34 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log -pkgIndex.tcl Index: trunk/tools/tcl/ibd_lp11/.cvsignore =================================================================== --- trunk/tools/tcl/ibd_lp11/.cvsignore (revision 34) +++ trunk/tools/tcl/ibd_lp11/.cvsignore (nonexistent) @@ -1 +0,0 @@ -pkgIndex.tcl Index: trunk/tools/tcl/ibd_lp11/util.tcl =================================================================== --- trunk/tools/tcl/ibd_lp11/util.tcl (revision 34) +++ trunk/tools/tcl/ibd_lp11/util.tcl (nonexistent) @@ -1,36 +0,0 @@ -# $Id: util.tcl 719 2015-12-27 09:45:43Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-12-26 719 1.0 Initial version -# - -package provide ibd_lp11 1.0 - -package require rlink -package require rw11util -package require rw11 - -namespace eval ibd_lp11 { - # - # setup register descriptions for ibd_lp11 --------------------------------- - # - - regdsc CSR {err 15} {done 7} {ie 6} - - rw11util::regmap_add ibd_lp11 lp?.rcsr {?? CSR} - - variable ANUM 8 - -} Index: trunk/tools/tcl/ibd_lp11 =================================================================== --- trunk/tools/tcl/ibd_lp11 (revision 34) +++ trunk/tools/tcl/ibd_lp11 (nonexistent)
trunk/tools/tcl/ibd_lp11 Property changes : Deleted: svn:ignore ## -1,34 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log -pkgIndex.tcl Index: trunk/tools/tcl/rutil/fileio.tcl =================================================================== --- trunk/tools/tcl/rutil/fileio.tcl (revision 34) +++ trunk/tools/tcl/rutil/fileio.tcl (nonexistent) @@ -1,55 +0,0 @@ -# $Id: fileio.tcl 705 2015-07-26 21:25:42Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-07-17 701 1.0 Initial version -# - -package provide rutil 1.0 - -package require rutiltpp - -namespace eval rutil { - # - # tofile: write a variable to file ----------------------------------------- - # - proc tofile {fname val} { - if [catch {open $fname w} fout] { - error "Cannot open $fname for writing" - } else { - puts $fout $val - close $fout - } - return "" - } - - # - # fromfile: read a variable from file -------------------------------------- - # - proc fromfile {fname} { - if [catch {open $fname r} fin] { - error "Cannot open $fname for reading" - } else { - set rval [read -nonewline $fin] - close $fin - } - return $rval - } - - namespace export tofile - namespace export fromfile -} - -namespace import rutil::tofile -namespace import rutil::fromfile Index: trunk/tools/tcl/rutil/regdsc.tcl =================================================================== --- trunk/tools/tcl/rutil/regdsc.tcl (revision 34) +++ trunk/tools/tcl/rutil/regdsc.tcl (nonexistent) @@ -1,304 +0,0 @@ -# $Id: regdsc.tcl 705 2015-07-26 21:25:42Z mueller $ -# -# Copyright 2011-2015 by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-07-24 705 1.1 add regbldkv,reggetkv; regtxt: add {all 0} arg -# add s:.. ptyp to support symbolic field values -# 2015-06-26 695 1.0 Initial version (with reg* procs from util.tcl) -# - -package provide rutil 1.0 - -package require rutiltpp - -namespace eval rutil { - # - # regdsc: setup a register descriptor -------------------------------------- - # - proc regdsc {rdscName args} { - upvar $rdscName rdsc - set fbegmax -1 - set mskftot 0 - - foreach arg $args { - set nopt [llength $arg] - if {$nopt < 2 || $nopt > 4} { - error "regdsc-E: wrong number of elements in field dsc \"$arg\"" - } - set fnam [lindex $arg 0] - set fbeg [lindex $arg 1] - set flen [lindex $arg 2] - if {$nopt < 3} { set flen 1 } - set ptyp [lindex $arg 3] - if {$nopt < 4} { set ptyp "b" } - set popt {} - set plen 0 - - set mskb [expr {( 1 << $flen ) - 1}] - set mskf [expr {$mskb << ( $fbeg - ( $flen - 1 ) )}] - - if {[string match "s:*" $ptyp]} { - set popt [lrange [split $ptyp ":"] 1 end] - set ptyp "s" - if { [llength $popt] != ( 1 << $flen ) } { - error "regdsc-E: bad value count for for \"$rdscName:$fnam\"" - } - foreach nam $popt { - if {![string match {[A-Za-z]*} $nam]} { - error "regdsc-E: bad name \"$name\" for for \"$rdscName:$fnam\"" - } - set nlen [string length $nam] - if {$nlen > $plen} {set plen $nlen} - } - lappend popt $plen - - } else { - switch $ptyp { - b {} - o - - x {set plen [string length [format "%${ptyp}" $mskb]] - set popt "%${plen}.${plen}${ptyp}"} - d {set plen [string length [format "%d" $mskb]] - set popt "%${plen}d"} - - {} - default {error "regdsc-E: bad ptyp \"$ptyp\" for \"$rdscName:$fnam\""} - } - } - - if {( $flen - 1 ) > $fbeg} { - error "regdsc-E: bad field dsc \"$arg\": length > start position" - } - - set rdsc($fnam) [list $fbeg $flen $mskb $mskf $ptyp $popt] - - if {$fbegmax < $fbeg} {set fbegmax $fbeg} - set mskftot [expr {$mskftot | $mskf}] - } - - set rdsc(-n) [lsort -decreasing -command regdsc_sort \ - [array names rdsc -regexp {^[^-]}] ] - - set rdsc(-w) [expr {$fbegmax + 1}] - set rdsc(-m) $mskftot - - return "" - } - - proc regdsc_sort {a b} { - upvar rdsc urdsc - return [expr {[lindex $urdsc($a) 0] - [lindex $urdsc($b) 0] }] - } - - # - # regdsc_print: print register descriptor ---------------------------------- - # - proc regdsc_print {rdscName} { - upvar $rdscName rdsc - set rval "" - if {! [info exists rdsc]} { - error "can't access \"$rdscName\": variable doesn't exist" - } - - set rsize $rdsc(-w) - - append rval " field bits bitmask" - - foreach fnam $rdsc(-n) { - set fdsc $rdsc($fnam) - set fbeg [lindex $fdsc 0] - set flen [lindex $fdsc 1] - set fmskf [lindex $fdsc 3] - set ptyp [lindex $fdsc 4] - set popt [lindex $fdsc 5] - set line " " - append line [format "%8s" $fnam] - if {$flen > 1} { - append line [format " %2d:%2d" $fbeg [expr {$fbeg - $flen + 1}]] - } else { - append line [format " %2d" $fbeg] - } - append line " " - append line [pbvi "b${rsize}" $fmskf] - if {$ptyp eq "s"} { - append line " " [join [lrange $popt 0 end-1] ":"] - } else { - if {$popt ne ""} {append line " $popt"} - } - append rval "\n$line" - } - return $rval - } - - # - # regbld: build a register value from list of keys or {key val} pairs ------ - # - proc regbld {rdscName args} { - upvar $rdscName rdsc - set kvl {} - foreach arg $args { - set narg [llength $arg] - if {$narg < 1 || $narg > 2} { - error "regbld-E: field specifier \"$arg\": must be 'name \[val\]'" - } - set fnam [lindex $arg 0] - if {! [info exists rdsc($fnam)] } { - error "regbld-E: field specifier \"$arg\": field unknown" - } - - set fval 1 - if {$narg == 1} { - set flen [lindex $rdsc($fnam) 1] - if {$flen > 1} { - error "regbld-E: field specifier \"$arg\": no value and flen>1" - } - } else { - set fval [lindex $arg 1] - } - lappend kvl $fnam $fval - } - return [regbldkv rdsc {*}$kvl] - } - - # - # regbldkv: build a register value from key value list --------------------- - # - proc regbldkv {rdscName args} { - upvar $rdscName rdsc - if {[llength $args] % 2 != 0} { - error "regbldkv-E: odd number of optional key value args" - } - - set rval 0 - foreach {fnam fval} $args { - if {! [info exists rdsc($fnam)] } { - error "regbldkv-E: field specifier \"$fnam\": field unknown" - } - set fbeg [lindex $rdsc($fnam) 0] - set flen [lindex $rdsc($fnam) 1] - set mskb [lindex $rdsc($fnam) 2] - set ptyp [lindex $rdsc($fnam) 4] - set popt [lindex $rdsc($fnam) 5] - - if {$ptyp eq "s" && ! [string is integer $fval]} { - set nind [lsearch [lrange $popt 0 end-1] $fval] - if {$nind < 0} { - error "regbldkv-E: \"$fval\" unknown value name for \"$fnam\"" - } - set fval $nind - } - - if {$fval >= 0} { - if {$fval > $mskb} { - error "regbldkv-E: field specifier \"$fnam\": $fval > $mskb" - } - } else { - if {$fval < [expr {- $mskb}]} { - error "regbldkv-E: field specifier \"$fnam\": $fval < -$mskb]" - } - set fval [expr {$fval & $mskb}] - } - set rval [expr {$rval | $fval << ( $fbeg - ( $flen - 1 ) )}] - - } - return $rval - } - - # - # regget: extract field from a register value ------------------------------ - # - proc regget {fdscName val} { - upvar $fdscName fdsc - if {! [info exists fdsc] } { - error "regget-E: field descriptor \"$fdscName\" unknown" - } - set fbeg [lindex $fdsc 0] - set flen [lindex $fdsc 1] - set mskb [lindex $fdsc 2] - return [expr {( $val >> ( $fbeg - ( $flen - 1 ) ) ) & $mskb}] - } - - # - # reggetkv: extract multiple fields to variables --------------------------- - # - proc reggetkv {rdscName val pref args} { - upvar $rdscName rdsc - if {[llength $args] == 0} {set args "*"} - foreach kpat $args { - set nvar 0 - foreach key [array names rdsc $kpat] { - if {[string match -* $key]} {continue} - upvar "${pref}${key}" var - set var [regget "rdsc($key)" $val] - incr nvar - } - if {$nvar == 0} { - error "reggetkv-E: no match for field name pattern \"$kpat\"" - } - } - } - - # - # regtxt: convert register value to a text string -------------------------- - # Note: mode currently only "" and "a" (show all fields) allowed - # maybe later also "th" (table head) and "tr" (table row) - # - proc regtxt {rdscName val {mode ""}} { - upvar $rdscName rdsc - set rval "" - - foreach fnam $rdsc(-n) { - set flen [lindex $rdsc($fnam) 1] - set ptyp [lindex $rdsc($fnam) 4] - set popt [lindex $rdsc($fnam) 5] - set fval [regget rdsc($fnam) $val] - - if {$ptyp eq "-" || ($ptyp ne "s" && $fval == 0 && $mode eq "")} {continue} - - if {$rval ne ""} {append rval " "} - append rval "${fnam}" - if {$ptyp eq "b" && $flen == 1 && $mode eq ""} {continue} - append rval ":" - - if {$ptyp eq "s"} { - set plen [lindex $popt end] - append rval [format "%-${plen}s" [lindex $popt $fval]] - } elseif {$ptyp eq "b"} { - append rval [pbvi b${flen} $fval] - } else { - append rval [format "${popt}" $fval] - } - } - return $rval - } - - # - # ! export reg... procs to global scope ------------------------------------ - # - - namespace export regdsc - namespace export regdsc_print - namespace export regbld - namespace export regbldkv - namespace export regget - namespace export reggetkv - namespace export regtxt -} - -namespace import rutil::regdsc -namespace import rutil::regdsc_print -namespace import rutil::regbld -namespace import rutil::regbldkv -namespace import rutil::regget -namespace import rutil::reggetkv -namespace import rutil::regtxt Index: trunk/tools/tcl/rutil/util.tcl =================================================================== --- trunk/tools/tcl/rutil/util.tcl (revision 34) +++ trunk/tools/tcl/rutil/util.tcl (revision 33) @@ -1,4 +1,4 @@ -# $Id: util.tcl 705 2015-07-26 21:25:42Z mueller $ +# $Id: util.tcl 689 2015-06-05 14:33:18Z mueller $ # # Copyright 2011-2015 by Walter F.J. Mueller # @@ -13,8 +13,6 @@ # # Revision History: # Date Rev Version Comment -# 2015-07-25 704 1.1.1 rename optlist2arr->args2opts, new logic, export it -# 2015-06-26 695 1.1 move reg* proc to regdsc.tcl # 2015-06-05 688 1.0.5 add dohook # 2015-03-28 660 1.0.4 add com8 and com16 # 2014-12-23 619 1.0.3 regget: add check for unknown field descriptor @@ -30,19 +28,17 @@ namespace eval rutil { # - # args2opts: process options arguments given as key value list ----------- + # optlist2arr: process options arguments given as key value list ----------- # - proc args2opts {optsName refs args} { - upvar $optsName opts - if {[llength $args] % 2 != 0} { - error "args2opts-E: odd number of optional key value args" - } - array set opts $refs - foreach {key value} $args { - if {[info exists opts($key)]} { - set opts($key) $value + proc optlist2arr {outarrname refarrname optlist} { + upvar $outarrname outarr + upvar $refarrname refarr + array set outarr [array get refarr] + foreach {key value} $optlist { + if {[info exists outarr($key)]} { + set outarr($key) $value } else { - error "args2opts-E: key $key not valid in optlist" + error "key $key not valid in optlist" } } return "" @@ -49,6 +45,167 @@ } # + # regdsc: setup a register descriptor -------------------------------------- + # + proc regdsc {name args} { + upvar $name rdsc + set fbegmax -1 + set mskftot 0 + + foreach arg $args { + set nopt [llength $arg] + if {$nopt < 2} { + error "wrong number of elements in field dsc \"$arg\"" + } + set fnam [lindex $arg 0] + set fbeg [lindex $arg 1] + set flen [lindex $arg 2] + if {$nopt < 3} { set flen 1 } + set popt [lindex $arg 3] + if {$nopt < 4} { set popt "b" } + + if {( $flen - 1 ) > $fbeg} { + error "error in field dsc \"$arg\": length > start position" + } + + set mskb [expr {( 1 << $flen ) - 1}] + set mskf [expr {$mskb << ( $fbeg - ( $flen - 1 ) )}] + set rdsc($fnam) [list $fbeg $flen $mskb $mskf $popt] + + if {$fbegmax < $fbeg} {set fbegmax $fbeg} + set mskftot [expr {$mskftot | $mskf}] + } + + set rdsc(-n) [lsort -decreasing -command regdsc_sort \ + [array names rdsc -regexp {^[^-]}] ] + + set rdsc(-w) [expr {$fbegmax + 1}] + set rdsc(-m) $mskftot + + return "" + } + + # + # regdsc_print: print register descriptor ---------------------------------- + # + proc regdsc_print {name} { + upvar $name rdsc + set rval "" + if {! [info exists rdsc]} { + error "can't access \"$name\": variable doesn't exist" + } + + set rsize $rdsc(-w) + + append rval " field bits bitmask" + + foreach fnam $rdsc(-n) { + set fdsc $rdsc($fnam) + set fbeg [lindex $fdsc 0] + set flen [lindex $fdsc 1] + set fmskf [lindex $fdsc 3] + set line " " + append line [format "%8s" $fnam] + if {$flen > 1} { + append line [format " %2d:%2d" $fbeg [expr {$fbeg - $flen + 1}]] + } else { + append line [format " %2d" $fbeg] + } + append line " " + append line [pbvi "b${rsize}" $fmskf] + append rval "\n$line" + } + return $rval + } + + proc regdsc_sort {a b} { + upvar rdsc urdsc + return [expr {[lindex $urdsc($a) 0] - [lindex $urdsc($b) 0] }] + } + + # + # regbld: build a register value from a list of fields --------------------- + # + proc regbld {name args} { + upvar $name rdsc + set rval 0 + foreach arg $args { + if {[llength $arg] < 1 || [llength $arg] > 2} { + error "error in field specifier \"$arg\": must be 'name [val]'" + } + set fnam [lindex $arg 0] + if {! [info exists rdsc($fnam)] } { + error "error in field specifier \"$arg\": field unknown" + } + set fbeg [lindex $rdsc($fnam) 0] + set flen [lindex $rdsc($fnam) 1] + + if {[llength $arg] == 1} { + if {$flen > 1} { + error "error in field specifier \"$arg\": no value and flen>1" + } + set mskf [lindex $rdsc($fnam) 3] + set rval [expr {$rval | $mskf}] + + } else { + set fval [lindex $arg 1] + set mskb [lindex $rdsc($fnam) 2] + if {$fval >= 0} { + if {$fval > $mskb} { + error "error in field specifier \"$arg\": value > $mskb" + } + } else { + if {$fval < [expr {- $mskb}]} { + error "error in field specifier \"$arg\": value < [expr -$mskb]" + } + set fval [expr {$fval & $mskb}] + } + set rval [expr {$rval | $fval << ( $fbeg - ( $flen - 1 ) )}] + } + + } + return $rval + } + + # + # regget: extract field from a register value ------------------------------ + # + proc regget {name val} { + upvar $name fdsc + if {! [info exists fdsc] } { + error "register field descriptor \"$name\" unknown" + } + set fbeg [lindex $fdsc 0] + set flen [lindex $fdsc 1] + set mskb [lindex $fdsc 2] + return [expr {( $val >> ( $fbeg - ( $flen - 1 ) ) ) & $mskb}] + } + + # + # regtxt: convert register value to a text string -------------------------- + # + proc regtxt {name val} { + upvar $name rdsc + set rval "" + + foreach fnam $rdsc(-n) { + set popt [lindex $rdsc($fnam) 4] + set fval [regget rdsc($fnam) $val] + if {$popt ne "-"} { + if {$rval ne ""} {append rval " "} + append rval "${fnam}:" + if {$popt eq "b"} { + set flen [lindex $rdsc($fnam) 1] + append rval [pbvi b${flen} $fval] + } else { + append rval [format "%${popt}" $fval] + } + } + } + return $rval + } + + # # errcnt2txt: returns "PASS" if 0 and "FAIL" otherwise --------------------- # proc errcnt2txt {errcnt} { @@ -102,10 +259,19 @@ return } - # ! export some procs to global scope -------------------------------------- + # + # ! export reg... procs to global scope ------------------------------------ + # - namespace export args2opts - + namespace export regdsc + namespace export regdsc_print + namespace export regbld + namespace export regget + namespace export regtxt } -namespace import rutil::args2opts +namespace import rutil::regdsc +namespace import rutil::regdsc_print +namespace import rutil::regbld +namespace import rutil::regget +namespace import rutil::regtxt
/trunk/tools/tcl/ibd_rhrp/util.tcl
1,4 → 1,4
# $Id: util.tcl 719 2015-12-27 09:45:43Z mueller $
# $Id: util.tcl 690 2015-06-07 18:23:51Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
13,7 → 13,6
#
# Revision History:
# Date Rev Version Comment
# 2015-12-26 719 1.0.2 add regmap_add defs
# 2015-06-06 690 1.0.1 rdump: all online units now shown by default
# 2015-03-21 659 1.0 Initial version
#
21,17 → 20,14
package provide ibd_rhrp 1.0
 
package require rlink
package require rw11util
package require rw11
 
namespace eval ibd_rhrp {
 
#
# setup register descriptions for ibd_rhrp ---------------------------------
#
regdsc CS1 {sc 15} {tre 14} {dva 11} {bae 9 2} {rdy 7} {ie 6} \
{func 5 5 "s:NOOP:UNL:SEEK:RECAL:DCLR:PORE:OFFS:RETC:PRES:PACK:FU12:FU13:SEAR:FU15:FU16:FU17:FU20:FU21:FU22:FU23:WCD:WCHD:FU26:FU27:WRITE:WHD:FU32:FU33:READ:RHD:FU36:FU37"} \
{go 0}
regdsc CS1 {sc 15} {tre 14} {dva 11} {bae 9 2} \
{rdy 7} {ie 6} {func 5 5} {go 0}
variable FUNC_NOOP [bvi b5 "00000"]
variable FUNC_UNL [bvi b5 "00001"]
variable FUNC_SEEK [bvi b5 "00010"]
50,15 → 46,13
variable FUNC_READ [bvi b5 "11100"]
variable FUNC_RHD [bvi b5 "11101"]
 
regdsc RCS1 {val 15 8} \
{func 5 5 "s:FU00:WUNIT:CUNIT:DONE:WIDLY:FU05:FU06:FU07:FU10:FU11:FU12:FU13:FU14:FU15:FU16:FU17:FU20:FU21:FU22:FU23:FU24:FU25:FU26:FU27:FU30:FU31:FU32:FU33:FU34:FU35:FU36:FU37"} \
{go 0}
regdsc RCS1 {val 15 8} {func 5 5} {go 0}
variable RFUNC_WUNIT [bvi b5 "00001"]
variable RFUNC_CUNIT [bvi b5 "00010"]
variable RFUNC_DONE [bvi b5 "00011"]
variable RFUNC_WIDLY [bvi b5 "00100"]
 
regdsc DA {ta 12 5 d} {sa 5 6 d}
regdsc DA {ta 12 5 2d} {sa 5 6 2d}
regdsc CS2 {wce 14} {ned 12} {nem 11} {pge 10} {or 7} {ir 6} \
{clr 5} {pat 4} {bai 3} {unit 2 3 d}
regdsc DS {ata 15} {erp 14} {pip 13} {mol 12} {wrl 11} {lbt 10} {dpr 8} \
65,7 → 59,7
{dry 7} {vv 6} {om 0}
regdsc ER1 {uns 14} {iae 10} {aoe 9} {rmr 2} {ilf 0}
regdsc AS {u3 3} {u2 2} {u1 1} {u0 0}
regdsc LA {sc 11 6 d}
regdsc LA {sc 11 6 2d}
regdsc OF {fmt 12} {eci 11} {hci 10} {odi 7} {off 6 7}
 
variable DTE_RP04 [bvi b3 "000"]
83,22 → 77,11
variable DT_RP07 020042
 
regdsc SN {d3 15 4 d} {d2 11 4 d} {d1 7 4 d} {d0 3 4 d}
regdsc OF {odi 7}
regdsc DC {dc 9 10 d}
 
regdsc CS3 {ie 6}
 
rw11util::regmap_add ibd_rhrp rp?.cs1 {l? CS1 rr CS1 rw RCS1}
rw11util::regmap_add ibd_rhrp rp?.da {?? DA}
rw11util::regmap_add ibd_rhrp rp?.cs2 {?? CS2}
rw11util::regmap_add ibd_rhrp rp?.ds {?? DS}
rw11util::regmap_add ibd_rhrp rp?.er1 {?? ER1}
rw11util::regmap_add ibd_rhrp rp?.as {?? AS}
rw11util::regmap_add ibd_rhrp rp?.la {?? LA}
rw11util::regmap_add ibd_rhrp rp?.of {?? OF}
rw11util::regmap_add ibd_rhrp rp?.sn {?? SN}
rw11util::regmap_add ibd_rhrp rp?.dc {?? DC}
rw11util::regmap_add ibd_rhrp rp?.cs3 {?? CS3}
 
variable ANUM 6
 
#
/trunk/tools/tcl/ibd_tm11/util.tcl
1,4 → 1,4
# $Id: util.tcl 719 2015-12-27 09:45:43Z mueller $
# $Id: $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
13,7 → 13,6
#
# Revision History:
# Date Rev Version Comment
# 2015-12-26 719 1.0.1 add regmap_add defs
# 2015-05-17 683 1.0 Initial version
#
 
20,7 → 19,6
package provide ibd_tm11 1.0
 
package require rlink
package require rw11util
package require rw11
 
namespace eval ibd_tm11 {
32,9 → 30,7
{onl 6} {bot 5} {wrl 2} {rew 1} {tur 0}
 
regdsc CR {err 15} {den 14 2} {ini 12} {pevn 11} {unit 10 3} \
{rdy 7} {ie 6} {ea 5 2} \
{func 3 3 "s:UNLOAD:READ:WRITE:WEOF:SFORW:SBACK:WRTEG:REWIND"} \
{go 0}
{rdy 7} {ie 6} {ea 5 2} {func 3 3} {go 0}
variable FUNC_UNLOAD [bvi b3 "000"]
variable FUNC_READ [bvi b3 "001"]
variable FUNC_WRITE [bvi b3 "010"]
44,18 → 40,13
variable FUNC_WRTEG [bvi b3 "110"]
variable FUNC_REWIND [bvi b3 "111"]
 
regdsc RCR {icmd 15} {pae 12} {rle 9} {bte 8} {nxm 7} {unit 5 2} \
{func 3 3 "s:FU0:WUNIT:DONE:FU3:FU4:FU5:FU6:FU7"} \
{go 0}
regdsc RCR {icmd 15} {pae 12} {rle 9} {bte 8} {nxm 7} \
{unit 5 2} {func 3 3} {go 0}
variable RFUNC_WUNIT [bvi b3 "001"]
variable RFUNC_DONE [bvi b3 "010"]
 
regdsc RRL {eof 10} {eot 9} {onl 8} {bot 7} {wrl 6} {rew 5} {unit 2 2}
 
rw11util::regmap_add ibd_tm11 tm?.sr {?? SR}
rw11util::regmap_add ibd_tm11 tm?.cr {l? CR rr CR rw RCR}
rw11util::regmap_add ibd_tm11 tm?.rl {r? RRL}
 
variable ANUM 7
 
#
/trunk/tools/tcl/rw11/tbench.tcl
1,4 → 1,4
# $Id: tbench.tcl 702 2015-07-19 17:36:09Z mueller $
# $Id: tbench.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
62,7 → 62,6
}
 
if {![file readable "$tbase/$fname"]} {
puts "-E: file $tbase/$fname not found or readable"
error "-E: file $tbase/$fname not found or readable"
}
 
/trunk/tools/tcl/rw11/util.tcl
1,4 → 1,4
# $Id: util.tcl 722 2015-12-30 19:45:46Z mueller $
# $Id: util.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
13,8 → 13,6
#
# Revision History:
# Date Rev Version Comment
# 2015-12-30 721 1.3.6 BUGFIX: setup_ostr: adopt to use args2opts
# 2015-07-25 704 1.3.5 use args2opts
# 2015-05-17 683 1.3.4 setup_sys: add TM11
# 2015-05-15 682 1.3.3 BUGFIX: setup_cpu: fix cpu reset (now -stop -creset)
# 2015-05-08 675 1.3.2 w11a start/stop/suspend overhaul
82,9 → 80,10
#
# setup_tt: setup terminals ------------------------------------------------
#
proc setup_tt {{cpu "cpu0"} args} {
proc setup_tt {{cpu "cpu0"} {optlist {}}} {
# process and check options
args2opts opt {ndl 2 dlrlim 0 ndz 0 to7bit 0 app 0 nbck 1} {*}$args
array set optref { ndl 2 dlrlim 0 ndz 0 to7bit 0 app 0 nbck 1}
rutil::optlist2arr opt optref $optlist
 
# check option values
if {$opt(ndl) < 1 || $opt(ndl) > 2} {
128,9 → 127,10
#
# setup_ostr: setup Ostream device (currently lp or pp) --------------------
#
proc setup_ostr {cpu unit args} {
proc setup_ostr {cpu unit optlist} {
# process and check options
args2opts opt {app 0 nbck 1} {*}$args
array set optref { app 0 nbck 1}
rutil::optlist2arr opt optref $optlist
 
# setup attach url options
set urloptlist {}
154,21 → 154,23
#
# setup_lp: setup printer --------------------------------------------------
#
proc setup_lp {{cpu "cpu0"} args} {
proc setup_lp {{cpu "cpu0"} {optlist {}}} {
# process and check options
args2opts opt {nlp 1 app 0 nbck 1} {*}$args
array set optref { nlp 1 app 0 nbck 1}
rutil::optlist2arr opt optref $optlist
if {$opt(nlp) != 0} {
setup_ostr $cpu "lpa0" app $opt(app) nbck $opt(nbck)
setup_ostr $cpu "lpa0" [list app $opt(app) nbck $opt(nbck)]
}
}
#
# setup_pp: setup paper puncher --------------------------------------------
#
proc setup_pp {{cpu "cpu0"} args} {
proc setup_pp {{cpu "cpu0"} {optlist {}}} {
# process and check options
args2opts opt {npc 1 app 0 nbck 1} {*}$args
array set optref { npc 1 app 0 nbck 1}
rutil::optlist2arr opt optref $optlist
if {$opt(npc) != 0} {
setup_ostr $cpu "pp" app $opt(app) nbck $opt(nbck)
setup_ostr $cpu "pp" [list app $opt(app) nbck $opt(nbck)]
}
}
 
205,18 → 207,4
return ""
}
 
#
# ps2txt: convert ps to text -----------------------------------------------
#
proc ps2txt {ps} {
reggetkv rw11::PSW $ps "ps_" cmode pmode rset pri tflag n z v c
set p_cmode [lindex {k s ? u} $ps_cmode]
set p_pmode [lindex {k s ? u} $ps_pmode]
set p_tflag [expr {$ps_tflag ? "t" : "-"}]
set p_cc [expr {$ps_n ? "n" : "."}]
append p_cc [expr {$ps_z ? "z" : "."}]
append p_cc [expr {$ps_v ? "v" : "."}]
append p_cc [expr {$ps_c ? "c" : "."}]
return "${p_cmode}${p_pmode}${ps_rset}${ps_pri}${p_tflag}${p_cc}"
}
}
/trunk/tools/tcl/rw11/defs.tcl
1,6 → 1,6
# $Id: defs.tcl 719 2015-12-27 09:45:43Z mueller $
# $Id: defs.tcl 621 2014-12-26 21:20:05Z mueller $
#
# Copyright 2014-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# Copyright 2014- 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,8 → 13,6
#
# Revision History:
# Date Rev Version Comment
# 2015-12-26 719 1.0.2 add regmap_add defs; add CNTRL def
# 2015-09-06 710 1.0.1 regdsc PSW: add silent n,z,v,c; *mode syms; fix tflag
# 2014-03-07 553 1.0 Initial version (extracted from util.tcl)
#
 
22,7 → 20,6
 
package require rlink
package require rwxxtpp
package require rw11util
 
namespace eval rw11 {
#
29,8 → 26,7
# setup cp interface register descriptions for w11a -----------------------
#
regdsc CP_CNTL {func 3 0}
regdsc CP_STAT {suspext 9} {suspint 8} {rust 7 4} \
{susp 3} {go 2} {merr 1} {err 0}
regdsc CP_STAT {rust 7 4} {halt 3} {go 2} {merr 1} {err 0}
regdsc CP_AH {ubm 7} {p22 6} {addr 5 6}
#
# setup w11a register descriptions -----------------------------------------
37,9 → 33,7
#
# PSW - processor status word --------------------------------------
set A_PSW 0177776
regdsc PSW {cmode 15 2 "s:k:s:x:u"} {pmode 13 2 "s:k:s:x:u"} \
{rset 11} {pri 7 3 "d"} {tflag 4} {cc 3 4} \
{n 3 1 "-"} {z 2 1 "-"} {v 1 1 "-"} {c 0 1 "-"}
regdsc PSW {cmode 15 2} {pmode 13 2} {rset 11} {pri 7 3} {tflag 3} {cc 3 4}
#
# SSR0 - MMU Segment Status Register #0 ----------------------------
set A_SSR0 0177572
75,22 → 69,6
set A_CPUERR 0177766
regdsc CPUERR {illhlt 7} {adderr 6} {nxm 5} {iobto 4} {ysv 3} {rsv 2}
#
# CNTRL - Memory System Control Register -------------------------
set A_CNTRL 0177746
regdsc CNTRL {frep 5 2} {fmiss 3 2} {disutrap 1} {distrap 0}
#
# setup regmap
#
rw11util::regmap_add rw11 psw {?? PSW}
rw11util::regmap_add rw11 ssr0 {?? SSR0}
rw11util::regmap_add rw11 ssr1 {?? SSR1}
rw11util::regmap_add rw11 ssr3 {?? SSR3}
rw11util::regmap_add rw11 sdr???.? {?? SDR}
rw11util::regmap_add rw11 pirq {?? PIRQ}
rw11util::regmap_add rw11 cpuerr {?? CPUERR}
#
rw11util::regmap_add rw11 cntrl {?? CNTRL}
#
# other w11a definitions ---------------------------------------------------
# Interrupt vectors -----------------------------------------------
#
/trunk/tools/tcl/rw11/asm.tcl
1,6 → 1,6
# $Id: asm.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: asm.tcl 575 2014-07-27 20:55:41Z mueller $
#
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# Copyright 2013-2014 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,7 → 13,6
#
# Revision History:
# Date Rev Version Comment
# 2015-07-25 704 1.0.4 asmrun,asmtreg,asmtmem: use args in proc definition
# 2014-07-26 575 1.0.3 add asmwait_tout variable, use in asmwait
# 2014-07-10 568 1.0.2 add errcnt return for asmtreg and asmtmem
# 2014-03-01 552 1.0.1 BUGFIX: asmwait checks now pc if stop: defined
32,38 → 31,39
#
# asmrun: run a program loaded with ldasm
#
proc asmrun {cpu symName args} {
proc asmrun {cpu symName opts} {
upvar 1 $symName sym
array set opts {r0 0 r1 0 r2 0 r3 0 r4 0 r5 0}
array set opts $args
array set defs {r0 0 r1 0 r2 0 r3 0 r4 0 r5 0}
array set defs $opts
 
if {![info exists opts(pc)]} {
if {![info exists defs(pc)]} {
if {[info exists sym(start)]} {
set opts(pc) $sym(start)
set defs(pc) $sym(start)
} else {
error "neither opts(pc) nor sym(start) given"
}
}
 
if {![info exists opts(sp)]} {
if {![info exists defs(sp)]} {
if {[info exists sym(stack)]} {
set opts(sp) $sym(stack)
set defs(sp) $sym(stack)
} elseif {[info exists sym(start)]} {
set opts(sp) $sym(start)
set defs(sp) $sym(start)
} else {
error "neither opts(sp) nor sym(stack) or sym(start) given"
}
}
 
$cpu cp -wr0 $opts(r0) \
-wr1 $opts(r1) \
-wr2 $opts(r2) \
-wr3 $opts(r3) \
-wr4 $opts(r4) \
-wr5 $opts(r5) \
-wsp $opts(sp) \
-stapc $opts(pc)
$cpu cp -wr0 $defs(r0) \
-wr1 $defs(r1) \
-wr2 $defs(r2) \
-wr3 $defs(r3) \
-wr4 $defs(r4) \
-wr5 $defs(r5)
 
$cpu cp -wsp $defs(sp) \
-stapc $defs(pc)
 
return ""
}
 
86,14 → 86,14
#
# asmtreg: test registers after running a program loaded with ldasm
#
proc asmtreg {cpu args} {
array set opts $args
set clist {}
foreach key [lsort [array names opts]] {
lappend clist "-r${key}" -edata $opts($key)
proc asmtreg {cpu opts} {
array set defs $opts
set cpcmd ""
foreach key [lsort [array names defs]] {
append cpcmd " -r$key -edata $defs($key)"
}
set errbeg [rlc errcnt]
$cpu cp {*}$clist
eval $cpu cp $cpcmd
return [expr [rlc errcnt] - $errbeg]
}
 
100,18 → 100,13
#
# asmtmem: test memory after running a program loaded with ldasm
#
proc asmtmem {cpu args} {
set clist {}
foreach {base vlist} $args {
set nw [llength $vlist]
if {$nw == 0} {
error "asmtreg called with empty value list"
}
lappend clist -wal $base
lappend clist -brm $nw -edata $vlist
proc asmtmem {cpu base list} {
set nw [llength $list]
if {$nw == 0} {
error "asmtreg called with empty list"
}
set errbeg [rlc errcnt]
$cpu cp {*}$clist
$cpu cp -wal $base -brm $nw -edata $list
return [expr [rlc errcnt] - $errbeg]
}
 
/trunk/tools/tcl/setup_packages
1,5 → 1,5
#! /usr/bin/env tclshcpp
# $Id: setup_packages 719 2015-12-27 09:45:43Z mueller $
# $Id: setup_packages 683 2015-05-17 21:54:35Z mueller $
#
pkg_mkIndex -verbose ../lib \
librlinktpp.so \
16,15 → 16,9
pkg_mkIndex -verbose rbemon *.tcl
#
pkg_mkIndex -verbose rw11 *.tcl
pkg_mkIndex -verbose rw11util *.tcl
#
pkg_mkIndex -verbose ibd_dl11 *.tcl
pkg_mkIndex -verbose ibd_ibmon *.tcl
pkg_mkIndex -verbose ibd_lp11 *.tcl
pkg_mkIndex -verbose ibd_pc11 *.tcl
pkg_mkIndex -verbose ibd_rhrp *.tcl
pkg_mkIndex -verbose ibd_rk11 *.tcl
pkg_mkIndex -verbose ibd_rl11 *.tcl
pkg_mkIndex -verbose ibd_tm11 *.tcl
#
pkg_mkIndex -verbose tst_rlink *.tcl
/trunk/tools/tcl/ibd_ibmon/util.tcl
1,4 → 1,4
# $Id: util.tcl 722 2015-12-30 19:45:46Z mueller $
# $Id: util.tcl 668 2015-04-25 14:31:19Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
13,8 → 13,6
#
# Revision History:
# Date Rev Version Comment
# 2015-12-28 721 1.0.2 add regmap_add defs; add symbolic register dump
# 2015-07-25 704 1.0.1 start: use args and args2opts
# 2015-04-25 668 1.0 Initial version
#
 
22,7 → 20,6
 
package require rutil
package require rlink
package require rw11util
 
namespace eval ibd_ibmon {
#
40,13 → 37,9
# 'pseudo register', describes 1st word in return list element of read proc
# all flag bits from DAT3 and DAT0
regdsc FLAGS {burst 11} {tout 10} {nak 9} {ack 8} \
{busy 7} {cacc 5} {racc 4} {rmw 3} {be1 2} {be0 1} {we 0}
{busy 7} {cacc 5} {racc 4} {rmw 3} {be1 2} {be0 1} {we 0}
#
rw11util::regmap_add ibd_ibmon im.cntl {r? CNTL}
rw11util::regmap_add ibd_ibmon im.stat {r? STAT}
rw11util::regmap_add ibd_ibmon im.addr {r? ADDR}
#
# setup: amap definitions for ibd_ibmon
# setup: amap definitions for rbd_rbmon
#
proc setup {{cpu "cpu0"} {base 0160000}} {
$cpu imap -insert im.cntl [expr {$base + 000}]
57,7 → 50,7
$cpu imap -insert im.data [expr {$base + 012}]
}
#
# init: reset ibd_ibmon (stop, reset alim)
# init: reset rbd_rbmon (stop, reset alim)
#
proc init {{cpu "cpu0"}} {
$cpu cp \
67,19 → 60,20
-wibr im.addr 0x0000
}
#
# start: start the ibmon
# start: start the rbmon
#
proc start {{cpu "cpu0"} args} {
args2opts opts { conena 1 remena 1 locena 1 wena 1 } {*}$args
proc start {{cpu "cpu0"} {opts {}}} {
array set defs { conena 1 remena 1 locena 1 wena 1 }
array set defs $opts
$cpu cp -wibr im.cntl [regbld ibd_ibmon::CNTL start \
[list wena $opts(wena)] \
[list locena $opts(locena)] \
[list remena $opts(remena)] \
[list conena $opts(conena)] \
[list wena $defs(wena)] \
[list locena $defs(locena)] \
[list remena $defs(remena)] \
[list conena $defs(conena)] \
]
}
#
# stop: stop the ibmon
# stop: stop the rbmon
#
proc stop {{cpu "cpu0"}} {
$cpu cp -wibr im.cntl [regbld ibd_ibmon::CNTL stop]
175,7 → 169,7
 
set eind [expr {1 - [llength $mondat] }]
append rval \
" ind addr data delay nbsy btnab-crm10w acc-mod"
" ind addr data delay nbsy btnab-crm10w acc-mode"
 
set mtout [regbld ibd_ibmon::FLAGS tout ]
set mnak [regbld ibd_ibmon::FLAGS nak ]
222,26 → 216,15
if {$fracc} { set pacc "rem"}
 
set pedly [expr {$edly!=$edlymax ? [format "%5d" $edly] : " --"}]
 
set ename [format "%6.6o" $eaddr]
set etext ""
if {[$cpu imap -testaddr $eaddr]} {
set ename [$cpu imap -name $eaddr]
set eam "l${prw}"
if {$fracc} { set eam "r${prw}"}
set etext [rw11util::regmap_txt $ename $eam $edata]
}
 
set comment ""
if {$fnak} {append comment " NAK=1!"}
if {$ftout} {append comment " TOUT=1!"}
 
if {[$cpu imap -testaddr $eaddr]} {set ename [$cpu imap -name $eaddr]}
append rval [format \
"\n%5d %-10s %6.6o %5s %4d %s %s %s" \
"\n%5d %-10s %6.6o %5s %4d %s %s %s %s" \
$eind $ename $edata $pedly $enbusy [pbvi b12 $eflag] \
$prmw $pacc]
if {$etext ne ""} {append rval " $etext"}
if {$comment ne ""} {append rval " $comment"}
$prmw $pacc $comment]
incr eind
}
 
trunk/tools/tbench/w11a_cmon Property changes : Deleted: svn:ignore ## -1,33 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log Index: trunk/tools/tbench/w11a_hbpt/w11a_hbpt_all.dat =================================================================== --- trunk/tools/tbench/w11a_hbpt/w11a_hbpt_all.dat (revision 34) +++ trunk/tools/tbench/w11a_hbpt/w11a_hbpt_all.dat (nonexistent) @@ -1,7 +0,0 @@ -# $Id: w11a_hbpt_all.dat 701 2015-07-19 12:58:29Z mueller $ -# -## steering file for all w11a_hbpt tests -# -test_hbpt_regs.tcl -test_hbpt_basics.tcl -# Index: trunk/tools/tbench/w11a_hbpt/test_hbpt_regs.tcl =================================================================== --- trunk/tools/tbench/w11a_hbpt/test_hbpt_regs.tcl (revision 34) +++ trunk/tools/tbench/w11a_hbpt/test_hbpt_regs.tcl (nonexistent) @@ -1,75 +0,0 @@ -# $Id: test_hbpt_regs.tcl 701 2015-07-19 12:58:29Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory -# -# Revision History: -# Date Rev Version Comment -# 2015-07-11 700 1.0 Initial version -# -# Test register response - -# ---------------------------------------------------------------------------- -rlc log "test_hbpt_regs: test register response ------------------------------" - -set nbpt [$cpu get hashbpt] -if {$nbpt == 0} { - rlc log " test_hbpt_regs-W: no hbpt units found, test aborted" - return -} - -# -- Section A --------------------------------------------------------------- -rlc log " A1: test cntl,stat for unit 0 -----------------------------" - -foreach {cntl stat} [list \ - [regbld rw11::HB_CNTL {mode 1} {irena 0} {dwena 0} {drena 1}] \ - [regbld rw11::HB_STAT {irseen 1} {dwseen 0} {drseen 0}] \ - [regbld rw11::HB_CNTL {mode 2} {irena 0} {dwena 1} {drena 1}] \ - [regbld rw11::HB_STAT {irseen 1} {dwseen 1} {drseen 0}] \ - [regbld rw11::HB_CNTL {mode 3} {irena 1} {dwena 1} {drena 1}] \ - [regbld rw11::HB_STAT {irseen 1} {dwseen 1} {drseen 1}] \ - [regbld rw11::HB_CNTL {mode 0} {irena 0} {dwena 0} {drena 0}] \ - [regbld rw11::HB_STAT {irseen 0} {dwseen 0} {drseen 0}] \ - ] { - $cpu cp -wreg "hb0.cntl" $cntl \ - -wreg "hb0.stat" $stat \ - -rreg "hb0.cntl" -edata $cntl \ - -rreg "hb0.stat" -edata $stat -} - -rlc log " A2: test hilim,lolim for unit 0 ---------------------------" -foreach {hilim lolim} {0177777 0100000 \ - 0100000 0177777 \ - 0000000 0000000 } { - $cpu cp -wreg "hb0.hilim" $hilim \ - -wreg "hb0.lolim" $lolim \ - -rreg "hb0.hilim" -edata [expr {$hilim & 0177776}] \ - -rreg "hb0.lolim" -edata [expr {$lolim & 0177776}] -} - -rlc log " A3: test cntl,stat,hi,lolim for all $nbpt units ---------------" - -set cntl {} -set stat {} -set hilim {} -set lolim {} - -for {set i 0} {$i<$nbpt} {incr i} { - lappend cntl [expr {$i + 1} ] - lappend stat [expr {$i + 1} ] - lappend hilim [expr {2 * ($i+1) * 1234} ] - lappend lolim [expr {2 * ($i+1) * 2345} ] -} - -for {set i 0} {$i<$nbpt} {incr i} { - $cpu cp -wreg "hb${i}.cntl" [lindex $cntl $i] \ - -wreg "hb${i}.stat" [lindex $stat $i] \ - -wreg "hb${i}.hilim" [lindex $hilim $i] \ - -wreg "hb${i}.lolim" [lindex $lolim $i] -} -for {set i 0} {$i<$nbpt} {incr i} { - $cpu cp -rreg "hb${i}.cntl" -edata [lindex $cntl $i] \ - -rreg "hb${i}.stat" -edata [lindex $stat $i] \ - -rreg "hb${i}.hilim" -edata [lindex $hilim $i] \ - -rreg "hb${i}.lolim" -edata [lindex $lolim $i] -} Index: trunk/tools/tbench/w11a_hbpt/test_hbpt_basics.tcl =================================================================== --- trunk/tools/tbench/w11a_hbpt/test_hbpt_basics.tcl (revision 34) +++ trunk/tools/tbench/w11a_hbpt/test_hbpt_basics.tcl (nonexistent) @@ -1,289 +0,0 @@ -# $Id: test_hbpt_basics.tcl 722 2015-12-30 19:45:46Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory -# -# Revision History: -# Date Rev Version Comment -# 2015-12-30 721 1.0.1 BUGFIX: add missing wtcpu in mfpd/mtpd tests -# 2015-07-11 700 1.0 Initial version -# -# Test register response - -# ---------------------------------------------------------------------------- -rlc log "test_hbpt_basics: basic tests with 1 unit ---------------------------" - -set nbpt [$cpu get hashbpt] -if {$nbpt == 0} { - rlc log " test_hbpt_basics-W: no hbpt units found, test aborted" - return -} - -rlc log " setup: clear all bpts" -for {set i 0} {$i<$nbpt} {incr i} { - $cpu cp -wreg "hb${i}.cntl" 0 \ - -wreg "hb${i}.stat" 0 -} - -# -- Section A --------------------------------------------------------------- -rlc log " A basic ir,dr,dw break tests ------------------------------" - -$cpu ldasm -lst lst -sym sym { - . = 1000 -start: nop -I0: clr r0 -I1: inc r0 -I2: inc r0 -I3: inc r0 -I4: mov a,r1 -I5: mov @pb,r2 -I6: mov r1,c -I7: mov r2,@pd -I8: halt -stop: -; -a: .word 123 -b: .word 234 -c: .word 0 -d: .word 0 -pb: .word b -pd: .word d -} - -rlc log " A1: run code without breaks ------------------------" -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym -rw11::asmtreg $cpu r0 3 r1 0123 r2 0234 -rw11::asmtmem $cpu $sym(c) {0123} -rw11::asmtmem $cpu $sym(d) {0234} - -rlc log " A2.1: ir break on single instruction ---------------" -# set ir break after 1st "inc r0" -rw11::hb_set cpu0 0 i $sym(I1) -rw11::asmrun $cpu sym -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT irseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I2) \ - -rr0 -edata 1 - -rlc log " A2.2: step after ir break --------------------------" -$cpu cp -step -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT irseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 04} susp go] \ - -rpc -edata $sym(I3) \ - -rr0 -edata 2 - -rlc log " A2.3: resume after ir break ------------------------" -$cpu cp -resume -rw11::asmwait $cpu sym -rw11::asmtreg $cpu r0 3 r1 0123 r2 0234 - -rlc log " A3.1: ir break on range of instructions ------------" -# set ir break on 2nd and 3rd "inc r0" -rw11::hb_set cpu0 0 i $sym(I2) $sym(I3) -rw11::asmrun $cpu sym -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT irseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I3) \ - -rr0 -edata 2 - -rlc log " A3.2: resume, should re-break ----------------------" -$cpu cp -resume -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I4) \ - -rr0 -edata 3 - -rlc log " A3.3: resume, should run to end --------------------" -$cpu cp -resume -rw11::asmwait $cpu sym -rw11::asmtreg $cpu r0 3 r1 0123 r2 0234 - -rlc log " A4.1: dr break on direct read location -------------" -# set dr break on a, should break after "mov a,r1" -rw11::hb_set cpu0 0 r $sym(a) -rw11::asmrun $cpu sym -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT drseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I5) \ - -rr1 -edata 0123 - -rlc log " A4.2: dr break on pointer used in indirect write ---" -# set dr break on pd, should break after "mov r2,@pd" -rw11::hb_set cpu0 0 r $sym(pd) -$cpu cp -resume -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT drseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I8) \ - -rr2 -edata 0234 - -rlc log " A5.1: dw break on direct written location ----------" -# set dw break on c, should break after "mov r1,c" -rw11::hb_set cpu0 0 w $sym(c) -rw11::asmrun $cpu sym -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT dwseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I7) \ - -rr2 -edata 0234 - -rlc log " A5.2: dw break on indirect write location ----------" -# set dw break on d, should break after "mov r2,@pd" -rw11::hb_set cpu0 0 w $sym(d) -$cpu cp -resume -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT dwseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I8) \ - -rr2 -edata 0234 - -# -- Section B --------------------------------------------------------------- -rlc log " B specific ir tests ---------------------------------------" - -$cpu ldasm -lst lst -sym sym { - . = 1000 -stack: -start: nop -I0: mov #a,r0 -I1: mov a,r1 -I2: mov 2(r0),r2 -I3: mfpi c -I4: mov (sp)+,r3 -I5: halt -stop: -; -a: .word 123 -b: .word 234 -c: .word 345 -} - -rlc log " B1: run code without breaks ------------------------" -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym -rw11::asmtreg $cpu r0 $sym(a) r1 0123 r2 0234 r3 0345 - -rlc log " B2: ensure that immediate fetch doesn't ir break ---" -# set ir break on immediate value of "mov #a,r0" -rw11::hb_set cpu0 0 i [expr $sym(I0)+2] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " B3: ensure that index fetch (reg != pc) doesn't ir break ---" -# set ir break on index value of "mov a,r1" -rw11::hb_set cpu0 0 i [expr $sym(I1)+2] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " B4: ensure that index fetch (reg == pc) doesn't ir break ---" -# set ir break on index value of "mov 2(r0),r2" -rw11::hb_set cpu0 0 i [expr $sym(I2)+2] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " B5: ensure that mfpi doesn't ir break ---" -# set ir break on load value of "mfpi c" -rw11::hb_set cpu0 0 i [expr $sym(c)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -# -- Section C --------------------------------------------------------------- -rlc log " C test mode logic and mfpd/mtpd ---------------------------" - -$cpu ldasm -lst lst -sym sym { - .include |lib/defs_cpu.mac| - . = 1000 -stack: -start: nop - mov #,@#cp.psw ;cm=pm=user -I1: mov a,r0 -I2: mov r0,b -I3: nop - mov #cp.pmu,@#cp.psw ;cm=kernel,pm=user -I4: mfpd c -I5: mov (sp),r1 -I6: mtpd d -I7: nop - halt -stop: -; -a: .word 123 -b: .word 0 -c: .word 234 -d: .word 0 -} - -rlc log " C1: run code without breaks ------------------------" -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym -rw11::asmtreg $cpu r0 0123 r1 0234 -rw11::asmtmem $cpu $sym(b) {0123} -rw11::asmtmem $cpu $sym(d) {0234} - -rlc log " C2.1: kernel dr break on user mode read -> no bpt --" -# set k mode dr break on value of "mov a,r0" -rw11::hb_set cpu0 0 kr [expr $sym(a)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " C2.2: super dr break on user mode read -> no bpt ---" -# set s mode dr break on value of "mov a,r0" -rw11::hb_set cpu0 0 sr [expr $sym(a)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " C2.3: user dw break on user mode write -> bpt -----" -# set u mode dw break on value of "mov r0,b" -rw11::hb_set cpu0 0 uw [expr $sym(b)] -rw11::asmrun $cpu sym - -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT dwseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I3) - -rlc log " C3.1: kernel dr break on mfpd (pm=user) -> no bpt --" -# set k mode dr break on target of "mfpd c" -rw11::hb_set cpu0 0 kr [expr $sym(c)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " C3.2: super dr break on mfpd (pm=user) -> no bpt --" -# set s mode dr break on target of "mfpd c" -rw11::hb_set cpu0 0 sr [expr $sym(c)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " C3.3: user dr break on mfpd (pm=user) -> bpt -----" -# set u mode dr break on target of "mfpd c" -rw11::hb_set cpu0 0 ur [expr $sym(c)] -rw11::asmrun $cpu sym -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT drseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I5) - -rlc log " C4.1: kernel dw break on mtpd (pm=user) -> no bpt --" -# set k mode dw break on target of "mtpd d" -rw11::hb_set cpu0 0 kw [expr $sym(d)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " C4.2: super dw break on mtpd (pm=user) -> no bpt --" -# set s mode dw break on target of "mtpd d" -rw11::hb_set cpu0 0 sw [expr $sym(d)] -rw11::asmrun $cpu sym -rw11::asmwait $cpu sym - -rlc log " C4.3: user dw break on mtpd (pm=user) -> bpt -----" -# set u mode dw break on target of "mtpd d" -rw11::hb_set cpu0 0 uw [expr $sym(d)] -rw11::asmrun $cpu sym -$cpu wtcpu -reset $rw11::asmwait_tout -$cpu cp -rreg "hb0.stat" -edata [regbld rw11::HB_STAT dwseen] \ - -rstat -edata [regbld rw11::CP_STAT suspint {rust 06} susp go] \ - -rpc -edata $sym(I7) - Index: trunk/tools/tbench/w11a_hbpt =================================================================== --- trunk/tools/tbench/w11a_hbpt (revision 34) +++ trunk/tools/tbench/w11a_hbpt (nonexistent)
trunk/tools/tbench/w11a_hbpt Property changes : Deleted: svn:ignore ## -1,33 +0,0 ## -*.dep_ghdl -*.dep_isim -*.dep_xst -work-obj93.cf -*.vcd -*.ghw -*.sav -*.tmp -*.exe -ise -xflow.his -*.ngc -*.ncd -*.pcf -*.bit -*.msk -isim -isim.log -isim.wdb -fuse.log -*_[sft]sim.vhd -*_tsim.sdf -*_xst.log -*_tra.log -*_twr.log -*_map.log -*_par.log -*_tsi.log -*_pad.log -*_bgn.log -*_svn.log -*_sum.log -*_[dsft]sim.log Index: trunk/tools/tbench/rhrp/test_rhrp_func_reg.tcl =================================================================== --- trunk/tools/tbench/rhrp/test_rhrp_func_reg.tcl (revision 34) +++ trunk/tools/tbench/rhrp/test_rhrp_func_reg.tcl (revision 33) @@ -1,4 +1,4 @@ -# $Id: test_rhrp_func_reg.tcl 705 2015-07-26 21:25:42Z mueller $ +# $Id: test_rhrp_func_reg.tcl 692 2015-06-21 11:53:24Z mueller $ # # Copyright 2015- by Walter F.J. Mueller # License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory @@ -122,7 +122,7 @@ rlc exec -attn -edata $attnmsk # check rdy=0 ie=0 func=read -set cs1val [regbldkv ibd_rhrp::CS1 func READ] +set cs1val [regbld ibd_rhrp::CS1 [list func $ibd_rhrp::FUNC_READ]] set cs1msk [regbld ibd_rhrp::CS1 rdy ie {func -1}] # expect ds mol=1 dpr=1 dry=0 set dsval [regbld ibd_rhrp::DS mol dpr] @@ -149,7 +149,7 @@ rlc log " D1.5: loc check: cs1.rdy=1, ds.dry=1 -----------------" # expect cs1 sc=0 tre=0 dva=1 rdy=1 ie=0 func=read go=0 -set cs1val [regbldkv ibd_rhrp::CS1 dva 1 rdy 1 func READ] +set cs1val [regbld ibd_rhrp::CS1 dva rdy [list func $ibd_rhrp::FUNC_READ]] # expect ds ata=0 mol=1 dpr=1 dry=1 set dsval [regbld ibd_rhrp::DS mol dpr dry]
/trunk/tools/tbench/rhrp/test_rhrp_int.tcl
1,4 → 1,4
# $Id: test_rhrp_int.tcl 705 2015-07-26 21:25:42Z mueller $
# $Id: test_rhrp_int.tcl 692 2015-06-21 11:53:24Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
5,7 → 5,6
#
# Revision History:
# Date Rev Version Comment
# 2015-07-25 704 1.1.2 tmpproc_dotest: use args rather opts
# 2015-06-20 692 1.1.1 de-configure all drives at begin
# 2015-05-04 674 1.1 w11a start/stop/suspend overhaul
# 2015-03-29 667 1.0 Initial version
173,13 → 172,13
##puts $lst
 
# define tmpproc for readback checks
proc tmpproc_dotest {cpu symName args} {
proc tmpproc_dotest {cpu symName opts} {
upvar 1 $symName sym
 
set tout 10.; # FIXME_code: parameter ??
 
# setup defs hash, first defaults, than write over concrete run values
args2opts opts {i.cs2 0 \
array set defs { i.cs2 0 \
i.da 0 \
i.dc 0 \
i.cs1 0 \
200,15 → 199,18
or.icnt 0 \
or.pcnt 1 \
do.rint 0 \
do.lam 0 } {*}$args
do.lam 0
}
array set defs $opts
 
# build ibuf
set ibuf [list $opts(i.cs2) $opts(i.da) $opts(i.dc) $opts(i.cs1) \
$opts(do.rint)]
set ibuf [list $defs(i.cs2) $defs(i.da) $defs(i.dc) $defs(i.cs1) \
$defs(do.rint)]
 
# setup idly, write ibuf, setup stack, and start cpu at start:
$cpu cp -wibr rpa.cs1 [regbldkv ibd_rhrp::RCS1 \
val $opts(i.idly) func WIDLY ] \
$cpu cp -wibr rpa.cs1 [regbld ibd_rhrp::RCS1 \
[list val $defs(i.idly)] \
[list func $ibd_rhrp::RFUNC_WIDLY] ] \
-wal $sym(ibuf) \
-bwm $ibuf \
-wsp $sym(stack) \
215,7 → 217,7
-stapc $sym(start)
 
# here do minimal lam handling (harvest + send DONE)
if {$opts(do.lam)} {
if {$defs(do.lam)} {
rlc wtlam $tout apat
$cpu cp -attn \
-wibr rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::RFUNC_DONE]
225,28 → 227,28
 
# determine regs after cleanup
set cs1msk [rutil::com16 [regbld ibd_rhrp::CS1 {func -1}]]
set fcs2 [expr {$opts(o.cs2) & 0x00ff}]; # cs1.tre clears upper byte !
set fcs2 [expr {$defs(o.cs2) & 0x00ff}]; # cs1.tre clears upper byte !
set fer1 0
if {!$opts(do.rint)} { # no reinterrupt, ata clear by cpu
set fcs1 [expr {$opts(o.cs1) & ~[regbld ibd_rhrp::CS1 sc tre {func -1}] }]
set fds [expr {$opts(o.ds) & ~[regbld ibd_rhrp::DS ata erp] }]
if {!$defs(do.rint)} { # no reinterrupt, ata clear by cpu
set fcs1 [expr {$defs(o.cs1) & ~[regbld ibd_rhrp::CS1 sc tre {func -1}] }]
set fds [expr {$defs(o.ds) & ~[regbld ibd_rhrp::DS ata erp] }]
set fas 0
} else { # reinterrupt, ata still pending
set fcs1 [expr {$opts(o.cs1) & ~[regbld ibd_rhrp::CS1 tre {func -1}] }]
set fds [expr {$opts(o.ds) & ~[regbld ibd_rhrp::DS erp] }]
set fas $opts(o.as)
set fcs1 [expr {$defs(o.cs1) & ~[regbld ibd_rhrp::CS1 tre {func -1}] }]
set fds [expr {$defs(o.ds) & ~[regbld ibd_rhrp::DS erp] }]
set fas $defs(o.as)
}
$cpu cp -rpc -edata $sym(stop) \
-rsp -edata $sym(stack) \
-wal $sym(icnt) \
-rmi -edata $opts(o.icnt) \
-rmi -edata $defs(o.icnt) \
-rmi \
-rmi -edata $opts(o.cs1) \
-rmi -edata $opts(o.cs2) \
-rmi -edata $opts(o.er1) \
-rmi -edata $opts(o.ds) \
-rmi -edata $opts(o.as) \
-rmi -edata $opts(o.itim) \
-rmi -edata $defs(o.cs1) \
-rmi -edata $defs(o.cs2) \
-rmi -edata $defs(o.er1) \
-rmi -edata $defs(o.ds) \
-rmi -edata $defs(o.as) \
-rmi -edata $defs(o.itim) \
-rmi -edata $fcs1 $cs1msk \
-rmi -edata $fcs2 \
-rmi -edata $fer1 \
253,7 → 255,7
-rmi -edata $fds \
-rmi -edata $fas
 
if {!$opts(do.rint)} return "";
if {!$defs(do.rint)} return "";
 
$cpu cp -start
 
260,22 → 262,22
$cpu wtcpu -reset $tout
 
# determine regs after cleanup
set fcs1 [expr {$opts(or.cs1) & ~[regbld ibd_rhrp::CS1 sc] }]
set fcs2 $opts(or.cs2)
set fcs1 [expr {$defs(or.cs1) & ~[regbld ibd_rhrp::CS1 sc] }]
set fcs2 $defs(or.cs2)
set fer1 0
set fds [expr {$opts(or.ds) & ~[regbld ibd_rhrp::DS ata] }]
set fds [expr {$defs(or.ds) & ~[regbld ibd_rhrp::DS ata] }]
set fas 0
 
$cpu cp -rpc -edata $sym(stop) \
-rsp -edata $sym(stack) \
-wal $sym(icnt) \
-rmi -edata $opts(or.icnt) \
-rmi -edata $defs(or.icnt) \
-rmi \
-rmi -edata $opts(or.cs1) \
-rmi -edata $opts(or.cs2) \
-rmi -edata $opts(or.er1) \
-rmi -edata $opts(or.ds) \
-rmi -edata $opts(or.as) \
-rmi -edata $defs(or.cs1) \
-rmi -edata $defs(or.cs2) \
-rmi -edata $defs(or.er1) \
-rmi -edata $defs(or.ds) \
-rmi -edata $defs(or.as) \
-rmi \
-rmi -edata $fcs1 \
-rmi -edata $fcs2 \
296,7 → 298,7
rlc log " A1.1 set cs1.ie=1 alone -> no interrupt ------------"
 
# Note: no interrupt, so ie stays on !
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie] \
o.icnt 0 \
o.cs1 [regbld ibd_rhrp::CS1 dva rdy ie] \
305,11 → 307,13
o.ds [regbld ibd_rhrp::DS mol dpr dry] \
o.as 0 \
o.itim 0
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A1.2 set cs1.ie=1 with rdy=1 -> software interrupt -"
 
# Note: interrupt, so ie switched off again !
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 rdy ie] \
o.icnt 1 \
o.cs1 [regbld ibd_rhrp::CS1 dva rdy] \
318,11 → 322,14
o.ds [regbld ibd_rhrp::DS mol dpr dry] \
o.as 0 \
o.itim 1
]
 
tmpproc_dotest $cpu sym $opts
 
rlc log " A2: test state functions: iff no, as yes ------------------"
rlc log " A2.1 noop function ---------------------------------"
 
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie go] \
o.cs1 [regbld ibd_rhrp::CS1 ie dva rdy] \
o.cs2 [regbld ibd_rhrp::CS2 or ir] \
330,11 → 337,13
o.ds [regbld ibd_rhrp::DS mol dpr dry] \
o.as 0 \
o.itim 0
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A2.2 pack acknowledge function (sets ds.vv=1) ------"
 
set rbcs1func [list func $ibd_rhrp::FUNC_PACK]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 $rbcs1func ie go] \
o.cs1 [regbld ibd_rhrp::CS1 dva rdy ie $rbcs1func] \
o.cs2 [regbld ibd_rhrp::CS2 or ir] \
342,6 → 351,8
o.ds [regbld ibd_rhrp::DS mol dpr dry vv] \
o.as 0 \
o.itim 0
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3: test seek type functions: iff no, as yes --------------"
 
349,7 → 360,7
 
# check that cs1.sc=1, ds.ata=1, and as.u0=1
set rbcs1func [list func $ibd_rhrp::FUNC_SEEK]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 $rbcs1func go] \
o.cs1 [regbld ibd_rhrp::CS1 sc dva rdy $rbcs1func] \
o.cs2 [regbld ibd_rhrp::CS2 or ir] \
357,12 → 368,14
o.ds [regbld ibd_rhrp::DS ata mol dpr dry vv] \
o.as [regbld ibd_rhrp::AS u0] \
o.itim 0
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3.2 seek function, valid da,dc, idly=0 ------------"
 
# check re-interrupt too
set rbcs1func [list func $ibd_rhrp::FUNC_SEEK]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie $rbcs1func go] \
i.dc 814 \
i.idly 0 \
380,11 → 393,13
or.er1 0 \
or.ds [regbld ibd_rhrp::DS ata mol dpr dry vv] \
or.as [regbld ibd_rhrp::AS u0]
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3.3 seek function, invalid dc ---------------------"
 
set rbcs1func [list func $ibd_rhrp::FUNC_SEEK]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie $rbcs1func go] \
i.dc 815 \
o.icnt 1 \
394,11 → 409,13
o.ds [regbld ibd_rhrp::DS ata erp mol dpr dry vv] \
o.as [regbld ibd_rhrp::AS u0] \
o.itim 1
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3.4 search function, valid da,dc, idly=0 ----------"
 
set rbcs1func [list func $ibd_rhrp::FUNC_SEAR]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie $rbcs1func go] \
i.dc 0 \
i.da [regbld ibd_rhrp::DA {ta 0} {sa 21}] \
410,11 → 427,13
o.ds [regbld ibd_rhrp::DS ata mol dpr dry vv] \
o.as [regbld ibd_rhrp::AS u0] \
o.itim 1
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3.5 search function, valid da,dc, idly=2 ----------"
 
set rbcs1func [list func $ibd_rhrp::FUNC_SEAR]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie $rbcs1func go] \
i.dc 0 \
i.da [regbld ibd_rhrp::DA {ta 0} {sa 21}] \
426,11 → 445,13
o.ds [regbld ibd_rhrp::DS ata mol dpr dry vv] \
o.as [regbld ibd_rhrp::AS u0] \
o.itim 3
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3.5 search function, valid da,dc, idly=8 ----------"
 
set rbcs1func [list func $ibd_rhrp::FUNC_SEAR]
tmpproc_dotest $cpu sym \
set opts [list \
i.cs1 [regbld ibd_rhrp::CS1 ie $rbcs1func go] \
i.dc 0 \
i.da [regbld ibd_rhrp::DA {ta 0} {sa 21}] \
442,6 → 463,8
o.ds [regbld ibd_rhrp::DS ata mol dpr dry vv] \
o.as [regbld ibd_rhrp::AS u0] \
o.itim 9
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A3.5 search function, invalid sa, idly=8 -----------"
# Note: idly is 8, but error ata's come immediately !!
460,7 → 483,7
o.as [regbld ibd_rhrp::AS u0] \
o.itim 1
]
tmpproc_dotest $cpu sym {*}$opts
tmpproc_dotest $cpu sym $opts
 
rlc log " A4: test transfer functions: iff yes, as no ---------------"
rlc log " A4.1 read function, valid da,dc --------------------"
474,5 → 497,5
o.ds [regbld ibd_rhrp::DS mol dpr dry vv] \
do.lam 1
]
tmpproc_dotest $cpu sym {*}$opts
tmpproc_dotest $cpu sym $opts
 
/trunk/tools/tbench/rhrp/test_rhrp_int2.tcl
1,4 → 1,4
# $Id: test_rhrp_int2.tcl 705 2015-07-26 21:25:42Z mueller $
# $Id: test_rhrp_int2.tcl 692 2015-06-21 11:53:24Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
5,7 → 5,6
#
# Revision History:
# Date Rev Version Comment
# 2015-07-25 704 1.0.1 tmpproc_dotest: use args rather opts
# 2015-05-20 692 1.0 Initial version
#
# Test interrupt response
184,14 → 183,16
##puts $lst
 
# define tmpproc for readback checks
proc tmpproc_dotest {cpu symName args} {
proc tmpproc_dotest {cpu symName opts} {
upvar 1 $symName sym
 
set tout 10.; # FIXME_code: parameter ??
 
# setup defs hash, first defaults, than write over concrete run values
args2opts opts {i.nseek 0 \
i.idly 0 } {*}$args
array set defs { i.nseek 0 \
i.idly 0
}
array set defs $opts
 
set fread [list func $ibd_rhrp::FUNC_READ]
set fsear [list func $ibd_rhrp::FUNC_SEAR]
200,8 → 201,8
# build ibuf
set ibuf {}
lappend ibuf 01 0100 [regbld ibd_rhrp::CS1 ie $fread go]
lappend ibuf $opts(i.nseek)
for {set i 1} {$i<=$opts(i.nseek)} {incr i} {
lappend ibuf $defs(i.nseek)
for {set i 1} {$i<=$defs(i.nseek)} {incr i} {
set da [expr { 010 + $i}]
set dc [expr {0100 + $i}]
lappend ibuf $da $dc [regbld ibd_rhrp::CS1 ie $fsear go]
209,8 → 210,9
}
 
# setup idly, write ibuf, setup stack, and start cpu at start:
$cpu cp -wibr rpa.cs1 [regbldkv ibd_rhrp::RCS1 \
val $opts(i.idly) func WIDLY ] \
$cpu cp -wibr rpa.cs1 [regbld ibd_rhrp::RCS1 \
[list val $defs(i.idly)] \
[list func $ibd_rhrp::RFUNC_WIDLY] ] \
-wal $sym(ibuf) \
-bwm $ibuf \
-wsp $sym(stack) \
251,7 → 253,7
 
# check setup search
set mskcs1sc [rutil::com16 [regbld ibd_rhrp::CS1 sc]]
for {set i 1} {$i<=$opts(i.nseek)} {incr i} {
for {set i 1} {$i<=$defs(i.nseek)} {incr i} {
set osscs1 [regbld ibd_rhrp::CS1 dva ie $fsear]
set osscs2 [regbld ibd_rhrp::CS2 or ir [list unit $i]]
set ossds [regbld ibd_rhrp::DS pip mol dpr vv]
264,7 → 266,7
}
 
# check interrupt xfer
set sc [expr {$opts(i.nseek) > 0}]
set sc [expr {$defs(i.nseek) > 0}]
set oixcs1 [regbld ibd_rhrp::CS1 [list sc $sc] dva rdy $fread]
set oixcs2 [regbld ibd_rhrp::CS2 or ir]
set oixds [regbld ibd_rhrp::DS mol dpr dry vv]
278,7 → 280,7
 
# check interrupt search
set oisas $as
for {set i 1} {$i<=$opts(i.nseek)} {incr i} {
for {set i 1} {$i<=$defs(i.nseek)} {incr i} {
set oiscs1 [regbld ibd_rhrp::CS1 [list sc $sc] dva rdy $fsear]
set oiscs2 [regbld ibd_rhrp::CS2 or ir [list unit $i]]
set oisds [regbld ibd_rhrp::DS ata mol dpr dry vv]
303,17 → 305,33
 
rlc log " A1: test without search -----------------------------------"
 
tmpproc_dotest $cpu sym i.nseek 0 i.idly 0
set opts [list \
i.nseek 0 \
i.idly 0
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A2: test with 1 search ------------------------------------"
 
tmpproc_dotest $cpu sym i.nseek 1 i.idly 10
set opts [list \
i.nseek 1 \
i.idly 10
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A2: test with 2 search ------------------------------------"
 
tmpproc_dotest $cpu sym i.nseek 2 i.idly 10
set opts [list \
i.nseek 2 \
i.idly 10
]
tmpproc_dotest $cpu sym $opts
 
rlc log " A2: test with 3 search ------------------------------------"
 
tmpproc_dotest $cpu sym i.nseek 3 i.idly 10
set opts [list \
i.nseek 3 \
i.idly 10
]
tmpproc_dotest $cpu sym $opts
 
/trunk/tools/tbench/rhrp/test_rhrp_regs.tcl
1,4 → 1,4
# $Id: test_rhrp_regs.tcl 705 2015-07-26 21:25:42Z mueller $
# $Id: test_rhrp_regs.tcl 692 2015-06-21 11:53:24Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
87,7 → 87,7
rlc log " A1.4: rem write bae, read l+r bae+cs1.bae ----------"
 
foreach bae {077 071 000} {
set cs1val [regbldkv ibd_rhrp::CS1 bae [expr {$bae & 03}] ]
set cs1val [regbld ibd_rhrp::CS1 [list bae [expr {$bae & 03}]]]
$cpu cp -wibr rpa.bae $bae \
-ribr rpa.bae -edata $bae \
-ribr rpa.cs1 -edata $cs1val $cs1msk \
100,7 → 100,7
$cpu cp -wibr rpa.bae 070; # set 3 lbs of bae
 
foreach cs1bae {03 01 00} {
set cs1val [regbldkv ibd_rhrp::CS1 bae $cs1bae]
set cs1val [regbld ibd_rhrp::CS1 [list bae $cs1bae]]
set bae [expr {070 | $cs1bae}]
$cpu cp -wma rpa.cs1 $cs1val \
-rma rpa.bae -edata $bae \
202,8 → 202,8
}
 
foreach {unit ta sa dc} $tbl {
$cpu cp -wma rpa.cs2 [regbldkv ibd_rhrp::CS2 unit $unit] \
-wma rpa.da [regbldkv ibd_rhrp::DA ta $ta sa $sa] \
$cpu cp -wma rpa.cs2 [regbld ibd_rhrp::CS2 [list unit $unit]] \
-wma rpa.da [regbld ibd_rhrp::DA [list ta $ta] [list sa $sa]] \
-wma rpa.dc $dc
}
 
225,7 → 225,7
 
foreach {unit ta sa dc} $tbl {
$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit $unit] \
-wibr rpa.da [regbldkv ibd_rhrp::DA ta $ta sa $sa] \
-wibr rpa.da [regbld ibd_rhrp::DA [list ta $ta] [list sa $sa]] \
-wibr rpa.dc $dc
}
 
/trunk/tools/tbench/rhrp/test_rhrp_basics.tcl
1,4 → 1,4
# $Id: test_rhrp_basics.tcl 705 2015-07-26 21:25:42Z mueller $
# $Id: test_rhrp_basics.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
101,12 → 101,12
set dsmsk [regbld ibd_rhrp::DS dpr]
set cs2msk [regbld ibd_rhrp::CS2 ned {unit 3}]
foreach {unit dpr dte dt} $tbl {
set dsval [regbldkv ibd_rhrp::DS dpr $dpr]
set cs2val [regbldkv ibd_rhrp::CS2 ned [expr {1-$dpr}] unit $unit]
set dsval [regbld ibd_rhrp::DS [list dpr $dpr]]
set cs2val [regbld ibd_rhrp::CS2 [list ned [expr {1-$dpr}]] [list unit $unit]]
$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit $unit] \
-ribr rpa.ds -edata $dsval $dsmsk \
-ribr rpa.dt -edata $dte \
-wma rpa.cs2 [regbldkv ibd_rhrp::CS2 unit $unit] \
-wma rpa.cs2 [regbld ibd_rhrp::CS2 [list unit $unit]] \
-wma rpa.cs1 [regbld ibd_rhrp::CS1 tre] \
-rma rpa.dt -edata $dt \
-rma rpa.cs2 -edata $cs2val $cs2msk
191,8 → 191,8
 
set cs2msk [regbld ibd_rhrp::CS2 ned {unit -1}]
foreach {unit} {4 5 6 7} {
set cs2val [regbldkv ibd_rhrp::CS2 ned 1 unit $unit]
$cpu cp -wma rpa.cs2 [regbldkv ibd_rhrp::CS2 unit $unit] \
set cs2val [regbld ibd_rhrp::CS2 ned [list unit $unit]]
$cpu cp -wma rpa.cs2 [regbld ibd_rhrp::CS2 [list unit $unit]] \
-wma rpa.cs1 [regbld ibd_rhrp::CS1 tre] \
-rma rpa.dt -edata 0 \
-rma rpa.cs2 -edata $cs2val $cs2msk
/trunk/tools/tbench/tm11/test_tm11_int.tcl
1,4 → 1,4
# $Id: test_tm11_int.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_tm11_int.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
5,7 → 5,6
#
# Revision History:
# Date Rev Version Comment
# 2015-07-25 704 1.0.1 tmpproc_dotest: use args rather opts
# 2015-05-17 683 1.0 Initial version
#
# Test interrupt response
89,23 → 88,25
##puts $lst
 
# define tmpproc for readback checks
proc tmpproc_dotest {cpu symName args} {
proc tmpproc_dotest {cpu symName opts} {
upvar 1 $symName sym
 
set tout 10.; # FIXME_code: parameter ??
 
# setup defs hash, first defaults, than write over concrete run values
args2opts opts {i.cr 0 \
i.bc 0 \
i.ba 0 \
o.sr 0 \
o.cr 0 \
o.bc 0 \
o.ba 0 \
do.lam 0 } {*}$args
array set defs { i.cr 0 \
i.bc 0 \
i.ba 0 \
o.sr 0 \
o.cr 0 \
o.bc 0 \
o.ba 0 \
do.lam 0
}
array set defs $opts
 
# build ibuf
set ibuf [list $opts(i.bc) $opts(i.ba) $opts(i.cr)]
set ibuf [list $defs(i.bc) $defs(i.ba) $defs(i.cr)]
 
# setup write ibuf, setup stack, and start cpu at start:
$cpu cp -wal $sym(ibuf) \
114,7 → 115,7
-stapc $sym(start)
 
# here do minimal lam handling (harvest + send DONE)
if {$opts(do.lam)} {
if {$defs(do.lam)} {
rlc wtlam $tout apat
$cpu cp -attn \
-wibr tma.cs [ibd_rhrp::cr_func $ibd_tm11::RFUNC_DONE]
127,15 → 128,15
-rsp -edata $sym(stack) \
-wal $sym(obuf) \
-rmi -edata 1 \
-rmi -edata $opts(o.sr) \
-rmi -edata $opts(o.cr) \
-rmi -edata $opts(o.bc) \
-rmi -edata $opts(o.ba) \
-rmi -edata $defs(o.sr) \
-rmi -edata $defs(o.cr) \
-rmi -edata $defs(o.bc) \
-rmi -edata $defs(o.ba) \
-wal $sym(fbuf) \
-rmi -edata $opts(o.sr) \
-rmi -edata $opts(o.cr) \
-rmi -edata $opts(o.bc) \
-rmi -edata $opts(o.ba)
-rmi -edata $defs(o.sr) \
-rmi -edata $defs(o.cr) \
-rmi -edata $defs(o.bc) \
-rmi -edata $defs(o.ba)
 
return ""
}
147,7 → 148,7
# -- Section A ---------------------------------------------------------------
rlc log " A1.1 set cr.ie=1 -> software interrupt -------------"
 
tmpproc_dotest $cpu sym \
set opts [list \
i.cr [regbld ibd_tm11::CR ie] \
i.bc 0xff00 \
i.ba 0x8800 \
155,5 → 156,7
o.cr [regbld ibd_tm11::CR rdy ie] \
o.bc 0xff00 \
o.ba 0x8800
]
 
tmpproc_dotest $cpu sym $opts
 
/trunk/tools/tbench/cp/test_cp_cpubasics.tcl
1,4 → 1,4
# $Id: test_cp_cpubasics.tcl 702 2015-07-19 17:36:09Z mueller $
# $Id: test_cp_cpubasics.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
5,7 → 5,6
#
# Revision History:
# Date Rev Version Comment
# 2015-07-19 702 1.1.1 ignore attn in stat checks
# 2015-05-09 676 1.1 w11a start/stop/suspend overhaul
# 2013-03-31 502 1.0 Initial version
#
92,13 → 91,12
 
set statgo [regbld rw11::STAT cpugo]
set statgosu [regbld rw11::STAT cpususp cpugo]
set statmask [rutil::com8 [regbld rw11::STAT attn]]; # check all but attn
 
rlc log " execute via -stapc, check cpugo and that r2 increments"
$cpu cp -wr2 00000 \
-stapc $sym(start) \
-rr2 rr2_1 -estat $statgo $statmask \
-rr2 rr2_2 -estat $statgo $statmask
-rr2 rr2_1 -estat $statgo \
-rr2 rr2_2 -estat $statgo
tmpproc_checkr2inc $rr2_1
tmpproc_checkr2inc [expr {$rr2_2 - $rr2_1}]
 
105,13 → 103,13
rlc log " suspend, check cpususp=1 and that r2 doesn't increment"
$cpu cp -suspend \
-wr2 00000 \
-rr2 -edata 0 -estat $statgosu $statmask \
-rr2 -edata 0 -estat $statgosu $statmask
-rr2 -edata 0 -estat $statgosu \
-rr2 -edata 0 -estat $statgosu
 
rlc log " resume, check cpususp=0 and that r2 increments again"
$cpu cp -resume \
-rr2 rr2_1 -estat $statgo $statmask \
-rr2 rr2_2 -estat $statgo $statmask
-rr2 rr2_1 -estat $statgo \
-rr2 rr2_2 -estat $statgo
tmpproc_checkr2inc $rr2_1
tmpproc_checkr2inc [expr {$rr2_2 - $rr2_1}]
 
/trunk/tools/tbench/cpu_all.dat
1,4 → 1,4
# $Id: cpu_all.dat 704 2015-07-25 14:18:03Z mueller $
# $Id: cpu_all.dat 683 2015-05-17 21:54:35Z mueller $
#
## steering file for all cpu tests
#
5,6 → 5,3
@cp/cp_all.dat
@w11a/w11a_all.dat
#
@w11a_cmon/w11a_cmon_all.dat
@w11a_hbpt/w11a_hbpt_all.dat
#
/trunk/tools/tbench/w11a/test_w11a_inst_traps.tcl
1,4 → 1,4
# $Id: test_w11a_inst_traps.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_w11a_inst_traps.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
70,14 → 70,14
.word 177777
}
 
rw11::asmrun $cpu sym r5 $sym(data)
rw11::asmrun $cpu sym [list r5 $sym(data) ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 0 \
r1 0 \
r2 0 \
r3 0 \
r5 [expr {$sym(data) + 6*5*2}] \
sp $sym(stack)
rw11::asmtreg $cpu [list r0 0 \
r1 0 \
r2 0 \
r3 0 \
r5 [expr {$sym(data) + 6*5*2}] \
sp $sym(stack) ]
 
# data: trap ps; trap id; stack-pc; stack-ps opcode
rw11::asmtmem $cpu $sym(data) \
/trunk/tools/tbench/w11a/test_w11a_dstm_word_flow.tcl
1,4 → 1,4
# $Id: test_w11a_dstm_word_flow.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_w11a_dstm_word_flow.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
50,19 → 50,19
pdat5e:
}
 
rw11::asmrun $cpu sym r0 010 \
r1 $sym(data1) \
r2 $sym(data2) \
r3 $sym(pdata3) \
r4 $sym(data4e) \
r5 $sym(pdat5e)
rw11::asmrun $cpu sym [list r0 010 \
r1 $sym(data1) \
r2 $sym(data2) \
r3 $sym(pdata3) \
r4 $sym(data4e) \
r5 $sym(pdat5e) ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 011 \
r1 $sym(data1) \
r2 [expr {$sym(data2) + 4}] \
r3 [expr {$sym(pdata3) + 4}] \
r4 [expr {$sym(data4e) - 4}] \
r5 [expr {$sym(pdat5e) - 4}]
rw11::asmtreg $cpu [list r0 011 \
r1 $sym(data1) \
r2 [expr {$sym(data2) + 4}] \
r3 [expr {$sym(pdata3) + 4}] \
r4 [expr {$sym(data4e) - 4}] \
r5 [expr {$sym(pdat5e) - 4}] ]
rw11::asmtmem $cpu $sym(data1) {021 031 032 041 042 051 052 061 062}
 
# ----------------------------------------------------------------------------
91,13 → 91,13
pdata3: .word data3
}
 
rw11::asmrun $cpu sym r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}]
rw11::asmrun $cpu sym [list r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}] ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}] \
r2 0 \
r3 0 \
r4 0 \
r5 0
rw11::asmtreg $cpu [list r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}] \
r2 0 \
r3 0 \
r4 0 \
r5 0 ]
rw11::asmtmem $cpu $sym(data0) {0201 0211 0221 0231 0241}
/trunk/tools/tbench/w11a/test_w11a_srcr_word_flow.tcl
1,4 → 1,4
# $Id: test_w11a_srcr_word_flow.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_w11a_srcr_word_flow.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
31,15 → 31,15
stop:
}
 
rw11::asmrun $cpu sym r0 01234
rw11::asmrun $cpu sym [list r0 01234]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 01234 \
r1 01234 \
r2 $sym(stack) \
r3 $sym(lpc) \
r4 0 \
r5 0 \
sp $sym(stack)
rw11::asmtreg $cpu [list r0 01234 \
r1 01234 \
r2 $sym(stack) \
r3 $sym(lpc) \
r4 0 \
r5 0 \
sp $sym(stack) ]
 
# ----------------------------------------------------------------------------
rlc log " (r0),(r0)+,-(r0) (mode=1,2,4)"
65,14 → 65,14
.word 1002
}
 
rw11::asmrun $cpu sym r0 $sym(data)
rw11::asmrun $cpu sym [list r0 $sym(data)]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 $sym(data) \
r1 001001 \
r2 001001 \
r3 001002 \
r4 001002 \
r5 001001
rw11::asmtreg $cpu [list r0 $sym(data) \
r1 001001 \
r2 001001 \
r3 001002 \
r4 001002 \
r5 001001 ]
 
# ----------------------------------------------------------------------------
rlc log " @(r0)+,@-(r0) (mode=3,5)"
101,14 → 101,14
data1: .word 2002
}
 
rw11::asmrun $cpu sym r0 $sym(pdata)
rw11::asmrun $cpu sym [list r0 $sym(pdata)]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 $sym(pdata) \
r1 002001 \
r2 002002 \
r3 [expr {$sym(pdata)+4}] \
r4 002002 \
r5 002001
rw11::asmtreg $cpu [list r0 $sym(pdata) \
r1 002001 \
r2 002002 \
r3 [expr {$sym(pdata)+4}] \
r4 002002 \
r5 002001 ]
 
# ----------------------------------------------------------------------------
rlc log " nn(r0),@nn(r0) (mode=6,7)"
138,14 → 138,14
data1: .word 003004
}
 
rw11::asmrun $cpu sym r0 $sym(data)
rw11::asmrun $cpu sym [list r0 $sym(data)]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 $sym(data) \
r1 003001 \
r2 003002 \
r3 003003 \
r4 003004 \
r5 0
rw11::asmtreg $cpu [list r0 $sym(data) \
r1 003001 \
r2 003002 \
r3 003003 \
r4 003004 \
r5 0 ]
 
# ----------------------------------------------------------------------------
rlc log " #nn,@#nn,var,@var (mode=27,37,67,77)"
171,11 → 171,11
data4: .word 004004
}
 
rw11::asmrun $cpu sym
rw11::asmrun $cpu sym {}
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 0 \
r1 004001 \
r2 004002 \
r3 004003 \
r4 004004 \
r5 0
rw11::asmtreg $cpu [list r0 0 \
r1 004001 \
r2 004002 \
r3 004003 \
r4 004004 \
r5 0 ]
/trunk/tools/tbench/w11a/test_w11a_div.tcl
1,4 → 1,4
# $Id: test_w11a_div.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_w11a_div.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
92,7 → 92,7
$ddh $ddl $dr16 $n $z $v $c $q16 $r16 $ddi $dri $qi $ri ]
}
 
rw11::asmrun $cpu sym r0 $ddh r1 $ddl r2 $dr16
rw11::asmrun $cpu sym [list r0 $ddh r1 $ddl r2 $dr16]
rw11::asmwait $cpu sym
 
if {!$v && !$c} { # test q and r only when V=0 C=0 expected
100,7 → 100,7
}
lappend treglist r3 $nzvc
 
set errcnt [rw11::asmtreg $cpu {*}$treglist]
set errcnt [rw11::asmtreg $cpu $treglist]
 
if {$errcnt} {
puts [format \
/trunk/tools/tbench/w11a/test_w11a_dsta_flow.tcl
1,4 → 1,4
# $Id: test_w11a_dsta_flow.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_w11a_dsta_flow.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
64,20 → 64,20
.word 177777
}
 
rw11::asmrun $cpu sym r0 $sym(sub00) \
r1 $sym(sub10) \
r2 $sym(psub2) \
r3 [expr {$sym(sub30)+2}] \
r4 $sym(psub4e) \
r5 $sym(data)
rw11::asmrun $cpu sym [list r0 $sym(sub00) \
r1 $sym(sub10) \
r2 $sym(psub2) \
r3 [expr {$sym(sub30)+2}] \
r4 $sym(psub4e) \
r5 $sym(data) ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 $sym(sub00) \
r1 [expr {$sym(sub10)+2}] \
r2 [expr {$sym(psub2)+4}] \
r3 $sym(sub30) \
r4 $sym(psub4) \
r5 [expr {$sym(data) + 7*2*2}] \
sp $sym(stack)
rw11::asmtreg $cpu [list r0 $sym(sub00) \
r1 [expr {$sym(sub10)+2}] \
r2 [expr {$sym(psub2)+4}] \
r3 $sym(sub30) \
r4 $sym(psub4) \
r5 [expr {$sym(data) + 7*2*2}] \
sp $sym(stack) ]
rw11::asmtmem $cpu $sym(data) [list \
0100 $sym(start:100$) \
0110 $sym(start:110$) \
127,17 → 127,17
.word 177777
}
 
rw11::asmrun $cpu sym r0 [expr {$sym(sub00)-020}] \
r1 [expr {$sym(psub10)-040}] \
r5 $sym(data)
rw11::asmrun $cpu sym [list r0 [expr {$sym(sub00)-020}] \
r1 [expr {$sym(psub10)-040}] \
r5 $sym(data) ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 [expr {$sym(sub00)-020}] \
r1 [expr {$sym(psub10)-040}] \
r2 0 \
r3 0 \
r4 0 \
r5 [expr {$sym(data) + 5*2*2}] \
sp $sym(stack)
rw11::asmtreg $cpu [list r0 [expr {$sym(sub00)-020}] \
r1 [expr {$sym(psub10)-040}] \
r2 0 \
r3 0 \
r4 0 \
r5 [expr {$sym(data) + 5*2*2}] \
sp $sym(stack) ]
rw11::asmtmem $cpu $sym(data) [list \
01100 $sym(start:1100$) \
01110 $sym(start:1110$) \
/trunk/tools/tbench/w11a/test_w11a_dstw_word_flow.tcl
1,4 → 1,4
# $Id: test_w11a_dstw_word_flow.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: test_w11a_dstw_word_flow.tcl 683 2015-05-17 21:54:35Z mueller $
#
# Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
50,18 → 50,18
pdat5e:
}
 
rw11::asmrun $cpu sym r1 $sym(data1) \
r2 $sym(data2) \
r3 $sym(pdata3) \
r4 $sym(data4e) \
r5 $sym(pdat5e)
rw11::asmrun $cpu sym [list r1 $sym(data1) \
r2 $sym(data2) \
r3 $sym(pdata3) \
r4 $sym(data4e) \
r5 $sym(pdat5e) ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 0100 \
r1 $sym(data1) \
r2 [expr {$sym(data2) + 4}] \
r3 [expr {$sym(pdata3) + 4}] \
r4 [expr {$sym(data4e) - 4}] \
r5 [expr {$sym(pdat5e) - 4}]
rw11::asmtreg $cpu [list r0 0100 \
r1 $sym(data1) \
r2 [expr {$sym(data2) + 4}] \
r3 [expr {$sym(pdata3) + 4}] \
r4 [expr {$sym(data4e) - 4}] \
r5 [expr {$sym(pdat5e) - 4}] ]
rw11::asmtmem $cpu $sym(data1) {0110 0120 0121 0130 0131 0140 0141 0150 0151}
 
# ----------------------------------------------------------------------------
90,13 → 90,13
pdata3: .word data3
}
 
rw11::asmrun $cpu sym r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}]
rw11::asmrun $cpu sym [list r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}] ]
rw11::asmwait $cpu sym
rw11::asmtreg $cpu r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}] \
r2 0 \
r3 0 \
r4 0 \
r5 0
rw11::asmtreg $cpu [list r0 [expr {$sym(data0)-020}] \
r1 [expr {$sym(pdata1)-040}] \
r2 0 \
r3 0 \
r4 0 \
r5 0 ]
rw11::asmtmem $cpu $sym(data0) {0200 0210 0220 0230 0240}
/trunk/tools/src/librw11/Rw11CntlRHRP.cpp
1,4 → 1,4
// $Id: Rw11CntlRHRP.cpp 720 2015-12-28 14:52:45Z mueller $
// $Id: Rw11CntlRHRP.cpp 686 2015-06-04 21:08:08Z mueller $
//
// Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
// Other credits:
15,7 → 15,6
//
// Revision History:
// Date Rev Version Comment
// 2015-12-28 720 1.0.3 use octal for er1= printouts
// 2015-06-04 686 1.0.2 check for spurious lams
// 2015-05-24 684 1.0.1 fixed rpcs2 update for wcheck and nem aborts
// 2015-05-14 680 1.0 Initial version
24,7 → 23,7
 
/*!
\file
\version $Id: Rw11CntlRHRP.cpp 720 2015-12-28 14:52:45Z mueller $
\version $Id: Rw11CntlRHRP.cpp 686 2015-06-04 21:08:08Z mueller $
\brief Implemenation of Rw11CntlRHRP.
*/
 
613,7 → 612,7
lmsg << "-I RHRP"
<< " err "
<< " cs1=" << RosPrintBvi(fRd_rpcs1,8)
<< " er1=" << RosPrintBvi(rper1,8);
<< " er1=" << RosPrintBvi(rper1,2,16);
}
 
return;
663,8 → 662,8
if (rper1 || rpcs2) {
lmsg << "-I RHRP"
<< " err "
<< " er1=" << RosPrintBvi(rper1,8)
<< " cs2=" << RosPrintBvi(rpcs2,8,8)
<< " er1=" << RosPrintBvi(rper1,2,16)
<< " cs2=" << RosPrintBvi(rpcs2,2,8)
<< endl;
}
lmsg << "-I RHRP"
/trunk/tools/src/librw11/Rw11Cpu.cpp
1,4 → 1,4
// $Id: Rw11Cpu.cpp 719 2015-12-27 09:45:43Z mueller $
// $Id: Rw11Cpu.cpp 682 2015-05-15 18:35:29Z mueller $
//
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
13,9 → 13,6
//
// Revision History:
// Date Rev Version Comment
// 2015-12-26 719 1.2.5 BUGFIX: IM* correct register offset definitions
// 2015-07-12 700 1.2.5 use ..CpuAct instead ..CpuGo (new active based lam);
// add probe and map setup for optional cpu components
// 2015-05-15 682 1.2.4 BUGFIX: Boot(): extract unit number properly
// Boot(): stop cpu before load, check unit number
// 2015-05-08 675 1.2.3 w11a start/stop/suspend overhaul
32,7 → 29,7
 
/*!
\file
\version $Id: Rw11Cpu.cpp 719 2015-12-27 09:45:43Z mueller $
\version $Id: Rw11Cpu.cpp 682 2015-05-15 18:35:29Z mueller $
\brief Implemenation of Rw11Cpu.
*/
#include <stdlib.h>
104,7 → 101,6
const uint16_t Rw11Cpu::kCPURUST_STOP;
const uint16_t Rw11Cpu::kCPURUST_STEP;
const uint16_t Rw11Cpu::kCPURUST_SUSP;
const uint16_t Rw11Cpu::kCPURUST_HBPT;
const uint16_t Rw11Cpu::kCPURUST_RUNS;
const uint16_t Rw11Cpu::kCPURUST_VECFET;
const uint16_t Rw11Cpu::kCPURUST_RECRSV;
120,40 → 116,9
 
const uint8_t Rw11Cpu::kStat_M_CmdErr;
const uint8_t Rw11Cpu::kStat_M_CmdMErr;
const uint8_t Rw11Cpu::kStat_M_CpuSusp;
const uint8_t Rw11Cpu::kStat_M_CpuHalt;
const uint8_t Rw11Cpu::kStat_M_CpuGo;
 
const uint16_t Rw11Cpu::kSCBASE;
const uint16_t Rw11Cpu::kSCCNTL;
const uint16_t Rw11Cpu::kSCADDR;
const uint16_t Rw11Cpu::kSCDATA;
 
const uint16_t Rw11Cpu::kCMBASE;
const uint16_t Rw11Cpu::kCMCNTL;
const uint16_t Rw11Cpu::kCMSTAT;
const uint16_t Rw11Cpu::kCMADDR;
const uint16_t Rw11Cpu::kCMDATA;
const uint16_t Rw11Cpu::kCMIADDR;
const uint16_t Rw11Cpu::kCMIPC;
const uint16_t Rw11Cpu::kCMIREG;
const uint16_t Rw11Cpu::kCMIMAL;
 
const uint16_t Rw11Cpu::kHBBASE;
const uint16_t Rw11Cpu::kHBSIZE;
const uint16_t Rw11Cpu::kHBNMAX;
const uint16_t Rw11Cpu::kHBCNTL;
const uint16_t Rw11Cpu::kHBSTAT;
const uint16_t Rw11Cpu::kHBHILIM;
const uint16_t Rw11Cpu::kHBLOLIM;
 
const uint16_t Rw11Cpu::kIMBASE;
const uint16_t Rw11Cpu::kIMCNTL;
const uint16_t Rw11Cpu::kIMSTAT;
const uint16_t Rw11Cpu::kIMHILIM;
const uint16_t Rw11Cpu::kIMLOLIM;
const uint16_t Rw11Cpu::kIMADDR;
const uint16_t Rw11Cpu::kIMDATA;
 
//------------------------------------------+-----------------------------------
//! Constructor
 
163,14 → 128,10
fIndex(0),
fBase(0),
fIBase(0x4000),
fHasScnt(false),
fHasCmon(false),
fHasHbpt(0),
fHasIbmon(false),
fCpuAct(0),
fCpuGo(0),
fCpuStat(0),
fCpuActMutex(),
fCpuActCond(),
fCpuGoMutex(),
fCpuGoCond(),
fCntlMap(),
fIAddrMap(),
fRAddrMap(),
189,8 → 150,69
void Rw11Cpu::Setup(Rw11* pw11)
{
fpW11 = pw11;
SetupStd();
SetupOpt();
// add control port address rbus mappings
AllRAddrMapInsert("conf" , Base()+kCPCONF);
AllRAddrMapInsert("cntl" , Base()+kCPCNTL);
AllRAddrMapInsert("stat" , Base()+kCPSTAT);
AllRAddrMapInsert("psw" , Base()+kCPPSW);
AllRAddrMapInsert("al" , Base()+kCPAL);
AllRAddrMapInsert("ah" , Base()+kCPAH);
AllRAddrMapInsert("mem" , Base()+kCPMEM);
AllRAddrMapInsert("memi" , Base()+kCPMEMI);
AllRAddrMapInsert("r0" , Base()+kCPR0);
AllRAddrMapInsert("r1" , Base()+kCPR0+1);
AllRAddrMapInsert("r2" , Base()+kCPR0+2);
AllRAddrMapInsert("r3" , Base()+kCPR0+3);
AllRAddrMapInsert("r4" , Base()+kCPR0+4);
AllRAddrMapInsert("r5" , Base()+kCPR0+5);
AllRAddrMapInsert("sp" , Base()+kCPR0+6);
AllRAddrMapInsert("pc" , Base()+kCPR0+7);
AllRAddrMapInsert("membe",Base()+kCPMEMBE);
 
// add cpu register address ibus and rbus mappings
AllIAddrMapInsert("psw" , 0177776);
AllIAddrMapInsert("stklim" , 0177774);
AllIAddrMapInsert("pirq" , 0177772);
AllIAddrMapInsert("mbrk" , 0177770);
AllIAddrMapInsert("cpuerr" , 0177766);
AllIAddrMapInsert("sysid" , 0177764);
AllIAddrMapInsert("hisize" , 0177762);
AllIAddrMapInsert("losize" , 0177760);
 
AllIAddrMapInsert("hm" , 0177752);
AllIAddrMapInsert("maint" , 0177750);
AllIAddrMapInsert("cntrl" , 0177746);
AllIAddrMapInsert("syserr" , 0177744);
AllIAddrMapInsert("hiaddr" , 0177742);
AllIAddrMapInsert("loaddr" , 0177740);
 
AllIAddrMapInsert("ssr2" , 0177576);
AllIAddrMapInsert("ssr1" , 0177574);
AllIAddrMapInsert("ssr0" , 0177572);
 
AllIAddrMapInsert("sdreg" , 0177570);
 
AllIAddrMapInsert("ssr3" , 0172516);
 
// add mmu segment register files
string sdr = "sdr";
string sar = "sar";
for (char i=0; i<8; i++) {
char ichar = '0'+i;
AllIAddrMapInsert(sdr+"ki."+ichar, 0172300+2*i);
AllIAddrMapInsert(sdr+"kd."+ichar, 0172320+2*i);
AllIAddrMapInsert(sar+"ki."+ichar, 0172340+2*i);
AllIAddrMapInsert(sar+"kd."+ichar, 0172360+2*i);
AllIAddrMapInsert(sdr+"si."+ichar, 0172200+2*i);
AllIAddrMapInsert(sdr+"sd."+ichar, 0172220+2*i);
AllIAddrMapInsert(sar+"si."+ichar, 0172240+2*i);
AllIAddrMapInsert(sar+"sd."+ichar, 0172260+2*i);
AllIAddrMapInsert(sdr+"ui."+ichar, 0177600+2*i);
AllIAddrMapInsert(sdr+"ud."+ichar, 0177620+2*i);
AllIAddrMapInsert(sar+"ui."+ichar, 0177640+2*i);
AllIAddrMapInsert(sar+"ud."+ichar, 0177660+2*i);
}
 
return;
}
 
700,7 → 722,7
clist.Clear();
clist.AddWreg(fBase+kCPPC, astart); // load PC
clist.AddWreg(fBase+kCPCNTL, kCPFUNC_START); // and start
SetCpuActUp();
SetCpuGoUp();
if (!Server().Exec(clist, emsg)) return false;
 
return true;
709,12 → 731,12
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
void Rw11Cpu::SetCpuActUp()
void Rw11Cpu::SetCpuGoUp()
{
boost::lock_guard<boost::mutex> lock(fCpuActMutex);
fCpuAct = true;
boost::lock_guard<boost::mutex> lock(fCpuGoMutex);
fCpuGo = true;
fCpuStat = 0;
fCpuActCond.notify_all();
fCpuGoCond.notify_all();
return;
}
 
721,13 → 743,13
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
void Rw11Cpu::SetCpuActDown(uint16_t stat)
void Rw11Cpu::SetCpuGoDown(uint16_t stat)
{
if ((stat & kCPSTAT_M_CpuGo) == 0 || (stat & kCPSTAT_M_CpuSusp) != 0 ) {
boost::lock_guard<boost::mutex> lock(fCpuActMutex);
fCpuAct = false;
if ((stat & kCPSTAT_M_CpuGo) == 0) {
boost::lock_guard<boost::mutex> lock(fCpuGoMutex);
fCpuGo = false;
fCpuStat = stat;
fCpuActCond.notify_all();
fCpuGoCond.notify_all();
}
return;
}
735,15 → 757,15
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
double Rw11Cpu::WaitCpuActDown(double tout)
double Rw11Cpu::WaitCpuGoDown(double tout)
{
boost::system_time t0(boost::get_system_time());
boost::system_time timeout(boost::posix_time::max_date_time);
if (tout > 0.)
timeout = t0 + boost::posix_time::microseconds((long)1E6 * tout);
boost::unique_lock<boost::mutex> lock(fCpuActMutex);
while (fCpuAct) {
if (!fCpuActCond.timed_wait(lock, timeout)) return -1.;
boost::unique_lock<boost::mutex> lock(fCpuGoMutex);
while (fCpuGo) {
if (!fCpuGoCond.timed_wait(lock, timeout)) return -1.;
}
boost::posix_time::time_duration dt = boost::get_system_time() - t0;
return double(dt.ticks()) / dt.ticks_per_second();
793,7 → 815,7
RlinkCommandList clist;
clist.AddRreg(fBase+kCPSTAT);
Server().Exec(clist);
SetCpuActDown(clist[0].Data());
SetCpuGoDown(clist[0].Data());
return;
}
 
810,11 → 832,7
os << bl << " fIndex: " << fIndex << endl;
os << bl << " fBase: " << RosPrintf(fBase,"$x0",4) << endl;
os << bl << " fIBase: " << RosPrintf(fIBase,"$x0",4) << endl;
os << bl << " fHasScnt: " << fHasScnt << endl;
os << bl << " fHasCmon: " << fHasCmon << endl;
os << bl << " fHasHbpt: " << fHasHbpt << endl;
os << bl << " fHasIbmon: " << fHasIbmon << endl;
os << bl << " fCpuAct: " << fCpuAct << endl;
os << bl << " fCpuGo: " << fCpuGo << endl;
os << bl << " fCpuStat: " << RosPrintf(fCpuStat,"$x0",4) << endl;
os << bl << " fCntlMap: " << endl;
for (cmap_cit_t it=fCntlMap.begin(); it!=fCntlMap.end(); it++) {
827,151 → 845,4
return;
}
 
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
void Rw11Cpu::SetupStd()
{
// add control port address rbus mappings
AllRAddrMapInsert("conf" , Base()+kCPCONF);
AllRAddrMapInsert("cntl" , Base()+kCPCNTL);
AllRAddrMapInsert("stat" , Base()+kCPSTAT);
AllRAddrMapInsert("psw" , Base()+kCPPSW);
AllRAddrMapInsert("al" , Base()+kCPAL);
AllRAddrMapInsert("ah" , Base()+kCPAH);
AllRAddrMapInsert("mem" , Base()+kCPMEM);
AllRAddrMapInsert("memi" , Base()+kCPMEMI);
AllRAddrMapInsert("r0" , Base()+kCPR0);
AllRAddrMapInsert("r1" , Base()+kCPR0+1);
AllRAddrMapInsert("r2" , Base()+kCPR0+2);
AllRAddrMapInsert("r3" , Base()+kCPR0+3);
AllRAddrMapInsert("r4" , Base()+kCPR0+4);
AllRAddrMapInsert("r5" , Base()+kCPR0+5);
AllRAddrMapInsert("sp" , Base()+kCPR0+6);
AllRAddrMapInsert("pc" , Base()+kCPR0+7);
AllRAddrMapInsert("membe", Base()+kCPMEMBE);
 
// add cpu register address ibus and rbus mappings
AllIAddrMapInsert("psw" , 0177776);
AllIAddrMapInsert("stklim" , 0177774);
AllIAddrMapInsert("pirq" , 0177772);
AllIAddrMapInsert("mbrk" , 0177770);
AllIAddrMapInsert("cpuerr" , 0177766);
AllIAddrMapInsert("sysid" , 0177764);
AllIAddrMapInsert("hisize" , 0177762);
AllIAddrMapInsert("losize" , 0177760);
 
AllIAddrMapInsert("hm" , 0177752);
AllIAddrMapInsert("maint" , 0177750);
AllIAddrMapInsert("cntrl" , 0177746);
AllIAddrMapInsert("syserr" , 0177744);
AllIAddrMapInsert("hiaddr" , 0177742);
AllIAddrMapInsert("loaddr" , 0177740);
 
AllIAddrMapInsert("ssr2" , 0177576);
AllIAddrMapInsert("ssr1" , 0177574);
AllIAddrMapInsert("ssr0" , 0177572);
 
AllIAddrMapInsert("sdreg" , 0177570);
 
AllIAddrMapInsert("ssr3" , 0172516);
 
// add mmu segment register files
string sdr = "sdr";
string sar = "sar";
for (char i=0; i<8; i++) {
char ichar = '0'+i;
AllIAddrMapInsert(sdr+"ki."+ichar, 0172300+2*i);
AllIAddrMapInsert(sdr+"kd."+ichar, 0172320+2*i);
AllIAddrMapInsert(sar+"ki."+ichar, 0172340+2*i);
AllIAddrMapInsert(sar+"kd."+ichar, 0172360+2*i);
AllIAddrMapInsert(sdr+"si."+ichar, 0172200+2*i);
AllIAddrMapInsert(sdr+"sd."+ichar, 0172220+2*i);
AllIAddrMapInsert(sar+"si."+ichar, 0172240+2*i);
AllIAddrMapInsert(sar+"sd."+ichar, 0172260+2*i);
AllIAddrMapInsert(sdr+"ui."+ichar, 0177600+2*i);
AllIAddrMapInsert(sdr+"ud."+ichar, 0177620+2*i);
AllIAddrMapInsert(sar+"ui."+ichar, 0177640+2*i);
AllIAddrMapInsert(sar+"ud."+ichar, 0177660+2*i);
}
 
return;
}
 
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
void Rw11Cpu::SetupOpt()
{
// probe optional components: dmscnt, dmcmon, dmhbpt and ibmon
RlinkCommandList clist;
 
int isc = clist.AddRreg(Base()+kSCBASE+kSCCNTL);
clist.SetLastExpectStatus(0,0); // disable stat check
 
int icm = clist.AddRreg(Base()+kCMBASE+kCMCNTL);
clist.SetLastExpectStatus(0,0);
 
int ihb[kHBNMAX];
for (int i=0; i<kHBNMAX; i++) {
ihb[i] = clist.AddRreg(Base()+kHBBASE+i*kHBSIZE+kHBCNTL);
clist.SetLastExpectStatus(0,0);
}
int iim = AddRibr(clist, kIMBASE+kIMCNTL);
clist.SetLastExpectStatus(0,0);
 
Connect().Exec(clist);
 
uint8_t statmsk = RlinkCommand::kStat_M_RbTout |
RlinkCommand::kStat_M_RbNak |
RlinkCommand::kStat_M_RbErr;
fHasScnt = (clist[isc].Status() & statmsk) == 0;
if (fHasScnt) {
uint16_t base = Base() + kSCBASE;
AllRAddrMapInsert("sc.cntl" , base + kSCCNTL);
AllRAddrMapInsert("sc.addr" , base + kSCADDR);
AllRAddrMapInsert("sc.data" , base + kSCDATA);
}
 
fHasCmon = (clist[icm].Status() & statmsk) == 0;
if (fHasCmon) {
uint16_t base = Base() + kCMBASE;
AllRAddrMapInsert("cm.cntl" , base + kCMCNTL);
AllRAddrMapInsert("cm.stat" , base + kCMSTAT);
AllRAddrMapInsert("cm.addr" , base + kCMADDR);
AllRAddrMapInsert("cm.data" , base + kCMDATA);
AllRAddrMapInsert("cm.iaddr" , base + kCMIADDR);
AllRAddrMapInsert("cm.ipc" , base + kCMIPC);
AllRAddrMapInsert("cm.ireg" , base + kCMIREG);
AllRAddrMapInsert("cm.imal" , base + kCMIMAL);
}
fHasHbpt = 0;
for (int i=0; i<kHBNMAX; i++) {
if ((clist[ihb[i]].Status() & statmsk) != 0) break;
fHasHbpt += 1;
uint16_t base = Base() + kHBBASE + i*kHBSIZE;
std::string pref = "hb";
pref += '0'+i;
AllRAddrMapInsert(pref+".cntl" , base + kHBCNTL);
AllRAddrMapInsert(pref+".stat" , base + kHBSTAT);
AllRAddrMapInsert(pref+".hilim" , base + kHBHILIM);
AllRAddrMapInsert(pref+".lolim" , base + kHBLOLIM);
}
 
fHasIbmon = (clist[iim].Status() & statmsk) == 0;
if (fHasIbmon) {
AllIAddrMapInsert("im.cntl", kIMBASE + kIMCNTL);
AllIAddrMapInsert("im.stat", kIMBASE + kIMSTAT);
AllIAddrMapInsert("im.hilim", kIMBASE + kIMHILIM);
AllIAddrMapInsert("im.lolim", kIMBASE + kIMLOLIM);
AllIAddrMapInsert("im.addr", kIMBASE + kIMADDR);
AllIAddrMapInsert("im.data", kIMBASE + kIMDATA);
}
 
return;
}
 
 
} // end namespace Retro
/trunk/tools/src/librw11/Rw11Cpu.hpp
1,4 → 1,4
// $Id: Rw11Cpu.hpp 721 2015-12-29 17:50:50Z mueller $
// $Id: Rw11Cpu.hpp 675 2015-05-08 21:05:08Z mueller $
//
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
13,9 → 13,6
//
// Revision History:
// Date Rev Version Comment
// 2015-12-28 721 1.2.5 BUGFIX: IM* correct register offset definitions
// 2015-07-12 700 1.2.4 use ..CpuAct instead ..CpuGo (new active based lam);
// add probe and map setup for optional cpu components
// 2015-05-08 675 1.2.3 w11a start/stop/suspend overhaul
// 2015-04-25 668 1.2.2 add AddRbibr(), AddWbibr()
// 2015-04-03 661 1.2.1 add kStat_M_* defs
29,7 → 26,7
 
/*!
\file
\version $Id: Rw11Cpu.hpp 721 2015-12-29 17:50:50Z mueller $
\version $Id: Rw11Cpu.hpp 675 2015-05-08 21:05:08Z mueller $
\brief Declaration of class Rw11Cpu.
*/
 
80,11 → 77,6
uint16_t Base() const;
uint16_t IBase() const;
 
bool HasScnt() const;
bool HasCmon() const;
uint16_t HasHbpt() const;
bool HasIbmon() const;
 
void AddCntl(const boost::shared_ptr<Rw11Cntl>& spcntl);
bool TestCntl(const std::string& name) const;
void ListCntl(std::vector<std::string>& list) const;
127,10 → 119,10
bool trace=false);
bool Boot(const std::string& uname, RerrMsg& emsg);
 
void SetCpuActUp();
void SetCpuActDown(uint16_t stat);
double WaitCpuActDown(double tout);
bool CpuAct() const;
void SetCpuGoUp();
void SetCpuGoDown(uint16_t stat);
double WaitCpuGoDown(double tout);
bool CpuGo() const;
uint16_t CpuStat() const;
 
uint16_t IbusRemoteAddr(uint16_t ibaddr) const;
192,7 → 184,6
static const uint16_t kCPURUST_STOP = 0x3; //!< cpu was stopped
static const uint16_t kCPURUST_STEP = 0x4; //!< cpu was stepped
static const uint16_t kCPURUST_SUSP = 0x5; //!< cpu was suspended
static const uint16_t kCPURUST_HBPT = 0x6; //!< cpu hardware bpt
static const uint16_t kCPURUST_RUNS = 0x7; //!< cpu running
static const uint16_t kCPURUST_VECFET = 0x8; //!< vector fetch halt
static const uint16_t kCPURUST_RECRSV = 0x9; //!< rec red-stack halt
209,45 → 200,9
// defs for the four status bits defined by w11 rbus iface
static const uint8_t kStat_M_CmdErr = kBBit07; //!< stat: cmderr flag
static const uint8_t kStat_M_CmdMErr = kBBit06; //!< stat: cmdmerr flag
static const uint8_t kStat_M_CpuSusp = kBBit05; //!< stat: cpususp flag
static const uint8_t kStat_M_CpuHalt = kBBit05; //!< stat: cpuhalt flag
static const uint8_t kStat_M_CpuGo = kBBit04; //!< stat: cpugo flag
 
// defs for optional w11 components
static const uint16_t kSCBASE = 0x0040; //!< DMSCNT reg base offset
static const uint16_t kSCCNTL = 0x0000; //!< SC.CNTL reg offset
static const uint16_t kSCADDR = 0x0001; //!< SC.ADDR reg offset
static const uint16_t kSCDATA = 0x0002; //!< SC.DATA reg offset
 
static const uint16_t kCMBASE = 0x0048; //!< DMCMON reg base offset
static const uint16_t kCMCNTL = 0x0000; //!< CM.CNTL reg offset
static const uint16_t kCMSTAT = 0x0001; //!< CM.STAT reg offset
static const uint16_t kCMADDR = 0x0002; //!< CM.ADDR reg offset
static const uint16_t kCMDATA = 0x0003; //!< CM.DATA reg offset
static const uint16_t kCMIADDR = 0x0004; //!< CM.IADDR reg offset
static const uint16_t kCMIPC = 0x0005; //!< CM.IPC reg offset
static const uint16_t kCMIREG = 0x0006; //!< CM.IREG reg offset
static const uint16_t kCMIMAL = 0x0007; //!< CM.IMAL reg offset
 
static const uint16_t kHBBASE = 0x0050; //!< DMHBPT reg base offset
static const uint16_t kHBSIZE = 0x0004; //!< DMHBPT unit size
static const uint16_t kHBNMAX = 0x0004; //!< DMHBPT max number units
static const uint16_t kHBCNTL = 0x0000; //!< HB.CNTL reg offset
static const uint16_t kHBSTAT = 0x0001; //!< HB.STAT reg offset
static const uint16_t kHBHILIM = 0x0002; //!< HB.HILIM reg offset
static const uint16_t kHBLOLIM = 0x0003; //!< HB.LOLIM reg offset
 
static const uint16_t kIMBASE = 0160000; //!< Ibmon ibus address
static const uint16_t kIMCNTL = 0x0000; //!< IM.CNTL reg offset
static const uint16_t kIMSTAT = 0x0002; //!< IM.STAT reg offset
static const uint16_t kIMHILIM = 0x0004; //!< IM.HILIM reg offset
static const uint16_t kIMLOLIM = 0x0006; //!< IM.LOLIM reg offset
static const uint16_t kIMADDR = 0x0008; //!< IM.ADDR reg offset
static const uint16_t kIMDATA = 0x000a; //!< IM.DATA reg offset
 
protected:
void SetupStd();
void SetupOpt();
 
private:
Rw11Cpu() {} //!< default ctor blocker
 
257,14 → 212,10
size_t fIndex;
uint16_t fBase;
uint16_t fIBase;
bool fHasScnt; //!< has dmscnt (state counter)
bool fHasCmon; //!< has dmcmon (cpu monitor)
uint16_t fHasHbpt; //!< has dmhbpt (hardware breakpoint)
bool fHasIbmon; //!< has ibmon (ibus monitor)
bool fCpuAct;
bool fCpuGo;
uint16_t fCpuStat;
boost::mutex fCpuActMutex;
boost::condition_variable fCpuActCond;
boost::mutex fCpuGoMutex;
boost::condition_variable fCpuGoCond;
cmap_t fCntlMap; //!< name->cntl map
RlinkAddrMap fIAddrMap; //!< ibus name<->address mapping
RlinkAddrMap fRAddrMap; //!< rbus name<->address mapping
/trunk/tools/src/librw11/Rw11Cpu.ipp
1,4 → 1,4
// $Id: Rw11Cpu.ipp 700 2015-07-12 19:28:31Z mueller $
// $Id: Rw11Cpu.ipp 659 2015-03-22 23:15:51Z mueller $
//
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
13,7 → 13,6
//
// Revision History:
// Date Rev Version Comment
// 2015-07-12 700 1.2.1 use ..CpuAct instead ..CpuGo (new active based lam)
// 2015-03-21 659 1.2 add RAddrMap
// 2014-12-25 621 1.1 Adopt for 4k word ibus window; add IAddrMap
// 2013-04-12 504 1.0 Initial version
22,7 → 21,7
 
/*!
\file
\version $Id: Rw11Cpu.ipp 700 2015-07-12 19:28:31Z mueller $
\version $Id: Rw11Cpu.ipp 659 2015-03-22 23:15:51Z mueller $
\brief Implemenation (inline) of Rw11Cpu.
*/
 
96,38 → 95,6
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
inline bool Rw11Cpu::HasScnt() const
{
return fHasScnt;
}
 
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
inline bool Rw11Cpu::HasCmon() const
{
return fHasCmon;
}
 
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
inline uint16_t Rw11Cpu::HasHbpt() const
{
return fHasHbpt;
}
 
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
inline bool Rw11Cpu::HasIbmon() const
{
return fHasIbmon;
}
 
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
inline uint16_t Rw11Cpu::CpuStat() const
{
return fCpuStat;
136,9 → 103,9
//------------------------------------------+-----------------------------------
//! FIXME_docs
 
inline bool Rw11Cpu::CpuAct() const
inline bool Rw11Cpu::CpuGo() const
{
return fCpuAct;
return fCpuGo;
}
 
//------------------------------------------+-----------------------------------
/trunk/tools/src/librwxxtpp/RtclRw11Cpu.cpp
1,4 → 1,4
// $Id: RtclRw11Cpu.cpp 718 2015-12-26 15:59:48Z mueller $
// $Id: RtclRw11Cpu.cpp 682 2015-05-15 18:35:29Z mueller $
//
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
//
13,10 → 13,6
//
// Revision History:
// Date Rev Version Comment
// 2015-12-26 718 1.2.8 use BlockSizeMax() for 'cp -b[rw]m' and 'ldasm'
// 2015-07-12 700 1.2.4 use ..CpuAct instead ..CpuGo (new active based lam);
// add probe and map setup for optional cpu components
// 2015-06-27 695 1.2.3 M_get: add ibase getter
// 2015-05-04 674 1.2.2 w11a start/stop/suspend overhaul
// 2015-04-25 668 1.2.1 M_cp: add -rbibr, wbibr; GetRAddr: drop odd check
// 2015-04-03 661 1.2 expect logic: drop estatdef, use LastExpect..
37,7 → 33,7
 
/*!
\file
\version $Id: RtclRw11Cpu.cpp 718 2015-12-26 15:59:48Z mueller $
\version $Id: RtclRw11Cpu.cpp 682 2015-05-15 18:35:29Z mueller $
\brief Implemenation of RtclRw11Cpu.
*/
 
349,7 → 345,7
string varprint;
string vardump;
 
bool setcpuact = false;
bool setcpugo = false;
 
while (args.NextOpt(opt, optset)) {
size_t lsize = clist.Size();
521,7 → 517,7
 
} else if (opt == "-brm") { // -brm size ?varData ?varStat ---
int32_t bsize;
if (!args.GetArg("bsize", bsize, 1, Connect().BlockSizeMax())) return kERR;
if (!args.GetArg("bsize", bsize, 1, 256)) return kERR;
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR;
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
clist.AddRblk(base + Rw11Cpu::kCPMEMI, (size_t) bsize);
528,7 → 524,7
 
} else if (opt == "-bwm") { // -bwm block ?varStat -----------
vector<uint16_t> block;
if (!args.GetArg("data", block, 1, Connect().BlockSizeMax())) return kERR;
if (!args.GetArg("data", block, 1, 256)) return kERR;
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
clist.AddWblk(base + Rw11Cpu::kCPMEMI, block);
535,7 → 531,7
} else if (opt == "-start") { // -start ?varStat ---------------
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
clist.AddWreg(base + Rw11Cpu::kCPCNTL, Rw11Cpu::kCPFUNC_START);
setcpuact = true;
setcpugo = true;
 
} else if (opt == "-stop") { // -stop ?varStat ----------------
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
560,7 → 556,6
} else if (opt == "-resume") { // -resume ?varStat --------------
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR;
clist.AddWreg(base + Rw11Cpu::kCPCNTL, Rw11Cpu::kCPFUNC_RESUME);
setcpuact = true;
 
} else if (opt == "-stapc") { // -stapc addr ?varStat ----------
uint16_t data;
570,7 → 565,7
clist.AddWreg(base + Rw11Cpu::kCPCNTL, Rw11Cpu::kCPFUNC_CRESET);
clist.AddWreg(base + Rw11Cpu::kCPPC, data);
clist.AddWreg(base + Rw11Cpu::kCPCNTL, Rw11Cpu::kCPFUNC_START);
setcpuact = true;
setcpugo = true;
 
} else if (opt == "-rmembe") { // -rmembe ?varData ?varStat ------
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR;
712,7 → 707,7
if (clist.Size() == 0) return kOK;
 
// signal cpugo up before clist executed to prevent races
if (setcpuact) Obj().SetCpuActUp();
if (setcpugo) Obj().SetCpuGoUp();
 
RerrMsg emsg;
// this one intentionally on Connect() to allow mixing of rlc + w11 commands
800,7 → 795,7
}
 
} else { // server is active
twait = Obj().WaitCpuActDown(tout);
twait = Obj().WaitCpuGoDown(tout);
}
 
if (twait < 0.) { // timeout
1140,7 → 1135,7
for (cmap_it_t it=cmap.begin(); it!=cmap.end(); it++) {
//cout << "+++2 mem[" << RosPrintf(it->first, "o0", 6)
// << "]=" << RosPrintf(it->second, "o0", 6) << endl;
if (dot != it->first || block.size() >= Connect().BlockSizeMax()) {
if (dot != it->first || block.size() == 256) {
if (block.size()) {
if (!Obj().MemWrite(base, block, emsg)) return args.Quit(emsg);
block.clear();
1213,7 → 1208,7
 
const char* mode[4] = {"k","s","?","u"};
const char* rust[16] = {"init", "HALTed", "reset", "stopped",
"stepped", "suspend", "hbpt", "..run..",
"stepped", "suspend", "0110", "..run..",
"F:vecfet", "F:redstk", "1010", "1011",
"F:seq", "F:vmbox" , "1101", "1111"};
 
1435,14 → 1430,9
void RtclRw11Cpu::SetupGetSet()
{
Rw11Cpu* pobj = &Obj();
fGets.Add<const string&>("type", boost::bind(&Rw11Cpu::Type, pobj));
fGets.Add<size_t> ("index", boost::bind(&Rw11Cpu::Index, pobj));
fGets.Add<uint16_t> ("base", boost::bind(&Rw11Cpu::Base, pobj));
fGets.Add<uint16_t> ("ibase", boost::bind(&Rw11Cpu::IBase, pobj));
fGets.Add<bool> ("hasscnt", boost::bind(&Rw11Cpu::HasScnt, pobj));
fGets.Add<bool> ("hascmon", boost::bind(&Rw11Cpu::HasCmon, pobj));
fGets.Add<uint16_t> ("hashbpt", boost::bind(&Rw11Cpu::HasHbpt, pobj));
fGets.Add<bool> ("hasibmon", boost::bind(&Rw11Cpu::HasIbmon, pobj));
fGets.Add<const string&>("type", boost::bind(&Rw11Cpu::Type, pobj));
fGets.Add<size_t> ("index", boost::bind(&Rw11Cpu::Index, pobj));
fGets.Add<uint16_t> ("base", boost::bind(&Rw11Cpu::Base, pobj));
return;
}
 
trunk/tools/bin/dmscntconv Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: trunk/tools/bin/dmscntanal =================================================================== --- trunk/tools/bin/dmscntanal (revision 34) +++ trunk/tools/bin/dmscntanal (nonexistent) @@ -1,488 +0,0 @@ -#!/usr/bin/perl -w -# $Id: dmscntanal 721 2015-12-29 17:50:50Z mueller $ -# -# Copyright 2015- by Walter F.J. Mueller -# -# 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 -# Software Foundation, either version 2, or at your option any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for complete details. -# -# Revision History: -# Date Rev Version Comment -# 2015-06-28 696 1.0 Initial version -# - -use 5.14.0; # require Perl 5.14 or higher -use strict; # require strict checking - -use Getopt::Long; - -my %opts = (); - -GetOptions(\%opts, "help", "raw") - or die "bad options"; - -sub print_help; -sub read_file; -sub show_raw; -sub add_groups; -sub group_new; - -my @snum2nam; -my %snam2num; -my %dat_all; -my %dat_km; -my %dat_um; -my $sum_all; -my $sum_km; -my $sum_um; - -autoflush STDOUT 1 if (-p STDOUT); # autoflush if output into pipe - -if (exists $opts{help}) { - print_help; - exit 0; -} - -foreach my $file (@ARGV) { - read_file($file); - add_groups(); - show_raw() if exists $opts{raw}; - show_frac(); -} - -#------------------------------------------------------------------------------- - -sub read_file { - my ($file) = @_; - - %dat_km = (); - %dat_um = (); - %dat_all = (); - @snum2nam = (); - %snam2num = (); - $sum_all = 0; - $sum_km = 0; - $sum_um = 0; - - open IFILE,"<$file" or die "failed to open $file"; - - while () { - chomp; - next if m/^#/; - if (m/^\s*([[:xdigit:]]+) - \s+(\w+) - \s+(\d+) - \s+(\d+) - \s+(\d+)/x) { - my $snum = hex($1); - my $snam = $2; - my $all = 1. * "$3."; - my $km = 1. * "$4."; - my $um = 1. * "$5."; - - $snum2nam[$snum] = $snam; - $snam2num{$snam} = $snum; - - $dat_all{$snam} += $all; - $dat_km{$snam} += $km; - $dat_um{$snam} += $um; - - $sum_all += $all; - $sum_km += $km; - $sum_um += $um; - - } else { - printf STDERR "bad line: $_\n"; - } - } - - close IFILE; - -} - -#------------------------------------------------------------------------------- - -sub show_raw { - print "#\n"; - print "#sn state all km usm" . - " all% km% usm%\n"; - printf "# sum_all %11.0f %11.0f %11.0f %6.2f %6.2f %6.2f\n", - $sum_all, $sum_km, $sum_um, - get_frac(100., $sum_all, $sum_all), - get_frac(100., $sum_km, $sum_all), - get_frac(100., $sum_um, $sum_all); - - for (my $snum=0; $snum 0.; - return $fact*($nom/$denom); -} - -#------------------------------------------------------------------------------- - -sub add_groups { - group_new(0x100, 'g_sum'); - $dat_all{g_sum} = $sum_all; - $dat_km{g_sum} = $sum_km; - $dat_um{g_sum} = $sum_um; - - group_new(0x110, 'g_cp', - 's_cp_regread', - 's_cp_rps', - 's_cp_memr_w', - 's_cp_memw_w'); - - group_new(0x111, 'g_cp_mem', - 's_idle', - 's_cp_memr_w', - 's_cp_memw_w', - '-', - 's_int_ext'); - - group_new(0x112, 'g_ifetdec', - 's_ifetch', - 's_ifetch_w', - 's_idecode'); - - group_new(0x113, 'g_srcr', - 's_srcr_def', - 's_srcr_def_w', - 's_srcr_inc', - 's_srcr_inc_w', - 's_srcr_dec', - 's_srcr_dec1', - 's_srcr_ind', - 's_srcr_ind1_w', - 's_srcr_ind2', - 's_srcr_ind2_w'); - - group_new(0x114, 'g_dstr', - 's_dstr_def', - 's_dstr_def_w', - 's_dstr_inc', - 's_dstr_inc_w', - 's_dstr_dec', - 's_dstr_dec1', - 's_dstr_ind', - 's_dstr_ind1_w', - 's_dstr_ind2', - 's_dstr_ind2_w'); - - group_new(0x115, 'g_dstw', - 's_dstw_def', - 's_dstw_def_w', - 's_dstw_inc', - 's_dstw_inc_w', - 's_dstw_incdef_w', - 's_dstw_dec', - 's_dstw_dec1', - 's_dstw_ind', - 's_dstw_ind_w', - 's_dstw_def246'); - - group_new(0x116, 'g_dsta', - 's_dsta_inc', - 's_dsta_incdef_w', - 's_dsta_dec', - 's_dsta_dec1', - 's_dsta_ind', - 's_dsta_ind_w'); - - group_new(0x120, 'g_op_rts', - 's_op_rts', - 's_op_rts_pop', - 's_op_rts_pop_w'); - - group_new(0x121, 'g_op_sob', - 's_op_sob', - 's_op_sob1'); - - group_new(0x122, 'g_op_gen', - 's_opg_gen', - 's_opg_gen_rmw_w'); - - group_new(0x123, 'g_op_mul', - 's_opg_mul', - 's_opg_mul1'); - - group_new(0x124, 'g_op_div', - 's_opg_div', - 's_opg_div_cn', - 's_opg_div_cr', - 's_opg_div_sq', - 's_opg_div_sr', - 's_opg_div_quit'); - - group_new(0x125, 'g_op_ash', - 's_opg_ash', - 's_opg_ash_cn'); - - group_new(0x126, 'g_op_ashc', - 's_opg_ashc', - 's_opg_ashc_cn', - 's_opg_ashc_wl'); - - group_new(0x127, 'g_op_jsr', - 's_opa_jsr', - 's_opa_jsr1', - 's_opa_jsr_push', - 's_opa_jsr_push_w', - 's_opa_jsr2'); - - group_new(0x128, 'g_op_mtp', - 's_opa_mtp', - 's_opa_mtp_pop_w', - 's_opa_mtp_reg', - 's_opa_mtp_mem', - 's_opa_mtp_mem_w'); - - group_new(0x129, 'g_op_mfp', - 's_opa_mfp_reg', - 's_opa_mfp_mem', - 's_opa_mfp_mem_w', - 's_opa_mfp_dec', - 's_opa_mfp_push', - 's_opa_mfp_push_w'); - - group_new(0x12a, 'g_int', - 's_int_ext', - 's_int_getpc', - 's_int_getpc_w', - 's_int_getps', - 's_int_getps_w', - 's_int_getsp', - 's_int_decsp', - 's_int_pushps', - 's_int_pushps_w', - 's_int_pushpc', - 's_int_pushpc_w'); - - group_new(0x12b, 'g_rti', - 's_rti_getpc', - 's_rti_getpc_w', - 's_rti_getps', - 's_rti_getps_w', - 's_rti_newpc'); - - group_new(0x130, 'g_op_jsrrts', - 'g_op_jsr', - 'g_op_rts'); - - group_new(0x131, 'g_flow', - 's_op_br', - 's_op_sob', - 's_opa_jmp', - 's_opa_jsr', - 's_op_rts'); - - group_new(0x13a, 'g_intrti', - 'g_int', - 'g_rti'); - - group_new(0x101, 'g_sum_noidle', - 'g_sum', - '-', - 'g_cp_mem', - 's_op_wait'); - - group_new(0x102, 'g_sum_exec', - 'g_sum_noidle', - '-', - 'g_int', - 'g_rti'); - - group_new(0x140, 'g_ifetch_wextra', - 's_ifetch_w', - '-', - 's_ifetch'); - - group_new(0x141, 'g_srcr_wextra', - 's_srcr_def_w', - 's_srcr_inc_w', - 's_srcr_ind1_w', - 's_srcr_ind2_w', - '-', - 's_srcr_def', - 's_srcr_inc', - 's_srcr_ind', - 's_srcr_ind2'); - - group_new(0x142, 'g_dstr_wextra', - 's_dstr_def_w', - 's_dstr_inc_w', - 's_dstr_ind1_w', - 's_dstr_ind2_w', - '-', - 's_dstr_def', - 's_dstr_inc', - 's_dstr_ind', - 's_dstr_ind2'); - - group_new(0x143, 'g_dstw_wextra', - 's_dstw_def_w', - 's_dstw_inc_w', - 's_dstw_incdef_w', - 's_dstw_ind_w', - '-', - 's_dstw_def', - 's_dstw_inc', - 's_dstw_ind', - 's_dstw_def246'); - - group_new(0x144, 'g_dsta_wextra', - 's_dsta_incdef_w', - 's_dsta_ind_w', - '-', - 's_dsta_inc', - 's_dsta_ind'); - - group_new(0x145, 'g_op_rts_wextra', - 's_op_rts_pop_w', - '-', - 's_op_rts_pop'); - - group_new(0x146, 'g_op_jsr_wextra', - 's_opa_jsr_push_w', - '-', - 's_opa_jsr_push'); - - group_new(0x147, 'g_op_mtp_wextra', - 's_opa_mtp_pop_w', - 's_opa_mtp_mem_w', - '-', - 's_opa_mtp', - 's_opa_mtp_mem'); - - group_new(0x148, 'g_op_mfp_wextra', - 's_opa_mfp_mem_w', - 's_opa_mfp_push_w', - '-', - 's_opa_mfp_mem', - 's_opa_mfp_push'); - - group_new(0x149, 'g_int_wextra', - 's_int_getpc_w', - 's_int_getps_w', - 's_int_pushps_w', - 's_int_pushpc_w', - '-', - 's_int_getpc', - 's_int_getps', - 's_int_pushps', - 's_int_pushpc'); - - group_new(0x14a, 'g_rti_wextra', - 's_rti_getpc_w', - 's_rti_getps_w', - '-', - 's_rti_getpc', - 's_rti_getps'); - - group_new(0x14f, 'g_all_wextra', - 'g_ifetch_wextra', - 'g_srcr_wextra', - 'g_dstr_wextra', - 'g_dstw_wextra', - 'g_dsta_wextra', - 'g_op_rts_wextra', - 'g_op_jsr_wextra', - 'g_op_mtp_wextra', - 'g_op_mfp_wextra', - 'g_int_wextra', - 'g_rti_wextra'); -} - -#------------------------------------------------------------------------------- - -sub group_new { - my $snum = shift @_; - my $snam = shift @_; - - die "group_new: bad snum '$snum'" if defined $snum2nam[$snum]; - die "group_new: bad snam '$snam'" if defined $snam2num{$snam}; - - $snum2nam[$snum] = $snam; - $snam2num{$snam} = $snum; - $dat_all{$snam} = 0; - $dat_km{$snam} = 0; - $dat_um{$snam} = 0; - my $sign = 1.; - - foreach my $val (@_) { - if ($val eq '+') { $sign = 1.; next;} - if ($val eq '-') { $sign = -1.; next;} - die "bad action '$val'" unless defined $snam2num{$val}; - $dat_all{$snam} += $sign * $dat_all{$val}; - $dat_km{$snam} += $sign * $dat_km{$val}; - $dat_um{$snam} += $sign * $dat_um{$val}; - } -} - -#------------------------------------------------------------------------------- - -sub print_help { - print "usage: dmscntanal file\n"; - print " --help this message\n"; -}
trunk/tools/bin/dmscntanal Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: trunk/tools/bin/tmuconv =================================================================== --- trunk/tools/bin/tmuconv (revision 34) +++ trunk/tools/bin/tmuconv (revision 33) @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# $Id: tmuconv 712 2015-11-01 22:53:45Z mueller $ +# $Id: tmuconv 676 2015-05-09 16:31:54Z mueller $ # # Copyright 2008-2015 by Walter F.J. Mueller # @@ -14,10 +14,6 @@ # # Revision History: # Date Rev Version Comment -# 2015-11-01 712 1.1.1 BUGFIX: fix '.' handling for br/sob instructions -# BUGFIX: correct xor (now r,dst, and not src,r) -# br/sob offsets now octal; assume --t_id if no opts -# 2015-07-03 697 1.1 adapt to new DM_STAT_(SY|VM); add rhrp vector # 2010-10-22 334 1.0.9 adapt to ibus V2 signals: req,we,dip->aval,re,we,rmw # 2010-06-26 309 1.0.8 add ibimres.cacc/racc handling # 2010-04-26 284 1.0.7 add error check for GetOptions @@ -58,19 +54,19 @@ # vm.ibsres.ack:b # vm.ibsres.busy:b # vm.ibsres.dout:o -# vm.emmreq.req:b -# vm.emmreq.we:b -# vm.emmreq.be:b -# vm.emmreq.cancel:b -# vm.emmreq.addr:o -# vm.emmreq.din:o -# vm.emsres.ack_r:b -# vm.emsres.ack_w:b -# vm.emsres.dout:o # co.cpugo:b # co.cpususp:b # co.suspint:b # co.suspext:b +# sy.emmreq.req:b +# sy.emmreq.we:b +# sy.emmreq.be:b +# sy.emmreq.cancel:b +# sy.emmreq.addr:o +# sy.emmreq.din:o +# sy.emsres.ack_r:b +# sy.emsres.ack_w:b +# sy.emsres.dout:o # sy.chit:b # @@ -130,16 +126,15 @@ my $ind_vm_ibsres_busy; my $ind_vm_ibsres_dout; -my $ind_vm_emmreq_req; -my $ind_vm_emmreq_we; -my $ind_vm_emmreq_be; -my $ind_vm_emmreq_cancel; -my $ind_vm_emmreq_addr; -my $ind_vm_emmreq_din; -my $ind_vm_emsres_ack_r; -my $ind_vm_emsres_ack_w; -my $ind_vm_emsres_dout; - +my $ind_sy_emmreq_req; +my $ind_sy_emmreq_we; +my $ind_sy_emmreq_be; +my $ind_sy_emmreq_cancel; +my $ind_sy_emmreq_addr; +my $ind_sy_emmreq_din; +my $ind_sy_emsres_ack_r; +my $ind_sy_emsres_ack_w; +my $ind_sy_emsres_dout; my $ind_sy_chit; my @pdp11_opcode_tbl = ( @@ -156,7 +151,7 @@ {code=>0000230, mask=>0000007, name=>"spl ", type=>"spl"}, {code=>0000240, mask=>0000017, name=>"cl", type=>"ccop"}, {code=>0000260, mask=>0000017, name=>"se", type=>"ccop"}, - {code=>0000300, mask=>0000077, name=>"swab", type=>"1arg"}, + {code=>0000300, mask=>0000077, name=>"swap", type=>"1arg"}, {code=>0000400, mask=>0000377, name=>"br ", type=>"br"}, {code=>0001000, mask=>0000377, name=>"bne ", type=>"br"}, {code=>0001400, mask=>0000377, name=>"beq ", type=>"br"}, @@ -164,7 +159,7 @@ {code=>0002400, mask=>0000377, name=>"blt ", type=>"br"}, {code=>0003000, mask=>0000377, name=>"bgt ", type=>"br"}, {code=>0003400, mask=>0000377, name=>"ble ", type=>"br"}, - {code=>0004000, mask=>0000777, name=>"jsr ", type=>"rsrc"}, + {code=>0004000, mask=>0000777, name=>"jsr ", type=>"jsr"}, {code=>0005000, mask=>0000077, name=>"clr ", type=>"1arg"}, {code=>0005100, mask=>0000077, name=>"com ", type=>"1arg"}, {code=>0005200, mask=>0000077, name=>"inc ", type=>"1arg"}, @@ -194,7 +189,7 @@ {code=>0071000, mask=>0000777, name=>"div ", type=>"rdst"}, {code=>0072000, mask=>0000777, name=>"ash ", type=>"rdst"}, {code=>0073000, mask=>0000777, name=>"ashc", type=>"rdst"}, - {code=>0074000, mask=>0000777, name=>"xor ", type=>"rsrc"}, + {code=>0074000, mask=>0000777, name=>"xor ", type=>"rdst"}, {code=>0077000, mask=>0000777, name=>"sob ", type=>"sob"}, {code=>0100000, mask=>0000377, name=>"bpl ", type=>"br"}, {code=>0100400, mask=>0000377, name=>"bmi ", type=>"br"}, @@ -299,10 +294,10 @@ 177574=> "mmr1", 177572=> "mmr0", 177570=> "sdreg", # not a simh name !! - 177560=> "tia.csr", - 177562=> "tia.buf", - 177564=> "toa.csr", - 177566=> "toa.buf", + 177560=> "ti.csr", + 177562=> "ti.buf", + 177564=> "to.csr", + 177566=> "to.buf", 177550=> "pr.csr", 177552=> "pr.buf", 177554=> "pp.csr", @@ -321,32 +316,32 @@ 177414=> "rk.mr ", 177416=> "rk.db ", 177060=> "xor.cs", # XOR Tester - 176700=> "rp.cs1", - 176702=> "rp.wc ", - 176704=> "rp.ba ", - 176706=> "rp.da ", - 176710=> "rp.cs2", - 176712=> "rp.ds ", - 176714=> "rp.er1", - 176716=> "rp.as ", - 176720=> "rp.la ", - 176722=> "rp.db ", - 176724=> "rp.mr1", - 176726=> "rp.dt ", - 176730=> "rp.sn ", - 176732=> "rp.of ", - 176734=> "rp.dc ", - 176736=> "rp.m13", - 176740=> "rp.m14", - 176742=> "rp.m15", - 176744=> "rp.ec1", - 176746=> "rp.ec2", - 176750=> "rp.bae", - 176752=> "rp.cs3", - 176500=> "tib.cs", - 176502=> "tib.bu", - 176504=> "tob.cs", - 176506=> "tob.bu", + 176700=> "rpa.cs1", + 176702=> "rpa.wc ", + 176704=> "rpa.ba ", + 176706=> "rpa.da ", + 176710=> "rpa.cs2", + 176712=> "rpa.ds ", + 176714=> "rpa.er1", + 176716=> "rpa.as ", + 176720=> "rpa.la ", + 176722=> "rpa.db ", + 176724=> "rpa.mr1", + 176726=> "rpa.dt ", + 176730=> "rpa.sn ", + 176732=> "rpa.of ", + 176734=> "rpa.dc ", + 176736=> "rpa.m13", + 176740=> "rpa.m14", + 176742=> "rpa.m15", + 176744=> "rpa.ec1", + 176746=> "rpa.ec2", + 176750=> "rpa.bae", + 176752=> "rpa.cs3", + 176500=> "ti2.cs", + 176502=> "ti2.bu", + 176504=> "to2.cs", + 176506=> "to2.bu", 174400=> "rl.cs ", 174402=> "rl.ba ", 174404=> "rl.da ", @@ -354,12 +349,12 @@ 172540=> "kp.csr", 172542=> "kp.buf", 172544=> "kp.cnt", - 172520=> "tm.sr", - 172522=> "tm.cr", - 172524=> "tm.bc", - 172526=> "tm.ba", - 172530=> "tm.db", - 172532=> "tm.rl", + 172520=> "tm.mts", + 172522=> "tm.mtc", + 172524=> "tm.brc", + 172526=> "tm.cma", + 172530=> "tm.mtd", + 172532=> "tm.rda", 172516=> "mmr3", 172200=> "sipdr0", 172202=> "sipdr1", @@ -438,16 +433,6 @@ exit 0; } -my $nopts = 0; # count options -$nopts += 1 if $opts{dump}; -$nopts += 1 if $opts{cdump}; -$nopts += 1 if $opts{t_id}; -$nopts += 1 if $opts{t_ru}; -$nopts += 1 if $opts{t_em}; -$nopts += 1 if $opts{t_ib}; - -$opts{t_id} = 1 if $nopts == 0; # if no opts, assume t_id - foreach my $file (@ARGV) { do_file($file); } @@ -520,16 +505,15 @@ $ind_vm_ibsres_busy = $name{'vm.ibsres.busy'}->{ind}; $ind_vm_ibsres_dout = $name{'vm.ibsres.dout'}->{ind}; - $ind_vm_emmreq_req = $name{'vm.emmreq.req'}->{ind}; - $ind_vm_emmreq_we = $name{'vm.emmreq.we'}->{ind}; - $ind_vm_emmreq_be = $name{'vm.emmreq.be'}->{ind}; - $ind_vm_emmreq_cancel = $name{'vm.emmreq.cancel'}->{ind}; - $ind_vm_emmreq_addr = $name{'vm.emmreq.addr'}->{ind}; - $ind_vm_emmreq_din = $name{'vm.emmreq.din'}->{ind}; - $ind_vm_emsres_ack_r = $name{'vm.emsres.ack_r'}->{ind}; - $ind_vm_emsres_ack_w = $name{'vm.emsres.ack_w'}->{ind}; - $ind_vm_emsres_dout = $name{'vm.emsres.dout'}->{ind}; - + $ind_sy_emmreq_req = $name{'sy.emmreq.req'}->{ind}; + $ind_sy_emmreq_we = $name{'sy.emmreq.we'}->{ind}; + $ind_sy_emmreq_be = $name{'sy.emmreq.be'}->{ind}; + $ind_sy_emmreq_cancel = $name{'sy.emmreq.cancel'}->{ind}; + $ind_sy_emmreq_addr = $name{'sy.emmreq.addr'}->{ind}; + $ind_sy_emmreq_din = $name{'sy.emmreq.din'}->{ind}; + $ind_sy_emsres_ack_r = $name{'sy.emsres.ack_r'}->{ind}; + $ind_sy_emsres_ack_w = $name{'sy.emsres.ack_w'}->{ind}; + $ind_sy_emsres_dout = $name{'sy.emsres.dout'}->{ind}; $ind_sy_chit = $name{'sy.chit'}->{ind}; } else { @@ -607,7 +591,7 @@ my $code = code2mnemo($ireg); $id_str = sprintf " %6.6o %6.6o %6.6o %s", $pc, $psw, $ireg, $code; - $id_str .= " " x (22-length($code)); + $id_str .= " " x (20-length($code)); $id_str .= sprintf " (%d)",$cyc_curr-$idec_cyc; $idec_cyc = $cyc_curr; } @@ -657,40 +641,40 @@ } # # handle t_em -# uses cycles with vm_emmreq_req = '1' -# vm_emsres_ack_r = '1' -# vm_emsres_ack_w = '1' -# vm_emsreq_cancel = '1' +# uses cycles with sy_emmreq_req = '1' +# sy_emsres_ack_r = '1' +# sy_emsres_ack_w = '1' +# sy_emsreq_cancel = '1' # if (exists $opts{t_em}) { - if ($val_curr[$ind_vm_emmreq_req]) { + if ($val_curr[$ind_sy_emmreq_req]) { $emreq_cyc = $cyc_curr; $emreq_str = sprintf "%s %s %8.8o", - ($val_curr[$ind_vm_emmreq_we] ? "w" : "r"), - $val_curr[$ind_vm_emmreq_be], - $val_curr[$ind_vm_emmreq_addr]; - $emcurr_we = $val_curr[$ind_vm_emmreq_we]; - $emcurr_addr = $val_curr[$ind_vm_emmreq_addr]; + ($val_curr[$ind_sy_emmreq_we] ? "w" : "r"), + $val_curr[$ind_sy_emmreq_be], + $val_curr[$ind_sy_emmreq_addr]; + $emcurr_we = $val_curr[$ind_sy_emmreq_we]; + $emcurr_addr = $val_curr[$ind_sy_emmreq_addr]; if ($emcurr_we) { - $emreq_str .= sprintf " %6.6o", $val_curr[$ind_vm_emmreq_din]; + $emreq_str .= sprintf " %6.6o", $val_curr[$ind_sy_emmreq_din]; } else { $emreq_str .= " " x 7; } } - if ($val_curr[$ind_vm_emsres_ack_r] || - $val_curr[$ind_vm_emsres_ack_w] || - $val_curr[$ind_vm_emmreq_cancel]) { + if ($val_curr[$ind_sy_emsres_ack_r] || + $val_curr[$ind_sy_emsres_ack_w] || + $val_curr[$ind_sy_emmreq_cancel]) { $emres_str = sprintf "%s%s%s%s", - $val_curr[$ind_vm_emmreq_cancel], - $val_curr[$ind_vm_emsres_ack_r], - $val_curr[$ind_vm_emsres_ack_w], + $val_curr[$ind_sy_emmreq_cancel], + $val_curr[$ind_sy_emsres_ack_r], + $val_curr[$ind_sy_emsres_ack_w], $val_curr[$ind_sy_chit]; - if ($val_curr[$ind_vm_emmreq_cancel]) { + if ($val_curr[$ind_sy_emmreq_cancel]) { $emreq_str .= " cancel"; $emcurr_we = undef; } else { - if ($val_curr[$ind_vm_emsres_ack_r]) { - $emreq_str .= sprintf " %6.6o", $val_curr[$ind_vm_emsres_dout]; + if ($val_curr[$ind_sy_emsres_ack_r]) { + $emreq_str .= sprintf " %6.6o", $val_curr[$ind_sy_emsres_dout]; } else { $emreq_str .= " " x 7; } @@ -719,7 +703,6 @@ $emtyp_str .= " 240 PIRQ" if ($emlast_addr == 0240); $emtyp_str .= " 244 FPP exp" if ($emlast_addr == 0244); $emtyp_str .= " 250 MMU trap" if ($emlast_addr == 0250); - $emtyp_str .= " 254 RHRP" if ($emlast_addr == 0254); $emtyp_str .= " 260 IIST" if ($emlast_addr == 0260); $emtyp_str .= " 300 DL11-2-TTI" if ($emlast_addr == 0300); $emtyp_str .= " 304 DL11-2-TTO" if ($emlast_addr == 0304); @@ -831,29 +814,18 @@ return "$name $reg_str"; } elsif ($type eq "br") { - # Note: in MACRO-11 syntax . refers to the address of the instruction - # the opcode has offset relative to PC after instruction fetch - # so 000776 --> br .-2 - # 000777 --> br . - # 000400 --> br .+2 - # my $off = $code & 0177; - my $sign = "?"; - if ($code & 0200) { # negative offsets + my $sign = "+"; + if ($code & 0200) { + $off = -(((~$off) & 0177)+1); $sign = "-"; - $off = ((~$off) & 0177)+1; - $off = $off - 1; # refer to address of instruction - } else { # positive offsets - $sign = "+"; - $off = $off + 1; # refer to address of instruction - } - return sprintf "$name .%s%o", $sign, abs(2*$off); + } + return sprintf "$name .%s%d.", $sign, abs(2*$off); } elsif ($type eq "sob") { - # Note: like in br type instructions, asm syntax and opcode differ by one my $reg = ($code>>6) & 07; my $off = $code & 077; - return sprintf "$name r%d,.-%o", $reg, 2*($off-1); + return sprintf "$name r%d,.-%d.", $reg, 2*$off; } elsif ($type eq "trap") { my $off = $code & 0377; @@ -876,7 +848,7 @@ if ($code & 001) { $str .= $del . $name . "c", $del = "+" } return $str; - } elsif ($type eq "rsrc") { + } elsif ($type eq "jsr") { my $reg = ($code>>6) & 07; my $dst = $code & 077; my $dst_str = regmod($dst);
/trunk/tools/bin/asm-11
1,7 → 1,7
#!/usr/bin/perl -w
# $Id: asm-11 712 2015-11-01 22:53:45Z mueller $
# $Id: asm-11 659 2015-03-22 23:15:51Z mueller $
#
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# Copyright 2013-2014 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
14,7 → 14,6
#
# Revision History:
# Date Rev Version Comment
# 2015-11-01 712 1.0.4 BUGFIX: fix '.' handling in instructions
# 2014-07-26 575 1.0.3 add 'call' and 'return' to pst (as in macro-11)
# 2013-04-07 503 1.0.2 list dot for .even,.dot,.blkb,.blkw
# 2013-04-01 502 1.0.1 BUGFIX: -2(r0),@-2(r0) was broken, parser fixed
76,7 → 75,6
sub pass2_lst_end;
sub pass2_lst_line;
sub out_w;
sub out_wop;
sub out_b;
sub out_opcode;
sub out_opcode_n;
315,7 → 313,6
 
my @t_pushback;
 
my $defincdot = 0; # defered increment for '.'
my $out_dot; # current . for output
my @out_data; # output data
my $out_start = 1; # absolute start address
1151,7 → 1148,6
$lst{'.'}->{val} = $val;
$psect{$cur_psect}{dot} = $val;
$psect{$cur_psect}{dotmax} = $val if $psect{$cur_psect}{dotmax} < $val;
## printf "-- setdot %6.6o\n", $val if $opts{tparse};
return;
}
 
1167,7 → 1163,6
#-------------------------------------------------------------------------------
 
sub getdot {
## printf "-- getdot %6.6o\n", $lst{'.'}{val} if $opts{tparse};
return $lst{'.'}{val};
}
 
1772,9 → 1767,6
die "BUGCHECK: unknown opfmt '$opfmt'";
}
 
incdot($defincdot); # inc '.' after instruction done !
$defincdot = 0;
 
# generate data
} elsif ($$rl{typ} eq 'data') {
if ($$rl{oper} eq '.word' || $$rl{oper} eq '.byte' ) {
1960,15 → 1952,6
 
#-------------------------------------------------------------------------------
 
sub out_wop {
my ($rl,$word) = @_;
push @{$$rl{outw}}, $word;
$defincdot += 2;
return;
}
 
#-------------------------------------------------------------------------------
 
sub out_b {
my ($rl,$byte) = @_;
push @{$$rl{outb}}, $byte;
1980,7 → 1963,7
 
sub out_opcode {
my ($rl,$code) = @_;
out_wop($rl, $code);
out_w($rl, $code);
return;
}
 
2000,7 → 1983,7
$val &= $mask;
add_err($rl, 'T');
}
out_wop($rl, $code|$val);
out_w($rl, $code|$val);
return;
}
 
2032,7 → 2015,7
}
$off &= 0077;
}
out_wop($rl, $code|$off);
out_w($rl, $code|$off);
return;
}
 
2045,14 → 2028,14
 
my $val = eval_exp($rl,$ebeg,$eend);
unless (defined $val) {
out_wop($rl, 0);
out_w($rl, 0);
add_err($rl, 'U');
return;
}
if ($mod>=6 && $reg==7) { # handle pc relative offsets
$val = ($val - (getdot()+$defincdot+2)) & 0177777;
if ($mod>=6 && $reg==7) {
$val = ($val - (getdot()+2)) & 0177777;
}
out_wop($rl, $val);
out_w($rl, $val);
return;
}
 
/trunk/tools/bin/ti_w11
1,5 → 1,5
#!/usr/bin/perl -w
# $Id: ti_w11 712 2015-11-01 22:53:45Z mueller $
# $Id: ti_w11 680 2015-05-14 13:29:46Z mueller $
#
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory
6,7 → 6,6
#
# Revision History:
# Date Rev Version Comment
# 2015-11-01 712 1.3.2 use sb_cntl pin 12 for tmu; add -ghw option
# 2015-05-14 680 1.3.1 use now -f1,-f1e,-f2,-f2e (fx now f1e)
# 2015-04-13 667 1.3 rename -fu->-fc, add -f2,-fx; setup good defaults
# 2015-01-02 640 1.2.2 BUGFIX: allow 'M' unit in baud rates
31,7 → 30,6
my $opt_io = '';
my $opt_f = '';
my $opt_tmu;
my $opt_ghw;
my $tirri;
my $val_term;
my $val_tb_s3 = "tbw $sysbase/s3board/tb/tb_w11a_s3 -fifo";
63,10 → 61,6
$opt_tmu = 1;
shift @ARGV;
 
} elsif ($curarg =~ m{^-ghw$} ) { # -ghw
$opt_ghw = 1;
shift @ARGV;
 
} elsif ($curarg =~ m{^-s3$} ) { # -s3 (use -f2 by default)
$opt_io = 'f';
$opt_f = '2';
178,13 → 172,7
my $fifoopts = ",noinit"; # fifo always with deferred init
$fifoopts .= ",xon" if $opt_f eq 'x';
push @arglist, "--fifo=$fifoopts";
my $run_opts = "";
if ($opt_ghw) {
my $ghw_stem = "ti_w11";
$ghw_stem = $1 if ($val_tb =~ m|^.*\s+.*/(\w*)\s+|); # get stem of tb file
$run_opts .= " --wave=${ghw_stem}.ghw";
}
push @arglist, "--run=${val_tb}${run_opts}";
push @arglist, "--run=$val_tb";
} elsif ($opt_io eq 't') {
push @arglist, "--term=$val_term";
} elsif ($opt_io eq 'u') {
212,7 → 200,7
#
if ($opt_io eq 'f') {
if ($opt_tmu) {
push @arglist, 'rlc oob -sbcntl 12 1';
push @arglist, 'rlc oob -sbcntl 13 1';
}
if ($opt_f eq 'c') {
push @arglist, 'rlc oob -sbdata 8 0x4'; # portsel = 0100 -> fx2
/trunk/tools/oskit/xxdp_rl/xxdp22_rl_boot.tcl
1,4 → 1,4
# $Id: xxdp22_rl_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: xxdp22_rl_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for XXDP V2.2 RL02 based system
#
13,7 → 13,7
puts [rlw]
 
# setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS)
rw11::setup_tt "cpu0" ndl 1 dlrlim 5 to7bit 1
rw11::setup_tt "cpu0" {ndl 1 dlrlim 5 to7bit 1}
rw11::setup_lp
rw11::setup_pp
 
/trunk/tools/oskit/xxdp_rl/xxdp25_rl_boot.tcl
1,4 → 1,4
# $Id: xxdp25_rl_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: xxdp25_rl_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for XXDP V2.5 RL02 based system
#
13,7 → 13,7
puts [rlw]
 
# setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS)
rw11::setup_tt "cpu0" ndl 1 dlrlim 5 to7bit 1
rw11::setup_tt "cpu0" {ndl 1 dlrlim 5 to7bit 1}
rw11::setup_lp
rw11::setup_pp
 
/trunk/tools/oskit/hook_ibmon_rka.tcl
1,6 → 1,7
# $Id: hook_ibmon_rka.tcl 722 2015-12-30 19:45:46Z mueller $
# $Id: hook_ibmon_rka.tcl 690 2015-06-07 18:23:51Z mueller $
puts "hook: start ibmon for rka"
package require ibd_ibmon
ibd_ibmon::setup
ibd_ibmon::stop
cpu0 cp -wibr im.lolim [cpu0 imap rka.ds] \
-wibr im.hilim [cpu0 imap rka.mr]
/trunk/tools/oskit/rt11-40_rk/rt11-40_rk_boot.tcl
1,4 → 1,4
# $Id: rt11-40_rk_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: rt11-40_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for RT-11 V4.0 RK05 based system
#
13,7 → 13,7
puts [rlw]
 
# setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS)
rw11::setup_tt "cpu0" ndl 1 dlrlim 5
rw11::setup_tt "cpu0" {ndl 1 dlrlim 5}
rw11::setup_lp
rw11::setup_pp
 
/trunk/tools/oskit/hook_ibmon_tma.tcl
1,6 → 1,7
# $Id: hook_ibmon_tma.tcl 722 2015-12-30 19:45:46Z mueller $
# $Id: hook_ibmon_tma.tcl 689 2015-06-05 14:33:18Z mueller $
puts "hook: start ibmon for tma"
package require ibd_ibmon
ibd_ibmon::setup
ibd_ibmon::stop
cpu0 cp -wibr im.lolim [cpu0 imap tma.sr] \
-wibr im.hilim [cpu0 imap tma.rl]
/trunk/tools/oskit/unix-v5_rk/uv5_rk_boot.tcl
1,4 → 1,4
# $Id: uv5_rk_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: uv5_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for Unix V5 RK05 based system
#
12,7 → 12,7
puts [rlw]
 
# setup tt,lp (uses only 1 console; uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" ndl 1 to7bit 1
rw11::setup_tt "cpu0" {ndl 1 to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/hook_ibmon_rpa.tcl
1,6 → 1,7
# $Id: hook_ibmon_rpa.tcl 722 2015-12-30 19:45:46Z mueller $
# $Id: hook_ibmon_rpa.tcl 689 2015-06-05 14:33:18Z mueller $
puts "hook: start ibmon for rpa"
package require ibd_ibmon
ibd_ibmon::setup
ibd_ibmon::stop
cpu0 cp -wibr im.lolim [cpu0 imap rpa.cs1] \
-wibr im.hilim [cpu0 imap rpa.cs3]
/trunk/tools/oskit/211bsd_rk/211bsd_rk_boot.tcl
1,4 → 1,4
# $Id: 211bsd_rk_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: 211bsd_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for 211bsd RK05 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/rsx11m-31_rk/rsx11m-31_rk_boot.tcl
1,4 → 1,4
# $Id: rsx11m-31_rk_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: rsx11m-31_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for RSX11-M V3.1 RK05 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp,pp (enable rx rate limiter on old DEC OS)
rw11::setup_tt "cpu0" dlrlim 5
rw11::setup_tt "cpu0" {dlrlim 5}
rw11::setup_lp
rw11::setup_pp
 
/trunk/tools/oskit/rsx11m-40_rk/rsx11m-40_rk_boot.tcl
1,4 → 1,4
# $Id: rsx11m-40_rk_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: rsx11m-40_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for RSX11-M V4.0 RK05 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp,pp (enable rx rate limiter on old DEC OS)
rw11::setup_tt "cpu0" dlrlim 5
rw11::setup_tt "cpu0" {dlrlim 5}
rw11::setup_lp
rw11::setup_pp
 
/trunk/tools/oskit/211bsd_rl/211bsd_rl_boot.tcl
1,4 → 1,4
# $Id: 211bsd_rl_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: 211bsd_rl_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for 211bsd RL02 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/rt11-53_rl/rt11-53_rl_boot.tcl
1,4 → 1,4
# $Id: rt11-53_rl_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $ Id: $
#
# Setup file for RT-11 V5.3 RL02 based system
#
13,7 → 13,7
puts [rlw]
 
# setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS)
rw11::setup_tt "cpu0" ndl 1 dlrlim 5
rw11::setup_tt "cpu0" {ndl 1 dlrlim 5}
rw11::setup_lp
rw11::setup_pp
 
/trunk/tools/oskit/rt11-53_rl/README_rt11-53_rlset.txt
1,4 → 1,4
# $Id: README_rt11-53_rlset.txt 699 2015-07-05 21:37:26Z mueller $
# $Id: $
 
Notes on oskit: RT-11 V5.3 system on a RL02 volume
 
/trunk/tools/oskit/rt11-53_rl/rt11-53_rl_boot.scmd
1,4 → 1,4
; $Id: rt11-53_rl_boot.scmd 699 2015-07-05 21:37:26Z mueller $
; $ Id: $
;
; Setup file for RT-11 V5.3 RL02 based system
;
/trunk/tools/oskit/211bsd_tm/README_211bsd_tmset.txt
1,4 → 1,4
# $Id: README_211bsd_tmset.txt 699 2015-07-05 21:37:26Z mueller $
# $Id: README_211bsd_rpset.txt 680 2015-05-14 13:29:46Z mueller $
 
Notes on oskit: 2.11BSD system on a TM11 tape distribution kit
 
/trunk/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.tcl
1,4 → 1,4
# $Id: 211bsd_tm_rm05_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: 211bsd_tm_rm05_boot.tcl 690 2015-06-07 18:23:51Z mueller $
#
# Setup file for creating a 211bsd RM05 system from a TM11 dist kit
#
15,7 → 15,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/211bsd_tm/211bsd_rm05_boot.tcl
1,4 → 1,4
# $Id: 211bsd_rm05_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: 211bsd_rm05_boot.tcl 690 2015-06-07 18:23:51Z mueller $
#
# Setup file for 211bsd RM05 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.tcl
1,4 → 1,4
# $Id: 211bsd_tm_rp06_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: 211bsd_tm_rp06_boot.tcl 690 2015-06-07 18:23:51Z mueller $
#
# Setup file for creating a 211bsd RP06 system from a TM11 dist kit
#
15,7 → 15,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/rsx11mp-30_rp/rsx11mp-30_rp_boot.tcl
1,4 → 1,4
# $Id: rsx11mp-30_rp_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: rsx11mp-30_rp_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for RSX11-M+ V3.0 RP06 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/oskit/211bsd_rp/211bsd_rp_boot.tcl
1,4 → 1,4
# $Id: 211bsd_rp_boot.tcl 704 2015-07-25 14:18:03Z mueller $
# $Id: 211bsd_rp_boot.tcl 689 2015-06-05 14:33:18Z mueller $
#
# Setup file for 211bsd RP06 based system
#
14,7 → 14,7
puts [rlw]
 
# setup tt,lp (211bsd uses parity -> use 7 bit mode)
rw11::setup_tt "cpu0" to7bit 1
rw11::setup_tt "cpu0" {to7bit 1}
rw11::setup_lp
 
# mount disks
/trunk/tools/dox/w11_vhd_all.Doxyfile
5,7 → 5,7
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "w11 - vhd"
PROJECT_NUMBER = 0.71
PROJECT_NUMBER = 0.70
PROJECT_BRIEF = "W11 CPU core and support modules"
PROJECT_LOGO =
OUTPUT_DIRECTORY = $(RETRODOXY)/w11/vhd
/trunk/tools/dox/w11_cpp.Doxyfile
5,7 → 5,7
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "w11 - cpp"
PROJECT_NUMBER = 0.71
PROJECT_NUMBER = 0.70
PROJECT_BRIEF = "Backend server for Rlink and w11"
PROJECT_LOGO =
OUTPUT_DIRECTORY = $(RETRODOXY)/w11/cpp
/trunk/tools/dox/w11_tcl.Doxyfile
5,7 → 5,7
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "w11 - tcl"
PROJECT_NUMBER = 0.71
PROJECT_NUMBER = 0.70
PROJECT_BRIEF = "Backend server for Rlink and w11"
PROJECT_LOGO =
OUTPUT_DIRECTORY = $(RETRODOXY)/w11/tcl
/trunk/rtl/ibus/ibdr_tm11.vhd
1,4 → 1,4
-- $Id: ibdr_tm11.vhd 695 2015-06-28 11:22:52Z mueller $
-- $Id: ibdr_tm11.vhd 690 2015-06-07 18:23:51Z mueller $
--
-- Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
27,7 → 27,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-27 695 1.0.1 add missing BESET to sensitivity list
-- 2015-06-04 686 1.0 Initial version
-- 2015-05-15 682 0.1 First draft
------------------------------------------------------------------------------
184,7 → 183,7
end if;
end process proc_regs;
 
proc_next : process (R_REGS, IB_MREQ, EI_ACK, BRESET)
proc_next : process (R_REGS, IB_MREQ, EI_ACK)
variable r : regs_type := regs_init;
variable n : regs_type := regs_init;
variable ibhold : slbit := '0';
/trunk/rtl/ibus/ibd_ibmon.vhd
1,4 → 1,4
-- $Id: ibd_ibmon.vhd 697 2015-07-05 14:23:26Z mueller $
-- $Id: ibd_ibmon.vhd 672 2015-05-02 21:58:28Z mueller $
--
-- Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
278,7 → 278,7
n.ibsel := '0';
if IB_MREQ.aval='1' and IB_MREQ.addr(12 downto 4)=IB_ADDR(12 downto 4) then
n.ibsel := '1';
ibramen := '1'; -- ensures bram read before ibus read
ibramen := '1';
end if;
 
-- ibus transactions (react only on console (this includes racc))
/trunk/rtl/sys_gen/w11a/nexys2/sys_conf.vhd
1,4 → 1,4
-- $Id: sys_conf.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf.vhd 692 2015-06-21 11:53:24Z mueller $
--
-- Copyright 2010-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.4.2 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-06-21 692 1.4.1 use clksys=52 (no closure after rhrp fixes)
-- 2015-03-14 658 1.4 add sys_conf_ibd_* definitions
-- 2015-02-15 647 1.3 drop bram and minisys options
57,11 → 56,8
constant sys_conf_fx2_ccwidth : positive := 5;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
 
-- configure memory controller ---------------------------------------------
constant sys_conf_memctl_read0delay : positive := 3;
/trunk/rtl/sys_gen/w11a/nexys2/tb/sys_conf_sim.vhd
1,4 → 1,4
-- $Id: sys_conf_sim.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf_sim.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2010-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.4.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.4 add sys_conf_ibd_* definitions
-- 2015-02-07 643 1.3 drop bram and minisys options
-- 2014-12-22 619 1.2.1 add _rbmon_awidth
56,12 → 55,9
constant sys_conf_memctl_writedelay : positive := 4;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
 
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_mem_losize : integer := 8#167777#; -- 4 MByte
 
/trunk/rtl/sys_gen/w11a/nexys3/sys_conf.vhd
1,4 → 1,4
-- $Id: sys_conf.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf.vhd 692 2015-06-21 11:53:24Z mueller $
--
-- Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 13.1-14.7; ghdl 0.29-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.4.2 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-06-21 692 1.4.1 use clksys=64 (no closure after rhrp fixes)
-- 2015-03-14 658 1.4 add sys_conf_ibd_* definitions
-- 2015-02-15 647 1.3 drop bram and minisys options
68,11 → 67,8
constant sys_conf_memctl_writedelay : positive := 5;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
 
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_mem_losize : integer := 8#167777#; -- 4 MByte
/trunk/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vhd
1,4 → 1,4
-- $Id: sys_w11a_n3.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_w11a_n3.vhd 692 2015-06-21 11:53:24Z mueller $
--
-- Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
34,18 → 34,15
--
-- Synthesized (xst):
-- Date Rev ise Target flop lutl lutm slic t peri
-- 2015-07-05 698 14.7 131013 xc6slx16-2 2500 4852 161 1782 ok: +dmhbpt 78%
-- 2015-07-05 697 14.7 131013 xc6slx16-2 2428 4786 161 1756 ok: +dmcmon 77%
-- 2015-06-27 695 14.7 131013 xc6slx16-2 2281 4638 161 1714 ok: +dmscnt 75%
-- 2015-06-21 692 14.7 131013 xc6slx16-2 2192 4518 161 1584 ok: rhrp fixes
-- 2015-06-04 686 14.7 131013 xc6slx16-2 2189 4492 161 1543 ok: +TM11 67%
-- 2015-05-14 680 14.7 131013 xc6slx16-2 2120 4443 161 1546 ok: +ibmon 67%
-- 2015-04-06 664 14.7 131013 xc6slx16-2 1991 4350 167 1489 ok: +RHRP 65%
-- 2015-02-21 649 14.7 131013 xc6slx16-2 1819 3905 160 1380 ok: +RL11 61%
-- 2015-06-04 686 14.7 131013 xc6slx16-2 2189 4492 161 1543 ok: +TM11 67%
-- 2015-05-14 680 14.7 131013 xc6slx16-2 2120 4443 161 1546 ok: +ibmon 67%
-- 2015-04-06 664 14.7 131013 xc6slx16-2 1991 4350 167 1489 ok: +RHRP 65%
-- 2015-02-21 649 14.7 131013 xc6slx16-2 1819 3905 160 1380 ok: +RL11
-- 2014-12-22 619 14.7 131013 xc6slx16-2 1742 3767 150 1350 ok: +rbmon
-- 2014-12-20 614 14.7 131013 xc6slx16-2 1640 3692 150 1297 ok: -RL11,rlv4
-- 2014-06-08 561 14.7 131013 xc6slx16-2 1531 3500 142 1165 ok: +RL11
-- 2014-05-29 556 14.7 131013 xc6slx16-2 1459 3342 128 1154 ok: 51%
-- 2014-05-29 556 14.7 131013 xc6slx16-2 1459 3342 128 1154 ok:
-- 2013-04-21 509 13.3 O76d xc6slx16-2 1516 3274 140 1184 ok: now + FX2 !
-- 2011-12-18 440 13.1 O40d xc6slx16-2 1441 3161 96 1084 ok: LP+PC+DL+II
-- 2011-11-20 430 13.1 O40d xc6slx16-2 1412 3206 84 1063 ok: LP+PC+DL+II
/trunk/rtl/sys_gen/w11a/nexys3/tb/sys_conf_sim.vhd
1,4 → 1,4
-- $Id: sys_conf_sim.vhd 718 2015-12-26 15:59:48Z mueller $
-- $Id: sys_conf_sim.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,8 → 19,6
-- Tool versions: xst 13.1-14.7; ghdl 0.29-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-12-26 718 1.5.2 use clksys=64 (as since r692 in sys_conf.vhd)
-- 2015-06-26 695 1.5.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.5 add sys_conf_ibd_* definitions
-- 2015-02-15 647 1.4 drop bram and minisys options
-- 2014-12-22 619 1.3.1 add _rbmon_awidth
38,8 → 36,8
 
-- configure clocks --------------------------------------------------------
constant sys_conf_clksys_vcodivide : positive := 25;
constant sys_conf_clksys_vcomultiply : positive := 16; -- dcm 64 MHz
constant sys_conf_clksys_outdivide : positive := 1; -- sys 64 MHz
constant sys_conf_clksys_vcomultiply : positive := 18; -- dcm 72 MHz
constant sys_conf_clksys_outdivide : positive := 1; -- sys 72 MHz
constant sys_conf_clksys_gentype : string := "DCM";
 
-- configure rlink and hio interfaces --------------------------------------
51,16 → 49,13
constant sys_conf_fx2_ccwidth : positive := 5;
-- configure memory controller ---------------------------------------------
constant sys_conf_memctl_read0delay : positive := 4; -- for <75 MHz (???)
constant sys_conf_memctl_read0delay : positive := 4; -- for <75 MHz
constant sys_conf_memctl_read1delay : positive := sys_conf_memctl_read0delay;
constant sys_conf_memctl_writedelay : positive := 5;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable rbmon
 
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_mem_losize : integer := 8#167777#; -- 4 MByte
/trunk/rtl/sys_gen/w11a/basys3/sys_conf.vhd
1,4 → 1,4
-- $Id: sys_conf.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: viv 2014.4; ghdl 0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.1.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.1 add sys_conf_ibd_* definitions
-- 2015-02-08 644 1.0 Initial version (derived from _n4 version)
------------------------------------------------------------------------------
51,11 → 50,8
constant sys_conf_memctl_nblock : positive := 11;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
 
-- configure w11 cpu core --------------------------------------------------
-- sys_conf_mem_losize is highest 64 byte MMU block number
/trunk/rtl/sys_gen/w11a/basys3/tb/sys_conf_sim.vhd
1,4 → 1,4
-- $Id: sys_conf_sim.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf_sim.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: viv 2014.4; ghdl 0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.1.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.1 add sys_conf_ibd_* definitions
-- 2015-02-21 649 1.0 Initial version
------------------------------------------------------------------------------
51,11 → 50,8
constant sys_conf_memctl_nblock : positive := 11;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
 
-- configure w11 cpu core --------------------------------------------------
-- sys_conf_mem_losize is highest 64 byte MMU block number
/trunk/rtl/sys_gen/w11a/nexys4/sys_conf.vhd
1,4 → 1,4
-- $Id: sys_conf.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: ise 14.5-14.7; viv 2014.4; ghdl 0.29-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.2.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.2 add sys_conf_ibd_* definitions
-- 2015-02-07 643 1.1 drop bram and minisys options
-- 2013-09-22 534 1.0 Initial version (derived from _n3 version)
62,11 → 61,8
constant sys_conf_memctl_writedelay : positive := 5;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
 
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_mem_losize : integer := 8#167777#; -- 4 MByte
/trunk/rtl/sys_gen/w11a/nexys4/tb/sys_conf_sim.vhd
1,4 → 1,4
-- $Id: sys_conf_sim.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf_sim.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 14.5-14.7; ghdl 0.29-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.2.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.2 add sys_conf_ibd_* definitions
-- 2015-02-07 643 1.1 drop bram and minisys options
-- 2013-09-34 534 1.0 Initial version (cloned from _n3)
53,11 → 52,8
constant sys_conf_memctl_writedelay : positive := 7;
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
 
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_mem_losize : integer := 8#167777#; -- 4 MByte
/trunk/rtl/sys_gen/w11a/s3board/sys_conf.vhd
1,4 → 1,4
-- $Id: sys_conf.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.2.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.2 add sys_conf_ibd_* definitions
-- 2014-12-22 619 1.1.2 add _rbmon_awidth
-- 2010-05-05 288 1.1.1 add sys_conf_hio_debounce
39,11 → 38,8
constant sys_conf_hio_debounce : boolean := true; -- instantiate debouncers
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
 
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_mem_losize : integer := 8#037777#; -- 1 MByte
/trunk/rtl/sys_gen/w11a/s3board/tb/sys_conf_sim.vhd
1,4 → 1,4
-- $Id: sys_conf_sim.vhd 698 2015-07-05 21:20:18Z mueller $
-- $Id: sys_conf_sim.vhd 683 2015-05-17 21:54:35Z mueller $
--
-- Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.2.1 add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
-- 2015-03-14 658 1.2 add sys_conf_ibd_* definitions
-- 2014-12-22 619 1.1.2 add _rbmon_awidth
-- 2010-05-05 288 1.1.1 add sys_conf_hio_debounce
39,11 → 38,8
constant sys_conf_hio_debounce : boolean := false; -- no debouncers
 
-- configure debug and monitoring units ------------------------------------
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
 
-- configure w11 cpu core --------------------------------------------------
constant sys_conf_bram : integer := 0; -- no bram, use cache
/trunk/rtl/vlib/rlink/tb/tbcore_rlink.vhd
1,6 → 1,6
-- $Id: tbcore_rlink.vhd 712 2015-11-01 22:53:45Z mueller $
-- $Id: tbcore_rlink.vhd 649 2015-02-21 21:10:16Z mueller $
--
-- Copyright 2010-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2010-2013 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
23,7 → 23,6
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-11-01 712 3.1.3 proc_stim: drive SB_CNTL from start to avoid 'U'
-- 2013-01-04 469 3.1.2 use 1ns wait for .sinit to allow simbus debugging
-- 2011-12-25 445 3.1.1 add SB_ init drivers to avoid SB_VAL='U' at start
-- 2011-12-23 444 3.1 redo clock handling, remove simclk, CLK now input
177,8 → 176,7
SB_VAL <= 'Z';
SB_ADDR <= (others=>'Z');
SB_DATA <= (others=>'Z');
SB_CNTL <= (others=>'Z');
 
-- wait for 10 clock cycles (design run up)
for i in 0 to 9 loop
wait until rising_edge(CLK);
/trunk/rtl/vlib/rlink/rlink_core.vhd
1,6 → 1,6
-- $Id: rlink_core.vhd 718 2015-12-26 15:59:48Z mueller $
-- $Id: rlink_core.vhd 641 2015-02-01 22:12:15Z mueller $
--
-- Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2007-2014 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
32,7 → 32,6
--
-- Synthesized (xst):
-- Date Rev ise Target flop lutl lutm slic t peri
-- 2015-12-26 718 14.7 131013 xc6slx16-2 312 460 16 150 s 7.0 ver 4.1
-- 2014-12-20 614 14.7 131013 xc6slx16-2 310 453 16 146 s 6.8 ver 4.0
-- 2014-08-13 581 14.7 131013 xc6slx16-2 160 230 0 73 s 6.0 ver 3.0
-- 2014-08-13 581 14.7 131013 xc3s1000-4 160 358 0 221 s 8.9 ver 3.0
39,7 → 38,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-12-26 718 4.1.1 add proc_sres: strip 'x' from RB_SRES.dout
-- 2014-12-21 617 4.1 use stat(_rbf_rbtout) to signal rbus timeout
-- 2014-12-20 614 4.0 largely rewritten; 2 FSMs; v3 protocol; 4 bit STAT
-- 2014-08-15 583 3.5 rb_mreq addr now 16 bit; add s_rxaddrl state
418,10 → 416,9
 
signal RBSEL : slbit := '0';
 
signal RB_MREQ_L : rb_mreq_type := rb_mreq_init; -- internal mreq
signal RB_SRES_CLEAN : rb_sres_type := rb_sres_init; -- cleaned rb_sres
signal RB_SRES_CONF : rb_sres_type := rb_sres_init; -- config sres
signal RB_SRES_TOT : rb_sres_type := rb_sres_init; -- total sres
signal RB_MREQ_L : rb_mreq_type := rb_mreq_init; -- internal mreq
signal RB_SRES_CONF : rb_sres_type := rb_sres_init; -- config sres
signal RB_SRES_TOT : rb_sres_type := rb_sres_init; -- total sres
 
signal RL_BUSY_L : slbit := '0';
signal RL_DO_L : slv9 := (others=>'0');
503,31 → 500,11
 
RB_SRES_OR : rb_sres_or_2
port map (
RB_SRES_1 => RB_SRES_CLEAN,
RB_SRES_1 => RB_SRES,
RB_SRES_2 => RB_SRES_CONF,
RB_SRES_OR => RB_SRES_TOT
);
 
proc_sres: process (RB_SRES)
variable sres : rb_sres_type := rb_sres_init;
variable datax01 : slv16 := (others=>'0');
variable data01 : slv16 := (others=>'0');
begin
sres.ack := to_x01(RB_SRES.ack);
sres.busy := to_x01(RB_SRES.busy);
sres.err := to_x01(RB_SRES.err);
sres.dout := to_x01(RB_SRES.dout);
 
if sres.ack = '1' and sres.busy = '0' and is_x(sres.dout) then
assert false
report "rlink_core: seen 'x' in rb_sres.data"
severity warning;
sres.dout := (others=>'1');
end if;
 
RB_SRES_CLEAN <= sres;
end process proc_sres;
 
proc_regs: process (CLK)
begin
 
/trunk/rtl/bplib/basys3/basys3_setup.tcl
1,4 → 1,4
# $Id: basys3_setup.tcl 699 2015-07-05 21:37:26Z mueller $
# $ Id: $
#
set rvtb_part "xc7a35tcpg236-1"
set rvtb_board "basys3"
/trunk/rtl/bplib/nexys4/nexys4_setup.tcl
1,4 → 1,4
# $Id: nexys4_setup.tcl 699 2015-07-05 21:37:26Z mueller $
# $ Id: $
#
set rvtb_part "xc7a100tcsg324-1"
set rvtb_board "nexys4"
/trunk/rtl/bplib/nxcramlib/nx_cram_memctl_as.vhd
1,6 → 1,6
-- $Id: nx_cram_memctl_as.vhd 718 2015-12-26 15:59:48Z mueller $
-- $Id: nx_cram_memctl_as.vhd 644 2015-02-08 22:56:54Z mueller $
--
-- Copyright 2010-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2010-2011 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
31,7 → 31,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-12-26 718 1.2.1 BUGFIX: do_dispatch(): always define imem_oe
-- 2011-11-26 433 1.2 renamed from n2_cram_memctl_as
-- 2011-11-19 432 1.1 remove O_FLA_CE_N port
-- 2011-11-19 427 1.0.5 now numeric_std clean
75,9 → 74,6
-- 82.19- 89.74 5 6 <-- 85 85 10 17
-- 89.74- 95.89 6 6 <-- 90,95 95 10 19
-- 95.89-102.56 6 7 <-- 100 100 1 2
-- remark added 2015-12-26
-- - for sys_w11a_n3 one gets in simulation errors for 72 MHz and RD=4 !!
-- - so far unclear whether controller or memory model is wrong !!
--
-- Timing of some signals:
--
368,7 → 364,6
iaddr0 := '1'; -- access word 1
imem_be := BE(3 downto 2); -- set be's for 1st cycle
end if;
imem_oe := '0'; -- oe=0
nstate := s_wrinit; -- next: write init part
end if;
end procedure do_dispatch;
399,7 → 394,7
if unsigned(r.cntdly) /= 0 then
n.cntdly := slv(unsigned(r.cntdly) - 1);
end if;
 
case r.state is
when s_idle => -- s_idle: wait for req
if REQ = '1' then -- if IO requested
/trunk/rtl/bplib/micron/mt45w8mw16b.vhd
1,6 → 1,6
-- $Id: mt45w8mw16b.vhd 718 2015-12-26 15:59:48Z mueller $
-- $Id: mt45w8mw16b.vhd 649 2015-02-21 21:10:16Z mueller $
--
-- Copyright 2010-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2010-2011 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
26,7 → 26,6
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-12-26 718 1.3.3 BUGFIX: initialize L_ADDR with all '1', see comment
-- 2011-11-19 427 1.3.2 now numeric_std clean
-- 2010-06-03 299 1.3.1 improved timing model (WE cycle, robust T_apa)
-- 2010-06-03 298 1.3 add timing model again
125,7 → 124,7
signal R_BCR_BW : slbit := '1'; -- bw: def: no wrap
signal R_BCR_BL : slv3 := "111"; -- bl: def: continuous
signal L_ADDR : slv23 := (others=>'1'); -- all '1' for propper 1st access
signal L_ADDR : slv23 := (others=>'0');
signal DOUT_VAL_EN : slbit := '0';
signal DOUT_VAL_AA : slbit := '0';
signal DOUT_VAL_PA : slbit := '0';
155,16 → 154,8
end if;
end process proc_adv;
 
-- Notes:
-- 1. the row change (t_aa) and column change (t_apa) timing depends on the
-- recognition of address changes and of page changes. To keep the logic
-- simple L_ADDR and addr_last are initialized with all '1'. This gives
-- proper behaviour unless the very first access uses the very last
-- address. In w11a systems, with use only 4 MB, this can't happen, in
-- most other use cases this is very unlikely.
proc_dout_val: process (CE, OE, WE, BE_L, BE_U, ADV, L_ADDR)
variable addr_last : slv23 := (others=>'1');-- all '1' for propper 1st access
variable addr_last : slv23 := (others=>'1');
begin
if (CE'event and CE='1') or
(BE_L'event and BE_L='1') or
/trunk/rtl/w11a/pdp11_dpath.vhd
1,6 → 1,6
-- $Id: pdp11_dpath.vhd 702 2015-07-19 17:36:09Z mueller $
-- $Id: pdp11_dpath.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2006-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2006-2014 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
28,7 → 28,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-07-19 702 1.2.5 set new DM_STAT_DP fields
-- 2014-08-10 581 1.2.4 use c_cc_f_*
-- 2014-07-12 569 1.2.3 use DIV_QUIT and S_DIV_SR for pdp11_munit
-- 2011-11-18 427 1.2.2 now numeric_std clean
332,17 → 331,12
 
DM_STAT_DP.pc <= GPR_PC;
DM_STAT_DP.psw <= PSW;
DM_STAT_DP.psr_we <= CNTL.psr_we;
DM_STAT_DP.ireg <= R_IREG;
DM_STAT_DP.ireg_we <= CNTL.ireg_we;
DM_STAT_DP.dsrc <= R_DSRC;
DM_STAT_DP.dsrc_we <= CNTL.dsrc_we;
DM_STAT_DP.ddst <= R_DDST;
DM_STAT_DP.ddst_we <= CNTL.ddst_we;
DM_STAT_DP.dtmp <= R_DTMP;
DM_STAT_DP.dtmp_we <= CNTL.dtmp_we;
DM_STAT_DP.dres <= DRES;
DM_STAT_DP.cpdout_we <= CNTL.cpdout_we;
DM_STAT_DP.gpr_adst <= CNTL.gpr_adst;
DM_STAT_DP.gpr_mode <= CNTL.gpr_mode;
DM_STAT_DP.gpr_bytop <= CNTL.gpr_bytop;
/trunk/rtl/w11a/pdp11_core_rbus.vhd
1,4 → 1,4
-- $Id: pdp11_core_rbus.vhd 700 2015-07-12 19:28:31Z mueller $
-- $Id: pdp11_core_rbus.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
27,7 → 27,6
--
-- Revision History: -
-- Date Rev Version Comment
-- 2015-07-10 700 1.5.1 add cpuact logic, redefine lam as cpuact 1->0
-- 2015-05-09 677 1.5 start/stop/suspend overhaul; reset overhaul
-- 2014-12-26 621 1.4 use full size 4k word ibus window
-- 2014-12-21 617 1.3.1 use separate RB_STAT bits for cmderr and cmdmerr
128,7 → 127,7
architecture syn of pdp11_core_rbus is
 
type state_type is (
s_idle, -- s_idle: wait for rbus access
s_idle, -- s_idle: wait for rp access
s_cpwait, -- s_cpwait: wait for cp port ack
s_cpstep -- s_cpstep: wait for cpustep done
);
140,7 → 139,7
rbinit : slbit; -- rbus init seen (1 cycle pulse)
cpreq : slbit; -- cp request flag
cpfunc : slv5; -- cp function
cpuact_1 : slbit; -- prev cycle cpuact
cpugo_1 : slbit; -- prev cycle cpugo
addr : slv22_1; -- address register
ena_22bit : slbit; -- 22bit enable
ena_ubmap : slbit; -- ubmap enable
156,7 → 155,7
'0', -- rbinit
'0', -- cpreq
(others=>'0'), -- cpfunc
'0', -- cpuact_1
'0', -- cpugo_1
(others=>'0'), -- addr
'0','0', -- ena_22bit, ena_ubmap
"11",'0', -- membe,membestick
193,7 → 192,6
variable irb_lam : slbit := '0';
variable irbena : slbit := '0';
 
variable icpuact : slbit := '0';
variable icpreq : slbit := '0';
variable icpaddr : cp_addr_type := cp_addr_init;
409,9 → 407,8
icpaddr.ena_ubmap := '0';
end if;
icpuact := CP_STAT.cpugo and not CP_STAT.suspint;
n.cpuact_1 := icpuact; -- delay cpuact
if (r.cpuact_1='1' and icpuact='0') then -- cpuact 1 -> 0
n.cpugo_1 := CP_STAT.cpugo; -- delay cpugo
if CP_STAT.cpugo='0' and r.cpugo_1='1' then -- cpugo 1 -> 0 transition ?
irb_lam := '1';
end if;
/trunk/rtl/w11a/pdp11_vmbox.vhd
1,4 → 1,4
-- $Id: pdp11_vmbox.vhd 697 2015-07-05 14:23:26Z mueller $
-- $Id: pdp11_vmbox.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2006-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
27,7 → 27,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-07-03 697 1.6.5 much wider DM_STAT_VM
-- 2015-04-04 662 1.6.4 atowidth now 6 (was 5) to support ibdr_rprm reset
-- 2011-11-18 427 1.6.3 now numeric_std clean
-- 2010-10-23 335 1.6.2 add r.paddr_iopage, use ib_sel
168,14 → 167,9
signal UBMAP_MREQ : slbit := '0';
signal UBMAP_ADDR_PM : slv22_1 := (others=>'0');
 
signal VM_STAT_L : vm_stat_type := vm_stat_init; -- vm status (local)
signal VM_DOUT_L : slv16 := (others=>'0'); -- vm data out (local)
 
signal IB_MREQ : ib_mreq_type := ib_mreq_init; -- ibus request (local)
signal IB_SRES : ib_sres_type := ib_sres_init; -- ibus response (local)
signal IB_SRES_INT : ib_sres_type := ib_sres_init; -- ibus response (cpu)
 
signal EM_MREQ_L : em_mreq_type := em_mreq_init; -- ext mem: request (local)
begin
 
674,27 → 668,17
IB_MREQ.addr <= r.paddr(12 downto 1);
IB_MREQ.din <= r.mdin;
VM_STAT_L <= ivm_stat;
VM_DOUT_L <= ivm_dout;
MMU_CNTL <= immu_cntl;
VM_DOUT <= ivm_dout;
VM_STAT <= ivm_stat;
MMU_CNTL <= immu_cntl;
 
EM_MREQ_L <= iem_mreq;
 
EM_MREQ <= iem_mreq;
end process proc_next;
 
VM_STAT <= VM_STAT_L;
VM_DOUT <= VM_DOUT_L;
IB_MREQ_M <= IB_MREQ; -- external drive master port
EM_MREQ <= EM_MREQ_L;
DM_STAT_VM.vmcntl <= VM_CNTL;
DM_STAT_VM.vmaddr <= VM_ADDR;
DM_STAT_VM.vmdin <= VM_DIN;
DM_STAT_VM.vmstat <= VM_STAT_L;
DM_STAT_VM.vmdout <= VM_DOUT_L;
 
DM_STAT_VM.ibmreq <= IB_MREQ;
DM_STAT_VM.ibsres <= IB_SRES;
DM_STAT_VM.emmreq <= EM_MREQ_L;
DM_STAT_VM.emsres <= EM_SRES;
 
end syn;
/trunk/rtl/w11a/pdp11_sys70.vbom
11,10 → 11,6
pdp11_mem70.vbom
../ibus/ibd_ibmon.vbom
../ibus/ib_sres_or_3.vbom
pdp11_dmscnt.vbom
pdp11_dmcmon.vbom
pdp11_dmhbpt.vbom
../vlib/rbus/rb_sres_or_4.vbom
[sim]pdp11_tmu_sb.vbom
# design
pdp11_sys70.vhd
/trunk/rtl/w11a/tb/tb_pdp11core_stim.dat
1,8 → 1,7
# $Id: tb_pdp11core_stim.dat 716 2015-12-22 21:44:33Z mueller $
# $Id: tb_pdp11core_stim.dat 675 2015-05-08 21:05:08Z mueller $
#
# Revision History:
# Date Rev Version Comment
# 2015-12-22 716 2.7 comment out test 20.13 (fails since r708)
# 2015-05-08 675 2.6 start/stop/suspend overhaul
# 2014-12-26 621 2.5 adopt wmembe,ribr,wibr emulation to new 4k window
# 2014-12-20 614 2.4 adopted to rlink v4
1562,23 → 1561,23
wm 000000 -- clear CPUERR
#----------
C Exec test 20.13 (red stack abort on 2nd word of interrupt/trap push)
#wps 000017 -- psw: set all cc flags
#wsp 000342 -- sp=342
#wpc 004724 -- pc=4724
#step -- step (iot): abort to 4 [[s:2]]
#rpc d=000006 -- ! pc=6 (trap 4 catch)
#rsp d=000000 -- ! sp=0
#wal 000336 -- check stack
#brm 2
# d=000000 -- ! mem(336) untainted
# d=000017 -- ! mem(340) PS of 1st attempt
#wal 000000 -- check emergency stack at 0,2
#brm 2
# d=004726 -- ! mem(0): PC
# d=000000 -- ! mem(2): PS (will be 0, orgininal PS lost !!)
#wal 177766 -- check CPUERR
#rm d=000004 -- ! CPUERR: (rsv=1)
#wm 000000 -- clear CPUERR
wps 000017 -- psw: set all cc flags
wsp 000342 -- sp=342
wpc 004724 -- pc=4724
step -- step (iot): abort to 4 [[s:2]]
rpc d=000006 -- ! pc=6 (trap 4 catch)
rsp d=000000 -- ! sp=0
wal 000336 -- check stack
brm 2
d=000000 -- ! mem(336) untainted
d=000017 -- ! mem(340) PS of 1st attempt
wal 000000 -- check emergency stack at 0,2
brm 2
d=004726 -- ! mem(0): PC
d=000000 -- ! mem(2): PS (will be 0, orgininal PS lost !!)
wal 177766 -- check CPUERR
rm d=000004 -- ! CPUERR: (rsv=1)
wm 000000 -- clear CPUERR
#----------
C Exec test 20.14 (yellow stack trap when pushing data to stack; sp=400)
wps 000017 -- psw: set all cc flags
/trunk/rtl/w11a/tb/tbd_pdp11core.vhd
1,4 → 1,4
-- $Id: tbd_pdp11core.vhd 712 2015-11-01 22:53:45Z mueller $
-- $Id: tbd_pdp11core.vhd 674 2015-05-04 16:17:40Z mueller $
--
-- Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
41,8 → 41,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-11-01 712 1.6.2 use sbcntl_sbf_tmu
-- 2015-07-03 697 1.6.1 adapt to new DM_STAT_(SY|VM)
-- 2015-05-03 674 1.6 start/stop/suspend overhaul
-- 2011-11-18 427 1.5.1 now numeric_std clean
-- 2010-12-30 351 1.5 rename tbd_pdp11_core -> tbd_pdp11core
176,7 → 174,8
ESUSP_O => open, -- not tested
ESUSP_I => '0', -- dito
ITIMER => open, -- dito
HBPT => '0', -- dito
EBREAK => '0', -- dito
DBREAK => '0', -- dito
EI_PRI => EI_PRI,
EI_VECT => EI_VECT,
EI_ACKM => EI_ACKM,
216,12 → 215,15
DISPREG => open
);
 
-- synthesis translate_off
 
DM_STAT_SY.emmreq <= EM_MREQ;
DM_STAT_SY.emsres <= EM_SRES;
DM_STAT_SY.chit <= '0';
 
-- synthesis translate_off
TMU : pdp11_tmu_sb
generic map (
ENAPIN => sbcntl_sbf_tmu)
ENAPIN => 13)
port map (
CLK => CLK,
DM_STAT_DP => DM_STAT_DP,
/trunk/rtl/w11a/pdp11_core.vhd
1,4 → 1,4
-- $Id: pdp11_core.vhd 702 2015-07-19 17:36:09Z mueller $
-- $Id: pdp11_core.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2006-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
30,9 → 30,6
-- Tool versions: ise 8.2-14.7; viv 2014.4; ghdl 0.18-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-07-19 702 1.4.2 add DM_STAT_SE port; re-arrange DM_STAT_CO usage
-- 2015-07-05 697 1.4.1 wire istart,istop,cpustep to DM_STAT_CO
-- 2015-06-26 695 1.4.1 connect SNUM (current state number)
-- 2015-05-09 679 1.4 start/stop/suspend overhaul; reset overhaul
-- 2015-04-30 670 1.3.2 rename pdp11_sys70 -> pdp11_reg70
-- 2011-11-18 427 1.3.1 now numeric_std clean
77,7 → 74,8
ESUSP_O : out slbit; -- external suspend output
ESUSP_I : in slbit; -- external suspend input
ITIMER : out slbit; -- instruction timer
HBPT : in slbit; -- hardware bpt
EBREAK : in slbit; -- execution break
DBREAK : in slbit; -- data break
EI_PRI : in slv3; -- external interrupt priority
EI_VECT : in slv9_2; -- external interrupt vector
EI_ACKM : out slbit; -- external interrupt acknowledge
87,7 → 85,6
BRESET : out slbit; -- bus reset
IB_MREQ_M : out ib_mreq_type; -- ibus master request (master)
IB_SRES_M : in ib_sres_type; -- ibus slave response (master)
DM_STAT_SE : out dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_DP : out dm_stat_dp_type; -- debug and monitor status - dpath
DM_STAT_VM : out dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : out dm_stat_co_type -- debug and monitor status - core
115,7 → 112,6
signal INT_VECT : slv9_2 := (others=>'0');
signal CP_STAT_L : cp_stat_type := cp_stat_init;
signal INT_ACK : slbit := '0';
signal SNUM : slv8 := (others=>'0');
 
signal IB_SRES_DP : ib_sres_type := ib_sres_init;
signal IB_SRES_SEQ : ib_sres_type := ib_sres_init;
198,10 → 194,10
ESUSP_O => ESUSP_O,
ESUSP_I => ESUSP_I,
ITIMER => ITIMER,
HBPT => HBPT,
EBREAK => EBREAK,
DBREAK => DBREAK,
IB_MREQ => IB_MREQ,
IB_SRES => IB_SRES_SEQ,
DM_STAT_SE => DM_STAT_SE
IB_SRES => IB_SRES_SEQ
);
 
IRQ : pdp11_irq
243,7 → 239,6
BRESET <= BRESET_L;
DM_STAT_CO.cpugo <= CP_STAT_L.cpugo;
DM_STAT_CO.cpustep <= CP_STAT_L.cpustep;
DM_STAT_CO.cpususp <= CP_STAT_L.cpususp;
DM_STAT_CO.suspint <= CP_STAT_L.suspint;
DM_STAT_CO.suspext <= CP_STAT_L.suspext;
/trunk/rtl/w11a/pdp11_tmu_sb.vhd
1,6 → 1,6
-- $Id: pdp11_tmu_sb.vhd 712 2015-11-01 22:53:45Z mueller $
-- $Id: pdp11_tmu_sb.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2009-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2009- 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
20,7 → 20,6
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-11-01 712 1.0.1 use sbcntl_sbf_tmu
-- 2009-05-10 214 1.0 Initial version
------------------------------------------------------------------------------
 
34,7 → 33,7
 
entity pdp11_tmu_sb is -- trace and mon. unit; simbus wrapper
generic (
ENAPIN : integer := sbcntl_sbf_tmu); -- SB_CNTL for tmu
ENAPIN : integer := 13); -- SB_CNTL signal to use for enable
port (
CLK : in slbit; -- clock
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
/trunk/rtl/w11a/pdp11_sequencer.vhd
1,4 → 1,4
-- $Id: pdp11_sequencer.vhd 708 2015-08-03 06:41:43Z mueller $
-- $Id: pdp11_sequencer.vhd 679 2015-05-13 17:38:46Z mueller $
--
-- Copyright 2006-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
22,11 → 22,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-08-02 708 1.6.5 BUGFIX: proper trap_mmu and trap_ysv handling
-- 2015-08-01 707 1.6.4 set dm_idone in s_(trap_10|op_trap); add dm_vfetch
-- 2015-07-19 702 1.6.3 add DM_STAT_SE, drop SNUM port
-- 2015-07-10 700 1.6.2 use c_cpurust_hbpt
-- 2015-06-26 695 1.6.1 add SNUM (state number) port
-- 2015-05-10 678 1.6 start/stop/suspend overhaul; reset overhaul
-- 2015-02-07 643 1.5.2 s_op_wait: load R0 in DSRC for DR emulation
-- 2014-07-12 569 1.5.1 rename s_opg_div_zero -> s_opg_div_quit;
102,10 → 97,10
ESUSP_O : out slbit; -- external suspend output
ESUSP_I : in slbit; -- external suspend input
ITIMER : out slbit; -- instruction timer
HBPT : in slbit; -- hardware bpt
EBREAK : in slbit; -- execution break
DBREAK : in slbit; -- data break
IB_MREQ : in ib_mreq_type; -- ibus request
IB_SRES : out ib_sres_type; -- ibus response
DM_STAT_SE : out dm_stat_se_type -- debug and monitor status - sequencer
IB_SRES : out ib_sres_type -- ibus response
);
end pdp11_sequencer;
 
322,7 → 317,7
proc_next: process (R_STATE, R_STATUS, PSW, PC, CP_CNTL,
ID_STAT, R_IDSTAT, IREG, VM_STAT, DP_STAT,
R_CPUERR, R_VMSTAT, IB_MREQ, IBSEL_CPUERR,
INT_PRI, INT_VECT, ESUSP_I, HBPT)
INT_PRI, INT_VECT, ESUSP_I, EBREAK, DBREAK)
variable nstate : state_type;
variable nstatus : cpustat_type := cpustat_init;
346,9 → 341,6
variable is_dstkstack1246 : slbit := '0'; -- dest is k-stack & mode= 1,2,4,6
 
variable int_pending : slbit := '0'; -- an interrupt is pending
 
variable idm_idone : slbit := '0'; -- idone for dm_stat_se
variable idm_vfetch : slbit := '0'; -- vfetch for dm_stat_se
alias SRCMOD : slv2 is IREG(11 downto 10); -- src register mode high
alias SRCDEF : slbit is IREG(9); -- src register mode defered
432,14 → 424,10
mok := false;
if VM_STAT.ack = '1' then
mok := true;
if VM_STAT.trap_mmu = '1' then -- remember trap_mmu, may happen on any
nstatus.trap_mmu := '1'; -- memory access of an instruction
nstatus.trap_mmu := VM_STAT.trap_mmu;
if R_CPUERR.ysv = '0' then -- ysv trap when cpuerr not yet set
nstatus.trap_ysv := VM_STAT.trap_ysv;
end if;
if VM_STAT.trap_ysv = '1' then -- remember trap_ysv (on any access)
if R_CPUERR.ysv = '0' then -- ysv trap when cpuerr not yet set
nstatus.trap_ysv := '1';
end if;
end if;
elsif VM_STAT.err='1' or VM_STAT.fail='1' then
nstate := s_vmerr;
end if;
595,9 → 583,6
if unsigned(INT_PRI) > unsigned(PSW.pri) then
int_pending := '1';
end if;
 
idm_idone := '0';
idm_vfetch := '0';
imemok := false;
 
1312,8 → 1297,7
nstate := s_dstw_def_w;
do_memcheck(nstate, nstatus, imemok);
if imemok then
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
 
when s_dstw_inc =>
1353,8 → 1337,7
nstatus.do_gprwe := '0';
do_memcheck(nstate, nstatus, imemok);
if imemok then
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
 
when s_dstw_incdef_w =>
1527,7 → 1510,6
-- instruction operate states -----------------------------------------------
 
when s_op_halt => -- HALT
idm_idone := '1'; -- instruction done
if is_kmode = '1' then -- if in kernel mode execute
nmmumoni.idone := '1';
nstatus.cpugo := '0';
1558,7 → 1540,6
end if;
 
when s_op_trap => -- traps
idm_idone := '1'; -- instruction done
lvector := "0000" & R_IDSTAT.trap_vec; -- vector
do_start_int(nstate, ndpcntl, lvector);
1587,14 → 1568,12
do_memcheck(nstate, nstatus, imemok);
if imemok then
ndpcntl.gpr_we := '1'; -- load R with (SP)+
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
when s_op_spl => -- SPL
ndpcntl.dres_sel := c_dpath_res_ireg; -- DRES = IREG
ndpcntl.psr_func := c_psr_func_wspl;
idm_idone := '1'; -- instruction done
if is_kmode = '1' then -- active only in kernel mode
ndpcntl.psr_we := '1';
nstate := s_ifetch; -- unconditionally fetch next
1608,8 → 1587,7
ndpcntl.dres_sel := c_dpath_res_ireg; -- DRES = IREG
ndpcntl.psr_func := c_psr_func_wcc;
ndpcntl.psr_we := '1';
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
when s_op_br => -- BR
nvmcntl.dspace := '0'; -- prepare do_fork_next_pref
1639,7 → 1617,6
end case;
 
ndpcntl.gpr_adst := c_gpr_pc;
idm_idone := '1'; -- instruction done
if brcond = brcode(0) then -- this coding creates redundant code
ndpcntl.gpr_we := '1'; -- but synthesis optimizes this way !
do_fork_next(nstate, nstatus, nmmumoni);
1677,8 → 1654,7
do_memcheck(nstate, nstatus, imemok);
if imemok then
ndpcntl.gpr_we := '1'; -- load R5 with (sp)+
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
when s_op_sob => -- SOB (dec)
1689,12 → 1665,11
ndpcntl.gpr_adst := SRCREG;
ndpcntl.gpr_we := '1';
 
if DP_STAT.ccout_z = '0' then -- if z=0 branch, if z=1 fall thru
if DP_STAT.ccout_z = '0' then -- if z=0 branch, if z=1 fall thru
nstate := s_op_sob1;
else
--do_fork_next_pref(nstate, ndpcntl, nvmcntl, nmmumoni);
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
when s_op_sob1 => -- SOB (br)
1704,8 → 1679,7
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
ndpcntl.gpr_adst := c_gpr_pc;
ndpcntl.gpr_we := '1';
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
 
when s_opg_gen =>
nvmcntl.dspace := '0'; -- prepare do_fork_next_pref
1726,7 → 1700,6
if R_IDSTAT.is_rmwop = '1' then
do_memwrite(nstate, nvmcntl, s_opg_gen_rmw_w, macc=>'1');
else
idm_idone := '1'; -- instruction done
if R_STATUS.prefdone = '1' then
nstatus.prefdone :='0';
nstate := s_ifetch_w;
1748,8 → 1721,7
nstate := s_opg_gen_rmw_w;
do_memcheck(nstate, nstatus, imemok);
if imemok then
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
 
when s_opg_mul => -- MUL (oper)
1769,8 → 1741,7
ndpcntl.gpr_adst := SRCREG(2 downto 1) & "1";-- write odd reg !
ndpcntl.gpr_we := '1';
ndpcntl.psr_ccwe := '1';
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
when s_opg_div => -- DIV (load dd_low)
ndpcntl.munit_s_div := '1';
1824,14 → 1795,12
if DP_STAT.div_quit = '1' then
nstate := s_opg_div_quit;
else
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
when s_opg_div_quit => -- DIV (0/ or /0 or V=1 aborts)
ndpcntl.psr_ccwe := '1';
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
 
when s_opg_ash => -- ASH (load shc)
ndpcntl.munit_s_ash := '1';
1853,7 → 1822,6
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
ndpcntl.gpr_we := '1';
ndpcntl.psr_ccwe := '1';
idm_idone := '1'; -- instruction done
do_fork_next_pref(nstate, nstatus, ndpcntl, nvmcntl, nmmumoni);
end if;
1889,8 → 1857,7
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
ndpcntl.gpr_adst := SRCREG(2 downto 1) & "1";-- write odd reg !
ndpcntl.gpr_we := '1';
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
 
-- dsta mode operations -----------------------------------------------------
 
1951,8 → 1918,7
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
ndpcntl.gpr_adst := c_gpr_pc;
ndpcntl.gpr_we := '1'; -- load PC with dsta
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
 
when s_opa_jmp =>
ndpcntl.ounit_asel := c_ounit_asel_ddst; -- OUNIT A=DDST
1963,8 → 1929,7
nstate := s_trap_10; -- trap 10 like 11/70
else
ndpcntl.gpr_we := '1'; -- load PC with dsta
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
 
when s_opa_mtp =>
2000,8 → 1965,7
ndpcntl.psr_ccwe := '1'; -- set cc (from ounit too)
ndpcntl.gpr_mode := PSW.pmode; -- load reg in pmode
ndpcntl.gpr_we := '1';
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
 
when s_opa_mtp_mem =>
ndpcntl.ounit_asel := c_ounit_asel_dtmp; -- OUNIT A = DTMP
2019,8 → 1983,7
nstate := s_opa_mtp_mem_w;
do_memcheck(nstate, nstatus, imemok);
if imemok then
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
 
when s_opa_mfp_reg =>
2081,8 → 2044,7
nstate := s_opa_mfp_push_w;
do_memcheck(nstate, nstatus, imemok);
if imemok then
idm_idone := '1'; -- instruction done
do_fork_next(nstate, nstatus, nmmumoni); -- fetch next
do_fork_next(nstate, nstatus, nmmumoni);
end if;
 
-- trap and interrupt handling states ---------------------------------------
2092,7 → 2054,6
do_start_int(nstate, ndpcntl, lvector);
 
when s_trap_10 =>
idm_idone := '1'; -- instruction done
lvector := "0000010"; -- vector (10)
do_start_int(nstate, ndpcntl, lvector);
 
2115,7 → 2076,6
do_start_int(nstate, ndpcntl, lvector);
 
when s_int_getpc =>
idm_vfetch := '1'; -- signal vfetch
nvmcntl.mode := c_psw_kmode; -- fetch PC from kernel D space
do_memread_srcinc(nstate, ndpcntl, nvmcntl, s_int_getpc_w, nmmumoni);
 
2263,9 → 2223,8
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
ndpcntl.gpr_adst := c_gpr_pc;
ndpcntl.gpr_we := '1'; -- load new PC
idm_idone := '1'; -- instruction done
if R_IDSTAT.op_rtt = '1' then -- if RTT instruction
nstate := s_ifetch; -- force fetch
nstate := s_ifetch; -- force fetch
else -- otherwise RTI
do_fork_next(nstate, nstatus, nmmumoni);
end if;
2336,8 → 2295,7
 
end case;
 
if HBPT = '1' then -- handle hardware bpt
nstatus.cpurust := c_cpurust_hbpt;
if DBREAK = '1' then -- handle BREAK
nstatus.suspint :='1';
end if;
nstatus.suspext := ESUSP_I;
2372,11 → 2330,7
nmmumoni.regnum := ndpcntl.gpr_adst;
nmmumoni.delta := ndpcntl.ounit_const(3 downto 0);
MMU_MONI <= nmmumoni;
 
DM_STAT_SE.istart <= nmmumoni.istart;
DM_STAT_SE.idone <= idm_idone;
DM_STAT_SE.vfetch <= idm_vfetch;
end process proc_next;
 
proc_cpstat : process (R_STATUS)
2394,144 → 2348,6
CP_STAT.suspint <= R_STATUS.suspint;
CP_STAT.suspext <= R_STATUS.suspext;
end process proc_cpstat;
 
proc_snum : process (R_STATE)
variable isnum : slv8 := (others=>'0');
begin
isnum := (others=>'0');
case R_STATE is
-- STATE2SNUM mapper begin
when s_idle => isnum := x"00";
when s_cp_regread => isnum := x"01";
when s_cp_rps => isnum := x"02";
when s_cp_memr_w => isnum := x"03";
when s_cp_memw_w => isnum := x"04";
when s_ifetch => isnum := x"05";
when s_ifetch_w => isnum := x"06";
when s_idecode => isnum := x"07";
when s_srcr_def => isnum := x"08";
when s_srcr_def_w => isnum := x"09";
when s_srcr_inc => isnum := x"0a";
when s_srcr_inc_w => isnum := x"0b";
when s_srcr_dec => isnum := x"0c";
when s_srcr_dec1 => isnum := x"0d";
when s_srcr_ind => isnum := x"0e";
when s_srcr_ind1_w => isnum := x"0f";
when s_srcr_ind2 => isnum := x"10";
when s_srcr_ind2_w => isnum := x"11";
 
when s_dstr_def => isnum := x"12";
when s_dstr_def_w => isnum := x"13";
when s_dstr_inc => isnum := x"14";
when s_dstr_inc_w => isnum := x"15";
when s_dstr_dec => isnum := x"16";
when s_dstr_dec1 => isnum := x"17";
when s_dstr_ind => isnum := x"18";
when s_dstr_ind1_w => isnum := x"19";
when s_dstr_ind2 => isnum := x"1a";
when s_dstr_ind2_w => isnum := x"1b";
 
when s_dstw_def => isnum := x"1c";
when s_dstw_def_w => isnum := x"1d";
when s_dstw_inc => isnum := x"1e";
when s_dstw_inc_w => isnum := x"1f";
when s_dstw_incdef_w => isnum := x"20";
when s_dstw_dec => isnum := x"21";
when s_dstw_dec1 => isnum := x"22";
when s_dstw_ind => isnum := x"23";
when s_dstw_ind_w => isnum := x"24";
when s_dstw_def246 => isnum := x"25";
 
when s_dsta_inc => isnum := x"26";
when s_dsta_incdef_w => isnum := x"27";
when s_dsta_dec => isnum := x"28";
when s_dsta_dec1 => isnum := x"29";
when s_dsta_ind => isnum := x"2a";
when s_dsta_ind_w => isnum := x"2b";
 
when s_op_halt => isnum := x"2c";
when s_op_wait => isnum := x"2d";
when s_op_trap => isnum := x"2e";
when s_op_reset => isnum := x"2f";
when s_op_rts => isnum := x"30";
when s_op_rts_pop => isnum := x"31";
when s_op_rts_pop_w => isnum := x"32";
when s_op_spl => isnum := x"33";
when s_op_mcc => isnum := x"34";
when s_op_br => isnum := x"35";
when s_op_mark => isnum := x"36";
when s_op_mark1 => isnum := x"37";
when s_op_mark_pop => isnum := x"38";
when s_op_mark_pop_w => isnum := x"39";
when s_op_sob => isnum := x"3a";
when s_op_sob1 => isnum := x"3b";
 
when s_opg_gen => isnum := x"3c";
when s_opg_gen_rmw_w => isnum := x"3d";
when s_opg_mul => isnum := x"3e";
when s_opg_mul1 => isnum := x"3f";
when s_opg_div => isnum := x"40";
when s_opg_div_cn => isnum := x"41";
when s_opg_div_cr => isnum := x"42";
when s_opg_div_sq => isnum := x"43";
when s_opg_div_sr => isnum := x"44";
when s_opg_div_quit => isnum := x"45";
when s_opg_ash => isnum := x"46";
when s_opg_ash_cn => isnum := x"47";
when s_opg_ashc => isnum := x"48";
when s_opg_ashc_cn => isnum := x"49";
when s_opg_ashc_wl => isnum := x"4a";
 
when s_opa_jsr => isnum := x"4b";
when s_opa_jsr1 => isnum := x"4c";
when s_opa_jsr_push => isnum := x"4d";
when s_opa_jsr_push_w => isnum := x"4e";
when s_opa_jsr2 => isnum := x"4f";
when s_opa_jmp => isnum := x"50";
when s_opa_mtp => isnum := x"51";
when s_opa_mtp_pop_w => isnum := x"52";
when s_opa_mtp_reg => isnum := x"53";
when s_opa_mtp_mem => isnum := x"54";
when s_opa_mtp_mem_w => isnum := x"55";
when s_opa_mfp_reg => isnum := x"56";
when s_opa_mfp_mem => isnum := x"57";
when s_opa_mfp_mem_w => isnum := x"58";
when s_opa_mfp_dec => isnum := x"59";
when s_opa_mfp_push => isnum := x"5a";
when s_opa_mfp_push_w => isnum := x"5b";
when s_trap_4 => isnum := x"5c";
when s_trap_10 => isnum := x"5d";
when s_trap_disp => isnum := x"5e";
 
when s_int_ext => isnum := x"5f";
 
when s_int_getpc => isnum := x"60";
when s_int_getpc_w => isnum := x"61";
when s_int_getps => isnum := x"62";
when s_int_getps_w => isnum := x"63";
when s_int_getsp => isnum := x"64";
when s_int_decsp => isnum := x"65";
when s_int_pushps => isnum := x"66";
when s_int_pushps_w => isnum := x"67";
when s_int_pushpc => isnum := x"68";
when s_int_pushpc_w => isnum := x"69";
 
when s_rti_getpc => isnum := x"6a";
when s_rti_getpc_w => isnum := x"6b";
when s_rti_getps => isnum := x"6c";
when s_rti_getps_w => isnum := x"6d";
when s_rti_newpc => isnum := x"6e";
when s_vmerr => isnum := x"6f";
when s_cpufail => isnum := x"70";
 
-- STATE2SNUM mapper end
when others => isnum := x"ff";
end case;
DM_STAT_SE.snum <= isnum;
end process proc_snum;
 
end syn;
/trunk/rtl/w11a/pdp11_tmu.vhd
1,4 → 1,4
-- $Id: pdp11_tmu.vhd 697 2015-07-05 14:23:26Z mueller $
-- $Id: pdp11_tmu.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2008-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
23,7 → 23,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-07-03 697 1.2.1 adapt to new DM_STAT_SY/DM_STAT_VM
-- 2015-05-03 674 1.2 start/stop/suspend overhaul
-- 2011-12-23 444 1.1 use local clkcycle count instead of simbus global
-- 2011-11-18 427 1.0.7 now numeric_std clean
86,7 → 85,6
if R_FIRST = '1' then
R_FIRST <= '0';
-- sequence of field desciptors must equal the sequence of writes later
write(oline, string'("#"));
write(oline, string'(" clkcycle:d"));
write(oline, string'(" cpu:o"));
117,15 → 115,6
write(oline, string'(" vm.ibsres.ack:b"));
write(oline, string'(" vm.ibsres.busy:b"));
write(oline, string'(" vm.ibsres.dout:o"));
write(oline, string'(" vm.emmreq.req:b"));
write(oline, string'(" vm.emmreq.we:b"));
write(oline, string'(" vm.emmreq.be:b"));
write(oline, string'(" vm.emmreq.cancel:b"));
write(oline, string'(" vm.emmreq.addr:o"));
write(oline, string'(" vm.emmreq.din:o"));
write(oline, string'(" vm.emsres.ack_r:b"));
write(oline, string'(" vm.emsres.ack_w:b"));
write(oline, string'(" vm.emsres.dout:o"));
 
write(oline, string'(" co.cpugo:b"));
write(oline, string'(" co.cpususp:b"));
132,6 → 121,15
write(oline, string'(" co.suspint:b"));
write(oline, string'(" co.suspext:b"));
 
write(oline, string'(" sy.emmreq.req:b"));
write(oline, string'(" sy.emmreq.we:b"));
write(oline, string'(" sy.emmreq.be:b"));
write(oline, string'(" sy.emmreq.cancel:b"));
write(oline, string'(" sy.emmreq.addr:o"));
write(oline, string'(" sy.emmreq.din:o"));
write(oline, string'(" sy.emsres.ack_r:b"));
write(oline, string'(" sy.emsres.ack_w:b"));
write(oline, string'(" sy.emsres.dout:o"));
write(oline, string'(" sy.chit:b"));
 
writeline(ofile, oline);
149,15 → 147,15
ibaddr(DM_STAT_VM.ibmreq.addr'range) := DM_STAT_VM.ibmreq.addr;
 
emaddr := (others=>'0');
emaddr(DM_STAT_VM.emmreq.addr'range) := DM_STAT_VM.emmreq.addr;
emaddr(DM_STAT_SY.emmreq.addr'range) := DM_STAT_SY.emmreq.addr;
 
wcycle := false;
if dp_ireg_we_last='1' or
DM_STAT_DP.gpr_we='1' or
DM_STAT_VM.emmreq.req='1' or
DM_STAT_VM.emsres.ack_r='1' or
DM_STAT_VM.emsres.ack_w='1' or
DM_STAT_VM.emmreq.cancel='1' or
DM_STAT_SY.emmreq.req='1' or
DM_STAT_SY.emsres.ack_r='1' or
DM_STAT_SY.emsres.ack_w='1' or
DM_STAT_SY.emmreq.cancel='1' or
DM_STAT_VM.ibmreq.re='1' or
DM_STAT_VM.ibmreq.we='1' or
DM_STAT_VM.ibsres.ack='1'
176,7 → 174,6
end if;
 
if wcycle then
-- sequence of writes must equal the sequence of field desciptors above
write(oline, clkcycle, right, 9);
write(oline, string'(" 0"));
writeoct(oline, DM_STAT_DP.pc, right, 7);
207,21 → 204,20
write(oline, DM_STAT_VM.ibsres.busy, right, 2);
writeoct(oline, DM_STAT_VM.ibsres.dout, right, 7);
 
write(oline, DM_STAT_VM.emmreq.req, right, 2);
write(oline, DM_STAT_VM.emmreq.we, right, 2);
write(oline, DM_STAT_VM.emmreq.be, right, 3);
write(oline, DM_STAT_VM.emmreq.cancel, right, 2);
writeoct(oline, emaddr, right, 9);
writeoct(oline, DM_STAT_VM.emmreq.din, right, 7);
write(oline, DM_STAT_VM.emsres.ack_r, right, 2);
write(oline, DM_STAT_VM.emsres.ack_w, right, 2);
writeoct(oline, DM_STAT_VM.emsres.dout, right, 7);
 
write(oline, DM_STAT_CO.cpugo, right, 2);
write(oline, DM_STAT_CO.cpususp, right, 2);
write(oline, DM_STAT_CO.suspint, right, 2);
write(oline, DM_STAT_CO.suspext, right, 2);
 
write(oline, DM_STAT_SY.emmreq.req, right, 2);
write(oline, DM_STAT_SY.emmreq.we, right, 2);
write(oline, DM_STAT_SY.emmreq.be, right, 3);
write(oline, DM_STAT_SY.emmreq.cancel, right, 2);
writeoct(oline, emaddr, right, 9);
writeoct(oline, DM_STAT_SY.emmreq.din, right, 7);
write(oline, DM_STAT_SY.emsres.ack_r, right, 2);
write(oline, DM_STAT_SY.emsres.ack_w, right, 2);
writeoct(oline, DM_STAT_SY.emsres.dout, right, 7);
write(oline, DM_STAT_SY.chit, right, 2);
 
writeline(ofile, oline);
/trunk/rtl/w11a/sys_conf.vhd
1,4 → 1,4
-- $Id: sys_conf.vhd 695 2015-06-28 11:22:52Z mueller $
-- $Id: sys_conf.vhd 672 2015-05-02 21:58:28Z mueller $
--
-- Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
19,7 → 19,6
-- Tool versions: xst 8.1-14.7; viv 2014.4; ghdl 0.18-0.31
-- Revision History:
-- Date Rev Version Comment
-- 2015-06-26 695 1.1.1 add sys_conf_dmscnt
-- 2015-05-01 672 1.1 adopt to pdp11_sys70
-- 2008-02-23 118 1.0 Initial version
------------------------------------------------------------------------------
37,7 → 36,6
constant sys_conf_mem_losize : integer := 8#000777#;-- 32 kByte
 
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
constant sys_conf_dmscnt : boolean := true;
 
end package sys_conf;
 
/trunk/rtl/w11a/pdp11.vhd
1,4 → 1,4
-- $Id: pdp11.vhd 712 2015-11-01 22:53:45Z mueller $
-- $Id: pdp11.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2006-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
20,11 → 20,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-11-01 712 1.6.5 define sbcntl_sbf_tmu := 12; use for pdp11_tmu_sb
-- 2015-07-19 702 1.6.4 change DM_STAT_(DP|CO); add DM_STAT_SE
-- 2015-07-10 700 1.6.3 define c_cpurust_hbpt;
-- 2015-07-04 697 1.6.2 add pdp11_dm(hbpt|cmon); change DM_STAT_(SY|VM|CO)
-- 2015-06-26 695 1.6.1 add pdp11_dmscnt (add support)
-- 2015-05-09 677 1.6 start/stop/suspend overhaul; reset overhaul
-- 2015-05-01 672 1.5.5 add pdp11_sys70, sys_hio70
-- 2015-04-30 670 1.5.4 rename pdp11_sys70 -> pdp11_reg70
338,7 → 333,6
constant c_cpurust_stop : slv4 := "0011"; -- cpu was stopped
constant c_cpurust_step : slv4 := "0100"; -- cpu was stepped
constant c_cpurust_susp : slv4 := "0101"; -- cpu was suspended
constant c_cpurust_hbpt : slv4 := "0110"; -- cpu had hardware bpt
constant c_cpurust_runs : slv4 := "0111"; -- cpu running
constant c_cpurust_vecfet : slv4 := "1000"; -- vector fetch error halt
constant c_cpurust_recrsv : slv4 := "1001"; -- recursive red-stack halt
601,32 → 595,22
 
-- debug and monitoring port definitions -------------------------------------
 
type dm_stat_se_type is record -- debug and monitor status - sequencer
istart : slbit; -- instruction start
idone : slbit; -- instruction done
vfetch : slbit; -- vector fetch
snum : slv8; -- current state number
end record dm_stat_se_type;
type dm_cntl_type is record -- debug and monitor control
dum1 : slbit; -- dummy 1
dum2 : slbit; -- dummy 2
end record dm_cntl_type;
 
constant dm_stat_se_init : dm_stat_se_type := (
'0','0','0', -- istart,idone,vfetch
(others=>'0') -- snum
);
constant dm_cntl_init : dm_cntl_type := (others=>'0');
 
type dm_stat_dp_type is record -- debug and monitor status - dpath
pc : slv16; -- pc
psw : psw_type; -- psw
psr_we: slbit; -- psr_we
ireg : slv16; -- ireg
ireg_we : slbit; -- ireg we
dsrc : slv16; -- dsrc register
dsrc_we: slbit; -- dsrc we
ddst : slv16; -- ddst register
ddst_we : slbit; -- ddst we
dtmp : slv16; -- dtmp register
dtmp_we : slbit; -- dtmp we
dres : slv16; -- dres bus
cpdout_we : slbit; -- cpdout we
gpr_adst : slv3; -- gpr dst regsiter
gpr_mode : slv2; -- gpr mode
gpr_bytop : slbit; -- gpr bytop
635,44 → 619,23
 
constant dm_stat_dp_init : dm_stat_dp_type := (
(others=>'0'), -- pc
psw_init,'0', -- psw,psr_we
(others=>'0'),'0', -- ireg,ireg_we
(others=>'0'),'0', -- dsrc,dsrc_we
(others=>'0'),'0', -- ddst,ddst_we
(others=>'0'),'0', -- dtmp,dtmp_we
(others=>'0'), -- dres
'0', -- cpdout_we
psw_init, -- psw
(others=>'0'),'0', -- ireg, ireg_we
(others=>'0'),(others=>'0'), -- dsrc, ddst
(others=>'0'),(others=>'0'), -- dtmp, dres
(others=>'0'),(others=>'0'), -- gpr_adst, gpr_mode
'0','0' -- gpr_bytop, gpr_we
);
 
type dm_stat_vm_type is record -- debug and monitor status - vmbox
vmcntl : vm_cntl_type; -- vmbox: control
vmaddr : slv16; -- vmbox: address
vmdin : slv16; -- vmbox: data in
vmstat : vm_stat_type; -- vmbox: status
vmdout : slv16; -- vmbox: data out
ibmreq : ib_mreq_type; -- ibus: request
ibsres : ib_sres_type; -- ibus: response
emmreq : em_mreq_type; -- external memory: request
emsres : em_sres_type; -- external memory: response
ibmreq : ib_mreq_type; -- ibus master request
ibsres : ib_sres_type; -- ibus slave response
end record dm_stat_vm_type;
 
constant dm_stat_vm_init : dm_stat_vm_type := (
vm_cntl_init, -- vmcntl
(others=>'0'), -- vmaddr
(others=>'0'), -- vmdin
vm_stat_init, -- vmstat
(others=>'0'), -- vmdout
ib_mreq_init, -- ibmreq
ib_sres_init, -- ibsres
em_mreq_init, -- emmreq
em_sres_init -- emsres
);
constant dm_stat_vm_init : dm_stat_vm_type := (ib_mreq_init,ib_sres_init);
 
type dm_stat_co_type is record -- debug and monitor status - core
cpugo : slbit; -- cpugo state flag
cpustep : slbit; -- cpustep state flag
cpususp : slbit; -- cpususp state flag
suspint : slbit; -- suspint state flag
suspext : slbit; -- suspext state flag
679,18 → 642,20
end record dm_stat_co_type;
 
constant dm_stat_co_init : dm_stat_co_type := (
'0','0','0', -- cpu...
'0','0', -- cpu...
'0','0' -- susp...
);
 
type dm_stat_sy_type is record -- debug and monitor status - system
emmreq : em_mreq_type; -- external memory: request
emsres : em_sres_type; -- external memory: response
chit : slbit; -- cache hit
dummy : slbit; -- ... sorry records must have two ...
end record dm_stat_sy_type;
 
constant dm_stat_sy_init : dm_stat_sy_type := (
'0', -- chit
'0'
em_mreq_init, -- emmreq
em_sres_init, -- emsres
'0' -- chit
);
 
-- rbus interface definitions ------------------------------------------------
1001,10 → 966,10
ESUSP_O : out slbit; -- external suspend output
ESUSP_I : in slbit; -- external suspend input
ITIMER : out slbit; -- instruction timer
HBPT : in slbit; -- hardware bpt
EBREAK : in slbit; -- execution break
DBREAK : in slbit; -- data break
IB_MREQ : in ib_mreq_type; -- ibus request
IB_SRES : out ib_sres_type; -- ibus response
DM_STAT_SE : out dm_stat_se_type -- debug and monitor status - sequencer
IB_SRES : out ib_sres_type -- ibus response
);
end component;
 
1086,7 → 1051,8
ESUSP_O : out slbit; -- external suspend output
ESUSP_I : in slbit; -- external suspend input
ITIMER : out slbit; -- instruction timer
HBPT : in slbit; -- hardware bpt
EBREAK : in slbit; -- execution break
DBREAK : in slbit; -- data break
EI_PRI : in slv3; -- external interrupt priority
EI_VECT : in slv9_2; -- external interrupt vector
EI_ACKM : out slbit; -- external interrupt acknowledge
1096,7 → 1062,6
BRESET : out slbit; -- bus reset
IB_MREQ_M : out ib_mreq_type; -- ibus master request (master)
IB_SRES_M : in ib_sres_type; -- ibus slave response (master)
DM_STAT_SE : out dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_DP : out dm_stat_dp_type; -- debug and monitor status - dpath
DM_STAT_VM : out dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : out dm_stat_co_type -- debug and monitor status - core
1114,13 → 1079,9
);
end component;
 
-- this definition logically belongs into a 'for test benches' section'
-- it is here for convenience to simplify instantiations.
constant sbcntl_sbf_tmu : integer := 12;
 
component pdp11_tmu_sb is -- trace and mon. unit; simbus wrapper
generic (
ENAPIN : integer := sbcntl_sbf_tmu); -- SB_CNTL for tmu
ENAPIN : integer := 13); -- SB_CNTL signal to use for enable
port (
CLK : in slbit; -- clock
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
1282,70 → 1243,6
);
end component;
 
component pdp11_dmscnt is -- debug&moni: state counter
generic (
RB_ADDR : slv16 := slv(to_unsigned(16#0040#,16)));
port (
CLK : in slbit; -- clock
RESET : in slbit; -- reset
RB_MREQ : in rb_mreq_type; -- rbus: request
RB_SRES : out rb_sres_type; -- rbus: response
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - data path
DM_STAT_CO : in dm_stat_co_type -- debug and monitor status - core
);
end component;
 
component pdp11_dmcmon is -- debug&moni: cpu monitor
generic (
RB_ADDR : slv16 := slv(to_unsigned(16#0048#,16));
AWIDTH : natural := 8);
port (
CLK : in slbit; -- clock
RESET : in slbit; -- reset
RB_MREQ : in rb_mreq_type; -- rbus: request
RB_SRES : out rb_sres_type; -- rbus: response
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - data path
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type -- debug and monitor status - core
);
end component;
 
component pdp11_dmhbpt is -- debug&moni: hardware breakpoint
generic (
RB_ADDR : slv16 := slv(to_unsigned(16#0050#,16));
NUNIT : natural := 2);
port (
CLK : in slbit; -- clock
RESET : in slbit; -- reset
RB_MREQ : in rb_mreq_type; -- rbus: request
RB_SRES : out rb_sres_type; -- rbus: response
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - data path
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
HBPT : out slbit -- hw break flag
);
end component;
 
component pdp11_dmhbpt_unit is -- dmhbpt - indivitial unit
generic (
RB_ADDR : slv16 := slv(to_unsigned(16#0050#,16));
INDEX : natural := 0);
port (
CLK : in slbit; -- clock
RESET : in slbit; -- reset
RB_MREQ : in rb_mreq_type; -- rbus: request
RB_SRES : out rb_sres_type; -- rbus: response
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - data path
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
HBPT : out slbit -- hw break flag
);
end component;
 
-- ----- move later to pdp11_conf --------------------------------------------
 
constant conf_vect_pirq : integer := 8#240#;
/trunk/rtl/w11a/pdp11_sys70.vhd
1,4 → 1,4
-- $Id: pdp11_sys70.vhd 712 2015-11-01 22:53:45Z mueller $
-- $Id: pdp11_sys70.vhd 677 2015-05-09 21:52:32Z mueller $
--
-- Copyright 2015- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
21,8 → 21,6
-- w11a/pdp11_mem70
-- ibus/ibd_ibmon
-- ibus/ib_sres_or_3
-- w11a/pdp11_dmscnt
-- rbus/rb_sres_or_4
-- w11a/pdp11_tmu_sb [sim only]
--
-- Test bench: tb/tb_pdp11_core (implicit)
31,10 → 29,6
--
-- Revision History:
-- Date Rev Version Comment
-- 2015-11-01 712 1.1.4 use sbcntl_sbf_tmu
-- 2015-07-19 702 1.1.3 use DM_STAT_SE
-- 2015-07-04 697 1.1.2 change DM_STAT_SY setup; add dmcmon, dmhbpt;
-- 2015-06-26 695 1.1.1 add pdp11_dmscnt support
-- 2015-05-09 677 1.1 start/stop/suspend overhaul; reset overhaul
-- 2015-05-01 672 1.0 Initial version (extracted from sys_w11a_*)
------------------------------------------------------------------------------
83,10 → 77,7
 
architecture syn of pdp11_sys70 is
signal RB_SRES_CORE : rb_sres_type := rb_sres_init;
signal RB_SRES_DMSCNT : rb_sres_type := rb_sres_init;
signal RB_SRES_DMHBPT : rb_sres_type := rb_sres_init;
signal RB_SRES_DMCMON : rb_sres_type := rb_sres_init;
signal RB_SRES_CPU : rb_sres_type := rb_sres_init;
 
signal CP_CNTL : cp_cntl_type := cp_cntl_init;
signal CP_ADDR : cp_addr_type := cp_addr_init;
106,9 → 97,6
signal CACHE_FMISS : slbit := '0';
signal CACHE_CHIT : slbit := '0';
 
signal HBPT : slbit := '0';
 
signal DM_STAT_SE : dm_stat_se_type := dm_stat_se_init;
signal DM_STAT_DP_L : dm_stat_dp_type := dm_stat_dp_init;
signal DM_STAT_VM : dm_stat_vm_type := dm_stat_vm_init;
signal DM_STAT_CO : dm_stat_co_type := dm_stat_co_init;
132,7 → 120,7
CLK => CLK,
RESET => RESET,
RB_MREQ => RB_MREQ,
RB_SRES => RB_SRES_CORE,
RB_SRES => RB_SRES_CPU,
RB_STAT => RB_STAT,
RB_LAM => RB_LAM_CPU,
GRESET => GRESET_L,
155,7 → 143,8
ESUSP_O => open,
ESUSP_I => '0',
ITIMER => ITIMER,
HBPT => HBPT,
EBREAK => '0',
DBREAK => '0',
EI_PRI => EI_PRI,
EI_VECT => EI_VECT,
EI_ACKM => EI_ACKM,
165,7 → 154,6
BRESET => BRESET_L,
IB_MREQ_M => IB_MREQ_M,
IB_SRES_M => IB_SRES_M,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_DP => DM_STAT_DP_L,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO
226,67 → 214,7
IB_SRES_OR => IB_SRES_M
);
 
DMSCNT : if sys_conf_dmscnt generate
begin
I0: pdp11_dmscnt
generic map (
RB_ADDR => slv(to_unsigned(16#0040#,16)))
port map (
CLK => CLK,
RESET => RESET,
RB_MREQ => RB_MREQ,
RB_SRES => RB_SRES_DMSCNT,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_DP => DM_STAT_DP_L,
DM_STAT_CO => DM_STAT_CO
);
end generate DMSCNT;
 
DMCMON : if sys_conf_dmcmon_awidth > 0 generate
begin
I0: pdp11_dmcmon
generic map (
RB_ADDR => slv(to_unsigned(16#0048#,16)))
port map (
CLK => CLK,
RESET => RESET,
RB_MREQ => RB_MREQ,
RB_SRES => RB_SRES_DMCMON,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_DP => DM_STAT_DP_L,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO
);
end generate DMCMON;
 
DMHBPT : if sys_conf_dmhbpt_nunit > 0 generate
begin
I0: pdp11_dmhbpt
generic map (
RB_ADDR => slv(to_unsigned(16#0050#,16)),
NUNIT => sys_conf_dmhbpt_nunit)
port map (
CLK => CLK,
RESET => RESET,
RB_MREQ => RB_MREQ,
RB_SRES => RB_SRES_DMHBPT,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_DP => DM_STAT_DP_L,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO,
HBPT => HBPT
);
end generate DMHBPT;
 
RB_SRES_OR : rb_sres_or_4
port map (
RB_SRES_1 => RB_SRES_CORE,
RB_SRES_2 => RB_SRES_DMSCNT,
RB_SRES_3 => RB_SRES_DMHBPT,
RB_SRES_4 => RB_SRES_DMCMON,
RB_SRES_OR => RB_SRES
);
 
RB_SRES <= RB_SRES_CPU; -- currently single rbus device
IB_MREQ <= IB_MREQ_M; -- setup output signals
GRESET <= GRESET_L;
CRESET <= CRESET_L;
294,13 → 222,14
CP_STAT <= CP_STAT_L;
DM_STAT_DP <= DM_STAT_DP_L;
-- synthesis translate_off
DM_STAT_SY.emmreq <= EM_MREQ;
DM_STAT_SY.emsres <= EM_SRES;
DM_STAT_SY.chit <= CACHE_CHIT;
 
-- synthesis translate_off
TMU : pdp11_tmu_sb
generic map (
ENAPIN => sbcntl_sbf_tmu)
ENAPIN => 13)
port map (
CLK => CLK,
DM_STAT_DP => DM_STAT_DP_L,
/trunk/doc/w11a_tb_guide.txt
1,4 → 1,4
# $Id: w11a_tb_guide.txt 722 2015-12-30 19:45:46Z mueller $
# $Id: w11a_tb_guide.txt 688 2015-06-05 13:15:10Z mueller $
 
Note: Only ISE based test benches are currently documented !
The Vivado test environemnt is still in it's infancy !
260,12 → 260,11
cd $RETROBASE/rtl/sys_gen/w11a/nexys2/tb
tbrun_tbwrri --lsuf tbench_dsim --pack rw11 --cuff tb_w11a_n2 \
"rw11::setup_cpu" "rw11::tbench @cpu_all.dat"
-> 3204500.0 ns 160214: DONE
-> real 0m44.753s user 0m45.361s sys 0m0.616s
-> 2847860.0 ns 142382: DONE
-> real 0m33.013s user 0m31.870s sys 0m0.569s
 
tbrun_tbwrri --lsuf tbench_dsim --pack rw11 --cuff tb_w11a_n2 \
"rw11::setup_cpu" "rw11::tbench @dev_all.dat"
-> 1369960.0 ns 68487: DONE
-> real 0m21.399s user 0m21.480s sys 0m0.254s
-> 1058440.0 ns 52911: DONE
-> real 0m15.249s user 0m15.195s sys 0m0.236s
 
 
/trunk/doc/README.txt
1,4 → 1,4
$Id: README.txt 722 2015-12-30 19:45:46Z mueller $
$Id: README.txt 693 2015-06-21 14:02:46Z mueller $
 
Release notes for w11a
 
22,144 → 22,579
 
2. Change Log ----------------------------------------------------------------
 
- trunk (2015-12-30: svn rev 34(oc) 722(wfjm); untagged w11a_V0.71) +++++++++
- w11a_V0.60 -> w11a_V0.70 cummulative summary of key changes
- Bugfix for DIV instruction (in w11a_V0.61, see ECO-026-div.txt)
- revised rbus protocol V4 (in w11a_V0.62, see README_Rlink_V4.txt)
- add basic Vivado support (in w11a_V0.64)
- add Nexys4 and Basys3 port of w11a (in w11a_V0.64)
- add RH70+RP/RM disk support (in w11a_V0.65)
- add TM11/TY10 tape support (in w11a_V0.66)
- reference system now ISE 14.7, Vivado 2014.4; Ubuntu 14.04 64 bit, ghdl 0.31
 
- trunk (2015-06-21: svn rev 33(oc) 693(wfjm); tagged w11a_V0.70) +++++++++++
- Preface
- the w11a so far lacked any 'hardware debugger' support, which made the
debugging of CPU core issues a bit tedious. This release added a first
implementation of CPU debugger and monitoring features
- dmhbpt: hardware break point unit. Allows to set multiple break points
on instruction fetches (thus code break points) and on data
reads/writes (thus data access break points). The number of
breakpoints is configurable between 0 and 4, in current
designs 2 are available
- dmcmon: CPU state monitor. A buffer of configurable size which holds
a wide range of information on execution of the most recent
instructions. Tracing can be a instruction as well as on
micro cycle level.
- dmscnt: micro state counter. A counter array which allows to monitor
in which micro state the CPU time is spend, separated for
kernel and supervisor/user mode.
These three units together with the already existing ibus monitor allow
a very detailed and specific monitoring and debugging of the CPU.
- resolved known issue V0.66-2: operation with multiple RP or RM disks
under 211bsd works now. Issue was caused by a faulty error check.
- resolved bug tracker issue 2015-06-06: the tm11 offline function works
now as expected. Issue was caused by de-referencing a null pointer.
- resolved bug tracker request 2015-06-05: the values returned as drive
serial number were interpreted by 211bsd standalone code as a signature
of SI drives, which made disk partitioning a bit cumbersome. Changed the
scheme used to generate drive serial numbers such that they never match
these 3rd party drive characteristics. The 211bsd installation on a
RM05 is documented with the 211bsd_tm oskit.
- the w11a designs grow larger, filling the FPGA's on Nexys2 and Nexys3
to ~50% (n2) or 67% (n3). To reach timing closure without fine tuning
constraints the cpu clock had to be reduced to
sys_w11a_n2 now 52 MHz (was 54 MHz)
sys_w11a_n3 now 64 MHz (was 68 MHz)
 
The w11a CPU core is not functionally modified in this release, the only
exception is the suspend logic needed to implement hardware break points.
Both the hardware break point and the instruction level tracing in dmcmon
require a clean definition of instruction boundaries, which the current
w11a core does not provide in some cases. This leads to imprecise
breakpoints (CPU executes one additional instruction) and incomplete
dmcmon traces (at instruction level when exceptions are taken).
The w11a core will be modified in the next release to handle the above
mentioned conditions properly. The dmhbpt and dmcmon will be fully
documented when the w11a core changes are done, they work as expected
under all conditions, and the full back end integration is completed.
- w11a has now a complete set of mass storage peripherals. This is a good
reason of a major release, thus go for version V0.70.
 
- bottom line is that this release has little added value for normal w11
usage. It is technically necessary to separate the addition of all
the debug units and modification of the CPU core into two releases.
- there are many known issues, and in many cases only core functionality
used by operating systems has been implemented. The missing parts will
be implemented in the upcoming releases towards V0.80, also much more
intensive testing, especially with maindecs (aka xxdp) will be done.
 
- Summary
- new reference system
- switched to Vivado 2015.4 (from 2014.4)
Note: 2015.4 has WebPACK support for Logic Analyser and HLS. Both are
not used so far, but the logic analyser may come in handy soon.
- switched to tcl8.6 (from tcl8.5)
Note: tcl8.6 is default tcl in Ubuntu 2014.04LTS, but up to now the
tclshcpp helper was linked against tcl8.5. So far no tcl8.6
langauge features are used, but may be in future.
- rhrp and tm11 bug fixes
- no major functionality added
 
- New features
 
- Changes
- renames
- tools/oskit/211bsd_tm/211bsd_tm_boot.* -> 211bsd_tm_rp06_boot.*
- functional changes
- rtl/ibus/ibdr_rhrp - modify sn register to avoid 211bsd issues
- tools/bin/create_disk - support RM80 disks
- tools/tcl/rutil/util.tcl - add dohook
- tools/oskit/*/*_boot.tcl - add preinithook and preboothook
 
- Bug fixes
- rtl/ibus/ibdr_rhrp - set er1.rmr only when unit busy
- set cs2.pge only when controller busy
- tools/src/librw11
- Rw11CntlTM11 - fix crash when offline function was executed
 
- Known issues
- all issues: see README_known_issues.txt
- resolved issues:
- V0.66-2: operation with multiple RP/RM drives works now under 211bsd
 
- trunk (2015-06-05: svn rev 31(oc) 687(wfjm); untagged w11a_V0.66) +++++++++
- Preface
- Since the previous release a full set of small, medium and large sized
disks (RK,RL,RP/RM) is available, covering all use cases. Still missing
was a tape system, which allows to install systems from distribution tapes
but is also very handy for data exchange. This release adds a TM11/TU10
tape controller emulation. This is much simpler to implement than a
massbus based TU16 or TU78 controller. Because storage is emulated there
is neither a speed nor a capacity advantage of 1600 or 6250 bpi drives,
so for all practical purposes the simple 800 bpi TU10 drive emulation is
fully adequate.
The TM11/TU10 was tested under 211bsd with creating a tape distribution
kit and building a RP06 based system from such a tape. A 211bsd_tm
oskit is provided with a recipe to restore a RP06 from tape.
 
- bug fixes
- the ti_rri event loop aborted under heavy load with three devices, seen
when RP disk, TM tape and DL11 run simultaneously. Was caused by a race
condition in attention handling and dispatching.
- the boot command failed when cpu was running and the unit not decoded
properly, so boots from units other then 0 failed.
 
- Summary
- added TM11/TU10 tape support
 
- New features
- new modules
- rtl/w11a
- pdp11_dmcmon - pdp11: debug&moni: cpu monitor
- pdp11_dmhbpt - pdp11: debug&moni: hardware breakpoint
- pdp11_dmhbpt_unit - pdp11: dmhbpt - individual unit
- pdp11_dmscnt - pdp11: debug&moni: state counter
- new files
- rtl/ibus/ibdr_rm11 - ibus controller for RM11
- tools/bin
- dmscntanal - analyze dmscnt data
- dmscntconv - convert dmscnt data
- tools/asm-11/lib
- defs_mmu.mac - definitions for mmu registers
- defs_nzvc.mac - definitions for condition code combos
- defs_reg70.mac - definitions for 11/70 CPU registers
- tcode_std_base.mac - Default tcode base code for simple tests
- tcode_std_start.mac - Default tcode startup code
- vec_devcatch.mac - vector catcher for device interrupts
- vec_devcatch_reset.mac - re-write vector catcher
- tools/tbench
- w11a_cmon - directory with dmcmon tests
- w11a_hbpt - directory with dmhbpt tests
- tools/tcl
- ibd_(dl|lp|pc|rk|rl)11 - directory with register regdsc's
- tools/tcl/rutil
- fileio.tcl - new tofile and fromfile procs
- file2tap - create a tap container from disk files
- tap2file - split a tap container into disk files
- tools/src/librw11
- Rw11(Cntl|Unit)TM11 - Controller/Unit for TM11
- Rw11UnitTape(|Base) - support for tape units
- Rw11VirtTape(|Tap) - virtual tapes (generic and tap containers)
- tools/tcl/rw11
- dmcmon.tcl - support code for dmcmon
- dmhbpt.tcl - support code for dmhbpt
- dmscnt.tcl - support code for dmscnt
- shell.tcl - new w11a tcl shell
- shell_egd.tcl - code for e,g,d commands
- tools/tcl/rw11util
- regmap.tcl - support for 'map of regdsc' definitions
- tbench.tcl - support sub directories and return in tests
- new oskits
- tools/oskit/211bsd_tm - 2.11BSD tape distribution kit (for RP06)
 
- Changes
- renames
- tools/tbench - the text benches were re-organized and
grouped now in sub directories:
cp for w11a control port
w11a for w11a CPU tests
rhrp for RHRP device tests
tm11 for TM11 device tests
- functional changes
- tools/bin/create_disk - add RM80 support
 
- Bug fixes
- tools/src/librlink
- RlinkServer - fix race condition in attention handling
- tools/src/librw11
- Rw11Cpu - stop cpu before load, proper unit handling
 
- Known issues
- all issues: see README_known_issues.txt
- resolved issues: -- none --
- new issues:
- V0.66-1: the TM11 controller transfers data byte wise (all disk do it
16bit word wise) and allows for odd byte length transfers. Odd length
transfers are currently not supported and rejected as invalid command.
Odd byte length records aren't used by OS, if at all, so in practice
this limitation isn't relevant.
- V0.66-2: using two RP06 drives in parallel under 211bsd leads to a
hangup of the system after a short time. Currently only operation
of a single drive works reliably.
 
- trunk (2015-05-14: svn rev 30(oc) 681(wfjm); untagged w11a_V0.65) +++++++++
- Preface
 
- With small RK05 or RL02 sized disks only quite reduced OS setups could
be booted, full featured systems were beyond reach. Now finally large
disks are available, with a RH70 + RP/RM disk controller emulation. It
supports up to four disks and allows now to run full featured 211bsd
or rsx-11mplus systems.
 
- to track down issues with ibus devices a 'ibus monitor' was added, it can
record in the default setup up to 511 ibus transactions. An address filter
allows to select accesses of one device. The ibd_ibmon tcl package
contains the appropriate support scripts.
 
- several cleanups
- factor out common blocks on sys_w11a_* systems: the core+rbus+cache
logic of single cpu systems now contained in pdp11_sys70, and the
human I/O for digilent boards now in pdp11_hio70.
- cpu start/stop logic cleanup: new command set with simple commands.
Add also a new suspend/resume mechanism, which allows to hold the cpu
without leaving the 'run state'. While suspended all timers are frozen.
Very helpful when debugging, will be the basis for a hardware break
point logic in a later release.
- xon/xoff consolidation: escaping now done in cdata2byte/byte2cdata in
FPGA and in RlinkPacketBufSnd/RlinkPacketBufRcv in backend. The extra
escaping level in serport_xonrx/serport_xontx isn't used anymore, the
special code in RlinkPortTerm has been removed. This allows to use
xon/xoff flow control also in simulation links via RlinkPortFifo.
- status check cleanup: it is very helpful to have a default status check
and an easy way to modify it cases where some error flags are expected
(e.g. on device polls). In the old logic status and data checks were
done via RlinkCommandExpect. The new logic reflects that status checks
are the normal case, and store the status check pattern in RlinkCommand.
The meaning of expect masks for status and data is inverted, now a '1'
means that the bit is checked (before it meant the bit is ignored).
The default status check pattern is still in RlinkContext, but will be
copied to RlinkCommand when the list is processed. RlinkCommandExpect
handles now only data checks.
 
- and bug fixes
- rk11 cleanup: since the first days 211bsd autoconfig printed
rk ? csr 177400 vector 220 didn't interrupt
for boots from a RK11 it didn't have consequences, but when booted from
a RL,RP, or RM disk this prevents that the RK11 disks are configured.
Was caused by a missing interrupt after device reset. Now fixed.
 
- Summary
- added RH70/RP/RM big disk support
- many cleanups
 
- New features
- new directory trees for
- tools/asm-11/lib - definitions and macros for asm-11
- new modules
- rtl/vlib/serport
- serport_master - serial port module, master side
- rtl/ibus/ibd_ibmon - ibus monitor
- rtl/ibus/ibdr_rhrp - ibus controller for RH70 plus RP/RM drives
- rtl/w11a/pdp11_sys70 - 11/70 system - single core +rbus,debug,cache
- rtl/w11a/pdp11_hio70 - hio led and dsp for sys70
- tools/src/librw11
- Rw11(Cntl|Unit)RHRP - Controller/Unit for RHRP
- tools/tbench
- test_rhrp_* - test tbench for RHRP
- new oskits
- tools/oskit/211bsd_rp - new oskit for 2.11BSD on RP06
- tools/oskit/rsx11mp-30_rp - new oskit for RSX-11Mplus V3.0 on RP06
 
- Changes
- renames
- rtl/w11a/pdp11_sys70 -> pdp11_reg70 (_sys70 now different function)
- functional changes
- rtl/bplib/*/tb/tb_* - use serport_master instead of
serport_uart_rxtx, allow xon/xoff
- rtl/bplib/fx2rlink
- rlink_sp1c_fx2 - add rbd_rbmon (optional via generics)
- rtl/vlib/rlink/rlink_sp1c - add rbd_rbmon (optional via generics)
- rtl/ibus/ibd_kw11l - freeze timer when cpu suspended
- tools/bin/tbrun_tbwrri - add --fusp,--xon
- tools/bin/ti_w11 - rename -fu->-fc, add -f2,-fx; setup defaults
- tools/bin/librlink
- RlinkCommandList - add SetLastExpect() methods
- RlinkPort - add XonEnable()
- RlinkPortCuff - add noinit attribute
- RlinkPort(Fifo|Term) - add xon,noinit attributes
- tools/src/librw11
- Rw11Cpu - add AddRbibr(), AddWbibr(), RAddrMap()
- tools/bin/librlinktpp
- RtclRlinkConnect - errcnt: add -increment
log: add -bare,-info..
wtlam: allow tout=0 for attn cleanup
init: new command
exec: drop -estatdef
- RtclRlinkServer - get/set interface added
- tools/src/librwxxtpp
- RtclRw11Cntl - start: new command
- RtclRw11Cpu - cp: add -rbibr, wbibr, -rreg,...,-init
- cp: add -estat(err|nak|tout), drop estatdef
- rename amap->imap; add rmap
 
- Bug fixes
- rtl/ibus
- ibdr_rk11 - interrupt after dreset and seek command start
- tools/src/librlink
- RlinkConnect - WaitAttn(): return 0. (not -1.) if poll
- RlinkServer - Stop(): fix race in (could hang)
 
- Known issues
- all issues: see README_known_issues.txt
- resolved issues: -- none --
- new issues:
- V0.65-1: ti_rri sometimes crashes in normal rundown (exit or ^D) when
a cuff: type rlink is active. One gets
terminate called after throwing an instance of 'Retro::Rexception'
what(): RlinkPortCuff::Cleanup(): driver thread failed to stop
doesn't affect normal operation, will be fixed in upcoming release.
- V0.65-2: some exotic RH70/RP/RM features and conditions not implemented
- last block transfered flag (in DS)
- CS2.BAI currently ignored and not handled
- read or write 'with header' gives currently ILF
All this isn't used by any OS, so in practice not relevant.
 
- trunk (2015-03-01: svn rev 29(oc) 655(wfjm); untagged w11a_V0.64) +++++++++
 
- Preface
- The w11 project started on a Spartan-3 based Digilent S3board, and soon
moved on to a Nexys2 with much better connectivity. Next step was the
Spartan-6 based Nexys3. Now is time to continue with 7-Series FPGAs.
- When Vivado started in 2013 it was immediately clear that the architecture
is far superior to ISE. But tests with the first versions were sobering,
the w11a design either didn't compile at all, or produced faulty synthesis
results. In 2014 Vivado matured, and the current version 2014.4 works
fine with the w11a code base.
- The original Nexys4 board allowed to quickly port Nexys3 version because
both have the same memory chip. The newer Nexys4 DDR will be addressed
later.
- The BRAM capacity of FPGAs increased significantly over time. The low
cost Basys3 board with the second smallest Artix-7 (XC7A35T) has 200 KB
BRAM. That allows to implement a purely BRAM based w11a system with
176 kB memory. Not enough for 2.11BSD, but for many other less demanding
OS available for a PDP11.
- The Nexyx4 and Basys3 have 16 LEDs. Not quite the 'blinking lights'
console of the classic 11/45 and 11/70, but enough to display the
well known OS typical light patterns the veterans remember so well.
- With a new design tool, a new FPGA generation, two new boards, and a
new interface for the rlink connection that some of the code and tools
base had to be re-organized.
- Last but not least: finally access to a bit bigger disks: RL11 support
- Many changes, some known issues, some rough edges may still lurke around
 
- Summary
- added support for Vivado
- added support for Nexys4 and Basys3 boards
- added RL11 disk support
- lots of documentation updated
 
- New features
- new directory trees for
- rtl/bplib/basys3 - support for Digilent Basys3 board
- rtl/bplib/nexys4 - support for Digilent Nexys4 board
- rtl/make_viv - make includes for Vivado
- new files
- tools/bin/xviv_ghdl_unisim - ghdl compile Vivado UNISIM & UNIMACRO libs
- new modules
- rtl/ibus/ibdr_rl11 - ibus controller for RL11
- rtl/vlib/rlink/ioleds_sp1c - io activity leds for rlink+serport_1clk
- rtl/vlib/xlib
- s7_cmt_sfs_gsim - Series-7 CMT: simple vhdl model
- s7_cmt_sfs_unisim - Series-7 CMT: wrapper for UNISIM
- rtl/w11a
- pdp11_bram_memctl - simple BRAM based memctl
- pdp11_dspmux - mux for hio display
- pdp11_ledmux - mux for hio leds
- pdp11_statleds - status led generator
- tools/src/librw11/
- Rw11*RL11 - classes for RL11 disk handling
- tools/src/librwxxtpp
- RtclRw11*RL11 - tcl iface for RL11 disk handling
- new systems
- rtl/sys_gen/tst_rlink - rlink tester
- basys3/sys_tst_rlink_b3 - for Basys3
- nexys4/sys_tst_rlink_n4 - for Nexys4
- rtl/sys_gen/tst_serloop - serport loop tester
- nexys4/sys_tst_serloop_n4 - for Nexys4
- rtl/sys_gen/tst_snhumanio - human I/O tester
- basys3/sys_tst_snhumanio_b3 - for Basys3
- nexys4/sys_tst_snhumanio_n4 - for Nexys4
- rtl/sys_gen/w11a - w11a
- basys3/sys_w11a_b3 - small BRAM only (176 kB memory)
- nexys4/sys_w11a_n4 - with full 4 MB memory using cram
- new oskits
- tools/oskit/211bsd_rl - new oskit for 2.11BSD on RL02
- tools/oskit/rt11-53_rl - new oskit for RT11 V5.3 on RL02
- tools/oskit/xxdp_rl - new oskit for XXDP 22 and 25 on RL02
- Changes
- renames
- ensure that old ISE and new Vivado co-exists, ensure telling names
- rtl/make -> make_ise
- rtl/bplib/bpgen/sn_4x7segctl -> sn_7segctl
- tools/bin/isemsg_filter -> xise_msg_filter
- tools/bin/xilinx_ghdl_unisim -> xise_ghdl_unisim
- tools/bin/xilinx_ghdl_simprim -> xise_ghdl_simprim
 
- retired files
- rtl/bplib/fx2lib
- fx2_2fifoctl_as - obsolete, wasn't actively used since long
- tools/bin
- set_ftdi_lat - obsolete, since kernel 2.6.32 the default is 1 ms
- xilinx_vhdl_chop - obsolete, since ISE 11 sources come chopped
 
- functional changes
- $RETROBASE/Makefile - re-structured, many new targets
- rtl/bplib/bpgen
- sn_7segctl - handle also 8 digit displays
- sn_humanio - configurable SWI and DSP width
- sn_humanio_rbus - configurable SWI and DSP width
- rtl/vlib/serport
- serport_1clock - export fractional part of divider
- rtl/ibus
- ibdr_maxisys - add RL11 (ibdr_rl11)
- rtl/sys_gen/w11a/*
- sys_w11a_* - use new led and dsp control modules
- tools/src/librlink
- RlinkConnect - drop LogOpts, indivitual getter/setter
- RlinkPortTerm - support custom baud rates (5M,6M,10M,12M)
- tools/src/librtcltools
- RtclGetList - add '?' (key list) and '*' (kv list)
- RtclSetList - add '?' (key list)
- RlogFile - Open(): now with cout/cerr support
- tools/src/librlinktpp
- RtclRlinkConnect - drop config cmd, use get/set cmd
- RtclRlinkPort - drop config cmd, use get/set cmd
- tools/src/librw11
- Rw11Rdma - PreExecCB() with nwdone and nwnext
- Rw11UnitDisk - add Nwrd2Nblk()
- tools/src/librwxxtpp
- RtclRw11CntlFactory - add RL11 support
- tools/bin
- xise_ghdl_unisim - handle also UNIMACRO lib
- vbomconv - handle Vivado flows too
 
- Bug fixes
- tools/src/librw11
- Rw11CntlRK11 - revise RdmaPostExecCB() logic
 
- Known issues
- V0.64-7: ghdl simulated OS boots via ti_w11 (-n4 ect options) fail due to
a flow control issue (likely since V0.63).
- V0.64-6: IO delays still unconstraint in vivado. All critical IOs use
explicitly IOB flops, thus timing well defined.
- V0.64-5: w11a_tb_guide.txt covers only ISE based tests (see also V0.64-4).
- V0.64-4: No support for the Vivado simulator (xsim) yet. With ghdl only
functional simulations, post synthesis (_ssim) fails to compile.
- V0.64-3: Highest baud rate with basys3 and nexys4 is 10 MBaud. 10 MBaud
is not supported according to FTDI, but works. 12 MBaud in next release.
- V0.64-2: rlink throughput on basys3/nexys4 limited by serial port stack
round trip times. Will be overcome by libusb based custom driver.
- V0.64-1: The large default transfer size for disk accesses leads to bad
throughput in the DL11 emulation for low speed links, like the
460kBaud the S3board is limited too. Will be overcome by a DL11
controller with more buffering.
- V0.62-2: rlink v4 error recovery not yet implemented, will crash on error
- V0.62-1: Command lists aren't split to fit in retransmit buffer size
{last two issues not relevant for w11 backend over USB usage because
the backend produces proper command lists and the USB channel is
usually error free}
 
- trunk (2015-01-04: svn rev 28(oc) 629(wfjm); untagged w11a_V0.63) +++++++++
 
- Summary
- the w11a rbus interface used so far a narrow dynamically adjusted
rbus->ibus window. Replaces with a 4k word window for whole IO page.
- utilize rlink protocol version 4 features in w11a backend
- use attn notifies to dispatch attn handlers
- use larger blocks (7*512 rather 1*512 bytes) for rdma transfers
- use labo and merge csr updates with last block transfer
- this combined reduces the number of round trips by a factor 2 to 3,
and in some cases the throughput accordingly.
 
- Remarks on reference system
- still using tcl 8.5 (even though 8.6 is now default in Ub 14.04)
- don't use doxygen 1.8.8 and 1.8.9, it fails to generate vhdl docs
 
- New features
- new modules
- tools/bin
- ghdl_assert_filter - filter to suppress startup warnings
- tbrun_tbw - wrapper for tbw based test benches
- tbrun_tbwrri - wrapper for ti_rri + tbw based test benches
- tools/src/librw11
- Rw11Rdma - Rdma engine base class
- Rw11RdmaDisk - Rdma engine for disk emulation
 
- Changes
- rtl/vlib/rlink
- rlink_core.vhd - add proc_sres: strip 'x' from RB_SRES.dout
- rtl/vlib/rlink/tb
- tbcore_rlink - drive SB_CNTL from start to avoid 'U'
- rlink_core - use 4th stat bit to signal rbus timeout
- rtl/vlib/rbus
- rbd_rbmon - reorganized, supports now 16 bit addresses
- rtl/w11a
- pdp11 - add defs for pdp11_dm(scnt|hbpt|cmon)
- pdp11_* - add support for pdp11_dm(scnt|hbpt|cmon)
- rtl/sys_gen/w11a/*
- sys_conf - add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
- rtl/sys_gen/w11a/*/tb
- sys_conf_sim - add sys_conf_(dmscnt|dmhbpt*|dmcmon*)
- pdp11_core_rbus - use full size 4k word ibus window
- tools/bin/tbw - add -fifo and -verbose options
- tools/src/librtools
- Rexception - add ctor from RerrMsg
- tools/src/librlink
- RlinkCommandExpect - rblk/wblk done counts now expectable
- RlinkConnect - cleanups and minor enhancements
- RlinkServer - use attn notifies to dispatch handlers
- tools/src/librw11
- Rw11CntlRK11 - re-organize, use now Rw11RdmaDisk
- Rw11Cpu - add ibus address map
- tools/src/librwxxtpp
- RtclRw11CntlRK11 - add get/set for ChunkSize
- RtclRw11Cpu - add amap sub-command for ibus map access
 
- Resolved known issues from V0.62
- the rbus monitor (rbd_rbmon) has been updated to handle 16 bit addresses
 
- Known issues
- (V0.62): rlink v4 error recovery not yet implemented, will crash on error
- (V0.62): command lists aren't split to fit in retransmit buffer size
{both issues not relevant for w11 backend over USB usage because the
backend produces proper command lists and the USB channel is error free}
 
- trunk (2014-12-20: svn rev 27(oc) 614(wfjm); untagged w11a_V0.62) +++++++++
 
- Summary
- migrate to rlink protocol version 4
- Goals for rlink v4
- 16 bit addresses (instead of 8 bit)
- more robust encoding, support for error recovery at transport level
- add features to reduce round trips
- improved attention handling
- new 'list abort' command
- For further details see README_Rlink_V4.txt
- use own C++ based tcl shell tclshcpp instead of tclsh
 
Notes:
1. rlink protocol, core, and backend are updated in this release
2. error recovery in backend not yet implemented
3. the designs using rlink are still essentially unchanged
4. the new rlink v4 features will be exploited in upcoming releases
 
- New reference system
The development and test system was upgraded from Kubuntu 12.04 to 14.04.
The version of several key tools and libraries changed:
linux kernel 3.13.0 (was 3.2.0)
gcc/g++ 4.8.2 (was 4.6.3)
boost 1.54 (was 1.46.1)
libusb 1.0.17 (was 1.0.9)
perl 5.18.2 (was 5.14.2)
tcl 8.5.15 (was 8.5.11)
sdcc 3.3.0 (was 2.9.0)
doxygen 1.8.7 {installed from sources; Ub 14.04 has 1.8.6}
 
Notes:
1. still using tcl 8.5 (even though 8.6 is now default in Ub 14.04)
2. sdcc 3.x is not source compatible with sdcc 2.9. The Makefile
allows to use both, see tools/fx2/src/README.txt .
3. don't use doxygen 1.8.8, it fails to generate vhdl docs
 
- New features
- new environment variables TCLLIB and TCLLIBNAME. TCLLIBNAME must be
defined, and hold the library name matching the Tcl version already
specified with TCLINC.
- new modules
- rtl/vlib/comlib/crc16 - 16 bit crc generator (replaces crc8)
- tools/src/tclshcpp/* - new tclshcpp shell
 
- Changes
- rtl/vlib/comlib
- byte2cdata,cdata2byte - re-write, commas now 2 byte sequences
- rtl/vlib/rlink
- rlink_core - re-write for rlink v4
- rtl/*/* - use new rlink v4 iface and 4 bit STAT
- rtl/vlib/rbus/rbd* - new addresses in 16 bit rlink space
- rtl/vlib/simlib/simlib - add simfifo_*, wait_*, writetrace
- tools/bin/
- ti_w11 - add -ghw option
- tmuconv - fix '.' handling for br/sob instructions
correct xor (now r,dst, and not src,r)
- tools/tcl/rutil
- regdsc.tcl - add regbldkv,reggetkv
- util.tcl - rename optlist2arr->args2opts, new logic
- tools/tcl/rw11
- asm.tcl - new arg list format in asm(run|treg|tmem)
- dasm.tcl - add dasm_inst2txt
- tools/tcl/ibd_ibmon
- util.tcl - add symbolic register dump
- fx2load_wrapper - use _ic instead of _as as default firmware
- ti_rri - use tclshcpp (C++ based) rather tclsh
- tools/fx2/bin/*.ihx - recompiled with sdcc 3.3.0 + bugfixes
- tools/fx2/src/Makefile - support sdcc 3.3.0
- tools/src/
- */*.cpp - adopt for rlink v4; use nullptr
- librlink/RlinkCrc16 - 16 crc, replaces RlinkCrc8
- librlink/RlinkConnect - many changes for rlink v4
- librlink/RlinkPacketBuf* - re-write for for rlink v4
- tools/tcl/*/*.tcl - adopt for rlink v4
- renames:
- tools/bin/telnet_starter -> tools/bin/console_starter
 
- Bug fixes
- rtl/bplib/micron
- mt45w8mw16b - fix issue when 1st access is to addr 0
- rtl/bplib/nxcramlib
- nx_cram_memctl_as - always define imem_oe in do_dispatch()
- rtl/ibus
- ibdr_tm11 - add missing BESET to sensitivity list
- rtl/w11a
- pdp11_sequencer - proper trap_mmu and trap_ysv handling
- tools/bin
- asm-11 - fix '.' handling in instructions
- tools/fx2/src
- dscr_gen.A51 - correct string 0 descriptor
- lib/syncdelay.h - handle triple nop now properly
 
- Known issues
- all issues: see README_known_issues.txt
- rlink v4 error recovery not yet implemented, will crash on error
- command lists aren't split to fit in retransmit buffer size
{both issues not relevant for w11 backend over USB usage because the
backend produces proper command lists and the USB channel is error free}
- the rbus monitor (rbd_rbmon) not yet handling 16 bit addresses and
therefore of limited use
 
- w11a_V0.7 (2015-06-21) +++++++++++++++++++++++++++++++++++++++++++++++++++++
cummulative summary of key changes from w11a_V0.6 to w11a_V0.7
- Bugfix for DIV instruction (in w11a_V0.61, see ECO-026-div.txt)
- revised rbus protocol V4 (in w11a_V0.62, see README_Rlink_V4.txt)
- add basic Vivado support (in w11a_V0.64)
- add Nexys4 and Basys3 port of w11a (in w11a_V0.64)
- add RL11/RL02 disk support (in w11a_V0.64)
- add RH70+RP/RM disk support (in w11a_V0.65)
- add TM11/TY10 tape support (in w11a_V0.66)
- reference system now ISE 14.7, Vivado 2014.4; Ubuntu 14.04 64 bit, ghdl 0.31
- trunk (2014-08-08: svn rev 25(oc) 579(wfjm); tagged w11a_V0.61) +++++++++++
 
for details see README-w11a_V.60-w11a_V0.70.txt
- Summary
- The div instruction gave wrong results in some corner cases when either
divisor or quotient were the largest negative integer (100000 or -32768).
This is corrected now, for details see ECO-026-div.txt
- some minor updates and fixes to support scripts
- xtwi usage and XTWI_PATH setup explained in INSTALL.txt
 
- New features
- the Makefile's for in all rtl building block directories allow now to
configure the target board for a test synthesis via the XTW_BOARD
environment variable or XTW_BOARD=<board name> make option.
 
- Changes
- tools/bin/asm-11 - add call and return opcodes
- tools/bin/create_disk - add RM02,RM05,RP04,RP07 support
- tools/bin/tbw - use xtwi to start ISim models
- tools/bin/ticonv_pdpcp - add --tout and --cmax; support .sdef
- tools/dox/*.Doxyfile - use now doxygen 1.8.7
- tools/src/librw11
- Rw11CntlRK11 - add statistics
 
- Bug fixes
- rtl/w11a - div bug ECO-026
- pdp11_munit - port changes; fix divide logic
- pdp11_sequencer - s_opg_div_sr: check for late div_quit
- pdp11_dpath - port changes for pdp11_munit
- tools/bin/create_disk - repair --boot option (was inaccessible)
- tools/bin/ti_w11 - split args now into ti_w11 opts and cmds
- tools/src/librwxxtpp
- RtclRw11Cpu - redo estatdef logic; avoid LastExpect()
- tools/dox/make_doxy - create directories, fix 'to view use' text
 
- w11a_V0.6 (2014-06-06) +++++++++++++++++++++++++++++++++++++++++++++++++++++
 
cummulative summary of key changes from w11a_V0.5 to w11a_V0.6
cummulative summary of key changes from w11a_V0.5 to w11a_V0.60
- revised ibus protocol V2 (in w11a_V0.51)
- revised rbus protocol V3 (in w11a_V0.52)
- backend server rewritten in C++ and Tcl (in w11a_V0.53 and w11a_V0.562)
/trunk/doc/man/man1/ti_w11.1
1,11 → 1,11
.\" -*- nroff -*-
.\" $Id: ti_w11.1 712 2015-11-01 22:53:45Z mueller $
.\" $Id: ti_w11.1 680 2015-05-14 13:29:46Z mueller $
.\"
.\" Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
.\"
.\" ------------------------------------------------------------------
.
.TH TI_W11 1 2015-11-01 "Retro Project" "Retro Project Manual"
.TH TI_W11 1 2015-04-12 "Retro Project" "Retro Project Manual"
.\" ------------------------------------------------------------------
.SH NAME
ti_w11 \- Quick starter for \fBti_rri\fP with \fBw11\fP CPU designs
81,10 → 81,6
.RE
.IP \fB-tmu\fP
activate trace and monitoring unit
.PD 0
.IP \fB-ghw\fP
activate ghw wave file writing
.PD
.
.SS "common options"
.IP \fB-e "\fR=\fIfile"\fR
/trunk/doc/INSTALL.txt
1,4 → 1,4
# $Id: INSTALL.txt 722 2015-12-30 19:45:46Z mueller $
# $Id: INSTALL.txt 654 2015-03-01 18:45:38Z mueller $
 
Guide to install and build w11a systems, test benches and support software
 
65,7 → 65,7
- libusb 1.0 (>= 1.0.6)
-> package: libusb-1.0-0-dev
- Perl (>= 5.10) (usually included in base installations)
- Tcl (>= 8.6), with tclreadline support
- Tcl (>= 8.5), with tclreadline support
-> package: tcl tcl-dev tcllib tclreadline
 
- for VHDL simulations one needs
114,8 → 114,8
In most cases the boost library version coming with the distribution will
work, similar for Tcl, in those cases simply use
 
export TCLINC=/usr/include/tcl8.6
export TCLLIBNAME=tcl8.6
export TCLINC=/usr/include/tcl8.5
export TCLLIBNAME=tcl8.5
 
and don't setup BOOSTINC and BOOSTLIB.
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.