Improved PDP-11 save/restore support (added to Device, Panel, RK11, and Serial)

This commit is contained in:
Jeff Parsons 2017-01-26 10:04:44 -08:00 committed by Jeff Parsons
commit d182c7eced
15 changed files with 850 additions and 635 deletions

View file

@ -603,7 +603,7 @@ l.zb=function(a,b,c){var d=this;switch(b){case "listDisks":this.la[b]=c;if(this.
b&&(b="");g=g.href;void 0!==g&&(b='<a href="'+g+'" target="_blank">'+b+"</a>");a.innerHTML=b}};return!0;case "descDisk":case "listDrives":return this.la[b]=c,c.onchange=function(){var a=ea(c.value,10);null!=a&&vm(d,a)},!0;case "loadDisk":return this.la[b]=c,c.onclick=function(){var a=d.la.listDisks;a&&wm(d,a.options[a.selectedIndex].text,a.value)},!0;case "saveDisk":if(!this.Y){c.parentNode.removeChild(c);break}this.la[b]=c;c.onclick=function(){var a=d.la.listDrives;a&&a.options&&d.B&&((a=d.B[ea(a.value,
10)||0])?(a=a.ua)?(a=Ca(rm(a),"octet-stream",!0,a.th.replace(".json",".img")),r(a)):d.Ba("No diskette loaded in drive."):d.Ba("No diskette drive selected."))};return!0;case "mountDisk":if(this.Y)return this.la[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){if(a=a.currentTarget[1].files[0]){var b=a.name;wm(d,ga(b,!0),b,a)}return!1},!0;c.parentNode.removeChild(c)}return!1};
l.pc=function(a,b,c,d){this.ia=b;this.A=c;this.Ia=d;this.ba=a;this.S=jb(a,"ChipSet");if((this.K=kc(this.ba,"autoMount")||this.K)&&"string"==typeof this.K)try{this.K=eval("("+this.K+")")}catch(e){r("FDC auto-mount error: "+e.message+" ("+this.K+")"),this.K=null}xm(this);Pb(b,this,ym);Rb(b,this,zm);Am(this,"None","",!0);this.Y&&Am(this,"Local Disk","?");Am(this,"Remote Disk","??");Bm(this)||t(this)};
l.Ub=function(a,b){if(!b){if(!a||!this.restore){if(this.reset(),this.ba.pg){this.C=[];for(a=0;a<this.B.length;a++)Cm(this,a,!0);Bm(this,!0)}}else if(!this.restore(a))return!1;if(a=this.la.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.Z;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.Z&&(a.value="0",vm(this,0))}}return!0};l.Tb=function(a){return a?this.save():!0};l.reset=function(){xm(this)};
l.Ub=function(a,b){if(!b){if(!a){if(this.reset(),this.ba.pg){this.C=[];for(a=0;a<this.B.length;a++)Cm(this,a,!0);Bm(this,!0)}}else if(!this.restore(a))return!1;if(a=this.la.listDrives){for(;a.firstChild;)a.removeChild(a.firstChild);a.value="";for(b=0;b<this.Z;b++){var c=document.createElement("option");c.value=b;c.text=String.fromCharCode(65+b)+":";a.appendChild(c)}0<this.Z&&(a.value="0",vm(this,0))}}return!0};l.Tb=function(a){return a?this.save():!0};l.reset=function(){xm(this)};
l.save=function(){var a=new ae(this);a.set(0,Dm(this));return a.data()};l.restore=function(a){return xm(this,a[0])};
function xm(a,b){var c=0,d,e=!0;b||(b=[0,0,128,Array(9),0,0,0,[]]);a.Qa=b[c++];c++;a.aa=b[c++];a.I=b[c++];a.G=b[c++];a.D=b[c++];a.P=b[c++];var f=b[c++];d=b[c++];null!=d&&(a.C=d);void 0===a.B&&(a.Z=4,a.S&&(a.Z=+Yi(a.S,Di,void 0)),a.B=Array(4));for(d=0;d<a.B.length;d++){var g=a.B[d];if(void 0===g){var g=a.B[d]={},h;if(a.S)a:{h=a.S;if(d<+Yi(h,Di,void 0)){if(!h.Y){h=360;break a}if(d<h.Y.length){h=h.Y[d];break a}}h=0}else h=0;switch(h){case 160:case 180:g.jb=1;default:g.ib=40;g.eb=9;break;case 720:g.ib=
80;g.eb=9;break;case 1200:g.ib=80;g.eb=15;break;case 1440:g.ib=80,g.eb=18}}var k=a,m=d,q=f[d],y=0;h=!0;g.Qa=m;g.ne=g.pe=!1;q||(q=[192,!0,0,2,0]);"boolean"==typeof q[1]&&(q[1]=["Floppy Drive",g.ib||40,g.jb||q[3],g.eb||9,g.nb||512,q[1],g.Nf,g.Xe,g.Ye]);g.kb=q[y++];var w=q[y++];g.name=w[0];g.ib=w[1];g.jb=w[2];g.eb=w[3];g.nb=w[4];g.qe=w[5];(g.Nf=w[6])?(g.Xe=w[7],g.Ye=w[8]):(g.Nf=g.ib,g.Xe=g.jb,g.Ye=g.eb);g.Ya=q[y++];g.vd=q[y++];g.wb=q[y++];g.vd=100<=g.vd?g.vd-100:g.vd-g.wb;g.mb=q[y++];g.wd=q[y++];g.vb=
@ -627,7 +627,7 @@ var Nm=["XTC","ATC","COMPAQ"],Om=[{0:[306,2],1:[375,8],2:[306,6],3:[306,4]},{1:[
8],20:[733,5],21:[733,7],22:[524,4,40],23:[924,8],24:[966,14],25:[966,16],26:[1023,14],27:[832,6,33],28:[1222,15,34],29:[1240,7,34],30:[615,4,25],31:[615,8,25],32:[905,9,25],33:[832,8,33],34:[966,7,34],35:[966,8,34],36:[966,9,34],37:[966,5,34],38:[612,16,63],39:[1023,11,33],40:[1023,15,34],41:[1630,15,52],42:[1023,16,63],43:[805,4,26],44:[805,2,26],45:[748,8,33],46:[748,6,33],47:[966,5,25]}];l=Z.prototype;
l.zb=function(a,b,c){var d=this;switch(b){case "saveHD0":case "saveHD1":return this.la[b]=c,c.onclick=function(a){return function(){var b=d.B&&d.B[a];b&&b.ua?(b=b.ua,b=Ca(rm(b),"octet-stream",!0,b.th.replace(".json",".img")),r(b)):d.Ba("Hard drive "+a+" is not available.")}}(+b.slice(-1)),!0}return!1};
l.pc=function(a,b,c,d){this.ia=b;this.A=c;this.Ia=d;this.ba=a;if(d=kc(a,"drives"))this.ga=d;else if(this.qa)try{this.ga=eval("("+this.qa+")")}catch(e){r("HDC drive configuration error: "+e.message+" ("+this.qa+")")}this.S=jb(a,"ChipSet");this.H=0;this.ra=3;Pb(b,this,this.W?Pm:Qm);Rb(b,this,this.W?Rm:Sm);this.W&&(this.H++,this.S&&5180==this.S.ca&&this.H++,this.ra=2,b.S[496]=2,b.P[496]=2);Xd(c,19,this.Bl.bind(this));Xd(c,64,this.Cl.bind(this));this.reset();Tm(this)||t(this)};
l.Ub=function(a,b){if(!b)if(!a||!this.restore)Um(this),this.ba.pg&&Tm(this,!0);else if(!this.restore(a))return!1;return!0};l.Tb=function(a){return a?this.save():!0};l.ue=function(){return this.ba?this.ba.ue():""};l.zd=function(){return this.ba?this.ba.zd():""};l.reset=function(){Um(this,null,!0)};l.save=function(){var a=new ae(this);a.set(0,Vm(this));return a.data()};l.restore=function(a){return Um(this,a[0])};
l.Ub=function(a,b){if(!b)if(!a)Um(this),this.ba.pg&&Tm(this,!0);else if(!this.restore(a))return!1;return!0};l.Tb=function(a){return a?this.save():!0};l.ue=function(){return this.ba?this.ba.ue():""};l.zd=function(){return this.ba?this.ba.zd():""};l.reset=function(){Um(this,null,!0)};l.save=function(){var a=new ae(this);a.set(0,Vm(this));return a.data()};l.restore=function(a){return Um(this,a[0])};
function Um(a,b,c){var d=0,e=!0;a.Qa=-1;if(a.W){if(b||(b=[0,0,0,0,0,0,0,64,0,[0,-1]]),a.K=b[d++],a.za=b[d++],a.L=b[d++],a.oa=b[d++],a.ma=b[d++],a.ka=b[d++],a.Z=b[d++],a.aa=b[d++],a.pa=b[d++],a.P=b[d++],"object"==typeof a.P){var f=a.P;a.P=f[0];a.Qa=f[1]}}else b||(b=[0,0,Array(14),0,0]),a.da=b[d++],a.aa=b[d++],a.I=b[d++],a.G=b[d++],a.D=b[d++],a.xa=b[d++],a.va=b[d++],a.sa=b[d++],f=b[d++],void 0!==f?a.Y=f:void 0===a.Y&&(a.Y=-1);void 0===a.B&&(a.B=Array(a.ga.length));b=b[d];void 0===b&&(b=[]);for(d=0;d<
a.B.length;d++){void 0===a.B[d]&&(a.B[d]={});var f=a.B[d],g=a,h=d,k=f,m=a.ga[d],q=b[d],y=c,w=0,z=!0;q||(q=[0,0,!1,Array(8)]);k.Qa=h;k.errorCode=q[w++];k.Kj=q[w++];k.qe=q[w++];k.fe=q[w++];k.ge=q[w++];k.Ya=q[w++];k.jb=q[w++];k.Id=q[w++];k.mb=q[w++];k.wd=q[w++];k.vb=q[w++];k.yf=g.W?0:1;k.name=m.name;void 0===k.name&&(k.name="Hard Drive");k.path=m.path;k.mode=m.mode||(k.path?"preload":"local");"demandro"!=k.mode&&"demandrw"!=k.mode||g.zd()||(k.mode="local");k.type=m.type;if(void 0===k.type||void 0===
Om[g.H][k.type])k.type=g.ra;m=Om[g.H][k.type];k.eb=m[2]||17;k.nb=m[3]||512;if(y&&g.S){var m=g.S,B=k.type;if(m.B){var y=null,Q=m.B[18];15<B&&(y=B,B=15);h?(Q=Q&240|B,B=26):(Q=Q&15|B<<4,B=25);var V=m;V.B&&(V.B[18]=Q,aj(V));null!=y&&m.B&&(m.B[B]=y,aj(m))}}void 0===k.ua&&(k.ua=null,g.Ba("Type "+k.type+' "'+k.name+'" is fixed disk '+h,!0));Wm(g,k);k.Ua=q[w++];k.Wa=null;k.ua&&(g=q[w],void 0!==g&&0>k.ua.restore(g)&&(z=!1),z&&void 0!==k.Ua&&(k.Wa=k.ua.seek(k.Id,k.Ya,k.mb+k.yf)));z||(e=!1);null!=a.da&&1>=d&&