1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2026-04-21 21:16:51 +00:00
Files
8bitworkshop/gen/chunk-MYZLCYIQ.js
T

12 lines
15 KiB
JavaScript

import{c as ie,k as he,o as ne,r as oe}from"./chunk-236FAHT6.js";import{W as ae,a as A,g as w,u}from"./chunk-QWAF5HSH.js";var L=class{constructor(t,e,r){this.probe=new ne;this.ram=new Uint8Array(16384);this.registers=new Uint8Array(8);this.spriteBuffer=new Uint8Array(256);this.displayOn=!1;this.interruptsOn=!1;this.fb32=t,this.cru=e,this.enableFlicker=r,this.palette=[u(0,0,0),u(0,0,0),u(33,200,66),u(94,220,120),u(84,85,237),u(125,118,252),u(212,82,77),u(66,235,245),u(252,85,84),u(255,121,120),u(212,193,84),u(230,206,128),u(33,176,59),u(201,91,186),u(204,204,204),u(255,255,255)]}reset(){var t;this.ram.fill(0),this.registers.fill(0),this.addressRegister=0,this.statusRegister=0,this.prefetchByte=0,this.latch=!1,this.displayOn=!1,this.interruptsOn=!1,this.screenMode=0,this.bitmapMode=!1,this.textMode=!1,this.colorTable=0,this.nameTable=0,this.charPatternTable=0,this.spriteAttributeTable=0,this.spritePatternTable=0,this.colorTableMask=16383,this.patternTableMask=16383,this.ramMask=16383,this.fgColor=0,this.bgColor=0,this.flicker=this.enableFlicker,this.redrawRequired=!0,this.width=304,this.height=240}drawScanline(t){var e=this.fb32,r=this.width,s=t*r,i=this.screenMode,h=this.textMode,a=this.bitmapMode,n=h?240:256,b=192,o=r-n>>1,d=this.height-b>>1,p=this.fgColor,M=this.bgColor,l=this.ram,v=this.nameTable,V=this.colorTable,P=this.charPatternTable,G=this.colorTableMask,S=this.patternTableMask,ce=this.spriteAttributeTable,de=this.spritePatternTable,$=(this.registers[1]&2)!==0,H=this.registers[1]&1,Z=($?16:8)<<(H?1:0),j=this.flicker?4:32,J=this.palette,N=!1,Q=!1,Y=31,R,f,D,T,C,F,m;if(t>=d&&t<d+b&&this.displayOn){var c=t-d;if(!h){var W=this.spriteBuffer;W.fill(0);var z=0,ee=!1,I=ce,B;for(B=0;B<32&&z<=j&&!ee;B++){var k=l[I];if(k!==208){k>208&&(k-=256),k++;var y=k+Z,U=-1;if(B<8||!a)c>=k&&c<y&&(U=c);else{var X=c&((this.registers[4]&3)<<6|63);X>=k&&X<y?U=X:c>=64&&c<128&&c>=k&&c<y&&(U=c)}if(U!==-1){if(z<j){var te=l[I+1],me=l[I+2]&($?252:255),ge=l[I+3]&15;(l[I+3]&128)!==0&&(te-=32);for(var pe=U-k>>H,Me=de+(me<<3)+pe,E=0;E<Z;E++){var O=te+E;if(O>=0&&O<n){var re=E>>H,Te=l[Me+(re>=8?16:0)];(Te&128>>(re&7))!==0&&(W[O]===0?W[O]=ge+1:N=!0)}}}z++}I+=4}else ee=!0}z>4&&(Q=!0,Y=B)}var _=h?(c>>3)*40:c>>3<<5,x=c&7;for(R=0;R<r;R++){if(R>=o&&R<o+n){var g=R-o;switch(i){case 0:T=l[v+_+(g>>3)],F=l[V+(T>>3)],m=l[P+(T<<3)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 2:T=l[v+_+(g>>3)],C=((c&192)<<5)+(T<<3),F=l[V+(C&G)+x],m=l[P+(C&S)+x],f=(m&128>>(g&7))!==0?(F&240)>>4:F&15;break;case 3:T=l[v+_+(g>>3)],x=(c&28)>>2,m=l[P+(T<<3)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 1:T=l[v+_+Math.floor(g/6)],m=l[P+(T<<3)+x],f=(m&128>>g%6)!==0?p:M;break;case 5:T=l[v+_+Math.floor(g/6)],C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(m&128>>g%6)!==0?p:M;break;case 6:T=l[v+_+(g>>3)],x=(c&28)>>2,C=((c&192)<<5)+(T<<3),m=l[P+(C&S)+x],f=(g&4)===0?(m&240)>>4:m&15;break;case 7:f=(g&4)===0?p:M;break}if(f===0&&(f=M),!h){var se=W[g]-1;se>0&&(f=se)}}else f=M;D=J[f],e[s++]=D}}else for(D=J[M],R=0;R<r;R++)e[s++]=D;t===d+b&&(this.statusRegister|=128,this.interruptsOn&&this.cru.setVDPInterrupt(!0)),N&&(this.statusRegister|=32),(this.statusRegister&64)===0&&(this.statusRegister|=Y),Q&&(this.statusRegister|=64)}setReadAddress(t){this.addressRegister=(t&63)<<8|this.addressRegister&255,this.prefetchByte=this.ram[this.addressRegister++],this.addressRegister&=16383}setWriteAddress(t){this.addressRegister=(t&63)<<8|this.addressRegister&255}setVDPWriteRegister(t){var e=this.registers.length-1;switch(this.registers[t&e]=this.addressRegister&255,t&e){case 0:this.updateMode(this.registers[0],this.registers[1]);break;case 1:this.ramMask=(this.registers[1]&128)!==0?16383:8191,this.displayOn=(this.registers[1]&64)!==0,this.interruptsOn=(this.registers[1]&32)!==0,this.updateMode(this.registers[0],this.registers[1]);break;case 2:this.nameTable=(this.registers[2]&15)<<10;break;case 3:this.bitmapMode?this.colorTable=(this.registers[3]&128)<<6:this.colorTable=this.registers[3]<<6,this.updateTableMasks();break;case 4:this.bitmapMode?this.charPatternTable=(this.registers[4]&4)<<11:this.charPatternTable=(this.registers[4]&7)<<11,this.updateTableMasks();break;case 5:this.spriteAttributeTable=(this.registers[5]&127)<<7;break;case 6:this.spritePatternTable=(this.registers[6]&7)<<11;break;case 7:this.fgColor=(this.registers[7]&240)>>4,this.bgColor=this.registers[7]&15;break}}setVDPWriteCommand3(t){this.setVDPWriteRegister(t)}writeAddress(t){if(!this.latch)this.addressRegister=this.addressRegister&65280|t;else{switch((t&192)>>6){case 0:this.setReadAddress(t);break;case 1:this.setWriteAddress(t);break;case 2:this.setVDPWriteRegister(t);break;case 3:this.setVDPWriteCommand3(t);break}this.redrawRequired=!0}this.latch=!this.latch}updateMode(t,e){if(this.bitmapMode=(t&2)!==0,this.textMode=(e&16)!==0,this.bitmapMode)switch((e&24)>>3){case 0:this.screenMode=2;break;case 1:this.screenMode=6;break;case 2:this.screenMode=5;break;case 3:this.screenMode=7;break}else switch((e&24)>>3){case 0:this.screenMode=0;break;case 1:this.screenMode=3;break;case 2:this.screenMode=1;break;case 3:this.screenMode=7;break}this.bitmapMode?(this.colorTable=(this.registers[3]&128)<<6,this.charPatternTable=(this.registers[4]&4)<<11,this.updateTableMasks()):(this.colorTable=this.registers[3]<<6,this.charPatternTable=(this.registers[4]&7)<<11),this.nameTable=(this.registers[2]&15)<<10,this.spriteAttributeTable=(this.registers[5]&127)<<7,this.spritePatternTable=(this.registers[6]&7)<<11}updateTableMasks(){this.screenMode===2?(this.colorTableMask=(this.registers[3]&127)<<6|63,this.patternTableMask=(this.registers[4]&3)<<11|this.colorTableMask&2047):this.screenMode===5||this.screenMode===6?(this.colorTableMask=this.ramMask,this.patternTableMask=(this.registers[4]&3)<<11|2047):(this.colorTableMask=this.ramMask,this.patternTableMask=this.ramMask)}writeData(t){this.probe.logVRAMWrite(this.addressRegister,t),this.ram[this.addressRegister++]=t,this.prefetchByte=t,this.addressRegister&=this.ramMask,this.latch=!1,this.redrawRequired=!0}readStatus(){var t=this.statusRegister;return this.statusRegister=31,this.interruptsOn&&this.cru.setVDPInterrupt(!1),this.latch=!1,t}readData(){var t=this.prefetchByte;return this.prefetchByte=this.ram[this.addressRegister++],this.probe.logVRAMRead(this.addressRegister-1,this.prefetchByte),this.addressRegister&=this.ramMask,this.latch=!1,t}getRAM(){return this.ram}colorTableSize(){return this.screenMode===0?32:this.screenMode===2?Math.min(this.colorTableMask+1,6144):0}patternTableSize(){return this.bitmapMode?Math.min(this.patternTableMask+1,6144):2048}getDebugTables(){var t=[["Pattern Table",this.charPatternTable,this.patternTableSize()],["Name Table",this.nameTable,768],["Color Table",this.colorTable,this.colorTableSize()],["Sprite Patterns",this.spritePatternTable,2048],["Sprite Attributes",this.spriteAttributeTable,128]];return t}getRegsString(){for(var e="Registers:",r=0;r<this.registers.length;r++)e+=" "+w(this.registers[r],2);e+=`
`;var s=this.getDebugTables();for(var i of s)i[2]>0&&(e+=A(i[0],20)+": $"+w(i[1],4)+" - $"+w(i[1]+i[2]-1,4)+`
`);return e+=A("Address Register",20)+": $"+w(this.addressRegister,4)+`
`,e+=A("Status Register",20)+": $"+w(this.statusRegister,2)+`
`,e+=A("Screen Mode",20)+": "+this.screenMode+`
`,e+=A("Display On",20)+": "+this.displayOn+`
`,this.ramMask!=16383&&(e+=A("RAM Mask",20)+": $"+w(this.ramMask)+`
`),e}hexView(t,e,r){for(var s="",i=null,h=t,a=0,n=0;n<e&&h<16384;h++,n++){(n&15)===0&&(s+=`
`+w(h,4)+":",a++),s+=" ",r&&r===h&&(i=a);var b=this.ram[h].toString(16).toUpperCase();b.length===1&&(s+="0"),s+=b}return{text:s.substr(1),lineCount:a,anchorLine:i-1}}getWord(t){return t<16384?this.ram[t]<<8|this.ram[t+1]:0}getCharAt(t,e){return t-=24,e-=24,this.textMode?this.ram[this.nameTable+Math.floor((t-8)/6)+Math.floor(e/8)*40]:this.ram[this.nameTable+Math.floor(t/8)+Math.floor(e/8)*32]}setFlicker(t){this.flicker=t,this.enableFlicker=t}getState(){return{ram:this.ram.slice(0),registers:this.registers.slice(0),addressRegister:this.addressRegister,statusRegister:this.statusRegister,latch:this.latch,prefetchByte:this.prefetchByte,displayOn:this.displayOn,interruptsOn:this.interruptsOn,screenMode:this.screenMode,bitmapMode:this.bitmapMode,textMode:this.textMode,colorTable:this.colorTable,nameTable:this.nameTable,charPatternTable:this.charPatternTable,spriteAttributeTable:this.spriteAttributeTable,spritePatternTable:this.spritePatternTable,colorTableMask:this.colorTableMask,patternTableMask:this.patternTableMask,ramMask:this.ramMask,fgColor:this.fgColor,bgColor:this.bgColor,flicker:this.flicker}}restoreState(t){this.ram.set(t.ram),this.registers.set(t.registers),this.addressRegister=t.addressRegister,this.statusRegister=t.statusRegister,this.latch=t.latch,this.prefetchByte=t.prefetchByte,this.displayOn=t.displayOn,this.interruptsOn=t.interruptsOn,this.screenMode=t.screenMode,this.bitmapMode=t.bitmapMode,this.textMode=t.textMode,this.colorTable=t.colorTable,this.nameTable=t.nameTable,this.charPatternTable=t.charPatternTable,this.spriteAttributeTable=t.spriteAttributeTable,this.spritePatternTable=t.spritePatternTable,this.colorTableMask=t.colorTableMask,this.patternTableMask=t.patternTableMask,this.ramMask=t.ramMask,this.fgColor=t.fgColor,this.bgColor=t.bgColor,this.flicker=t.flicker,this.redrawRequired=!0}},K=class extends L{constructor(){super(...arguments);this.cram=new Uint8Array(32);this.cpalette=new Uint32Array(32);this.registers=new Uint8Array(16);this.vramUntwiddled=new Uint8Array(32768);this.numVisibleLines=192;this.lineCounter=0;this.lineInterruptPending=!1}reset(){super.reset(),this.writeToCRAM=!1,this.cram.fill(0),this.cpalette.fill(0),this.vramUntwiddled.fill(0)}readStatus(){return this.lineInterruptPending=!1,super.readStatus()}updateMode(e,r){e&4?(this.screenMode=4,this.nameTable=(this.registers[2]&15)<<10&14336,this.spriteAttributeTable=(this.registers[5]&126)<<7):super.updateMode(e,r)}setReadAddress(e){super.setReadAddress(e),this.writeToCRAM=!1}setWriteAddress(e){super.setWriteAddress(e),this.writeToCRAM=!1}setVDPWriteRegister(e){super.setVDPWriteRegister(e),this.ramMask=16383}setVDPWriteCommand3(e){this.writeToCRAM=!0}writeData(e){if(this.writeToCRAM){var r=this.addressRegister++&this.cram.length-1;this.cram[r]=e,this.cpalette[r]=u((e&3)*85,(e>>2&3)*85,(e>>4&3)*85),this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else{var s=this.addressRegister;super.writeData(e),this.writeTwiddled(s,e)}this.latch=!1}writeTwiddled(e,r){for(var s=e&16380,i=s*2,h=this.ram[s],a=this.ram[s+1],n=this.ram[s+2],b=this.ram[s+3],o=0;o<8;++o){var d=7-o,p=h>>>d&1|(a>>>d&1)<<1|(n>>>d&1)<<2|(b>>>d&1)<<3;this.vramUntwiddled[i+o]=p}}getState(){var e=super.getState();return e.cram=this.cram.slice(0),e}restoreState(e){super.restoreState(e),this.cram.set(e.cram)}drawScanline(e){this.screenMode==4?this.rasterize_line(e):super.drawScanline(e)}findSprites(e){var r=this.spriteAttributeTable,s=[],i=8,h;for(this.registers[1]&2&&(i=16),h=0;h<64;h++){var a=this.ram[r+h];if(a===208)break;if(a>=240&&(a-=256),e>=a&&e<a+i){if(s.length===8){this.statusRegister|=64;break}s.push([this.ram[r+128+h*2],this.ram[r+128+h*2+1],a])}}return s}rasterize_background(e,r,s,i,h){e=e|0,r=r|0,s=s|0,i=(i|0)*2;var a,n;s&512?(n=-1,i+=7):n=1;let b=s&2048?16:0;var o;if(h&&b===0)for(a=0;a<8;a++)o=this.vramUntwiddled[i],i+=n,o!==0&&(this.fb32[e+r]=this.cpalette[o]),r=r+1&255;else for(a=0;a<8;a++)o=this.vramUntwiddled[i]+b,i+=n,this.fb32[e+r]=this.cpalette[o],r=r+1&255}clear_background(e,r){e=e|0,r=r|0;var s;let i=this.cpalette[0];for(s=0;s<8;++s)this.fb32[e+r]=i,r=r+1&255}rasterize_background_line(e,r,s,i){e=e|0,r=r|0,s=s|0;let h=(i|0)*4;for(var a=0;a<32;a++){var n=this.ram[s+a*2]|this.ram[s+a*2+1]<<8,b=n&511,o=32*b;n&1024?o+=28-h:o+=h,(n&4096)===0?this.rasterize_background(e,r,n,o,!1):this.clear_background(e,r),r=r+8&255}}rasterize_foreground_line(e,r,s,i){e=e|0,r=r|0,s=s|0;let h=(i|0)*4;for(var a=0;a<32;a++){var n=this.ram[s+a*2]|this.ram[s+a*2+1]<<8;if((n&4096)!==0){var b=n&511,o=32*b;n&1024?o+=28-h:o+=h,this.rasterize_background(e,a*8+r&255,n,o,!0)}}}rasterize_sprites(e,r,s,i){r=r|0,s=s|0;let h=this.registers[6]&4?8192:0;for(var a=0;a<256;++a){for(var n=a,b=!1,o=!1,d=256,p=0;p<i.length;p++){var M=i[p],l=n-M[0];if(l<0){var v=-l;v<d&&(d=v);continue}if(!(l>=8)){b=!0;var V=e-M[2],P=h+M[1]*32+V*4,G=P*2+l,S=this.vramUntwiddled[G];if(S!==0){if(o){this.statusRegister|=32;break}this.fb32[r+(s+a-this.registers[8]&255)]=this.cpalette[16+S],o=!0}}}!b&&d>1&&(a+=d-1)}}border_clear(e,r){e=e|0,r=r|0;let s=16+(this.registers[7]&15),i=this.cpalette[s];this.fb32.fill(i,e,e+r)}rasterize_line(e){e|=0;var r=this.registers,s=256,i=this.numVisibleLines,h=this.width-s>>1,a=this.height-i>>1;let n=(e+a)*this.width|0,b=n+h|0;if(!this.displayOn||e<0||e>=i)e<this.height?this.border_clear(n,this.width):e>=262-a&&this.border_clear((e-262+a)*this.width,this.width);else{var o=e+r[9];o>=224&&(o-=224);let d=this.findSprites(e),p=r[0]&64&&e<16?0:r[8],M=this.nameTable+(o>>>3)*64,l=o&7;this.rasterize_background_line(b,p,M,l),this.rasterize_sprites(e,b,p,d),this.rasterize_foreground_line(b,p,M,l),this.border_clear(n,h),this.border_clear(b+256,h),r[0]&32&&this.border_clear(b,8)}e==i&&(this.statusRegister|=128,this.interruptsOn&&this.cru.setVDPInterrupt(!0)),e<=i?this.lineCounter>0?this.lineCounter--:(this.lineCounter=this.registers[10],this.lineInterruptPending=!0):this.lineCounter=this.registers[10],this.lineInterruptPending&&this.registers[0]&16}getDebugTables(){if(this.screenMode==4){var e=[["Pattern Table",0,16384],["Name Table",this.nameTable,2048],["Sprite Attributes",this.spriteAttributeTable,256]];return e}else return super.getDebugTables()}},le=class extends K{constructor(){super(...arguments);this.cram=new Uint8Array(64);this.cram_latch=0}writeData(e){if(this.writeToCRAM){if(this.addressRegister&1){let r=this.cram_latch+(e<<8),s=u((r&15)*17,(r>>4&15)*17,(r>>8&15)*17),i=this.addressRegister&this.cram.length-1;this.cram[i-1]=this.cram_latch,this.cram[i]=e,this.cpalette[i>>1]=s,this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else this.cram_latch=e;this.addressRegister++}else super.writeData(e);this.latch=!1}};var be=2,ue=class extends oe{constructor(){super(...arguments);this.cpuFrequency=3579545;this.canvasWidth=304;this.numTotalScanlines=262;this.numVisibleScanlines=240;this.cpuCyclesPerLine=this.cpuFrequency/(262*60);this.sampleRate=262*60*be;this.overscan=!0;this.cpu=new ie}getKeyboardFunction(){return null}init(e,r,s){this.connectCPUMemoryBus(e),this.connectCPUIOBus(r),this.handler=ae(this.inputs,this.getKeyboardMap(),this.getKeyboardFunction()),this.psg=s,this.audioadapter=s&&new he(s.psg,be,this.sampleRate)}connectVideo(e){super.connectVideo(e);var r={setVDPInterrupt:s=>{s&&this.vdpInterrupt()}};this.vdp=this.newVDP(this.pixels,r,!0)}connectProbe(e){super.connectProbe(e),this.vdp.probe=e||this.nullProbe}newVDP(e,r,s){return new L(e,r,s)}startScanline(){this.audio&&this.audioadapter&&this.audioadapter.generate(this.audio)}drawScanline(){this.vdp.drawScanline(this.scanline)}loadState(e){super.loadState(e),this.vdp.restoreState(e.vdp)}saveState(){var e=super.saveState();return e.vdp=this.vdp.getState(),e}reset(){super.reset(),this.vdp.reset(),this.psg.reset()}getDebugCategories(){return["CPU","Stack","VDP"]}getDebugInfo(e,r){switch(e){case"VDP":return this.vdpStateToLongString(r.vdp)}}vdpStateToLongString(e){return this.vdp.getRegsString()}readVRAMAddress(e){return this.vdp.ram[e&16383]}};export{K as a,le as b,ue as c};
//# sourceMappingURL=chunk-MYZLCYIQ.js.map