1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 08:41:30 +00:00

Deploying to gh-pages from @ sehugg/8bitworkshop@02cb20ec87 🚀

This commit is contained in:
sehugg 2022-09-01 15:57:33 +00:00
parent faf5ffd3ac
commit 3dc361fd58
153 changed files with 3044 additions and 2595 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

7
gen/arm32-2P7SS3PK.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
import{J as W,h as E,k as F,p as N,u as _}from"./chunk-3NXXB3IA.js";import{$ as w,J as I,U as M,V as r,W as k,Y as T,_ as O,da as U,g as b}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var h=0,P=2,A=8,j=T([[r.A,A+0,128],[r.B,A+1,128],[r.SELECT,P,-2],[r.START,P,-1],[r.UP,h,-16],[r.DOWN,h,-32],[r.LEFT,h,-64],[r.RIGHT,h,-128],[r.P2_A,A+2,128],[r.P2_B,A+3,128],[r.P2_UP,h,-1],[r.P2_DOWN,h,-2],[r.P2_LEFT,h,-4],[r.P2_RIGHT,h,-8]]);var S=262,z=258-16,d=454,q=28,K=4,Y=S*60*K,D=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e}saveState(){return{regs:this.regs.slice(0)}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e])}static stateToLongString(t){let e="";return e+=M(t.regs,0,32),e}},L=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e,t==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e]|0);this.offset=t.offset|0,this.dll=t.dll|0,this.dlstart=t.dlstart|0,this.dli=!!t.dli,this.h16=!!t.h16,this.h8=!!t.h8}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(t){t?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=~128}readDLLEntry(t){if(this.dll>=16384)return;let e=t.read(this.dll);this.offset=e&15,this.h16=(e&64)!=0,this.h8=(e&32)!=0,this.dlstart=(t.read(this.dll+1)<<8)+t.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(t.read(this.dll)&128)!=0}isHoley(t){return!!(t&32768&&(this.h16&&t&4096||this.h8&&t&2048))}readDMA(t){return this.isHoley(t)?0:(this.cycles+=3,this.bus.read(t))}doDMA(t){if(this.bus=t,this.cycles=0,this.pixels.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=16,this.offset<0&&this.readDLLEntry(t);let s=this.dlstart&65280,a=this.dlstart&255;do{let m=t.read(s+(a+0&511)),f=t.read(s+(a+1&511));if(f==0||s>=16384)break;let G=t.read(s+(a+2&511)),v=t.read(s+(a+3&511)),p=!1;if((f&31)==0){var e=v>>5,c=32-(v&31),n=t.read(s+(a+4&511)),i=f&128;p=(f&32)!=0,a+=5,this.cycles+=10}else{var n=v,e=f>>5,c=32-(f&31),i=0;a+=4,this.cycles+=8}let B=m+((G+(p?0:this.offset)&255)<<8);n*=2;let $=(this.regs[28]&3)+(i?4:0),C=p&&(this.regs[28]&16)!=0;C&&(c*=2);for(var o=0;o<c;o++){let u=this.readDMA(C?B+(o>>1):B+o);if(p){let x=(this.regs[20]+this.offset<<8)+u;C&&o&1&&(x++,this.cycles-=3),u=this.readDMA(x)}switch($){case 0:for(let x=0;x<4;x++){var l=u>>6&3;l>0&&(this.pixels[n]=this.pixels[n+1]=this.regs[(e<<2)+l]),u<<=2,n=n+2&511}break;case 2:case 3:for(let x=0;x<8;x++){var l=u&128?1:0;l>0&&(this.pixels[n]=this.regs[(e<<2)+l]),u<<=1,n=n+1&511}break}}}while(this.cycles<d);this.offset-=1}return this.cycles}doInterrupt(){return this.dli&&this.offset<0?(this.dli=!1,!0):!1}static stateToLongString(t){let e="";return e+=M(t.regs,0,32),e+=`
DLL: $`+b((t.regs[12]<<8)+t.regs[16],4)+" @ $"+b(t.dll,4),e+=`
DL: $`+b(t.dlstart,4),e+=`
Offset: `+t.offset,e+=`
DLI? `+t.dli,e}},R=class extends N{constructor(){super();this.cpuFrequency=1789772;this.canvasWidth=320;this.numTotalScanlines=S;this.numVisibleScanlines=z;this.defaultROMSize=49152;this.cpuCyclesPerLine=113.5;this.sampleRate=Y;this.ram=new Uint8Array(4096);this.regs6532=new Uint8Array(4);this.tia=new D;this.maria=new L;this.lastFrameCycles=0;this.xtracyc=0;this.cpu=new _,this.read=w([[8,13,15,t=>(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,3,t=>(this.xtracyc++,this.inputs[t])],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=w([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,3,(t,e)=>{this.xtracyc++,this.regs6532[t]=e}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.probeDMABus=this.probeIOBus(this),this.handler=k(this.inputs,j),this.pokey1=new E,this.audioadapter=new F(this.pokey1,K,Y)}readConst(t){let e=this.probe;this.probe=null;let c=this.read(t);return this.probe=e,c}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}advanceCPU(){var t=super.advanceCPU();return this.xtracyc&&(t+=this.xtracyc,this.probe.logClocks(this.xtracyc),this.xtracyc=0),t}advanceFrame(t){var e=this.pixels,c=0,n,i=0,o=0,l=0;this.probe.logNewFrame();for(var s=0;s<S;s++){this.scanline=s;var a=s<z;for(this.maria.setVBLANK(!a),this.maria.WSYNC=0;i<q&&!this.maria.WSYNC;){if(t&&t()){t=null,s=999;break}i+=this.advanceCPU()<<2,l++}if(a){let f=this.maria.doDMA(this.probeDMABus);if(this.probe.logClocks(f>>2),i+=f,e)for(var m=0;m<320;m++)e[c++]=H[this.maria.pixels[m]]}for((a||s==S-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());i<d;){if(this.maria.WSYNC){this.probe.logClocks(d-i>>2),i=d;break}if(t&&t()){t=null,s=999;break}i+=this.advanceCPU()<<2,l++}this.audio&&this.audioadapter.generate(this.audio),i-=d,o+=i,this.probe.logNewScanline()}return this.lastFrameCycles=o,l}getRasterX(){return this.lastFrameCycles%d}getRasterY(){return Math.floor(this.lastFrameCycles/d)}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=O(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[h]=255,this.inputs[P]=1+2+8}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return D.stateToLongString(e.tia);case"MARIA":return L.stateToLongString(e.maria)+`
Scanline: `+this.scanline}}},H=new Uint32Array(256);for(g=0;g<256;g++)H[g]=U(g);var g;var X=[{id:"sprites.dasm",name:"Sprites (ASM)"},{id:"wsync.c",name:"WSYNC"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"}],V=class extends W{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49152,type:"rom"}]}}}newMachine(){return new R}getPresets(){return X}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}};I.atari7800=V;
//# sourceMappingURL=atari7800-MWD72SQA.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,7 +0,0 @@
import{H as W,h as E,k as N,n as F,s as _}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as w,J as k,U as M,V as r,W as T,Y as O,_ as U,g,s as I}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var f=0,R=2,A=8,q=O([[r.A,A+0,128],[r.B,A+1,128],[r.SELECT,R,-2],[r.START,R,-1],[r.UP,f,-16],[r.DOWN,f,-32],[r.LEFT,f,-64],[r.RIGHT,f,-128],[r.P2_A,A+2,128],[r.P2_B,A+3,128],[r.P2_UP,f,-1],[r.P2_DOWN,f,-2],[r.P2_LEFT,f,-4],[r.P2_RIGHT,f,-8]]);var S=262,z=258-16,d=454,X=28,K=4,Y=S*60*K,P=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e}saveState(){return{regs:this.regs.slice(0)}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e])}static stateToLongString(t){let e="";return e+=M(t.regs,0,32),e}},B=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e,t==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e]|0);this.offset=t.offset|0,this.dll=t.dll|0,this.dlstart=t.dlstart|0,this.dli=!!t.dli,this.h16=!!t.h16,this.h8=!!t.h8}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(t){t?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=~128}readDLLEntry(t){if(this.dll>=16384)return;let e=t.read(this.dll);this.offset=e&15,this.h16=(e&64)!=0,this.h8=(e&32)!=0,this.dlstart=(t.read(this.dll+1)<<8)+t.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(t.read(this.dll)&128)!=0}isHoley(t){return!!(t&32768&&(this.h16&&t&4096||this.h8&&t&2048))}readDMA(t){return this.isHoley(t)?0:(this.cycles+=3,this.bus.read(t))}doDMA(t){if(this.bus=t,this.cycles=0,this.pixels.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=16,this.offset<0&&this.readDLLEntry(t);let s=this.dlstart&65280,a=this.dlstart&255;do{let b=t.read(s+(a+0&511)),n=t.read(s+(a+1&511));if(n==0||s>=16384)break;let $=t.read(s+(a+2&511)),v=t.read(s+(a+3&511)),p=!1;if((n&31)==0){var e=v>>5,o=32-(v&31),x=t.read(s+(a+4&511)),i=n&128;p=(n&32)!=0,a+=5,this.cycles+=10}else{var x=v,e=n>>5,o=32-(n&31),i=0;a+=4,this.cycles+=8}let D=b+(($+(p?0:this.offset)&255)<<8);x*=2;let j=(this.regs[28]&3)+(i?4:0),C=p&&(this.regs[28]&16)!=0;C&&(o*=2);for(var l=0;l<o;l++){let m=this.readDMA(C?D+(l>>1):D+l);if(p){let h=(this.regs[20]+this.offset<<8)+m;C&&l&1&&(h++,this.cycles-=3),m=this.readDMA(h)}switch(j){case 0:for(let h=0;h<4;h++){var c=m>>6&3;c>0&&(this.pixels[x]=this.pixels[x+1]=this.regs[(e<<2)+c]),m<<=2,x=x+2&511}break;case 2:case 3:for(let h=0;h<8;h++){var c=m&128?1:0;c>0&&(this.pixels[x]=this.regs[(e<<2)+c]),m<<=1,x=x+1&511}break}}}while(this.cycles<d);this.offset-=1}return this.cycles}doInterrupt(){return this.dli&&this.offset<0?(this.dli=!1,!0):!1}static stateToLongString(t){let e="";return e+=M(t.regs,0,32),e+=`
DLL: $`+g((t.regs[12]<<8)+t.regs[16],4)+" @ $"+g(t.dll,4),e+=`
DL: $`+g(t.dlstart,4),e+=`
Offset: `+t.offset,e+=`
DLI? `+t.dli,e}},L=class extends F{constructor(){super();this.cpuFrequency=1789772;this.canvasWidth=320;this.numTotalScanlines=S;this.numVisibleScanlines=z;this.defaultROMSize=49152;this.cpuCyclesPerLine=113.5;this.sampleRate=Y;this.ram=new Uint8Array(4096);this.regs6532=new Uint8Array(4);this.tia=new P;this.maria=new B;this.lastFrameCycles=0;this.xtracyc=0;this.cpu=new _,this.read=w([[8,13,15,t=>(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,3,t=>(this.xtracyc++,this.inputs[t])],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=w([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,3,(t,e)=>{this.xtracyc++,this.regs6532[t]=e}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.probeDMABus=this.probeIOBus(this),this.handler=T(this.inputs,q),this.pokey1=new E,this.audioadapter=new N(this.pokey1,K,Y)}readConst(t){let e=this.probe;this.probe=null;let o=this.read(t);return this.probe=e,o}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}advanceCPU(){var t=super.advanceCPU();return this.xtracyc&&(t+=this.xtracyc,this.probe.logClocks(this.xtracyc),this.xtracyc=0),t}advanceFrame(t){var e=this.pixels,o=0,x,i=0,l=0,c=0;this.probe.logNewFrame();for(var s=0;s<S;s++){this.scanline=s;var a=s<z;for(this.maria.setVBLANK(!a),this.maria.WSYNC=0;i<X&&!this.maria.WSYNC;){if(t&&t()){t=null,s=999;break}i+=this.advanceCPU()<<2,c++}if(a){let n=this.maria.doDMA(this.probeDMABus);if(this.probe.logClocks(n>>2),i+=n,e)for(var b=0;b<320;b++)e[o++]=G[this.maria.pixels[b]]}for((a||s==S-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());i<d;){if(this.maria.WSYNC){this.probe.logClocks(d-i>>2),i=d;break}if(t&&t()){t=null,s=999;break}i+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),i-=d,l+=i,this.probe.logNewScanline()}return this.lastFrameCycles=l,c}getRasterX(){return this.lastFrameCycles%d}getRasterY(){return Math.floor(this.lastFrameCycles/d)}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=U(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[f]=255,this.inputs[R]=1+2+8}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0)}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return P.stateToLongString(e.tia);case"MARIA":return B.stateToLongString(e.maria)+`
Scanline: `+this.scanline}}},H=[0,4210752,7105644,9474192,11579568,13158600,14474460,16053492,17476,1074276,2393220,3448992,4241592,5296336,6088936,6880508,10352,1328260,2645144,3963052,5016764,6070476,6862044,7915756,6276,1586328,3166380,4745408,6062288,7378144,8431852,9747708,136,2105500,3947696,5789888,7368912,8947936,10526956,11842812,6029432,7610508,8928416,10246320,11563200,12616912,13671644,14725356,7864392,9445472,10763384,12081292,13398176,14451892,15506628,16560340,8650772,9969712,11287628,12605544,13660284,14715028,15507624,16561340,8912896,10231836,11550776,12606544,13661288,14716028,15508624,16562340,8132608,9451548,11031608,12349520,13404264,14457980,15512720,16566436,6040576,7883804,9463864,11306064,12622952,13939836,15256720,16572580,2898944,4742172,6585400,8428624,9745512,11325564,12641424,13958308,15360,2120736,4226112,6069340,7648372,9228428,10806436,12123320,14356,1858612,3701840,5281900,6861956,8178844,9495732,10812616,12332,1855564,3436648,5016708,6596764,7913652,8967372,10284256,10308,1591396,3172484,4490400,5807288,7124176,8178920,9232636],G=new Uint32Array(256),J=[];for(u=0;u<256;u++)G[u]=H[u>>1]|4278190080,J[u]="#"+g(I(H[u>>1]),6);var u;var Q=[{id:"sprites.dasm",name:"Sprites (ASM)"},{id:"wsync.c",name:"WSYNC"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"}],V=class extends W{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49152,type:"rom"}]}}}newMachine(){return new L}getPresets(){return Q}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}};k.atari7800=V;
//# sourceMappingURL=atari7800-NK3YZ73J.js.map

File diff suppressed because one or more lines are too long

10
gen/atari8-3V22L5XH.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import{a as M}from"./chunk-PVJ5UPJQ.js";import{A as S,H as _,p as g,x as b}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{J as n,O as a,U as x,a as l,g as o,u as p}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var d=class extends g{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.joymask0=0;this.joymask1=0;this.lightpen_x=0;this.lightpen_y=0}loadBIOS(e){var s=59940-57344+12288;e[s]=96,super.loadBIOS(e)}reset(){super.reset();for(var e=0;e<128;e++)this.exports.machine_key_up(this.sys,e);if(this.romptr&&this.romlen)if(this.exports.machine_load_rom(this.sys,this.romptr,this.romlen),this.prgstart=this.romarr[0]+(this.romarr[1]<<8),this.prgstart==2049&&(this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("prgstart",o(this.prgstart))),this.prgstart<32768){this.exports.machine_exec(this.sys,25e4);for(var s="\rSYS "+this.prgstart+"\r",t=0;t<s.length;t++){var i=s.charCodeAt(t);this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_down(this.sys,i),this.exports.machine_exec(this.sys,5e3),this.exports.machine_key_up(this.sys,i)}for(var t=0;t<1e5&&this.getPC()!=this.prgstart;t++)this.exports.machine_tick(this.sys)}else{this.exports.machine_exec(this.sys,100);for(var r=this.romarr[4]+this.romarr[5]*256,t=0;t<15e4&&this.getPC()!=r;t++)this.exports.machine_tick(this.sys)}}advanceFrame(e){var s=this.getRasterY(),t=Math.floor((this.numTotalScanlines-s)*19656/this.numTotalScanlines),i=this.probe!=null;return i&&this.exports.machine_reset_probe_buffer(),t=super.advanceFrameClock(e,t),i&&this.copyProbeData(),t}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var e=this.cpustatearr,s=e[2]+(e[3]<<8);return{PC:s,SP:e[9],A:e[6],X:e[7],Y:e[8],C:e[10]&1,Z:e[10]&2,I:e[10]&4,D:e[10]&8,V:e[10]&64,N:e[10]&128,o:this.readConst(s),R:e[19]!=55}}saveState(){this.exports.machine_save_state(this.sys,this.stateptr);let e=this.getDebugStateOffset(1),s=this.getDebugStateOffset(2),t=this.getDebugStateOffset(3),i=this.getDebugStateOffset(4),r=this.getDebugStateOffset(5),c=this.getDebugStateOffset(9);return{c:this.getCPUState(),state:this.statearr.slice(0),ram:this.statearr.slice(r,r+65536),cia1:this.statearr.slice(e,e+64),cia2:this.statearr.slice(s,s+64),vic:this.statearr.slice(t+1,t+1+64),sid:this.statearr.slice(i,i+32),pla:this.statearr.slice(c,c+16)}}loadState(e){this.statearr.set(e.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:392,height:272,overscan:!0,videoFrequency:50,aspect:392/272*.9365}}setKeyInput(e,s,t){if(!(e==16||e==17||e==18||e==224)){var i=0,r=0;switch(e){case 32:i=16;break;case 37:e=8,i=4;break;case 38:e=11,i=1;break;case 39:e=9,i=8;break;case 40:e=10,i=2;break;case 113:e=241;break;case 115:e=243;break;case 119:e=245;break;case 121:e=247;break;case 188:e=t&a.Shift?60:46;break;case 190:e=t&a.Shift?62:44;break;case 191:e=t&a.Shift?63:47;break;case 222:e=t&a.Shift?34:39;break;case 219:e=t&a.Shift?123:91;break;case 221:e=t&a.Shift?125:93;break;case 48:t&a.Shift&&(e=41);break;case 49:t&a.Shift&&(e=33);break;case 50:t&a.Shift&&(e=64);break;case 51:t&a.Shift&&(e=35);break;case 52:t&a.Shift&&(e=36);break;case 53:t&a.Shift&&(e=37);break;case 54:t&a.Shift&&(e=94);break;case 55:t&a.Shift&&(e=38);break;case 56:t&a.Shift&&(e=42);break;case 57:t&a.Shift&&(e=40);break;case 59:t&a.Shift&&(e=58);break;case 61:t&a.Shift&&(e=43);break;case 173:e=t&a.Shift?95:45;break}t&a.KeyDown?(this.exports.machine_key_down(this.sys,e),this.joymask0|=i,this.joymask1|=r):t&a.KeyUp&&(this.exports.machine_key_up(this.sys,e),this.joymask0&=~i,this.joymask1&=~r),this.exports.c64_joystick(this.sys,this.joymask0,this.joymask1)}}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getDebugStateOffset(e){var s=this.exports.machine_get_debug_pointer(this.sys,e);return s-this.sys}getDebugCategories(){return["CPU","ZPRAM","Stack","PLA","CIA","VIC","SID"]}getDebugInfo(e,s){switch(e){case"PLA":{let t="",i=s.pla[0],r=s.pla[3];return t+=`$0000 - $9FFF RAM
import{a as M}from"./chunk-YZQ2OPTV.js";import{C as S,J as _,r as g,z as b}from"./chunk-3NXXB3IA.js";import{J as n,O as a,U as x,a as l,g as o,u as p}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var d=class extends g{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.joymask0=0;this.joymask1=0;this.lightpen_x=0;this.lightpen_y=0}loadBIOS(e){var s=59940-57344+12288;e[s]=96,super.loadBIOS(e)}reset(){super.reset();for(var e=0;e<128;e++)this.exports.machine_key_up(this.sys,e);if(this.romptr&&this.romlen)if(this.exports.machine_load_rom(this.sys,this.romptr,this.romlen),this.prgstart=this.romarr[0]+(this.romarr[1]<<8),this.prgstart==2049&&(this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("prgstart",o(this.prgstart))),this.prgstart<32768){this.exports.machine_exec(this.sys,25e4);for(var s="\rSYS "+this.prgstart+"\r",t=0;t<s.length;t++){var i=s.charCodeAt(t);this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_down(this.sys,i),this.exports.machine_exec(this.sys,5e3),this.exports.machine_key_up(this.sys,i)}for(var t=0;t<1e5&&this.getPC()!=this.prgstart;t++)this.exports.machine_tick(this.sys)}else{this.exports.machine_exec(this.sys,100);for(var r=this.romarr[4]+this.romarr[5]*256,t=0;t<15e4&&this.getPC()!=r;t++)this.exports.machine_tick(this.sys)}}advanceFrame(e){var s=this.getRasterY(),t=Math.floor((this.numTotalScanlines-s)*19656/this.numTotalScanlines),i=this.probe!=null;return i&&this.exports.machine_reset_probe_buffer(),t=super.advanceFrameClock(e,t),i&&this.copyProbeData(),t}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var e=this.cpustatearr,s=e[2]+(e[3]<<8);return{PC:s,SP:e[9],A:e[6],X:e[7],Y:e[8],C:e[10]&1,Z:e[10]&2,I:e[10]&4,D:e[10]&8,V:e[10]&64,N:e[10]&128,o:this.readConst(s),R:e[19]!=55}}saveState(){this.exports.machine_save_state(this.sys,this.stateptr);let e=this.getDebugStateOffset(1),s=this.getDebugStateOffset(2),t=this.getDebugStateOffset(3),i=this.getDebugStateOffset(4),r=this.getDebugStateOffset(5),c=this.getDebugStateOffset(9);return{c:this.getCPUState(),state:this.statearr.slice(0),ram:this.statearr.slice(r,r+65536),cia1:this.statearr.slice(e,e+64),cia2:this.statearr.slice(s,s+64),vic:this.statearr.slice(t+1,t+1+64),sid:this.statearr.slice(i,i+32),pla:this.statearr.slice(c,c+16)}}loadState(e){this.statearr.set(e.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:392,height:272,overscan:!0,videoFrequency:50,aspect:392/272*.9365}}setKeyInput(e,s,t){if(!(e==16||e==17||e==18||e==224)){var i=0,r=0;switch(e){case 32:i=16;break;case 37:e=8,i=4;break;case 38:e=11,i=1;break;case 39:e=9,i=8;break;case 40:e=10,i=2;break;case 113:e=241;break;case 115:e=243;break;case 119:e=245;break;case 121:e=247;break;case 188:e=t&a.Shift?60:46;break;case 190:e=t&a.Shift?62:44;break;case 191:e=t&a.Shift?63:47;break;case 222:e=t&a.Shift?34:39;break;case 219:e=t&a.Shift?123:91;break;case 221:e=t&a.Shift?125:93;break;case 48:t&a.Shift&&(e=41);break;case 49:t&a.Shift&&(e=33);break;case 50:t&a.Shift&&(e=64);break;case 51:t&a.Shift&&(e=35);break;case 52:t&a.Shift&&(e=36);break;case 53:t&a.Shift&&(e=37);break;case 54:t&a.Shift&&(e=94);break;case 55:t&a.Shift&&(e=38);break;case 56:t&a.Shift&&(e=42);break;case 57:t&a.Shift&&(e=40);break;case 59:t&a.Shift&&(e=58);break;case 61:t&a.Shift&&(e=43);break;case 173:e=t&a.Shift?95:45;break}t&a.KeyDown?(this.exports.machine_key_down(this.sys,e),this.joymask0|=i,this.joymask1|=r):t&a.KeyUp&&(this.exports.machine_key_up(this.sys,e),this.joymask0&=~i,this.joymask1&=~r),this.exports.c64_joystick(this.sys,this.joymask0,this.joymask1)}}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getDebugStateOffset(e){var s=this.exports.machine_get_debug_pointer(this.sys,e);return s-this.sys}getDebugCategories(){return["CPU","ZPRAM","Stack","PLA","CIA","VIC","SID"]}getDebugInfo(e,s){switch(e){case"PLA":{let t="",i=s.pla[0],r=s.pla[3];return t+=`$0000 - $9FFF RAM
`,t+=`$A000 - $BFFF ${(r&3)==3?"BASIC ROM":"RAM"}
`,t+=`$C000 - $CFFF RAM
`,t+=`$D000 - $DFFF ${i?"I/O":(r&3)!=0?"CHAR ROM":"RAM"}
@ -11,4 +11,4 @@ import{a as M}from"./chunk-PVJ5UPJQ.js";import{A as S,H as _,p as g,x as b}from"
`,i+=`VIC Bank: $${o(r,4)} Scrn: $${o(m,4)} `,h?i+=`Bitmap: $${o(c&57344,4)}`:R?i+=`Char: ROM $${o(c,4)}`:i+=`Char: $${o(c,4)}`,i+=`
`,i+=x(t,53248,64),i}case"SID":{let t=s.sid,i="";return i+=x(t,54272,32),i}}}setPaddleInput(e,s){e==0&&(this.lightpen_x=s),e==1&&(this.lightpen_y=s);let t=22,i=36,r=228,c=220,m=p(0,255,(this.lightpen_x-t)/(r-t)*160+24),h=p(0,255,(this.lightpen_y-i)/(c-i)*200+50);this.exports.machine_set_mouse(this.sys,m,h)}};var v=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"23matches.c",name:"23 Matches"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"upandaway.c",name:"Up, Up and Away"},{id:"siegegame.c",name:"Siege Game"},{id:"joymove.c",name:"Sprite Movement"},{id:"sprite_collision.c",name:"Sprite Collision"},{id:"scroll1.c",name:"Scrolling (Single Buffer)"},{id:"scroll2.c",name:"Scrolling (Double Buffer)"},{id:"scroll3.c",name:"Scrolling (Multidirectional)"},{id:"scroll4.c",name:"Scrolling (Color RAM Buffering)"},{id:"scroll5.c",name:"Scrolling (Camera Following)"},{id:"side_scroller.c",name:"Side-Scrolling Game"},{id:"fullscrollgame.c",name:"Full-Scrolling Game"},{id:"test_multiplex.c",name:"Sprite Retriggering"},{id:"test_multispritelib.c",name:"Sprite Multiplexing Library"},{id:"scrolling_text.c",name:"Big Scrolling Text"},{id:"mcbitmap.c",name:"Multicolor Bitmap Mode"},{id:"musicplayer.c",name:"Music Player"},{id:"siddemo.c",name:"SID Player Demo"},{id:"climber.c",name:"Climber Game"}],C={main:[{name:"6510 Registers",start:0,size:2,type:"io"},{name:"BIOS Reserved",start:512,size:167},{name:"Default Screen RAM",start:1024,size:1024,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:40960,size:8192,type:"rom"},{name:"Upper RAM",start:49152,size:4096,type:"ram"},{name:"Character ROM",start:53248,size:4096,type:"rom"},{name:"VIC-II I/O",start:53248,size:1024,type:"io"},{name:"SID",start:54272,size:1024,type:"io"},{name:"Color RAM",start:55296,size:1024,type:"io"},{name:"CIA 1",start:56320,size:256,type:"io"},{name:"CIA 2",start:56576,size:256,type:"io"},{name:"I/O 1",start:56832,size:256,type:"io"},{name:"I/O 2",start:57088,size:256,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},f=class extends _{newMachine(){return new d("c64")}getPresets(){return v}getDefaultExtension(){return".c"}readAddress(e){return this.machine.readConst(e)}getMemoryMap(){return C}showHelp(){window.open("https://8bitworkshop.com/docs/platforms/c64/","_help")}getROMExtension(e){return e&&e[0]==1&&e[1]==8?".prg":".bin"}},A=class extends M{constructor(){super(...arguments);this.getToolForFilename=b;this.getOpcodeMetadata=S}getPresets(){return v}getDefaultExtension(){return".c"}loadROM(e,s){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"c64.zip",cfgfile:"c64.cfg",driver:"c64",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(s),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1
`],preInit:function(i){}});else{this.loadROMFile(s),this.loadRegion(":quickload",s);var t=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",t)}}start(){}getMemoryMap(){return C}};n.c64=f;n["c64.wasm"]=f;n["c64.mame"]=A;
//# sourceMappingURL=c64-HQRY4UD3.js.map
//# sourceMappingURL=c64-5RBJNWVU.js.map

File diff suppressed because one or more lines are too long

26
gen/chunk-3NXXB3IA.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
import{c as _,g as i}from"./chunk-UWX4LVLA.js";var p=[[{N:0},{N:1}],[{N:1},{N:0}],[{V:0},{V:1}],[{V:1},{V:0}],[{C:0},{C:1}],[{C:1},{C:0}],[{Z:0},{Z:1}],[{Z:1},{Z:0}]];function d(C,e){if(C==null||e==null)return null;for(var s in C)if(e[s]!=="undefined")return C[s]==e[s];for(var s in e)if(C[s]!=="undefined")return C[s]==e[s];return null}var S=class{constructor(e){this.pc2minclocks={};this.pc2maxclocks={};this.jsrresult={};this.MAX_CYCLES=2e3;this.platform=e}getClockCountsAtPC(e){var s=this.platform.readAddress(e),t=this.platform.getOpcodeMetadata(s,e);return t}traceInstructions(e,s,t,n,o){this.WRAP_CLOCKS&&(this.pc2minclocks[e]!==void 0&&(s=Math.min(s,this.pc2minclocks[e])),this.pc2maxclocks[e]!==void 0&&(t=Math.max(t,this.pc2maxclocks[e]))),o||(o={});for(var c=!0,x=!1,L=0;c&&!x;L++){if(L>=this.MAX_CYCLES){console.log("too many cycles @",i(e),"routine",i(n));break}c=!1,this.WRAP_CLOCKS&&s>=this.MAX_CLOCKS?(s=s%this.MAX_CLOCKS,t=t%this.MAX_CLOCKS):(s=Math.min(this.MAX_CLOCKS,s),t=Math.min(this.MAX_CLOCKS,t));var r=this.getClockCountsAtPC(e),l=this.platform.readAddress(e+1),m=this.platform.readAddress(e+2),u=l+(m<<8),f=e;if(s>=this.pc2minclocks[f]||(this.pc2minclocks[f]=s,c=!0),t<=this.pc2maxclocks[f]||(this.pc2maxclocks[f]=t,c=!0),!r.insnlength){console.log("Illegal instruction!",i(e),i(r.opcode),r);break}e+=r.insnlength;var A=o;switch(o=null,r.opcode){case 25:case 29:case 57:case 61:case 89:case 93:case 121:case 125:case 153:case 157:case 169:case 173:case 185:case 189:case 188:case 190:case 217:case 221:case 249:case 253:l==0&&(r.maxCycles-=1);break;case 133:l==2&&(s=t=0,r.minCycles=r.maxCycles=0);break;case 44:l==2&&m==32&&(s=0,t=4,r.minCycles=r.maxCycles=0);break;case 32:s+=r.minCycles,t+=r.maxCycles,this.traceInstructions(u,s,t,u,o);var a=this.jsrresult[u];a?(s=a.minclocks,t=a.maxclocks):(console.log("No JSR result!",i(e),i(u)),s=t);break;case 76:e=u;break;case 64:x=!0;break;case 96:if(n){var a=this.jsrresult[n];a?a={minclocks:Math.min(s,a.minclocks),maxclocks:Math.max(t,a.maxclocks)}:a={minclocks:s,maxclocks:t},this.jsrresult[n]=a,console.log("RTS",i(e),i(n),this.jsrresult[n])}return;case 16:case 48:case 80:case 112:case 144:case 176:case 208:case 240:var O=e+_(l),y=e>>8!=O>>8;y||r.maxCycles--;var h=p[Math.floor((r.opcode-16)/32)],b=d(A,h[0]),K=d(A,h[1]);this.traceInstructions(O,s+r.maxCycles,t+r.maxCycles,n,h[0]),K===!1&&(console.log("branch always taken",i(e),A,h[1]),x=!0),o=h[1],r.maxCycles=r.minCycles;break;case 108:console.log("Instruction not supported!",i(e),i(r.opcode),r);return}s+=r.minCycles,t+=r.maxCycles}}showLoopTimingForPC(e){this.pc2minclocks={},this.pc2maxclocks={},this.jsrresult={},this.traceInstructions(e|this.platform.getOriginPC(),this.START_CLOCKS,this.MAX_CLOCKS,0,{})}},M=class extends S{constructor(e){super(e);this.MAX_CLOCKS=this.START_CLOCKS=76*4,this.WRAP_CLOCKS=!1}},v=class extends S{constructor(e){super(e);this.MAX_CLOCKS=114,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}};export{M as a,v as b};
//# sourceMappingURL=chunk-25TBLLNR.js.map
import{c as _,g as i}from"./chunk-G7IBJTLG.js";var p=[[{N:0},{N:1}],[{N:1},{N:0}],[{V:0},{V:1}],[{V:1},{V:0}],[{C:0},{C:1}],[{C:1},{C:0}],[{Z:0},{Z:1}],[{Z:1},{Z:0}]];function d(C,e){if(C==null||e==null)return null;for(var s in C)if(e[s]!=="undefined")return C[s]==e[s];for(var s in e)if(C[s]!=="undefined")return C[s]==e[s];return null}var S=class{constructor(e){this.pc2minclocks={};this.pc2maxclocks={};this.jsrresult={};this.MAX_CYCLES=2e3;this.platform=e}getClockCountsAtPC(e){var s=this.platform.readAddress(e),t=this.platform.getOpcodeMetadata(s,e);return t}traceInstructions(e,s,t,n,o){this.WRAP_CLOCKS&&(this.pc2minclocks[e]!==void 0&&(s=Math.min(s,this.pc2minclocks[e])),this.pc2maxclocks[e]!==void 0&&(t=Math.max(t,this.pc2maxclocks[e]))),o||(o={});for(var c=!0,x=!1,L=0;c&&!x;L++){if(L>=this.MAX_CYCLES){console.log("too many cycles @",i(e),"routine",i(n));break}c=!1,this.WRAP_CLOCKS&&s>=this.MAX_CLOCKS?(s=s%this.MAX_CLOCKS,t=t%this.MAX_CLOCKS):(s=Math.min(this.MAX_CLOCKS,s),t=Math.min(this.MAX_CLOCKS,t));var r=this.getClockCountsAtPC(e),l=this.platform.readAddress(e+1),m=this.platform.readAddress(e+2),u=l+(m<<8),f=e;if(s>=this.pc2minclocks[f]||(this.pc2minclocks[f]=s,c=!0),t<=this.pc2maxclocks[f]||(this.pc2maxclocks[f]=t,c=!0),!r.insnlength){console.log("Illegal instruction!",i(e),i(r.opcode),r);break}e+=r.insnlength;var A=o;switch(o=null,r.opcode){case 25:case 29:case 57:case 61:case 89:case 93:case 121:case 125:case 153:case 157:case 169:case 173:case 185:case 189:case 188:case 190:case 217:case 221:case 249:case 253:l==0&&(r.maxCycles-=1);break;case 133:l==2&&(s=t=0,r.minCycles=r.maxCycles=0);break;case 44:l==2&&m==32&&(s=0,t=4,r.minCycles=r.maxCycles=0);break;case 32:s+=r.minCycles,t+=r.maxCycles,this.traceInstructions(u,s,t,u,o);var a=this.jsrresult[u];a?(s=a.minclocks,t=a.maxclocks):(console.log("No JSR result!",i(e),i(u)),s=t);break;case 76:e=u;break;case 64:x=!0;break;case 96:if(n){var a=this.jsrresult[n];a?a={minclocks:Math.min(s,a.minclocks),maxclocks:Math.max(t,a.maxclocks)}:a={minclocks:s,maxclocks:t},this.jsrresult[n]=a,console.log("RTS",i(e),i(n),this.jsrresult[n])}return;case 16:case 48:case 80:case 112:case 144:case 176:case 208:case 240:var O=e+_(l),y=e>>8!=O>>8;y||r.maxCycles--;var h=p[Math.floor((r.opcode-16)/32)],b=d(A,h[0]),K=d(A,h[1]);this.traceInstructions(O,s+r.maxCycles,t+r.maxCycles,n,h[0]),K===!1&&(console.log("branch always taken",i(e),A,h[1]),x=!0),o=h[1],r.maxCycles=r.minCycles;break;case 108:console.log("Instruction not supported!",i(e),i(r.opcode),r);return}s+=r.minCycles,t+=r.maxCycles}}showLoopTimingForPC(e){this.pc2minclocks={},this.pc2maxclocks={},this.jsrresult={},this.traceInstructions(e|this.platform.getOriginPC(),this.START_CLOCKS,this.MAX_CLOCKS,0,{})}},M=class extends S{constructor(e){super(e);this.MAX_CLOCKS=this.START_CLOCKS=76*4,this.WRAP_CLOCKS=!1}},v=class extends S{constructor(e){super(e);this.MAX_CLOCKS=114,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}};export{M as a,v as b};
//# sourceMappingURL=chunk-AO5GPDPJ.js.map

View File

@ -1,2 +0,0 @@
import{c as x}from"./chunk-5XVCUSSZ.js";var E=x((f,d)=>{(function(c,i){typeof define=="function"&&define.amd?define([],i):typeof f!="undefined"?i():(i(),c.FileSaver={})})(f,function(){"use strict";function c(e,t){return typeof t=="undefined"?t={autoBom:!1}:typeof t!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\uFEFF",e],{type:e.type}):e}function i(e,t,n){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){p(r.response,t,n)},r.onerror=function(){console.error("could not download file")},r.send()}function v(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(n){}return 200<=t.status&&299>=t.status}function l(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(n){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var a=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:void 0,w=a.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),p=a.saveAs||(typeof window!="object"||window!==a?function(){}:"download"in HTMLAnchorElement.prototype&&!w?function(e,t,n){var r=a.URL||a.webkitURL,o=document.createElement("a");t=t||e.name||"download",o.download=t,o.rel="noopener",typeof e=="string"?(o.href=e,o.origin===location.origin?l(o):v(o.href)?i(e,t,n):l(o,o.target="_blank")):(o.href=r.createObjectURL(e),setTimeout(function(){r.revokeObjectURL(o.href)},4e4),setTimeout(function(){l(o)},0))}:"msSaveOrOpenBlob"in navigator?function(e,t,n){if(t=t||e.name||"download",typeof e!="string")navigator.msSaveOrOpenBlob(c(e,n),t);else if(v(e))i(e,t,n);else{var r=document.createElement("a");r.href=e,r.target="_blank",setTimeout(function(){l(r)})}}:function(e,t,n,r){if(r=r||open("","_blank"),r&&(r.document.title=r.document.body.innerText="downloading..."),typeof e=="string")return i(e,t,n);var o=e.type==="application/octet-stream",b=/constructor/i.test(a.HTMLElement)||a.safari,y=/CriOS\/[\d]+/.test(navigator.userAgent);if((y||o&&b||w)&&typeof FileReader!="undefined"){var m=new FileReader;m.onloadend=function(){var s=m.result;s=y?s:s.replace(/^data:[^;]*;/,"data:attachment/file;"),r?r.location.href=s:location=s,r=null},m.readAsDataURL(e)}else{var h=a.URL||a.webkitURL,u=h.createObjectURL(e);r?r.location=u:location.href=u,r=null,setTimeout(function(){h.revokeObjectURL(u)},4e4)}});a.saveAs=p.saveAs=p,typeof d!="undefined"&&(d.exports=p)})});function g(c){switch(c){case"apple2":return import("./apple2-ZLISNKFB.js");case"arm32":return import("./arm32-WMT7VN7E.js");case"astrocade":return import("./astrocade-TUM2CFZB.js");case"atari7800":return import("./atari7800-NK3YZ73J.js");case"atari8":return import("./atari8-7ER66A5A.js");case"basic":return import("./basic-TCPQRNE5.js");case"c64":return import("./c64-HQRY4UD3.js");case"coleco":return import("./coleco-6D3Q7HL5.js");case"cpc":return import("./cpc-UWHQWW7T.js");case"devel":return import("./devel-OHDZCLXK.js");case"galaxian":return import("./galaxian-RGULKR25.js");case"kim1":return import("./kim1-M6IBUAXR.js");case"markdown":return import("./markdown-NL7MX7CH.js");case"msx":return import("./msx-AEGYRQBR.js");case"mw8080bw":return import("./mw8080bw-LAYQERCT.js");case"nes":return import("./nes-3E7KGZE7.js");case"script":return import("./script-QPCJ745N.js");case"sms":return import("./sms-DHM7FCV6.js");case"sound_konami":return import("./sound_konami-BEND2ZQ2.js");case"sound_williams":return import("./sound_williams-WX6X6HWZ.js");case"vcs":return import("./vcs-6UVEUXZ3.js");case"vector":return import("./vector-SP44TN6Y.js");case"vectrex":return import("./vectrex-RKKSVRMR.js");case"verilog":return import("./verilog-6FGOCDBX.js");case"vic20":return import("./vic20-W4APTJ7R.js");case"vicdual":return import("./vicdual-R5C2BNHF.js");case"williams":return import("./williams-LURHQXLJ.js");case"x86":return import("./x86-T3VIQUTF.js");case"zmachine":return import("./zmachine-FIH3OIZT.js");case"zx":return import("./zx-VA7T2QD6.js");default:throw new Error(`Platform not recognized: '${c}'`)}}export{g as a,E as b};
//# sourceMappingURL=chunk-BZE6MX4T.js.map

File diff suppressed because one or more lines are too long

6
gen/chunk-G7IBJTLG.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{L as a,M as l}from"./chunk-UWX4LVLA.js";var u=class{constructor(t){this.checkpointInterval=10;this.maxCheckpoints=300;this.reset(),this.platform=t}reset(){this.checkpoints=[],this.framerecs=[],this.frameCount=0,this.lastSeekFrame=0,this.lastSeekStep=0,this.lastStepCount=0,this.callbackStateChanged&&this.callbackStateChanged()}frameRequested(){var t={controls:this.platform.saveControlsState(),seed:a()},e=!1;return this.lastSeekFrame<this.frameCount?this.loadControls(this.lastSeekFrame):(this.platform.saveControlsState&&this.framerecs.push(t),e=this.frameCount++%this.checkpointInterval==0),this.lastSeekFrame++,this.lastSeekStep=0,this.callbackStateChanged&&this.callbackStateChanged(),e}numFrames(){return this.frameCount}currentFrame(){return this.lastSeekFrame}currentStep(){return this.lastSeekStep}recordFrame(t){this.checkpoints.push(t),this.callbackNewCheckpoint&&this.callbackNewCheckpoint(t),this.checkpoints.length>this.maxCheckpoints&&(this.checkpoints.shift(),this.framerecs=this.framerecs.slice(this.checkpointInterval),this.lastSeekFrame-=this.checkpointInterval,this.frameCount-=this.checkpointInterval,this.callbackStateChanged&&this.callbackStateChanged())}getStateAtOrBefore(t){if(t<=0&&this.checkpoints.length>0)return{frame:0,state:this.checkpoints[0]};var e=Math.floor(t/this.checkpointInterval),s=e<this.checkpoints.length?e:this.checkpoints.length-1,h=s*this.checkpointInterval;return{frame:h,state:this.checkpoints[s]}}loadFrame(t,e){if(t|=0,e|=0,t==this.lastSeekFrame&&e==this.lastSeekStep)return t;let{frame:s,state:h}=this.getStateAtOrBefore(t-1);if(h){var n=0;for(this.platform.pause(),this.platform.loadState(h);s<t;)s<this.framerecs.length&&this.loadControls(s),s++,n=this.platform.advance(s<t);return s==0&&(n=this.platform.advance(!0),this.platform.loadState(h)),e>0&&this.platform.advanceFrameClock&&(e=this.platform.advanceFrameClock(null,e)),this.lastSeekFrame=t,this.lastSeekStep=e,this.lastStepCount=n,t}else return-1}loadControls(t){this.platform.loadControlsState&&this.platform.loadControlsState(this.framerecs[t].controls),l(this.framerecs[t].seed)}getLastCheckpoint(){return this.checkpoints.length&&this.checkpoints[this.checkpoints.length-1]}},r;(function(i){i[i.CLOCKS=0]="CLOCKS",i[i.EXECUTE=16777216]="EXECUTE",i[i.HAS_VALUE=268435456]="HAS_VALUE",i[i.MEM_READ=301989888]="MEM_READ",i[i.MEM_WRITE=318767104]="MEM_WRITE",i[i.IO_READ=335544320]="IO_READ",i[i.IO_WRITE=352321536]="IO_WRITE",i[i.VRAM_READ=369098752]="VRAM_READ",i[i.VRAM_WRITE=385875968]="VRAM_WRITE",i[i.INTERRUPT=134217728]="INTERRUPT",i[i.ILLEGAL=150994944]="ILLEGAL",i[i.SP_PUSH=167772160]="SP_PUSH",i[i.SP_POP=184549376]="SP_POP",i[i.SCANLINE=2113929216]="SCANLINE",i[i.FRAME=2130706432]="FRAME"})(r||(r={}));var m=class{constructor(t,e){this.idx=0;this.sl=0;this.cur_sp=-1;this.singleFrame=!0;this.m=t,this.reset(e||1048576)}start(){this.m.connectProbe(this)}stop(){this.m.connectProbe(null)}reset(t){t&&(this.buf=new Uint32Array(t)),this.sl=0,this.cur_sp=-1,this.clear()}clear(){this.idx=0}logData(t){this.log(t)}log(t){this.idx>=this.buf.length||(this.buf[this.idx++]=t)}relog(t){this.buf[this.idx-1]=t}lastOp(){return this.idx>0?this.buf[this.idx-1]&4278190080:-1}lastAddr(){return this.idx>0?this.buf[this.idx-1]&16777215:-1}addLogBuffer(t){this.idx+t.length>this.buf.length&&(t=t.slice(0,this.buf.length-this.idx)),this.buf.set(t,this.idx),this.idx+=t.length}logClocks(t){t|=0,t>0&&(this.lastOp()==0?this.relog(this.lastAddr()+t|0):this.log(t|0))}logNewScanline(){this.log(2113929216),this.sl++}logNewFrame(){this.log(2130706432),this.sl=0,this.singleFrame&&this.clear()}logExecute(t,e){this.cur_sp!==e&&(e<this.cur_sp&&this.log(167772160|e),e>this.cur_sp&&this.log(184549376|e),this.cur_sp=e),this.log(t|16777216)}logInterrupt(t){this.log(t|134217728)}logValue(t,e,s){this.log(t&65535|(e&255)<<16|s)}logRead(t,e){this.logValue(t,e,301989888)}logWrite(t,e){this.logValue(t,e,318767104)}logIORead(t,e){this.logValue(t,e,335544320)}logIOWrite(t,e){this.logValue(t,e,352321536)}logVRAMRead(t,e){this.logValue(t,e,369098752)}logVRAMWrite(t,e){this.logValue(t,e,385875968)}logIllegal(t){this.log(t|150994944)}countEvents(t){for(var e=0,s=0;s<this.idx;s++)(this.buf[s]&4278190080)==t&&e++;return e}countClocks(){for(var t=0,e=0;e<this.idx;e++)(this.buf[e]&4278190080)==0&&(t+=this.buf[e]&65535);return t}};export{u as a,r as b,m as c};
//# sourceMappingURL=chunk-HKPUADCX.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
gen/chunk-LHX4ZWD3.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import{B as w,a as p,b as P,z as C}from"./chunk-OKJZYBWI.js";import{P as b,R as v,T as S}from"./chunk-UWX4LVLA.js";var m=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new S(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,a=this.romdata=this.romdata||e.romdata||new v(e.romsize).mem,o=this.romtype=this.romtype||e.romtype,n=this.video=new b(this.mainElement,e.width,e.height);n.create(),$(n.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",n.canvas.width+"x"+n.canvas.height];r&&u.push("-"+o,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:n.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:n.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,a,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(n.canvas).click(i=>{n.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,g=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),g.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else g.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,g,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"]
import{B as C,D as w,a as p,b as P}from"./chunk-3NXXB3IA.js";import{P as b,R as v,T as S}from"./chunk-G7IBJTLG.js";var m=class{constructor(t){this.loaded=!1;this.preinitted=!1;this.started=!1;this.romtype="cart";this.running=!1;this.initluavars=!1;this.mainElement=t,this.timer=new S(20,this.poll.bind(this))}luacall(t){return this.js_lua_string||(this.js_lua_string=Module.cwrap("_Z13js_lua_stringPKc","string",["string"])),this.js_lua_string(t||"")}_pause(){this.running=!1,this.timer.stop()}pause(){this.loaded&&this.running&&(this.luacall("emu.pause()"),this._pause())}_resume(){this.luacall("emu.unpause()"),this.running=!0,this.timer.start()}resume(){this.loaded&&!this.running&&this._resume()}reset(){this.loaded&&(this.luacall("manager:machine():soft_reset()"),this.running=!0,this.initluavars=!1)}isRunning(){return this.running}bufferConsoleOutput(t){typeof t=="string"&&console.log(t)}startModule(t,e){this.started=!0;var r=this.romfn=this.romfn||e.romfn,a=this.romdata=this.romdata||e.romdata||new v(e.romsize).mem,o=this.romtype=this.romtype||e.romtype,n=this.video=new b(this.mainElement,e.width,e.height);n.create(),$(n.canvas).attr("id","canvas"),console.log("loading",e.jsfile);var u=[e.driver,"-debug","-debugger","none","-verbose","-window","-nokeepaspect","-resolution",n.canvas.width+"x"+n.canvas.height];r&&u.push("-"+o,r),e.extraargs&&(u=u.concat(e.extraargs)),console.log(u),window.JSMESS={},window.Module={arguments:u,screenIsReadOnly:!0,print:this.bufferConsoleOutput,canvas:n.canvas,doNotCaptureKeyboard:!0,keyboardListeningElement:n.canvas,preInit:()=>{console.log("loading FS"),ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT="canvas",e.cfgfile&&(FS.mkdir("/cfg"),FS.writeFile("/cfg/"+e.cfgfile,e.cfgdata,{encoding:"utf8"})),e.biosfile&&(FS.mkdir("/roms"),FS.mkdir("/roms/"+e.driver),FS.writeFile("/roms/"+e.biosfile,e.biosdata,{encoding:"binary"})),FS.mkdir("/emulator"),r&&FS.writeFile(r,a,{encoding:"binary"}),e.preInit&&e.preInit(self),this.preinitted=!0},preRun:[()=>{$(n.canvas).click(i=>{n.canvas.focus()}),this.loaded=!0,console.log("about to run...")}]};var d,c,g=$.Deferred(),f=$.Deferred();if(e.cfgfile&&(d=$.get("mame/cfg/"+e.cfgfile,i=>{e.cfgdata=i,console.log("loaded "+e.cfgfile)},"text")),e.biosfile){var s=new XMLHttpRequest;s.open("GET","mame/roms/"+e.biosfile,!0),s.responseType="arraybuffer",s.onload=i=>{e.biosdata=new Uint8Array(s.response),console.log("loaded "+e.biosfile),g.resolve()},s.ontimeout=function(i){throw Error("Timeout loading "+e.biosfile)},s.send()}else g.resolve();c=$.get("mame/debugger.lua",i=>{this.luadebugscript=i,console.log("loaded debugger.lua")},"text");{var l=new XMLHttpRequest;l.open("GET","mame/"+e.jsfile.replace(".js",".wasm"),!0),l.responseType="arraybuffer",l.onload=i=>{console.log("loaded WASM file"),window.Module.wasmBinary=new Uint8Array(l.response),f.resolve()},l.ontimeout=function(i){throw Error("Timeout loading "+e.jsfile)},l.send()}$.when(c,d,g,f).done(()=>{var i=document.createElement("script");i.src="mame/"+e.jsfile,document.getElementsByTagName("head")[0].appendChild(i),console.log("created script element")}),window.mamelua=i=>(this.initlua(),[i,this.luacall(i)])}loadROMFile(t){this.romdata=t,this.preinitted&&this.romfn&&FS.writeFile(this.romfn,t,{encoding:"binary"})}loadRegion(t,e){if(this.loaded&&e.length>0){for(var r='rgn = manager:machine():memory().regions["'+t+`"]
`,a=0;a<e.length;a+=4){var o=e[a]+(e[a+1]<<8)+(e[a+2]<<16)+(e[a+3]<<24);r+="rgn:write_u32("+a+","+o+`)
`}this.luacall(r),this.reset()}}initlua(){this.initluavars||(this.luacall(this.luadebugscript),this.luacall("mamedbg.init()"),this.initluavars=!0)}readAddress(t){return this.initlua(),parseInt(this.luacall("return mem:read_u8("+t+")"))}getCPUReg(t){return this.loaded?(this.initlua(),parseInt(this.luacall("return cpu.state."+t+".value"))):0}grabState(t){return this.initlua(),{c:this.getCPUState(),buf:this.luacall("return string.tohex("+t+")")}}saveState(){return this.grabState("manager:machine():buffer_save()")}loadState(t){return this.initlua(),this.luacall("manager:machine():buffer_load(string.fromhex('"+t.buf+"'))")}poll(){if(this.onBreakpointHit&&this.luacall("return tostring(mamedbg.is_stopped())")=="true"){this._pause();var t=this.grabState("lastBreakState");this.onBreakpointHit(t)}}clearDebug(){this.onBreakpointHit=null,this.loaded&&(this.initlua(),this.luacall("mamedbg.reset()"))}getDebugCallback(){return this.onBreakpointHit}setupDebug(t){this.onBreakpointHit=t}debugcmd(t){this.initlua(),this.luacall(t),this._resume()}runToPC(t){this.debugcmd("mamedbg.runTo("+t+")")}runToVsync(){this.debugcmd("mamedbg.runToVsync()")}runUntilReturn(){this.debugcmd("mamedbg.runUntilReturn()")}runEval(){this.reset(),this.step()}step(){this.debugcmd("mamedbg.step()")}getDebugCategories(){return["CPU"]}getDebugInfo(t,e){switch(t){case"CPU":return this.cpuStateToLongString(e.c)}}getDebugTree(){this.initlua();var t=JSON.parse(this.luacall("return table.tojson(manager:machine().devices)")),e=JSON.parse(this.luacall("return table.tojson(manager:machine().images)")),r=JSON.parse(this.luacall("return table.tojson(manager:machine():memory().regions)"));return{devices:t,images:e,regions:r}}},_=class extends m{getPC(){return this.getCPUReg("PC")}getSP(){return this.getCPUReg("SP")}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP(),A:this.getCPUReg("A"),X:this.getCPUReg("X"),Y:this.getCPUReg("Y"),flags:this.getCPUReg("P")}}disassemble(t,e){return p(t,e(t),e(t+1),e(t+2))}cpuStateToLongString(t){return C(t)}},E=class extends m{getPC(){return this.getCPUReg("PC")}getSP(){return this.getCPUReg("SP")}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP(),AF:this.getCPUReg("AF"),BC:this.getCPUReg("BC"),DE:this.getCPUReg("DE"),HL:this.getCPUReg("HL"),IX:this.getCPUReg("IX"),IY:this.getCPUReg("IY"),IR:this.getCPUReg("R")+(this.getCPUReg("I")<<8)}}disassemble(t,e){return P(t,e(t),e(t+1),e(t+2),e(t+3))}cpuStateToLongString(t){return w(t)}};export{_ as a,E as b};
//# sourceMappingURL=chunk-PVJ5UPJQ.js.map
//# sourceMappingURL=chunk-YZQ2OPTV.js.map

View File

@ -1,4 +1,4 @@
import{c as E}from"./chunk-AUJWOUYJ.js";import{b as f}from"./chunk-PVJ5UPJQ.js";import{D as m,I as n,d as w,f as c}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as t,J as o,V as e,Y as s,k as g,l as a}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var Q=s([[e.UP,0,1],[e.DOWN,0,4],[e.LEFT,0,8],[e.RIGHT,0,2],[e.A,0,64],[e.B,1,64],[e.P2_UP,2,1],[e.P2_DOWN,2,4],[e.P2_LEFT,2,8],[e.P2_RIGHT,2,2],[e.P2_A,2,64],[e.P2_B,3,64]]),i=class extends E{constructor(){super();this.defaultROMSize=32768;this.ram=new Uint8Array(1024);this.read=t([[0,8191,8191,A=>this.bios?this.bios[A]:0],[24576,32767,1023,A=>this.ram[A]],[32768,65535,32767,A=>this.rom?this.rom[A]:0]]);this.write=t([[24576,32767,1023,(A,B)=>{this.ram[A]=B}]]);this.init(this,this.newIOBus(),new c(new w)),this.bios=new g().decode(a(atob(l)))}getKeyboardMap(){return Q}vdpInterrupt(){this.probe.logInterrupt(0),this.cpu.NMI()}newIOBus(){return{read:A=>{switch(A&=255,A){case 252:return this.inputs[this.keypadMode?1:0]^255;case 255:return this.inputs[this.keypadMode?3:2]^255}return A>=160&&A<=191?A&1?this.vdp.readStatus():this.vdp.readData():0},write:(A,B)=>{switch(A&=255,B&=255,A>>4){case 8:case 9:this.keypadMode=!0;break;case 12:case 13:this.keypadMode=!1;break;case 10:case 11:return A&1?this.vdp.writeAddress(B):this.vdp.writeData(B);case 15:this.psg.setData(B);break}}}}loadState(A){super.loadState(A),this.keypadMode=A.kpm}saveState(){var A=super.saveState();return A.kpm=this.keypadMode,A}reset(){super.reset(),this.keypadMode=!1}},l=`
import{c as E}from"./chunk-KAXUWPTM.js";import{b as f}from"./chunk-YZQ2OPTV.js";import{F as m,K as n,d as w,f as c}from"./chunk-3NXXB3IA.js";import{$ as t,J as o,V as e,Y as s,k as g,l as a}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var Q=s([[e.UP,0,1],[e.DOWN,0,4],[e.LEFT,0,8],[e.RIGHT,0,2],[e.A,0,64],[e.B,1,64],[e.P2_UP,2,1],[e.P2_DOWN,2,4],[e.P2_LEFT,2,8],[e.P2_RIGHT,2,2],[e.P2_A,2,64],[e.P2_B,3,64]]),i=class extends E{constructor(){super();this.defaultROMSize=32768;this.ram=new Uint8Array(1024);this.read=t([[0,8191,8191,A=>this.bios?this.bios[A]:0],[24576,32767,1023,A=>this.ram[A]],[32768,65535,32767,A=>this.rom?this.rom[A]:0]]);this.write=t([[24576,32767,1023,(A,B)=>{this.ram[A]=B}]]);this.init(this,this.newIOBus(),new c(new w)),this.bios=new g().decode(a(atob(l)))}getKeyboardMap(){return Q}vdpInterrupt(){this.probe.logInterrupt(0),this.cpu.NMI()}newIOBus(){return{read:A=>{switch(A&=255,A){case 252:return this.inputs[this.keypadMode?1:0]^255;case 255:return this.inputs[this.keypadMode?3:2]^255}return A>=160&&A<=191?A&1?this.vdp.readStatus():this.vdp.readData():0},write:(A,B)=>{switch(A&=255,B&=255,A>>4){case 8:case 9:this.keypadMode=!0;break;case 12:case 13:this.keypadMode=!1;break;case 10:case 11:return A&1?this.vdp.writeAddress(B):this.vdp.writeData(B);case 15:this.psg.setData(B);break}}}}loadState(A){super.loadState(A),this.keypadMode=A.kpm}saveState(){var A=super.saveState();return A.kpm=this.keypadMode,A}reset(){super.reset(),this.keypadMode=!1}},l=`
TFpHAAAgAAAAB7djQcnHAQEDBgcx/3MYawAAAMMMgAehB+EPB+USB+UVB+UYB+UbB+UeB+QHHAZm
IYA8igUCBYIAKgCAff5VIAl8/qogBCoKgOnHAwkfgICAAAMFT6CgB4LgByEH4WDAYMBABlggQIAg
B+HAwOCgYAMGKweBQAYxBphAQEAG+KBABnAGEuAGUAabB+QA4AflBkggIAYyB+FgoKCgwAZdwAY5
@ -34,4 +34,4 @@ PANDTwNjYHAGWShQAwKHOBA4A8LZA0IIeAaZOEREKChsADBAIBA4BqkoA4KfA0KIVFQDIvg4QANi
FwAGaQNjr3gHIwZYEAAGEEAwCDBABgkHoTAIBlEIFANIAlAgBiAAfAdhAwJ3B0IGfwMDjgPmiAcB
A8SRHAYnBihQAwK9BwFgEAODTQPjNXgDAmgHHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8H
HwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBx8HHwcfBwM=`;var D=[{id:"text.c",name:"Text Mode"},{id:"hello.c",name:"Scrolling Text"},{id:"text32.c",name:"32-Column Color Text"},{id:"stars.c",name:"Scrolling Starfield"},{id:"cursorsmooth.c",name:"Moving Cursor"},{id:"simplemusic.c",name:"Simple Music"},{id:"musicplayer.c",name:"Multivoice Music"},{id:"mode2bitmap.c",name:"Mode 2 Bitmap"},{id:"mode2compressed.c",name:"Mode 2 Bitmap (LZG)"},{id:"lines.c",name:"Mode 2 Lines"},{id:"multicolor.c",name:"Multicolor Mode"},{id:"siegegame.c",name:"Siege Game"},{id:"shoot.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"}],M=class extends n{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Cartridge Header",start:32768,size:256,type:"rom"}]}}}newMachine(){return new i}getPresets(){return D}getDefaultExtension(){return".c"}readAddress(A){return this.machine.read(A)}readVRAMAddress(A){return this.machine.readVRAMAddress(A)}showHelp(A,B){window.open("https://8bitworkshop.com/docs/platforms/coleco/","_help")}},h=class extends f{constructor(){super(...arguments);this.getToolForFilename=m}start(){this.startModule(this.mainElement,{jsfile:"mame8bitws.js",cfgfile:"coleco.cfg",biosfile:"coleco/313 10031-4005 73108a.u2",driver:"coleco",width:280*2,height:216*2,romfn:"/emulator/cart.rom",romsize:32768,preInit:function(A){}})}loadROM(A,B){this.loadROMFile(B),this.loadRegion(":coleco_cart:rom",B)}getPresets(){return D}getDefaultExtension(){return".c"}};o["coleco.mame"]=h;o.coleco=M;export{D as ColecoVision_PRESETS};
//# sourceMappingURL=coleco-6D3Q7HL5.js.map
//# sourceMappingURL=coleco-KQSK4KE2.js.map

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@ const disasm6502_1 = require("./cpu/disasm6502");
const disasmz80_1 = require("./cpu/disasmz80");
const ZilogZ80_1 = require("./cpu/ZilogZ80");
const audio_1 = require("./audio");
const recorder_1 = require("./recorder");
const probe_1 = require("./probe");
const wasmplatform_1 = require("./wasmplatform");
const _6809_1 = require("./cpu/6809");
const MOS6502_1 = require("./cpu/MOS6502");
@ -130,7 +130,7 @@ class BaseDebugPlatform extends BasePlatform {
setDebugCondition(debugCond) {
this.setBreakpoint('debug', debugCond);
}
restartDebugging() {
resetDebugging() {
if (this.debugSavedState) {
this.loadState(this.debugSavedState);
}
@ -140,6 +140,9 @@ class BaseDebugPlatform extends BasePlatform {
this.debugClock = 0;
this.debugCallback = this.getDebugCallback();
this.debugBreakState = null;
}
restartDebugging() {
this.resetDebugging();
this.resume();
}
preFrame() {
@ -673,7 +676,7 @@ class BaseMachinePlatform extends BaseDebugPlatform {
this.video.setupMouseEvents();
}
if (hasProbe(m)) {
this.probeRecorder = new recorder_1.ProbeRecorder(m);
this.probeRecorder = new probe_1.ProbeRecorder(m);
this.startProbing = () => {
m.connectProbe(this.probeRecorder);
return this.probeRecorder;
@ -712,7 +715,8 @@ class BaseMachinePlatform extends BaseDebugPlatform {
}
}
advance(novideo) {
var steps = this.machine.advanceFrame(this.getDebugCallback());
let trap = this.getDebugCallback();
var steps = this.machine.advanceFrame(trap);
if (!novideo && this.video)
this.video.updateFrame();
if (!novideo && this.serialVisualizer)

File diff suppressed because one or more lines are too long

View File

@ -2023,13 +2023,16 @@ var _MOS6502 = function () {
PC = (PC - 1) & 0xffff;
};
this.setIRQ = function () {
instruction = IRQ();
T = 1;
PC = (PC - 1) & 0xffff;
if (!I) { // only if not disabled
instruction = IRQ();
T = 1;
PC = (PC - 1) & 0xffff;
}
};
this.getSP = function () { return SP; };
this.getPC = function () { return (PC - 1) & 0xffff; };
this.getT = function () { return T; };
this.isHalted = function () { return opcodes[opcode] == "uKIL"; };
this.isPCStable = function () {
return T == 0;
};
@ -2076,7 +2079,9 @@ class MOS6502 {
this.interruptType = 0;
}
interrupt(itype) {
this.interruptType = itype;
if (this.interruptType != MOS6502Interrupts.NMI) {
this.interruptType = itype;
}
}
NMI() {
this.interrupt(MOS6502Interrupts.NMI);
@ -2090,6 +2095,9 @@ class MOS6502 {
getPC() {
return this.cpu.getPC();
}
isHalted() {
return this.cpu.isHalted();
}
saveState() {
var s = this.cpu.saveState();
s.it = this.interruptType;

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.VirtualTextScroller = exports.getVisibleEditorLineHeight = exports.getMousePos = exports.newAddressDecoder = exports.AddressDecoder = exports.padBytes = exports.ControllerPoller = exports.makeKeycodeMap = exports.setKeyboardFromMap = exports.newKeyboardHandler = exports.Keys = exports.dumpRAM = exports.AnimationTimer = exports.useRequestAnimationFrame = exports.EmuHalt = exports.RAM = exports.VectorVideo = exports.RasterVideo = exports._setKeyboardEvents = exports.KeyFlags = exports.__createCanvas = exports.setNoiseSeed = exports.getNoiseSeed = exports.noise = exports.PLATFORMS = void 0;
exports.gtia_ntsc_to_rgb = exports.VirtualTextScroller = exports.getVisibleEditorLineHeight = exports.getMousePos = exports.newAddressDecoder = exports.AddressDecoder = exports.padBytes = exports.ControllerPoller = exports.makeKeycodeMap = exports.setKeyboardFromMap = exports.newKeyboardHandler = exports.Keys = exports.dumpRAM = exports.AnimationTimer = exports.useRequestAnimationFrame = exports.EmuHalt = exports.RAM = exports.VectorVideo = exports.RasterVideo = exports._setKeyboardEvents = exports.KeyFlags = exports.__createCanvas = exports.setNoiseSeed = exports.getNoiseSeed = exports.noise = exports.PLATFORMS = void 0;
const util_1 = require("./util");
const vlist_1 = require("./vlist");
// Emulator classes
@ -663,4 +663,22 @@ class VirtualTextScroller {
}
}
exports.VirtualTextScroller = VirtualTextScroller;
// https://forums.atariage.com/topic/107853-need-the-256-colors/page/2/
function gtia_ntsc_to_rgb(val) {
const gamma = 0.9;
const bright = 1.1;
const color = 60;
let cr = (val >> 4) & 15;
let lm = val & 15;
let crlv = cr ? color : 0;
let phase = ((cr - 1) * 25 - 38) * (2 * Math.PI / 360);
let y = 256 * bright * Math.pow((lm + 1) / 16, gamma);
let i = crlv * Math.cos(phase);
let q = crlv * Math.sin(phase);
var r = y + 0.956 * i + 0.621 * q;
var g = y - 0.272 * i - 0.647 * q;
var b = y - 1.107 * i + 1.704 * q;
return (0, util_1.RGBA)((0, util_1.clamp)(0, 255, r), (0, util_1.clamp)(0, 255, g), (0, util_1.clamp)(0, 255, b));
}
exports.gtia_ntsc_to_rgb = gtia_ntsc_to_rgb;
//# sourceMappingURL=emu.js.map

File diff suppressed because one or more lines are too long

157
gen/common/probe.js Normal file
View File

@ -0,0 +1,157 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProbeRecorder = exports.ProbeFlags = void 0;
var ProbeFlags;
(function (ProbeFlags) {
ProbeFlags[ProbeFlags["CLOCKS"] = 0] = "CLOCKS";
ProbeFlags[ProbeFlags["EXECUTE"] = 16777216] = "EXECUTE";
ProbeFlags[ProbeFlags["HAS_VALUE"] = 268435456] = "HAS_VALUE";
ProbeFlags[ProbeFlags["MEM_READ"] = 301989888] = "MEM_READ";
ProbeFlags[ProbeFlags["MEM_WRITE"] = 318767104] = "MEM_WRITE";
ProbeFlags[ProbeFlags["IO_READ"] = 335544320] = "IO_READ";
ProbeFlags[ProbeFlags["IO_WRITE"] = 352321536] = "IO_WRITE";
ProbeFlags[ProbeFlags["VRAM_READ"] = 369098752] = "VRAM_READ";
ProbeFlags[ProbeFlags["VRAM_WRITE"] = 385875968] = "VRAM_WRITE";
ProbeFlags[ProbeFlags["INTERRUPT"] = 134217728] = "INTERRUPT";
ProbeFlags[ProbeFlags["ILLEGAL"] = 150994944] = "ILLEGAL";
ProbeFlags[ProbeFlags["SP_PUSH"] = 167772160] = "SP_PUSH";
ProbeFlags[ProbeFlags["SP_POP"] = 184549376] = "SP_POP";
ProbeFlags[ProbeFlags["SCANLINE"] = 2113929216] = "SCANLINE";
ProbeFlags[ProbeFlags["FRAME"] = 2130706432] = "FRAME";
})(ProbeFlags = exports.ProbeFlags || (exports.ProbeFlags = {}));
class ProbeFrame {
}
class ProbeRecorder {
constructor(m, buflen) {
this.idx = 0; // index into buffer
this.sl = 0; // scanline
this.cur_sp = -1; // last stack pointer
this.singleFrame = true; // clear between frames
this.m = m;
this.reset(buflen || 0x100000);
}
start() {
this.m.connectProbe(this);
}
stop() {
this.m.connectProbe(null);
}
reset(newbuflen) {
if (newbuflen)
this.buf = new Uint32Array(newbuflen);
this.sl = 0;
this.cur_sp = -1;
this.clear();
}
clear() {
this.idx = 0;
}
logData(a) {
this.log(a);
}
log(a) {
// TODO: coalesce READ and EXECUTE and PUSH/POP
if (this.idx >= this.buf.length)
return;
this.buf[this.idx++] = a;
}
relog(a) {
this.buf[this.idx - 1] = a;
}
lastOp() {
if (this.idx > 0)
return this.buf[this.idx - 1] & 0xff000000;
else
return -1;
}
lastAddr() {
if (this.idx > 0)
return this.buf[this.idx - 1] & 0xffffff;
else
return -1;
}
addLogBuffer(src) {
if (this.idx + src.length > this.buf.length) {
src = src.slice(0, this.buf.length - this.idx);
}
this.buf.set(src, this.idx);
this.idx += src.length;
}
logClocks(clocks) {
clocks |= 0;
if (clocks > 0) {
if (this.lastOp() == ProbeFlags.CLOCKS)
this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks
else
this.log(clocks | ProbeFlags.CLOCKS);
}
}
logNewScanline() {
this.log(ProbeFlags.SCANLINE);
this.sl++;
}
logNewFrame() {
this.log(ProbeFlags.FRAME);
this.sl = 0;
if (this.singleFrame)
this.clear();
}
logExecute(address, SP) {
// record stack pushes/pops (from last instruction)
if (this.cur_sp !== SP) {
if (SP < this.cur_sp) {
this.log(ProbeFlags.SP_PUSH | SP);
}
if (SP > this.cur_sp) {
this.log(ProbeFlags.SP_POP | SP);
}
this.cur_sp = SP;
}
this.log(address | ProbeFlags.EXECUTE);
}
logInterrupt(type) {
this.log(type | ProbeFlags.INTERRUPT);
}
logValue(address, value, op) {
this.log((address & 0xffff) | ((value & 0xff) << 16) | op);
}
logRead(address, value) {
this.logValue(address, value, ProbeFlags.MEM_READ);
}
logWrite(address, value) {
this.logValue(address, value, ProbeFlags.MEM_WRITE);
}
logIORead(address, value) {
this.logValue(address, value, ProbeFlags.IO_READ);
}
logIOWrite(address, value) {
this.logValue(address, value, ProbeFlags.IO_WRITE);
}
logVRAMRead(address, value) {
this.logValue(address, value, ProbeFlags.VRAM_READ);
}
logVRAMWrite(address, value) {
this.logValue(address, value, ProbeFlags.VRAM_WRITE);
}
logIllegal(address) {
this.log(address | ProbeFlags.ILLEGAL);
}
countEvents(op) {
var count = 0;
for (var i = 0; i < this.idx; i++) {
if ((this.buf[i] & 0xff000000) == op)
count++;
}
return count;
}
countClocks() {
var count = 0;
for (var i = 0; i < this.idx; i++) {
if ((this.buf[i] & 0xff000000) == ProbeFlags.CLOCKS)
count += this.buf[i] & 0xffff;
}
return count;
}
}
exports.ProbeRecorder = ProbeRecorder;
//# sourceMappingURL=probe.js.map

1
gen/common/probe.js.map Normal file
View File

@ -0,0 +1 @@
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/common/probe.ts"],"names":[],"mappings":";;;AAGA,IAAY,UAgBX;AAhBD,WAAY,UAAU;IACpB,+CAAqB,CAAA;IACrB,wDAAsB,CAAA;IACtB,6DAAsB,CAAA;IACtB,2DAAqB,CAAA;IACrB,6DAAsB,CAAA;IACtB,yDAAsB,CAAA;IACtB,2DAAqB,CAAA;IACrB,6DAAsB,CAAA;IACtB,+DAAsB,CAAA;IACtB,6DAAsB,CAAA;IACtB,yDAAsB,CAAA;IACtB,yDAAsB,CAAA;IACtB,uDAAqB,CAAA;IACrB,4DAAqB,CAAA;IACrB,sDAAqB,CAAA;AACvB,CAAC,EAhBW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAgBrB;AAED,MAAM,UAAU;CAGf;AAED,MAAa,aAAa;IASxB,YAAY,CAAW,EAAE,MAAc;QALvC,QAAG,GAAY,CAAC,CAAC,CAAG,oBAAoB;QACxC,OAAE,GAAY,CAAC,CAAC,CAAI,WAAW;QAC/B,WAAM,GAAG,CAAC,CAAC,CAAC,CAAQ,qBAAqB;QACzC,gBAAW,GAAa,IAAI,CAAC,CAAC,uBAAuB;QAGnD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,KAAK;QACH,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI;QACF,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,CAAC,SAAmB;QACvB,IAAI,SAAS;YAAE,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IACD,KAAK;QACH,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACf,CAAC;IACD,OAAO,CAAC,CAAQ;QACd,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,GAAG,CAAC,CAAQ;QACV,+CAA+C;QAC/C,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,CAAQ;QACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM;QACJ,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;YACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,UAAU,CAAC;;YAEzC,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IACD,QAAQ;QACN,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC;YACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;;YAEvC,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IACD,YAAY,CAAC,GAAgB;QAC3B,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YAC3C,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;IAC3B,CAAC;IACC,SAAS,CAAC,MAAa;QACrB,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,MAAM;gBACpC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB;;gBAE9E,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;SACxC;IACH,CAAC;IACD,cAAc;QACZ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,EAAE,CAAC;IACZ,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IACD,UAAU,CAAC,OAAc,EAAE,EAAS;QAClC,mDAAmD;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;YACtB,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;gBACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;aACnC;YACD,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;gBACpB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;aAClC;YACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;SAClB;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,YAAY,CAAC,IAAW;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,QAAQ,CAAC,OAAc,EAAE,KAAY,EAAE,EAAS;QAC9C,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,OAAc,EAAE,KAAY;QAClC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IACD,QAAQ,CAAC,OAAc,EAAE,KAAY;QACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IACD,SAAS,CAAC,OAAc,EAAE,KAAY;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IACD,UAAU,CAAC,OAAc,EAAE,KAAY;QACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IACD,WAAW,CAAC,OAAc,EAAE,KAAY;QACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IACD,YAAY,CAAC,OAAc,EAAE,KAAY;QACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IACD,UAAU,CAAC,OAAc;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,WAAW,CAAC,EAAW;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE;gBAClC,KAAK,EAAE,CAAC;SACX;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,WAAW;QACT,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM;gBACjD,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACjC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CAEF;AArID,sCAqIC"}

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProbeRecorder = exports.ProbeFlags = exports.StateRecorderImpl = void 0;
exports.StateRecorderImpl = void 0;
const emu_1 = require("./emu");
class StateRecorderImpl {
constructor(platform) {
@ -125,157 +125,4 @@ class StateRecorderImpl {
}
}
exports.StateRecorderImpl = StateRecorderImpl;
var ProbeFlags;
(function (ProbeFlags) {
ProbeFlags[ProbeFlags["CLOCKS"] = 0] = "CLOCKS";
ProbeFlags[ProbeFlags["EXECUTE"] = 16777216] = "EXECUTE";
ProbeFlags[ProbeFlags["HAS_VALUE"] = 268435456] = "HAS_VALUE";
ProbeFlags[ProbeFlags["MEM_READ"] = 301989888] = "MEM_READ";
ProbeFlags[ProbeFlags["MEM_WRITE"] = 318767104] = "MEM_WRITE";
ProbeFlags[ProbeFlags["IO_READ"] = 335544320] = "IO_READ";
ProbeFlags[ProbeFlags["IO_WRITE"] = 352321536] = "IO_WRITE";
ProbeFlags[ProbeFlags["VRAM_READ"] = 369098752] = "VRAM_READ";
ProbeFlags[ProbeFlags["VRAM_WRITE"] = 385875968] = "VRAM_WRITE";
ProbeFlags[ProbeFlags["INTERRUPT"] = 134217728] = "INTERRUPT";
ProbeFlags[ProbeFlags["ILLEGAL"] = 150994944] = "ILLEGAL";
ProbeFlags[ProbeFlags["SP_PUSH"] = 167772160] = "SP_PUSH";
ProbeFlags[ProbeFlags["SP_POP"] = 184549376] = "SP_POP";
ProbeFlags[ProbeFlags["SCANLINE"] = 2113929216] = "SCANLINE";
ProbeFlags[ProbeFlags["FRAME"] = 2130706432] = "FRAME";
})(ProbeFlags = exports.ProbeFlags || (exports.ProbeFlags = {}));
class ProbeFrame {
}
class ProbeRecorder {
constructor(m, buflen) {
this.idx = 0; // index into buffer
this.sl = 0; // scanline
this.cur_sp = -1; // last stack pointer
this.singleFrame = true; // clear between frames
this.m = m;
this.reset(buflen || 0x100000);
}
start() {
this.m.connectProbe(this);
}
stop() {
this.m.connectProbe(null);
}
reset(newbuflen) {
if (newbuflen)
this.buf = new Uint32Array(newbuflen);
this.sl = 0;
this.cur_sp = -1;
this.clear();
}
clear() {
this.idx = 0;
}
logData(a) {
this.log(a);
}
log(a) {
// TODO: coalesce READ and EXECUTE and PUSH/POP
if (this.idx >= this.buf.length)
return;
this.buf[this.idx++] = a;
}
relog(a) {
this.buf[this.idx - 1] = a;
}
lastOp() {
if (this.idx > 0)
return this.buf[this.idx - 1] & 0xff000000;
else
return -1;
}
lastAddr() {
if (this.idx > 0)
return this.buf[this.idx - 1] & 0xffffff;
else
return -1;
}
addLogBuffer(src) {
if (this.idx + src.length > this.buf.length) {
src = src.slice(0, this.buf.length - this.idx);
}
this.buf.set(src, this.idx);
this.idx += src.length;
}
logClocks(clocks) {
clocks |= 0;
if (clocks > 0) {
if (this.lastOp() == ProbeFlags.CLOCKS)
this.relog((this.lastAddr() + clocks) | ProbeFlags.CLOCKS); // coalesce clocks
else
this.log(clocks | ProbeFlags.CLOCKS);
}
}
logNewScanline() {
this.log(ProbeFlags.SCANLINE);
this.sl++;
}
logNewFrame() {
this.log(ProbeFlags.FRAME);
this.sl = 0;
if (this.singleFrame)
this.clear();
}
logExecute(address, SP) {
// record stack pushes/pops (from last instruction)
if (this.cur_sp !== SP) {
if (SP < this.cur_sp) {
this.log(ProbeFlags.SP_PUSH | SP);
}
if (SP > this.cur_sp) {
this.log(ProbeFlags.SP_POP | SP);
}
this.cur_sp = SP;
}
this.log(address | ProbeFlags.EXECUTE);
}
logInterrupt(type) {
this.log(type | ProbeFlags.INTERRUPT);
}
logValue(address, value, op) {
this.log((address & 0xffff) | ((value & 0xff) << 16) | op);
}
logRead(address, value) {
this.logValue(address, value, ProbeFlags.MEM_READ);
}
logWrite(address, value) {
this.logValue(address, value, ProbeFlags.MEM_WRITE);
}
logIORead(address, value) {
this.logValue(address, value, ProbeFlags.IO_READ);
}
logIOWrite(address, value) {
this.logValue(address, value, ProbeFlags.IO_WRITE);
}
logVRAMRead(address, value) {
this.logValue(address, value, ProbeFlags.VRAM_READ);
}
logVRAMWrite(address, value) {
this.logValue(address, value, ProbeFlags.VRAM_WRITE);
}
logIllegal(address) {
this.log(address | ProbeFlags.ILLEGAL);
}
countEvents(op) {
var count = 0;
for (var i = 0; i < this.idx; i++) {
if ((this.buf[i] & 0xff000000) == op)
count++;
}
return count;
}
countClocks() {
var count = 0;
for (var i = 0; i < this.idx; i++) {
if ((this.buf[i] & 0xff000000) == ProbeFlags.CLOCKS)
count += this.buf[i] & 0xffff;
}
return count;
}
}
exports.ProbeRecorder = ProbeRecorder;
//# sourceMappingURL=recorder.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{I as l,p}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{J as i,O as o}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,0,64,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,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],c=class extends p{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=224;this.joymask0=0;this.runaddr=16384}loadROM(t){let e=new Uint8Array(t.length+m.length);e.set(m,0),e[24]=t.length&255,e[25]=t.length>>8,e[26]=this.runaddr&255,e[27]=this.runaddr>>8,e.set(t,m.length),super.loadROM(e)}reset(){if(super.reset(),this.exports.machine_exec(this.sys,1e6),this.romptr&&this.romlen){this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);for(var t=0;t<1e5&&this.getPC()!=this.runaddr;t++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var e=this.getRasterY(),r=Math.floor((this.numTotalScanlines-e)*(4e6/50)/this.numTotalScanlines),s=this.probe!=null;return s&&this.exports.machine_reset_probe_buffer(),r=super.advanceFrameClock(t,r),s&&this.copyProbeData(),r}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,e=t[9]+(t[8]<<8),r=t[10]+(t[11]<<8),s=t[12]+(t[13]<<8),a=t[14]+(t[15]<<8),x=t[24]+(t[25]<<8),f=t[26]+(t[27]<<8),u=t[28]+(t[29]<<8),h=t[34]+(t[35]<<8),_=t[36]+(t[37]<<8);return{PC:h,SP:x,AF:e,BC:a,DE:s,HL:r,IX:u,IY:f,IR:_,o:this.readConst(h)}}saveState(){return this.exports.machine_save_state(this.sys,this.stateptr),{c:this.getCPUState(),state:this.statearr.slice(0)}}loadState(t){this.statearr.set(t.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:768,height:272,overscan:!0,videoFrequency:50,aspect:1.3}}setKeyInput(t,e,r){if(!(t==16||t==17||t==18||t==224)){var s=0,a=0;t==37&&(t=8,s=4),t==38&&(t=11,s=1),t==39&&(t=9,s=8),t==40&&(t=10,s=2),t==32&&(s=16),t==65&&(t=65,a=4),t==87&&(t=87,a=1),t==68&&(t=68,a=8),t==83&&(t=83,a=2),t==69&&(a=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),r&o.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=s):r&o.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~s)}}};var v=[{id:"hello.asm",name:"Hello World (ASM)"},{id:"easy_stdio_boxes.c",name:"Standard I/O (C)"},{id:"easy_mode_strings.c",name:"Video Modes (C)"},{id:"easy_random.c",name:"Random Numbers (C)"},{id:"easy_sprites.c",name:"Keyboard + Sprites (C)"},{id:"medium_scrolling.c",name:"Scrolling Text (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"music.c",name:"Music Player (C)"}],C={main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"Screen RAM",start:49152,size:16384,type:"ram"}]},n=class extends l{newMachine(){return new c("cpc")}getPresets(){return v}getDefaultExtension(){return".asm"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return C}showHelp(){window.open("http://lronaldo.github.io/cpctelera/files/readme-txt.html","_help")}};i["cpc.6128"]=n;i["cpc.464"]=n;i["cpc.kcc"]=n;
//# sourceMappingURL=cpc-UWHQWW7T.js.map

2
gen/cpc-XUBZ2E5B.js Normal file
View File

@ -0,0 +1,2 @@
import{K as l,r as p}from"./chunk-3NXXB3IA.js";import{J as i,O as o}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,64,0,0,0,0,64,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,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],c=class extends p{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=224;this.joymask0=0;this.runaddr=16384}loadROM(t){let e=new Uint8Array(t.length+m.length);e.set(m,0),e[24]=t.length&255,e[25]=t.length>>8,e[26]=this.runaddr&255,e[27]=this.runaddr>>8,e.set(t,m.length),super.loadROM(e)}reset(){if(super.reset(),this.exports.machine_exec(this.sys,1e6),this.romptr&&this.romlen){this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);for(var t=0;t<1e5&&this.getPC()!=this.runaddr;t++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var e=this.getRasterY(),r=Math.floor((this.numTotalScanlines-e)*(4e6/50)/this.numTotalScanlines),s=this.probe!=null;return s&&this.exports.machine_reset_probe_buffer(),r=super.advanceFrameClock(t,r),s&&this.copyProbeData(),r}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,e=t[9]+(t[8]<<8),r=t[10]+(t[11]<<8),s=t[12]+(t[13]<<8),a=t[14]+(t[15]<<8),x=t[24]+(t[25]<<8),f=t[26]+(t[27]<<8),u=t[28]+(t[29]<<8),h=t[34]+(t[35]<<8),_=t[36]+(t[37]<<8);return{PC:h,SP:x,AF:e,BC:a,DE:s,HL:r,IX:u,IY:f,IR:_,o:this.readConst(h)}}saveState(){return this.exports.machine_save_state(this.sys,this.stateptr),{c:this.getCPUState(),state:this.statearr.slice(0)}}loadState(t){this.statearr.set(t.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:768,height:272,overscan:!0,videoFrequency:50,aspect:1.3}}setKeyInput(t,e,r){if(!(t==16||t==17||t==18||t==224)){var s=0,a=0;t==37&&(t=8,s=4),t==38&&(t=11,s=1),t==39&&(t=9,s=8),t==40&&(t=10,s=2),t==32&&(s=16),t==65&&(t=65,a=4),t==87&&(t=87,a=1),t==68&&(t=68,a=8),t==83&&(t=83,a=2),t==69&&(a=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),r&o.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=s):r&o.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~s)}}};var v=[{id:"hello.asm",name:"Hello World (ASM)"},{id:"easy_stdio_boxes.c",name:"Standard I/O (C)"},{id:"easy_mode_strings.c",name:"Video Modes (C)"},{id:"easy_random.c",name:"Random Numbers (C)"},{id:"easy_sprites.c",name:"Keyboard + Sprites (C)"},{id:"medium_scrolling.c",name:"Scrolling Text (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"music.c",name:"Music Player (C)"}],C={main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"Screen RAM",start:49152,size:16384,type:"ram"}]},n=class extends l{newMachine(){return new c("cpc")}getPresets(){return v}getDefaultExtension(){return".asm"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return C}showHelp(){window.open("http://lronaldo.github.io/cpctelera/files/readme-txt.html","_help")}};i["cpc.6128"]=n;i["cpc.464"]=n;i["cpc.kcc"]=n;
//# sourceMappingURL=cpc-XUBZ2E5B.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{a as d}from"./chunk-3XE5YOCV.js";import{m as c}from"./chunk-P4DRXSWU.js";import"./chunk-M72QJ5SI.js";import"./chunk-5SHCNQ2O.js";import"./chunk-BZE6MX4T.js";import{H as m,m as u,s as h}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as i,B as o,J as l,m as n}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var s=31,a=class extends u{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=32768;this.cpu=new h;this.ram=new Uint8Array(16384);this.read=i([[0,16383,16383,e=>this.ram[e]],[16384,16384,65535,e=>this.serial.byteAvailable()?128:0],[16385,16385,65535,e=>this.serial.recvByte()],[16386,16386,65535,e=>this.serial.clearToSend()?128:0],[32768,65535,32767,e=>this.rom&&this.rom[e]]]);this.write=i([[0,16383,16383,(e,t)=>{this.ram[e]=t}],[16387,16387,65535,(e,t)=>this.serial.sendByte(t)],[16399,16399,65535,(e,t)=>{this.inputs[s]=1}]]);this.connectCPUMemoryBus(this)}connectSerialIO(e){this.serial=e}readConst(e){return this.read(e)}advanceFrame(e){for(var t=0;t<this.cpuFrequency/60&&!(e&&e());)t+=this.advanceCPU();return t}advanceCPU(){if(this.isHalted())return 1;var e=super.advanceCPU();return this.serial&&this.serial.advance(e),e}reset(){this.inputs[s]=0,super.reset(),this.serial&&this.serial.reset()}isHalted(){return this.inputs[s]!=0}};var S=[{id:"hello.dasm",name:"Hello World (ASM)"}],f=class{constructor(e){e.style.overflowY="auto";var t=$('<div id="gameport"/>').appendTo(e);$('<p class="transcript-header">Serial Output</p>').appendTo(t);var y=$('<div id="windowport" class="transcript"/>').appendTo(t);this.div=y[0]}start(){this.tty=new d(this.div,!1)}reset(){this.tty.clear()}saveState(){return this.tty.saveState()}loadState(e){this.tty.loadState(e)}};function p(r){return r==10?"":r<32?String.fromCharCode(r+9216):String.fromCharCode(r)}var v=class{constructor(){this.bufferedRead=!0;this.cyclesPerByte=1e6/(57600/8);this.maxOutputBytes=4096}clearToSend(){return this.outputBytes.length<this.maxOutputBytes}sendByte(e){this.clearToSend()&&(this.outputBytes.push(e),this.viewer.tty.addtext(p(e),2|32),e==10&&this.viewer.tty.newline(),this.clearToSend()||(this.viewer.tty.newline(),this.viewer.tty.addtext("\u26A0\uFE0F OUTPUT BUFFER FULL \u26A0\uFE0F",4)))}byteAvailable(){return this.readIndex()>this.inputIndex}recvByte(){var e=this.readIndex();this.inputIndex=e;var t=(this.inputBytes&&this.inputBytes[e])|0;return this.viewer.tty.addtext(p(t),2|16),t==10&&this.viewer.tty.newline(),t}readIndex(){return this.bufferedRead?this.inputIndex+1:Math.floor(this.clk/this.cyclesPerByte)}reset(){this.inputIndex=-1,this.clk=0,this.outputBytes=[],this.bufin=""}advance(e){this.clk+=e}saveState(){return{clk:this.clk,idx:this.inputIndex,out:this.outputBytes.slice()}}loadState(e){this.clk=e.clk,this.inputIndex=e.idx,this.outputBytes=e.out.slice()}},x=class extends m{constructor(e){super(e);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"ROM",start:32768,size:32768,type:"rom"}]}};this.serview=new f(e)}async start(){super.start(),this.serial=new v,this.serial.viewer=this.serview,this.serview.start(),this.machine.connectSerialIO(this.serial)}reset(){this.serial.inputBytes=o(this.internalFiles["serialin.dat"]),super.reset(),this.serview.reset()}isBlocked(){return this.machine.isHalted()}advance(e){return this.isBlocked()?(this.internalFiles["serialout.dat"]=n(this.serial.outputBytes),c(),0):super.advance(e)}saveState(){var e=super.saveState();return e.serial=this.serial.saveState(),e.serview=this.serview.saveState(),e}loadState(e){super.loadState(e),this.serial.loadState(e.serial),this.serview.loadState(e.serview)}newMachine(){return new a}getPresets(){return S}getDefaultExtension(){return".dasm"}readAddress(e){return this.machine.readConst(e)}};l["devel-6502"]=x;export{v as SerialTestHarness};
//# sourceMappingURL=devel-OHDZCLXK.js.map

2
gen/devel-WZS7Q7SP.js Normal file
View File

@ -0,0 +1,2 @@
import{a as d}from"./chunk-3XE5YOCV.js";import{m as c}from"./chunk-T77IXPQB.js";import"./chunk-M72QJ5SI.js";import"./chunk-5SHCNQ2O.js";import"./chunk-LHX4ZWD3.js";import{J as m,o as u,u as h}from"./chunk-3NXXB3IA.js";import{$ as i,B as o,J as l,m as n}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var s=31,a=class extends u{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=32768;this.cpu=new h;this.ram=new Uint8Array(16384);this.read=i([[0,16383,16383,e=>this.ram[e]],[16384,16384,65535,e=>this.serial.byteAvailable()?128:0],[16385,16385,65535,e=>this.serial.recvByte()],[16386,16386,65535,e=>this.serial.clearToSend()?128:0],[32768,65535,32767,e=>this.rom&&this.rom[e]]]);this.write=i([[0,16383,16383,(e,t)=>{this.ram[e]=t}],[16387,16387,65535,(e,t)=>this.serial.sendByte(t)],[16399,16399,65535,(e,t)=>{this.inputs[s]=1}]]);this.connectCPUMemoryBus(this)}connectSerialIO(e){this.serial=e}readConst(e){return this.read(e)}advanceFrame(e){for(var t=0;t<this.cpuFrequency/60&&!(e&&e());)t+=this.advanceCPU();return t}advanceCPU(){if(this.isHalted())return 1;var e=super.advanceCPU();return this.serial&&this.serial.advance(e),e}reset(){this.inputs[s]=0,super.reset(),this.serial&&this.serial.reset()}isHalted(){return this.inputs[s]!=0}};var S=[{id:"hello.dasm",name:"Hello World (ASM)"}],f=class{constructor(e){e.style.overflowY="auto";var t=$('<div id="gameport"/>').appendTo(e);$('<p class="transcript-header">Serial Output</p>').appendTo(t);var y=$('<div id="windowport" class="transcript"/>').appendTo(t);this.div=y[0]}start(){this.tty=new d(this.div,!1)}reset(){this.tty.clear()}saveState(){return this.tty.saveState()}loadState(e){this.tty.loadState(e)}};function p(r){return r==10?"":r<32?String.fromCharCode(r+9216):String.fromCharCode(r)}var v=class{constructor(){this.bufferedRead=!0;this.cyclesPerByte=1e6/(57600/8);this.maxOutputBytes=4096}clearToSend(){return this.outputBytes.length<this.maxOutputBytes}sendByte(e){this.clearToSend()&&(this.outputBytes.push(e),this.viewer.tty.addtext(p(e),2|32),e==10&&this.viewer.tty.newline(),this.clearToSend()||(this.viewer.tty.newline(),this.viewer.tty.addtext("\u26A0\uFE0F OUTPUT BUFFER FULL \u26A0\uFE0F",4)))}byteAvailable(){return this.readIndex()>this.inputIndex}recvByte(){var e=this.readIndex();this.inputIndex=e;var t=(this.inputBytes&&this.inputBytes[e])|0;return this.viewer.tty.addtext(p(t),2|16),t==10&&this.viewer.tty.newline(),t}readIndex(){return this.bufferedRead?this.inputIndex+1:Math.floor(this.clk/this.cyclesPerByte)}reset(){this.inputIndex=-1,this.clk=0,this.outputBytes=[],this.bufin=""}advance(e){this.clk+=e}saveState(){return{clk:this.clk,idx:this.inputIndex,out:this.outputBytes.slice()}}loadState(e){this.clk=e.clk,this.inputIndex=e.idx,this.outputBytes=e.out.slice()}},x=class extends m{constructor(e){super(e);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"ROM",start:32768,size:32768,type:"rom"}]}};this.serview=new f(e)}async start(){super.start(),this.serial=new v,this.serial.viewer=this.serview,this.serview.start(),this.machine.connectSerialIO(this.serial)}reset(){this.serial.inputBytes=o(this.internalFiles["serialin.dat"]),super.reset(),this.serview.reset()}isBlocked(){return this.machine.isHalted()}advance(e){return this.isBlocked()?(this.internalFiles["serialout.dat"]=n(this.serial.outputBytes),c(),0):super.advance(e)}saveState(){var e=super.saveState();return e.serial=this.serial.saveState(),e.serview=this.serview.saveState(),e}loadState(e){super.loadState(e),this.serial.loadState(e.serial),this.serview.loadState(e.serview)}newMachine(){return new a}getPresets(){return S}getDefaultExtension(){return".dasm"}readAddress(e){return this.machine.readConst(e)}};l["devel-6502"]=x;export{v as SerialTestHarness};
//# sourceMappingURL=devel-WZS7Q7SP.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
import{a as w,b as x}from"./chunk-BZE6MX4T.js";import"./chunk-HKPUADCX.js";import{D as v,J as c,k as m,l as u,x as g,z as p}from"./chunk-UWX4LVLA.js";import{e as I}from"./chunk-5XVCUSSZ.js";var h=I(x()),i,a,l,y=function(e){if(!e||e.length==0)return{};for(var r={},t=0;t<e.length;++t){var o=e[t].split("=",2);o.length==1?r[o[0]]="":r[o[0]]=decodeURIComponent(o[1].replace(/\+/g," "))}return r}(window.location.search.substr(1).split("&"));function P(){typeof window.onerror=="object"&&(window.onerror=function(e,r,t,o,n){var s=e+" "+r+" "+t+":"+o+", "+n;$.get("/error?msg="+encodeURIComponent(s),"text")})}function M(){var e=!1;document.addEventListener("visibilitychange",function(r){document.visibilityState=="hidden"&&a.isRunning()?(a.pause(),e=!0):document.visibilityState=="visible"&&e&&(a.resume(),e=!1)}),$(window).on("focus",function(){e&&(a.resume(),e=!1)}),$(window).on("blur",function(){a.isRunning()&&(a.pause(),e=!0)})}async function k(e,r){if(!r){alert("No ROM found.");return}console.log(r.length+" bytes"),await a.loadROM(e,r),a.resume()}function R(){return $("#emulator").find("canvas")}function E(e,r,t){v("gif.js/dist/gif.js").then(()=>{var o=R()[0];if(!o){alert("Could not find canvas element to record video!");return}var n=0;o.style&&o.style.transform&&(o.style.transform.indexOf("rotate(-90deg)")>=0?n=-1:o.style.transform.indexOf("rotate(90deg)")>=0&&(n=1));var s=new GIF({workerScript:"gif.js/dist/gif.worker.js",workers:4,quality:10,rotate:n});s.on("finished",function(C){console.log("finished encoding GIF"),t(C)}),e=e||100+(Math.random()*256&3),r=r||100+(Math.random()*256&15);var f=0;console.log("Recording video",o);var d=()=>{f++>r?(console.log("Rendering video"),s.render()):(s.addFrame(o,{delay:e,copy:!0}),setTimeout(d,e))};d()})}async function S(e){if(!c[i])throw Error("Invalid platform '"+i+"'.");a=new c[i]($("#emuscreen")[0]),await a.start(),e.rec&&R().on("focus",()=>{a.resume()});var r=e.n||"Game",t,o=e.url,n=e.r;if(o)return console.log(o),g(o,f=>{k(r,f)},"arraybuffer"),!0;if(n){var s=u(atob(n));t=new m().decode(s)}return M(),k(r,t),!0}async function b(e){if(e.data&&(e=e.data),i=e.p,!i)throw new Error("No platform variable!");try{var r=await w(p(i));console.log("starting platform",i),await S(e)}catch(t){console.log(t),alert('Platform "'+i+'" not supported.')}}function F(){P(),y.p&&b(y)}window.addEventListener("message",O,!1);function O(e){if(e.data){var r=e.data.cmd;if(r=="start"&&!a)b(e);else if(r=="reset")a.reset(),l.reset();else if(r=="getReplay"){var t={frameCount:l.frameCount,checkpoints:l.checkpoints,framerecs:l.framerecs,checkpointInterval:l.checkpointInterval,maxCheckpoints:l.maxCheckpoints};e.source.postMessage({ack:r,replay:t},e.origin)}else if(r=="watchState"){var o=new Function("platform","state",e.data.fn);l.callbackNewCheckpoint=n=>{e.source.postMessage({ack:r,state:o(a,n)},e.origin)}}else r=="recordVideo"?E(e.data.intervalMsec,e.data.maxFrames,function(n){e.data.filename&&(0,h.saveAs)(n,e.data.filename),e.source.postMessage({ack:r,gif:n},e.origin)}):console.log("Unknown data.cmd: "+r)}}self===top&&(document.body.style.backgroundColor="#555");F();export{a as platform,i as platform_id,F as startEmbed,l as stateRecorder};
import{b as w,c as x}from"./chunk-LHX4ZWD3.js";import{D as v,J as c,k as m,l as u,x as g,z as p}from"./chunk-G7IBJTLG.js";import{e as I}from"./chunk-5XVCUSSZ.js";var h=I(x()),i,a,l,y=function(e){if(!e||e.length==0)return{};for(var r={},t=0;t<e.length;++t){var o=e[t].split("=",2);o.length==1?r[o[0]]="":r[o[0]]=decodeURIComponent(o[1].replace(/\+/g," "))}return r}(window.location.search.substr(1).split("&"));function P(){typeof window.onerror=="object"&&(window.onerror=function(e,r,t,o,n){var s=e+" "+r+" "+t+":"+o+", "+n;$.get("/error?msg="+encodeURIComponent(s),"text")})}function M(){var e=!1;document.addEventListener("visibilitychange",function(r){document.visibilityState=="hidden"&&a.isRunning()?(a.pause(),e=!0):document.visibilityState=="visible"&&e&&(a.resume(),e=!1)}),$(window).on("focus",function(){e&&(a.resume(),e=!1)}),$(window).on("blur",function(){a.isRunning()&&(a.pause(),e=!0)})}async function k(e,r){if(!r){alert("No ROM found.");return}console.log(r.length+" bytes"),await a.loadROM(e,r),a.resume()}function R(){return $("#emulator").find("canvas")}function E(e,r,t){v("gif.js/dist/gif.js").then(()=>{var o=R()[0];if(!o){alert("Could not find canvas element to record video!");return}var n=0;o.style&&o.style.transform&&(o.style.transform.indexOf("rotate(-90deg)")>=0?n=-1:o.style.transform.indexOf("rotate(90deg)")>=0&&(n=1));var s=new GIF({workerScript:"gif.js/dist/gif.worker.js",workers:4,quality:10,rotate:n});s.on("finished",function(C){console.log("finished encoding GIF"),t(C)}),e=e||100+(Math.random()*256&3),r=r||100+(Math.random()*256&15);var f=0;console.log("Recording video",o);var d=()=>{f++>r?(console.log("Rendering video"),s.render()):(s.addFrame(o,{delay:e,copy:!0}),setTimeout(d,e))};d()})}async function S(e){if(!c[i])throw Error("Invalid platform '"+i+"'.");a=new c[i]($("#emuscreen")[0]),await a.start(),e.rec&&R().on("focus",()=>{a.resume()});var r=e.n||"Game",t,o=e.url,n=e.r;if(o)return console.log(o),g(o,f=>{k(r,f)},"arraybuffer"),!0;if(n){var s=u(atob(n));t=new m().decode(s)}return M(),k(r,t),!0}async function b(e){if(e.data&&(e=e.data),i=e.p,!i)throw new Error("No platform variable!");try{var r=await w(p(i));console.log("starting platform",i),await S(e)}catch(t){console.log(t),alert('Platform "'+i+'" not supported.')}}function F(){P(),y.p&&b(y)}window.addEventListener("message",O,!1);function O(e){if(e.data){var r=e.data.cmd;if(r=="start"&&!a)b(e);else if(r=="reset")a.reset(),l.reset();else if(r=="getReplay"){var t={frameCount:l.frameCount,checkpoints:l.checkpoints,framerecs:l.framerecs,checkpointInterval:l.checkpointInterval,maxCheckpoints:l.maxCheckpoints};e.source.postMessage({ack:r,replay:t},e.origin)}else if(r=="watchState"){var o=new Function("platform","state",e.data.fn);l.callbackNewCheckpoint=n=>{e.source.postMessage({ack:r,state:o(a,n)},e.origin)}}else r=="recordVideo"?E(e.data.intervalMsec,e.data.maxFrames,function(n){e.data.filename&&(0,h.saveAs)(n,e.data.filename),e.source.postMessage({ack:r,gif:n},e.origin)}):console.log("Unknown data.cmd: "+r)}}self===top&&(document.body.style.backgroundColor="#555");F();export{a as platform,i as platform_id,F as startEmbed,l as stateRecorder};
//# sourceMappingURL=embedui.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
gen/galaxian-Y53CBPWF.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -6,7 +6,7 @@ const ui_1 = require("../ui");
const util_1 = require("../../common/util");
const vlist_1 = require("../../common/vlist");
const emu_1 = require("../../common/emu");
const recorder_1 = require("../../common/recorder");
const probe_1 = require("../../common/probe");
const baseplatform_1 = require("../../common/baseplatform");
///
function ignoreSymbol(sym) {
@ -355,20 +355,20 @@ class ProbeViewBaseBase {
var value = (word >> 16) & 0xff;
var op = word & OPAQUE_BLACK;
switch (op) {
case recorder_1.ProbeFlags.SCANLINE:
case probe_1.ProbeFlags.SCANLINE:
row++;
col = 0;
break;
case recorder_1.ProbeFlags.FRAME:
case probe_1.ProbeFlags.FRAME:
row = 0;
col = 0;
break;
case recorder_1.ProbeFlags.CLOCKS:
case probe_1.ProbeFlags.CLOCKS:
col += addr;
clk += addr;
break;
case recorder_1.ProbeFlags.SP_PUSH:
case recorder_1.ProbeFlags.SP_POP:
case probe_1.ProbeFlags.SP_PUSH:
case probe_1.ProbeFlags.SP_POP:
this.sp = addr;
default:
eventfn(op, addr, col, row, clk, value);
@ -379,58 +379,58 @@ class ProbeViewBaseBase {
opToString(op, addr, value) {
var s = "";
switch (op) {
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
s = "Exec";
break;
case recorder_1.ProbeFlags.MEM_READ:
case probe_1.ProbeFlags.MEM_READ:
s = "Read";
break;
case recorder_1.ProbeFlags.MEM_WRITE:
case probe_1.ProbeFlags.MEM_WRITE:
s = "Write";
break;
case recorder_1.ProbeFlags.IO_READ:
case probe_1.ProbeFlags.IO_READ:
s = "IO Read";
break;
case recorder_1.ProbeFlags.IO_WRITE:
case probe_1.ProbeFlags.IO_WRITE:
s = "IO Write";
break;
case recorder_1.ProbeFlags.VRAM_READ:
case probe_1.ProbeFlags.VRAM_READ:
s = "VRAM Read";
break;
case recorder_1.ProbeFlags.VRAM_WRITE:
case probe_1.ProbeFlags.VRAM_WRITE:
s = "VRAM Write";
break;
case recorder_1.ProbeFlags.INTERRUPT:
case probe_1.ProbeFlags.INTERRUPT:
s = "Interrupt";
break;
case recorder_1.ProbeFlags.ILLEGAL:
case probe_1.ProbeFlags.ILLEGAL:
s = "Error";
break;
case recorder_1.ProbeFlags.SP_PUSH:
case probe_1.ProbeFlags.SP_PUSH:
s = "Stack Push";
break;
case recorder_1.ProbeFlags.SP_POP:
case probe_1.ProbeFlags.SP_POP:
s = "Stack Pop";
break;
default: return "";
}
if (typeof addr == 'number')
s += " " + this.addr2str(addr);
if ((op & recorder_1.ProbeFlags.HAS_VALUE) && typeof value == 'number')
if ((op & probe_1.ProbeFlags.HAS_VALUE) && typeof value == 'number')
s += " = $" + (0, util_1.hex)(value, 2);
return s;
}
getOpRGB(op, addr) {
switch (op) {
case recorder_1.ProbeFlags.EXECUTE: return 0x018001;
case recorder_1.ProbeFlags.MEM_READ: return 0x800101;
case recorder_1.ProbeFlags.MEM_WRITE: return 0x010180;
case recorder_1.ProbeFlags.IO_READ: return 0x018080;
case recorder_1.ProbeFlags.IO_WRITE: return 0xc00180;
case recorder_1.ProbeFlags.VRAM_READ: return 0x808001;
case recorder_1.ProbeFlags.VRAM_WRITE: return 0x4080c0;
case recorder_1.ProbeFlags.INTERRUPT: return 0x3fbf3f;
case recorder_1.ProbeFlags.ILLEGAL: return 0x3f3fff;
case probe_1.ProbeFlags.EXECUTE: return 0x018001;
case probe_1.ProbeFlags.MEM_READ: return 0x800101;
case probe_1.ProbeFlags.MEM_WRITE: return 0x010180;
case probe_1.ProbeFlags.IO_READ: return 0x018080;
case probe_1.ProbeFlags.IO_WRITE: return 0xc00180;
case probe_1.ProbeFlags.VRAM_READ: return 0x808001;
case probe_1.ProbeFlags.VRAM_WRITE: return 0x4080c0;
case probe_1.ProbeFlags.INTERRUPT: return 0x3fbf3f;
case probe_1.ProbeFlags.ILLEGAL: return 0x3f3fff;
default: return 0;
}
}
@ -499,13 +499,13 @@ class ProbeBitmapViewBase extends ProbeViewBase {
var lastcol = -1;
this.redraw((op, addr, col, row, clk, value) => {
switch (op) {
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
lastroutine = this.addr2symbol(addr) || lastroutine;
break;
case recorder_1.ProbeFlags.SP_PUSH:
case probe_1.ProbeFlags.SP_PUSH:
symstack.push(lastroutine);
break;
case recorder_1.ProbeFlags.SP_POP:
case probe_1.ProbeFlags.SP_POP:
lastroutine = symstack.pop();
break;
}
@ -568,14 +568,14 @@ class AddressHeatMapView extends ProbeBitmapViewBase {
var symstack = [];
this.redraw((op, addr, col, row, clk, value) => {
switch (op) {
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
pc = addr;
lastroutine = this.addr2symbol(addr) || lastroutine;
break;
case recorder_1.ProbeFlags.SP_PUSH:
case probe_1.ProbeFlags.SP_PUSH:
symstack.push(lastroutine);
break;
case recorder_1.ProbeFlags.SP_POP:
case probe_1.ProbeFlags.SP_POP:
lastroutine = symstack.pop();
break;
}
@ -626,32 +626,32 @@ class RasterStackMapView extends RasterPCHeatMapView {
drawEvent(op, addr, col, row) {
var iofs = col + row * this.canvas.width;
// track interrupts
if (op == recorder_1.ProbeFlags.INTERRUPT)
if (op == probe_1.ProbeFlags.INTERRUPT)
this.interrupt = 1;
if (this.interrupt == 1 && op == recorder_1.ProbeFlags.SP_PUSH)
if (this.interrupt == 1 && op == probe_1.ProbeFlags.SP_PUSH)
this.interrupt = addr;
if (this.interrupt > 1 && this.sp > this.interrupt)
this.interrupt = 0;
// track writes
if (op == recorder_1.ProbeFlags.MEM_WRITE) {
if (op == probe_1.ProbeFlags.MEM_WRITE) {
this.rgb |= 0x00002f;
}
if (op == recorder_1.ProbeFlags.VRAM_WRITE) {
if (op == probe_1.ProbeFlags.VRAM_WRITE) {
this.rgb |= 0x003f80;
}
if (op == recorder_1.ProbeFlags.IO_WRITE) {
if (op == probe_1.ProbeFlags.IO_WRITE) {
this.rgb |= 0x1f3f80;
}
if (op == recorder_1.ProbeFlags.IO_READ) {
if (op == probe_1.ProbeFlags.IO_READ) {
this.rgb |= 0x001f00;
}
// draw pixels?
if (op == recorder_1.ProbeFlags.ILLEGAL || op == recorder_1.ProbeFlags.VRAM_READ) {
if (op == probe_1.ProbeFlags.ILLEGAL || op == probe_1.ProbeFlags.VRAM_READ) {
this.datau32[iofs] = 0xff0f0f0f;
}
else {
let data = this.rgb;
if (op == recorder_1.ProbeFlags.EXECUTE) {
if (op == probe_1.ProbeFlags.EXECUTE) {
let sp = this.sp & 15;
if (sp >= 8)
sp = 16 - sp;
@ -713,7 +713,7 @@ class ProbeLogView extends ProbeViewBaseBase {
this.dumplines[clk] = line;
}
switch (op) {
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
if (ui_1.platform.disassemble) {
var disasm = ui_1.platform.disassemble(addr, ui_1.platform.readAddress.bind(ui_1.platform));
line.asm = disasm && disasm.line;
@ -750,7 +750,7 @@ class ScanlineIOView extends ProbeViewBaseBase {
if (opaddr !== undefined) {
var addr = opaddr & 0xffff;
var op = op & OPAQUE_BLACK;
if (op == recorder_1.ProbeFlags.EXECUTE) {
if (op == probe_1.ProbeFlags.EXECUTE) {
s += ',';
}
else {
@ -780,16 +780,16 @@ class ScanlineIOView extends ProbeViewBaseBase {
this.dumplines[row] = line = [];
}
switch (op) {
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
var sym = ui_1.platform.debugSymbols.addr2symbol[addr];
if (sym)
line[-1] = sym;
break;
//case ProbeFlags.MEM_WRITE:
case recorder_1.ProbeFlags.IO_READ:
case recorder_1.ProbeFlags.IO_WRITE:
case recorder_1.ProbeFlags.VRAM_READ:
case recorder_1.ProbeFlags.VRAM_WRITE:
case probe_1.ProbeFlags.IO_READ:
case probe_1.ProbeFlags.IO_WRITE:
case probe_1.ProbeFlags.VRAM_READ:
case probe_1.ProbeFlags.VRAM_WRITE:
line[col] = op | addr;
break;
}
@ -833,11 +833,11 @@ class ProbeSymbolView extends ProbeViewBaseBase {
var c;
if (line != null) {
s = (0, util_1.lpad)(sym, 35)
+ getop(recorder_1.ProbeFlags.MEM_READ)
+ getop(recorder_1.ProbeFlags.MEM_WRITE);
if (line[recorder_1.ProbeFlags.EXECUTE])
+ getop(probe_1.ProbeFlags.MEM_READ)
+ getop(probe_1.ProbeFlags.MEM_WRITE);
if (line[probe_1.ProbeFlags.EXECUTE])
c = 'seg_code';
else if (line[recorder_1.ProbeFlags.IO_READ] || line[recorder_1.ProbeFlags.IO_WRITE])
else if (line[probe_1.ProbeFlags.IO_READ] || line[probe_1.ProbeFlags.IO_WRITE])
c = 'seg_io';
else
c = 'seg_data';

File diff suppressed because one or more lines are too long

View File

@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.FrameCallsView = exports.CallStackView = exports.DebugBrowserView = exports.StateBrowserView = exports.TreeViewBase = void 0;
const emu_1 = require("../../common/emu");
const recorder_1 = require("../../common/recorder");
const probe_1 = require("../../common/probe");
const util_1 = require("../../common/util");
const ui_1 = require("../ui");
const debugviews_1 = require("./debugviews");
@ -238,9 +238,9 @@ class CallStackView extends debugviews_1.ProbeViewBaseBase {
// TODO: we don't capture every frame, so if we don't start @ the top frame we may have problems
this.redraw((op, addr, col, row, clk, value) => {
switch (op) {
case recorder_1.ProbeFlags.SP_POP:
case probe_1.ProbeFlags.SP_POP:
this.newRoot(this.lastpc, this.lastsp);
case recorder_1.ProbeFlags.SP_PUSH:
case probe_1.ProbeFlags.SP_PUSH:
if (this.stack.length) {
let top = this.stack[this.stack.length - 1];
var delta = this.lastsp - addr;
@ -253,7 +253,7 @@ class CallStackView extends debugviews_1.ProbeViewBaseBase {
}
this.lastsp = addr;
break;
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
// TODO: better check for CALL/RET opcodes
if (Math.abs(addr - this.lastpc) >= 4) { // make sure we're jumping a distance (TODO)
if (this.jsr && this.stack.length) {
@ -301,7 +301,7 @@ class FrameCallsView extends debugviews_1.ProbeViewBaseBase {
var frame = {};
this.redraw((op, addr, col, row, clk, value) => {
switch (op) {
case recorder_1.ProbeFlags.EXECUTE:
case probe_1.ProbeFlags.EXECUTE:
let sym = this.addr2symbol(addr);
if (sym) {
if (!frame[sym]) {

File diff suppressed because one or more lines are too long

2
gen/kim1-G7AP6VVY.js Normal file
View File

@ -0,0 +1,2 @@
import{J as c,o as x,u as F}from"./chunk-3NXXB3IA.js";import{$ as m,J as l,O as A,V as e,_ as p,g as _,k as I,l as h}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var y=[e.VK_DELETE,e.VK_ENTER,e.VK_RIGHT,e.VK_F7,e.VK_F1,e.VK_F3,e.VK_F5,e.VK_DOWN,e.VK_3,e.VK_W,e.VK_A,e.VK_4,e.VK_Z,e.VK_S,e.VK_E,e.VK_SHIFT,e.VK_5,e.VK_R,e.VK_D,e.VK_6,e.VK_C,e.VK_F,e.VK_T,e.VK_X,e.VK_7,e.VK_Y,e.VK_G,e.VK_8,e.VK_B,e.VK_H,e.VK_U,e.VK_V,e.VK_9,e.VK_I,e.VK_J,e.VK_0,e.VK_M,e.VK_K,e.VK_O,e.VK_N,null,e.VK_P,e.VK_L,e.VK_MINUS,e.VK_PERIOD,null,null,e.VK_COMMA,null,null,e.VK_SEMICOLON,e.VK_HOME,e.VK_SHIFT,e.VK_EQUALS,e.VK_TILDE,e.VK_SLASH,e.VK_1,e.VK_LEFT,e.VK_CONTROL,e.VK_2,e.VK_SPACE,e.VK_ALT,e.VK_Q,null],a=0,u=class{constructor(){this.regs=new Uint8Array(16);this.ina=0;this.inb=0}read(r){return this.regs[r]}write(r,t){this.regs[r]=t}input_a(){return this.ina&~this.regs[1]}input_b(){return this.inb&~this.regs[1]}output_a(){return this.regs[0]^255|this.regs[1]}output_b(){return this.regs[2]^255|this.regs[3]}},f=class extends x{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=4096;this.cpu=new F;this.ram=new Uint8Array(6144);this.rriot1=new u;this.rriot2=new u;this.digits=[];this.read=m([[5888,5951,15,r=>this.readIO_1(r)],[5952,6015,15,r=>this.readIO_2(r)],[0,6143,8191,r=>this.ram[r]],[6144,8191,2047,r=>this.bios[r]]],{gmask:8191});this.write=m([[5888,5951,15,(r,t)=>this.writeIO_1(r,t)],[5952,6015,15,(r,t)=>this.writeIO_2(r,t)],[0,6143,8191,(r,t)=>{this.ram[r]=t}]],{gmask:8191});this.bios=new I().decode(h(atob(B))),this.connectCPUMemoryBus(this)}readConst(r){return this.read(r)}readIO_1(r){return this.rriot1.read(r)}writeIO_1(r,t){this.rriot1.write(r,t)}readIO_2(r){switch(r&15){case 0:let t=0;for(let i=0;i<8;i++)(this.rriot2.regs[0]&1<<i)==0&&(t|=this.inputs[a+i]);this.rriot2.ina=t^255}return this.rriot2.read(r)}writeIO_2(r,t){this.rriot2.write(r,t);let i=this.rriot2.output_a(),s=this.rriot2.output_b();console.log(i,s)}loadROM(r){super.loadROM(r),this.ram.set(this.rom,1024),this.reset()}loadBIOS(r){this.bios=p(r,2048),this.reset()}setKeyInput(r,t,i){for(var s=y,o=0;o<s.length;o++)if(s[o]&&s[o].c==r){let n=o>>3,K=o&7;i&A.KeyDown?this.inputs[a+n]|=1<<K:i&A.KeyUp&&(this.inputs[a+n]&=~(1<<K)),console.log(r,n,K,_(this.inputs[a+n]));break}}advanceFrame(r){for(var t=0;t<this.cpuFrequency/60&&!(r&&r());)t+=this.advanceCPU();return t}},B="TFpHAAAIAAAABY3ivWkoAQsOJSiprY3sFyAyGaknjUIXqb+NQxeiZKkWIHoZytD4qSoo4a35FyBhGa31FyBeGa32KKPtF833F63uF+34F5AkqS8lXeclnegooqICqQQOBTgAhfqF+0xPHCDsJXAg6hlMMxgPGamNDgVrTI3vF61xGI3wF61yGI3xF6kHDgJ8/43pFyBBGk7pFw3pFyUErekXyRbQ7aIKICQaJQHfytD2JUIq8AYlBtHw8yDzGc35F/ANrfkXyQAlDf/wF9CcJQ0gTBmN7RcOBQHuF0z4GCXEKKSiAiV9L/AUIAAa0CPK0PElDEzsFw4CnCWhzecX0Awo4ugX0ASpAPACqf8OBcWt9ReN7Ret9heN7hepYI3vF6kAjecXjegXYKgYbSUB5xet6BdpACUJmGAgTBmoSigBIG8ZmChiYCkPyQoYMAJpB2kwjukXjOoXoAggnhlKsAYooUyRGSDEKEKI0Ouu6Res6hdgoglILEcXEPupfo1EF6mnjUIXDgkHDiKqytDfaGCiBg4FHsMODB4lhw4HHu7tF9AD7u4XYCAkGiAAGiikYMkwMB7JRxAayUAwAxhpCSooAaQEKi7pF4jQ+a3pF6AAYMhgjusXoggOIovqFw3qF43qF8rQ8a3qFypKrusXYCxCFxD7rUYXoP+MKIEUiND9JQow+zjtDgYLByULSf8pgGAOSFsOBJeaDgymJYclW0x1Gv8oHygfKB4oGWsaKCKF82iF8WiF74X6aIXwhfuE9Ib1uobyIIgeTE8cbPoXbP4Xov+aJYmp/43zF6kBLEAX0Bkw+an8GGkBkAPu8xesQBcQ843yDkIbah4gjB4l2x4gLx6iCiAxHkyvHakAhfiF+SBaHskB8AYgrB9M2x0gGR/Q0yWi8MwlBPD0KILvIGofyRUQu8kU8ETJEPAsyREoYRLwL8kT8DEKKAGF/KIEpP/QCrH6BvwqkfpMwxwKJvom+8rQ6vAIqQHQAqkAhf8OgmZjHyihTMgdpe+F+qXwDoR6Wh7JO9D5JRr3hfYgnR+qIJEfKMGF+yjl+ijhivAPJQORJUMlO8rQ8uglB8X20BcowvfQE4rQuaIMDkOaDgLPTxwlD6IR0O4OBNYoofaF9yAvHqk7IKAepfrN9xel+w6iGRipACA7HiDMHyAeHqX2JQOl9yiBTGQcqRiqJVGRJVGgALH6DgUFDgJy8A4IIeb40ALm+UxIHSV6Lx4lJCCeDgcnng4CQCUqTKwdpvKapftIpfpIpfFIpvWk9KXzQMkg8MrJf/AbyQ3w28kK8BzJLvAmyUfw1clR8ArJTPAJTGocDiIgQh1M5xw4pfrpAYX6sALG+0ysHaAApfiR+kzCHaX7DgSOpQ4FlmCiB73VHyCgHsoQ92CF/A6D00wepfwogw6K1UygHob9oggORAQiMPkg1B4g6x6tQBcpgEb+Bf6F/iUJytDvJQym/aX+KkpgogGG/6IAjkEXoj+OQxeiB45CF9h4YKkghf6G/SUkrUIXKf4OInLUHqIIJYVG/mkAJcnK0O4lCgkBJcam/WCt8xeN9Bet8hc46QGwA870F6z0FxDzDggPSk70F5DjCYCw4KADogGp/45CF+joLUAXiND1oAeMQhcJgEn/YA4iXIX5qX+NQReiCaADufgADgPmSB8lAikPKOGI0OslMakAJRlM/h6E/Ki55x+gAIxAFyUOjUAXoH+I0P3o6KT8YOb60ALm+2CiIaABIAIf0AfgJ9D1qRVgoP8KsAPIEPqKKQ9KqpgQAxhpB8rQ+mAYZfeF96X2aQCF9mAgWh4grB8opKX4DqKkG8lHEBcOqaSgBCom+Cb5iA7iZWCl+IX6pfmF+2AAKAMKDU1JSyATUlJFIBO/htvP5u39h//v9/y53vnx////HBwiHB8c";var O=[{id:"hello.dasm",name:"Hello World (ASM)"}],V=class extends c{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:5120,type:"ram"},{name:"6530",start:5888,size:64,type:"io"},{name:"6530",start:5952,size:64,type:"io"},{name:"RAM",start:6016,size:128,type:"ram"},{name:"BIOS",start:6144,size:2048,type:"rom"}]}}}newMachine(){return new f}getPresets(){return O}getDefaultExtension(){return".dasm"}readAddress(r){return this.machine.readConst(r)}};l.kim1=V;
//# sourceMappingURL=kim1-G7AP6VVY.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{H as c,m as x,s as F}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as m,J as l,O as A,V as e,_ as p,g as _,k as I,l as h}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var y=[e.VK_DELETE,e.VK_ENTER,e.VK_RIGHT,e.VK_F7,e.VK_F1,e.VK_F3,e.VK_F5,e.VK_DOWN,e.VK_3,e.VK_W,e.VK_A,e.VK_4,e.VK_Z,e.VK_S,e.VK_E,e.VK_SHIFT,e.VK_5,e.VK_R,e.VK_D,e.VK_6,e.VK_C,e.VK_F,e.VK_T,e.VK_X,e.VK_7,e.VK_Y,e.VK_G,e.VK_8,e.VK_B,e.VK_H,e.VK_U,e.VK_V,e.VK_9,e.VK_I,e.VK_J,e.VK_0,e.VK_M,e.VK_K,e.VK_O,e.VK_N,null,e.VK_P,e.VK_L,e.VK_MINUS,e.VK_PERIOD,null,null,e.VK_COMMA,null,null,e.VK_SEMICOLON,e.VK_HOME,e.VK_SHIFT,e.VK_EQUALS,e.VK_TILDE,e.VK_SLASH,e.VK_1,e.VK_LEFT,e.VK_CONTROL,e.VK_2,e.VK_SPACE,e.VK_ALT,e.VK_Q,null],a=0,u=class{constructor(){this.regs=new Uint8Array(16);this.ina=0;this.inb=0}read(r){return this.regs[r]}write(r,t){this.regs[r]=t}input_a(){return this.ina&~this.regs[1]}input_b(){return this.inb&~this.regs[1]}output_a(){return this.regs[0]^255|this.regs[1]}output_b(){return this.regs[2]^255|this.regs[3]}},f=class extends x{constructor(){super();this.cpuFrequency=1e6;this.defaultROMSize=4096;this.cpu=new F;this.ram=new Uint8Array(6144);this.rriot1=new u;this.rriot2=new u;this.digits=[];this.read=m([[5888,5951,15,r=>this.readIO_1(r)],[5952,6015,15,r=>this.readIO_2(r)],[0,6143,8191,r=>this.ram[r]],[6144,8191,2047,r=>this.bios[r]]],{gmask:8191});this.write=m([[5888,5951,15,(r,t)=>this.writeIO_1(r,t)],[5952,6015,15,(r,t)=>this.writeIO_2(r,t)],[0,6143,8191,(r,t)=>{this.ram[r]=t}]],{gmask:8191});this.bios=new I().decode(h(atob(B))),this.connectCPUMemoryBus(this)}readConst(r){return this.read(r)}readIO_1(r){return this.rriot1.read(r)}writeIO_1(r,t){this.rriot1.write(r,t)}readIO_2(r){switch(r&15){case 0:let t=0;for(let i=0;i<8;i++)(this.rriot2.regs[0]&1<<i)==0&&(t|=this.inputs[a+i]);this.rriot2.ina=t^255}return this.rriot2.read(r)}writeIO_2(r,t){this.rriot2.write(r,t);let i=this.rriot2.output_a(),s=this.rriot2.output_b();console.log(i,s)}loadROM(r){super.loadROM(r),this.ram.set(this.rom,1024),this.reset()}loadBIOS(r){this.bios=p(r,2048),this.reset()}setKeyInput(r,t,i){for(var s=y,o=0;o<s.length;o++)if(s[o]&&s[o].c==r){let n=o>>3,K=o&7;i&A.KeyDown?this.inputs[a+n]|=1<<K:i&A.KeyUp&&(this.inputs[a+n]&=~(1<<K)),console.log(r,n,K,_(this.inputs[a+n]));break}}advanceFrame(r){for(var t=0;t<this.cpuFrequency/60&&!(r&&r());)t+=this.advanceCPU();return t}},B="TFpHAAAIAAAABY3ivWkoAQsOJSiprY3sFyAyGaknjUIXqb+NQxeiZKkWIHoZytD4qSoo4a35FyBhGa31FyBeGa32KKPtF833F63uF+34F5AkqS8lXeclnegooqICqQQOBTgAhfqF+0xPHCDsJXAg6hlMMxgPGamNDgVrTI3vF61xGI3wF61yGI3xF6kHDgJ8/43pFyBBGk7pFw3pFyUErekXyRbQ7aIKICQaJQHfytD2JUIq8AYlBtHw8yDzGc35F/ANrfkXyQAlDf/wF9CcJQ0gTBmN7RcOBQHuF0z4GCXEKKSiAiV9L/AUIAAa0CPK0PElDEzsFw4CnCWhzecX0Awo4ugX0ASpAPACqf8OBcWt9ReN7Ret9heN7hepYI3vF6kAjecXjegXYKgYbSUB5xet6BdpACUJmGAgTBmoSigBIG8ZmChiYCkPyQoYMAJpB2kwjukXjOoXoAggnhlKsAYooUyRGSDEKEKI0Ouu6Res6hdgoglILEcXEPupfo1EF6mnjUIXDgkHDiKqytDfaGCiBg4FHsMODB4lhw4HHu7tF9AD7u4XYCAkGiAAGiikYMkwMB7JRxAayUAwAxhpCSooAaQEKi7pF4jQ+a3pF6AAYMhgjusXoggOIovqFw3qF43qF8rQ8a3qFypKrusXYCxCFxD7rUYXoP+MKIEUiND9JQow+zjtDgYLByULSf8pgGAOSFsOBJeaDgymJYclW0x1Gv8oHygfKB4oGWsaKCKF82iF8WiF74X6aIXwhfuE9Ib1uobyIIgeTE8cbPoXbP4Xov+aJYmp/43zF6kBLEAX0Bkw+an8GGkBkAPu8xesQBcQ843yDkIbah4gjB4l2x4gLx6iCiAxHkyvHakAhfiF+SBaHskB8AYgrB9M2x0gGR/Q0yWi8MwlBPD0KILvIGofyRUQu8kU8ETJEPAsyREoYRLwL8kT8DEKKAGF/KIEpP/QCrH6BvwqkfpMwxwKJvom+8rQ6vAIqQHQAqkAhf8OgmZjHyihTMgdpe+F+qXwDoR6Wh7JO9D5JRr3hfYgnR+qIJEfKMGF+yjl+ijhivAPJQORJUMlO8rQ8uglB8X20BcowvfQE4rQuaIMDkOaDgLPTxwlD6IR0O4OBNYoofaF9yAvHqk7IKAepfrN9xel+w6iGRipACA7HiDMHyAeHqX2JQOl9yiBTGQcqRiqJVGRJVGgALH6DgUFDgJy8A4IIeb40ALm+UxIHSV6Lx4lJCCeDgcnng4CQCUqTKwdpvKapftIpfpIpfFIpvWk9KXzQMkg8MrJf/AbyQ3w28kK8BzJLvAmyUfw1clR8ArJTPAJTGocDiIgQh1M5xw4pfrpAYX6sALG+0ysHaAApfiR+kzCHaX7DgSOpQ4FlmCiB73VHyCgHsoQ92CF/A6D00wepfwogw6K1UygHob9oggORAQiMPkg1B4g6x6tQBcpgEb+Bf6F/iUJytDvJQym/aX+KkpgogGG/6IAjkEXoj+OQxeiB45CF9h4YKkghf6G/SUkrUIXKf4OInLUHqIIJYVG/mkAJcnK0O4lCgkBJcam/WCt8xeN9Bet8hc46QGwA870F6z0FxDzDggPSk70F5DjCYCw4KADogGp/45CF+joLUAXiND1oAeMQhcJgEn/YA4iXIX5qX+NQReiCaADufgADgPmSB8lAikPKOGI0OslMakAJRlM/h6E/Ki55x+gAIxAFyUOjUAXoH+I0P3o6KT8YOb60ALm+2CiIaABIAIf0AfgJ9D1qRVgoP8KsAPIEPqKKQ9KqpgQAxhpB8rQ+mAYZfeF96X2aQCF9mAgWh4grB8opKX4DqKkG8lHEBcOqaSgBCom+Cb5iA7iZWCl+IX6pfmF+2AAKAMKDU1JSyATUlJFIBO/htvP5u39h//v9/y53vnx////HBwiHB8c";var O=[{id:"hello.dasm",name:"Hello World (ASM)"}],V=class extends c{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:5120,type:"ram"},{name:"6530",start:5888,size:64,type:"io"},{name:"6530",start:5952,size:64,type:"io"},{name:"RAM",start:6016,size:128,type:"ram"},{name:"BIOS",start:6144,size:2048,type:"rom"}]}}}newMachine(){return new f}getPresets(){return O}getDefaultExtension(){return".dasm"}readAddress(r){return this.machine.readConst(r)}};l.kim1=V;
//# sourceMappingURL=kim1-M6IBUAXR.js.map

View File

@ -485,140 +485,8 @@ class Atari7800 extends devices_1.BasicMachine {
}
exports.Atari7800 = Atari7800;
///
const ATARI_NTSC_RGB = [
0x000000,
0x404040,
0x6c6c6c,
0x909090,
0xb0b0b0,
0xc8c8c8,
0xdcdcdc,
0xf4f4f4,
0x004444,
0x106464,
0x248484,
0x34a0a0,
0x40b8b8,
0x50d0d0,
0x5ce8e8,
0x68fcfc,
0x002870,
0x144484,
0x285c98,
0x3c78ac,
0x4c8cbc,
0x5ca0cc,
0x68b4dc,
0x78c8ec,
0x001884,
0x183498,
0x3050ac,
0x4868c0,
0x5c80d0,
0x7094e0,
0x80a8ec,
0x94bcfc,
0x000088,
0x20209c,
0x3c3cb0,
0x5858c0,
0x7070d0,
0x8888e0,
0xa0a0ec,
0xb4b4fc,
0x5c0078,
0x74208c,
0x883ca0,
0x9c58b0,
0xb070c0,
0xc084d0,
0xd09cdc,
0xe0b0ec,
0x780048,
0x902060,
0xa43c78,
0xb8588c,
0xcc70a0,
0xdc84b4,
0xec9cc4,
0xfcb0d4,
0x840014,
0x982030,
0xac3c4c,
0xc05868,
0xd0707c,
0xe08894,
0xeca0a8,
0xfcb4bc,
0x880000,
0x9c201c,
0xb04038,
0xc05c50,
0xd07468,
0xe08c7c,
0xeca490,
0xfcb8a4,
0x7c1800,
0x90381c,
0xa85438,
0xbc7050,
0xcc8868,
0xdc9c7c,
0xecb490,
0xfcc8a4,
0x5c2c00,
0x784c1c,
0x906838,
0xac8450,
0xc09c68,
0xd4b47c,
0xe8cc90,
0xfce0a4,
0x2c3c00,
0x485c1c,
0x647c38,
0x809c50,
0x94b468,
0xacd07c,
0xc0e490,
0xd4fca4,
0x003c00,
0x205c20,
0x407c40,
0x5c9c5c,
0x74b474,
0x8cd08c,
0xa4e4a4,
0xb8fcb8,
0x003814,
0x1c5c34,
0x387c50,
0x50986c,
0x68b484,
0x7ccc9c,
0x90e4b4,
0xa4fcc8,
0x00302c,
0x1c504c,
0x347068,
0x4c8c84,
0x64a89c,
0x78c0b4,
0x88d4cc,
0x9cece0,
0x002844,
0x184864,
0x306884,
0x4484a0,
0x589cb8,
0x6cb4d0,
0x7ccce8,
0x8ce0fc // FE
];
var COLORS_RGBA = new Uint32Array(256);
var COLORS_WEB = [];
for (var i = 0; i < 256; i++) {
COLORS_RGBA[i] = ATARI_NTSC_RGB[i >> 1] | 0xff000000;
COLORS_WEB[i] = "#" + (0, util_1.hex)((0, util_1.rgb2bgr)(ATARI_NTSC_RGB[i >> 1]), 6);
COLORS_RGBA[i] = (0, emu_1.gtia_ntsc_to_rgb)(i);
}
//# sourceMappingURL=atari7800.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

451
gen/machine/chips/antic.js Normal file
View File

@ -0,0 +1,451 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ANTIC = exports.MODE_SHIFT = void 0;
const emu_1 = require("../../common/emu");
const util_1 = require("../../common/util");
// ANTIC
// https://www.atarimax.com/jindroush.atari.org/atanttim.html
// http://www.virtualdub.org/blog/pivot/entry.php?id=243
// http://www.beipmu.com/Antic_Timings.txt
// https://user.xmission.com/~trevin/atari/antic_regs.html
// https://user.xmission.com/~trevin/atari/antic_insns.html
// http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html
// https://www.virtualdub.org/downloads/Altirra%20Hardware%20Reference%20Manual.pdf
const PF_LEFT = [0, 26, 18, 10];
const PF_RIGHT = [0, 26 + 64, 18 + 80, 10 + 96];
const DMACTL = 0;
const CHACTL = 1;
const DLISTL = 2;
const DLISTH = 3;
const HSCROL = 4;
const VSCROL = 5;
const PMBASE = 7;
const CHBASE = 9;
const WSYNC = 10;
const VCOUNT = 11;
const PENH = 12;
const PENV = 13;
const NMIEN = 14;
const NMIRES = 15;
const NMIST = 15;
const PFNONE = 0;
const PFNARROW = 1;
const PFNORMAL = 2;
const PFWIDE = 3;
const NMIST_CYCLE = 12;
const NMI_CYCLE = 24;
const WSYNC_CYCLE = 212;
const MODE_LINES = [0, 0, 8, 10, 8, 16, 8, 16, 8, 4, 4, 2, 1, 2, 1, 1];
// how many bits before DMA clock repeats?
const MODE_PERIOD = [0, 0, 2, 2, 2, 2, 4, 4, 8, 4, 4, 4, 4, 2, 2, 2];
const MODE_YPERIOD = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0];
//const MODE_BPP = [0, 0, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1];
// how many color clocks / pixel * 2
exports.MODE_SHIFT = [0, 0, 1, 1, 2, 2, 2, 2, 8, 4, 4, 2, 2, 2, 2, 1];
class ANTIC {
constructor(readfn, nmifn) {
this.regs = new Uint8Array(0x10); // registers
this.dma_enabled = false;
this.dliop = 0; // dli operation
this.mode = 0; // current mode
this.jmp = false; // TODO
this.lms = false; // TODO
this.dlarg_lo = 0;
this.dlarg_hi = 0;
this.period = 0; // current mode period bitmask
this.scanaddr = 0; // Scan Address (via LMS)
this.startaddr = 0; // Start of line Address
this.pfbyte = 0; // playfield byte fetched
this.ch = 0; // char read
this.linesleft = 0; // # of lines left in mode
this.yofs = 0; // yofs fine
this.v = 0; // vertical scanline #
this.h = 0; // horizontal color clock
this.linebuf = new Uint8Array(48);
this.dmaclock = 0;
this.dmaidx = 0;
this.output = 0;
this.dramrefresh = false;
this.vscroll = 0;
this.read = readfn; // bus read function
this.nmi = nmifn; // NMI function
}
reset() {
this.regs.fill(0);
this.regs[NMIEN] = 0x00;
this.regs[NMIST] = 0x7f;
this.regs[PENH] = 0x00;
this.regs[PENV] = 0xff;
this.setReg(DMACTL, 0x0);
this.h = this.v = 0;
this.startaddr = this.scanaddr = 0;
this.dmaclock = 0;
}
saveState() {
return (0, util_1.safe_extend)(0, {}, this);
}
loadState(s) {
(0, util_1.safe_extend)(0, this, s);
this.setReg(DMACTL, s.regs[DMACTL]);
}
static stateToLongString(state) {
let s = "";
s += "H: " + (0, util_1.lpad)(state.h, 3) + " V: " + (0, util_1.lpad)(state.v, 3) + "\n";
s += "DLIOp: " + (0, util_1.hex)(state.dliop, 2) + " Lines: " + state.yofs + "/" + state.linesleft;
s += " DMA " + (state.dma_enabled ? "ON " : "off") + "\n";
s += "Addr: " + (0, util_1.hex)(state.scanaddr, 4) + "\n";
s += (0, emu_1.dumpRAM)(state.regs, 0, 16).replace('$00', 'Regs');
return s;
}
setReg(a, v) {
switch (a) {
case WSYNC:
this.regs[WSYNC] = 0xff;
return; // this is readonly (we reset it)
case NMIRES:
this.regs[NMIST] = 0x1f;
return; // this is readonly, don't mess with it
}
this.regs[a] = v;
}
readReg(a) {
switch (a) {
case NMIST:
return this.regs[a];
case VCOUNT:
return this.v >> 1;
default:
return 0xff;
}
}
processDLIEntry() {
if (this.mode == 0) { // N Blank Lines
this.linesleft = (this.dliop >> 4) + 1;
}
else {
this.linesleft = MODE_LINES[this.mode];
this.period = MODE_PERIOD[this.mode];
if (this.jmp) {
this.regs[DLISTL] = this.dlarg_lo;
this.regs[DLISTH] = this.dlarg_hi;
this.mode = this.period = 0;
// JVB (Jump and wait for Vertical Blank)
if (this.dliop & 0x40) {
this.linesleft = 1; //(248 - this.v) & 0xff; // TODO?
this.dma_enabled = false;
}
}
else if (this.lms) {
this.scanaddr = this.dlarg_lo + (this.dlarg_hi << 8);
//console.log('scanaddr', hex(this.scanaddr));
}
this.startaddr = this.scanaddr;
}
// horiz scroll
// TODO: gtia fine scroll?
let effwidth = this.regs[DMACTL] & 3;
let hscroll = (this.dliop & 0x10) ? (this.regs[HSCROL] & 15) >> 1 : 0;
if ((this.dliop & 0x10) && effwidth < 3)
effwidth++;
this.left = PF_LEFT[effwidth] + hscroll;
this.right = PF_RIGHT[effwidth] + hscroll;
// vertical scroll
let vscrol = this.regs[VSCROL] & 0xf;
if ((this.dliop & 0x20) ^ this.vscroll) {
if (this.vscroll) {
this.linesleft -= vscrol;
}
else {
this.linesleft -= vscrol;
this.yofs += vscrol;
}
this.vscroll ^= 0x20;
}
}
nextLine() {
if (this.linesleft > 0) {
this.linesleft--;
this.yofs++;
if (this.mode >= 8 && this.linesleft) {
this.scanaddr = this.startaddr; // reset line addr
}
}
}
triggerNMI(mask) {
this.regs[NMIST] = mask | 0x1f;
if (this.regs[NMIEN] & mask) {
this.nmi();
}
}
nextInsn() {
let pc = this.regs[DLISTL] + (this.regs[DLISTH] << 8);
let b = this.read(pc);
//console.log('nextInsn', hex(pc), hex(b), this.v);
pc = ((pc + 1) & 0x3ff) | (pc & ~0x3ff);
this.regs[DLISTL] = pc & 0xff;
this.regs[DLISTH] = pc >> 8;
return b;
}
nextScreen() {
let b = this.read(this.scanaddr);
this.scanaddr = ((this.scanaddr + 1) & 0xfff) | (this.scanaddr & ~0xfff);
return b;
}
dlDMAEnabled() { return this.regs[DMACTL] & 0b100000; }
isVisibleScanline() {
return this.v >= 8 && this.v < 248;
}
isPlayfieldDMAEnabled() {
return this.dma_enabled && !this.linesleft;
}
isPlayerDMAEnabled() {
return this.dma_enabled && this.regs[DMACTL] & 0b1000;
}
isMissileDMAEnabled() {
return this.dma_enabled && this.regs[DMACTL] & 0b1100;
}
clockPulse() {
let did_dma = this.regs[WSYNC] != 0;
if (!this.isVisibleScanline()) {
this.doVBlank();
}
else {
switch (this.h) {
case 0:
if (this.isMissileDMAEnabled()) {
this.doPlayerMissileDMA(3);
did_dma = true;
}
break;
case 1:
if (this.isPlayfieldDMAEnabled()) {
let op = this.nextInsn(); // get mode
// TODO: too many booleans
this.jmp = (op & ~0x40) == 0x01; // JMP insn?
this.lms = (op & 0x40) != 0 && (op & 0xf) != 0; // LMS insn?
this.mode = op & 0xf;
this.dliop = op;
this.yofs = 0;
did_dma = true;
}
break;
case 2:
case 3:
case 4:
case 5:
if (this.isPlayerDMAEnabled()) {
this.doPlayerMissileDMA(this.h + 2);
did_dma = true;
}
break;
case 6:
case 7:
if (this.isPlayfieldDMAEnabled() && this.yofs == 0 && (this.jmp || this.lms)) {
if (this.h == 6)
this.dlarg_lo = this.nextInsn();
if (this.h == 7)
this.dlarg_hi = this.nextInsn();
did_dma = true;
}
break;
case 8:
// TODO? is this at cycle 8?
if (this.yofs == 0) {
this.processDLIEntry();
}
if (this.dliop & 0x80) { // TODO: what if DLI disabled?
if (this.linesleft == 1) {
this.triggerNMI(0x80); // DLI interrupt
}
}
break;
case 9:
break;
case 111:
if (this.dma_enabled)
this.nextLine();
++this.v;
break;
}
this.output = 0; // background color (TODO: only for blank lines)
if (this.mode >= 2 && this.period) {
let candma = this.h < 106;
this.dmaclock <<= 1;
if (this.dmaclock & (1 << this.period)) {
this.dmaclock |= 1;
}
if (this.h == this.left) {
this.dmaclock |= 1;
this.dmaidx = 0;
}
if (this.h == this.right) {
this.dmaclock &= ~1;
this.dmaidx++;
}
if (this.dmaclock & 1) {
if (this.mode < 8 && this.yofs == 0) { // only read chars on 1st line
this.linebuf[this.dmaidx] = this.nextScreen(); // read char name
did_dma = candma;
}
this.dmaidx++;
}
else if (this.dmaclock & 8) {
this.ch = this.linebuf[this.dmaidx - 4 / this.period]; // latch char
this.readBitmapData(); // read bitmap
did_dma = candma;
}
this.output = this.h >= this.left + 3 && this.h <= this.right + 2 ? 4 : 0;
}
}
if (this.h < 19 || this.h > 102)
this.output = 2;
this.incHorizCounter();
if (!did_dma && this.dramrefresh) {
this.dramrefresh = false;
did_dma = true;
}
return did_dma;
}
incHorizCounter() {
++this.h;
switch (this.h) {
case 25:
case 25 + 4 * 1:
case 25 + 4 * 2:
case 25 + 4 * 3:
case 25 + 4 * 4:
case 25 + 4 * 5:
case 25 + 4 * 6:
case 25 + 4 * 7:
case 25 + 4 * 8:
this.dramrefresh = true;
break;
case 103:
this.regs[WSYNC] = 0; // TODO: dram refresh delay to 106?
break;
case 114:
this.h = 0;
break;
}
}
doVBlank() {
this.linesleft = this.mode = this.period = 0;
if (this.h == 111) {
this.v++;
}
if (this.v == 248 && this.h == 0) {
this.triggerNMI(0x40);
} // VBI
if (this.v == 262 && this.h == 112) {
this.v = 0;
}
if (this.v == 7 && this.h == 113) {
this.dma_enabled = this.dlDMAEnabled() != 0;
}
this.output = 2; // blank
}
doPlayerMissileDMA(section) {
let oneline = this.regs[DMACTL] & 0x10;
let pmaddr = this.regs[PMBASE] << 8;
if (oneline) {
pmaddr &= 0xf800;
pmaddr |= section << 8;
pmaddr |= this.v & 0xff;
}
else {
pmaddr &= 0xfc00;
pmaddr |= section << 7;
pmaddr |= this.v >> 1;
}
this.read(pmaddr);
}
readBitmapData() {
const mode = this.mode;
if (mode < 8) { // character mode
let ch = this.ch;
let y = this.yofs >> MODE_YPERIOD[this.mode];
let addrofs = y & 7;
let chbase = this.regs[CHBASE];
// modes 6 & 7
if ((mode & 0xe) == 6) { // or 7
ch &= 0x3f;
chbase &= 0xfe;
}
else {
ch &= 0x7f;
chbase &= 0xfc;
}
let addr = (ch << 3) + (chbase << 8);
// modes 2 & 3
if ((mode & 0xe) == 2) { // or 3
let chactl = this.regs[CHACTL];
let mode3lc = mode == 3 && (ch & 0x60) == 0x60;
if (chactl & 4)
this.pfbyte = this.read(addr + (addrofs ^ 7)); // mirror
else
this.pfbyte = this.read(addr + addrofs);
if (mode3lc && y < 2) {
this.pfbyte = 0;
}
if (!mode3lc && y > 7) {
this.pfbyte = 0;
}
if (this.ch & 0x80) {
if (chactl & 1)
this.pfbyte = 0x0; // blank
if (chactl & 2)
this.pfbyte ^= 0xff; // invert
}
}
else {
this.pfbyte = this.read(addr + addrofs);
}
}
else { // map mode
this.pfbyte = this.nextScreen();
}
}
shiftout() {
if (this.output == 4) { // visible pixel?
switch (this.mode) {
case 2:
case 3:
case 15:
{
let v = (this.pfbyte >> 7) & 1;
this.pfbyte <<= 1;
return v ? 8 : 6;
}
case 6:
case 7:
{
let v = (this.pfbyte >> 7) & 1;
this.pfbyte <<= 1;
return v ? (this.ch >> 6) + 4 : 0;
}
case 9:
case 11:
case 12:
{
let v = (this.pfbyte >> 7) & 1;
this.pfbyte <<= 1;
return v ? 4 : 0;
}
case 4:
case 5:
case 8:
case 10:
case 13:
case 14:
{
let v = (this.pfbyte >> 6) & 3;
this.pfbyte <<= 2;
return [0, 4, 5, 6][v]; // TODO: 5th color
}
}
}
return this.output;
}
}
exports.ANTIC = ANTIC;
//# sourceMappingURL=antic.js.map

File diff suppressed because one or more lines are too long

214
gen/machine/chips/gtia.js Normal file
View File

@ -0,0 +1,214 @@
"use strict";
// GTIA
// https://user.xmission.com/~trevin/atari/gtia_regs.html
// https://user.xmission.com/~trevin/atari/gtia_pinout.html
Object.defineProperty(exports, "__esModule", { value: true });
exports.GTIA = exports.CONSOL = exports.TRIG0 = void 0;
const emu_1 = require("../../common/emu");
const util_1 = require("../../common/util");
// write regs
const HPOSP0 = 0x0;
const HPOSM0 = 0x4;
const SIZEP0 = 0x8;
const SIZEM = 0x0c;
const GRAFP0 = 0x0d;
const GRAFM = 0x11;
const COLPM0 = 0x12;
const COLPF0 = 0x16;
const COLPF1 = 0x17;
const COLPF2 = 0x18;
const COLPF3 = 0x19;
const COLBK = 0x1a;
const PRIOR = 0x1b;
const VDELAY = 0x1c;
const GRACTL = 0x1d;
const HITCLR = 0x1e;
const CONSPK = 0x1f;
// read regs
const M0PF = 0x0;
const P0PF = 0x4;
const M0PL = 0x8;
const P0PL = 0xc;
exports.TRIG0 = 0x10;
exports.CONSOL = 0x1f;
class GTIA {
constructor() {
this.regs = new Uint8Array(0x20);
this.readregs = new Uint8Array(0x20);
this.shiftregs = new Uint32Array(8);
this.count = 0;
this.an = 0;
this.rgb = 0;
this.pmcol = 0;
}
reset() {
this.regs.fill(0);
this.readregs.fill(0); // TODO?
this.readregs[0x14] = 0xf; // NTSC
this.count = 0;
}
saveState() {
return (0, util_1.safe_extend)(0, {}, this);
}
loadState(s) {
(0, util_1.safe_extend)(0, this, s);
}
setReg(a, v) {
switch (a) {
case exports.CONSOL:
v = (v & 15) ^ 15; // 0 = input, 1 = pull down
break;
case HITCLR:
for (let i = 0; i < 16; i++) {
this.readregs[i] = 0;
}
return;
}
this.regs[a] = v;
}
readReg(a) {
return this.readregs[a];
}
sync() {
this.count = 0;
}
updateGfx(h, data) {
switch (h) {
case 0:
if (this.regs[GRACTL] & 1) {
this.regs[GRAFM] = data;
}
break;
case 2:
case 3:
case 4:
case 5:
if (this.regs[GRACTL] & 2) {
this.regs[GRAFP0 - 2 + h] = data;
}
break;
}
}
getPlayfieldColor() {
switch (this.an) {
case 0:
return COLBK;
case 4:
case 5:
case 6:
case 7:
return COLPF0 + this.an - 4;
case 8:
// combine PF2 hue and PF1 luminance
return (this.regs[COLPF2] & 0xf0) | (this.regs[COLPF1] & 0x0f) | 0x100;
}
return 0x100; // black
}
clockPulse1() {
this.processPlayerMissile();
this.clockPulse2();
this.count++;
}
clockPulse2() {
var col;
if (this.pmcol >= 0) {
col = this.pmcol;
}
else {
let pf = this.getPlayfieldColor();
col = pf & 0x100 ? pf & 0xff : this.regs[pf];
}
this.rgb = COLORS_RGBA[col];
}
processPlayerMissile() {
let topobj = -1;
let pfset = this.an - 4; // TODO?
let ppmask = 0;
// players
for (let i = 0; i < 4; i++) {
let bit = this.shiftObject(i);
if (bit) {
if (pfset >= 0) { // TODO: hires and GTIA modes
this.readregs[P0PF + i] |= 1 << pfset;
}
ppmask |= 1 << i;
topobj = i;
}
}
this.readregs[P0PL + 0] |= ppmask & ~1;
this.readregs[P0PL + 1] |= ppmask & ~2;
this.readregs[P0PL + 2] |= ppmask & ~4;
this.readregs[P0PL + 3] |= ppmask & ~8;
// missiles
for (let i = 0; i < 4; i++) {
let bit = this.shiftObject(i + 4);
if (bit) {
if (pfset >= 0) {
this.readregs[M0PF + i] |= 1 << pfset;
}
this.readregs[M0PL + i] |= ppmask;
topobj = i + 4;
}
}
this.pmcol = topobj >= 0 ? this.getObjectColor(topobj) : -1;
}
shiftObject(i) {
let bit = (this.shiftregs[i] & 0x80000000) != 0;
this.shiftregs[i] <<= 1;
if (this.regs[HPOSP0 + i] - 7 == this.count) {
this.triggerObject(i);
}
return bit;
}
getObjectColor(i) {
if ((this.regs[PRIOR] & 0x10) && i >= 4) {
return this.regs[COLPF3];
}
else {
return this.regs[COLPM0 + (i & 3)];
}
}
triggerObject(i) {
let size, data;
if (i < 4) {
size = this.regs[SIZEP0 + i] & 3;
data = this.regs[GRAFP0 + i];
}
else {
let s = (i - 4) << 1;
size = (this.regs[SIZEM] >> s) & 3;
data = ((this.regs[GRAFM] >> s) & 3) << 6;
}
if (size & 1)
data = expandBits(data);
else
data <<= 8;
if (size == 3)
data = expandBits(data);
else
data <<= 16;
this.shiftregs[i] = data;
}
static stateToLongString(state) {
let s = '';
s += `X: ${(0, util_1.lpad)(state.count, 3)} ANTIC: ${(0, util_1.hex)(state.an, 1)} PM: ${(0, util_1.hex)(state.pmcol, 3)}\n`;
s += "Write Registers:\n";
s += (0, emu_1.dumpRAM)(state.regs, 0, 32);
s += "Read Registers:\n";
s += (0, emu_1.dumpRAM)(state.readregs, 0, 32);
return s;
}
}
exports.GTIA = GTIA;
function expandBits(x) {
x = (x | (x << 8)) & 0x00FF00FF;
x = (x | (x << 4)) & 0x0F0F0F0F;
x = (x | (x << 2)) & 0x33333333;
x = (x | (x << 1)) & 0x55555555;
return x | (x << 1);
}
var COLORS_RGBA = new Uint32Array(256);
for (var i = 0; i < 256; i++) {
COLORS_RGBA[i] = (0, emu_1.gtia_ntsc_to_rgb)(i);
}
//# sourceMappingURL=gtia.js.map

File diff suppressed because one or more lines are too long

435
gen/machine/chips/pokey.js Normal file
View File

@ -0,0 +1,435 @@
"use strict";
/*
* pokey.c - POKEY sound chip emulation
*
* Copyright (C) 1995-1998 David Firth
* Copyright (C) 1998-2008 Atari800 development team (see DOC/CREDITS)
*
* This file is part of the Atari800 emulator project which emulates
* the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers.
*
* Atari800 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Atari800 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Atari800; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.POKEY = void 0;
const emu_1 = require("../../common/emu");
const util_1 = require("../../common/util");
const AUDF1 = 0x00;
const AUDC1 = 0x01;
const AUDF2 = 0x02;
const AUDC2 = 0x03;
const AUDF3 = 0x04;
const AUDC3 = 0x05;
const AUDF4 = 0x06;
const AUDC4 = 0x07;
const AUDCTL = 0x08;
const STIMER = 0x09;
const SKRES = 0x0a;
const POTGO = 0x0b;
const SEROUT = 0x0d;
const IRQEN = 0x0e;
const SKCTL = 0x0f;
const POT0 = 0x00;
const POT1 = 0x01;
const POT2 = 0x02;
const POT3 = 0x03;
const POT4 = 0x04;
const POT5 = 0x05;
const POT6 = 0x06;
const POT7 = 0x07;
const ALLPOT = 0x08;
const KBCODE = 0x09;
const RANDOM = 0x0a;
const SERIN = 0x0d;
const IRQST = 0x0e;
const SKSTAT = 0x0f;
/* definitions for AUDCx (D201, D203, D205, D207) */
const NOTPOLY5 = 0x80; /* selects POLY5 or direct CLOCK */
const POLY4 = 0x40; /* selects POLY4 or POLY17 */
const PURETONE = 0x20; /* selects POLY4/17 or PURE tone */
const VOL_ONLY = 0x10; /* selects VOLUME OUTPUT ONLY */
const VOLUME_MASK = 0x0f; /* volume mask */
/* definitions for AUDCTL (D208) */
const POLY9 = 0x80; /* selects POLY9 or POLY17 */
const CH1_179 = 0x40; /* selects 1.78979 MHz for Ch 1 */
const CH3_179 = 0x20; /* selects 1.78979 MHz for Ch 3 */
const CH1_CH2 = 0x10; /* clocks channel 1 w/channel 2 */
const CH3_CH4 = 0x08; /* clocks channel 3 w/channel 4 */
const CH1_FILTER = 0x04; /* selects channel 1 high pass filter */
const CH2_FILTER = 0x02; /* selects channel 2 high pass filter */
const CLOCK_15 = 0x01; /* selects 15.6999kHz or 63.9210kHz */
/* for accuracy, the 64kHz and 15kHz clocks are exact divisions of
the 1.79MHz clock */
const DIV_64 = 28; /* divisor for 1.79MHz clock to 64 kHz */
const DIV_15 = 114; /* divisor for 1.79MHz clock to 15 kHz */
/* the size (in entries) of the 4 polynomial tables */
const POLY4_SIZE = 0x000f;
const POLY5_SIZE = 0x001f;
const POLY9_SIZE = 0x01ff;
const POLY17_SIZE = 0x0001ffff;
const CHAN1 = 0;
const CHAN2 = 1;
const CHAN3 = 2;
const CHAN4 = 3;
const ANTIC_LINE_C = 114;
/* Some defines about the serial I/O timing. Currently fixed! */
const SIO_XMTDONE_INTERVAL = 15;
const SIO_SERIN_INTERVAL = 8;
const SIO_SEROUT_INTERVAL = 8;
const SIO_ACK_INTERVAL = 36;
var poly9;
var poly17;
function initPolyTables() {
poly9 = new Uint8Array(511);
poly17 = new Uint8Array(16385);
/* initialise poly9_lookup */
let reg = 0x1ff;
for (let i = 0; i < 511; i++) {
reg = ((((reg >> 5) ^ reg) & 1) << 8) + (reg >> 1);
poly9[i] = reg;
}
/* initialise poly17_lookup */
reg = 0x1ffff;
for (let i = 0; i < 16385; i++) {
reg = ((((reg >> 5) ^ reg) & 0xff) << 9) + (reg >> 8);
poly17[i] = (reg >> 1);
}
}
class POKEY {
constructor(irq, antic_xpos) {
this.irq = irq;
this.antic_xpos = antic_xpos;
this.regs = new Uint8Array(16);
this.readregs = new Uint8Array(16);
this.divnirq = new Uint32Array(4);
this.divnmax = new Uint32Array(4);
this.pot_inputs = new Uint8Array(8);
this.basemult = 0;
this.pot_scanline = 0;
this.random_scanline_counter = 0;
this.kbcode = 0;
this.DELAYED_SERIN_IRQ = 0;
this.DELAYED_SEROUT_IRQ = 0;
this.DELAYED_XMTDONE_IRQ = 0;
this.init();
}
saveState() {
return (0, util_1.safe_extend)(0, {}, this);
}
loadState(s) {
(0, util_1.safe_extend)(0, this, s);
}
init() {
/* Initialise Serial Port Interrupts */
//DELAYED_SERIN_IRQ = 0;
//DELAYED_SEROUT_IRQ = 0;
//DELAYED_XMTDONE_IRQ = 0;
this.readregs.fill(0xff);
this.readregs[SKSTAT] = 0xef;
//SERIN = 0x00; /* or 0xff ? */
//IRQEN = 0x00;
//SKCTL = 0x00;
this.basemult = DIV_64;
this.pot_inputs.fill(128);
initPolyTables();
}
read(addr) {
let byte = this.readregs[addr];
addr &= 0xf;
switch (addr) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
byte = this.pot_inputs[addr];
return (byte < this.pot_scanline) ? byte : this.pot_scanline;
case ALLPOT:
for (let i = 0; i < 8; i++) {
if (this.pot_inputs[i] <= this.pot_scanline)
byte &= ~(1 << i); // reset bit if pot value known
}
break;
case KBCODE:
return this.kbcode;
case SKSTAT:
byte = SKSTAT + (this.CASSETTE_IOLineStatus() << 4);
break;
case RANDOM:
if ((this.regs[SKCTL] & 0x03) != 0) {
let i = this.random_scanline_counter + this.antic_xpos();
if (this.regs[AUDCTL] & POLY9)
byte = poly9[i % POLY9_SIZE];
else {
i %= POLY17_SIZE;
let ptr = i >> 3;
i &= 7;
byte = (poly17[ptr] >> i) + (poly17[ptr + 1] << (8 - i));
}
}
break;
}
return byte & 0xff;
}
write(addr, byte) {
addr &= 0x0f;
this.regs[addr] = byte;
switch (addr) {
case AUDCTL:
/* determine the base multiplier for the 'div by n' calculations */
if (byte & CLOCK_15)
this.basemult = DIV_15;
else
this.basemult = DIV_64;
this.update_counter((1 << CHAN1) | (1 << CHAN2) | (1 << CHAN3) | (1 << CHAN4));
break;
case AUDF1:
this.update_counter((this.regs[AUDCTL] & CH1_CH2) ? ((1 << CHAN2) | (1 << CHAN1)) : (1 << CHAN1));
break;
case AUDF2:
this.update_counter(1 << CHAN2);
break;
case AUDF3:
this.update_counter((this.regs[AUDCTL] & CH3_CH4) ? ((1 << CHAN4) | (1 << CHAN3)) : (1 << CHAN3));
break;
case AUDF4:
this.update_counter(1 << CHAN4);
break;
case IRQEN:
this.readregs[IRQST] |= ~byte & 0xf7; /* Reset disabled IRQs except XMTDONE */
let mask = ~this.readregs[IRQST] & this.regs[IRQEN];
if (mask) {
this.generateIRQ(this.readregs[IRQST]);
}
break;
case SKRES:
this.readregs[SKSTAT] |= 0xe0;
break;
case POTGO:
if (!(this.regs[SKCTL] & 4))
this.pot_scanline = 0; /* slow pot mode */
break;
case SEROUT:
if ((this.regs[SKCTL] & 0x70) == 0x20 && this.siocheck()) {
this.SIO_PutByte(byte);
}
// check if cassette 2-tone mode has been enabled
if ((this.regs[SKCTL] & 0x08) == 0x00) {
// intelligent device
this.DELAYED_SEROUT_IRQ = SIO_SEROUT_INTERVAL;
this.readregs[IRQST] |= 0x08;
this.DELAYED_XMTDONE_IRQ = SIO_XMTDONE_INTERVAL;
}
else {
// cassette
// some savers patch the cassette baud rate, so we evaluate it here
// scanlines per second*10 bit*audiofrequency/(1.79 MHz/2)
this.DELAYED_SEROUT_IRQ = 312 * 50 * 10 * (this.regs[AUDF3] + this.regs[AUDF4] * 0x100) / 895000;
// safety check
if (this.DELAYED_SEROUT_IRQ >= 3) {
this.readregs[IRQST] |= 0x08;
this.DELAYED_XMTDONE_IRQ = 2 * this.DELAYED_SEROUT_IRQ - 2;
}
else {
this.DELAYED_SEROUT_IRQ = 0;
this.DELAYED_XMTDONE_IRQ = 0;
}
}
;
break;
case STIMER:
this.divnirq[CHAN1] = this.divnmax[CHAN1];
this.divnirq[CHAN2] = this.divnmax[CHAN2];
this.divnirq[CHAN3] = this.divnmax[CHAN3];
this.divnirq[CHAN4] = this.divnmax[CHAN4];
//POKEYSND_Update(STIMER, byte, 0, SOUND_GAIN);
break;
case SKCTL:
//VOICEBOX_SKCTLPutByte(byte);
//POKEYSND_Update(SKCTL, byte, 0, SOUND_GAIN);
if (byte & 4)
this.pot_scanline = 228; /* fast pot mode - return results immediately */
if ((byte & 0x03) == 0) {
/* POKEY reset. */
/* Stop serial IO. */
this.DELAYED_SERIN_IRQ = 0;
this.DELAYED_SEROUT_IRQ = 0;
this.DELAYED_XMTDONE_IRQ = 0;
// TODO: CASSETTE_ResetPOKEY();
/* TODO other registers should also be reset. */
}
break;
}
this.snd_update(addr);
//POKEYSND_Update(AUDC1, byte, 0, SOUND_GAIN);
}
/*****************************************************************************/
/* Module: Update_Counter() */
/* Purpose: To process the latest control values stored in the AUDF, AUDC, */
/* and AUDCTL registers. It pre-calculates as much information as */
/* possible for better performance. This routine has been added */
/* here again as I need the precise frequency for the pokey timers */
/* again. The pokey emulation is therefore somewhat sub-optimal */
/* since the actual pokey emulation should grab the frequency values */
/* directly from here instead of calculating them again. */
/* */
/* Author: Ron Fries,Thomas Richter */
/* Date: March 27, 1998 */
/* */
/* Inputs: chan_mask: Channel mask, one bit per channel. */
/* The channels that need to be updated */
/* */
/* Outputs: Adjusts local globals - no return value */
/* */
/*****************************************************************************/
update_counter(chan_mask) {
/************************************************************/
/* As defined in the manual, the exact Div_n_cnt values are */
/* different depending on the frequency and resolution: */
/* 64 kHz or 15 kHz - AUDF + 1 */
/* 1 MHz, 8-bit - AUDF + 4 */
/* 1 MHz, 16-bit - AUDF[CHAN1]+256*AUDF[CHAN2] + 7 */
/************************************************************/
/* only reset the channels that have changed */
if (chan_mask & (1 << CHAN1)) {
/* process channel 1 frequency */
if (this.regs[AUDCTL] & CH1_179)
this.divnmax[CHAN1] = this.regs[AUDF1 + CHAN1] + 4;
else
this.divnmax[CHAN1] = (this.regs[AUDF1 + CHAN1] + 1) * this.basemult;
if (this.divnmax[CHAN1] < ANTIC_LINE_C)
this.divnmax[CHAN1] = ANTIC_LINE_C;
}
if (chan_mask & (1 << CHAN2)) {
/* process channel 2 frequency */
if (this.regs[AUDCTL] & CH1_CH2) {
if (this.regs[AUDCTL] & CH1_179)
this.divnmax[CHAN2] = this.regs[AUDF1 + CHAN2] * 256 + this.regs[AUDF1 + CHAN1] + 7;
else
this.divnmax[CHAN2] = (this.regs[AUDF1 + CHAN2] * 256 + this.regs[AUDF1 + CHAN1] + 1) * this.basemult;
}
else
this.divnmax[CHAN2] = (this.regs[AUDF1 + CHAN2] + 1) * this.basemult;
if (this.divnmax[CHAN2] < ANTIC_LINE_C)
this.divnmax[CHAN2] = ANTIC_LINE_C;
}
if (chan_mask & (1 << CHAN4)) {
/* process channel 4 frequency */
if (this.regs[AUDCTL] & CH3_CH4) {
if (this.regs[AUDCTL] & CH3_179)
this.divnmax[CHAN4] = this.regs[AUDF1 + CHAN4] * 256 + this.regs[AUDF1 + CHAN3] + 7;
else
this.divnmax[CHAN4] = (this.regs[AUDF1 + CHAN4] * 256 + this.regs[AUDF1 + CHAN3] + 1) * this.basemult;
}
else
this.divnmax[CHAN4] = (this.regs[AUDF1 + CHAN4] + 1) * this.basemult;
if (this.divnmax[CHAN4] < ANTIC_LINE_C)
this.divnmax[CHAN4] = ANTIC_LINE_C;
}
//console.log(chan_mask, this.divnmax);
}
snd_update(addr) {
}
advanceScanline() {
/***************************************************************************
** Generate POKEY Timer IRQs if required **
** called on a per-scanline basis, not very precise, but good enough **
** for most applications **
***************************************************************************/
/* on nonpatched i/o-operation, enable the cassette timing */
/*
if (!ESC_enable_sio_patch) {
if (CASSETTE_AddScanLine())
DELAYED_SERIN_IRQ = 1;
}
*/
if ((this.regs[SKCTL] & 0x03) == 0)
/* Don't process timers when POKEY is in reset mode. */
return;
if (this.pot_scanline < 228)
this.pot_scanline++;
this.random_scanline_counter += ANTIC_LINE_C;
this.random_scanline_counter %= (this.regs[AUDCTL] & POLY9) ? POLY9_SIZE : POLY17_SIZE;
if (this.DELAYED_SERIN_IRQ > 0) {
if (--this.DELAYED_SERIN_IRQ == 0) {
// Load a byte to SERIN - even when the IRQ is disabled.
this.readregs[SERIN] = this.SIO_GetByte();
this.generateIRQ(0x20);
}
}
if (this.DELAYED_SEROUT_IRQ > 0) {
if (--this.DELAYED_SEROUT_IRQ == 0) {
this.generateIRQ(0x10);
}
}
if (this.DELAYED_XMTDONE_IRQ > 0)
if (--this.DELAYED_XMTDONE_IRQ == 0) {
this.generateIRQ(0x08);
}
this.advanceIRQTimer(CHAN1, 0x1);
this.advanceIRQTimer(CHAN2, 0x2);
this.advanceIRQTimer(CHAN4, 0x4);
}
advanceIRQTimer(chan, mask) {
if ((this.divnirq[chan] -= ANTIC_LINE_C) < 0) {
this.divnirq[chan] += this.divnmax[chan];
this.generateIRQ(mask);
//console.log('irq', chan, this.divnirq[chan], this.divnmax[chan])
}
}
generateIRQ(mask) {
if (this.regs[IRQEN] & mask) {
this.irq();
this.readregs[IRQST] &= ~mask;
}
}
static stateToLongString(state) {
let s = '';
s += "Write Registers:\n";
s += (0, emu_1.dumpRAM)(state.regs, 0, 16);
s += "Read Registers:\n";
s += (0, emu_1.dumpRAM)(state.readregs, 0, 16);
return s;
}
CASSETTE_IOLineStatus() {
return 0;
}
siocheck() {
return (((this.regs[AUDF1 + CHAN3] == 0x28 || this.regs[AUDF1 + CHAN3] == 0x10
|| this.regs[AUDF1 + CHAN3] == 0x08 || this.regs[AUDF1 + CHAN3] == 0x0a)
&& this.regs[AUDF1 + CHAN4] == 0x00) // intelligent peripherals speeds
|| (this.regs[SKCTL] & 0x78) == 0x28) // cassette save mode
&& (this.regs[AUDCTL] & 0x28) == 0x28;
}
SIO_PutByte(byte) {
// TODO
console.log("SIO put byte", byte);
}
SIO_GetByte() {
return 0; // TODO
}
}
exports.POKEY = POKEY;
//const SOUND_GAIN 4
/*
void Frame(void)
{
random_scanline_counter %= (this.regs[AUDCTL] & POLY9) ? POLY9_SIZE : POLY17_SIZE;
}
*/
//# sourceMappingURL=pokey.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +1,2 @@
import{J as t}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var o=class{constructor(e){this.mainElement=e,this.iframe=$('<iframe sandbox="allow-same-origin" width="100%" height="100%"/>').appendTo(e)[0],this.iframe.style.backgroundColor="white",e.classList.add("vertical-scroll"),e.style.overflowY="auto"}start(){}reset(){}pause(){}resume(){}loadROM(e,r){$(this.iframe).contents().find("body").html(r)}isRunning(){return!1}isDebugging(){return!1}getToolForFilename(e){return"markdown"}getDefaultExtension(){return".md"}getPresets(){return[{id:"hello.md",name:"Hello"}]}showHelp(){window.open("https://github.com/showdownjs/showdown/wiki/Showdown's-Markdown-syntax","_help")}};t.markdown=o;
//# sourceMappingURL=markdown-NL7MX7CH.js.map
import{J as t}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var o=class{constructor(e){this.mainElement=e,this.iframe=$('<iframe sandbox="allow-same-origin" width="100%" height="100%"/>').appendTo(e)[0],this.iframe.style.backgroundColor="white",e.classList.add("vertical-scroll"),e.style.overflowY="auto"}start(){}reset(){}pause(){}resume(){}loadROM(e,r){$(this.iframe).contents().find("body").html(r)}isRunning(){return!1}isDebugging(){return!1}getToolForFilename(e){return"markdown"}getDefaultExtension(){return".md"}getPresets(){return[{id:"hello.md",name:"Hello"}]}showHelp(){window.open("https://github.com/showdownjs/showdown/wiki/Showdown's-Markdown-syntax","_help")}};t.markdown=o;
//# sourceMappingURL=markdown-Z6DEOAS5.js.map

View File

@ -1,4 +1,4 @@
import{c as r}from"./chunk-AUJWOUYJ.js";import{I as x,d as U,e as Q}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{J as T,O as t,V as A,Y as H,k as E,l as O}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var n=H([[A.UP,0,1],[A.DOWN,0,2],[A.LEFT,0,4],[A.RIGHT,0,8],[A.A,0,16],[A.B,0,32],[A.P2_UP,1,1],[A.P2_DOWN,1,2],[A.P2_LEFT,1,4],[A.P2_RIGHT,1,8],[A.P2_A,1,16],[A.P2_B,1,32],[A.ANYKEY,2,0]]),o=0;var w=16,a=[A.VK_7,A.VK_6,A.VK_5,A.VK_4,A.VK_3,A.VK_2,A.VK_1,A.VK_0,A.VK_SEMICOLON,A.VK_CLOSE_BRACKET,A.VK_OPEN_BRACKET,A.VK_BACK_SLASH,A.VK_EQUALS,A.VK_MINUS,A.VK_9,A.VK_8,A.VK_B,A.VK_A,null,A.VK_SLASH,A.VK_PERIOD,A.VK_COMMA,A.VK_ACUTE,A.VK_QUOTE,A.VK_J,A.VK_I,A.VK_H,A.VK_G,A.VK_F,A.VK_E,A.VK_D,A.VK_C,A.VK_R,A.VK_Q,A.VK_P,A.VK_O,A.VK_N,A.VK_M,A.VK_L,A.VK_K,A.VK_Z,A.VK_Y,A.VK_X,A.VK_W,A.VK_V,A.VK_U,A.VK_T,A.VK_S,A.VK_F3,A.VK_F2,A.VK_F1,null,A.VK_CAPS_LOCK,null,A.VK_CONTROL,A.VK_SHIFT,A.VK_ENTER,null,A.VK_BACK_SPACE,null,A.VK_TAB,A.VK_ESCAPE,A.VK_F5,A.VK_F4,A.VK_RIGHT,A.VK_DOWN,A.VK_UP,A.VK_LEFT,A.VK_DELETE,A.VK_INSERT,A.VK_HOME,A.VK_SPACE,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],i=class extends r{constructor(){super();this.numVisibleScanlines=240;this.defaultROMSize=32768;this.ram=new Uint8Array(65536);this.slotmask=0;this.ppi_c=0;this.read=s=>{let e=s>>14<<1,D=this.slotmask>>e&3,g=this.slots[D];return g?g.read(s):0};this.write=(s,e)=>{let D=s>>14<<1,g=this.slotmask>>D&3,B=this.slots[g];B&&B.write(s,e)};this.init(this,this.newIOBus(),new Q(new U)),this.bios=new E().decode(O(atob(l))),this.bios[3541]=0,this.bios[3542]=0,this.bios[3543]=0,this.slots=[{read:s=>this.bios[s]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.ram[s]|0,write:(s,e)=>{this.ram[s]=e}}]}getKeyboardMap(){return n}getKeyboardFunction(){return(s,e,D,g)=>{for(var B=a,M=0;M<B.length;M++)if(B[M]&&B[M].c==e){let R=M>>3,f=7-(M&7);g&t.KeyDown?this.inputs[w+R]|=1<<f:g&t.KeyUp&&(this.inputs[w+R]&=~(1<<f));break}}}newIOBus(){return{read:s=>{switch(s&=255,s){case 152:return this.vdp.readData();case 153:return this.vdp.readStatus();case 162:return this.psg.currentRegister()==14?~this.inputs[o]:this.psg.readData();case 168:return this.slotmask;case 169:return~this.inputs[w+(this.ppi_c&15)];case 170:return this.ppi_c}return 0},write:(s,e)=>{switch(s&=255,e&=255,s){case 152:this.vdp.writeData(e);break;case 153:this.vdp.writeAddress(e);break;case 168:this.slotmask=e;break;case 170:this.ppi_c=e;break;case 171:let D=e>>1&7;this.ppi_c=this.ppi_c&~(1<<D)|(e&1)<<D;break;case 160:this.psg.selectRegister(e);break;case 161:this.psg.setData(e);break;case 252:case 253:case 254:case 255:break}}}}vdpInterrupt(){this.probe.logInterrupt(255),this.cpu.interrupt(255)}loadState(s){super.loadState(s),this.slotmask=s.slotmask,this.ppi_c=s.ppi_c,this.psg.selectRegister(s.psgRegister)}saveState(){var s=super.saveState();return s.slotmask=this.slotmask,s.ppi_c=this.ppi_c,s.psgRegister=this.psg.currentRegister(),s}reset(){super.reset(),this.slotmask=0,this.ppi_c=0}resetInputs(){this.inputs.fill(0)}},l=`
import{c as r}from"./chunk-KAXUWPTM.js";import{K as x,d as U,e as Q}from"./chunk-3NXXB3IA.js";import{J as T,O as t,V as A,Y as H,k as E,l as O}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var n=H([[A.UP,0,1],[A.DOWN,0,2],[A.LEFT,0,4],[A.RIGHT,0,8],[A.A,0,16],[A.B,0,32],[A.P2_UP,1,1],[A.P2_DOWN,1,2],[A.P2_LEFT,1,4],[A.P2_RIGHT,1,8],[A.P2_A,1,16],[A.P2_B,1,32],[A.ANYKEY,2,0]]),o=0;var w=16,a=[A.VK_7,A.VK_6,A.VK_5,A.VK_4,A.VK_3,A.VK_2,A.VK_1,A.VK_0,A.VK_SEMICOLON,A.VK_CLOSE_BRACKET,A.VK_OPEN_BRACKET,A.VK_BACK_SLASH,A.VK_EQUALS,A.VK_MINUS,A.VK_9,A.VK_8,A.VK_B,A.VK_A,null,A.VK_SLASH,A.VK_PERIOD,A.VK_COMMA,A.VK_ACUTE,A.VK_QUOTE,A.VK_J,A.VK_I,A.VK_H,A.VK_G,A.VK_F,A.VK_E,A.VK_D,A.VK_C,A.VK_R,A.VK_Q,A.VK_P,A.VK_O,A.VK_N,A.VK_M,A.VK_L,A.VK_K,A.VK_Z,A.VK_Y,A.VK_X,A.VK_W,A.VK_V,A.VK_U,A.VK_T,A.VK_S,A.VK_F3,A.VK_F2,A.VK_F1,null,A.VK_CAPS_LOCK,null,A.VK_CONTROL,A.VK_SHIFT,A.VK_ENTER,null,A.VK_BACK_SPACE,null,A.VK_TAB,A.VK_ESCAPE,A.VK_F5,A.VK_F4,A.VK_RIGHT,A.VK_DOWN,A.VK_UP,A.VK_LEFT,A.VK_DELETE,A.VK_INSERT,A.VK_HOME,A.VK_SPACE,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],i=class extends r{constructor(){super();this.numVisibleScanlines=240;this.defaultROMSize=32768;this.ram=new Uint8Array(65536);this.slotmask=0;this.ppi_c=0;this.read=s=>{let e=s>>14<<1,D=this.slotmask>>e&3,g=this.slots[D];return g?g.read(s):0};this.write=(s,e)=>{let D=s>>14<<1,g=this.slotmask>>D&3,B=this.slots[g];B&&B.write(s,e)};this.init(this,this.newIOBus(),new Q(new U)),this.bios=new E().decode(O(atob(l))),this.bios[3541]=0,this.bios[3542]=0,this.bios[3543]=0,this.slots=[{read:s=>this.bios[s]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.ram[s]|0,write:(s,e)=>{this.ram[s]=e}}]}getKeyboardMap(){return n}getKeyboardFunction(){return(s,e,D,g)=>{for(var B=a,M=0;M<B.length;M++)if(B[M]&&B[M].c==e){let R=M>>3,f=7-(M&7);g&t.KeyDown?this.inputs[w+R]|=1<<f:g&t.KeyUp&&(this.inputs[w+R]&=~(1<<f));break}}}newIOBus(){return{read:s=>{switch(s&=255,s){case 152:return this.vdp.readData();case 153:return this.vdp.readStatus();case 162:return this.psg.currentRegister()==14?~this.inputs[o]:this.psg.readData();case 168:return this.slotmask;case 169:return~this.inputs[w+(this.ppi_c&15)];case 170:return this.ppi_c}return 0},write:(s,e)=>{switch(s&=255,e&=255,s){case 152:this.vdp.writeData(e);break;case 153:this.vdp.writeAddress(e);break;case 168:this.slotmask=e;break;case 170:this.ppi_c=e;break;case 171:let D=e>>1&7;this.ppi_c=this.ppi_c&~(1<<D)|(e&1)<<D;break;case 160:this.psg.selectRegister(e);break;case 161:this.psg.setData(e);break;case 252:case 253:case 254:case 255:break}}}}vdpInterrupt(){this.probe.logInterrupt(255),this.cpu.interrupt(255)}loadState(s){super.loadState(s),this.slotmask=s.slotmask,this.ppi_c=s.ppi_c,this.psg.selectRegister(s.psgRegister)}saveState(){var s=super.saveState();return s.slotmask=this.slotmask,s.ppi_c=this.ppi_c,s.psgRegister=this.psg.currentRegister(),s}reset(){super.reset(),this.slotmask=0,this.ppi_c=0}resetInputs(){this.inputs.fill(0)}},l=`
TFpHAADAAAAAI8Sp+W4NAVo7UZPzwxINvxuYmMPtEADDvyMAw/+T4QAkAMMbEQDDNJPhIZPhc5Ph
JxEhAgAAAMM5EZOhk+HmGMNOEcNYEcMWAsMiAsMuAsNFAsNNAsNVAsNgAsNtAsOBAsOXAsOtAsPU
AgDDXhnDHgPDggPDwgPDBQTDQwTDjwTDtwTD5gTDGQXDbwXDggXDjAXDlwXDOhfDUhfDXBfDahHD
@ -161,4 +161,4 @@ H5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mf
kx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+T
H5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+TH5Mfkx+THpMc/w==
`;var F=[{id:"helloworld.asm",name:"Hello World (ASM)"},{id:"redbook_kbd.asm",name:"Redbook Keyboard Scanner (ASM)"},{id:"siegegame.c",name:"Siege Game"},{id:"eliza.c",name:"Eliza"},{id:"hello.wiz",name:"Hello (Wiz)"}],h=[{id:"text.c",name:"Text Mode"},{id:"hello.c",name:"Scrolling Text"},{id:"text32.c",name:"32-Column Color Text"},{id:"stars.c",name:"Scrolling Starfield"},{id:"cursorsmooth.c",name:"Moving Cursor"},{id:"simplemusic.c",name:"Simple Music"},{id:"musicplayer.c",name:"Multivoice Music"},{id:"mode2bitmap.c",name:"Mode 2 Bitmap"},{id:"mode2compressed.c",name:"Mode 2 Bitmap (LZG)"},{id:"lines.c",name:"Mode 2 Lines"},{id:"multicolor.c",name:"Multicolor Mode"},{id:"siegegame.c",name:"Siege Game"},{id:"shoot.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"}],k=class extends x{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"RAM",start:49152,size:12800,type:"ram"},{name:"Stack",start:61440,size:768,type:"ram"},{name:"BIOS Work RAM",start:62208,size:3328}]}}}newMachine(){return new i}getPresets(){return F}getDefaultExtension(){return".c"}readAddress(s){return this.machine.read(s)}readVRAMAddress(s){return this.machine.readVRAMAddress(s)}},C=class extends k{getPresets(){return h}};T.msx=k;T["msx-libcv"]=C;
//# sourceMappingURL=msx-AEGYRQBR.js.map
//# sourceMappingURL=msx-ZFTHZ6HQ.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{I as h,c as f,o as m}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as i,J as a,V as t,W as o,Y as c}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var l=c([[t.A,1,16],[t.LEFT,1,32],[t.RIGHT,1,64],[t.P2_A,2,16],[t.P2_LEFT,2,32],[t.P2_RIGHT,2,64],[t.SELECT,1,1],[t.START,1,4],[t.P2_START,1,2]]),u=256,b=4293848814,w=4278190080,n=class extends m{constructor(){super();this.cpuFrequency=1996800;this.canvasWidth=256;this.numTotalScanlines=262;this.numVisibleScanlines=224;this.cpuCyclesPerLine=Math.floor(1996800/(262*60));this.defaultROMSize=8192;this.rotate=-90;this.sampleRate=1;this.bitshift_offset=0;this.bitshift_register=0;this.cpu=new f;this.ram=new Uint8Array(8192);this.read=i([[0,8191,8191,e=>this.rom?this.rom[e]:0],[8192,16383,8191,e=>this.ram[e]]]);this.write=i([[8192,9215,1023,(e,s)=>{this.ram[e]=s}],[9216,16383,8191,(e,s)=>{this.ram[e]=s;for(var d=e-1024<<3,r=0;r<8;r++)this.pixels[d+r]=s&1<<r?b:w}]]);this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.handler=o(this.inputs,l)}newIOBus(){return{read:e=>{switch(e&=3,e){case 0:case 1:case 2:return this.inputs[e];case 3:return this.bitshift_register>>8-this.bitshift_offset&255}return 0},write:(e,s)=>{switch(e&=7,s&=255,e){case 2:this.bitshift_offset=s&7;break;case 3:case 5:break;case 4:this.bitshift_register=this.bitshift_register>>8|s<<8;break;case 6:this.watchdog_counter=u;break}}}}startScanline(){}drawScanline(){this.scanline==95?this.interrupt(207):this.scanline==223&&this.interrupt(215)}interrupt(e){this.probe.logInterrupt(e),this.cpu.interrupt(e)}advanceFrame(e){return this.watchdog_counter--<=0&&(console.log("WATCHDOG FIRED"),this.reset()),super.advanceFrame(e)}loadState(e){super.loadState(e),this.bitshift_register=e.bsr,this.bitshift_offset=e.bso,this.watchdog_counter=e.wdc}saveState(){var e=super.saveState();return e.bsr=this.bitshift_register,e.bso=this.bitshift_offset,e.wdc=this.watchdog_counter,e}reset(){super.reset(),this.watchdog_counter=u}};var _=[{id:"gfxtest.c",name:"Graphics Test"},{id:"shifter.c",name:"Sprite w/ Bit Shifter"},{id:"game2.c",name:"Cosmic Impalas"}],p=class extends h{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Frame Buffer",start:9216,size:7168,type:"ram"}]}}}newMachine(){return new n}getPresets(){return _}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}};a.mw8080bw=p;
//# sourceMappingURL=mw8080bw-LAYQERCT.js.map

