Added RL11 bootstrap info
This commit is contained in:
parent
2e93b71095
commit
cd5dbd5c14
6 changed files with 125 additions and 28 deletions
|
|
@ -52,3 +52,100 @@ used to control the device, such as choosing which disks should be "auto-mounted
|
|||
</control>
|
||||
</device>
|
||||
```
|
||||
|
||||
Loading the RL11 Bootstrap
|
||||
--------------------------
|
||||
|
||||
From the [RT-11 v4.0 Installation Manual (March 1981)](/pubs/dec/pdp11/rt11/), p. E-6:
|
||||
|
||||
|
||||
Deposit the basic RL01/RL02 disk bootstrap loader in memory as follows:
|
||||
|
||||
1. Set the ENABLE/HALT switch to HALT.
|
||||
|
||||
2. Set the first address, 001000, in the switch register (see Table E-7).
|
||||
|
||||
3. Press the LOAD ADDR switch.
|
||||
|
||||
4. Set the contents for the first address (from Table E-7) in the switch register.
|
||||
|
||||
5. Lift the DEP switch. The computer automatically advances to the next address.
|
||||
|
||||
6. Set the contents for the next address (from Table E-7) in the switch register.
|
||||
|
||||
7. Lift the DEP switch.
|
||||
|
||||
8. Repeat steps 6 and 7 until you have deposited all the instructions.
|
||||
|
||||
Now verify that you deposited the bootstrap program properly.
|
||||
|
||||
1. Set the first address, 001000, in the switch register.
|
||||
|
||||
2. Press the LOAD ADDR switch.
|
||||
|
||||
3. Press the EXAM switch to display the contents of that address in the data register.
|
||||
|
||||
4. Compare the number in the data register with the value for that address in Table E-7.
|
||||
|
||||
5. If the values are the same, press EXAM again to display the contents of the next address. If the values
|
||||
are not the same, repeat the entire
|
||||
|
||||
Table E-7: RL01/RL02 Bootstrap Loader
|
||||
-------------------------------------
|
||||
|
||||
Location Contents
|
||||
|
||||
001000 012701
|
||||
001002 174400
|
||||
001004 012761
|
||||
001006 000013
|
||||
001010 000004
|
||||
001012 012711
|
||||
001014 000004
|
||||
001016 105711
|
||||
001020 100376
|
||||
001022 005061
|
||||
001024 000002
|
||||
001026 005061
|
||||
001030 000004
|
||||
001032 012761
|
||||
001034 177400
|
||||
001036 000006
|
||||
001040 012711
|
||||
001042 000014
|
||||
001044 105711
|
||||
001046 100376
|
||||
001050 005007
|
||||
|
||||
Loading the RL11 Bootstrap Loader
|
||||
----------------------------------
|
||||
|
||||
Any PDP-11 machine using built-in PCjs Debugger makes it easy to enter the bootstrap code above. Paste
|
||||
the following commands into the Debugger's command buffer:
|
||||
|
||||
ew 1000 012701 174400 012761 000013 000004 012711 000004 105711 100376 005061;
|
||||
ew 1024 000002 005061 000004 012761 177400 000006 012711 000014 105711 100376 005007;
|
||||
r pc 1000
|
||||
|
||||
You can then review (eg, disassemble) the bootstrap code:
|
||||
|
||||
>> u 1000 1052
|
||||
001000: 012701 174400 MOV #174400,R1
|
||||
001004: 012761 000013 000004 MOV #13,4(R1)
|
||||
001012: 012711 000004 MOV #4,@R1 ;RLCS
|
||||
001016: 105711 TSTB @R1 ;RLCS
|
||||
001020: 100376 BPL 001016
|
||||
001022: 005061 000002 CLR 2(R1)
|
||||
001026: 005061 000004 CLR 4(R1)
|
||||
001032: 012761 177400 000006 MOV #177400,6(R1)
|
||||
001040: 012711 000014 MOV #14,@R1 ;RLCS
|
||||
001044: 105711 TSTB @R1 ;RLCS
|
||||
001046: 100376 BPL 001044
|
||||
001050: 005007 CLR PC
|
||||
|
||||
Last but not least, make sure you have successfully loaded an RL01 or RL02 disk image into drive RL0. Then execute the
|
||||
bootstrap code with the Debugger's "g" command.
|
||||
|
||||
Of course, if the machine also includes the RL11 Boot control, then all you *really* need to is select an
|
||||
RL01 or RL02 disk, click "Load", wait for the diskette image to be successfully loaded (i.e., downloaded) and then click
|
||||
"Boot".
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ used to control the device, such as choosing which disks should be "auto-mounted
|
|||
Loading the RX11 Bootstrap
|
||||
--------------------------
|
||||
|
||||
From the [RT-11 v4.0 Installation Manual (March 1981)](/pubs/dec/pdp11/rt11/), p. E-9:
|
||||
From the [RT-11 v4.0 Installation Manual (March 1981)](/pubs/dec/pdp11/rt11/), p. E-3:
|
||||
|
||||
The procedure to deposit the RX11 disk bootstrap loader in memory depends on the type of processor you have.
|
||||
If your computer is a PDP-11V/03, PDP-11/03, or LSI-11, see the PDP-11/03 user's manual for instructions.
|
||||
|
|
@ -114,7 +114,7 @@ From the [RT-11 v4.0 Installation Manual (March 1981)](/pubs/dec/pdp11/rt11/), p
|
|||
|
||||
4. Press the START switch.
|
||||
|
||||
Table E-3: RX-11 Bootstrap Loader
|
||||
Table E-3: RX11 Bootstrap Loader
|
||||
---------------------------------
|
||||
|
||||
Location Contents
|
||||
|
|
@ -138,7 +138,7 @@ Table E-3: RX-11 Bootstrap Loader
|
|||
001040 005000
|
||||
001042 000110
|
||||
|
||||
Loading the RX-11 Bootstrap Loader
|
||||
Loading the RX11 Bootstrap Loader
|
||||
----------------------------------
|
||||
|
||||
Any PDP-11 machine using built-in PCjs Debugger makes it easy to enter the bootstrap code above. Paste
|
||||
|
|
|
|||
|
|
@ -506,7 +506,7 @@ class CPUStatePDP11 extends CPUPDP11 {
|
|||
* If updates to MMR1 have not been shut off (ie, MMR0.ABORT bits are clear), then we are allowed
|
||||
* to sync MMR1 with its real-time counterpart in opLast.
|
||||
*/
|
||||
if (!(this.regMMR0 & PDP11.MMR0.ABORT)) {
|
||||
if ((this.regMMR0 & (PDP11.MMR0.ABORT | PDP11.MMR0.ENABLED)) == PDP11.MMR0.ENABLED) {
|
||||
this.regMMR1 = (this.opLast >> 16) & 0xffff;
|
||||
}
|
||||
var result = this.regMMR1;
|
||||
|
|
@ -528,7 +528,7 @@ class CPUStatePDP11 extends CPUPDP11 {
|
|||
* If updates to MMR2 have not been shut off (ie, MMR0.ABORT bits are clear), then we are allowed
|
||||
* to sync MMR2 with its real-time counterpart in opLast.
|
||||
*/
|
||||
if (!(this.regMMR0 & PDP11.MMR0.ABORT)) {
|
||||
if ((this.regMMR0 & (PDP11.MMR0.ABORT | PDP11.MMR0.ENABLED)) == PDP11.MMR0.ENABLED) {
|
||||
this.regMMR2 = this.opLast & 0xffff;
|
||||
}
|
||||
return this.regMMR2;
|
||||
|
|
|
|||
|
|
@ -775,19 +775,19 @@ var PDP11 = {
|
|||
DRIVES: 4, // maximum of 4 drives
|
||||
PREFIX: "DY",
|
||||
RLCS: { // 174400: Control Status Register
|
||||
DRDY: 0x0001, // Drive Ready (R/O)
|
||||
FUNC: 0x000E, // Function Code (F2,F1,F0) (R/W)
|
||||
BAE: 0x0030, // Bus Address Extension bits (BA17,BA16) (R/W)
|
||||
IE: 0x0040, // Interrupt Enable (R/W)
|
||||
CRDY: 0x0080, // Controller Ready (R/W)
|
||||
DS: 0x0300, // Drive Select (DS1,DS0) (R/W)
|
||||
ERRC: 0x3C00, // Error Code (R/O)
|
||||
DE: 0x4000, // Drive Error (R/O)
|
||||
ERR: 0x8000, // Composite Error (R/O)
|
||||
CLEAR: 0x3F7E, // bits cleared on INIT (bits 1-6 and 8-13 are cleared)
|
||||
SET: 0x0080, // bits set on INIT (bit 7 is set)
|
||||
RMASK: 0xFFFF, // no write-only bits
|
||||
WMASK: 0x03FE, // bits writable
|
||||
DRDY: 0x0001, // (000001) Drive Ready (R/O)
|
||||
FUNC: 0x000E, // (000016) Function Code (F2,F1,F0) (R/W)
|
||||
BAE: 0x0030, // (000060) Bus Address Extension bits (BA17,BA16) (R/W)
|
||||
IE: 0x0040, // (000100) Interrupt Enable (R/W)
|
||||
CRDY: 0x0080, // (000200) Controller Ready (R/W)
|
||||
DS: 0x0300, // (001400) Drive Select (DS1,DS0) (R/W)
|
||||
ERRC: 0x3C00, // (036000) Error Code (R/O)
|
||||
DE: 0x4000, // (040000) Drive Error (R/O)
|
||||
ERR: 0x8000, // (100000) Composite Error (R/O)
|
||||
CLEAR: 0x3F7E, // (037576) bits cleared on INIT (bits 1-6 and 8-13 are cleared)
|
||||
SET: 0x0080, // (000200) bits set on INIT (bit 7 is set)
|
||||
RMASK: 0xFFFF, // (177777) no write-only bits
|
||||
WMASK: 0x03FE, // (001776) bits writable
|
||||
SHIFT: {
|
||||
FUNC: 1,
|
||||
BAE: 4,
|
||||
|
|
@ -857,14 +857,14 @@ var PDP11 = {
|
|||
MPE: 0x2400 // Memory Parity Error (RLV12 only)
|
||||
},
|
||||
FUNC: { // NOTE: These function codes are pre-shifted to read/write directly from/to RLCS.FUNC
|
||||
NOP: 0b0000, // No-Op
|
||||
WCHK: 0b0010, // Write Check
|
||||
STATUS: 0b0100, // Get Status
|
||||
SEEK: 0b0110, // Seek
|
||||
RHDR: 0b1000, // Read Header
|
||||
WDATA: 0b1010, // Write Data
|
||||
RDATA: 0b1100, // Read Data
|
||||
RDNC: 0b1110 // Read Data without Header Check
|
||||
NOP: 0b0000, // (00) No-Op
|
||||
WCHK: 0b0010, // (02) Write Check
|
||||
STATUS: 0b0100, // (04) Get Status
|
||||
SEEK: 0b0110, // (06) Seek
|
||||
RHDR: 0b1000, // (10) Read Header
|
||||
WDATA: 0b1010, // (12) Write Data
|
||||
RDATA: 0b1100, // (14) Read Data
|
||||
RDNC: 0b1110 // (16) Read Data without Header Check
|
||||
}
|
||||
},
|
||||
RX11: { // RX11 Disk Controller
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ h.Aa=function(a,b,c,d){Vd.prototype.Aa.call(this,a,b,c,d);this.ad=b.Jd.bind(b);t
|
|||
h.reset=function(){this.status("Model "+this.ka);this.A.V&&this.ba();this.C=65536;this.G=32768;this.L=65535;this.I=32768;this.w=15;this.g=[0,0,0,0,0,0,0,this.Ud,-1,-2,-3,-4,-5,-6,-7,-8];this.qa=[0,0,0,0,0,0];this.W=[0,0,0,0];this.M=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.B=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,65535,
|
||||
65535,65535,65535,65535,65535,65535,65535],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.Ha=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.xc=[0,0,0,0,0,0,0,0];this.N=0;this.cb=-1;this.u=this.j=this.Wc=this.X=this.Y=this.i=this.uc=0;oc(this);fe(this);this.A.error=!1;Vd.prototype.reset.call(this)};function oc(a){a.S=0;a.vc=0;a.wc=0;a.U=0;a.P=0;a.eb=0;a.xa=255;a.zb=0;a.Ab=0;a.sb=0;a.lb=262143;a.kb=a.g[7];a.O=0;a.R=null;a.D&&(we(a),a.Sd=fd(a.D))}
|
||||
function we(a){a.jc=a.ad;a.kc=a.cd;a.Tc=a.dd;a.lc=a.jd;a.sc&&(a.jc=a.oe,a.kc=a.te);a.tc&&(a.Tc=a.ze,a.lc=a.Ae);a.zb?(a.Ia=65536,a.vb=a.U&16?4186112:253952,a.Ga=a.se,a.oa=a.sc?a.$g:a.Dd,a.Hb=a.tc?a.si:a.Hd,Yc(a.D,a.U&16?22:18)):(a.Ia=0,a.vb=57344,a.Ga=a.Gf,a.oa=a.sc?a.Zg:a.ye,a.Hb=a.tc?a.ri:a.De,Yc(a.D,16))}function sd(a){var b=a.S;b&57344||(b=b&-3199|a.Ab<<5|a.sb<<1);return b}
|
||||
function td(a,b){b&=-3073;if(a.S!=b){b&57344&&!(a.S&57344)&&(a.vc=a.O>>16&65535,a.wc=a.O&65535);a.S=b;a.Ab=(b&96)>>5;a.sb=(b&30)>>1;var c=0;b&257&&(c=4,b&1&&(c|=2));a.zb!=c&&(a.zb=c,we(a))}}function ud(a){a.S&57344||(a.vc=a.O>>16&65535);a=a.vc;a&65280&&(a=(a<<8|a>>8)&65535);return a}function vd(a){a.S&57344||(a.wc=a.O&65535);return a.wc}function wd(a,b){1170>a.ka&&(b&=-49);a.U!=b&&(a.U=b,a.lb=b&16?4194303:262143,we(a))}
|
||||
function td(a,b){b&=-3073;if(a.S!=b){b&57344&&!(a.S&57344)&&(a.vc=a.O>>16&65535,a.wc=a.O&65535);a.S=b;a.Ab=(b&96)>>5;a.sb=(b&30)>>1;var c=0;b&257&&(c=4,b&1&&(c|=2));a.zb!=c&&(a.zb=c,we(a))}}function ud(a){1==(a.S&57345)&&(a.vc=a.O>>16&65535);a=a.vc;a&65280&&(a=(a<<8|a>>8)&65535);return a}function vd(a){1==(a.S&57345)&&(a.wc=a.O&65535);return a.wc}function wd(a,b){1170>a.ka&&(b&=-49);a.U!=b&&(a.U=b,a.lb=b&16?4194303:262143,we(a))}
|
||||
function xe(a,b,c,d){a.Ud=b;ye(a,b);zd(a,0);a.D.reset();oc(a);if(c){a.g[0]=d||0;for(b=1;5>=b;b++)a.g[b]=0;a.g[6]=1024;a.A.aa?a.A.V||qc(a):a.A.ra=!0}else a.F&&a.A.aa?a.ba()||a.J.A.reset||(he(a.F),H(a.J,-1)):!1===c&&a.ba();!a.A.V&&a.ta&&a.ta.stop()}h.pe=function(){return 0};
|
||||
h.save=function(){var a=new G(this);a.set(0,[this.g,this.qa,this.W,this.M,this.B,this.Ha,this.xc,this.P,this.uc,this.eb,this.xa,this.Ab,this.sb,this.kb,this.i,this.O,this.cb,this.Ac,this.Dc]);a.set(1,[yd(this),sd(this),ud(this),vd(this),this.U]);a.set(2,[this.pb,this.ob,this.A.ra]);a.set(3,ze(this));a.set(4,re(this));return a.data()};
|
||||
h.restore=function(a){var b=ia(a[0]);this.g=b.next().value;this.qa=b.next().value;this.W=b.next().value;this.M=b.next().value;this.B=b.next().value;this.Ha=b.next().value;this.xc=b.next().value;this.P=b.next().value;this.uc=b.next().value;this.eb=b.next().value;this.xa=b.next().value;this.Ab=b.next().value;this.sb=b.next().value;this.kb=b.next().value;this.i=b.next().value;this.O=b.next().value;this.cb=b.next().value;this.Ac=b.next().value;this.Dc=b.next().value;b=a[1];zd(this,b[0]);td(this,b[1]);
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ h.la=function(a,b){for(var c=192,d=0;d<this.Ib.length;d++){var e=this.Ib[d];0>e.
|
|||
h.reset=function(){this.status("Model "+this.sa);this.j.M&&F(this);this.v=65536;this.m=32768;this.l=65535;this.w=32768;this.i=15;this.b=[0,0,0,0,0,0,0,this.pd,-1,-2,-3,-4,-5,-6,-7,-8];this.ua=[0,0,0,0,0,0];this.ga=[0,0,0,0];this.H=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.s=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,
|
||||
65535,65535,65535,65535,65535,65535],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];this.Pa=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.Rb=[0,0,0,0,0,0,0,0];this.B=0;this.Ea=-1;this.h=this.f=this.qc=this.K=this.S=this.g=this.Ob=0;Db(this);Tc(this);this.j.error=!1;Qc.prototype.reset.call(this)};function Db(a){a.J=0;a.Pb=0;a.Qb=0;a.ta=0;a.F=0;a.$a=0;a.Oa=255;a.kb=0;a.Xa=0;a.Ya=0;a.cb=262143;a.Ka=a.b[7];a.C=0;a.I=null;a.u&&(fd(a),a.od=hc(a.u))}
|
||||
function fd(a){a.kc=a.gd;a.lc=a.xc;a.yc=a.Ac;a.mc=a.Cc;a.kb?(a.Aa=65536,a.jc=a.ta&16?4186112:253952,a.ra=a.Id,a.W=a.Nd,a.Ab=a.Qd,$b(a.u,a.ta&16?22:18)):(a.Aa=0,a.jc=57344,a.ra=a.Ue,a.W=a.og,a.Ab=a.Hh,$b(a.u,16))}function rc(a){var b=a.J;b&57344||(b=b&-3199|a.Xa<<5|a.Ya<<1);return b}function sc(a,b){b&=-3073;if(a.J!=b){b&57344&&!(a.J&57344)&&(a.Pb=a.C>>16&65535,a.Qb=a.C&65535);a.J=b;a.Xa=(b&96)>>5;a.Ya=(b&30)>>1;var c=0;b&257&&(c=4,b&1&&(c|=2));a.kb!=c&&(a.kb=c,fd(a))}}
|
||||
function tc(a){a.J&57344||(a.Pb=a.C>>16&65535);a=a.Pb;a&65280&&(a=(a<<8|a>>8)&65535);return a}function uc(a){a.J&57344||(a.Qb=a.C&65535);return a.Qb}function vc(a,b){1170>a.sa&&(b&=-49);a.ta!=b&&(a.ta=b,a.cb=b&16?4194303:262143,fd(a))}function gd(a,b,c,d){a.pd=b;hd(a,b);yc(a,0);a.u.reset();Db(a);if(c){a.b[0]=d||0;for(b=1;5>=b;b++)a.b[b]=0;a.b[6]=1024;a.j.R?a.j.M||Fb(a):a.j.Y=!0}else a.D&&a.j.R?F(a)||a.A.j.reset||(a.D.g(),Jb(a.A,-1)):!1===c&&F(a);!a.j.M&&a.pa&&a.pa.stop()}h.Hd=function(){return 0};
|
||||
function tc(a){1==(a.J&57345)&&(a.Pb=a.C>>16&65535);a=a.Pb;a&65280&&(a=(a<<8|a>>8)&65535);return a}function uc(a){1==(a.J&57345)&&(a.Qb=a.C&65535);return a.Qb}function vc(a,b){1170>a.sa&&(b&=-49);a.ta!=b&&(a.ta=b,a.cb=b&16?4194303:262143,fd(a))}function gd(a,b,c,d){a.pd=b;hd(a,b);yc(a,0);a.u.reset();Db(a);if(c){a.b[0]=d||0;for(b=1;5>=b;b++)a.b[b]=0;a.b[6]=1024;a.j.R?a.j.M||Fb(a):a.j.Y=!0}else a.D&&a.j.R?F(a)||a.A.j.reset||(a.D.g(),Jb(a.A,-1)):!1===c&&F(a);!a.j.M&&a.pa&&a.pa.stop()}h.Hd=function(){return 0};
|
||||
h.save=function(){var a=new E(this);a.set(0,[this.b,this.ua,this.ga,this.H,this.s,this.Pa,this.Rb,this.F,this.Ob,this.$a,this.Oa,this.Xa,this.Ya,this.Ka,this.g,this.C,this.Ea,this.Lc,this.Nc]);a.set(1,[xc(this),rc(this),tc(this),uc(this),this.ta]);a.set(2,[this.Na,this.Za,this.j.Y]);a.set(3,id(this));a.set(4,ad(this));return a.data()};
|
||||
h.restore=function(a){var b=ia(a[0]);this.b=b.next().value;this.ua=b.next().value;this.ga=b.next().value;this.H=b.next().value;this.s=b.next().value;this.Pa=b.next().value;this.Rb=b.next().value;this.F=b.next().value;this.Ob=b.next().value;this.$a=b.next().value;this.Oa=b.next().value;this.Xa=b.next().value;this.Ya=b.next().value;this.Ka=b.next().value;this.g=b.next().value;this.C=b.next().value;this.Ea=b.next().value;this.Lc=b.next().value;this.Nc=b.next().value;b=a[1];yc(this,b[0]);sc(this,b[1]);
|
||||
this.Pb=b[2];this.Qb=b[3];vc(this,b[4]);b=a[2];this.Na=b[0];Wc(this,b[1]);this.j.Y=b[2];for(var b=a[3],c=b.length-1;0<=c;c--){var d;a:{for(d=0;d<this.Ib.length;d++){var e=this.Ib[d];if(e.Ub===b[c]){d=e;break a}}d=null}d&&(d.next=this.I,this.I=d)}a=a[4];for(b=0;b<this.X.length&&b<a.length;b++)this.X[b][0]=a[b];return!0};function jd(a){return a.v&65536?1:0}function kd(a){return a.w&32768?8:0}function ld(a,b){var c=a.b[7];a.b[7]=c+b&65535;return c}
|
||||
|
|
|
|||
Loading…
Reference in a new issue