Added support for converting numbers to/from octal, along with improved support for binary numbers
This commit is contained in:
parent
375ddc12f3
commit
1265104e6d
15 changed files with 888 additions and 789 deletions
|
|
@ -1,8 +1,8 @@
|
|||
(function(){var l,n={me:1,ne:3,oe:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Ub:65,Ic:66,Kc:67,Xb:68,E:69,Nc:70,Oc:71,Pc:72,Qc:73,Xc:74,Yc:75,Zb:76,ed:77,fd:78,hd:79,jd:80,Q:81,pd:82,sd:83,yd:84,zd:85,Ad:86,Bd:87,Dd:88,Ed:89,Fd:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Ve:97,We:98,Xe:99,d:100,e:101,Ye:102,Ze:103,$e:104,af:105,bf:106,k:107,cf:108,
|
||||
df:109,n:110,ef:111,p:112,q:113,r:114,ff:115,t:116,hf:117,jf:118,kf:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126};
|
||||
function aa(a){var b=16,c;if(a){b||(b=10);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
|
||||
function t(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ba(a){return"0x"+t(a,2)}function v(a){return"0x"+t(a,4)}function ea(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function fa(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
||||
function ga(){var a=ha();return-1!==a.indexOf("pcjs.org",a.length-8)}var ja={"&":"&","<":"<",">":">",'"':""","'":"'"};function ka(a){return a.replace(/[&<>"']/g,function(a){return ja[a]})}function la(a,b){return(a+" ").slice(0,b)}function ma(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
||||
function aa(a){var b=16,c;if(a){b||(b=10);var d=a.charAt(0),e=0<a.indexOf(",");e&&(a=a.replace(/,/g,""));"#"==d?(b=8,d=null):"$"==d&&(b=16,d=null);null==d?a=a.substr(1):("0"==d&&(d=a.charAt(1),"b"==d&&e&&(b=2,d=null),"o"==d?(b=8,d=null):"x"==d&&(b=16,d=null)),null==d?a=a.substr(2):(d=a.charAt(a.length-1).toLowerCase(),"y"==d?(b=2,d=null):"."==d?(b=10,d=null):"h"==d&&(b=16,d=null),null==d&&(a=a.substr(0,a.length-1))));var f,d=a;((e=b)&&10!=e?16==e?null!==d.match(/^[0-9a-f]+$/i):8==e?null!==d.match(/^[0-7]+$/):
|
||||
2==e&&null!==d.match(/^[01]+$/):null!==d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|0)}return c}function t(a,b,c){var d="";b?8<b&&(b=8):b=a&-65536?8:4;if(null==a||isNaN(a))for(;0<b--;)d="?"+d;else for(;0<b--;){var e=a&15,e=e+(0<=e&&9>=e?48:55),d=String.fromCharCode(e)+d;a>>=4}return(c?"0x":"")+d}function ba(a){return t(a,2,!0)}function v(a){return t(a,4,!0)}function ea(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}
|
||||
function fa(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ga(){var a=ha();return-1!==a.indexOf("pcjs.org",a.length-8)}var ja={"&":"&","<":"<",">":">",'"':""","'":"'"};function ka(a){return a.replace(/[&<>"']/g,function(a){return ja[a]})}function la(a,b){return(a+" ").slice(0,b)}function ma(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
||||
var na={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"};function oa(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var h=d+e>>1,g;g=c(b,a[h]);0<g?d=h+1:(e=h,f=!g)}return f?d:~d}var pa=Date.now||function(){return+new Date};
|
||||
function qa(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}function ra(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
|
||||
function sa(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
||||
|
|
@ -101,7 +101,7 @@ function Td(a){z.call(this,"ROM",a,Td);this.B=null;this.D=a.addr;this.j=a.size;t
|
|||
Td.prototype.Ea=function(){if(this.Qa){if(this.H){var a=this.H,b=this.id,c=this.D,d=this.j,e=this.Qa,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,m=g.a;if(void 0!==k){var p=f,k=[k>>>0,h],q=oa(p,k,a.uc);0>q&&p.splice(-(q+1),0,k)}m&&(g.a=m.replace(/''/g,'"'))}a.G.push({gf:b,F:c,Wd:d,Qa:e,tc:f})}delete this.Qa}return!0};Td.prototype.Ia=function(){return!0};
|
||||
function Ud(a,b,c,d){if(d)a.ja("Unable to load system ROM (error "+d+": "+b+")");else{db(a.Ab,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.B=f;else if(h)for(a.B=Array(4*h.length),d=c=0;c<h.length;c++)a.B[d++]=h[c]&255,a.B[d++]=h[c]>>8&255,a.B[d++]=h[c]>>16&255,a.B[d++]=h[c]>>24&255;else a.B=e;a.Qa=e.symbols;if(!a.B.length){w("Empty ROM: "+b);return}if(1==a.B.length){w(a.B[0]);return}}catch(g){a.ja("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.B=Array(b.length),e=0;e<b.length;e++)a.B[e]=aa(b[e]);Wd(a)}}
|
||||
function Wd(a){if(!nb(a))if(!a.I)F(a);else if(a.B&&a.u){a.j||(a.j=a.B.length);if(a.B.length!=a.j)ob(a,"ROM size (0x"+t(a.B.length)+") does not match specified size ("+("0x"+t(a.j))+")");else if(Xd(a,a.D)){var b=[];"number"==typeof a.w?b.push(a.w):null!=a.w&&a.w.length&&(b=a.w);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.u,h=d.j,g=[],k=d.D>>>f.sa;0<h&&k<f.X.length;)g.push(f.X[k++]),h-=f.Ha;f=d.u;d=d.j;h=0;for(e>>>=f.sa;0<d&&e<f.X.length;){k=g[h++];if(!k)break;f.X[e++]=k;d-=f.Ha}}delete a.B}F(a)}}
|
||||
function Wd(a){if(!nb(a))if(!a.I)F(a);else if(a.B&&a.u){a.j||(a.j=a.B.length);if(a.B.length!=a.j)ob(a,"ROM size ("+t(a.B.length,8,!0)+") does not match specified size ("+t(a.j,8,!0)+")");else if(Xd(a,a.D)){var b=[];"number"==typeof a.w?b.push(a.w):null!=a.w&&a.w.length&&(b=a.w);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.u,h=d.j,g=[],k=d.D>>>f.sa;0<h&&k<f.X.length;)g.push(f.X[k++]),h-=f.Ha;f=d.u;d=d.j;h=0;for(e>>>=f.sa;0<d&&e<f.X.length;){k=g[h++];if(!k)break;f.X[e++]=k;d-=f.Ha}}delete a.B}F(a)}}
|
||||
function Xd(a,b){if(zb(a.u,b,a.j,a.G?1:ac)){var c;for(c=0;c<a.B.length;c++)Eb(a.u,b+c,a.B[c]);if(a.G&&256==b){for(c=0;c<Vd.length;c++)Eb(a.u,Vd[c],118);Qc(a.b,function(a){return function(b){if(0<=Vd.indexOf(b)){var c=!1,h=a.b,g=a.H;if(5==b)switch(c=!0,h.T){case 2:Yd(a,String.fromCharCode(h.V));break;case 9:for(var k=Xc(h),m="",p=255;p--;){var q=a.b.aa(k++);if(36==q)break;m+=String.fromCharCode(q)}Yd(a,m);break;default:c=!1}c?Md.call(h):g&&(a.g("\nCP/M vector "+v(b)),H(h,b),g.pa());b=!0}else b=!1;
|
||||
return b}}(a));Sc(a.b,b)}return!0}return!1}function Yd(a,b){b=b.replace(/\r/g,"");a.Ga&&(a.Ga.value+=b,a.Ga.scrollTop=a.Ga.scrollHeight)}Ma(function(){for(var a=D(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Td(d);hb(d,c)}});function Zd(a){z.call(this,"RAM",a,Zd);this.w=a.addr;this.j=a.size;this.B=!1}bb(Zd);l=Zd.prototype;l.Pa=function(a,b,c,d){this.u=b;this.b=c;this.H=d;F(this)};l.Ea=function(a,b){b||this.reset();return!0};l.Ia=function(a){return a?this.save():!0};
|
||||
l.reset=function(){!this.B&&this.j&&zb(this.u,this.w,this.j,1)&&(this.B=!0);this.B||w("No RAM allocated")};l.save=function(){return null};l.restore=function(){return!0};Ma(function(){for(var a=D(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Zd(d);hb(d,c)}});function $d(a){z.call(this,"Keyboard",a,$d,65536);(a=a.model)&&!ae[a]&&Oa("Unrecognized Keyboard8080 model: "+a);this.u=ae[a]||{};this.reset();F(this)}bb($d);var be={};be[n.Ub]=37;be[n.Xb]=39;be[n.Zb]=32;
|
||||
|
|
@ -143,15 +143,15 @@ function xe(a,b){var c=a.O&b;b&15||(c>>=4);var c=re[c],d=((a.J&12)>>2)+6;a.J&16&
|
|||
l.Pd=function(a,b){var c=this.Y;E(this,a,null,b,"DATA",c);this.Da&=-3;return c};l.Od=function(a,b){var c=this.Da;E(this,a,null,b,"STATUS",c);return c};
|
||||
l.Zd=function(a,b,c){E(this,a,b,c,"DATA");this.ca=b;this.Da&=-6;jb(this,"transmitByte("+ba(b)+")");if(19==b)this.ba=!0;else if(17==b)this.ba=!1;else if(this.M&&this.M.call(this.K,b),this.j)8==b?(this.j.value=this.j.value.slice(0,-1),0<this.D&&this.D--):(a=(a=na[b])?"<"+a+">":String.fromCharCode(b),c=a.length,9==b?(b=this.ia||8,c=b-this.D%b,this.ia&&(a=la("",c))):13==b&&(this.D=c=0,a="\n"),this.ea&&!this.D&&c&&(a=String.fromCharCode(this.ea)+a),this.j.value+=a,this.j.scrollTop=this.j.scrollHeight,
|
||||
this.D+=c);else if(null!=this.w){if(10==b||1024<=this.w.length)this.g(this.w),this.w="";10!=b&&(this.w+=String.fromCharCode(b))}this.b&&Kc(this.b,this.la,xe(this,240))};l.Yd=function(a,b,c){E(this,a,b,c,"CONTROL");this.L?(this.P=b,this.P&64&&(this.L=!1)):(this.J=b,this.L=!0)};l.Xd=function(a,b,c){E(this,a,b,c,"BAUDRATES");this.O=b};var ue={0:pe.prototype.Pd,1:pe.prototype.Od},ve={0:pe.prototype.Zd,1:pe.prototype.Yd,2:pe.prototype.Xd};
|
||||
Ma(function(){for(var a=D(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new pe(d);hb(d,c)}});function ye(a){z.call(this,"Debugger",a,ye);this.ba=this.la=this.J=0;this.P=!1;this.j=-1;this.w=[];this.ea={}}bb(ye);var ze={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
||||
function Ae(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
|
||||
case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}ye.prototype.Mb=function(){return-1};ye.prototype.Nb=function(){};
|
||||
Ma(function(){for(var a=D(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new pe(d);hb(d,c)}});function ye(a){z.call(this,"Debugger",a,ye);this.ba=this.la=this.J=0;this.P=!1;this.j=-1;this.w=[];this.ea={}}bb(ye);var ze={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};ye.prototype.Mb=function(){return-1};ye.prototype.Nb=function(){};
|
||||
ye.prototype.Eb=function(a,b,c){if(b)if(a){0>this.j&&this.w.length&&(this.j=0);if(0>this.j||a!=this.w[this.j])this.w.splice(0,0,a),this.j=0;this.j--}else this.P?a="end":a=this.w[this.j+1];b=[];if(a){a=a.toLowerCase().replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var h=a.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==c&&!e||!h)b.push(ma(a.substring(d,f))),d=f+1}}return b};
|
||||
function Ae(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
|
||||
case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}
|
||||
function Be(a,b,c){var d;if(b){b=Ce(a,b);for(var e=0,f=!1,h=b,g=[],k=[],m=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<m.length;){var p=m[e++],q=p.length,p=ma(p);if(!p){f=!0;break}p=De(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}g.push(p);if(e==m.length)break;var p=m[e++],x=p.length;k.length&&ze[p]<ze[k[k.length-1]]&&Ae(g,k,1);k.push(p);b=b.substr(q+x)}Ae(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Ee(a,null,
|
||||
d))}return d}function Ce(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Be(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?t(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)b=b.replace("["+c[1]+"]","unimplemented");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.ba-a.la}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
||||
function De(a,b,c,d){var e;null!=b?(e=a.Mb(b),0<=e?e=a.Nb(e):(e=a.ea[b],null==e&&(e=aa(b))),null!=e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
|
||||
function Ee(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,m=8,p="";void 0===m?m=32:32<m&&(m=32);if(null==k||isNaN(k))for(;0<m--;)p="?"+p;else for(;0<m--;)p=(k&1?"1":"0")+p,k>>=1;h=p+"b"+h;d>>=8}d="0x"+t(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Fe(a,b){if(b)return Ee(a,b,a.ea[b]);var c=0;for(b in a.ea)Ee(a,b,a.ea[b]),c++;return 0<c}
|
||||
function Ge(a){z.call(this,"Debugger",a,Ge);this.style=He;this.M=W();this.Ua=W();this.ca=W();this.G=[];this.I=this.O=this.D=[];Ie(this);this.ia=0;Je(this);this.wa=[];Ke(this,a.messages);this.za=a.commands;var b=this;window?void 0===window.pc8080&&(window.pc8080=function(a){return qc(b,a)}):void 0===global.pc8080&&(global.pc8080=function(a){return qc(b,a)})}bb(Ge,ye);
|
||||
function Ee(a,b,c){var d,e=!1;if(void 0!==c){var e=!0,f=c,h=0;d="";if(!h||4<h)h=4;for(var g=0;g<h;g++){d&&(d=","+d);var k=f&255,m=8,p="";m?32<m&&(m=32):m=32;if(null==k||isNaN(k))for(;0<m--;)p="?"+p;else for(;0<m--;)p=(k&1?"1":"0")+p,k>>=1;d=p+d;f>>=8}f=c;h=0;g="";h?11<h&&(h=11):h=f&-65536?11:6;if(null==f||isNaN(f))for(;0<h--;)g="?"+g;else for(;0<h--;)g=String.fromCharCode((f&7)+48)+g,f>>=3;d=t(c,0,!0)+" "+c+". "+("0o"+g)+" "+("0b"+d)}a.g((null!=b?b+": ":"")+d);return e}
|
||||
function Fe(a,b){if(b)return Ee(a,b,a.ea[b]);var c=0;for(b in a.ea)Ee(a,b,a.ea[b]),c++;return 0<c}function Ge(a){z.call(this,"Debugger",a,Ge);this.style=He;this.M=W();this.Ua=W();this.ca=W();this.G=[];this.I=this.O=this.D=[];Ie(this);this.ia=0;Je(this);this.wa=[];Ke(this,a.messages);this.za=a.commands;var b=this;window?void 0===window.pc8080&&(window.pc8080=function(a){return qc(b,a)}):void 0===global.pc8080&&(global.pc8080=function(a){return qc(b,a)})}bb(Ge,ye);
|
||||
var Le={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression","int [#]":"request interrupt",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},
|
||||
He=8080,Me="NONE ACI ADC ADD ADI ANA ANI CALL CC CM CNC CNZ CP CPE CPO CZ CMA CMC CMP CPI DAA DAD DCR DCX DI EI HLT IN INR INX JMP JC JM JNC JNZ JP JPE JPO JZ LDA LDAX LHLD LXI MOV MVI NOP ORA ORI OUT PCHL POP PUSH RAL RAR RET RC RM RNC RNZ RP RPE RPO RZ RLC RRC RST SBB SBI SHLD SPHL STA STAX STC SUB SUI XCHG XRA XRI XTHL".split(" "),Ne="NONE ADC ADC ADD ADD AND AND CALL CALLC CALLS CALLNC CALLNZ CALLNS CALLP CALLNP CALLZ NOT CMC CMP CMP DAA ADD DEC DEC CLI STI HLT IN INC INC JMP JC JS JNC JNZ JNS JP JNP JZ MOV MOV MOV MOV MOV MOV NOP OR OR OUT JMP POP PUSH RCL RCR RET RETC RETS RETNC RETNZ RETNS RETP RETNP RETZ ROL ROR RST SBB SBB MOV MOV MOV MOV STC SUB SUB XCHG XOR XOR XCHG".split(" "),
|
||||
Oe="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),Pe=[[45],[42,2067,32],[71,2131,18193],[29,2067],[28,17],[22,17],[44,17,32],[63],[45,32768],[21,18963,2067],[40,18193,2131],[23,2067],[28,273],[22,273],[44,273,32],[64],[45,32768],[42,2323,32],[71,2387,18193],[29,2323],[28,529],[22,529],[44,529,32],[52],[45,32768],[21,18963,2323],[40,18193,2387],[23,2323],[28,785],[22,785],[44,785,32],[53],[45,32768],[42,2579,32],[68,115,18963],[29,2579],[28,1041],[22,1041],[44,1041,32],[20],[45,32768],[21,18963,
|
||||
|
|
@ -205,7 +205,7 @@ a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwo
|
|||
ca){for(R in tb)if(f[1]==R){var Ze=a.wa[R];Ze?(f.shift(),f.shift(),Ze(f)):a.g("no dump registered for "+Z);break a}Z||(ca=a.pb||"db")}else a.pb=ca;if("dh"==ca){var $e=Z,af=va,bf="",cf=0,da=a.fa,Ha=a.L;if(Ha.length){var ia=+$e||a.Wa,qb=+af||10;isNaN(ia)?ia=qb:bf="more ";ia>Ha.length&&(a.g("note: only "+Ha.length+" available"),ia=Ha.length);da-=ia;0>da&&(null==Ha[Ha.length-1].F?(ia=da+ia,da=0):da+=Ha.length);var pd=[];"call"==af&&(qb=1E5,pd=["CALL"]);for(void 0!==$e&&a.g(ia+" instructions earlier:");0<
|
||||
qb&&da!=a.fa;){var df=Ha[da++];if(null==df.F)break;var Lb=W(df.F),jg=ia--,ef=Ff(a,Lb,"history",jg);(!pd.length||0<=ef.indexOf(pd[0]))&&a.g(ef);Lb.Lb&&(da+=Lb.Lb,qb-=Lb.Lb,ia-=Lb.Lb);da>=Ha.length&&(da=0);a.Wa=ia;cf++;qb--}}cf||(a.g("no "+bf+"history available"),a.Wa=void 0)}else{var tc=Re(a,Z);if(tc){var uc=0;va&&("l"==va.charAt(0)&&(va=va.substr(1)||Hb),uc=De(a,va)>>>0,65536<uc&&(uc=65536));for(var Ya="",vc="dd"==ca?4:"dw"==ca?2:1,wc=vc*uc||128,kg=wc+15>>4||1;kg--&&0<wc;){var xc=0,qd=0,Mb,Nb="",
|
||||
rd="",Z=X(tc.F);for(Mb=16;0<Mb&&0<wc;Mb--){var yc=a.aa(tc,1),xc=xc|yc<<(qd++<<3);qd==vc&&(Nb+=t(xc,2*vc),Nb+=1==vc?9==Mb?"-":" ":" ",xc=qd=0);rd+=32<=yc&&128>yc?String.fromCharCode(yc):".";wc--}Ya&&(Ya+="\n");Ya+=Z+" "+Nb+(0==Mb?" "+rd:"")}Ya&&a.g(Ya);a.Ua=tc}}}}break;case "e":if("else"==f[0])break;var zc=1,ff=255,gf=a.aa,hf=a.va;"ew"==f[0]&&(zc=2,ff=65535,gf=a.$a,hf=a.Hb);var jf=zc<<1,kf=f[1];if(null==kf)a.g("edit memory commands:"),a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");
|
||||
else{var Ac=Re(a,kf);if(Ac)for(var Bc=2;Bc<f.length;Bc++){var Ob=Be(a,f[Bc]);if(void 0===Ob){a.g("unrecognized value: "+f[Bc]);break}Ob&~ff&&a.g("warning: "+t(Ob)+" exceeds "+zc+"-byte value");var lg=gf.call(a,Ac);a.g("changing "+X(Ac.F)+" from 0x"+t(lg,jf)+" to 0x"+t(Ob,jf));hf.call(a,Ac,Ob,zc)}}break;case "f":Lf(a,f[1]);break;case "g":a:{var lf=f[1],mg=b;if(void 0!==lf){var sd=Re(a,lf,!0);if(!sd)break a;Ve(a,sd,mg);a.Za(a.I,sd,!0)}a.bb(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;
|
||||
else{var Ac=Re(a,kf);if(Ac)for(var Bc=2;Bc<f.length;Bc++){var Ob=Be(a,f[Bc]);if(void 0===Ob){a.g("unrecognized value: "+f[Bc]);break}Ob&~ff&&a.g("warning: "+t(Ob)+" exceeds "+zc+"-byte value");var lg=gf.call(a,Ac);a.g("changing "+X(Ac.F)+" from "+t(lg,jf,!0)+" to "+t(Ob,jf,!0));hf.call(a,Ac,Ob,zc)}}break;case "f":Lf(a,f[1]);break;case "g":a:{var lf=f[1],mg=b;if(void 0!==lf){var sd=Re(a,lf,!0);if(!sd)break a;Ve(a,sd,mg);a.Za(a.I,sd,!0)}a.bb(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;
|
||||
case "h":a:{var td;if(a.C.Aa)td="halting",a.pa();else{if(mb(a,!0))break a;td="already halted"}c||a.g(td)}break;case "i":if("if"==f[0]){var ud;var Pb=b.substr(2),Pb=ma(Pb);Be(a,Pb)?(c||a.g("true: "+Pb),ud=!0):(c||a.g("false: "+Pb),ud=!1);ud||(d=!1);break}if("int"==f[0]){var Cc;var ng=f[1];if(a.b.ua&512){var vd=Be(a,ng);null==vd?Cc=!1:(a.g("requesting interrupt level "+vd),Hd(a.b,vd),Cc=!0)}else a.g("interrupts disabled (use rif=1 to enable)"),Cc=!1;Cc||(d=!1);break}var wd=f[1];if(wd&&"?"!=wd){var xd=
|
||||
De(a,wd);if(void 0!==xd){var og=Ib(a.u,xd);a.g(v(xd)+": "+ba(og))}}else a.g("input commands:"),a.g("\ti [p]\tread port [p]"),a.g("warning: port accesses can affect hardware state");break;case "k":var pg=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var yd=0,mf=W(),Qb=W(a.b.na);for(a.g("stack trace for "+X(Qb.F));10>yd;){for(var Za=null,qg=256;65536>Qb.F>>>0;){mf.F=a.$a(Qb,2);if(null==Qb.F||!qg--)break;for(var rg=a,Dc=mf,nf=
|
||||
null,Rb=Dc.F,of=Rb,zd=1;6>=zd&&Rb;zd++){if(2<zd){Dc.F=Rb;var Ec=Ff(rg,Dc);if(0<=Ec.indexOf("CALL")){var pf=Ec.indexOf(" ");if(Rb+(Ec.indexOf(" ",pf+1)-pf-1)/2==of){nf=Ec;break}}}Rb--}Dc.F=of;if(Za=nf)break}if(!Za||null==Za)break;var qf=null;if("ks"==pg){var rf=Za.match(/[0-9A-F]+$/);rf&&(qf=Nf(a,rf[0]))}Za=la(Za,50)+" ;"+(qf||"stack="+X(Qb.F));a.g(Za);yd++}yd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Nf(a,f[1],!0);break}break;case "m":a:{var Ia,Ja=null,O=f[1];"?"==O&&(O=void 0);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
(function(){var k,m={pd:1,qd:3,rd:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,kb:65,Mb:66,Ob:67,nb:68,E:69,Rb:70,Sb:71,Tb:72,Ub:73,ac:74,bc:75,pb:76,ic:77,jc:78,mc:79,nc:80,Q:81,tc:82,wc:83,Bc:84,Cc:85,Dc:86,Ec:87,Gc:88,Hc:89,Ic:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Zd:97,$d:98,ae:99,d:100,e:101,be:102,ce:103,de:104,ee:105,fe:106,k:107,ge:108,
|
||||
he:109,n:110,ie:111,p:112,q:113,r:114,je:115,t:116,ke:117,le:118,me:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126};
|
||||
function aa(a){var b=16,c;if(a){b||(b=10);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
|
||||
function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ba(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function da(){var a=ea();return-1!==a.indexOf("pcjs.org",a.length-8)}
|
||||
var fa={"&":"&","<":"<",">":">",'"':""","'":"'"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}function ha(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var ia={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"},ja=Date.now||function(){return+new Date};
|
||||
function aa(a){var b=16,c;if(a){b||(b=10);var d=a.charAt(0),e=0<a.indexOf(",");e&&(a=a.replace(/,/g,""));"#"==d?(b=8,d=null):"$"==d&&(b=16,d=null);null==d?a=a.substr(1):("0"==d&&(d=a.charAt(1),"b"==d&&e&&(b=2,d=null),"o"==d?(b=8,d=null):"x"==d&&(b=16,d=null)),null==d?a=a.substr(2):(d=a.charAt(a.length-1).toLowerCase(),"y"==d?(b=2,d=null):"."==d?(b=10,d=null):"h"==d&&(b=16,d=null),null==d&&(a=a.substr(0,a.length-1))));var f,d=a;((e=b)&&10!=e?16==e?null!==d.match(/^[0-9a-f]+$/i):8==e?null!==d.match(/^[0-7]+$/):
|
||||
2==e&&null!==d.match(/^[01]+$/):null!==d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|0)}return c}function p(a,b,c){var d="";b?8<b&&(b=8):b=a&-65536?8:4;if(null==a||isNaN(a))for(;0<b--;)d="?"+d;else for(;0<b--;){var e=a&15,e=e+(0<=e&&9>=e?48:55),d=String.fromCharCode(e)+d;a>>=4}return(c?"0x":"")+d}function ba(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}
|
||||
function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function da(){var a=ea();return-1!==a.indexOf("pcjs.org",a.length-8)}var fa={"&":"&","<":"<",">":">",'"':""","'":"'"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}function ha(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
||||
var ia={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"},ja=Date.now||function(){return+new Date};
|
||||
function ka(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function ma(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
||||
typeof b){var l="",n;for(n in b)b.hasOwnProperty(n)&&(l&&(l+="&"),l+=n+"="+encodeURIComponent(b[n]));l=l.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(l)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function ea(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
||||
|
|
@ -22,10 +23,10 @@ var Sa="undefined"!==typeof ArrayBuffer,Ta=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,
|
|||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function Ua(a){r.call(this,"Panel",a,Ua)}x(Ua);k=Ua.prototype;k.V=function(a,b,c,d){return this.v&&this.v.V(a,b,c,d)||this.a&&this.a.V(a,b,c,d)||this.m&&this.m.V(a,b,c,d)?!0:this.parent.V.call(this,a,b,c,d)};k.qa=function(a,b,c,d){this.v=a;this.j=b;this.a=c;this.N=d;this.m=Va(a,"Keyboard")};k.ga=function(a,b){b||Wa();return!0};k.ia=function(){return!0};k.Aa=function(){};
|
||||
function Wa(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=A(d),f=Na(e.id);f||(a=!0,f=new Ua(e));Pa(f,d);a&&D(f)}}ya(Wa);
|
||||
function Xa(a,b,c){r.call(this,"Bus",a,Xa);this.a=b;this.N=c;this.i=a.busWidth||16;this.u=Math.pow(2,this.i);this.g=this.u-1|0;this.j=16>=this.i?10:20>=this.i?12:24>=this.i?14:15;this.c=1<<this.j;this.w=this.c>>2;this.f=this.c-1;this.m=this.u/this.c|0;this.s=this.m-1;this.v=[];this.o=[];this.B=[];this.C=[];a=new E;Ya(a,this.N);this.b=Array(this.m);for(b=0;b<this.m;b++)this.b[b]=a;D(this)}x(Xa);Xa.prototype.reset=function(){};Xa.prototype.ga=function(a,b){b||this.reset();return!0};
|
||||
function Za(a,b,c,d){for(var e=b,f=c,h=e>>>a.j;0<f&&h<a.b.length;){var g=a.b[h],l=h*a.c,n=a.c-(e-l);n>f&&(n=f);if(g&&g.size){if(g.type==d){if(e+f<=g.Ma)return g.eb+=g.Ma-e,g.Ma=e,!0;if(e>=g.Ma+g.eb){n=g.size-(e-l);n>f&&(n=f);g.eb=e-g.Ma+n;e=l+a.c;f-=n;h++;continue}}return $a(1,e,f)}e=new E(e,n,a.c,d);Ya(e,a.N,g);a.b[h++]=e;e=l+a.c;f-=n}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+ab[d]+" at "+("0x"+p(b,4))),!0):$a(2,b,c)}
|
||||
Xa.prototype.J=function(a){return this.b[(a&this.g)>>>this.j].Qa(a&this.f,a)};function bb(a,b){return a.b[(b&a.g)>>>a.j].cb(b&a.f,b)}function cb(a,b){var c=b&a.f,d=(b&a.g)>>>a.j;return c!=a.f?a.b[d].kd(c,b):a.b[d++].Qa(c,b)|a.b[d&a.s].Qa(0,b+1)<<8}Xa.prototype.aa=function(a,b){this.b[(a&this.g)>>>this.j].Ra(a&this.f,b&255,a)};function db(a,b,c){a.b[(b&a.g)>>>a.j].Hb(b&a.f,c&255,b)}
|
||||
function eb(a,b,c){var d=b&a.f,e=(b&a.g)>>>a.j;d!=a.f?a.b[e].ld(d,c&65535,b):(a.b[e++].Ra(d,c&255,b),a.b[e&a.s].Ra(0,c>>8&255,b+1))}function fb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var l=+e+d;l<=h;l++)void 0!==f.v[l]?q("Input port 0x"+p(l,4)+" already registered"):f.v[l]=[g,!1]}}
|
||||
function hb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var l=+e+d;l<=h;l++)void 0!==f.o[l]?q("Output port 0x"+p(l,4)+" already registered"):f.o[l]=[g,!1]}}function $a(a,b,c){q("Memory block error ("+a+": "+p(b)+","+p(c)+")");return!1}var ib;if(Sa){var jb=new ArrayBuffer(2);(new DataView(jb)).setUint16(0,256,!0);ib=256===(new Uint16Array(jb))[0]}else ib=!1;var kb=ib;
|
||||
function Za(a,b,c,d){for(var e=b,f=c,h=e>>>a.j;0<f&&h<a.b.length;){var g=a.b[h],l=h*a.c,n=a.c-(e-l);n>f&&(n=f);if(g&&g.size){if(g.type==d){if(e+f<=g.Ma)return g.eb+=g.Ma-e,g.Ma=e,!0;if(e>=g.Ma+g.eb){n=g.size-(e-l);n>f&&(n=f);g.eb=e-g.Ma+n;e=l+a.c;f-=n;h++;continue}}return $a(1,e,f)}e=new E(e,n,a.c,d);Ya(e,a.N,g);a.b[h++]=e;e=l+a.c;f-=n}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+ab[d]+" at "+p(b,4,!0)),!0):$a(2,b,c)}Xa.prototype.J=function(a){return this.b[(a&this.g)>>>this.j].Qa(a&this.f,a)};
|
||||
function bb(a,b){return a.b[(b&a.g)>>>a.j].cb(b&a.f,b)}function cb(a,b){var c=b&a.f,d=(b&a.g)>>>a.j;return c!=a.f?a.b[d].kd(c,b):a.b[d++].Qa(c,b)|a.b[d&a.s].Qa(0,b+1)<<8}Xa.prototype.aa=function(a,b){this.b[(a&this.g)>>>this.j].Ra(a&this.f,b&255,a)};function db(a,b,c){a.b[(b&a.g)>>>a.j].Hb(b&a.f,c&255,b)}function eb(a,b,c){var d=b&a.f,e=(b&a.g)>>>a.j;d!=a.f?a.b[e].ld(d,c&65535,b):(a.b[e++].Ra(d,c&255,b),a.b[e&a.s].Ra(0,c>>8&255,b+1))}
|
||||
function fb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var l=+e+d;l<=h;l++)void 0!==f.v[l]?q("Input port "+p(l,4,!0)+" already registered"):f.v[l]=[g,!1]}}function hb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var l=+e+d;l<=h;l++)void 0!==f.o[l]?q("Output port "+p(l,4,!0)+" already registered"):f.o[l]=[g,!1]}}function $a(a,b,c){q("Memory block error ("+a+": "+p(b)+","+p(c)+")");return!1}var ib;
|
||||
if(Sa){var jb=new ArrayBuffer(2);(new DataView(jb)).setUint16(0,256,!0);ib=256===(new Uint16Array(jb))[0]}else ib=!1;var kb=ib;
|
||||
function E(a,b,c,d){this.id=lb+=2;this.a=null;this.Ma=a;this.eb=b;this.size=c||0;this.type=d||mb;this.c=d==nb;Ya(this);this.na=this.Ab=!1;if(c)if(Sa)this.j=new ArrayBuffer(c),this.A=new DataView(this.j,0,c),this.b=new Uint8Array(this.j,0,c),this.i=new Uint16Array(this.j,0,c>>1),this.a=new Int32Array(this.j,0,c>>2),ob(this,kb?pb:qb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;ob(this,rb)}else ob(this)}var mb=0,nb=2,ab=["NONE","RAM","ROM","VID","H/W"],lb=0;
|
||||
E.prototype={constructor:E,parent:null,save:function(){var a,b;if(Sa)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.A.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Sa)for(b=0;b<a.length;b++)this.A.setInt32(b<<2,a[b],!0);else this.a=a;return this.na=!0}return!1},m:function(){return 255},o:function(){},v:function(a,b){return this.Qa(a++,b++)|this.Qa(a,b)<<8},s:function(a,b,c){this.Ra(a++,b&255,c++);this.Ra(a,b>>8,c)},C:function(a){return this.a[a>>
|
||||
2]>>>((a&3)<<3)&255},I:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},S:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.na=!0},ea:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.na=!0},w:function(a,b){return this.cb(a,b)},K:function(a,b){return this.Eb(a,b)},O:function(a,b,c){this.c||this.Hb(a,b,c)},W:function(a,
|
||||
|
|
@ -91,8 +92,8 @@ function pc(a){r.call(this,"ROM",a,pc);this.b=null;this.m=a.addr;this.c=a.size;t
|
|||
pc.prototype.ga=function(){this.i&&(this.N&&this.N.a(this.id,this.m,this.c,this.i),delete this.i);return!0};pc.prototype.ia=function(){return!0};
|
||||
function qc(a,b,c,d){if(d)a.M("Unable to load system ROM (error "+d+": "+b+")");else{La(a.Ua,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(g){a.M("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=aa(b[e]);sc(a)}}
|
||||
function sc(a){if(!Ra(a))if(!a.g)D(a);else if(a.b&&a.j){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size (0x"+p(a.b.length)+") does not match specified size ("+("0x"+p(a.c))+")";a.l.error=!0;a.M(b)}else if(tc(a,a.m)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.j,h=d.c,g=[],l=d.m>>>f.j;0<h&&l<f.b.length;)g.push(f.b[l++]),h-=f.c;f=d.j;d=d.c;h=0;for(e>>>=f.j;0<d&&e<f.b.length;){l=g[h++];if(!l)break;f.b[e++]=l;d-=f.c}}delete a.b}D(a)}}
|
||||
function tc(a,b){if(Za(a.j,b,a.c,a.v?1:nb)){var c;for(c=0;c<a.b.length;c++)db(a.j,b+c,a.b[c]);if(a.v&&256==b){for(c=0;c<rc.length;c++)db(a.j,rc[c],118);Qb(a.a,function(a){return function(b){if(0<=rc.indexOf(b)){var c=!1,h=a.a,g=a.N;if(5==b)switch(c=!0,h.D){case 2:uc(a,String.fromCharCode(h.F));break;case 9:for(var l=Wb(h),n="",y=255;y--;){var t=a.a.J(l++);if(36==t)break;n+=String.fromCharCode(t)}uc(a,n);break;default:c=!1}c?jc.call(h):g&&(a.da("\nCP/M vector 0x"+p(b,4)),F(h,b),Cb(g));b=!0}else b=
|
||||
function sc(a){if(!Ra(a))if(!a.g)D(a);else if(a.b&&a.j){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size ("+p(a.b.length,8,!0)+") does not match specified size ("+p(a.c,8,!0)+")";a.l.error=!0;a.M(b)}else if(tc(a,a.m)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.j,h=d.c,g=[],l=d.m>>>f.j;0<h&&l<f.b.length;)g.push(f.b[l++]),h-=f.c;f=d.j;d=d.c;h=0;for(e>>>=f.j;0<d&&e<f.b.length;){l=g[h++];if(!l)break;f.b[e++]=l;d-=f.c}}delete a.b}D(a)}}
|
||||
function tc(a,b){if(Za(a.j,b,a.c,a.v?1:nb)){var c;for(c=0;c<a.b.length;c++)db(a.j,b+c,a.b[c]);if(a.v&&256==b){for(c=0;c<rc.length;c++)db(a.j,rc[c],118);Qb(a.a,function(a){return function(b){if(0<=rc.indexOf(b)){var c=!1,h=a.a,g=a.N;if(5==b)switch(c=!0,h.D){case 2:uc(a,String.fromCharCode(h.F));break;case 9:for(var l=Wb(h),n="",y=255;y--;){var t=a.a.J(l++);if(36==t)break;n+=String.fromCharCode(t)}uc(a,n);break;default:c=!1}c?jc.call(h):g&&(a.da("\nCP/M vector "+p(b,4,!0)),F(h,b),Cb(g));b=!0}else b=
|
||||
!1;return b}}(a));Sb(a.a,b)}return!0}return!1}function uc(a,b){b=b.replace(/\r/g,"");a.va&&(a.va.value+=b,a.va.scrollTop=a.va.scrollHeight)}ya(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new pc(d);Pa(d,c)}});function vc(a){r.call(this,"RAM",a,vc);this.f=a.addr;this.c=a.size;this.b=!1}x(vc);k=vc.prototype;k.qa=function(a,b,c,d){this.j=b;this.a=c;this.N=d;D(this)};k.ga=function(a,b){b||this.reset();return!0};k.ia=function(a){return a?this.save():!0};
|
||||
k.reset=function(){!this.b&&this.c&&Za(this.j,this.f,this.c,1)&&(this.b=!0);this.b||q("No RAM allocated")};k.save=function(){return null};k.restore=function(){return!0};ya(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new vc(d);Pa(d,c)}});function wc(a){r.call(this,"Keyboard",a,wc);(a=a.model)&&!xc[a]&&Aa("Unrecognized Keyboard8080 model: "+a);this.b=xc[a]||{};this.reset();D(this)}x(wc);var yc={};yc[m.kb]=37;yc[m.nb]=39;yc[m.pb]=32;
|
||||
var zc={ba:1978.1,h:{},lb:yc,Ga:{},ya:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},Z={ba:100,h:{},lb:{},Ga:{},ya:{setup:120},Lb:{ca:130,INIT:127},ha:{ca:130,gc:1,fc:2,ec:4,dc:8,hc:16,rb:32,qb:63,yc:64,nd:128,INIT:0},cc:127};Z.h[46]=3;Z.h[m.nc]=5;Z.h[m.mc]=6;Z.h[m.Hc]=7;Z.h[m.Bc]=8;Z.h[m.Ec]=9;Z.h[m.Q]=10;Z.h[39]=16;Z.h[221]=20;Z.h[219]=21;Z.h[m.Ub]=22;Z.h[m.Cc]=23;Z.h[m.tc]=24;Z.h[m.E]=25;Z.h[49]=26;Z.h[37]=32;Z.h[40]=34;Z.h[117]=35;Z.h[19]=35;Z.h[192]=36;Z.h[189]=37;Z.h[57]=38;Z.h[55]=39;
|
||||
|
|
|
|||
Loading…
Reference in a new issue