2
gen/mw8080bw-PLFHIDNW.js Normal file
View File

@ -0,0 +1,2 @@
import{K as h,c as f,q as m}from"./chunk-3NXXB3IA.js";import{$ as i,J as a,V as t,W as o,Y as c}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var l=c([[t.A,1,16],[t.LEFT,1,32],[t.RIGHT,1,64],[t.P2_A,2,16],[t.P2_LEFT,2,32],[t.P2_RIGHT,2,64],[t.SELECT,1,1],[t.START,1,4],[t.P2_START,1,2]]),u=256,b=4293848814,w=4278190080,n=class extends m{constructor(){super();this.cpuFrequency=1996800;this.canvasWidth=256;this.numTotalScanlines=262;this.numVisibleScanlines=224;this.cpuCyclesPerLine=Math.floor(1996800/(262*60));this.defaultROMSize=8192;this.rotate=-90;this.sampleRate=1;this.bitshift_offset=0;this.bitshift_register=0;this.cpu=new f;this.ram=new Uint8Array(8192);this.read=i([[0,8191,8191,e=>this.rom?this.rom[e]:0],[8192,16383,8191,e=>this.ram[e]]]);this.write=i([[8192,9215,1023,(e,s)=>{this.ram[e]=s}],[9216,16383,8191,(e,s)=>{this.ram[e]=s;for(var d=e-1024<<3,r=0;r<8;r++)this.pixels[d+r]=s&1<<r?b:w}]]);this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.handler=o(this.inputs,l)}newIOBus(){return{read:e=>{switch(e&=3,e){case 0:case 1:case 2:return this.inputs[e];case 3:return this.bitshift_register>>8-this.bitshift_offset&255}return 0},write:(e,s)=>{switch(e&=7,s&=255,e){case 2:this.bitshift_offset=s&7;break;case 3:case 5:break;case 4:this.bitshift_register=this.bitshift_register>>8|s<<8;break;case 6:this.watchdog_counter=u;break}}}}startScanline(){}drawScanline(){this.scanline==95?this.interrupt(207):this.scanline==223&&this.interrupt(215)}interrupt(e){this.probe.logInterrupt(e),this.cpu.interrupt(e)}advanceFrame(e){return this.watchdog_counter--<=0&&(console.log("WATCHDOG FIRED"),this.reset()),super.advanceFrame(e)}loadState(e){super.loadState(e),this.bitshift_register=e.bsr,this.bitshift_offset=e.bso,this.watchdog_counter=e.wdc}saveState(){var e=super.saveState();return e.bsr=this.bitshift_register,e.bso=this.bitshift_offset,e.wdc=this.watchdog_counter,e}reset(){super.reset(),this.watchdog_counter=u}};var _=[{id:"gfxtest.c",name:"Graphics Test"},{id:"shifter.c",name:"Sprite w/ Bit Shifter"},{id:"game2.c",name:"Cosmic Impalas"}],p=class extends h{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Frame Buffer",start:9216,size:7168,type:"ram"}]}}}newMachine(){return new n}getPresets(){return _}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}};a.mw8080bw=p;
//# sourceMappingURL=mw8080bw-PLFHIDNW.js.map

View File

@ -2,6 +2,6 @@
"version": 3,
"sources": ["../src/machine/mw8080bw.ts", "../src/platform/mw8080bw.ts"],
"sourcesContent": ["\nimport { Z80, Z80State } from \"../common/cpu/ZilogZ80\";\nimport { BasicScanlineMachine } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, AY38910_Audio } from \"../common/audio\";\n\n// http://www.computerarcheology.com/Arcade/\n\nconst SPACEINV_KEYCODE_MAP = makeKeycodeMap([\n [Keys.A, 1, 0x10], // P1\n [Keys.LEFT, 1, 0x20],\n [Keys.RIGHT, 1, 0x40],\n [Keys.P2_A, 2, 0x10], // P2\n [Keys.P2_LEFT, 2, 0x20],\n [Keys.P2_RIGHT, 2, 0x40],\n [Keys.SELECT, 1, 0x1],\n [Keys.START, 1, 0x4],\n [Keys.P2_START, 1, 0x2],\n]);\n\nconst INITIAL_WATCHDOG = 256;\nconst PIXEL_ON = 0xffeeeeee;\nconst PIXEL_OFF = 0xff000000;\n\nexport class Midway8080 extends BasicScanlineMachine {\n\n cpuFrequency = 1996800; // MHz\n canvasWidth = 256;\n numTotalScanlines = 262;\n numVisibleScanlines = 224;\n cpuCyclesPerLine = Math.floor(1996800 / (262*60));\n defaultROMSize = 0x2000;\n rotate = -90;\n sampleRate = 1;\n\n bitshift_offset = 0;\n bitshift_register = 0;\n watchdog_counter;\n \n cpu: Z80 = new Z80();\n ram = new Uint8Array(0x2000);\n\n constructor() {\n super();\n this.connectCPUMemoryBus(this);\n this.connectCPUIOBus(this.newIOBus());\n this.handler = newKeyboardHandler(this.inputs, SPACEINV_KEYCODE_MAP);\n }\n \n read = newAddressDecoder([\n [0x0000, 0x1fff, 0x1fff, (a) => { return this.rom ? this.rom[a] : 0; }],\n [0x2000, 0x3fff, 0x1fff, (a) => { return this.ram[a]; }],\n ]);\n write = newAddressDecoder([\n [0x2000, 0x23ff, 0x3ff, (a, v) => { this.ram[a] = v; }],\n [0x2400, 0x3fff, 0x1fff, (a, v) => {\n this.ram[a] = v;\n var ofs = (a - 0x400) << 3;\n for (var i = 0; i < 8; i++) {\n this.pixels[ofs + i] = (v & (1 << i)) ? PIXEL_ON : PIXEL_OFF;\n }\n //if (displayPCs) displayPCs[a] = cpu.getPC(); // save program counter\n }],\n ]);\n\n newIOBus() {\n return {\n read: (addr) => {\n addr &= 0x3;\n //console.log('IO read', hex(addr,4));\n switch (addr) {\n case 0:\n case 1:\n case 2:\n return this.inputs[addr];\n case 3:\n return (this.bitshift_register >> (8 - this.bitshift_offset)) & 0xff;\n }\n return 0;\n },\n write: (addr, val) => {\n addr &= 0x7;\n val &= 0xff;\n //console.log('IO write', hex(addr,4), hex(val,2));\n switch (addr) {\n case 2:\n this.bitshift_offset = val & 0x7;\n break;\n case 3:\n case 5:\n // TODO: sound\n break;\n case 4:\n this.bitshift_register = (this.bitshift_register >> 8) | (val << 8);\n break;\n case 6:\n this.watchdog_counter = INITIAL_WATCHDOG;\n break;\n }\n }\n };\n }\n\n startScanline() {\n }\n\n drawScanline() {\n // at end of scanline\n if (this.scanline == 95)\n this.interrupt(0xcf); // RST $8\n else if (this.scanline == 223)\n this.interrupt(0xd7); // RST $10\n }\n \n interrupt(data:number) {\n this.probe.logInterrupt(data);\n this.cpu.interrupt(data);\n }\n\n advanceFrame(trap) : number {\n if (this.watchdog_counter-- <= 0) {\n console.log(\"WATCHDOG FIRED\"); // TODO: alert on video\n this.reset();\n }\n return super.advanceFrame(trap);\n }\n\n loadState(state) {\n super.loadState(state);\n this.bitshift_register = state.bsr;\n this.bitshift_offset = state.bso;\n this.watchdog_counter = state.wdc;\n }\n saveState() {\n var state: any = super.saveState();\n state.bsr = this.bitshift_register;\n state.bso = this.bitshift_offset;\n state.wdc = this.watchdog_counter;\n return state;\n }\n reset() {\n super.reset();\n this.watchdog_counter = INITIAL_WATCHDOG;\n }\n}\n", "\nimport { Midway8080 } from \"../machine/mw8080bw\";\nimport { BaseZ80MachinePlatform } from \"../common/baseplatform\";\nimport { Platform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\n\n// http://www.computerarcheology.com/Arcade/\n\nconst MW8080BW_PRESETS = [\n { id: 'gfxtest.c', name: 'Graphics Test' },\n { id: 'shifter.c', name: 'Sprite w/ Bit Shifter' },\n { id: 'game2.c', name: 'Cosmic Impalas' },\n];\n\nclass Midway8080BWPlatform extends BaseZ80MachinePlatform<Midway8080> implements Platform {\n\n newMachine() { return new Midway8080(); }\n getPresets() { return MW8080BW_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.read(a); }\n getMemoryMap = function() { return { main:[\n {name:'Frame Buffer',start:0x2400,size:7168,type:'ram'},\n ] } };\n\n}\n\n\nPLATFORMS['mw8080bw'] = Midway8080BWPlatform;\n"],
"mappings": "kLAQA,GAAM,GAAuB,EAAe,CAC1C,CAAC,EAAK,EAAU,EAAG,IACnB,CAAC,EAAK,KAAU,EAAG,IACnB,CAAC,EAAK,MAAU,EAAG,IACnB,CAAC,EAAK,KAAU,EAAG,IACnB,CAAC,EAAK,QAAU,EAAG,IACnB,CAAC,EAAK,SAAU,EAAG,IACnB,CAAC,EAAK,OAAU,EAAG,GACnB,CAAC,EAAK,MAAU,EAAG,GACnB,CAAC,EAAK,SAAU,EAAG,KAGf,EAAmB,IACnB,EAAW,WACX,EAAY,WAEX,eAAyB,EAAqB,CAkBnD,aAAc,CACZ,QAjBF,kBAAe,QACf,iBAAc,IACd,uBAAoB,IACpB,yBAAsB,IACtB,sBAAmB,KAAK,MAAM,QAAW,KAAI,KAC7C,oBAAiB,KACjB,YAAS,IACT,gBAAa,EAEb,qBAAkB,EAClB,uBAAoB,EAGpB,SAAW,GAAI,GACf,SAAM,GAAI,YAAW,MASrB,UAAO,EAAkB,CACnB,CAAC,EAAQ,KAAQ,KAAQ,AAAC,GAAe,KAAK,IAAM,KAAK,IAAI,GAAK,GAClE,CAAC,KAAQ,MAAQ,KAAQ,AAAC,GAAe,KAAK,IAAI,MAExD,WAAQ,EAAkB,CACpB,CAAC,KAAQ,KAAQ,KAAO,CAAC,EAAG,IAAM,CAAE,KAAK,IAAI,GAAK,IAClD,CAAC,KAAQ,MAAQ,KAAQ,CAAC,EAAG,IAAM,CACjC,KAAK,IAAI,GAAK,EAEd,OADI,GAAO,EAAI,MAAU,EAChB,EAAI,EAAG,EAAI,EAAG,IACrB,KAAK,OAAO,EAAM,GAAM,EAAK,GAAK,EAAM,EAAW,MAf3D,KAAK,oBAAoB,MACzB,KAAK,gBAAgB,KAAK,YAC1B,KAAK,QAAU,EAAmB,KAAK,OAAQ,GAmBjD,UAAW,CACT,MAAO,CACL,KAAM,AAAC,GAAS,CAGd,OAFA,GAAQ,EAEA,OACD,OACA,OACA,GACH,MAAO,MAAK,OAAO,OAChB,GACH,MAAQ,MAAK,mBAAsB,EAAI,KAAK,gBAAoB,IAEpE,MAAO,IAET,MAAO,CAAC,EAAM,IAAQ,CAIpB,OAHA,GAAQ,EACR,GAAO,IAEC,OACD,GACH,KAAK,gBAAkB,EAAM,EAC7B,UACG,OACA,GAEH,UACG,GACH,KAAK,kBAAqB,KAAK,mBAAqB,EAAM,GAAO,EACjE,UACG,GACH,KAAK,iBAAmB,EACxB,SAMV,eAAgB,EAGhB,cAAe,CAEb,AAAI,KAAK,UAAY,GACnB,KAAK,UAAU,KACR,KAAK,UAAY,KACxB,KAAK,UAAU,KAGnB,UAAU,EAAa,CACrB,KAAK,MAAM,aAAa,GACxB,KAAK,IAAI,UAAU,GAGrB,aAAa,EAAe,CAC1B,MAAI,MAAK,oBAAsB,GAC7B,SAAQ,IAAI,kBACZ,KAAK,SAEA,MAAM,aAAa,GAG5B,UAAU,EAAO,CACf,MAAM,UAAU,GAChB,KAAK,kBAAoB,EAAM,IAC/B,KAAK,gBAAkB,EAAM,IAC7B,KAAK,iBAAmB,EAAM,IAEhC,WAAY,CACV,GAAI,GAAa,MAAM,YACvB,SAAM,IAAM,KAAK,kBACjB,EAAM,IAAM,KAAK,gBACjB,EAAM,IAAM,KAAK,iBACV,EAET,OAAQ,CACN,MAAM,QACN,KAAK,iBAAmB,ICtI5B,GAAM,GAAmB,CACvB,CAAE,GAAI,YAAa,KAAM,iBACzB,CAAE,GAAI,YAAa,KAAM,yBACzB,CAAE,GAAI,UAAW,KAAM,mBAGzB,eAAmC,EAAuD,CAA1F,aAdA,CAcA,oBAME,kBAAe,UAAW,CAAE,MAAO,CAAE,KAAK,CACtC,CAAC,KAAK,eAAe,MAAM,KAAO,KAAK,KAAK,KAAK,UALrD,YAAsB,CAAE,MAAO,IAAI,GACnC,YAAsB,CAAE,MAAO,GAC/B,qBAAsB,CAAE,MAAO,KAC/B,YAAY,EAAU,CAAE,MAAO,MAAK,QAAQ,KAAK,KAQnD,EAAU,SAAc",
"mappings": "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",
"names": []
}

