import{c as ae,k as he,n as ne,q as le}from"./chunk-ULPRULB6.js";import{X as ie,a as I,g as w,u as c}from"./chunk-RXF2JDJ3.js";var b;(function(a){a[a.GRAPHICS=0]="GRAPHICS",a[a.TEXT=1]="TEXT",a[a.BITMAP=2]="BITMAP",a[a.MULTICOLOR=3]="MULTICOLOR",a[a.MODE4=4]="MODE4",a[a.BITMAP_TEXT=5]="BITMAP_TEXT",a[a.BITMAP_MULTICOLOR=6]="BITMAP_MULTICOLOR",a[a.ILLEGAL=7]="ILLEGAL"})(b||(b={}));var O=class{constructor(e,t,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=e,this.cru=t,this.enableFlicker=r,this.palette=[c(0,0,0),c(0,0,0),c(33,200,66),c(94,220,120),c(84,85,237),c(125,118,252),c(212,82,77),c(66,235,245),c(252,85,84),c(255,121,120),c(212,193,84),c(230,206,128),c(33,176,59),c(201,91,186),c(204,204,204),c(255,255,255)]}reset(){var e;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(e){var t=this.fb32,r=this.width,i=e*r,h=this.screenMode,s=this.textMode,l=this.bitmapMode,a=s?240:256,n=192,d=r-a>>1,m=this.height-n>>1,M=this.fgColor,g=this.bgColor,o=this.ram,P=this.nameTable,V=this.colorTable,C=this.charPatternTable,D=this.colorTableMask,H=this.patternTableMask,ce=this.spriteAttributeTable,ue=this.spritePatternTable,Z=(this.registers[1]&2)!=0,y=this.registers[1]&1,$=(Z?16:8)<<(y?1:0),j=this.flicker?4:32,J=this.palette,N=!1,Q=!1,Y=31,R,v,_,f,F,B,p;if(e>=m&&e208&&(k-=256),k++;var X=k+$,L=-1;if(U<8||!l)u>=k&&u=k&&K=64&&u<128&&u>=k&&u>y,pe=ue+(de<<3)+ge,E=0;E<$;E++){var G=te+E;if(G>=0&&G>y,Te=o[pe+(re>=8?16:0)];(Te&128>>(re&7))!=0&&(W[G]===0?W[G]=me+1:N=!0)}}}z++}A+=4}else ee=!0}z>4&&(Q=!0,Y=U)}var S=s?(u>>3)*40:u>>3<<5,x=u&7;for(R=0;R=d&&R>3)],B=o[V+(f>>3)],p=o[C+(f<<3)+x],v=(p&128>>(T&7))!=0?(B&240)>>4:B&15;break;case 2:f=o[P+S+(T>>3)],F=((u&192)<<5)+(f<<3),B=o[V+(F&D)+x],p=o[C+(F&H)+x],v=(p&128>>(T&7))!=0?(B&240)>>4:B&15;break;case 3:f=o[P+S+(T>>3)],x=(u&28)>>2,p=o[C+(f<<3)+x],v=(T&4)==0?(p&240)>>4:p&15;break;case 1:f=o[P+S+Math.floor(T/6)],p=o[C+(f<<3)+x],v=(p&128>>T%6)!=0?M:g;break;case 5:f=o[P+S+Math.floor(T/6)],F=((u&192)<<5)+(f<<3),p=o[C+(F&H)+x],v=(p&128>>T%6)!=0?M:g;break;case 6:f=o[P+S+(T>>3)],x=(u&28)>>2,F=((u&192)<<5)+(f<<3),p=o[C+(F&H)+x],v=(T&4)==0?(p&240)>>4:p&15;break;case 7:v=(T&4)==0?M:g;break}if(v===0&&(v=g),!s){var se=W[T]-1;se>0&&(v=se)}}else v=g;_=J[v],t[i++]=_}}else for(_=J[g],R=0;R>4,this.bgColor=this.registers[7]&15;break}}setVDPWriteCommand3(e){this.setVDPWriteRegister(e)}writeAddress(e){if(!this.latch)this.addressRegister=this.addressRegister&65280|e;else{switch((e&192)>>6){case 0:this.setReadAddress(e);break;case 1:this.setWriteAddress(e);break;case 2:this.setVDPWriteRegister(e);break;case 3:this.setVDPWriteCommand3(e);break}this.redrawRequired=!0}this.latch=!this.latch}updateMode(e,t){if(this.bitmapMode=(e&2)!=0,this.textMode=(t&16)!=0,this.bitmapMode)switch((t&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((t&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(e){this.probe.logVRAMWrite(this.addressRegister,e),this.ram[this.addressRegister++]=e,this.prefetchByte=e,this.addressRegister&=this.ramMask,this.latch=!1,this.redrawRequired=!0}readStatus(){var e=this.statusRegister;return this.statusRegister=31,this.interruptsOn&&this.cru.setVDPInterrupt(!1),this.latch=!1,e}readData(){var e=this.prefetchByte;return this.prefetchByte=this.ram[this.addressRegister++],this.probe.logVRAMRead(this.addressRegister-1,this.prefetchByte),this.addressRegister&=this.ramMask,this.latch=!1,e}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 e=[["Pattern Table",this.charPatternTable,this.patternTableSize()],["Name Table",this.nameTable,768],["Color Table",this.colorTable,this.colorTableSize()],["Sprite Patterns",this.spritePatternTable,64*32],["Sprite Attributes",this.spriteAttributeTable,4*32]];return e}getRegsString(){let e=20;for(var t="Registers:",r=0;r0&&(t+=I(h[0],e)+": $"+w(h[1],4)+" - $"+w(h[1]+h[2]-1,4)+` `);return t+=I("Address Register",e)+": $"+w(this.addressRegister,4)+` `,t+=I("Status Register",e)+": $"+w(this.statusRegister,2)+` `,t+=I("Screen Mode",e)+": "+this.screenMode+` `,t+=I("Display On",e)+": "+this.displayOn+` `,this.ramMask!=16383&&(t+=I("RAM Mask",e)+": $"+w(this.ramMask)+` `),t}hexView(e,t,r){for(var i="",h=null,s=e,l=0,a=0;a>2&3)*85,(e>>4&3)*85),this.prefetchByte=e,this.addressRegister&=this.ramMask,this.redrawRequired=!0}else{var r=this.addressRegister;super.writeData(e),this.writeTwiddled(r,e)}this.latch=!1}writeTwiddled(e,t){for(var r=e&16380,i=r*2,h=this.ram[r],s=this.ram[r+1],l=this.ram[r+2],a=this.ram[r+3],n=0;n<8;++n){var d=7-n,m=h>>>d&1|(s>>>d&1)<<1|(l>>>d&1)<<2|(a>>>d&1)<<3;this.vramUntwiddled[i+n]=m}}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 t=this.spriteAttributeTable,r=[],i=8,h;for(this.registers[1]&2&&(i=16),h=0;h<64;h++){var s=this.ram[t+h];if(s===208)break;if(s>=240&&(s-=256),e>=s&&e=8)){a=!0;var P=e-M[2],V=h+M[1]*32+P*4,C=V*2+g,D=this.vramUntwiddled[C];if(D!==0){if(n){this.statusRegister|=32;break}this.fb32[t+(r+s-this.registers[8]&255)]=this.cpalette[16+D],n=!0}}}!a&&d>1&&(s+=d-1)}}border_clear(e,t){e=e|0,t=t|0;let r=16+(this.registers[7]&15),i=this.cpalette[r];this.fb32.fill(i,e,e+t)}rasterize_line(e){e|=0;var t=this.registers,r=256,i=this.numVisibleLines,h=this.width-r>>1,s=this.height-i>>1;let l=(e+s)*this.width|0,a=l+h|0;if(!this.displayOn||e<0||e>=i)e=262-s&&this.border_clear((e-262+s)*this.width,this.width);else{var n=e+t[9];n>=224&&(n-=224);let d=this.findSprites(e),m=t[0]&64&&e<16?0:t[8],M=this.nameTable+(n>>>3)*64,g=n&7;this.rasterize_background_line(a,m,M,g),this.rasterize_sprites(e,a,m,d),this.rasterize_foreground_line(a,m,M,g),this.border_clear(l,h),this.border_clear(a+256,h),t[0]&1<<5&&this.border_clear(a,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,512*32],["Name Table",this.nameTable,32*32*2],["Sprite Attributes",this.spriteAttributeTable,256]];return e}else return super.getDebugTables()}},fe=class extends be{constructor(){super(...arguments);this.cram=new Uint8Array(64);this.cram_latch=0}writeData(e){if(this.writeToCRAM){if(this.addressRegister&1){let t=this.cram_latch+(e<<8),r=c((t&15)*17,(t>>4&15)*17,(t>>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]=r,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 oe=2,ve=class extends le{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*oe;this.overscan=!0;this.cpu=new ae}getKeyboardFunction(){return null}init(e,t,r){this.connectCPUMemoryBus(e),this.connectCPUIOBus(t),this.handler=ie(this.inputs,this.getKeyboardMap(),this.getKeyboardFunction()),this.psg=r,this.audioadapter=r&&new he(r.psg,oe,this.sampleRate)}connectVideo(e){super.connectVideo(e);var t={setVDPInterrupt:r=>{r&&this.vdpInterrupt()}};this.vdp=this.newVDP(this.pixels,t,!0)}connectProbe(e){super.connectProbe(e),this.vdp.probe=e||this.nullProbe}newVDP(e,t,r){return new O(e,t,r)}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,t){switch(e){case"VDP":return this.vdpStateToLongString(t.vdp)}}vdpStateToLongString(e){return this.vdp.getRegsString()}readVRAMAddress(e){return this.vdp.ram[e&16383]}};export{be as a,fe as b,ve as c}; //# sourceMappingURL=chunk-S56QHLVT.js.map