1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2026-04-26 10:21:30 +00:00
Files
8bitworkshop/gen/williams-ME7KHLGT.js
T

4 lines
13 KiB
JavaScript

import{D as P0,F as y0,K as R0,d as W,i as N,l as w0,r as _0}from"./chunk-GTDJ7CMC.js";import{$ as g,K as k,P as d0,S as D,U as p0,W as f,X as v0,Y as b0,Z as A,aa as h,g as v}from"./chunk-MZ4MJULD.js";import"./chunk-KT7KMEQC.js";var Z=8,V0=304,L=class extends _0{constructor(t){super();this.isDefender=t;this.xtal=12e6;this.cpuFrequency=this.xtal/3/4;this.cpuCyclesPerLine=54;this.canvasWidth=256;this.numTotalScanlines=304;this.numVisibleScanlines=304;this.defaultROMSize=49152;this.rotate=-90;this.sampleRate=1;this.ram=new Uint8Array(49152);this.nvram=new Uint8Array(1024);this.rom=new Uint8Array(49152);this.portsel=0;this.banksel=0;this.watchdog_counter=0;this.watchdog_enabled=!1;this.pia6821=new Uint8Array(8);this.blitregs=new Uint8Array(8);this.palette=new Uint32Array(16);this.screenNeedsRefresh=!1;this.cpuScale=1;this.waitCycles=0;this.palette.fill(4278190080),this.initBus(t),this.initInputs(t),this.initAudio(),this.initCPU()}initInputs(t){var s=A([[f.A,4,1],[f.RIGHT,4,2],[f.B,4,4],[f.VK_X,4,8],[f.P2_START,4,16],[f.START,4,32],[f.LEFT,4,64],[f.DOWN,4,128],[f.UP,6,1],[f.SELECT,0,4],[f.VK_7,0,1],[f.VK_8,0,2],[f.VK_9,0,8]]),n=A([[f.P2_UP,0,1],[f.P2_DOWN,0,2],[f.P2_LEFT,0,4],[f.P2_RIGHT,0,8],[f.START,0,16],[f.P2_START,0,32],[f.UP,0,64],[f.DOWN,0,128],[f.LEFT,2,1],[f.RIGHT,2,2],[f.VK_7,4,1],[f.VK_8,4,2],[f.VK_6,4,4],[f.VK_9,4,8],[f.SELECT,4,16]]),u=t?s:n;this.handler=v0(this.pia6821,u)}initBus(t){var s=h([[1024,1535,511,i=>this.nvram[i]],[2048,2048,0,i=>this.scanline],[3072,3079,7,i=>this.pia6821[i]],[0,4095,0,i=>{}]]),n=h([[0,15,15,this.setPalette.bind(this)],[1020,1023,0,(i,a)=>{a==56&&(this.watchdog_counter=Z),this.watchdog_enabled=!0}],[1024,1535,511,(i,a)=>{this.nvram[i]=a}],[3074,3074,1,(i,a)=>{this.worker&&this.worker.postMessage({command:a&63})}],[3072,3079,7,(i,a)=>{this.pia6821[i]=a}],[0,4095,0,(i,a)=>{}]]),u=h([[0,49151,65535,i=>this.ram[i]],[49152,53247,4095,i=>{switch(this.banksel){case 0:return s(i);case 1:return this.rom[i+12288];case 2:return this.rom[i+16384];case 3:return this.rom[i+20480];case 7:return this.rom[i+24576];default:return 0}}],[53248,65535,65535,i=>this.rom?this.rom[i-53248]:0]]),b=h([[0,38911,0,this.write_display_byte.bind(this)],[38912,49151,0,(i,a)=>{this.ram[i]=a}],[49152,53247,4095,n.bind(this)],[53248,57343,0,(i,a)=>{this.banksel=a&7}],[0,65535,0,(i,a)=>{}]]),o=h([[2052,2055,3,i=>this.pia6821[i]],[2060,2063,3,i=>this.pia6821[i+4]],[2816,3071,0,i=>this.scanline],[3072,4095,1023,i=>this.nvram[i]],[0,4095,0,i=>{}]]),d=h([[0,15,15,this.setPalette.bind(this)],[2060,2060,15,(i,a)=>{this.worker&&this.worker.postMessage({command:a})}],[2304,2559,0,(i,a)=>{this.banksel=a&1}],[2560,2567,7,this.setBlitter.bind(this)],[3071,3071,0,(i,a)=>{a==57&&(this.watchdog_counter=Z,this.watchdog_enabled=!0)}],[3072,4095,1023,(i,a)=>{this.nvram[i]=a}]]),m=h([[0,36863,65535,i=>this.banksel?this.rom[i]:this.ram[i]],[36864,49151,65535,i=>this.ram[i]],[49152,53247,4095,o],[53248,65535,65535,i=>this.rom?this.rom[i-16384]:0]]),R=h([[0,38911,0,this.write_display_byte.bind(this)],[38912,49151,0,(i,a)=>{this.ram[i]=a}],[49152,53247,4095,d.bind(this)]]),C=t?u:m,P=t?b:R;this.membus={read:C,write:P},this.membus=this.probeMemoryBus(this.membus),this.readAddress=this.membus.read}initAudio(){if(this.master=new W,window.Worker!=null){this.worker=new Worker("./src/common/audio/z80worker.js");let t=new N(this.worker);this.master.master.addChannel(t)}}initCPU(){this.rom=new Uint8Array(this.defaultROMSize),this.cpu=this.newCPU(this.membus)}newCPU(t){var s=Object.create(w0());return s.init(t.write,t.read,0),s}setPalette(t,s){var n=4278190080|(s&7)<<5|(s>>3&7)<<13|s>>6<<22;n!=this.palette[t]&&(this.palette[t]=n,this.screenNeedsRefresh=!0)}write_display_byte(t,s){this.ram[t]=s,this.drawDisplayByte(t,s),this.displayPCs&&(this.displayPCs[t]=this.cpu.getPC())}drawDisplayByte(t,s){var n=(t&65280)<<1|t&255^255;this.pixels[n]=this.palette[s>>4],this.pixels[n+256]=this.palette[s&15]}setBlitter(t,s){if(t)this.blitregs[t]=s;else{var n=this.doBlit(s);this.waitCycles-=n*this.cpuScale}}doBlit(t){t&=255;var s=V0-this.blitregs[7],n=(this.blitregs[2]<<8)+this.blitregs[3],u=(this.blitregs[4]<<8)+this.blitregs[5],b=this.blitregs[6]^4,o=this.blitregs[7]^4;b==0&&b++,o==0&&o++,o==255&&o++;for(var d=t&1?256:1,m=t&1?1:b,R=t&2?256:1,C=t&2?1:b,P=0,i=0;i<o;i++){for(var a=n&65535,p=u&65535,w=0;w<b;w++){var _=this.membus.read(a);t&32?(P=P<<8|_,this.blit_pixel(p,P>>4&255,t)):this.blit_pixel(p,_,t),a+=d,a&=65535,p+=R,p&=65535}t&2?u=u&65280|u+C&255:u+=C,t&1?n=n&65280|n+m&255:n+=m}return b*o*(2+((t&4)>>2))}blit_pixel(t,s,n){var u=t<49152?this.ram[t]:this.membus.read(t),b=this.blitregs[1],o=255;n&8&&!(s&240)?n&128&&(o&=15):n&128||(o&=15),n&8&&!(s&15)?n&64&&(o&=240):n&64||(o&=240),u&=o,n&16?u|=b&~o:u|=s&~o,t<38912&&this.membus.write(t,u)}startScanline(){if(this.audio&&this.audioadapter&&this.audioadapter.generate(this.audio),this.screenNeedsRefresh&&this.scanline==0){for(var t=0;t<38912;t++)this.drawDisplayByte(t,this.ram[t]);this.screenNeedsRefresh=!1}this.scanline==0&&this.watchdog_enabled&&this.watchdog_counter--<=0&&(console.log("WATCHDOG FIRED, PC =",this.cpu.getPC().toString(16)),this.reset())}drawScanline(){let t=this.scanline;(t==0||t==60||t==188||t==252)&&(!this.isDefender||this.pia6821[7]==60)&&(this.cpu.interrupt&&this.cpu.interrupt(),this.cpu.requestInterrupt&&this.cpu.requestInterrupt())}read(t){return this.membus.read(t)}write(t,s){this.membus.write(t,s)}readConst(t){return t>=49152&&t<=52223?255:this.membus.read(t)}reset(){super.reset(),this.watchdog_counter=Z,this.watchdog_enabled=!1,this.banksel=1}loadSoundROM(t){console.log("loading sound ROM "+t.length+" bytes");var s=g(t,16384);this.worker&&this.worker.postMessage({rom:s})}loadROM(t){t.length>2&&(this.isDefender?(this.loadSoundROM(t.slice(26624)),t=this.rom.slice(0,26624)):t.length>49152?(this.loadSoundROM(t.slice(49152)),t=this.rom.slice(0,49152)):t.length>36864&&t[36864]&&this.loadSoundROM(t.slice(36864)),t=g(t,49152)),super.loadROM(t)}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.nvram.set(t.nvram),this.pia6821.set(t.inputs),this.blitregs.set(t.blt),this.watchdog_counter=t.wdc,this.banksel=t.bs,this.portsel=t.ps}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),nvram:this.nvram.slice(0),inputs:this.pia6821.slice(0),blt:this.blitregs.slice(0),wdc:this.watchdog_counter,bs:this.banksel,ps:this.portsel}}loadControlsState(t){this.pia6821.set(t.inputs)}saveControlsState(){return{inputs:this.pia6821.slice(0)}}};var S0=[{id:"gfxtest.c",name:"Graphics Test"},{id:"sprites.c",name:"Sprite Test"},{id:"game1.c",name:"Raster Paranoia Game"},{id:"bitmap_rle.c",name:"RLE Bitmap"}],Q=function(M,S,t){var s=this;this.__proto__=new(S||y0),t=t||{};for(var n=t==null?void 0:t.isDefender,u=304,b=256,o,d,m,R,C=0,P=0,i,a=!1,p=new D(8).mem,w=new D(8).mem,_,E,H,I,z=!1,B,K,U,T,e0,M0=12e6,t0=M0/3/4,r0=t0/60,i0=1,G=8,H0=4293848814,z0=4278190080,C0=A([[f.A,4,1],[f.RIGHT,4,2],[f.B,4,4],[f.VK_X,4,8],[f.P2_START,4,16],[f.START,4,32],[f.LEFT,4,64],[f.DOWN,4,128],[f.UP,6,1],[f.SELECT,0,4],[f.VK_7,0,1],[f.VK_8,0,2],[f.VK_9,0,8]]),T0=A([[f.P2_UP,0,1],[f.P2_DOWN,0,2],[f.P2_LEFT,0,4],[f.P2_RIGHT,0,8],[f.START,0,16],[f.P2_START,0,32],[f.UP,0,64],[f.DOWN,0,128],[f.LEFT,2,1],[f.RIGHT,2,2],[f.VK_7,4,1],[f.VK_8,4,2],[f.VK_6,4,4],[f.VK_9,4,8],[f.SELECT,4,16]]),A0=n?C0:T0,O=[],q=0;q<16;q++)O[q]=4278190080;this.getPresets=function(){return S0};var g0=h([[1024,1535,511,function(e){return R.mem[e]}],[2048,2048,0,function(e){return K}],[3072,3079,7,function(e){return p[e]}],[0,4095,0,function(e){}]]),E0=h([[0,15,15,n0],[1020,1023,0,function(e,r){r==56&&(i=G),a=!0}],[1024,1535,511,function(e,r){R.mem[e]=r}],[3074,3074,1,function(e,r){T&&T.postMessage({command:r&63})}],[3072,3079,7,function(e,r){p[e]=r}],[0,4095,0,function(e,r){console.log("iowrite",v(e),v(r))}]]),f0=h([[0,49151,65535,function(e){return d.mem[e]}],[49152,53247,4095,function(e){switch(P){case 0:return g0(e);case 1:return m[e+12288];case 2:return m[e+16384];case 3:return m[e+20480];case 7:return m[e+24576];default:return 0}}],[53248,65535,65535,function(e){return m?m[e-53248]:0}]]),O0=h([[0,38911,0,a0],[38912,49151,0,function(e,r){d.mem[e]=r}],[49152,53247,4095,E0],[53248,57343,0,function(e,r){P=r&7}],[0,65535,0,function(e,r){console.log(v(e),v(r))}]]),k0=h([[2052,2055,3,function(e){return p[e]}],[2060,2063,3,function(e){return p[e+4]}],[2816,3071,0,function(e){return K}],[3072,4095,1023,function(e){return R.mem[e]}],[0,4095,0,function(e){}]]),D0=h([[0,15,15,n0],[2060,2060,15,function(e,r){T&&T.postMessage({command:r})}],[2304,2559,0,function(e,r){P=r&1}],[2560,2567,7,K0],[3071,3071,0,function(e,r){r==57&&(i=G,a=!0)}],[3072,4095,1023,function(e,r){R.mem[e]=r}]]),I0=h([[0,36863,65535,function(e){return P?m[e]:d.mem[e]}],[36864,49151,65535,function(e){return d.mem[e]}],[49152,53247,4095,k0],[53248,65535,65535,function(e){return m?m[e-16384]:0}]]),B0=h([[0,38911,0,a0],[38912,49151,0,function(e,r){d.mem[e]=r}],[49152,53247,4095,D0]]),Y=n?f0:I0,s0=n?O0:B0;function n0(e,r){var x=4278190080|(r&7)<<5|(r>>3&7)<<13|r>>6<<22;x!=O[e]&&(O[e]=x,z=!0)}function a0(e,r){d.mem[e]=r,x0(e,r),I&&(I[e]=o.getPC())}function x0(e,r){var x=(e&65280)<<1|e&255^255;H[x]=O[r>>4],H[x+256]=O[r&15]}function K0(e,r){if(e)w[e]=r;else{var x=U0(r);this.waitCycles-=x*i0}}function U0(e){e&=255;var r=u-w[7],x=(w[2]<<8)+w[3],c=(w[4]<<8)+w[5],y=w[6]^4,l=w[7]^4;y==0&&y++,l==0&&l++,l==255&&l++;for(var F=e&1?256:1,c0=e&1?1:y,F0=e&2?256:1,m0=e&2?1:y,X=0,u0=0;u0<l;u0++){for(var j=x&65535,V=c&65535,h0=0;h0<y;h0++){var l0=Y(j);e&32?(X=X<<8|l0,o0(V,X>>4&255,e)):o0(V,l0,e),j+=F,j&=65535,V+=F0,V&=65535}e&2?c=c&65280|c+m0&255:c+=m0,e&1?x=x&65280|x+c0&255:x+=c0}return y*l*(2+((e&4)>>2))}function o0(e,r,x){var c=e<49152?d.mem[e]:Y(e),y=w[1],l=255;x&8&&!(r&240)?x&128&&(l&=15):x&128||(l&=15),x&8&&!(r&15)?x&64&&(l&=240):x&64||(l&=240),c&=l,x&16?c|=y&~l:c|=r&~l,e<38912&&s0(e,c)}this.start=function(){d=new D(49152),R=new D(1024),m=new Uint8Array(49152),B={read:Y,write:s0},this.readAddress=B.read;var e={read:function(c){return 0},write:function(c,y){console.log(v(c),v(y))}};o=s.newCPU(B,e),U=new W,T=new Worker("./src/common/audio/z80worker.js"),e0=new N(T),U.master.addChannel(e0);let r=(t==null?void 0:t.rotate)==null?-90:parseFloat(t.rotate);_=new d0(M,b,u,{rotate:r}),_.create(),$(_.canvas).click(function(c){var y=Math.floor(c.offsetX*_.canvas.width/$(_.canvas).width()),l=Math.floor(c.offsetY*_.canvas.height/$(_.canvas).height()),F=(y>>3)+l*32+1024;I&&console.log(y,l,v(F,4),"PC",v(I[F],4))});var x=_.getFrameData();b0(_,p,A0),H=_.getFrameData(),E=new p0(60,this.nextFrame.bind(this))},this.getRasterScanline=function(){return K},this.advance=function(e){for(var r=Math.round(r0/65),x=0;x<256;x+=4)K=x,(x==0||x==60||x==188||x==252)&&(B.read!=f0||p[7]==60)&&(o.interrupt&&o.interrupt(),o.requestInterrupt&&o.requestInterrupt()),this.runCPU(o,r),x<256&&_.updateFrame(0,0,252-x,0,4,304);if(this.runCPU(o,r*2),z&&!e){for(var c=0;c<38912;c++)x0(c,d.mem[c]);z=!1}a&&i--<=0&&(console.log("WATCHDOG FIRED, PC =",o.getPC().toString(16)),this.reset())},this.loadSoundROM=function(e){console.log("loading sound ROM "+e.length+" bytes");var r=g(e,16384);T.postMessage({rom:r})},this.loadROM=function(e,r){r.length>2&&(n?(s.loadSoundROM(r.slice(26624)),m=m.slice(0,26624)):r.length>49152?(s.loadSoundROM(r.slice(49152)),m=m.slice(0,49152)):r.length>36864&&r[36864]&&s.loadSoundROM(r.slice(36864)),m=g(r,49152)),s.reset()},this.loadState=function(e){o.loadState(e.c),d.mem.set(e.b),R.mem.set(e.nvram),p.set(e.pia),w.set(e.blt),i=e.wdc,P=e.bs,C=e.ps},this.saveState=function(){return{c:s.getCPUState(),b:d.mem.slice(0),nvram:R.mem.slice(0),pia:p.slice(0),blt:w.slice(0),wdc:i,bs:P,ps:C}},this.loadControlsState=function(e){p.set(e.pia)},this.saveControlsState=function(){return{pia:p.slice(0)}},this.getCPUState=function(){return o.saveState()},this.isRunning=function(){return E&&E.isRunning()},this.pause=function(){E.stop(),U.stop()},this.resume=function(){E.start(),U.start()},this.reset=function(){o.reset(),i=G,a=!1,P=1},this.scaleCPUFrequency=function(e){i0=e,t0*=e,r0*=e},this.getMemoryMap=function(){return{main:[{name:"Video RAM",start:0,size:49152,type:"ram"},{name:"I/O Registers",start:49152,size:4096,type:"io"}]}},this.showHelp=function(){return"https://8bitworkshop.com/docs/platforms/arcade/#williams-hardware"}},W0=function(M,S){this.__proto__=new Q(M,null,S)},N0=function(M,S){this.__proto__=new Q(M,P0,S),this.scaleCPUFrequency(4),this.ramStateToLongString=function(t){var s=t.blt,n=(s[2]<<8)+s[3],u=(s[4]<<8)+s[5],b=s[6]^4,o=s[7]^4;return`
BLIT `+v(n,4)+" "+v(u,4)+" w:"+v(b)+" h:"+v(o)+" f:"+v(s[0])+" s:"+v(s[1])}},L0=function(M,S){this.__proto__=new Q(M,null,{isDefender:!0}),this.getMemoryMap=function(){return{main:[{name:"NVRAM",start:1024,size:512,type:"ram"},{name:"Video RAM",start:0,size:49152,type:"ram"},{name:"I/O Registers",start:49152,size:4096,type:"io"},{name:"ROM",start:53248,size:12288,type:"rom"}]}}},J=class extends R0{newMachine(){return new L(!1)}getPresets(){return S0}readAddress(S){return this.machine.readConst(S)}getMemoryMap(){return{main:[{name:"Video RAM",start:0,size:49152,type:"ram"},{name:"I/O Registers",start:49152,size:3072,type:"io"},{name:"NVRAM",start:52224,size:1024,type:"ram"},{name:"ROM",start:53248,size:12288,type:"rom"}]}}};k.williams=J;k["williams.old"]=W0;k["williams-defender"]=L0;k["williams-z80"]=N0;
//# sourceMappingURL=williams-ME7KHLGT.js.map