File diff suppressed because one or more lines are too long

26
gen/nes-JIVXAUBX.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@ const emu_1 = require("../common/emu");
const util_1 = require("../common/util");
const analysis_1 = require("../common/analysis");
const audio_1 = require("../common/audio");
const recorder_1 = require("../common/recorder");
const probe_1 = require("../common/probe");
const devices_1 = require("../common/devices");
const Mousetrap = require("mousetrap");
const jsnes = require("../../jsnes");
@ -456,7 +456,7 @@ class JSNESPlatform extends baseplatform_1.Base6502Platform {
return s;
}
startProbing() {
var rec = new recorder_1.ProbeRecorder(this);
var rec = new probe_1.ProbeRecorder(this);
this.connectProbe(rec);
return rec;
}

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@ const emu_1 = require("../common/emu");
const util_1 = require("../common/util");
const analysis_1 = require("../common/analysis");
const disasm6502_1 = require("../common/cpu/disasm6502");
const recorder_1 = require("../common/recorder");
const probe_1 = require("../common/probe");
const devices_1 = require("../common/devices");
const mameplatform_1 = require("../common/mameplatform");
const VCS_PRESETS = [
@ -355,7 +355,7 @@ class VCSPlatform extends baseplatform_1.BasePlatform {
}
startProbing() {
var self = this;
var rec = new recorder_1.ProbeRecorder(this);
var rec = new probe_1.ProbeRecorder(this);
this.connectProbe(rec);
var probe = this.probe;
// intercept CPU clock pulse

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@ const baseplatform_1 = require("../common/baseplatform");
const emu_1 = require("../common/emu");
const util_1 = require("../common/util");
const audio_1 = require("../common/audio");
const recorder_1 = require("../common/recorder");
const probe_1 = require("../common/probe");
const devices_1 = require("../common/devices");
// emulator from https://github.com/raz0red/jsvecx
// https://roadsidethoughts.com/vectrex/vectrex-memory-map.htm
@ -910,7 +910,7 @@ class VectrexPlatform extends baseplatform_1.Base6809Platform {
}
}
startProbing() {
var rec = new recorder_1.ProbeRecorder(this);
var rec = new probe_1.ProbeRecorder(this);
this.connectProbe(rec);
return rec;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +0,0 @@
import{a as g,b as p,c as M}from"./chunk-AUJWOUYJ.js";import{I as o,d,f as l}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as i,J as a,V as t,Y as x,_ as h,g as f}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var A=x([[t.UP,0,1],[t.DOWN,0,2],[t.LEFT,0,4],[t.RIGHT,0,8],[t.A,0,16],[t.B,0,32],[t.P2_UP,0,64],[t.P2_DOWN,0,128],[t.P2_LEFT,1,1],[t.P2_RIGHT,1,2],[t.P2_A,1,4],[t.P2_B,1,8],[t.VK_BACK_SLASH,1,16],[t.VK_ENTER,1,128]]),m=class extends M{constructor(){super();this.numVisibleScanlines=240;this.defaultROMSize=49152;this.ram=new Uint8Array(1024);this.read=i([[49152,65535,1023,e=>this.ram[e]],[0,49151,65535,e=>this.rom&&this.rom[e]]]);this.write=i([[49152,65535,1023,(e,r)=>{this.ram[e]=r}]]);this.init(this,this.newIOBus(),new l(new d))}getKeyboardMap(){return A}vdpInterrupt(){return this.probe.logInterrupt(255),this.cpu.interrupt(255)}getVCounter(){return 0}getHCounter(){return 0}setMemoryControl(e){}setIOPortControl(e){}readIO(e){switch(e&193){case 64:return this.getVCounter();case 65:return this.getHCounter();case 128:return this.vdp.readData();case 129:return this.vdp.readStatus();case 192:return this.inputs[0]^255;case 193:return this.inputs[1]^255}return 0}writeIO(e,r){switch(e&193){case 0:return this.setMemoryControl(r);case 1:return this.setIOPortControl(r);case 64:case 65:return this.psg.setData(r);case 128:return this.vdp.writeData(r);case 129:return this.vdp.writeAddress(r)}}newIOBus(){return{read:e=>(e&=255,this.readIO(e)),write:(e,r)=>{e&=255,r&=255,this.writeIO(e,r)}}}},u=class extends m{constructor(){super(...arguments);this.cartram=new Uint8Array(0);this.pagingRegisters=new Uint8Array(4);this.latchedHCounter=0;this.ioControlFlags=0;this.ram=new Uint8Array(8192);this.read=i([[49152,65535,8191,e=>this.ram[e]],[0,1023,1023,e=>this.rom[e]],[1024,16383,16383,e=>this.getPagedROM(e,1)],[16384,32767,16383,e=>this.getPagedROM(e,2)],[32768,49151,16383,e=>{var r=this.pagingRegisters[0];return r&8?this.cartram[r&4?e+16384:e]:this.getPagedROM(e,3)}]]);this.write=i([[49152,65531,8191,(e,r)=>{this.ram[e]=r}],[65532,65535,3,(e,r)=>{this.pagingRegisters[e]=r,this.ram[e+8188]=r}],[32768,49151,16383,(e,r)=>{var s=this.pagingRegisters[0];s&8&&(this.cartram.length==0&&(this.cartram=new Uint8Array(32768)),this.cartram[s&4?e+16384:e]=r)}]])}newVDP(e,r,s){return new g(e,r,s)}reset(){super.reset(),this.pagingRegisters.set([0,0,1,2])}getVCounter(){var e=this.scanline;return e<=218?e:e-6}getHCounter(){return this.latchedHCounter}computeHCounter(){return 0}setIOPortControl(e){(e^this.ioControlFlags)&160&&(this.latchedHCounter=this.computeHCounter()),this.ioControlFlags=e}getPagedROM(e,r){return this.rom&&this.rom[e+((this.pagingRegisters[r]&this.romPageMask)<<14)]}loadROM(e){if(e.length<=49152)this.rom=h(e,49152),this.romPageMask=3;else switch(e.length){case 65536:case 131072:case 262144:case 524288:this.rom=e,this.romPageMask=(e.length>>14)-1;break;default:throw Error("Unknown rom size: $"+f(e.length))}this.reset()}loadState(e){super.loadState(e),this.pagingRegisters.set(e.pr),this.cartram.set(e.cr),this.latchedHCounter=e.lhc,this.ioControlFlags=e.iocf}saveState(){var e=super.saveState();return e.pr=this.pagingRegisters.slice(0),e.cr=this.cartram.slice(0),e.lhc=this.latchedHCounter,e.iocf=this.ioControlFlags,e}getDebugInfo(e,r){switch(e){case"SMS":return super.getDebugInfo(e,r)+`
Bank Regs: `+this.pagingRegisters+`
`;default:return super.getDebugInfo(e,r)}}},c=class extends u{newVDP(e,r,s){return new p(e,r,s)}readIO(e){switch(e&193){case 0:return~this.inputs[1]&128|64;case 220:return this.inputs[0]^255;case 221:return this.inputs[1]^255}return super.readIO(e)}};var C=[{id:"text.c",name:"Text Mode"},{id:"hello.c",name:"Scrolling Text"},{id:"text32.c",name:"32-Column Color Text"},{id:"stars.c",name:"Scrolling Starfield"},{id:"cursorsmooth.c",name:"Moving Cursor"},{id:"simplemusic.c",name:"Simple Music"},{id:"musicplayer.c",name:"Multivoice Music"},{id:"mode2bitmap.c",name:"Mode 2 Bitmap"},{id:"mode2compressed.c",name:"Mode 2 Bitmap (LZG)"},{id:"lines.c",name:"Mode 2 Lines"},{id:"multicolor.c",name:"Multicolor Mode"},{id:"siegegame.c",name:"Siege Game"},{id:"shoot.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"}],P=[{id:"mode4test.c",name:"Mode 4 Test"},{id:"climber.c",name:"Climber Game"}],b=class extends o{newMachine(){return new m}getPresets(){return C}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}},S=class extends o{newMachine(){return new u}getPresets(){return P}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}},w=class extends o{newMachine(){return new c}getPresets(){return P}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}};a["sms-sg1000-libcv"]=b;a["sms-sms-libcv"]=S;a["sms-gg-libcv"]=w;export{C as SG1000_PRESETS,P as SMS_PRESETS};
//# sourceMappingURL=sms-DHM7FCV6.js.map

