diff --git a/doc/README.txt b/doc/README.txt index 696437c1..ed67a155 100644 --- a/doc/README.txt +++ b/doc/README.txt @@ -1,4 +1,4 @@ -$Id: README.txt 687 2015-06-05 09:03:34Z mueller $ +$Id: README.txt 693 2015-06-21 14:02:46Z mueller $ Release notes for w11a @@ -22,6 +22,67 @@ Release notes for w11a 2. Change Log ---------------------------------------------------------------- +- 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 + - 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) + + - 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. + + - 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 + - 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 diff --git a/doc/README_known_issues.txt b/doc/README_known_issues.txt index 3ede5d62..c66f4345 100644 --- a/doc/README_known_issues.txt +++ b/doc/README_known_issues.txt @@ -1,4 +1,4 @@ -$Id: README_known_issues.txt 687 2015-06-05 09:03:34Z mueller $ +$Id: README_known_issues.txt 693 2015-06-21 14:02:46Z mueller $ Known issues for this release. The case id indicates the release when the issue was first recognized. @@ -8,9 +8,6 @@ The case id indicates the release when the issue was first recognized. 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. - V0.65-1: ti_rri sometimes crashes in normal rundown (exit or ^D) when a cuff: type rlink is active. One gets diff --git a/doc/w11a_tb_guide.txt b/doc/w11a_tb_guide.txt index 415f3212..976a9a0b 100644 --- a/doc/w11a_tb_guide.txt +++ b/doc/w11a_tb_guide.txt @@ -1,4 +1,4 @@ -# $Id: w11a_tb_guide.txt 687 2015-06-05 09:03:34Z 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 ! diff --git a/rtl/ibus/ibdr_rhrp.vhd b/rtl/ibus/ibdr_rhrp.vhd index 9bacff94..ceacf642 100644 --- a/rtl/ibus/ibdr_rhrp.vhd +++ b/rtl/ibus/ibdr_rhrp.vhd @@ -1,4 +1,4 @@ --- $Id: ibdr_rhrp.vhd 682 2015-05-15 18:35:29Z mueller $ +-- $Id: ibdr_rhrp.vhd 692 2015-06-21 11:53:24Z mueller $ -- -- Copyright 2015- by Walter F.J. Mueller -- @@ -22,11 +22,15 @@ -- -- Synthesized (xst): -- Date Rev ise Target flop lutl lutm slic t peri +-- 2015-06-20 692 14.7 131013 xc6slx16-2 212 406 8 142 s 8.7 -- 2015-05-14 680 14.7 131013 xc6slx16-2 211 408 8 131 s 8.8 -- 2015-04-06 664 14.7 131013 xc6slx16-2 177 331 8 112 s 8.7 -- -- Revision History: -- Date Rev Version Comment +-- 2015-06-20 692 1.0.3 BUGFIX: fix func-go when drive/init busy checks +-- 2015-06-05 690 1.0.2 use 'not unit' for lsb of rpsn to avoid SI detect +-- BUGFIX: set rmr only for write to busy unit -- 2015-05-15 682 1.0.1 correct ibsel range select logic -- 2015-05-14 680 1.0 Initial version -- 2015-03-15 658 0.1 First draft @@ -147,6 +151,7 @@ architecture syn of ibdr_rhrp is constant func_pres : slv5 := "01000"; -- func: readin preset constant func_pack : slv5 := "01001"; -- func: pack acknowledge constant func_sear : slv5 := "01100"; -- func: search + constant func_xfer : slv5 := "10100"; -- used to check for xfer type funcs constant func_wcd : slv5 := "10100"; -- func: write check data constant func_wchd : slv5 := "10101"; -- func: write check header&data constant func_write : slv5 := "11000"; -- func: write @@ -169,8 +174,8 @@ architecture syn of ibdr_rhrp is constant cs2_ibf_rwco : integer := 15; -- rem: write check odd word constant cs2_ibf_wce : integer := 14; -- write check error - constant cs2_ibf_ned : integer := 12; -- non-existant drive - constant cs2_ibf_nem : integer := 11; -- non-existant memory + constant cs2_ibf_ned : integer := 12; -- non-existent drive + constant cs2_ibf_nem : integer := 11; -- non-existent memory constant cs2_ibf_pge : integer := 10; -- programming error constant cs2_ibf_mxf : integer := 9; -- missed transfer constant cs2_ibf_or : integer := 7; -- output ready @@ -269,6 +274,7 @@ architecture syn of ibdr_rhrp is s_wmem, -- wmem: write mem (DA,MR1,OF,DC,MR2) s_wmembe, -- wmem: write mem with be (WC,BA,DB) s_whr, -- whr: write hr (holding reg only) + s_funcchk, -- funcchk: check function go s_funcgo, -- funcgo: handle function go s_chkdc, -- chkdc: handle dc check s_chkda, -- chksa: handle da check @@ -297,8 +303,8 @@ architecture syn of ibdr_rhrp is ffunc : slv5; -- func code (frozen on ext func go) fxfer : slbit; -- func is xfer cs2wce : slbit; -- cs2: write check error - cs2ned : slbit; -- cs2: non-existant drive - cs2nem : slbit; -- cs2: non-existant memory + cs2ned : slbit; -- cs2: non-existent drive + cs2nem : slbit; -- cs2: non-existent memory cs2pge : slbit; -- cs2: programming error cs2mxf : slbit; -- cs2: missed transfer cs2pat : slbit; -- cs2: parity test @@ -330,7 +336,7 @@ architecture syn of ibdr_rhrp is poredone: slbit; -- cs3 rem: port rel done packdone: slbit; -- cs3 rem: pack ack done seardone: slbit; -- cs3 rem: search done - ned : slbit; -- current drive non-existant + ned : slbit; -- current drive non-existent cerm : slbit; -- current eff. drive rm controller dtyp : slv6; -- current drive type (5:0) camax : slv10; -- current max cylinder address @@ -473,7 +479,7 @@ begin variable itamax : slv5 := (others=>'0'); -- max track address variable isamax : slv6 := (others=>'0'); -- max sector address - variable ined : slbit := '0'; -- non-existanrt drive + variable ined : slbit := '0'; -- non-existent drive variable icerm : slbit := '0'; -- effectiv drive is rm variable iclrreg : slbit := '0'; -- clr enable @@ -590,7 +596,7 @@ begin n.tamax := itamax; n.samax := isamax; - -- consider drive non-existant if not 'DPR' or unit>=4 selected + -- consider drive non-existent if not 'DPR' or unit>=4 selected if r.dsdpr(to_integer(unsigned(r.cs2unit))) = '0' or r.cs2unit2 = '1' then ined := '1'; @@ -759,9 +765,14 @@ begin -- some general error catchers if ibrem = '0' and imbreg='1' then -- local massbus write -- for cs1: imbreg=0 !! + -- write to non-existent drives if ined = '1' then n.cs2ned := '1'; - elsif inormr='0' and r.cs1rdy='0' then -- rmr prot reg and RDY=0 + -- write to a busy unit, can be a search/seek or a transfer + elsif inormr='0' and -- rmr protected reg + (r.dspip(to_integer(unsigned(r.cs2unit)))='1' or -- busy pip + (r.cs1rdy='0' and (r.funit = r.cs2unit)) -- busy xfer + ) then n.state := s_setrmr; end if; end if; @@ -826,17 +837,16 @@ begin n.ireq := '1'; -- issue software interrupt end if; - if r.cs1rdy = '1' then -- controller ready - if r.ned = '0' and -- drive on - IB_MREQ.din(cs1_ibf_go) = '1' then -- GO bit set - ibhold := '1'; - n.state := s_funcgo; - end if; - else -- cntl not rdy - n.cs2pge := '1'; -- issue program error - end if; + if r.ned = '0' and -- drive on + IB_MREQ.din(cs1_ibf_go) = '1' then -- GO bit set + ibhold := '1'; + n.state := s_funcchk; + end if; + -- FIXME_code: that's likely not fully correct, cs1 func bits are + -- stored before all error checks are done... imem_we0 := IB_MREQ.be0; -- remember func field per unit + if r.ned = '1' then -- loc access and drive off n.cs2ned := '1'; -- signal error end if; @@ -1008,6 +1018,22 @@ begin imem_we1 := '1'; end if; + when s_funcchk => -- funcchk: check function go -------- + n.state := s_idle; -- in general return to s_idle + if r.cs1rdy = '0' and + unsigned(IB_MREQ.din(cs1_ibf_func)) >= unsigned(func_xfer) then + n.cs2pge := '1'; -- issue program error + elsif IB_MREQ.din(cs1_ibf_func) = func_dclr then + n.eunit := r.cs2unit; -- for follow-up states + n.clrmode := clrmode_fdclr; + n.state := s_oot_clr0; -- OOT state, no hold! + elsif r.dserp(to_integer(unsigned(r.cs2unit))) = '1' then + n.er1ilf(to_integer(unsigned(r.cs2unit))) := '1'; + else + ibhold := '1'; + n.state := s_funcgo; + end if; + when s_funcgo => -- funcgo: handle function go -------- n.state := s_idle; -- in general return to s_idle n.dsata(to_integer(unsigned(r.cs2unit))) := '0'; @@ -1031,10 +1057,7 @@ begin end if; n.dsata(to_integer(unsigned(r.cs2unit))) := '1'; - when func_dclr => -- func: drive clear ------- - n.eunit := r.cs2unit; -- for follow-up states - n.clrmode := clrmode_fdclr; - n.state := s_oot_clr0; -- OOT state, no hold! + -- when func_dclr => now handled in funcchk !! when func_offs | -- func: offset ------------ func_retc => -- func: return to center -- @@ -1236,13 +1259,20 @@ begin -- digit 3: always 1 -- digit 2: 1 if RM type; 0 if RP type -- digit 1: 0-3 based on encoded drive type - -- digit 0: 0-3 taken from unit + -- digit 0: 0-3 taken as complement of unit + -- Note: the 3lsb are the *complement* of the unit number because + -- 211bsd driver code contains a hack to detect SI and CDC + -- drives. For those drives the drive type is encode in the + -- sn register, and one convention is that the 3 lsb of sn + -- equal the unit numnber. To prevent that the SI/CDC hacks + -- are actived the 3lsb are set as complement of the unit ! idout(12) := '1'; idout(8) := r.dtrm(to_integer(unsigned(r.eunit))); idout(5) := r.dte1(to_integer(unsigned(r.eunit))); idout(4) := r.dte0(to_integer(unsigned(r.eunit))); - idout(1) := r.eunit(1); - idout(0) := r.eunit(0); + idout(2) := '1'; + idout(1) := not r.eunit(1); + idout(0) := not r.eunit(0); when omux_bae => -- omux: bae reg --------------- idout(bae_ibf_bae) := r.bae; diff --git a/rtl/ibus/ibdr_tm11.vhd b/rtl/ibus/ibdr_tm11.vhd index c771576f..fffc7620 100644 --- a/rtl/ibus/ibdr_tm11.vhd +++ b/rtl/ibus/ibdr_tm11.vhd @@ -1,4 +1,4 @@ --- $Id: ibdr_tm11.vhd 686 2015-06-04 21:08:08Z mueller $ +-- $Id: ibdr_tm11.vhd 690 2015-06-07 18:23:51Z mueller $ -- -- Copyright 2015- by Walter F.J. Mueller -- @@ -127,7 +127,7 @@ architecture syn of ibdr_tm11 is srpae: slbit; -- sr: parity error srrle: slbit; -- sr: record length error srbte: slbit; -- sr: bad tape error - srnxm: slbit; -- sr: non-existant memory + srnxm: slbit; -- sr: non-existent memory sreof: slv4; -- sr: eof-of-file sreot: slv4; -- sr: eof-of-tape sronl: slv4; -- sr: online diff --git a/rtl/sys_gen/w11a/nexys2/sys_conf.vhd b/rtl/sys_gen/w11a/nexys2/sys_conf.vhd index a47744c5..62d2b7dc 100644 --- a/rtl/sys_gen/w11a/nexys2/sys_conf.vhd +++ b/rtl/sys_gen/w11a/nexys2/sys_conf.vhd @@ -1,4 +1,4 @@ --- $Id: sys_conf.vhd 683 2015-05-17 21:54:35Z mueller $ +-- $Id: sys_conf.vhd 692 2015-06-21 11:53:24Z mueller $ -- -- Copyright 2010-2015 by Walter F.J. Mueller -- @@ -19,6 +19,7 @@ -- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31 -- Revision History: -- Date Rev Version Comment +-- 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 -- 2015-01-04 630 1.2.2 use clksys=54 (no closure after rlink r4 + RL11) @@ -44,7 +45,7 @@ package sys_conf is -- configure clocks -------------------------------------------------------- constant sys_conf_clkfx_divide : positive := 25; - constant sys_conf_clkfx_multiply : positive := 27; -- ==> 54 MHz + constant sys_conf_clkfx_multiply : positive := 26; -- ==> 52 MHz -- configure rlink and hio interfaces -------------------------------------- constant sys_conf_ser2rri_defbaud : integer := 115200; -- default 115k baud diff --git a/rtl/sys_gen/w11a/nexys2/sys_w11a_n2.vhd b/rtl/sys_gen/w11a/nexys2/sys_w11a_n2.vhd index 4e5d5562..8b8a60c8 100644 --- a/rtl/sys_gen/w11a/nexys2/sys_w11a_n2.vhd +++ b/rtl/sys_gen/w11a/nexys2/sys_w11a_n2.vhd @@ -1,4 +1,4 @@ --- $Id: sys_w11a_n2.vhd 686 2015-06-04 21:08:08Z mueller $ +-- $Id: sys_w11a_n2.vhd 692 2015-06-21 11:53:24Z mueller $ -- -- Copyright 2010-2015 by Walter F.J. Mueller -- @@ -34,6 +34,7 @@ -- -- Synthesized (xst): -- Date Rev ise Target flop lutl lutm slic t peri +-- 2015-06-21 692 14.7 131013 xc3s1200e-4 2312 6716 414 4192 ok: rhrp fixes -- 2015-06-04 686 14.7 131013 xc3s1200e-4 2311 6725 414 4198 ok: +TM11 -- 2015-05-14 680 14.7 131013 xc3s1200e-4 2232 6547 414 4083 ok: +RHRP -- 2015-02-21 649 14.7 131013 xc3s1200e-4 1903 5512 382 3483 ok: +RL11 diff --git a/rtl/sys_gen/w11a/nexys3/sys_conf.vhd b/rtl/sys_gen/w11a/nexys3/sys_conf.vhd index eadd776c..62430b68 100644 --- a/rtl/sys_gen/w11a/nexys3/sys_conf.vhd +++ b/rtl/sys_gen/w11a/nexys3/sys_conf.vhd @@ -1,4 +1,4 @@ --- $Id: sys_conf.vhd 683 2015-05-17 21:54:35Z mueller $ +-- $Id: sys_conf.vhd 692 2015-06-21 11:53:24Z mueller $ -- -- Copyright 2011-2015 by Walter F.J. Mueller -- @@ -19,6 +19,7 @@ -- Tool versions: xst 13.1-14.7; ghdl 0.29-0.31 -- Revision History: -- Date Rev Version Comment +-- 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 -- 2014-12-26 621 1.2.2 use 68 MHz, get occasional problems with 72 MHz @@ -48,8 +49,8 @@ package sys_conf is -- configure clocks -------------------------------------------------------- constant sys_conf_clksys_vcodivide : positive := 25; - constant sys_conf_clksys_vcomultiply : positive := 17; -- dcm 68 MHz - constant sys_conf_clksys_outdivide : positive := 1; -- sys 68 MHz + constant sys_conf_clksys_vcomultiply : positive := 16; -- dcm 64 MHz + constant sys_conf_clksys_outdivide : positive := 1; -- sys 64 MHz constant sys_conf_clksys_gentype : string := "DCM"; -- configure rlink and hio interfaces -------------------------------------- diff --git a/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vhd b/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vhd index 0ab86894..80de6df8 100644 --- a/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vhd +++ b/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vhd @@ -1,4 +1,4 @@ --- $Id: sys_w11a_n3.vhd 686 2015-06-04 21:08:08Z mueller $ +-- $Id: sys_w11a_n3.vhd 692 2015-06-21 11:53:24Z mueller $ -- -- Copyright 2011-2015 by Walter F.J. Mueller -- @@ -34,6 +34,7 @@ -- -- Synthesized (xst): -- Date Rev ise Target flop lutl lutm slic t peri +-- 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% diff --git a/tools/asm-11/lib/defs_rp.mac b/tools/asm-11/lib/defs_rp.mac index 760dcc6e..a15a6293 100644 --- a/tools/asm-11/lib/defs_rp.mac +++ b/tools/asm-11/lib/defs_rp.mac @@ -1,4 +1,4 @@ -; $Id: defs_rp.mac 667 2015-04-18 20:16:05Z mueller $ +; $Id: defs_rp.mac 691 2015-06-15 21:22:08Z mueller $ ; Copyright 2015- by Walter F.J. Mueller ; License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory ; @@ -40,7 +40,7 @@ rp.fcl=000010 ; drive clear rp.fse=000030 ; search rp.fwr=000060 ; write - rp.fwr=000070 ; read + rp.frd=000070 ; read rp.go =000001 ; ; symbol definitions for rp.ds diff --git a/tools/bin/create_disk b/tools/bin/create_disk index 22f72d94..1d3362f7 100755 --- a/tools/bin/create_disk +++ b/tools/bin/create_disk @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# $Id: create_disk 686 2015-06-04 21:08:08Z mueller $ +# $Id: create_disk 692 2015-06-21 11:53:24Z mueller $ # # Copyright 2013-2014 by Walter F.J. Mueller # @@ -14,7 +14,7 @@ # # Revision History: # Date Rev Version Comment -# 2015-06-04 686 1.1.2 use sysseek rather seek; add RM80 +# 2015-06-21 692 1.1.2 use sysseek rather seek; add RM80 # 2015-04-06 665 1.1.1 add alias RM03 (for RM02) and RP05 (for RP04) # 2014-06-14 562 1.1 BUGFIX: repair --boot; add RM02,RM05,RP04,RP07 # 2013-05-20 521 1.0 First draft @@ -43,10 +43,10 @@ my %disktype = ( RK05 => {cyl=> 203, hd=> 2, sec=> 12, bps=> 512, bad=>0}, RL01 => {cyl=> 256, hd=> 2, sec=> 40, bps=> 256, bad=>1}, RL02 => {cyl=> 512, hd=> 2, sec=> 40, bps=> 256, bad=>1}, - RM02 => {cyl=> 823, hd=> 5, sec=> 32, bps=> 512, bad=>1}, + RM03 => {cyl=> 823, hd=> 5, sec=> 32, bps=> 512, bad=>1}, RM05 => {cyl=> 823, hd=> 19, sec=> 32, bps=> 512, bad=>1}, RM80 => {cyl=> 559, hd=> 14, sec=> 31, bps=> 512, bad=>1}, - RP04 => {cyl=> 411, hd=> 19, sec=> 22, bps=> 512, bad=>1}, + RP05 => {cyl=> 411, hd=> 19, sec=> 22, bps=> 512, bad=>1}, RP06 => {cyl=> 815, hd=> 19, sec=> 22, bps=> 512, bad=>1}, RP07 => {cyl=> 630, hd=> 32, sec=> 50, bps=> 512, bad=>1} ); @@ -73,8 +73,8 @@ if (-e $fnam) { my $typ = uc($opts{typ}); -$typ = "RM02" if defined $typ && $typ eq "RM03"; # RM03 is equivalent to RM02 -$typ = "RP04" if defined $typ && $typ eq "RP05"; # RM05 is equivalent to RP04 +$typ = "RM03" if defined $typ && $typ eq "RM02"; # RM02 is equivalent to RM03 +$typ = "RP05" if defined $typ && $typ eq "RP04"; # RM04 is equivalent to RP05 unless (defined $typ && exists $disktype{$typ}) { print STDERR "create_disk-E: no or invalid --typ specification, use --help\n"; @@ -128,7 +128,7 @@ sub do_inipatt { push @dat, 0xdead,0xbeaf if $ini eq 'dead'; } my $buf = pack('v*',@dat); - my $rc = $fh->seek(0, SEEK_SET); + my $rc = sysseek($fh, 0, SEEK_SET); if (not $rc) {die "seek failed: $!";} for (my $i=0; $i<$nblk; $i++) { $rc = syswrite($fh, $buf, length($buf)); @@ -140,7 +140,7 @@ sub do_inipatt { my $cur_sec = 0; my $cur_trk = 0; my $cur_cyl = 0; - my $rc = $fh->seek(0, SEEK_SET); + my $rc = sysseek($fh, 0, SEEK_SET); if (not $rc) {die "seek failed: $!";} for (my $i=0; $i<$nblk; $i++) { my @dat; @@ -183,7 +183,7 @@ sub do_badtable { my $buf = pack('v*',@dat); my $pos = $cap - $sec*$bps; # position of last track - my $rc = $fh->seek($pos, SEEK_SET); + my $rc = sysseek($fh, $pos, SEEK_SET); if (not $rc) {die "seek failed: $!";} my $nsec = ($sec > 10) ? 10 : $sec; # write last track, at most 10 sec for (my $i=0; $i<$nsec; $i++) { @@ -208,7 +208,7 @@ sub do_boot { push @dat, 0000000; # 3$: halt my $buf = pack('v*',@dat); - my $rc = $fh->seek(0, SEEK_SET); + my $rc = sysseek($fh, 0, SEEK_SET); if (not $rc) {die "seek failed: $!";} $rc = syswrite($fh, $buf, length($buf)); if ($rc<=0) {die "write failed: $!";} @@ -233,7 +233,7 @@ sub do_boot { # NOTE: the text above almost fills the first 512 bytes !! # don't add more text, all has been said anyway !! - $rc = $fh->seek(0100, SEEK_SET); + $rc = sysseek($fh ,0100, SEEK_SET); if (not $rc) {die "seek failed: $!";} $rc = syswrite($fh, $buf, length($buf)); if ($rc<=0) {die "write failed: $!";} @@ -268,8 +268,8 @@ sub print_help { } print "\n"; - print " RM03 is accepted as an alias for RM02 (same capacity)\n"; - print " RP05 is accepted as an alias for RP04 (same capacity)\n"; + print " RM02 is accepted as an alias for RM03 (same capacity)\n"; + print " RP04 is accepted as an alias for RP05 (same capacity)\n"; print "\n"; print "currently supported initialization patterns:\n"; diff --git a/tools/dox/w11_cpp.Doxyfile b/tools/dox/w11_cpp.Doxyfile index e0dc7277..18c2abcb 100644 --- a/tools/dox/w11_cpp.Doxyfile +++ b/tools/dox/w11_cpp.Doxyfile @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "w11 - cpp" -PROJECT_NUMBER = 0.66 +PROJECT_NUMBER = 0.70 PROJECT_BRIEF = "Backend server for Rlink and w11" PROJECT_LOGO = OUTPUT_DIRECTORY = $(RETRODOXY)/w11/cpp diff --git a/tools/dox/w11_tcl.Doxyfile b/tools/dox/w11_tcl.Doxyfile index 17167f9e..b2166188 100644 --- a/tools/dox/w11_tcl.Doxyfile +++ b/tools/dox/w11_tcl.Doxyfile @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "w11 - tcl" -PROJECT_NUMBER = 0.66 +PROJECT_NUMBER = 0.70 PROJECT_BRIEF = "Backend server for Rlink and w11" PROJECT_LOGO = OUTPUT_DIRECTORY = $(RETRODOXY)/w11/tcl diff --git a/tools/dox/w11_vhd_all.Doxyfile b/tools/dox/w11_vhd_all.Doxyfile index 3f753d55..f32dfe44 100644 --- a/tools/dox/w11_vhd_all.Doxyfile +++ b/tools/dox/w11_vhd_all.Doxyfile @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "w11 - vhd" -PROJECT_NUMBER = 0.66 +PROJECT_NUMBER = 0.70 PROJECT_BRIEF = "W11 CPU core and support modules" PROJECT_LOGO = OUTPUT_DIRECTORY = $(RETRODOXY)/w11/vhd diff --git a/tools/oskit/211bsd_rk/.cvsignore b/tools/oskit/211bsd_rk/.cvsignore index d9d13510..e60dfe3f 100644 --- a/tools/oskit/211bsd_rk/.cvsignore +++ b/tools/oskit/211bsd_rk/.cvsignore @@ -1,5 +1,6 @@ *.dat *.dsk *.log +*hook.tcl *license.txt *license.pdf diff --git a/tools/oskit/211bsd_rk/211bsd_rk_boot.tcl b/tools/oskit/211bsd_rk/211bsd_rk_boot.tcl index cdef7f24..9de6a507 100644 --- a/tools/oskit/211bsd_rk/211bsd_rk_boot.tcl +++ b/tools/oskit/211bsd_rk/211bsd_rk_boot.tcl @@ -1,4 +1,4 @@ -# $Id: 211bsd_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ +# $Id: 211bsd_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $ # # Setup file for 211bsd RK05 based system # @@ -10,6 +10,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp (211bsd uses parity -> use 7 bit mode) @@ -24,6 +25,7 @@ cpu0rka3 att 211bsd_rk_bin.dsk cpu0rka4 att 211bsd_rk_usr.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rka0 diff --git a/tools/oskit/211bsd_rk/README_211bsd_rkset.txt b/tools/oskit/211bsd_rk/README_211bsd_rkset.txt index 709dc0a7..94dcb460 100644 --- a/tools/oskit/211bsd_rk/README_211bsd_rkset.txt +++ b/tools/oskit/211bsd_rk/README_211bsd_rkset.txt @@ -1,4 +1,4 @@ -# $Id: README_211bsd_rkset.txt 680 2015-05-14 13:29:46Z mueller $ +# $Id: README_211bsd_rkset.txt 688 2015-06-05 13:15:10Z mueller $ Notes on oskit: 2.11BSD system on RK05 volumes diff --git a/tools/oskit/211bsd_rl/.cvsignore b/tools/oskit/211bsd_rl/.cvsignore index d9d13510..e60dfe3f 100644 --- a/tools/oskit/211bsd_rl/.cvsignore +++ b/tools/oskit/211bsd_rl/.cvsignore @@ -1,5 +1,6 @@ *.dat *.dsk *.log +*hook.tcl *license.txt *license.pdf diff --git a/tools/oskit/211bsd_rl/211bsd_rl_boot.tcl b/tools/oskit/211bsd_rl/211bsd_rl_boot.tcl index 54549c4a..a59b210a 100644 --- a/tools/oskit/211bsd_rl/211bsd_rl_boot.tcl +++ b/tools/oskit/211bsd_rl/211bsd_rl_boot.tcl @@ -1,4 +1,4 @@ -# $Id: 211bsd_rl_boot.tcl 633 2015-01-11 22:58:48Z mueller $ +# $Id: 211bsd_rl_boot.tcl 689 2015-06-05 14:33:18Z mueller $ # # Setup file for 211bsd RL02 based system # @@ -10,6 +10,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp (211bsd uses parity -> use 7 bit mode) @@ -21,6 +22,7 @@ cpu0rla0 att 211bsd_rl_root.dsk cpu0rla1 att 211bsd_rl_usr.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rla0 diff --git a/tools/oskit/211bsd_rl/README_211bsd_rlset.txt b/tools/oskit/211bsd_rl/README_211bsd_rlset.txt index 65f21f01..6fc87795 100644 --- a/tools/oskit/211bsd_rl/README_211bsd_rlset.txt +++ b/tools/oskit/211bsd_rl/README_211bsd_rlset.txt @@ -1,4 +1,4 @@ -# $Id: README_211bsd_rlset.txt 680 2015-05-14 13:29:46Z mueller $ +# $Id: README_211bsd_rlset.txt 688 2015-06-05 13:15:10Z mueller $ Notes on oskit: 2.11BSD system on RL02 volumes diff --git a/tools/oskit/211bsd_rp/.cvsignore b/tools/oskit/211bsd_rp/.cvsignore index b3264455..6c95b717 100644 --- a/tools/oskit/211bsd_rp/.cvsignore +++ b/tools/oskit/211bsd_rp/.cvsignore @@ -2,5 +2,6 @@ *.dsk *.log *.tgz +*hook.tcl *license.txt *license.pdf diff --git a/tools/oskit/211bsd_rp/211bsd_rp_boot.tcl b/tools/oskit/211bsd_rp/211bsd_rp_boot.tcl index 4566b825..b7b116f8 100644 --- a/tools/oskit/211bsd_rp/211bsd_rp_boot.tcl +++ b/tools/oskit/211bsd_rp/211bsd_rp_boot.tcl @@ -1,4 +1,4 @@ -# $Id: 211bsd_rp_boot.tcl 686 2015-06-04 21:08:08Z mueller $ +# $Id: 211bsd_rp_boot.tcl 689 2015-06-05 14:33:18Z mueller $ # # Setup file for 211bsd RP06 based system # @@ -10,6 +10,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp (211bsd uses parity -> use 7 bit mode) @@ -23,6 +24,7 @@ cpu0rpa1 set type rp06 cpu0rpa0 att 211bsd_rp.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rpa0 diff --git a/tools/oskit/211bsd_rp/README_211bsd_rpset.txt b/tools/oskit/211bsd_rp/README_211bsd_rpset.txt index cae4bc86..84cb2009 100644 --- a/tools/oskit/211bsd_rp/README_211bsd_rpset.txt +++ b/tools/oskit/211bsd_rp/README_211bsd_rpset.txt @@ -1,4 +1,4 @@ -# $Id: README_211bsd_rpset.txt 680 2015-05-14 13:29:46Z mueller $ +# $Id: README_211bsd_rpset.txt 688 2015-06-05 13:15:10Z mueller $ Notes on oskit: 2.11BSD system on a RP06 volume diff --git a/tools/oskit/211bsd_tm/.cvsignore b/tools/oskit/211bsd_tm/.cvsignore index 8397b0ca..809a0d32 100644 --- a/tools/oskit/211bsd_tm/.cvsignore +++ b/tools/oskit/211bsd_tm/.cvsignore @@ -3,5 +3,6 @@ *.log *.tap *.tgz +*hook.tcl *license.txt *license.pdf diff --git a/tools/oskit/211bsd_tm/211bsd_rm05_boot.tcl b/tools/oskit/211bsd_tm/211bsd_rm05_boot.tcl new file mode 100644 index 00000000..0c4a3546 --- /dev/null +++ b/tools/oskit/211bsd_tm/211bsd_rm05_boot.tcl @@ -0,0 +1,30 @@ +# $Id: 211bsd_rm05_boot.tcl 690 2015-06-07 18:23:51Z mueller $ +# +# Setup file for 211bsd RM05 based system +# +# Usage: +# +# console_starter -d DL0 & +# console_starter -d DL1 & +# ti_w11 -xxx @211bsd_rp_boot.tcl ( -xxx depends on sim or fpga connect) +# + +# setup w11 cpu +rutil::dohook "preinithook" +puts [rlw] + +# setup tt,lp (211bsd uses parity -> use 7 bit mode) +rw11::setup_tt "cpu0" {to7bit 1} +rw11::setup_lp + +# mount disks +cpu0rpa0 set type rm05 +cpu0rpa1 set type rm05 + +cpu0rpa0 att 211bsd_rm05.dsk + +# and boot +rutil::dohook "preboothook" +rw11::cpumon +rw11::cpucons +cpu0 boot rpa0 diff --git a/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.scmd b/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.scmd new file mode 100644 index 00000000..ee3b15d9 --- /dev/null +++ b/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.scmd @@ -0,0 +1,26 @@ +; $Id: 211bsd_tm_rm05_boot.scmd 690 2015-06-07 18:23:51Z mueller $ +; +; Setup file for creating a 211bsd RM05 system from a TM11 dist kit +; +; Usage: +; +; pdp11 211bsd_tm_boot.scmd +; +do ../../simh/setup_w11a_max.scmd +set tto 7b +set dlo0 7b +; +set rp0 rm05 +set rp1 rm05 +; +set rl0 rl02 +set rl1 rl02 +set rl2 rl02 +set rl3 rl02 +; +set tm0 locked +; +att rp0 211bsd_rm05.dsk +att tm0 211bsd_tm.tap +; +boo tm0 diff --git a/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.tcl b/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.tcl new file mode 100644 index 00000000..4023d7f0 --- /dev/null +++ b/tools/oskit/211bsd_tm/211bsd_tm_rm05_boot.tcl @@ -0,0 +1,34 @@ +# $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 +# +# Usage: +# +# console_starter -d DL0 & +# console_starter -d DL1 & +# create_disk --typ=rm05 --bad 211bsd_rm05.dsk +# ti_w11 -xxx @211bsd_tm_boot.tcl ( -xxx depends on sim or fpga connect) +# + +# setup w11 cpu +rutil::dohook "preinithook" +puts [rlw] + +# setup tt,lp (211bsd uses parity -> use 7 bit mode) +rw11::setup_tt "cpu0" {to7bit 1} +rw11::setup_lp + +# mount disks +cpu0rpa0 set type rm05 +cpu0rpa1 set type rm05 + +cpu0rpa0 att 211bsd_rm05.dsk + +# mount tapes +cpu0tma0 att 211bsd_tm.tap?wpro + +# and boot +rutil::dohook "preboothook" +rw11::cpumon +rw11::cpucons +cpu0 boot tma0 diff --git a/tools/oskit/211bsd_tm/211bsd_tm_boot.scmd b/tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.scmd similarity index 82% rename from tools/oskit/211bsd_tm/211bsd_tm_boot.scmd rename to tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.scmd index 94c7bfea..5c4800b9 100644 --- a/tools/oskit/211bsd_tm/211bsd_tm_boot.scmd +++ b/tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.scmd @@ -1,4 +1,4 @@ -; $Id: $ +; $Id: 211bsd_tm_rp06_boot.scmd 690 2015-06-07 18:23:51Z mueller $ ; ; Setup file for creating a 211bsd RP06 system from a TM11 dist kit ; diff --git a/tools/oskit/211bsd_tm/211bsd_tm_boot.tcl b/tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.tcl similarity index 82% rename from tools/oskit/211bsd_tm/211bsd_tm_boot.tcl rename to tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.tcl index e6b3235d..9e71d6d6 100644 --- a/tools/oskit/211bsd_tm/211bsd_tm_boot.tcl +++ b/tools/oskit/211bsd_tm/211bsd_tm_rp06_boot.tcl @@ -1,4 +1,4 @@ -# $Id: $ +# $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 # @@ -11,6 +11,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp (211bsd uses parity -> use 7 bit mode) @@ -27,6 +28,7 @@ cpu0rpa0 att 211bsd_rp06.dsk cpu0tma0 att 211bsd_tm.tap?wpro # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot tma0 diff --git a/tools/oskit/211bsd_tm/README_211bsd_tmset.txt b/tools/oskit/211bsd_tm/README_211bsd_tmset.txt index 853a6cc8..6e390d9d 100644 --- a/tools/oskit/211bsd_tm/README_211bsd_tmset.txt +++ b/tools/oskit/211bsd_tm/README_211bsd_tmset.txt @@ -8,6 +8,7 @@ Notes on oskit: 2.11BSD system on a TM11 tape distribution kit 2. Installation 3. Usage 4. Install 211bsd from tape on a RP06 disk + 5. Install 211bsd from tape on a RM05 disk 1. General remarks --------------------------------------------------- @@ -32,14 +33,21 @@ Notes on oskit: 2.11BSD system on a TM11 tape distribution kit 3. Usage ------------------------------------------------------------- - - This is a tape distribution kit and tailoed to be installed on RP06 disks. - So first step is to create a disk image which will hold the system + - This is a tape distribution kit and tailoed to be installed on massbus + disks of RP or RM type. The 211bsd system doesn't contain a ready to + used boot block for RP07 disks, while RM03 and RP05 disks are too small + for a full 211bsd system. Therefore RP06 and RM05 disks are the supported + disk types. + + So first step is to create a disk image, use one of create_disk --typ=rp06 --bad 211bsd_rp06.dsk + create_disk --typ=rm05 --bad 211bsd_rm05.dsk - Start backend server and boot system (see section 3 in w11a_os_guide.txt) - boot script: 211bsd_tm_boot.tcl - example: ti_w11 @211bsd_tm_boot.tcl + boot script: 211bsd_tm_rp06_boot.tcl or + 211bsd_tm_rm05_boot.tcl + example: ti_w11 @211bsd_tm_rp06_boot.tcl where is the proper option set for the board. - Hit in the xterm window to connnect to backend server. @@ -225,7 +233,7 @@ End of tape erase, kill ^U, intr ^C -!! make system bootable +!! make system bootable {!! different for RM05 !!} # dd if=/mdec/hpuboot of=/dev/rxp0a count=1 1+0 records in 1+0 records out @@ -272,3 +280,59 @@ on ti_w11 prompt : ## from now on like for README_211bsd_rpset.txt + +5. Install 211bsd from tape on a RM05 disk --------------------------- + + The procedure is very similar to an RP06 install, the only differences are + - disk partitioning (creating disklabel) + - setup of boot block + - initializing the 'c' file system + + In the following only these differences are briefly summarized: + + - use 211bsd_tm_rm05_boot.tcl (instead of 211bsd_tm_rp06_boot.tcl) + + - in disklabel use different sizes and offsets + + 'a' size [500384]: ## 34c + 'b' offset [0]: ## 34c + 'b' size [0]: ## 13c + 'c' offset [0]: ## 47c + 'c' size [0]: ## 775c + + - the final 'd' or display in disklabel show show + + type: SMD + disk: SMD + label: DEFAULT + flags: + bytes/sector: 512 + sectors/track: 32 + tracks/cylinder: 19 + sectors/cylinder: 608 + cylinders: 823 + rpm: 3600 + drivedata: 0 0 0 0 0 + + 3 partitions: + # size offset fstype [fsize bsize] + a: 20672 0 2.11BSD 1024 1024 # (Cyl. 0 - 33) + b: 7904 20672 swap # (Cyl. 34 - 46) + c: 471200 28576 2.11BSD 1024 1024 # (Cyl. 47 - 821) + + - after first boot write the correct boot block + + # dd if=/mdec/rm05uboot of=/dev/rxp0a count=1 + + Note: the boot code has the disk geometry hard coded, so using the right + one is essential. RP06 uses hpuboot, while RM05 uses rm05uboot !! + + - to create file system on partition c use + + # /sbin/mkfs -m 2 -n 304 -i 4096 -s 235600 /dev/rxp0c + + - the final system should give a 'df' output like + + Filesystem 1K-blocks Used Avail Capacity Mounted on + root 10173 4503 5670 44% / + /dev/xp0c 231917 87043 144874 38% /usr diff --git a/tools/oskit/hook_blkdev_trace.tcl b/tools/oskit/hook_blkdev_trace.tcl new file mode 100644 index 00000000..ce353a1f --- /dev/null +++ b/tools/oskit/hook_blkdev_trace.tcl @@ -0,0 +1,7 @@ +# $Id: hook_blkdev_trace.tcl 689 2015-06-05 14:33:18Z mueller $ +puts "hook: trace all block devices to rlc.log" +rlc set logfile rlc.log +cpu0rka set trace 2 +cpu0rla set trace 2 +cpu0rpa set trace 2 +cpu0tma set trace 2 diff --git a/tools/oskit/hook_ibmon_rka.tcl b/tools/oskit/hook_ibmon_rka.tcl new file mode 100644 index 00000000..e53e7857 --- /dev/null +++ b/tools/oskit/hook_ibmon_rka.tcl @@ -0,0 +1,8 @@ +# $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] +ibd_ibmon::start diff --git a/tools/oskit/hook_ibmon_rpa.tcl b/tools/oskit/hook_ibmon_rpa.tcl new file mode 100644 index 00000000..028b3cc8 --- /dev/null +++ b/tools/oskit/hook_ibmon_rpa.tcl @@ -0,0 +1,8 @@ +# $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] +ibd_ibmon::start diff --git a/tools/oskit/hook_ibmon_tma.tcl b/tools/oskit/hook_ibmon_tma.tcl new file mode 100644 index 00000000..0422a9de --- /dev/null +++ b/tools/oskit/hook_ibmon_tma.tcl @@ -0,0 +1,8 @@ +# $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] +ibd_ibmon::start diff --git a/tools/oskit/rsx11m-31_rk/.cvsignore b/tools/oskit/rsx11m-31_rk/.cvsignore index 19315df3..d1821140 100644 --- a/tools/oskit/rsx11m-31_rk/.cvsignore +++ b/tools/oskit/rsx11m-31_rk/.cvsignore @@ -1,4 +1,5 @@ *.dat *.dsk *.log +*hook.tcl *license.txt diff --git a/tools/oskit/rsx11m-31_rk/rsx11m-31_rk_boot.tcl b/tools/oskit/rsx11m-31_rk/rsx11m-31_rk_boot.tcl index 6ad5873e..dfeb3aee 100644 --- a/tools/oskit/rsx11m-31_rk/rsx11m-31_rk_boot.tcl +++ b/tools/oskit/rsx11m-31_rk/rsx11m-31_rk_boot.tcl @@ -1,4 +1,4 @@ -# $Id: rsx11m-31_rk_boot.tcl 622 2014-12-28 20:45:26Z 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 # @@ -10,6 +10,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp,pp (enable rx rate limiter on old DEC OS) @@ -23,6 +24,7 @@ cpu0rka1 att RSX11M_V3.1_SYSTEM1.dsk cpu0rka2 att RSX11M_USER.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rka0 diff --git a/tools/oskit/rsx11m-40_rk/.cvsignore b/tools/oskit/rsx11m-40_rk/.cvsignore index 19315df3..d1821140 100644 --- a/tools/oskit/rsx11m-40_rk/.cvsignore +++ b/tools/oskit/rsx11m-40_rk/.cvsignore @@ -1,4 +1,5 @@ *.dat *.dsk *.log +*hook.tcl *license.txt diff --git a/tools/oskit/rsx11m-40_rk/rsx11m-40_rk_boot.tcl b/tools/oskit/rsx11m-40_rk/rsx11m-40_rk_boot.tcl index 4a9f1571..2a0613a2 100644 --- a/tools/oskit/rsx11m-40_rk/rsx11m-40_rk_boot.tcl +++ b/tools/oskit/rsx11m-40_rk/rsx11m-40_rk_boot.tcl @@ -1,4 +1,4 @@ -# $Id: rsx11m-40_rk_boot.tcl 622 2014-12-28 20:45:26Z 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 # @@ -10,6 +10,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp,pp (enable rx rate limiter on old DEC OS) @@ -23,6 +24,7 @@ cpu0rka1 att RSX11M_V4.0_SYSTEM1.dsk cpu0rka2 att RSX11M_USER.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rka0 diff --git a/tools/oskit/rsx11mp-30_rp/.cvsignore b/tools/oskit/rsx11mp-30_rp/.cvsignore index d9d13510..e60dfe3f 100644 --- a/tools/oskit/rsx11mp-30_rp/.cvsignore +++ b/tools/oskit/rsx11mp-30_rp/.cvsignore @@ -1,5 +1,6 @@ *.dat *.dsk *.log +*hook.tcl *license.txt *license.pdf diff --git a/tools/oskit/rsx11mp-30_rp/rsx11mp-30_rp_boot.tcl b/tools/oskit/rsx11mp-30_rp/rsx11mp-30_rp_boot.tcl index 2f5c8892..b9d2b35c 100644 --- a/tools/oskit/rsx11mp-30_rp/rsx11mp-30_rp_boot.tcl +++ b/tools/oskit/rsx11mp-30_rp/rsx11mp-30_rp_boot.tcl @@ -1,4 +1,4 @@ -# $Id: rsx11mp-30_rp_boot.tcl 679 2015-05-13 17:38:46Z 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 # @@ -10,6 +10,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp (211bsd uses parity -> use 7 bit mode) @@ -23,6 +24,7 @@ cpu0rpa1 set type rp06 cpu0rpa0 att rsx11mp-30.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rpa0 diff --git a/tools/oskit/rt11-40_rk/.cvsignore b/tools/oskit/rt11-40_rk/.cvsignore index 19315df3..d1821140 100644 --- a/tools/oskit/rt11-40_rk/.cvsignore +++ b/tools/oskit/rt11-40_rk/.cvsignore @@ -1,4 +1,5 @@ *.dat *.dsk *.log +*hook.tcl *license.txt diff --git a/tools/oskit/rt11-40_rk/rt11-40_rk_boot.tcl b/tools/oskit/rt11-40_rk/rt11-40_rk_boot.tcl index 1c31d0bb..09dec545 100644 --- a/tools/oskit/rt11-40_rk/rt11-40_rk_boot.tcl +++ b/tools/oskit/rt11-40_rk/rt11-40_rk_boot.tcl @@ -1,4 +1,4 @@ -# $Id: rt11-40_rk_boot.tcl 622 2014-12-28 20:45:26Z 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 # @@ -9,6 +9,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS) @@ -20,6 +21,7 @@ rw11::setup_pp cpu0rka0 att rtv4_rk.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rka0 diff --git a/tools/oskit/rt11-53_rl/.cvsignore b/tools/oskit/rt11-53_rl/.cvsignore index 19315df3..d1821140 100644 --- a/tools/oskit/rt11-53_rl/.cvsignore +++ b/tools/oskit/rt11-53_rl/.cvsignore @@ -1,4 +1,5 @@ *.dat *.dsk *.log +*hook.tcl *license.txt diff --git a/tools/oskit/rt11-53_rl/rt11-53_rl_boot.tcl b/tools/oskit/rt11-53_rl/rt11-53_rl_boot.tcl index 51918e35..0177d255 100644 --- a/tools/oskit/rt11-53_rl/rt11-53_rl_boot.tcl +++ b/tools/oskit/rt11-53_rl/rt11-53_rl_boot.tcl @@ -9,6 +9,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS) @@ -20,6 +21,7 @@ rw11::setup_pp cpu0rla0 att RT11_V5.3_SYSTEM.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rla0 diff --git a/tools/oskit/unix-v5_rk/.cvsignore b/tools/oskit/unix-v5_rk/.cvsignore index d9d13510..e60dfe3f 100644 --- a/tools/oskit/unix-v5_rk/.cvsignore +++ b/tools/oskit/unix-v5_rk/.cvsignore @@ -1,5 +1,6 @@ *.dat *.dsk *.log +*hook.tcl *license.txt *license.pdf diff --git a/tools/oskit/unix-v5_rk/uv5_rk_boot.tcl b/tools/oskit/unix-v5_rk/uv5_rk_boot.tcl index dbc5ee35..b2ee1c93 100644 --- a/tools/oskit/unix-v5_rk/uv5_rk_boot.tcl +++ b/tools/oskit/unix-v5_rk/uv5_rk_boot.tcl @@ -1,4 +1,4 @@ -# $Id: uv5_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ +# $Id: uv5_rk_boot.tcl 689 2015-06-05 14:33:18Z mueller $ # # Setup file for Unix V5 RK05 based system # @@ -8,6 +8,7 @@ # ti_w11 -xxx @uv5_boot.tcl ( -xxx depends on sim or fpga connect) # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp (uses only 1 console; uses parity -> use 7 bit mode) @@ -18,6 +19,7 @@ rw11::setup_lp cpu0rka0 att unix_v5_rk.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rka0 diff --git a/tools/oskit/xxdp_rl/.cvsignore b/tools/oskit/xxdp_rl/.cvsignore index acaaccce..e4fdb970 100644 --- a/tools/oskit/xxdp_rl/.cvsignore +++ b/tools/oskit/xxdp_rl/.cvsignore @@ -2,3 +2,4 @@ *.dat *.dsk *.log +*hook.tcl diff --git a/tools/oskit/xxdp_rl/xxdp22_rl_boot.tcl b/tools/oskit/xxdp_rl/xxdp22_rl_boot.tcl index 4e1d3045..a4d2dacf 100644 --- a/tools/oskit/xxdp_rl/xxdp22_rl_boot.tcl +++ b/tools/oskit/xxdp_rl/xxdp22_rl_boot.tcl @@ -1,4 +1,4 @@ -# $Id: xxdp22_rl_boot.tcl 654 2015-03-01 18:45:38Z mueller $ +# $Id: xxdp22_rl_boot.tcl 689 2015-06-05 14:33:18Z mueller $ # # Setup file for XXDP V2.2 RL02 based system # @@ -9,6 +9,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS) @@ -20,6 +21,7 @@ rw11::setup_pp cpu0rla0 att xxdp22.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rla0 diff --git a/tools/oskit/xxdp_rl/xxdp25_rl_boot.tcl b/tools/oskit/xxdp_rl/xxdp25_rl_boot.tcl index 6fc58811..e4ef9262 100644 --- a/tools/oskit/xxdp_rl/xxdp25_rl_boot.tcl +++ b/tools/oskit/xxdp_rl/xxdp25_rl_boot.tcl @@ -1,4 +1,4 @@ -# $Id: xxdp25_rl_boot.tcl 654 2015-03-01 18:45:38Z mueller $ +# $Id: xxdp25_rl_boot.tcl 689 2015-06-05 14:33:18Z mueller $ # # Setup file for XXDP V2.5 RL02 based system # @@ -9,6 +9,7 @@ # # setup w11 cpu +rutil::dohook "preinithook" puts [rlw] # setup tt,lp,pp (single console; enable rx rate limiter on old DEC OS) @@ -20,6 +21,7 @@ rw11::setup_pp cpu0rla0 att xxdp25.dsk # and boot +rutil::dohook "preboothook" rw11::cpumon rw11::cpucons cpu0 boot rla0 diff --git a/tools/src/librw11/Rw11CntlTM11.cpp b/tools/src/librw11/Rw11CntlTM11.cpp index 5a8d04c0..2201d5dd 100644 --- a/tools/src/librw11/Rw11CntlTM11.cpp +++ b/tools/src/librw11/Rw11CntlTM11.cpp @@ -1,4 +1,4 @@ -// $Id: Rw11CntlTM11.cpp 686 2015-06-04 21:08:08Z mueller $ +// $Id: Rw11CntlTM11.cpp 690 2015-06-07 18:23:51Z mueller $ // // Copyright 2015- by Walter F.J. Mueller // Other credits: @@ -15,13 +15,14 @@ // // Revision History: // Date Rev Version Comment +// 2015-06-06 690 1.0.1 BUGFIX: AddFastExit() check for Virt() defined // 2015-06-04 686 1.0 Initial version // 2015-05-17 683 0.1 First draft // --------------------------------------------------------------------------- /*! \file - \version $Id: Rw11CntlTM11.cpp 686 2015-06-04 21:08:08Z mueller $ + \version $Id: Rw11CntlTM11.cpp 690 2015-06-07 18:23:51Z mueller $ \brief Implemenation of Rw11CntlTM11. */ @@ -239,20 +240,20 @@ bool Rw11CntlTM11::BootCode(size_t unit, std::vector& code, 0046524, // boot_start: "TM" 0012706, kBOOT_START, // mov #boot_start, sp 0012700, uint16_t(unit), // mov #unit_num, r0 - 0012701, 0172526, // mov #172526, r1 ; mtcma - 0005011, // clr (r1) - 0012741, 0177777, // mov #-1, -(r1) ; mtbrc + 0012701, 0172526, // mov #172526, r1 ; #tmba + 0005011, // clr (r1) ; tmba = 0 + 0012741, 0177777, // mov #-1, -(r1) ; tmbc = -1 0010002, // mov r0,r2 0000302, // swab r2 0062702, 0060011, // add #60011, r2 - 0010241, // mov r2, -(r1) ; space + go - 0105711, // tstb (r1) ; mtc + 0010241, // mov r2, -(r1) ; tmcr = space + go + 0105711, // tstb (r1) ; test tmcr.rdy 0100376, // bpl .-2 - 0010002, // mov r0,r2 + 0010002, // mov r0,r2 ; note: tmbc=0 now 0000302, // swab r2 - 0062702, 0060003, // add #60003, r2 - 0010211, // mov r2, (r1) ; read + go - 0105711, // tstb (r1) ; mtc + 0062702, 0060003, // add #60003, r2 ; note: tmbc still = 0! + 0010211, // mov r2, (r1) ; tmcr = read + go + 0105711, // tstb (r1) ; test tmcr.rdy 0100376, // bpl .-2 0005002, // clr r2 0005003, // clr r3 @@ -313,6 +314,9 @@ int Rw11CntlTM11::AttnHandler(RlinkServer::AttnArgs& args) uint32_t addr = uint32_t(ea)<<16 | uint32_t(tmba); + // Note: a zero tmbc translates into nbyt=64k ! + // correct behaviour, the boot loaded actually issues a read + // with tmbc=0 to read the boot block into memory !! uint32_t nbyt = (~uint32_t(tmbc)&0xffff) + 1; // transfer size in bytes //Rw11Cpu& cpu = Cpu(); @@ -503,11 +507,17 @@ void Rw11CntlTM11::AddFastExit(RlinkCommandList& clist, int opcode, size_t ndone Rw11Cpu& cpu = Cpu(); uint16_t tmcr = 0; - uint16_t tmds = kTMRL_M_ONL; - if (unit.Virt()->WProt()) tmds |= kTMRL_M_WRL; - if (unit.Virt()->Bot()) tmds |= kTMRL_M_BOT; - if (unit.Virt()->Eot()) tmds |= kTMRL_M_EOT; + uint16_t tmds = 0; + // AddFastExit() is also called after UNLOAD, which calls unit.Detach() + // So unlike in all other cases, Virt() may be 0, so check on this + if (unit.Virt()) { + tmds |= kTMRL_M_ONL; + if (unit.Virt()->WProt()) tmds |= kTMRL_M_WRL; + if (unit.Virt()->Bot()) tmds |= kTMRL_M_BOT; + if (unit.Virt()->Eot()) tmds |= kTMRL_M_EOT; + } + switch (opcode) { case Rw11VirtTape::kOpCodeOK: @@ -540,8 +550,9 @@ void Rw11CntlTM11::AddFastExit(RlinkCommandList& clist, int opcode, size_t ndone << (err ? " err " :" ok ") << " un=" << unum << " cr=" << RosPrintBvi(tmcr,8) - << " ds=" << RosPrintBvi(tmds,8) - << " bc=" << RosPrintBvi(tmbc,8); + << " " + << " bc=" << RosPrintBvi(tmbc,8) + << " ds=" << RosPrintBvi(tmds,8); } return; diff --git a/tools/src/librw11/Rw11CntlTM11.hpp b/tools/src/librw11/Rw11CntlTM11.hpp index cb491a08..7e7883a2 100644 --- a/tools/src/librw11/Rw11CntlTM11.hpp +++ b/tools/src/librw11/Rw11CntlTM11.hpp @@ -1,4 +1,4 @@ -// $Id: Rw11CntlTM11.hpp 686 2015-06-04 21:08:08Z mueller $ +// $Id: Rw11CntlTM11.hpp 690 2015-06-07 18:23:51Z mueller $ // // Copyright 2015- by Walter F.J. Mueller // @@ -20,7 +20,7 @@ /*! \file - \version $Id: Rw11CntlTM11.hpp 686 2015-06-04 21:08:08Z mueller $ + \version $Id: Rw11CntlTM11.hpp 690 2015-06-07 18:23:51Z mueller $ \brief Declaration of class Rw11CntlTM11. */ @@ -76,7 +76,7 @@ namespace Retro { static const uint16_t kTMSR_M_EOT = kWBit10; //!< EOT: end-of-tape seen static const uint16_t kTMSR_M_RLE = kWBit09; //!< RLE: record lgth error static const uint16_t kTMSR_M_BTE = kWBit08; //!< BTE: bad tape error - static const uint16_t kTMSR_M_NXM = kWBit07; //!< NXM: non-existant mem + static const uint16_t kTMSR_M_NXM = kWBit07; //!< NXM: non-existent mem static const uint16_t kTMSR_M_ONL = kWBit06; //!< ONL: online static const uint16_t kTMSR_M_BOT = kWBit05; //!< BOT: at begin-of-tape static const uint16_t kTMSR_M_WRL = kWBit02; //!< WRL: write locked diff --git a/tools/tbench/rhrp/rhrp_all.dat b/tools/tbench/rhrp/rhrp_all.dat index 52086e42..02421419 100644 --- a/tools/tbench/rhrp/rhrp_all.dat +++ b/tools/tbench/rhrp/rhrp_all.dat @@ -1,4 +1,4 @@ -# $Id: rhrp_all.dat 683 2015-05-17 21:54:35Z mueller $ +# $Id: rhrp_all.dat 692 2015-06-21 11:53:24Z mueller $ # ## steering file for all rhrp tests # @@ -6,3 +6,4 @@ test_rhrp_basics.tcl test_rhrp_regs.tcl test_rhrp_func_reg.tcl test_rhrp_int.tcl +test_rhrp_int2.tcl diff --git a/tools/tbench/rhrp/test_rhrp_func_reg.tcl b/tools/tbench/rhrp/test_rhrp_func_reg.tcl index ea728225..8f511675 100644 --- a/tools/tbench/rhrp/test_rhrp_func_reg.tcl +++ b/tools/tbench/rhrp/test_rhrp_func_reg.tcl @@ -1,10 +1,11 @@ -# $Id: test_rhrp_func_reg.tcl 683 2015-05-17 21:54:35Z 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 # # Revision History: # Date Rev Version Comment +# 2015-06-20 692 1.0.1 de-configure all drives at begin # 2015-03-29 660 1.0 Initial version # # Test functions - register level @@ -19,6 +20,16 @@ ibd_rhrp::setup rlc set statmask $rw11::STAT_DEFMASK rlc set statvalue 0 +# de-configure all drives (and clear errros and reset vv) +$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 1] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 2] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 3] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] + # configure drives $cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ -wibr rpa.ds [regbld ibd_rhrp::DS {dpr 1} mol] \ diff --git a/tools/tbench/rhrp/test_rhrp_int.tcl b/tools/tbench/rhrp/test_rhrp_int.tcl index c54db90e..c1429e4f 100644 --- a/tools/tbench/rhrp/test_rhrp_int.tcl +++ b/tools/tbench/rhrp/test_rhrp_int.tcl @@ -1,10 +1,11 @@ -# $Id: test_rhrp_int.tcl 683 2015-05-17 21:54:35Z mueller $ +# $Id: test_rhrp_int.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 # # Revision History: # Date Rev Version Comment +# 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 # @@ -20,6 +21,16 @@ ibd_rhrp::setup rlc set statmask $rw11::STAT_DEFMASK rlc set statvalue 0 +# de-configure all drives (and clear errros and reset vv) +$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 1] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 2] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 3] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] + # configure drives $cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ -wibr rpa.ds [regbld ibd_rhrp::DS {dpr 1} mol] \ diff --git a/tools/tbench/rhrp/test_rhrp_int2.tcl b/tools/tbench/rhrp/test_rhrp_int2.tcl new file mode 100644 index 00000000..d4231c8c --- /dev/null +++ b/tools/tbench/rhrp/test_rhrp_int2.tcl @@ -0,0 +1,337 @@ +# $Id: test_rhrp_int2.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 +# +# Revision History: +# Date Rev Version Comment +# 2015-05-20 692 1.0 Initial version +# +# Test interrupt response +# A: + +# ---------------------------------------------------------------------------- +rlc log "test_rhrp_int2: test interrupt response for nested xfer+seek --------" +rlc log " setup: unit 0-3: RP06(mol)" +package require ibd_rhrp +ibd_rhrp::setup + +rlc set statmask $rw11::STAT_DEFMASK +rlc set statvalue 0 + +# de-configure all drives (and clear errros and reset vv) +$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 1] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 2] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 3] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] + +# configure drives +$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ + -wibr rpa.ds [regbld ibd_rhrp::DS dpr mol] \ + -wibr rpa.dt $ibd_rhrp::DTE_RP06 \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 1] \ + -wibr rpa.ds [regbld ibd_rhrp::DS dpr mol] \ + -wibr rpa.dt $ibd_rhrp::DTE_RP06 \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 2] \ + -wibr rpa.ds [regbld ibd_rhrp::DS dpr mol] \ + -wibr rpa.dt $ibd_rhrp::DTE_RP06 \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 3] \ + -wibr rpa.ds [regbld ibd_rhrp::DS dpr mol] \ + -wibr rpa.dt $ibd_rhrp::DTE_RP06 + +# clear errors: cs1.tre=1 via unit 0 +$cpu cp -wma rpa.cs2 [regbld ibd_rhrp::CS2 {unit 0}] \ + -wma rpa.cs1 [regbld ibd_rhrp::CS1 tre] \ + -wma rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::FUNC_DCLR] \ + -wma rpa.as [regbld ibd_rhrp::AS u3 u2 u1 u0] \ + -rma rpa.ds -edata [regbld ibd_rhrp::DS dpr mol dry] + +# do pack ack on all drives +$cpu cp -wma rpa.cs2 [regbld ibd_rhrp::CS2 {unit 0}] \ + -wma rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::FUNC_PACK] \ + -wma rpa.cs2 [regbld ibd_rhrp::CS2 {unit 1}] \ + -wma rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::FUNC_PACK] \ + -wma rpa.cs2 [regbld ibd_rhrp::CS2 {unit 2}] \ + -wma rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::FUNC_PACK] \ + -wma rpa.cs2 [regbld ibd_rhrp::CS2 {unit 3}] \ + -wma rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::FUNC_PACK] + +# load test code +$cpu ldasm -lst lst -sym sym { + .include |lib/defs_cpu.mac| + .include |lib/defs_rp.mac| +; + .include |lib/vec_cpucatch.mac| +; + . = 000254 ; setup RHRP interrupt vector +v..rp: .word vh.rp + .word cp.pr7 +; + . = 1000 ; data area +stack: +ibuf: .blkw <3+1+<3*3>> ; input buffer (3 for xfer; #seek; 3 per seek) +obuf: .blkw <<4*6>+<4*6>+1> ; output buffer +; +sdone: .word 0 ; seek done +idone: .word 0 ; interrupt done +apat: .word 0 ; attn pattern +; + . = 2000 ; code area +start: spl 7 ; lock out interrupts + clr sdone ; clear flags + clr idone +; + mov #obuf,r5 ; clear obuf + mov #8.,r2 ; clear 8 sections with 6 words +1$: clr (r5)+ + clr (r5)+ + clr (r5)+ + clr (r5)+ + clr (r5)+ + clr (r5)+ + sob r2,1$ + clr (r5)+ +; + mov #obuf,r5 ; setup obuf pointer + mov #ibuf,r0 ; setup regs from ibuf + clrb @#rp.cs2 ; cs2 (unit=0) + mov (r0)+,@#rp.da ; da + mov (r0)+,@#rp.dc ; dc + mov (r0)+,@#rp.cs1 ; cs1 +; + mov #177000,(r5)+ ; tag: regs after xfer started + mov @#rp.cs1,(r5)+ ; cs1 + mov @#rp.cs2,(r5)+ ; cs2 + mov @#rp.er1,(r5)+ ; er1 + mov @#rp.ds,(r5)+ ; ds + mov @#rp.as,(r5)+ ; as +; + mov #1,r2 ; next unit + mov #2,r3 ; next abit + mov (r0)+,r1 ; # of seeks + beq 30$ +; +20$: movb r2,@#rp.cs2 ; cs2 (unit=i) + mov (r0)+,@#rp.da ; da + mov (r0)+,@#rp.dc ; dc + mov (r0)+,@#rp.cs1 ; cs1 +; + mov r2,(r5) + add #177100,(r5)+ ; tag: regs after seek started + mov @#rp.cs1,(r5)+ ; cs1 + mov @#rp.cs2,(r5)+ ; cs2 + mov @#rp.er1,(r5)+ ; er1 + mov @#rp.ds,(r5)+ ; ds + mov @#rp.as,(r5)+ ; as +; + bis r3,apat ; build apat + inc r2 ; next unit + asl r3 ; next abit +; + sob r1,20$ +; +30$: inc sdone ; signal seeks queued + spl 0 ; allow interrupts +wpnt: wait + +1$: tst idone ; wait for interrupt + beq 1$ + mov #177777,(r5)+ ; tag: all done + halt ; halt if done +stop: +; + +; RHRP interrupt handler +vh.rp: clrb @#rp.cs2 ; cs2 (unit=0) + mov #177200,(r5)+ ; tag: regs after seek started + mov @#rp.cs1,(r5)+ ; cs1 + mov @#rp.cs2,(r5)+ ; cs2 + mov @#rp.er1,(r5)+ ; er1 + mov @#rp.ds,(r5)+ ; ds + mov @#rp.as,r4 ; + mov r4,(r5)+ ; as +; + mov #3,r1 ; max # of seeks + mov #1,r2 ; next unit + mov #2,r3 ; next abit +; +1$: bit r3,r4 ; bit set in as ? + beq 2$ +; + movb r2,@#rp.cs2 ; cs2 (unit=i) + mov r2,(r5) + add #177300,(r5)+ ; tag: regs after seek started + mov @#rp.cs1,(r5)+ ; cs1 + mov @#rp.cs2,(r5)+ ; cs2 + mov @#rp.er1,(r5)+ ; er1 + mov @#rp.ds,(r5)+ ; ds + mov r3,@#rp.as ; clear abit in as + mov @#rp.as,(r5)+ ; as +; +2$: inc r2 ; next unit + asl r3 ; next abit + sob r1,1$ +; + inc idone + rti ; and return +} + +##puts $lst + +# define tmpproc for readback checks +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 + 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] + set as 0 + + # build ibuf + set ibuf {} + lappend ibuf 01 0100 [regbld ibd_rhrp::CS1 ie $fread go] + 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] + set as [expr {$as | [expr {01 << $i} ] } ] + } + + # setup idly, write ibuf, setup stack, and start cpu at start: + $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) \ + -stapc $sym(start) + + # here do minimal lam handling (harvest + send DONE) + # wait for interrupt + # and for sdone (all search issued flag) set + rlc wtlam $tout apat + for {set i 0} {$i<100} {incr i} { + $cpu cp -wal $sym(sdone) \ + -rmi sdone + if {$sdone} {break} + } + $cpu cp -attn \ + -wibr rpa.cs1 [ibd_rhrp::cs1_func $ibd_rhrp::RFUNC_DONE] + + # wait for halt + $cpu wtcpu -reset $tout + + # check context + $cpu cp -rpc -edata $sym(stop) \ + -rsp -edata $sym(stack) \ + -wal $sym(idone) \ + -rmi -edata 1 + + # check setup xfer + set osxcs1 [regbld ibd_rhrp::CS1 dva ie $fread] + set osxcs2 [regbld ibd_rhrp::CS2 or ir] + set osxds [regbld ibd_rhrp::DS mol dpr vv] + $cpu cp -wal $sym(obuf) \ + -rmi -edata 0177000 \ + -rmi -edata $osxcs1 \ + -rmi -edata $osxcs2 \ + -rmi -edata 0 \ + -rmi -edata $osxds \ + -rmi -edata 0 + + # check setup search + set mskcs1sc [rutil::com16 [regbld ibd_rhrp::CS1 sc]] + 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] + $cpu cp -rmi -edata [expr {0177100 + $i}] \ + -rmi -edata $osscs1 $mskcs1sc\ + -rmi -edata $osscs2 \ + -rmi -edata 0 \ + -rmi -edata $ossds \ + -rmi + } + + # check interrupt xfer + 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] + set oixas $as + $cpu cp -rmi -edata 0177200 \ + -rmi -edata $oixcs1 \ + -rmi -edata $oixcs2 \ + -rmi -edata 0 \ + -rmi -edata $oixds \ + -rmi -edata $oixas + + # check interrupt search + set oisas $as + 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] + set oisas [expr {$oisas & [expr {~(01<<$i)} ] }] + $cpu cp -rmi -edata [expr {0177300 + $i}] \ + -rmi -edata $oiscs1 \ + -rmi -edata $oiscs2 \ + -rmi -edata 0 \ + -rmi -edata $oisds \ + -rmi -edata $oisas + } + + # ckeck end tag + $cpu cp -rmi -edata 0177777 + + return "" +} + +# discard pending attn to be on save side +rlc wtlam 0. +rlc exec -attn + +rlc log " A1: test without search -----------------------------------" + +set opts [list \ + i.nseek 0 \ + i.idly 0 + ] +tmpproc_dotest $cpu sym $opts + +rlc log " A2: test with 1 search ------------------------------------" + +set opts [list \ + i.nseek 1 \ + i.idly 10 + ] +tmpproc_dotest $cpu sym $opts + +rlc log " A2: test with 2 search ------------------------------------" + +set opts [list \ + i.nseek 2 \ + i.idly 10 + ] +tmpproc_dotest $cpu sym $opts + +rlc log " A2: test with 3 search ------------------------------------" + +set opts [list \ + i.nseek 3 \ + i.idly 10 + ] +tmpproc_dotest $cpu sym $opts + diff --git a/tools/tbench/rhrp/test_rhrp_regs.tcl b/tools/tbench/rhrp/test_rhrp_regs.tcl index 97a2e1ce..1c74f3f6 100644 --- a/tools/tbench/rhrp/test_rhrp_regs.tcl +++ b/tools/tbench/rhrp/test_rhrp_regs.tcl @@ -1,10 +1,11 @@ -# $Id: test_rhrp_regs.tcl 683 2015-05-17 21:54:35Z mueller $ +# $Id: test_rhrp_regs.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 # # Revision History: # Date Rev Version Comment +# 2015-06-20 692 1.0.1 de-configure all drives at begin # 2015-03-29 660 1.0 Initial version # # Test register response @@ -24,6 +25,16 @@ ibd_rhrp::setup rlc set statmask $rw11::STAT_DEFMASK rlc set statvalue 0 +# de-configure all drives (and clear errros and reset vv) +$cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 1] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 2] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] \ + -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 3] \ + -wibr rpa.ds [regbld ibd_rhrp::DS erp vv] + # configure drives $cpu cp -wibr rpa.cs1 [ibd_rhrp::rcs1_wunit 0] \ -wibr rpa.ds [regbld ibd_rhrp::DS {dpr 1}] \ diff --git a/tools/tcl/ibd_rhrp/util.tcl b/tools/tcl/ibd_rhrp/util.tcl index 884860eb..4faa1232 100644 --- a/tools/tcl/ibd_rhrp/util.tcl +++ b/tools/tcl/ibd_rhrp/util.tcl @@ -1,4 +1,4 @@ -# $Id: util.tcl 678 2015-05-10 16:23:02Z mueller $ +# $Id: util.tcl 690 2015-06-07 18:23:51Z mueller $ # # Copyright 2015- by Walter F.J. Mueller # @@ -13,6 +13,7 @@ # # Revision History: # Date Rev Version Comment +# 2015-06-06 690 1.0.1 rdump: all online units now shown by default # 2015-03-21 659 1.0 Initial version # @@ -54,7 +55,8 @@ namespace eval ibd_rhrp { 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} {mol 12} {wrl 11} {lbt 10} {dpr 8} {dry 7} {vv 6} + regdsc DS {ata 15} {erp 14} {pip 13} {mol 12} {wrl 11} {lbt 10} {dpr 8} \ + {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 2d} @@ -108,7 +110,7 @@ namespace eval ibd_rhrp { # # rdump: register dump - rem view ------------------------------------------ # - proc rdump {{cpu "cpu0"} {unit 0}} { + proc rdump {{cpu "cpu0"} {unit -1}} { set rval {} $cpu cp -ribr "rpa.cs1" cs1 \ -ribr "rpa.wc" wc \ @@ -131,19 +133,35 @@ namespace eval ibd_rhrp { append rval [format "\n ba: %6.6o" $ba] append rval [format "\n bae: %6.6o ea=%8.8o" $bae [expr {($bae<<16)|$ba}] ] - $cpu cp -wibr "rpa.cs1" [rcs1_wunit $unit] \ - -ribr "rpa.da" da \ - -ribr "rpa.ds" ds \ - -ribr "rpa.er1" er1 \ - -ribr "rpa.as" as \ - -ribr "rpa.la" la \ - -ribr "rpa.mr1" mr1 \ - -ribr "rpa.dt" dt \ - -ribr "rpa.sn" sn \ - -ribr "rpa.of" of \ - -ribr "rpa.dc" dc + $cpu cp -wibr "rpa.cs1" [rcs1_wunit 0] \ + -ribr "rpa.ds" ds0 \ + -wibr "rpa.cs1" [rcs1_wunit 1] \ + -ribr "rpa.ds" ds1 \ + -wibr "rpa.cs1" [rcs1_wunit 2] \ + -ribr "rpa.ds" ds2 \ + -wibr "rpa.cs1" [rcs1_wunit 3] \ + -ribr "rpa.ds" ds3 - append rval "\nUnit $unit registers:" + set dslist [list $ds0 $ds1 $ds2 $ds3] + + set ulist [expr {$unit & 0x03} ] + if {$unit < 0} { set ulist {0 1 2 3} } + + foreach u $ulist { + set ds [lindex $dslist $u] + if {$u == $unit || [regget ibd_rhrp::DS(mol) $ds] } { + $cpu cp -wibr "rpa.cs1" [rcs1_wunit $u] \ + -ribr "rpa.da" da \ + -ribr "rpa.er1" er1 \ + -ribr "rpa.as" as \ + -ribr "rpa.la" la \ + -ribr "rpa.mr1" mr1 \ + -ribr "rpa.dt" dt \ + -ribr "rpa.sn" sn \ + -ribr "rpa.of" of \ + -ribr "rpa.dc" dc + + append rval "\nUnit $u registers:" append rval [format "\n da: %6.6o %s" $da [regtxt ibd_rhrp::DA $da ]] append rval [format "\n ds: %6.6o %s" $ds [regtxt ibd_rhrp::DS $ds ]] append rval [format "\n er1: %6.6o %s" $er1 [regtxt ibd_rhrp::ER1 $er1]] @@ -160,6 +178,13 @@ namespace eval ibd_rhrp { append rval [format "\n of: %6.6o %s" $of [regtxt ibd_rhrp::OF $of ]] append rval [format "\n dc: %6.6o dc:%s" $dc [format "%3d" $dc]] + } else { + append rval [format "\nUnit $u offline or disabled: mol:%d dpr:%s" \ + [regget ibd_rhrp::DS(mol) $ds] \ + [regget ibd_rhrp::DS(dpr) $ds] ] + } + } + return $rval } } diff --git a/tools/tcl/rutil/util.tcl b/tools/tcl/rutil/util.tcl index 61b47b9f..734bbaf2 100644 --- a/tools/tcl/rutil/util.tcl +++ b/tools/tcl/rutil/util.tcl @@ -1,4 +1,4 @@ -# $Id: util.tcl 661 2015-04-03 18:28:41Z mueller $ +# $Id: util.tcl 689 2015-06-05 14:33:18Z mueller $ # # Copyright 2011-2015 by Walter F.J. Mueller # @@ -13,7 +13,8 @@ # # Revision History: # Date Rev Version Comment -# 2015-03-28 660 1,0,4 add com8 and com16 +# 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 # 2014-07-12 569 1.0.2 add sxt16 and sxt32 # 2013-05-09 517 1.0.1 add optlist2arr @@ -240,12 +241,24 @@ namespace eval rutil { } # - # com16: 16 bit complement ------------------------------------------------ + # com16: 16 bit complement ------------------------------------------------- # proc com16 {val} { return [expr (~$val) & 0xffff] } + # + # dohook: source a hook script if is defined ------------------------------- + # + proc dohook {name} { + set fname "${name}.tcl" + if {[file readable $fname]} { + puts "dohook: $fname" + source $fname + } + return + } + # # ! export reg... procs to global scope ------------------------------------ #