From c94c280eea37d53e16de044aa95a91a70221156f Mon Sep 17 00:00:00 2001 From: Jeff Parsons Date: Tue, 11 Nov 2014 09:35:47 -0800 Subject: [PATCH] Return NOT_READY response on a failed READ_ID FDC command; fixes #6 --- docs/pcjs/demos/pc-dbg.js | 2 +- docs/pcjs/demos/pc.js | 2 +- modules/pcjs/lib/fdc.js | 4 ++-- versions/pcjs/1.15.9/pc-dbg.js | 2 +- versions/pcjs/1.15.9/pc.js | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/pcjs/demos/pc-dbg.js b/docs/pcjs/demos/pc-dbg.js index 0313f62f8..5b6582861 100644 --- a/docs/pcjs/demos/pc-dbg.js +++ b/docs/pcjs/demos/pc-dbg.js @@ -615,7 +615,7 @@ function xl(a,b,c,d){var e=a.Ea[b];e.za&&(yl(a,e.Ve,e.za),e.Zl="",e.Ve="",e.za=n k.bn=function(a,b){this.ea(a,null,b,"STATUS",this.Da);return this.Da};k.$m=function(a,b){var c=0;this.tb=this.eb&&(this.Da&=-81,this.tb=this.eb=0);return c}; k.to=function(a,b,c){this.ea(a,b,c,"DATA["+this.eb+"]");this.eb=rl[a].zd){c=!1;this.tb=0;a=this.Qa();var d,e,f,g,h;b=a&31;switch(b){case 3:this.Qa(m.Pp);this.Qa(m.vp);this.Tb();break;case 4:e=this.Qa(m.Ff);this.gb=e&3;d=this.Ea[this.gb];this.Tb();this.bc((d.Ya&4278190080)>>>24,m.Sp);break;case 5:case 6:e=this.Qa(m.Ff);c=e>>2&1;this.gb=e&3;d=this.Ea[this.gb];d.Na=c;e=d.mb=this.Qa(m.Vj);f=this.Qa(m.Wj);g=d.Wa=this.Qa(m.Yj); h=this.Qa(m.Uh);d.cb=128<>2&1;this.gb=e&3;d=this.Ea[this.gb];e=d.mb;f=d.Na=c;g=d.Wa=1;h=0;d.Ya=0;d.za&&(d.Sa=d.za.seek(d.mb,d.Na,d.Wa))? -h=d.Sa.length:d.Ya=1088;Bl(this,d,a,c,e,f,g,h);c=!0;break;case 13:e=this.Qa(m.Ff);c=e>>2&1;this.gb=e&3;d=this.Ea[this.gb];e=d.mb;f=d.Na=c;g=1;h=this.Qa(m.Uh);d.cb=128<>2&1,e=this.Qa(m.Bp),d.mb+=e-d.ae,0>d.mb&&(d.mb=0),d.mb>=d.rb&&(d.mb=d.rb-1),d.ae=e,d.Ya=32,0==d.mb&&(d.Ya|=268435456),this.Tb(),c=!0}0>2&1;this.gb=e&3;d=this.Ea[this.gb];e=d.mb;f=d.Na=c;g=1;h=this.Qa(m.Uh);d.cb=128<>2&1,e=this.Qa(m.Bp),d.mb+=e-d.ae,0>d.mb&&(d.mb=0),d.mb>=d.rb&&(d.mb=d.rb-1),d.ae=e,d.Ya=32,0==d.mb&&(d.Ya|=268435456),this.Tb(),c=!0}0>>8,m.Qp);a.bc((b.Ya&16711680)>>>16,m.Rp);var l=0;if(e!=b.mb||f!=b.Na)l=g=1;c&128&&(f^=l,d||(l=0));a.bc(e+l,m.Vj);a.bc(f,m.Wj);a.bc(g,m.Yj);a.bc(h,m.Uh)}k.Qa=function(){var a=this.cc[this.tb];this.tb++;return a}; k.Tb=function(){this.tb=this.eb=0};k.bc=function(a){this.cc[this.eb++]=a};k.oi=function(a,b,c){void 0===b||0>b?this.sc(a,c):c(-1,!1)};k.pi=function(a,b){return void 0!==b&&0<=b?this.Fc(a,b):-1};k.qm=function(a,b){return void 0!==b&&0<=b?this.Rj(a,b):-1};k.qi=function(a){a.Ya=72;a.za&&(a.Sa=null,a.Ya=0,this.oa&&(Ui(this.oa,2,this,"dmaRead",a),Oi(this.oa,2)))};k.ri=function(a){a.Ya=72;a.za&&(a.za.nf?a.Ya=576:(a.Sa=null,a.Ya=0,this.oa&&(Ui(this.oa,2,this,"dmaWrite",a),Oi(this.oa,2))))}; k.pk=function(a){a.Ya=72;a.za&&(a.Sa=null,a.Ya=0,this.oa&&(a.He=0,a.wc=Array(4),a.Qf=!0,a.Wf=0,Ui(this.oa,2,this,"dmaFormat",a),Oi(this.oa,2),a.Qf=!1))};k.sc=function(a,b){var c=-1;if(!a.Ya&&a.za){do{if(a.Sa&&0<=(c=ol(a.Sa,a.ab++)))break;a.Sa=a.za.seek(a.mb,a.Na,a.Wa);if(!a.Sa){a.Ya=1088;break}a.ab=0;this.Nf(a)}while(1)}b(c,!1)}; diff --git a/docs/pcjs/demos/pc.js b/docs/pcjs/demos/pc.js index 1c4b9dc12..b141580de 100644 --- a/docs/pcjs/demos/pc.js +++ b/docs/pcjs/demos/pc.js @@ -584,7 +584,7 @@ function Pj(a,b,c){if(a=a.sa.listDisks){for(var d=0;d=this.$a&&(this.wa&=-81,this.pb=this.$a=0);return a}; k.sn=function(a,b){this.$a=Oj[c].ad){var d=!1;this.pb=0;var c=this.Ia(),e,f,h,g,m,n=c&31;switch(n){case 3:this.Ia(l.Oo);this.Ia(l.uo);this.Fb();break;case 4:f=this.Ia(l.Ve);this.Wa=f&3;e=this.xa[this.Wa];this.Fb();this.Rb((e.Sa&4278190080)>>>24,l.Ro);break;case 5:case 6:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];e.Ja=d;f=e.ib=this.Ia(l.gj);h=this.Ia(l.hj);g=e.Va=this.Ia(l.jj);m=this.Ia(l.eh);e.eb=128<< -m;e.td=this.Ia(l.po);this.Ia(l.nl);this.Ia(l.oo);6==n?this.zh(e):this.Ah(e);Yj(this,e,c,d,f,h,g,m);d=!0;break;case 7:f=this.Ia(l.Ve);this.Wa=f&3;e=this.xa[this.Wa];e.ib=e.rd=0;e.Sa=268435488;this.Fb();d=!0;break;case 8:e=this.xa[this.Wa];e.Ja=0;this.Fb();this.Rb(e.Wa|e.Ja<<2|e.Sa&255,l.pl);this.Rb(e.ib,l.Do);this.Wa=this.Wa+1&3;break;case 10:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];f=e.ib;h=e.Ja=d;g=e.Va=1;m=0;e.Sa=0;e.ta&&(e.Ka=e.ta.seek(e.ib,e.Ja,e.Va))?m=e.Ka.length:e.Sa=1088;Yj(this, +m;e.td=this.Ia(l.po);this.Ia(l.nl);this.Ia(l.oo);6==n?this.zh(e):this.Ah(e);Yj(this,e,c,d,f,h,g,m);d=!0;break;case 7:f=this.Ia(l.Ve);this.Wa=f&3;e=this.xa[this.Wa];e.ib=e.rd=0;e.Sa=268435488;this.Fb();d=!0;break;case 8:e=this.xa[this.Wa];e.Ja=0;this.Fb();this.Rb(e.Wa|e.Ja<<2|e.Sa&255,l.pl);this.Rb(e.ib,l.Do);this.Wa=this.Wa+1&3;break;case 10:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];f=e.ib;h=e.Ja=d;g=e.Va=1;m=0;e.Sa=0;e.ta&&(e.Ka=e.ta.seek(e.ib,e.Ja,e.Va))?m=e.Ka.length:e.Sa=72;Yj(this, e,c,d,f,h,g,m);d=!0;break;case 13:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];f=e.ib;h=e.Ja=d;g=1;m=this.Ia(l.eh);e.eb=128<>2&1,f=this.Ia(l.Ao),e.ib+=f-e.rd,0>e.ib&&(e.ib=0),e.ib>=e.fb&&(e.ib=e.fb-1),e.rd=f,e.Sa=32,0==e.ib&&(e.Sa|=268435456),this.Fb(),d=!0}0>>8,l.Po);a.Rb((b.Sa&16711680)>>>16,l.Qo);var m=0;if(e!=b.ib||f!=b.Ja)m=h=1;c&128&&(f^=m,d||(m=0));a.Rb(e+m,l.gj);a.Rb(f,l.hj);a.Rb(h,l.jj);a.Rb(g,l.eh)}k.Ia=function(){var a=this.Sb[this.pb];this.pb++;return a};k.Fb=function(){this.pb=this.$a=0};k.Rb=function(a){this.Sb[this.$a++]=a}; k.xh=function(a,b,c){void 0===b||0>b?this.yc(a,c):c(-1,!1)};k.yh=function(a,b){return void 0!==b&&0<=b?this.Bc(a,b):-1};k.ul=function(a,b){return void 0!==b&&0<=b?this.dj(a,b):-1};k.zh=function(a){a.Sa=72;a.ta&&(a.Ka=null,a.Sa=0,this.ja&&(Uh(this.ja,2,this,"dmaRead",a),Qh(this.ja,2)))};k.Ah=function(a){a.Sa=72;a.ta&&(a.ta.He?a.Sa=576:(a.Ka=null,a.Sa=0,this.ja&&(Uh(this.ja,2,this,"dmaWrite",a),Qh(this.ja,2))))}; diff --git a/modules/pcjs/lib/fdc.js b/modules/pcjs/lib/fdc.js index 06ac387cf..9a9a446d2 100644 --- a/modules/pcjs/lib/fdc.js +++ b/modules/pcjs/lib/fdc.js @@ -331,7 +331,7 @@ FDC.REG_DATA.CMD.MT = 0x80; // MT (Multi-Track; ie, data under b /* * FDC status/error results, generally assigned according to the corresponding ST0, ST1, ST2 or ST3 status bit. * - * TODO: Determine when EQUIP_CHECK is *really* set; "77 step pulses" sounds suspiciously like a typo. + * TODO: Determine when EQUIP_CHECK is *really* set; also, "77 step pulses" sounds suspiciously like a typo. */ FDC.REG_DATA.RES = {}; FDC.REG_DATA.RES.NONE = 0x00000000; // ST0 (IC): Normal termination of command (NT) @@ -1852,7 +1852,7 @@ FDC.prototype.doCmd = function() /* * TODO: Determine the appropriate response code(s) for the possible errors that can occur here. */ - drive.resCode = FDC.REG_DATA.RES.NO_DATA | FDC.REG_DATA.RES.INCOMPLETE; + drive.resCode = FDC.REG_DATA.RES.NOT_READY | FDC.REG_DATA.RES.INCOMPLETE; } this.pushResults(drive, bCmd, bHead, c, h, r, n); fIRQ = true; diff --git a/versions/pcjs/1.15.9/pc-dbg.js b/versions/pcjs/1.15.9/pc-dbg.js index 0313f62f8..5b6582861 100644 --- a/versions/pcjs/1.15.9/pc-dbg.js +++ b/versions/pcjs/1.15.9/pc-dbg.js @@ -615,7 +615,7 @@ function xl(a,b,c,d){var e=a.Ea[b];e.za&&(yl(a,e.Ve,e.za),e.Zl="",e.Ve="",e.za=n k.bn=function(a,b){this.ea(a,null,b,"STATUS",this.Da);return this.Da};k.$m=function(a,b){var c=0;this.tb=this.eb&&(this.Da&=-81,this.tb=this.eb=0);return c}; k.to=function(a,b,c){this.ea(a,b,c,"DATA["+this.eb+"]");this.eb=rl[a].zd){c=!1;this.tb=0;a=this.Qa();var d,e,f,g,h;b=a&31;switch(b){case 3:this.Qa(m.Pp);this.Qa(m.vp);this.Tb();break;case 4:e=this.Qa(m.Ff);this.gb=e&3;d=this.Ea[this.gb];this.Tb();this.bc((d.Ya&4278190080)>>>24,m.Sp);break;case 5:case 6:e=this.Qa(m.Ff);c=e>>2&1;this.gb=e&3;d=this.Ea[this.gb];d.Na=c;e=d.mb=this.Qa(m.Vj);f=this.Qa(m.Wj);g=d.Wa=this.Qa(m.Yj); h=this.Qa(m.Uh);d.cb=128<>2&1;this.gb=e&3;d=this.Ea[this.gb];e=d.mb;f=d.Na=c;g=d.Wa=1;h=0;d.Ya=0;d.za&&(d.Sa=d.za.seek(d.mb,d.Na,d.Wa))? -h=d.Sa.length:d.Ya=1088;Bl(this,d,a,c,e,f,g,h);c=!0;break;case 13:e=this.Qa(m.Ff);c=e>>2&1;this.gb=e&3;d=this.Ea[this.gb];e=d.mb;f=d.Na=c;g=1;h=this.Qa(m.Uh);d.cb=128<>2&1,e=this.Qa(m.Bp),d.mb+=e-d.ae,0>d.mb&&(d.mb=0),d.mb>=d.rb&&(d.mb=d.rb-1),d.ae=e,d.Ya=32,0==d.mb&&(d.Ya|=268435456),this.Tb(),c=!0}0>2&1;this.gb=e&3;d=this.Ea[this.gb];e=d.mb;f=d.Na=c;g=1;h=this.Qa(m.Uh);d.cb=128<>2&1,e=this.Qa(m.Bp),d.mb+=e-d.ae,0>d.mb&&(d.mb=0),d.mb>=d.rb&&(d.mb=d.rb-1),d.ae=e,d.Ya=32,0==d.mb&&(d.Ya|=268435456),this.Tb(),c=!0}0>>8,m.Qp);a.bc((b.Ya&16711680)>>>16,m.Rp);var l=0;if(e!=b.mb||f!=b.Na)l=g=1;c&128&&(f^=l,d||(l=0));a.bc(e+l,m.Vj);a.bc(f,m.Wj);a.bc(g,m.Yj);a.bc(h,m.Uh)}k.Qa=function(){var a=this.cc[this.tb];this.tb++;return a}; k.Tb=function(){this.tb=this.eb=0};k.bc=function(a){this.cc[this.eb++]=a};k.oi=function(a,b,c){void 0===b||0>b?this.sc(a,c):c(-1,!1)};k.pi=function(a,b){return void 0!==b&&0<=b?this.Fc(a,b):-1};k.qm=function(a,b){return void 0!==b&&0<=b?this.Rj(a,b):-1};k.qi=function(a){a.Ya=72;a.za&&(a.Sa=null,a.Ya=0,this.oa&&(Ui(this.oa,2,this,"dmaRead",a),Oi(this.oa,2)))};k.ri=function(a){a.Ya=72;a.za&&(a.za.nf?a.Ya=576:(a.Sa=null,a.Ya=0,this.oa&&(Ui(this.oa,2,this,"dmaWrite",a),Oi(this.oa,2))))}; k.pk=function(a){a.Ya=72;a.za&&(a.Sa=null,a.Ya=0,this.oa&&(a.He=0,a.wc=Array(4),a.Qf=!0,a.Wf=0,Ui(this.oa,2,this,"dmaFormat",a),Oi(this.oa,2),a.Qf=!1))};k.sc=function(a,b){var c=-1;if(!a.Ya&&a.za){do{if(a.Sa&&0<=(c=ol(a.Sa,a.ab++)))break;a.Sa=a.za.seek(a.mb,a.Na,a.Wa);if(!a.Sa){a.Ya=1088;break}a.ab=0;this.Nf(a)}while(1)}b(c,!1)}; diff --git a/versions/pcjs/1.15.9/pc.js b/versions/pcjs/1.15.9/pc.js index 1c4b9dc12..b141580de 100644 --- a/versions/pcjs/1.15.9/pc.js +++ b/versions/pcjs/1.15.9/pc.js @@ -584,7 +584,7 @@ function Pj(a,b,c){if(a=a.sa.listDisks){for(var d=0;d=this.$a&&(this.wa&=-81,this.pb=this.$a=0);return a}; k.sn=function(a,b){this.$a=Oj[c].ad){var d=!1;this.pb=0;var c=this.Ia(),e,f,h,g,m,n=c&31;switch(n){case 3:this.Ia(l.Oo);this.Ia(l.uo);this.Fb();break;case 4:f=this.Ia(l.Ve);this.Wa=f&3;e=this.xa[this.Wa];this.Fb();this.Rb((e.Sa&4278190080)>>>24,l.Ro);break;case 5:case 6:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];e.Ja=d;f=e.ib=this.Ia(l.gj);h=this.Ia(l.hj);g=e.Va=this.Ia(l.jj);m=this.Ia(l.eh);e.eb=128<< -m;e.td=this.Ia(l.po);this.Ia(l.nl);this.Ia(l.oo);6==n?this.zh(e):this.Ah(e);Yj(this,e,c,d,f,h,g,m);d=!0;break;case 7:f=this.Ia(l.Ve);this.Wa=f&3;e=this.xa[this.Wa];e.ib=e.rd=0;e.Sa=268435488;this.Fb();d=!0;break;case 8:e=this.xa[this.Wa];e.Ja=0;this.Fb();this.Rb(e.Wa|e.Ja<<2|e.Sa&255,l.pl);this.Rb(e.ib,l.Do);this.Wa=this.Wa+1&3;break;case 10:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];f=e.ib;h=e.Ja=d;g=e.Va=1;m=0;e.Sa=0;e.ta&&(e.Ka=e.ta.seek(e.ib,e.Ja,e.Va))?m=e.Ka.length:e.Sa=1088;Yj(this, +m;e.td=this.Ia(l.po);this.Ia(l.nl);this.Ia(l.oo);6==n?this.zh(e):this.Ah(e);Yj(this,e,c,d,f,h,g,m);d=!0;break;case 7:f=this.Ia(l.Ve);this.Wa=f&3;e=this.xa[this.Wa];e.ib=e.rd=0;e.Sa=268435488;this.Fb();d=!0;break;case 8:e=this.xa[this.Wa];e.Ja=0;this.Fb();this.Rb(e.Wa|e.Ja<<2|e.Sa&255,l.pl);this.Rb(e.ib,l.Do);this.Wa=this.Wa+1&3;break;case 10:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];f=e.ib;h=e.Ja=d;g=e.Va=1;m=0;e.Sa=0;e.ta&&(e.Ka=e.ta.seek(e.ib,e.Ja,e.Va))?m=e.Ka.length:e.Sa=72;Yj(this, e,c,d,f,h,g,m);d=!0;break;case 13:f=this.Ia(l.Ve);d=f>>2&1;this.Wa=f&3;e=this.xa[this.Wa];f=e.ib;h=e.Ja=d;g=1;m=this.Ia(l.eh);e.eb=128<>2&1,f=this.Ia(l.Ao),e.ib+=f-e.rd,0>e.ib&&(e.ib=0),e.ib>=e.fb&&(e.ib=e.fb-1),e.rd=f,e.Sa=32,0==e.ib&&(e.Sa|=268435456),this.Fb(),d=!0}0>>8,l.Po);a.Rb((b.Sa&16711680)>>>16,l.Qo);var m=0;if(e!=b.ib||f!=b.Ja)m=h=1;c&128&&(f^=m,d||(m=0));a.Rb(e+m,l.gj);a.Rb(f,l.hj);a.Rb(h,l.jj);a.Rb(g,l.eh)}k.Ia=function(){var a=this.Sb[this.pb];this.pb++;return a};k.Fb=function(){this.pb=this.$a=0};k.Rb=function(a){this.Sb[this.$a++]=a}; k.xh=function(a,b,c){void 0===b||0>b?this.yc(a,c):c(-1,!1)};k.yh=function(a,b){return void 0!==b&&0<=b?this.Bc(a,b):-1};k.ul=function(a,b){return void 0!==b&&0<=b?this.dj(a,b):-1};k.zh=function(a){a.Sa=72;a.ta&&(a.Ka=null,a.Sa=0,this.ja&&(Uh(this.ja,2,this,"dmaRead",a),Qh(this.ja,2)))};k.Ah=function(a){a.Sa=72;a.ta&&(a.ta.He?a.Sa=576:(a.Ka=null,a.Sa=0,this.ja&&(Uh(this.ja,2,this,"dmaWrite",a),Qh(this.ja,2))))};