4
gen/sms-V2PTRT2U.js Normal file
View File

@ -0,0 +1,4 @@
import{a as g,b as p,c as M}from"./chunk-KAXUWPTM.js";import{K as o,d,f as l}from"./chunk-3NXXB3IA.js";import{$ as i,J as a,V as t,Y as x,_ as h,g as f}from"./chunk-G7IBJTLG.js";import"./chunk-5XVCUSSZ.js";var A=x([[t.UP,0,1],[t.DOWN,0,2],[t.LEFT,0,4],[t.RIGHT,0,8],[t.A,0,16],[t.B,0,32],[t.P2_UP,0,64],[t.P2_DOWN,0,128],[t.P2_LEFT,1,1],[t.P2_RIGHT,1,2],[t.P2_A,1,4],[t.P2_B,1,8],[t.VK_BACK_SLASH,1,16],[t.VK_ENTER,1,128]]),m=class extends M{constructor(){super();this.numVisibleScanlines=240;this.defaultROMSize=49152;this.ram=new Uint8Array(1024);this.read=i([[49152,65535,1023,e=>this.ram[e]],[0,49151,65535,e=>this.rom&&this.rom[e]]]);this.write=i([[49152,65535,1023,(e,r)=>{this.ram[e]=r}]]);this.init(this,this.newIOBus(),new l(new d))}getKeyboardMap(){return A}vdpInterrupt(){return this.probe.logInterrupt(255),this.cpu.interrupt(255)}getVCounter(){return 0}getHCounter(){return 0}setMemoryControl(e){}setIOPortControl(e){}readIO(e){switch(e&193){case 64:return this.getVCounter();case 65:return this.getHCounter();case 128:return this.vdp.readData();case 129:return this.vdp.readStatus();case 192:return this.inputs[0]^255;case 193:return this.inputs[1]^255}return 0}writeIO(e,r){switch(e&193){case 0:return this.setMemoryControl(r);case 1:return this.setIOPortControl(r);case 64:case 65:return this.psg.setData(r);case 128:return this.vdp.writeData(r);case 129:return this.vdp.writeAddress(r)}}newIOBus(){return{read:e=>(e&=255,this.readIO(e)),write:(e,r)=>{e&=255,r&=255,this.writeIO(e,r)}}}},u=class extends m{constructor(){super(...arguments);this.cartram=new Uint8Array(0);this.pagingRegisters=new Uint8Array(4);this.latchedHCounter=0;this.ioControlFlags=0;this.ram=new Uint8Array(8192);this.read=i([[49152,65535,8191,e=>this.ram[e]],[0,1023,1023,e=>this.rom[e]],[1024,16383,16383,e=>this.getPagedROM(e,1)],[16384,32767,16383,e=>this.getPagedROM(e,2)],[32768,49151,16383,e=>{var r=this.pagingRegisters[0];return r&8?this.cartram[r&4?e+16384:e]:this.getPagedROM(e,3)}]]);this.write=i([[49152,65531,8191,(e,r)=>{this.ram[e]=r}],[65532,65535,3,(e,r)=>{this.pagingRegisters[e]=r,this.ram[e+8188]=r}],[32768,49151,16383,(e,r)=>{var s=this.pagingRegisters[0];s&8&&(this.cartram.length==0&&(this.cartram=new Uint8Array(32768)),this.cartram[s&4?e+16384:e]=r)}]])}newVDP(e,r,s){return new g(e,r,s)}reset(){super.reset(),this.pagingRegisters.set([0,0,1,2])}getVCounter(){var e=this.scanline;return e<=218?e:e-6}getHCounter(){return this.latchedHCounter}computeHCounter(){return 0}setIOPortControl(e){(e^this.ioControlFlags)&160&&(this.latchedHCounter=this.computeHCounter()),this.ioControlFlags=e}getPagedROM(e,r){return this.rom&&this.rom[e+((this.pagingRegisters[r]&this.romPageMask)<<14)]}loadROM(e){if(e.length<=49152)this.rom=h(e,49152),this.romPageMask=3;else switch(e.length){case 65536:case 131072:case 262144:case 524288:this.rom=e,this.romPageMask=(e.length>>14)-1;break;default:throw Error("Unknown rom size: $"+f(e.length))}this.reset()}loadState(e){super.loadState(e),this.pagingRegisters.set(e.pr),this.cartram.set(e.cr),this.latchedHCounter=e.lhc,this.ioControlFlags=e.iocf}saveState(){var e=super.saveState();return e.pr=this.pagingRegisters.slice(0),e.cr=this.cartram.slice(0),e.lhc=this.latchedHCounter,e.iocf=this.ioControlFlags,e}getDebugInfo(e,r){switch(e){case"SMS":return super.getDebugInfo(e,r)+`
Bank Regs: `+this.pagingRegisters+`
`;default:return super.getDebugInfo(e,r)}}},c=class extends u{newVDP(e,r,s){return new p(e,r,s)}readIO(e){switch(e&193){case 0:return~this.inputs[1]&128|64;case 220:return this.inputs[0]^255;case 221:return this.inputs[1]^255}return super.readIO(e)}};var C=[{id:"text.c",name:"Text Mode"},{id:"hello.c",name:"Scrolling Text"},{id:"text32.c",name:"32-Column Color Text"},{id:"stars.c",name:"Scrolling Starfield"},{id:"cursorsmooth.c",name:"Moving Cursor"},{id:"simplemusic.c",name:"Simple Music"},{id:"musicplayer.c",name:"Multivoice Music"},{id:"mode2bitmap.c",name:"Mode 2 Bitmap"},{id:"mode2compressed.c",name:"Mode 2 Bitmap (LZG)"},{id:"lines.c",name:"Mode 2 Lines"},{id:"multicolor.c",name:"Multicolor Mode"},{id:"siegegame.c",name:"Siege Game"},{id:"shoot.c",name:"Solarian Game"},{id:"climber.c",name:"Climber Game"}],P=[{id:"mode4test.c",name:"Mode 4 Test"},{id:"climber.c",name:"Climber Game"}],b=class extends o{newMachine(){return new m}getPresets(){return C}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}},S=class extends o{newMachine(){return new u}getPresets(){return P}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}},w=class extends o{newMachine(){return new c}getPresets(){return P}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}readVRAMAddress(e){return this.machine.readVRAMAddress(e)}};a["sms-sg1000-libcv"]=b;a["sms-sms-libcv"]=S;a["sms-gg-libcv"]=w;export{C as SG1000_PRESETS,P as SMS_PRESETS};
//# sourceMappingURL=sms-V2PTRT2U.js.map

Some files were not shown because too many files have changed in this diff Show More