mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-01-09 09:32:32 +00:00
Deploying to gh-pages from @ sehugg/8bitworkshop@33b2e92396 🚀
This commit is contained in:
parent
951d44921c
commit
01fc5ea163
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
@ -1,7 +1,7 @@
|
||||
import{J as W,h as E,k as F,p as N,u as _}from"./chunk-WI6A3Z5X.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-NVSDMXBL.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+=`
|
||||
import{J as W,h as E,k as F,p as N,u as _}from"./chunk-I4VYBHZZ.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-LKR3N7UH.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-4Q7P3ZJD.js.map
|
||||
//# sourceMappingURL=atari7800-VIWS5Z7H.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
10
gen/atari8-TVMHGW66.js
Normal file
10
gen/atari8-TVMHGW66.js
Normal file
File diff suppressed because one or more lines are too long
7
gen/atari8-TVMHGW66.js.map
Normal file
7
gen/atari8-TVMHGW66.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
import{a as M}from"./chunk-MXBOAY2G.js";import{C as S,J as _,r as g,z as b}from"./chunk-WI6A3Z5X.js";import{J as n,O as a,U as x,a as l,g as o,u as p}from"./chunk-NVSDMXBL.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-SB4FEYXH.js";import{C as S,J as _,r as g,z as b}from"./chunk-I4VYBHZZ.js";import{J as n,O as a,U as x,a as l,g as o,u as p}from"./chunk-LKR3N7UH.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-MXBOAY2G.js";import{C as S,J as _,r as g,z 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-MGY2Z57U.js.map
|
||||
//# sourceMappingURL=c64-G4LISAPF.js.map
|
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
7
gen/chunk-I4VYBHZZ.js.map
Normal file
7
gen/chunk-I4VYBHZZ.js.map
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
@ -1,4 +1,4 @@
|
||||
import{B as C,D as w,a as p,b as P}from"./chunk-WI6A3Z5X.js";import{P as b,R as v,T as S}from"./chunk-NVSDMXBL.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-I4VYBHZZ.js";import{P as b,R as v,T as S}from"./chunk-LKR3N7UH.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-MXBOAY2G.js.map
|
||||
//# sourceMappingURL=chunk-SB4FEYXH.js.map
|
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
import{c as _,g as i}from"./chunk-NVSDMXBL.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-PNLKZPGY.js.map
|
||||
import{c as _,g as i}from"./chunk-LKR3N7UH.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-WUYNGA3L.js.map
|
@ -1,4 +1,4 @@
|
||||
import{c as E}from"./chunk-CVTTXXJK.js";import{b as f}from"./chunk-MXBOAY2G.js";import{F as m,K as n,d as w,f as c}from"./chunk-WI6A3Z5X.js";import{$ as t,J as o,V as e,Y as s,k as g,l as a}from"./chunk-NVSDMXBL.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-QCL6HLHP.js";import{b as f}from"./chunk-SB4FEYXH.js";import{F as m,K as n,d as w,f as c}from"./chunk-I4VYBHZZ.js";import{$ as t,J as o,V as e,Y as s,k as g,l as a}from"./chunk-LKR3N7UH.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-ZDRD3M6E.js.map
|
||||
//# sourceMappingURL=coleco-VFTJAMLQ.js.map
|
@ -700,7 +700,7 @@ class BaseMachinePlatform extends BaseDebugPlatform {
|
||||
}
|
||||
}
|
||||
loadROM(title, data) {
|
||||
this.machine.loadROM(data);
|
||||
this.machine.loadROM(data, title);
|
||||
this.reset();
|
||||
}
|
||||
pollControls() {
|
||||
|
File diff suppressed because one or more lines are too long
@ -112,7 +112,6 @@ class BasicMachine extends BasicHeadlessMachine {
|
||||
super(...arguments);
|
||||
this.overscan = false;
|
||||
this.rotate = 0;
|
||||
this.aspectRatio = 1.0;
|
||||
}
|
||||
getAudioParams() {
|
||||
return { sampleRate: this.sampleRate, stereo: false };
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/common/devices.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/common/devices.ts"],"names":[],"mappings":"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"}
|
@ -671,8 +671,10 @@ function gtia_ntsc_to_rgb(val) {
|
||||
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);
|
||||
if (cr)
|
||||
lm += 1;
|
||||
let phase = ((cr - 1) * 25 - 25) * (2 * Math.PI / 360);
|
||||
let y = 256 * bright * Math.pow(lm / 16, gamma);
|
||||
let i = crlv * Math.cos(phase);
|
||||
let q = crlv * Math.sin(phase);
|
||||
var r = y + 0.956 * i + 0.621 * q;
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
import{K as l,r as p}from"./chunk-WI6A3Z5X.js";import{J as i,O as o}from"./chunk-NVSDMXBL.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-KWJANLNU.js.map
|
||||
import{K as l,r as p}from"./chunk-I4VYBHZZ.js";import{J as i,O as o}from"./chunk-LKR3N7UH.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-JQL7CZ2J.js.map
|
@ -1,2 +1,2 @@
|
||||
import{a as d}from"./chunk-3XE5YOCV.js";import{o as c}from"./chunk-G4KJLXRQ.js";import"./chunk-M72QJ5SI.js";import"./chunk-5SHCNQ2O.js";import"./chunk-KCZ4SZHW.js";import{J as m,o as u,u as h}from"./chunk-WI6A3Z5X.js";import{$ as i,B as o,J as l,m as n}from"./chunk-NVSDMXBL.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-AVUS7SZC.js.map
|
||||
import{a as d}from"./chunk-3XE5YOCV.js";import{o as c}from"./chunk-EYNTOVQZ.js";import"./chunk-M72QJ5SI.js";import"./chunk-5SHCNQ2O.js";import"./chunk-4XVUF2S5.js";import{J as m,o as u,u as h}from"./chunk-I4VYBHZZ.js";import{$ as i,B as o,J as l,m as n}from"./chunk-LKR3N7UH.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-IGUPQPPG.js.map
|
@ -1,2 +1,2 @@
|
||||
import{b as w,c as x}from"./chunk-KCZ4SZHW.js";import{D as v,J as c,k as m,l as u,x as g,z as p}from"./chunk-NVSDMXBL.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-4XVUF2S5.js";import{D as v,J as c,k as m,l as u,x as g,z as p}from"./chunk-LKR3N7UH.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
@ -557,7 +557,17 @@ class AddressHeatMapView extends ProbeBitmapViewBase {
|
||||
this.canvas.onclick = (e) => {
|
||||
var pos = (0, emu_1.getMousePos)(this.canvas, e);
|
||||
var opaddr = Math.floor(pos.x) + Math.floor(pos.y) * 256;
|
||||
(0, ui_1.runToPC)(opaddr & 0xffff);
|
||||
var lastpc = -1;
|
||||
var runpc = -1;
|
||||
this.redraw((op, addr) => {
|
||||
if (runpc < 0 && lastpc >= 0 && addr == opaddr) {
|
||||
runpc = lastpc;
|
||||
}
|
||||
if (op == probe_1.ProbeFlags.EXECUTE)
|
||||
lastpc = addr;
|
||||
});
|
||||
if (runpc >= 0)
|
||||
(0, ui_1.runToPC)(runpc);
|
||||
};
|
||||
}
|
||||
clear() {
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
import{J as c,o as x,u as F}from"./chunk-WI6A3Z5X.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-NVSDMXBL.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-MZMDJFCN.js.map
|
||||
import{J as c,o as x,u as F}from"./chunk-I4VYBHZZ.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-LKR3N7UH.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-SOSRDMEV.js.map
|
@ -5,6 +5,7 @@ const audio_1 = require("../common/audio");
|
||||
const MOS6502_1 = require("../common/cpu/MOS6502");
|
||||
const devices_1 = require("../common/devices");
|
||||
const emu_1 = require("../common/emu");
|
||||
const util_1 = require("../common/util");
|
||||
const wasmplatform_1 = require("../common/wasmplatform");
|
||||
const antic_1 = require("./chips/antic");
|
||||
const gtia_1 = require("./chips/gtia");
|
||||
@ -45,12 +46,11 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
this.cpuFrequency = 1789773;
|
||||
this.numTotalScanlines = 262;
|
||||
this.cpuCyclesPerLine = 114;
|
||||
this.canvasWidth = 348; // TODO?
|
||||
this.canvasWidth = 336;
|
||||
this.numVisibleScanlines = 224;
|
||||
this.aspectRatio = 240 / 172;
|
||||
this.aspectRatio = this.canvasWidth / this.numVisibleScanlines * 0.857;
|
||||
this.firstVisibleScanline = 16;
|
||||
this.firstVisibleClock = 44 * 2; // ... to 215 * 2
|
||||
// TODO: for 400/800/5200
|
||||
this.firstVisibleClock = (44 - 6) * 2; // ... to 215 * 2
|
||||
this.defaultROMSize = 0x8000;
|
||||
this.overscan = true;
|
||||
this.audioOversample = 4;
|
||||
@ -61,6 +61,7 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
this.keycode = 0;
|
||||
this.cart_80 = false;
|
||||
this.cart_a0 = false;
|
||||
this.xexdata = null;
|
||||
this.cpu = new MOS6502_1.MOS6502();
|
||||
this.ram = new Uint8Array(0x10000);
|
||||
this.bios = new Uint8Array(0x2800);
|
||||
@ -88,10 +89,12 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
[0xd800, 0xffff, 0xffff, (a) => { return this.bios[a - 0xd800]; }],
|
||||
]),
|
||||
write: (0, emu_1.newAddressDecoder)([
|
||||
[0x0000, 0xbfff, 0xffff, (a, v) => { this.ram[a] = v; }],
|
||||
[0x0000, 0xbffa, 0xffff, (a, v) => { this.ram[a] = v; }],
|
||||
[0xbffb, 0xbfff, 0xffff, (a, v) => { this.ram[a] = v; this.initCartA(); }],
|
||||
[0xd000, 0xd0ff, 0x1f, (a, v) => { this.gtia.setReg(a, v); }],
|
||||
[0xd200, 0xd2ff, 0xf, (a, v) => { this.writePokey(a, v); }],
|
||||
[0xd400, 0xd4ff, 0xf, (a, v) => { this.antic.setReg(a, v); }],
|
||||
[0xd500, 0xd5ff, 0xff, (a, v) => { this.writeMapper(a, v); }],
|
||||
]),
|
||||
};
|
||||
}
|
||||
@ -99,11 +102,12 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
this.bios.set(bios);
|
||||
}
|
||||
reset() {
|
||||
console.log(this.saveState());
|
||||
super.reset();
|
||||
this.antic.reset();
|
||||
this.gtia.reset();
|
||||
this.keycode = 0;
|
||||
if (this.xexdata)
|
||||
this.cart_a0 = true; // TODO
|
||||
}
|
||||
read(a) {
|
||||
// TODO: lastdmabyte?
|
||||
@ -176,9 +180,6 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
// update GTIA
|
||||
// get X coordinate within scanline
|
||||
let xofs = this.antic.h * 4 - this.firstVisibleClock;
|
||||
// correct for HSCROL
|
||||
if (this.antic.dliop & 0x10)
|
||||
xofs += (this.antic.regs[4] & 1) << 1;
|
||||
// GTIA tick functions
|
||||
let gtiatick1 = () => {
|
||||
this.gtia.clockPulse1();
|
||||
@ -189,8 +190,18 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
this.linergb[xofs++] = this.gtia.rgb;
|
||||
};
|
||||
// tick 4 GTIA clocks for each CPU/ANTIC cycle
|
||||
this.gtia.clockPulse4();
|
||||
// correct for HSCROL -- bias antic +2, bias gtia -1
|
||||
if ((this.antic.dliop & 0x10) && (this.antic.regs[4] & 1)) {
|
||||
xofs += 2;
|
||||
this.gtia.setBias(-1);
|
||||
}
|
||||
else {
|
||||
this.gtia.setBias(0);
|
||||
}
|
||||
let bp = antic_1.MODE_SHIFT[this.antic.mode];
|
||||
if (bp < 8 || (xofs & 4) == 0) {
|
||||
let odd = this.antic.h & 1;
|
||||
if (bp < 8 || odd) {
|
||||
this.gtia.an = this.antic.shiftout();
|
||||
}
|
||||
gtiatick1();
|
||||
@ -209,12 +220,12 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
return 1;
|
||||
}
|
||||
loadState(state) {
|
||||
this.loadControlsState(state);
|
||||
this.cpu.loadState(state.c);
|
||||
this.ram.set(state.ram);
|
||||
this.antic.loadState(state.antic);
|
||||
this.gtia.loadState(state.gtia);
|
||||
this.irq_pokey.loadState(state.pokey);
|
||||
this.loadControlsState(state);
|
||||
this.lastdmabyte = state.lastdmabyte;
|
||||
this.keycode = state.keycode;
|
||||
}
|
||||
@ -227,7 +238,7 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
pokey: this.irq_pokey.saveState(),
|
||||
inputs: this.inputs.slice(0),
|
||||
lastdmabyte: this.lastdmabyte,
|
||||
keycode: this.keycode, // TODO: inputs?
|
||||
keycode: this.keycode,
|
||||
};
|
||||
}
|
||||
loadControlsState(state) {
|
||||
@ -291,9 +302,26 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
this.cpu.NMI();
|
||||
this.probe.logInterrupt(1);
|
||||
}
|
||||
loadROM(rom) {
|
||||
if (rom.length != 0x2000 && rom.length != 0x4000 && rom.length != 0x8000)
|
||||
throw new Error("Sorry, this platform can only load 8/16/32 KB cartridges at the moment.");
|
||||
loadROM(rom, title) {
|
||||
// XEX file?
|
||||
if (title && title.toLowerCase().endsWith('.xex') && rom[0] == 0xff && rom[1] == 0xff) {
|
||||
// TODO: we fake a cartridge
|
||||
this.xexdata = rom;
|
||||
let cart = new Uint8Array(0x1000);
|
||||
cart.set([0x00, 0x01, 0x00, 0x04, 0x00, 0x01], 0xffa);
|
||||
this.loadCartridge(cart);
|
||||
}
|
||||
else {
|
||||
this.loadCartridge(rom);
|
||||
}
|
||||
}
|
||||
loadCartridge(rom) {
|
||||
// strip off header
|
||||
if (rom[0] == 0x43 && rom[1] == 0x41 && rom[2] == 0x52 && rom[3] == 0x54) {
|
||||
rom = rom.slice(16);
|
||||
}
|
||||
if (rom.length != 0x1000 && rom.length != 0x2000 && rom.length != 0x4000 && rom.length != 0x8000)
|
||||
throw new Error("Sorry, this platform can only load 4/8/16/32 KB cartridges at the moment.");
|
||||
// TODO: support other than 8 KB carts
|
||||
// support 4/8/16/32 KB carts
|
||||
let rom2 = new Uint8Array(0x8000);
|
||||
@ -301,11 +329,62 @@ class Atari800 extends devices_1.BasicScanlineMachine {
|
||||
rom2.set(rom, i);
|
||||
}
|
||||
this.cart_a0 = true; // TODO
|
||||
if (rom.length == 0x4000) {
|
||||
this.cart_80 = true;
|
||||
}
|
||||
this.cart_80 = rom.length == 0x4000;
|
||||
super.loadROM(rom2);
|
||||
}
|
||||
writeMapper(addr, value) {
|
||||
if (addr == 0xff) {
|
||||
if (value == 0x80)
|
||||
this.cart_80 = false;
|
||||
if (value == 0xa0)
|
||||
this.cart_a0 = false;
|
||||
}
|
||||
}
|
||||
// TODO
|
||||
loadXEX(rom) {
|
||||
let ofs = 2;
|
||||
let cart = this.ram;
|
||||
let cartofs = 0x100; // stub routine in stack page
|
||||
while (ofs < rom.length) {
|
||||
let start = rom[ofs + 0] + rom[ofs + 1] * 256;
|
||||
let end = rom[ofs + 2] + rom[ofs + 3] * 256;
|
||||
console.log('XEX', ofs, (0, util_1.hex)(start), (0, util_1.hex)(end));
|
||||
ofs += 4;
|
||||
for (let i = start; i <= end; i++) {
|
||||
this.ram[i] = rom[ofs++];
|
||||
}
|
||||
var runaddr = this.ram[0x2e0] + this.ram[0x2e1] * 256;
|
||||
var initaddr = this.ram[0x2e2] + this.ram[0x2e3] * 256;
|
||||
console.log('XEX run', (0, util_1.hex)(runaddr), 'init', (0, util_1.hex)(initaddr));
|
||||
if (initaddr) {
|
||||
cart[cartofs++] = 0x20;
|
||||
cart[cartofs++] = initaddr & 0xff;
|
||||
cart[cartofs++] = initaddr >> 8;
|
||||
}
|
||||
if (ofs > rom.length)
|
||||
throw new Error("Bad .XEX file format");
|
||||
}
|
||||
if (runaddr) {
|
||||
cart[cartofs++] = 0xa9; // lda #$a0
|
||||
cart[cartofs++] = 0xa0;
|
||||
cart[cartofs++] = 0x8d; // sta $d5ff (disable cart)
|
||||
cart[cartofs++] = 0xff;
|
||||
cart[cartofs++] = 0xd5;
|
||||
cart[cartofs++] = 0x4c; // jmp runaddr
|
||||
cart[cartofs++] = runaddr & 0xff;
|
||||
cart[cartofs++] = runaddr >> 8;
|
||||
}
|
||||
}
|
||||
initCartA() {
|
||||
//console.log('init', hex(this.cpu.getPC()));
|
||||
// disable cartridges and load XEX
|
||||
if (this.cpu.getPC() == 0xf17f) {
|
||||
if (this.xexdata) {
|
||||
this.loadXEX(this.xexdata);
|
||||
}
|
||||
//this.cart_80 = this.cart_a0 = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.Atari800 = Atari800;
|
||||
class Atari5200 extends Atari800 {
|
||||
|
File diff suppressed because one or more lines are too long
@ -11,8 +11,8 @@ const util_1 = require("../../common/util");
|
||||
// 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, 29, 21, 13];
|
||||
const PF_RIGHT = [0, 29 + 64, 21 + 80, 13 + 96];
|
||||
const PF_LEFT = [0, 25, 17, 9];
|
||||
const PF_RIGHT = [0, 25 + 64, 17 + 80, 9 + 96];
|
||||
const DMACTL = 0;
|
||||
const CHACTL = 1;
|
||||
const DLISTL = 2;
|
||||
@ -35,8 +35,9 @@ const PFWIDE = 3;
|
||||
const NMIST_CYCLE = 12;
|
||||
const NMI_CYCLE = 24;
|
||||
const WSYNC_CYCLE = 212;
|
||||
const ANTIC_LEFT = 17; // gtia 34
|
||||
const ANTIC_RIGHT = 110; // gtia 221
|
||||
const ANTIC_LEFT = 17 - 4; // gtia 34, 4 cycle delay
|
||||
const ANTIC_RIGHT = 110 - 4; // gtia 221, 4 cycle delay
|
||||
const LAST_DMA_H = 105; // last DMA cycle
|
||||
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];
|
||||
@ -189,9 +190,12 @@ class ANTIC {
|
||||
}
|
||||
nextScreen() {
|
||||
let b = this.read(this.scanaddr);
|
||||
this.scanaddr = ((this.scanaddr + 1) & 0xfff) | (this.scanaddr & ~0xfff);
|
||||
this.incScanAddr();
|
||||
return b;
|
||||
}
|
||||
incScanAddr() {
|
||||
this.scanaddr = ((this.scanaddr + 1) & 0xfff) | (this.scanaddr & ~0xfff);
|
||||
}
|
||||
dlDMAEnabled() { return this.regs[DMACTL] & 0b100000; }
|
||||
isVisibleScanline() {
|
||||
return this.v >= 8 && this.v < 248;
|
||||
@ -200,10 +204,10 @@ class ANTIC {
|
||||
return this.dma_enabled && !this.linesleft;
|
||||
}
|
||||
isPlayerDMAEnabled() {
|
||||
return this.dma_enabled && this.regs[DMACTL] & 0b1000;
|
||||
return this.regs[DMACTL] & 0b1000;
|
||||
}
|
||||
isMissileDMAEnabled() {
|
||||
return this.dma_enabled && this.regs[DMACTL] & 0b1100;
|
||||
return this.regs[DMACTL] & 0b1100;
|
||||
}
|
||||
clockPulse() {
|
||||
let did_dma = this.regs[WSYNC] != 0;
|
||||
@ -270,7 +274,7 @@ class ANTIC {
|
||||
}
|
||||
this.output = 0; // background color (TODO: only for blank lines)
|
||||
if (this.mode >= 2 && this.period) {
|
||||
let candma = this.h < 106;
|
||||
let candma = this.h <= LAST_DMA_H;
|
||||
this.dmaclock <<= 1;
|
||||
if (this.dmaclock & (1 << this.period)) {
|
||||
this.dmaclock |= 1;
|
||||
@ -285,14 +289,25 @@ class ANTIC {
|
||||
}
|
||||
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
|
||||
if (candma) {
|
||||
this.linebuf[this.dmaidx] = this.nextScreen(); // read char name
|
||||
}
|
||||
else {
|
||||
this.incScanAddr();
|
||||
}
|
||||
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
|
||||
if (candma) {
|
||||
this.readBitmapData(); // read bitmap
|
||||
}
|
||||
else {
|
||||
if (this.mode >= 8)
|
||||
this.incScanAddr();
|
||||
}
|
||||
did_dma = candma;
|
||||
}
|
||||
this.output = this.h >= this.left + 3 && this.h <= this.right + 2 ? 4 : 0;
|
||||
|
File diff suppressed because one or more lines are too long
@ -31,6 +31,7 @@ const M0PL = 0x8;
|
||||
const P0PL = 0xc;
|
||||
exports.TRIG0 = 0x10;
|
||||
exports.CONSOL = 0x1f;
|
||||
const HOFFSET = -9; // bias to account for antic->gtia delay
|
||||
const PRIOR_TABLE = [
|
||||
0, 1, 2, 3, 7, 7, 7, 7, 8, 8, 8, 8, 4, 5, 6, 7,
|
||||
0, 1, 2, 3, 7, 7, 7, 7, 8, 8, 8, 8, 4, 5, 6, 7,
|
||||
@ -49,6 +50,12 @@ const PRIOR_TABLE = [
|
||||
2, 3, 4, 5, 7, 7, 7, 7, 8, 8, 8, 8, 0, 1, 6, 7,
|
||||
2, 3, 4, 5, 7, 7, 7, 7, 8, 8, 8, 8, 0, 1, 6, 7, // 1000
|
||||
];
|
||||
const MODE_9_LOOKUP = [
|
||||
COLPM0 + 0, COLPM0 + 1, COLPM0 + 2, COLPM0 + 3,
|
||||
COLPF0 + 0, COLPF0 + 1, COLPF0 + 2, COLPF0 + 3,
|
||||
COLBK, COLBK, COLBK, COLBK,
|
||||
COLPF0 + 0, COLPF0 + 1, COLPF0 + 2, COLPF0 + 3,
|
||||
];
|
||||
class GTIA {
|
||||
constructor() {
|
||||
this.regs = new Uint8Array(0x20);
|
||||
@ -59,6 +66,9 @@ class GTIA {
|
||||
this.an = 0;
|
||||
this.rgb = 0;
|
||||
this.pmcol = 0;
|
||||
this.gtiacol = 0;
|
||||
this.gtiacol2 = 0;
|
||||
this.hbias = HOFFSET;
|
||||
}
|
||||
reset() {
|
||||
this.regs.fill(0);
|
||||
@ -74,6 +84,17 @@ class GTIA {
|
||||
}
|
||||
setReg(a, v) {
|
||||
switch (a) {
|
||||
case COLPM0:
|
||||
case COLPM0 + 1:
|
||||
case COLPM0 + 2:
|
||||
case COLPM0 + 3:
|
||||
case COLPF0:
|
||||
case COLPF0 + 1:
|
||||
case COLPF0 + 2:
|
||||
case COLPF0 + 3:
|
||||
case COLBK:
|
||||
v &= 0xfe; // bit 0 unused in color regs
|
||||
break;
|
||||
case HITCLR:
|
||||
this.readregs.fill(0, 0, 16);
|
||||
return;
|
||||
@ -90,6 +111,9 @@ class GTIA {
|
||||
sync() {
|
||||
this.count = 0;
|
||||
}
|
||||
setBias(b) {
|
||||
this.hbias = HOFFSET + b;
|
||||
}
|
||||
updateGfx(h, data) {
|
||||
switch (h) {
|
||||
case 0:
|
||||
@ -108,36 +132,35 @@ class GTIA {
|
||||
}
|
||||
}
|
||||
getPlayfieldColor() {
|
||||
switch (this.an) {
|
||||
// which GTIA mode?
|
||||
switch (this.regs[PRIOR] >> 6) {
|
||||
// normal mode
|
||||
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;
|
||||
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;
|
||||
}
|
||||
break;
|
||||
// mode 9 -- 16 luminances
|
||||
case 1:
|
||||
return (this.regs[COLBK] & 0xf0) | (this.gtiacol & 0xf) | 0x100;
|
||||
// mode 10 -- 9 colors from registers
|
||||
case 2:
|
||||
return MODE_9_LOOKUP[this.gtiacol];
|
||||
// mode 11 -- 16 hues
|
||||
case 3:
|
||||
return (this.regs[COLBK] & 0xf) | (this.gtiacol << 4) | 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];
|
||||
}
|
||||
anySpriteActive() {
|
||||
return this.shiftregs[0] | this.shiftregs[1] | this.shiftregs[2]
|
||||
| this.shiftregs[3] | this.shiftregs[4] | this.shiftregs[5]
|
||||
@ -152,6 +175,8 @@ class GTIA {
|
||||
this.pmcol = -1;
|
||||
return;
|
||||
}
|
||||
// TODO: multiple color player enable
|
||||
// TODO: gtia, hi-res mode collisions
|
||||
// compute gfx and collisions for players/missiles
|
||||
let priobias = (this.regs[PRIOR] & 15) << 4; // TODO
|
||||
let topprio = PRIOR_TABLE[(this.an & 7) + 8 + priobias];
|
||||
@ -183,7 +208,7 @@ class GTIA {
|
||||
this.readregs[M0PF + i] |= 1 << pfset;
|
||||
}
|
||||
this.readregs[M0PL + i] |= ppmask;
|
||||
let prio = PRIOR_TABLE[i + 4 + priobias];
|
||||
let prio = PRIOR_TABLE[i + priobias];
|
||||
if (prio < topprio) {
|
||||
topobj = i + 4;
|
||||
topprio = prio;
|
||||
@ -202,7 +227,7 @@ class GTIA {
|
||||
shiftObject(i) {
|
||||
let bit = (this.shiftregs[i] & 0x80000000) != 0;
|
||||
this.shiftregs[i] <<= 1;
|
||||
if (this.regs[HPOSP0 + i] - 1 == this.count) {
|
||||
if (this.regs[HPOSP0 + i] + this.hbias == this.count) {
|
||||
this.triggerObject(i);
|
||||
}
|
||||
return bit;
|
||||
@ -236,6 +261,28 @@ class GTIA {
|
||||
data <<= 16;
|
||||
this.shiftregs[i] = data;
|
||||
}
|
||||
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];
|
||||
// TODO: hires modes return 8, so other modes wont work
|
||||
this.gtiacol2 = (this.gtiacol2 << 1) | (this.an >> 3);
|
||||
}
|
||||
clockPulse4() {
|
||||
// latch GTIA buffer
|
||||
this.gtiacol = this.gtiacol2 & 15;
|
||||
}
|
||||
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`;
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
import{J as t}from"./chunk-NVSDMXBL.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-GEFYO6SW.js.map
|
||||
import{J as t}from"./chunk-LKR3N7UH.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-N6722VSY.js.map
|
@ -1,4 +1,4 @@
|
||||
import{c as r}from"./chunk-CVTTXXJK.js";import{K as x,d as U,e as Q}from"./chunk-WI6A3Z5X.js";import{J as T,O as t,V as A,Y as H,k as E,l as O}from"./chunk-NVSDMXBL.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-QCL6HLHP.js";import{K as x,d as U,e as Q}from"./chunk-I4VYBHZZ.js";import{J as T,O as t,V as A,Y as H,k as E,l as O}from"./chunk-LKR3N7UH.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-LMLP43VJ.js.map
|
||||
//# sourceMappingURL=msx-LIM4CLBZ.js.map
|
@ -1,2 +1,2 @@
|
||||
import{K as h,c as f,q as m}from"./chunk-WI6A3Z5X.js";import{$ as i,J as a,V as t,W as o,Y as c}from"./chunk-NVSDMXBL.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-BDYFFGS5.js.map
|
||||
import{K as h,c as f,q as m}from"./chunk-I4VYBHZZ.js";import{$ as i,J as a,V as t,W as o,Y as c}from"./chunk-LKR3N7UH.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-TYBGUZ4Q.js.map
|
File diff suppressed because one or more lines are too long
@ -213,6 +213,7 @@ class Atari5200Platform extends Atari800Platform {
|
||||
}
|
||||
///
|
||||
emu_1.PLATFORMS['atari8-800.xlmame'] = Atari800MAMEPlatform;
|
||||
emu_1.PLATFORMS['atari8-800xl.mame'] = Atari800MAMEPlatform; // for dithertron
|
||||
emu_1.PLATFORMS['atari8-5200.mame'] = Atari5200MAMEPlatform;
|
||||
emu_1.PLATFORMS['atari8-800.xlwasm'] = Atari800WASMPlatform;
|
||||
emu_1.PLATFORMS['atari8-800'] = Atari800Platform;
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
import{a as g,b as p,c as M}from"./chunk-CVTTXXJK.js";import{K as o,d,f as l}from"./chunk-WI6A3Z5X.js";import{$ as i,J as a,V as t,Y as x,_ as h,g as f}from"./chunk-NVSDMXBL.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)+`
|
||||
import{a as g,b as p,c as M}from"./chunk-QCL6HLHP.js";import{K as o,d,f as l}from"./chunk-I4VYBHZZ.js";import{$ as i,J as a,V as t,Y as x,_ as h,g as f}from"./chunk-LKR3N7UH.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-EQPBGSCP.js.map
|
||||
//# sourceMappingURL=sms-CDN3HUI3.js.map
|
@ -1,2 +1,2 @@
|
||||
import{E as w}from"./chunk-WI6A3Z5X.js";import{$ as d,J as v,P as x,R as p,T as C,_ as P}from"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";var y=[],A=function(R){this.__proto__=new w;var t,i,o,f,l,u,c,m,s,M=0,a=0,r,g=14318e3/8,b=1789750/1280,D=g/60,S=g/b;this.getPresets=function(){return y},this.start=function(){i=new p(1024),f={read:d([[0,16383,16383,function(e){return o?o[e]:null}],[16384,24575,1023,function(e){return i.mem[e]}]]),write:d([[16384,24575,1023,function(e,n){i.mem[e]=n}]]),isContended:function(){return!1}},l={read:function(e){if(e&64){if(a==15){var n=t.getTstates()/S&1;return n?255:0}return r.readRegister(a)&255}return 0},write:function(e,n){e&128&&(a=n&15),e&64&&r.writeRegisterAY(a,n&255)}},this.readAddress=f.read,t=this.newCPU(f,l),r=new PsgDeviceChannel,c=new MasterChannel,r.setMode(PsgDeviceChannel.MODE_SIGNED),r.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),c.addChannel(r),u=new AudioLooper(512),u.setChannel(c),m=new x(R,256,256),m.create(),m.setKeyboardEvents(function(e,n,T){var h=e-49;h>=0&&T&1&&(r.writeRegister(14,h),r.writeRegister(15,128),t.setIFF1(1),t.requestInterrupt(56))}),s=new C(60,()=>{if(!!this.isRunning()){var e=this.getDebugCallback(),n=t.getTstates()+D;if(e)for(;t.getTstates()<n;)e&&e()&&(e=null),t.runFrame(t.getTstates()+1);else t.runFrame(n)}})},this.loadROM=function(e,n){o=P(n,16384),t.reset()},this.loadState=function(e){t.loadState(e.c),i.mem.set(e.b)},this.saveState=function(){return{c:this.getCPUState(),b:i.mem.slice(0)}},this.getCPUState=function(){return t.saveState()},this.isRunning=function(){return s&&s.isRunning()},this.pause=function(){s.stop()},this.resume=function(){s.start(),u.activate()},this.reset=function(){t.reset(),this.getDebugCallback()||t.setTstates(0)}};v.sound_konami=A;
|
||||
//# sourceMappingURL=sound_konami-GX7VWWR5.js.map
|
||||
import{E as w}from"./chunk-I4VYBHZZ.js";import{$ as d,J as v,P as x,R as p,T as C,_ as P}from"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";var y=[],A=function(R){this.__proto__=new w;var t,i,o,f,l,u,c,m,s,M=0,a=0,r,g=14318e3/8,b=1789750/1280,D=g/60,S=g/b;this.getPresets=function(){return y},this.start=function(){i=new p(1024),f={read:d([[0,16383,16383,function(e){return o?o[e]:null}],[16384,24575,1023,function(e){return i.mem[e]}]]),write:d([[16384,24575,1023,function(e,n){i.mem[e]=n}]]),isContended:function(){return!1}},l={read:function(e){if(e&64){if(a==15){var n=t.getTstates()/S&1;return n?255:0}return r.readRegister(a)&255}return 0},write:function(e,n){e&128&&(a=n&15),e&64&&r.writeRegisterAY(a,n&255)}},this.readAddress=f.read,t=this.newCPU(f,l),r=new PsgDeviceChannel,c=new MasterChannel,r.setMode(PsgDeviceChannel.MODE_SIGNED),r.setDevice(PsgDeviceChannel.DEVICE_AY_3_8910),c.addChannel(r),u=new AudioLooper(512),u.setChannel(c),m=new x(R,256,256),m.create(),m.setKeyboardEvents(function(e,n,T){var h=e-49;h>=0&&T&1&&(r.writeRegister(14,h),r.writeRegister(15,128),t.setIFF1(1),t.requestInterrupt(56))}),s=new C(60,()=>{if(!!this.isRunning()){var e=this.getDebugCallback(),n=t.getTstates()+D;if(e)for(;t.getTstates()<n;)e&&e()&&(e=null),t.runFrame(t.getTstates()+1);else t.runFrame(n)}})},this.loadROM=function(e,n){o=P(n,16384),t.reset()},this.loadState=function(e){t.loadState(e.c),i.mem.set(e.b)},this.saveState=function(){return{c:this.getCPUState(),b:i.mem.slice(0)}},this.getCPUState=function(){return t.saveState()},this.isRunning=function(){return s&&s.isRunning()},this.pause=function(){s.stop()},this.resume=function(){s.start(),u.activate()},this.reset=function(){t.reset(),this.getDebugCallback()||t.setTstates(0)}};v.sound_konami=A;
|
||||
//# sourceMappingURL=sound_konami-GYOTCVSY.js.map
|
@ -1,2 +1,2 @@
|
||||
import{K as m,c as n,p as o}from"./chunk-WI6A3Z5X.js";import{$ as s,J as i}from"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";var d=[{id:"swave.c",name:"Wavetable Synth"}],c=class extends o{constructor(){super();this.cpuFrequency=18432e3/6;this.cpuCyclesPerFrame=this.cpuFrequency/60;this.cpuAudioFactor=32;this.canvasWidth=256;this.numVisibleScanlines=256;this.defaultROMSize=16384;this.sampleRate=this.cpuFrequency;this.overscan=!0;this.ram=new Uint8Array(1024);this.command=0;this.dac=0;this.dac_float=0;this.xpos=0;this.read=s([[0,16383,16383,e=>this.rom&&this.rom[e]],[16384,32767,1023,e=>this.ram[e]]]);this.write=s([[16384,32767,1023,(e,t)=>{this.ram[e]=t}]]);this.cpu=new n,this.connectCPUMemoryBus(this),this.connectCPUIOBus({read:e=>this.command&255,write:(e,t)=>{let r=this.dac=t&255;this.dac_float=(r&128?-256+r:r)/128}})}advanceFrame(e){this.pixels&&this.pixels.fill(0);let t=this.cpuCyclesPerFrame;for(var r=0;r<t&&!(e&&e());)r+=this.advanceCPU();return r}advanceCPU(){var e=super.advanceCPU();return this.audio&&this.audio.feedSample(this.dac_float,e),this.pixels&&!this.cpu.isHalted()&&(this.pixels[(this.xpos>>8&255)+(255-this.dac<<8)]=4281597747,this.xpos=this.xpos+e&16777215),e}setKeyInput(e,t,r){var a=e-49;a>=0&&r&1&&(this.command=a&255,this.cpu.reset())}},f=class extends m{newMachine(){return new c}getPresets(){return d}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}};i["sound_williams-z80"]=f;export{f as WilliamsSoundPlatform};
|
||||
//# sourceMappingURL=sound_williams-Y5AC2FQ2.js.map
|
||||
import{K as m,c as n,p as o}from"./chunk-I4VYBHZZ.js";import{$ as s,J as i}from"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";var d=[{id:"swave.c",name:"Wavetable Synth"}],c=class extends o{constructor(){super();this.cpuFrequency=18432e3/6;this.cpuCyclesPerFrame=this.cpuFrequency/60;this.cpuAudioFactor=32;this.canvasWidth=256;this.numVisibleScanlines=256;this.defaultROMSize=16384;this.sampleRate=this.cpuFrequency;this.overscan=!0;this.ram=new Uint8Array(1024);this.command=0;this.dac=0;this.dac_float=0;this.xpos=0;this.read=s([[0,16383,16383,e=>this.rom&&this.rom[e]],[16384,32767,1023,e=>this.ram[e]]]);this.write=s([[16384,32767,1023,(e,t)=>{this.ram[e]=t}]]);this.cpu=new n,this.connectCPUMemoryBus(this),this.connectCPUIOBus({read:e=>this.command&255,write:(e,t)=>{let r=this.dac=t&255;this.dac_float=(r&128?-256+r:r)/128}})}advanceFrame(e){this.pixels&&this.pixels.fill(0);let t=this.cpuCyclesPerFrame;for(var r=0;r<t&&!(e&&e());)r+=this.advanceCPU();return r}advanceCPU(){var e=super.advanceCPU();return this.audio&&this.audio.feedSample(this.dac_float,e),this.pixels&&!this.cpu.isHalted()&&(this.pixels[(this.xpos>>8&255)+(255-this.dac<<8)]=4281597747,this.xpos=this.xpos+e&16777215),e}setKeyInput(e,t,r){var a=e-49;a>=0&&r&1&&(this.command=a&255,this.cpu.reset())}},f=class extends m{newMachine(){return new c}getPresets(){return d}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}};i["sound_williams-z80"]=f;export{f as WilliamsSoundPlatform};
|
||||
//# sourceMappingURL=sound_williams-GYMDP5GJ.js.map
|
@ -1,2 +1,2 @@
|
||||
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r,t as s,u as t,v as u,w as v,x as w}from"./chunk-G4KJLXRQ.js";import"./chunk-M72QJ5SI.js";import"./chunk-5SHCNQ2O.js";import"./chunk-KCZ4SZHW.js";import"./chunk-WI6A3Z5X.js";import"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";export{l as clearBreakpoint,h as compparams,f as current_project,u as emulationHalted,p as getPlatformAndRepo,t as getSaveState,s as getTestOutput,n as haltEmulation,w as highlightSearch,i as lastDebugState,e as platform,b as platform_id,g as projectWindows,a as qs,v as reloadWorkspaceFile,d as repo_id,k as runToPC,m as setFrameRateUI,r as setTestInput,j as setupBreakpoint,o as setupSplits,q as startUI,c as store_id};
|
||||
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r,t as s,u as t,v as u,w as v,x as w}from"./chunk-EYNTOVQZ.js";import"./chunk-M72QJ5SI.js";import"./chunk-5SHCNQ2O.js";import"./chunk-4XVUF2S5.js";import"./chunk-I4VYBHZZ.js";import"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";export{l as clearBreakpoint,h as compparams,f as current_project,u as emulationHalted,p as getPlatformAndRepo,t as getSaveState,s as getTestOutput,n as haltEmulation,w as highlightSearch,i as lastDebugState,e as platform,b as platform_id,g as projectWindows,a as qs,v as reloadWorkspaceFile,d as repo_id,k as runToPC,m as setFrameRateUI,r as setTestInput,j as setupBreakpoint,o as setupSplits,q as startUI,c as store_id};
|
||||
//# sourceMappingURL=ui.js.map
|
||||
|
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
@ -1,3 +1,3 @@
|
||||
import{a as u}from"./chunk-MXBOAY2G.js";import{C as x,J as f,r as p,z as l}from"./chunk-WI6A3Z5X.js";import{J as a,O as o,g as c}from"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";var m=class extends p{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.videoOffsetBytes=-24*4;this.joymask0=0;this.joymask1=0}getBIOSLength(){return 20480}loadBIOS(t){super.loadBIOS(t)}reset(){super.reset();for(var t=0;t<128;t++)this.setKeyInput(t,0,o.KeyUp);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==4097&&(this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("prgstart",c(this.prgstart))),this.prgstart<32768){this.exports.machine_exec(this.sys,4e5);var r="SYS "+this.prgstart+"\r";console.log(r);for(var e=0;e<r.length;e++){var s=r.charCodeAt(e);this.exports.machine_exec(this.sys,2e4),this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_down(this.sys,s),this.exports.machine_exec(this.sys,2e4),this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_up(this.sys,s)}for(var e=0;e<1e4&&this.getPC()!=this.prgstart;e++);}else{this.exports.machine_exec(this.sys,100);for(var i=this.romarr[4]+this.romarr[5]*256,e=0;e<15e4&&this.getPC()!=i;e++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var r=this.getRasterY(),e=Math.floor((this.numTotalScanlines-r)*19656/this.numTotalScanlines),s=this.probe!=null;return s&&this.exports.machine_reset_probe_buffer(),e=super.advanceFrameClock(t,e),s&&this.copyProbeData(),e}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,r=t[2]+(t[3]<<8);return{PC:r,SP:t[9],A:t[6],X:t[7],Y:t[8],C:t[10]&1,Z:t[10]&2,I:t[10]&4,D:t[10]&8,V:t[10]&64,N:t[10]&128,o:this.readConst(r)}}saveState(){return this.exports.machine_save_state(this.sys,this.stateptr),{c:this.getCPUState(),state:this.statearr.slice(0),ram:this.statearr.slice(18640,18640+512)}}loadState(t){this.statearr.set(t.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:232,height:272,overscan:!0,videoFrequency:50,aspect:1.5}}setKeyInput(t,r,e){if(!(t==16||t==17||t==18||t==224)){var s=0,i=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==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),e&o.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=s,this.joymask1|=i):e&o.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~s,this.joymask1&=~i),this.exports.vic20_joystick(this.sys,this.joymask0,this.joymask1)}}};var g=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"siegegame.c",name:"Siege Game (C)"}],d={main:[{name:"RAM",start:0,size:1024,type:"ram"},{name:"RAM",start:4096,size:4096,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:49152,size:8192,type:"rom"},{name:"I/O 1",start:36864,size:1024,type:"io"},{name:"Color RAM",start:37888,size:1024,type:"io"},{name:"I/O 2",start:38912,size:1024,type:"io"},{name:"I/O 3",start:39936,size:1024,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},n=class extends f{newMachine(){return new m("vic20")}getPresets(){return g}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return d}showHelp(){window.open("https://8bitworkshop.com/docs/platforms/vic20/","_help")}getROMExtension(t){return t&&t[0]==1&&t[1]==8?".prg":".bin"}},_=class extends u{constructor(){super(...arguments);this.getToolForFilename=l;this.getOpcodeMetadata=x}getPresets(){return g}getDefaultExtension(){return".c"}loadROM(t,r){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"vic20.zip",cfgfile:"vic20.cfg",driver:"vic20",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(r),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1
|
||||
import{a as u}from"./chunk-SB4FEYXH.js";import{C as x,J as f,r as p,z as l}from"./chunk-I4VYBHZZ.js";import{J as a,O as o,g as c}from"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";var m=class extends p{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.videoOffsetBytes=-24*4;this.joymask0=0;this.joymask1=0}getBIOSLength(){return 20480}loadBIOS(t){super.loadBIOS(t)}reset(){super.reset();for(var t=0;t<128;t++)this.setKeyInput(t,0,o.KeyUp);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==4097&&(this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("prgstart",c(this.prgstart))),this.prgstart<32768){this.exports.machine_exec(this.sys,4e5);var r="SYS "+this.prgstart+"\r";console.log(r);for(var e=0;e<r.length;e++){var s=r.charCodeAt(e);this.exports.machine_exec(this.sys,2e4),this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_down(this.sys,s),this.exports.machine_exec(this.sys,2e4),this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_up(this.sys,s)}for(var e=0;e<1e4&&this.getPC()!=this.prgstart;e++);}else{this.exports.machine_exec(this.sys,100);for(var i=this.romarr[4]+this.romarr[5]*256,e=0;e<15e4&&this.getPC()!=i;e++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var r=this.getRasterY(),e=Math.floor((this.numTotalScanlines-r)*19656/this.numTotalScanlines),s=this.probe!=null;return s&&this.exports.machine_reset_probe_buffer(),e=super.advanceFrameClock(t,e),s&&this.copyProbeData(),e}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,r=t[2]+(t[3]<<8);return{PC:r,SP:t[9],A:t[6],X:t[7],Y:t[8],C:t[10]&1,Z:t[10]&2,I:t[10]&4,D:t[10]&8,V:t[10]&64,N:t[10]&128,o:this.readConst(r)}}saveState(){return this.exports.machine_save_state(this.sys,this.stateptr),{c:this.getCPUState(),state:this.statearr.slice(0),ram:this.statearr.slice(18640,18640+512)}}loadState(t){this.statearr.set(t.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:232,height:272,overscan:!0,videoFrequency:50,aspect:1.5}}setKeyInput(t,r,e){if(!(t==16||t==17||t==18||t==224)){var s=0,i=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==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),e&o.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=s,this.joymask1|=i):e&o.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~s,this.joymask1&=~i),this.exports.vic20_joystick(this.sys,this.joymask0,this.joymask1)}}};var g=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"siegegame.c",name:"Siege Game (C)"}],d={main:[{name:"RAM",start:0,size:1024,type:"ram"},{name:"RAM",start:4096,size:4096,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:49152,size:8192,type:"rom"},{name:"I/O 1",start:36864,size:1024,type:"io"},{name:"Color RAM",start:37888,size:1024,type:"io"},{name:"I/O 2",start:38912,size:1024,type:"io"},{name:"I/O 3",start:39936,size:1024,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},n=class extends f{newMachine(){return new m("vic20")}getPresets(){return g}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return d}showHelp(){window.open("https://8bitworkshop.com/docs/platforms/vic20/","_help")}getROMExtension(t){return t&&t[0]==1&&t[1]==8?".prg":".bin"}},_=class extends u{constructor(){super(...arguments);this.getToolForFilename=l;this.getOpcodeMetadata=x}getPresets(){return g}getDefaultExtension(){return".c"}loadROM(t,r){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"vic20.zip",cfgfile:"vic20.cfg",driver:"vic20",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(r),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1
|
||||
`],preInit:function(s){}});else{this.loadROMFile(r),this.loadRegion(":quickload",r);var e=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",e)}}start(){}getMemoryMap(){return d}};a.vic20=n;a["vic20.wasm"]=n;a["vic20.mame"]=_;
|
||||
//# sourceMappingURL=vic20-2OAVMPVR.js.map
|
||||
//# sourceMappingURL=vic20-Z3EPRJVL.js.map
|
@ -1,2 +1,2 @@
|
||||
import{K as A,c as d,d as y,e as S,k as v,q as g}from"./chunk-WI6A3Z5X.js";import{$ as r,J as p,V as t,W as u,Y as h}from"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";var L=h([[t.A,2,-32],[t.B,2,-64],[t.LEFT,1,-16],[t.RIGHT,1,-32],[t.UP,1,-64],[t.DOWN,1,-128],[t.START,2,-16],[t.P2_START,3,-32],[t.SELECT,3,8]]),o=15468e3,w=262,K=224;var I=240,M=o/8,P=o/3/w,j=P/328,U=M/P,V=500,Z=M/(2*V),T=2,_=60*w,c=class extends g{constructor(){super();this.cpuFrequency=o/8;this.canvasWidth=256;this.numTotalScanlines=262;this.numVisibleScanlines=224;this.defaultROMSize=16448;this.sampleRate=_*T;this.cpuCyclesPerLine=U|0;this.rotate=-90;this.cpu=new d;this.ram=new Uint8Array(4096);this.read=r([[0,32767,16383,e=>this.rom?this.rom[e]:null],[32768,65535,4095,e=>this.ram[e]]]);this.write=r([[32768,65535,4095,(e,s)=>{this.ram[e]=s}]]);this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.inputs.set([255,255,255,255^8]),this.display=new b,this.handler=u(this.inputs,L,this.getKeyboardFunction()),this.psg=new S(new y),this.audioadapter=new v(this.psg.psg,T,this.sampleRate)}getKeyboardFunction(){return e=>{e.index==3&&e.mask==8&&(this.cpu.reset(),console.log("coin inserted"),console.log(this.inputs))}}newIOBus(){return{read:e=>this.inputs[e&3],write:(e,s)=>{e&1&&this.psg.selectRegister(s&15),e&2&&this.psg.setData(s),e&8,e&64&&(this.display.palbank=s&3)}}}reset(){super.reset(),this.psg.reset()}startScanline(){this.inputs[2]&=~8,this.inputs[2]|=(this.frameCycles/Z&1)<<3,this.scanline==K&&(this.inputs[1]|=8),this.scanline==I&&(this.inputs[1]&=~8),this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){this.display.drawScanline(this.ram,this.pixels,this.scanline)}loadROM(e){super.loadROM(e),e.length>=16416&&(e[16384]||e[16415])&&(this.display.colorprom=e.slice(16384,16416))}loadState(e){super.loadState(e),this.display.palbank=e.pb}saveState(){var e=super.saveState();return e.pb=this.display.palbank,e}},b=class{constructor(){this.palbank=0;this.palette=[4278190080,4278190335,4278255360,4278255615,4294901760,4294902015,4294967040,4294967295];this.colorprom=[224,96,32,96,192,96,64,192,32,64,96,128,160,192,224,14,224,224,224,224,96,96,96,96,224,224,224,224,224,224,224,224]}drawScanline(e,s,i){if(!(i>=224))for(var F=i*256,x=F,k=i>>3<<5,C=i&7,a=0;a<32;a++)for(var m=e[k+a],D=e[2048+(m<<3)+C],l=(m>>5)+(this.palbank<<3),E=this.palette[this.colorprom[l]>>1&7],O=this.palette[this.colorprom[l]>>5&7],n=0;n<8;n++){var B=128>>n;s[x]=D&B?O:E,x++}}};var q=[{id:"minimal.c",name:"Minimal Example"},{id:"hello.c",name:"Hello World"},{id:"gfxtest.c",name:"Graphics Test"},{id:"soundtest.c",name:"Sound Test"},{id:"snake1.c",name:"Siege Game (Prototype)"},{id:"snake2.c",name:"Siege Game (Full)"},{id:"music.c",name:"Music Player"}],R=class extends A{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Cell RAM",start:57344,size:32*32,type:"ram"},{name:"Tile RAM",start:59392,size:256*8,type:"ram"}]}}}newMachine(){return new c}getPresets(){return q}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}};p.vicdual=R;
|
||||
//# sourceMappingURL=vicdual-V4SXZGGG.js.map
|
||||
import{K as A,c as d,d as y,e as S,k as v,q as g}from"./chunk-I4VYBHZZ.js";import{$ as r,J as p,V as t,W as u,Y as h}from"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";var L=h([[t.A,2,-32],[t.B,2,-64],[t.LEFT,1,-16],[t.RIGHT,1,-32],[t.UP,1,-64],[t.DOWN,1,-128],[t.START,2,-16],[t.P2_START,3,-32],[t.SELECT,3,8]]),o=15468e3,w=262,K=224;var I=240,M=o/8,P=o/3/w,j=P/328,U=M/P,V=500,Z=M/(2*V),T=2,_=60*w,c=class extends g{constructor(){super();this.cpuFrequency=o/8;this.canvasWidth=256;this.numTotalScanlines=262;this.numVisibleScanlines=224;this.defaultROMSize=16448;this.sampleRate=_*T;this.cpuCyclesPerLine=U|0;this.rotate=-90;this.cpu=new d;this.ram=new Uint8Array(4096);this.read=r([[0,32767,16383,e=>this.rom?this.rom[e]:null],[32768,65535,4095,e=>this.ram[e]]]);this.write=r([[32768,65535,4095,(e,s)=>{this.ram[e]=s}]]);this.connectCPUMemoryBus(this),this.connectCPUIOBus(this.newIOBus()),this.inputs.set([255,255,255,255^8]),this.display=new b,this.handler=u(this.inputs,L,this.getKeyboardFunction()),this.psg=new S(new y),this.audioadapter=new v(this.psg.psg,T,this.sampleRate)}getKeyboardFunction(){return e=>{e.index==3&&e.mask==8&&(this.cpu.reset(),console.log("coin inserted"),console.log(this.inputs))}}newIOBus(){return{read:e=>this.inputs[e&3],write:(e,s)=>{e&1&&this.psg.selectRegister(s&15),e&2&&this.psg.setData(s),e&8,e&64&&(this.display.palbank=s&3)}}}reset(){super.reset(),this.psg.reset()}startScanline(){this.inputs[2]&=~8,this.inputs[2]|=(this.frameCycles/Z&1)<<3,this.scanline==K&&(this.inputs[1]|=8),this.scanline==I&&(this.inputs[1]&=~8),this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){this.display.drawScanline(this.ram,this.pixels,this.scanline)}loadROM(e){super.loadROM(e),e.length>=16416&&(e[16384]||e[16415])&&(this.display.colorprom=e.slice(16384,16416))}loadState(e){super.loadState(e),this.display.palbank=e.pb}saveState(){var e=super.saveState();return e.pb=this.display.palbank,e}},b=class{constructor(){this.palbank=0;this.palette=[4278190080,4278190335,4278255360,4278255615,4294901760,4294902015,4294967040,4294967295];this.colorprom=[224,96,32,96,192,96,64,192,32,64,96,128,160,192,224,14,224,224,224,224,96,96,96,96,224,224,224,224,224,224,224,224]}drawScanline(e,s,i){if(!(i>=224))for(var F=i*256,x=F,k=i>>3<<5,C=i&7,a=0;a<32;a++)for(var m=e[k+a],D=e[2048+(m<<3)+C],l=(m>>5)+(this.palbank<<3),E=this.palette[this.colorprom[l]>>1&7],O=this.palette[this.colorprom[l]>>5&7],n=0;n<8;n++){var B=128>>n;s[x]=D&B?O:E,x++}}};var q=[{id:"minimal.c",name:"Minimal Example"},{id:"hello.c",name:"Hello World"},{id:"gfxtest.c",name:"Graphics Test"},{id:"soundtest.c",name:"Sound Test"},{id:"snake1.c",name:"Siege Game (Prototype)"},{id:"snake2.c",name:"Siege Game (Full)"},{id:"music.c",name:"Music Player"}],R=class extends A{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Cell RAM",start:57344,size:32*32,type:"ram"},{name:"Tile RAM",start:59392,size:256*8,type:"ram"}]}}}newMachine(){return new c}getPresets(){return q}getDefaultExtension(){return".c"}readAddress(e){return this.machine.read(e)}};p.vicdual=R;
|
||||
//# sourceMappingURL=vicdual-EASGGCLG.js.map
|
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
import{D as i,J as n,P as o}from"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";var u=[{id:"hello.asm",name:"Hello World (ASM)"},{id:"mandelg.asm",name:"Mandelbrot (ASM)"},{id:"snake.c",name:"Snake Game (C)"}],m=class{constructor(e){this.buffer=e,this.data=new DataView(this.buffer),this.sectorSize=512,this.numSectors=this.buffer.byteLength/this.sectorSize}readSectors(e,t,s){for(var a=this.sectorSize*e,r=0;r<t.length;r++)t[r]=this.data.getUint8(r+a);s(null)}writeSectors(e,t,s){for(var a=this.sectorSize*e,r=0;r<t.length;r++)this.data.setUint8(r+a,t[r]);s(null)}},l=class{constructor(e){this.mainElement=e}getToolForFilename(e){return e.endsWith(".c")?"smlrc":"yasm"}getDefaultExtension(){return".asm"}getPresets(){return u}pause(){this.isRunning()&&this.emulator.stop()}resume(){this.isRunning()||this.emulator.run()}reset(){this.emulator.restart()}isRunning(){return this.emulator.is_running()}loadROM(e,t){this.fda_fs.writeFile("main.exe",t,{encoding:"binary"},s=>{if(s)throw s;this.reset()})}async start(){await i("./lib/libv86.js"),await i("./lib/fatfs.js"),this.video=new o(this.mainElement,640,480,{overscan:!1}),this.video.create();var e=document.createElement("div");return e.classList.add("pc-console"),e.classList.add("emuvideo"),this.mainElement.appendChild(e),this.console_div=e,this.resize(),this.emulator=new V86Starter({memory_size:2*1024*1024,vga_memory_size:1*1024*1024,screen_container:this.mainElement,bios:{url:"./res/seabios.bin"},vga_bios:{url:"./res/vgabios.bin"},fda:{url:"./res/freedos722.img",size:737280},autostart:!0}),new Promise((t,s)=>{this.emulator.add_listener("emulator-ready",()=>{console.log("emulator ready"),console.log(this.emulator),this.v86=this.emulator.v86,this.fda_image=this.v86.cpu.devices.fdc.fda_image,this.fda_driver=new m(this.fda_image.buffer),this.fda_fs=fatfs.createFileSystem(this.fda_driver),t()})})}resize(){var e=$(this.console_div).width()*1.7/80;$(this.console_div).css("font-size",e+"px")}getDebugTree(){return this.v86}readAddress(e){return this.v86.cpu.mem8[e]}getMemoryMap(){return{main:[{name:"Real Mode IVT",start:0,size:1024,type:"ram"},{name:"BIOS Data Area",start:1024,size:256,type:"ram"},{name:"User RAM",start:1280,size:524288-1280,type:"ram"},{name:"Extended BIOS Data Area",start:524288,size:131072,type:"ram"},{name:"Video RAM",start:655360,size:131072,type:"ram"},{name:"Video BIOS",start:786432,size:32768,type:"rom"},{name:"BIOS Expansions",start:819200,size:163840,type:"rom"},{name:"PC BIOS",start:983040,size:65536,type:"rom"}]}}getROMExtension(e){return".exe"}};n.x86=l;
|
||||
//# sourceMappingURL=x86-4POE2GBY.js.map
|
||||
import{D as i,J as n,P as o}from"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";var u=[{id:"hello.asm",name:"Hello World (ASM)"},{id:"mandelg.asm",name:"Mandelbrot (ASM)"},{id:"snake.c",name:"Snake Game (C)"}],m=class{constructor(e){this.buffer=e,this.data=new DataView(this.buffer),this.sectorSize=512,this.numSectors=this.buffer.byteLength/this.sectorSize}readSectors(e,t,s){for(var a=this.sectorSize*e,r=0;r<t.length;r++)t[r]=this.data.getUint8(r+a);s(null)}writeSectors(e,t,s){for(var a=this.sectorSize*e,r=0;r<t.length;r++)this.data.setUint8(r+a,t[r]);s(null)}},l=class{constructor(e){this.mainElement=e}getToolForFilename(e){return e.endsWith(".c")?"smlrc":"yasm"}getDefaultExtension(){return".asm"}getPresets(){return u}pause(){this.isRunning()&&this.emulator.stop()}resume(){this.isRunning()||this.emulator.run()}reset(){this.emulator.restart()}isRunning(){return this.emulator.is_running()}loadROM(e,t){this.fda_fs.writeFile("main.exe",t,{encoding:"binary"},s=>{if(s)throw s;this.reset()})}async start(){await i("./lib/libv86.js"),await i("./lib/fatfs.js"),this.video=new o(this.mainElement,640,480,{overscan:!1}),this.video.create();var e=document.createElement("div");return e.classList.add("pc-console"),e.classList.add("emuvideo"),this.mainElement.appendChild(e),this.console_div=e,this.resize(),this.emulator=new V86Starter({memory_size:2*1024*1024,vga_memory_size:1*1024*1024,screen_container:this.mainElement,bios:{url:"./res/seabios.bin"},vga_bios:{url:"./res/vgabios.bin"},fda:{url:"./res/freedos722.img",size:737280},autostart:!0}),new Promise((t,s)=>{this.emulator.add_listener("emulator-ready",()=>{console.log("emulator ready"),console.log(this.emulator),this.v86=this.emulator.v86,this.fda_image=this.v86.cpu.devices.fdc.fda_image,this.fda_driver=new m(this.fda_image.buffer),this.fda_fs=fatfs.createFileSystem(this.fda_driver),t()})})}resize(){var e=$(this.console_div).width()*1.7/80;$(this.console_div).css("font-size",e+"px")}getDebugTree(){return this.v86}readAddress(e){return this.v86.cpu.mem8[e]}getMemoryMap(){return{main:[{name:"Real Mode IVT",start:0,size:1024,type:"ram"},{name:"BIOS Data Area",start:1024,size:256,type:"ram"},{name:"User RAM",start:1280,size:524288-1280,type:"ram"},{name:"Extended BIOS Data Area",start:524288,size:131072,type:"ram"},{name:"Video RAM",start:655360,size:131072,type:"ram"},{name:"Video BIOS",start:786432,size:32768,type:"rom"},{name:"BIOS Expansions",start:819200,size:163840,type:"rom"},{name:"PC BIOS",start:983040,size:65536,type:"rom"}]}}getROMExtension(e){return".exe"}};n.x86=l;
|
||||
//# sourceMappingURL=x86-MZBWUV6F.js.map
|
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
||||
import{K as p,r as c}from"./chunk-WI6A3Z5X.js";import{J as n,O as i}from"./chunk-NVSDMXBL.js";import"./chunk-5XVCUSSZ.js";var o=class extends c{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=224;this.joymask0=0}reset(){super.reset(),this.exports.machine_exec(this.sys,2e6),this.romptr&&this.romlen&&this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);for(var t=0;t<128;t++)this.setKeyInput(t,0,i.KeyUp)}advanceFrame(t){var a=this.probe!=null;a&&this.exports.machine_reset_probe_buffer();var r=super.advanceFrameClock(t,Math.floor(35e5/50));return a&&this.copyProbeData(),r}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,a=t[9]+(t[8]<<8),r=t[10]+(t[11]<<8),e=t[12]+(t[13]<<8),s=t[14]+(t[15]<<8),x=t[24]+(t[25]<<8),l=t[26]+(t[27]<<8),d=t[28]+(t[29]<<8),m=t[34]+(t[35]<<8),u=t[36]+(t[37]<<8);return{PC:m,SP:x,AF:a,BC:s,DE:e,HL:r,IX:d,IY:l,IR:u,o:this.readConst(m)}}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:320,height:256,overscan:!0,videoFrequency:50}}setKeyInput(t,a,r){if(!(t==16||t==17||t==18||t==224)){var e=0,s=0;t==37&&(t=8,e=4),t==38&&(t=11,e=1),t==39&&(t=9,e=8),t==40&&(t=10,e=2),t==32&&(e=16),t==65&&(t=65,s=4),t==87&&(t=87,s=1),t==68&&(t=68,s=8),t==83&&(t=83,s=2),t==69&&(s=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),r&i.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=e):r&i.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~e),this.exports.zx_joystick(this.sys,this.joymask0,0)}}};var M=[{id:"hello.asm",name:"Hello World (ASM)"},{id:"bios.c",name:"BIOS Routines (C)"},{id:"cosmic.c",name:"Cosmic Impalas (C)"}],v={main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"Screen RAM",start:16384,size:6144,type:"ram"},{name:"Color RAM",start:22528,size:768,type:"ram"},{name:"System RAM",start:23552,size:192,type:"ram"},{name:"User RAM",start:23755,size:65368-23755,type:"ram"}]},h=class extends p{newMachine(){return new o("zx")}getPresets(){return M}getDefaultExtension(){return".asm"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return v}showHelp(){window.open("https://worldofspectrum.org/faq/reference/reference.htm","_help")}};n.zx=h;
|
||||
//# sourceMappingURL=zx-UKCPXKR4.js.map
|
||||
import{K as p,r as c}from"./chunk-I4VYBHZZ.js";import{J as n,O as i}from"./chunk-LKR3N7UH.js";import"./chunk-5XVCUSSZ.js";var o=class extends c{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=224;this.joymask0=0}reset(){super.reset(),this.exports.machine_exec(this.sys,2e6),this.romptr&&this.romlen&&this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);for(var t=0;t<128;t++)this.setKeyInput(t,0,i.KeyUp)}advanceFrame(t){var a=this.probe!=null;a&&this.exports.machine_reset_probe_buffer();var r=super.advanceFrameClock(t,Math.floor(35e5/50));return a&&this.copyProbeData(),r}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,a=t[9]+(t[8]<<8),r=t[10]+(t[11]<<8),e=t[12]+(t[13]<<8),s=t[14]+(t[15]<<8),x=t[24]+(t[25]<<8),l=t[26]+(t[27]<<8),d=t[28]+(t[29]<<8),m=t[34]+(t[35]<<8),u=t[36]+(t[37]<<8);return{PC:m,SP:x,AF:a,BC:s,DE:e,HL:r,IX:d,IY:l,IR:u,o:this.readConst(m)}}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:320,height:256,overscan:!0,videoFrequency:50}}setKeyInput(t,a,r){if(!(t==16||t==17||t==18||t==224)){var e=0,s=0;t==37&&(t=8,e=4),t==38&&(t=11,e=1),t==39&&(t=9,e=8),t==40&&(t=10,e=2),t==32&&(e=16),t==65&&(t=65,s=4),t==87&&(t=87,s=1),t==68&&(t=68,s=8),t==83&&(t=83,s=2),t==69&&(s=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),r&i.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=e):r&i.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~e),this.exports.zx_joystick(this.sys,this.joymask0,0)}}};var M=[{id:"hello.asm",name:"Hello World (ASM)"},{id:"bios.c",name:"BIOS Routines (C)"},{id:"cosmic.c",name:"Cosmic Impalas (C)"}],v={main:[{name:"BIOS",start:0,size:16384,type:"rom"},{name:"Screen RAM",start:16384,size:6144,type:"ram"},{name:"Color RAM",start:22528,size:768,type:"ram"},{name:"System RAM",start:23552,size:192,type:"ram"},{name:"User RAM",start:23755,size:65368-23755,type:"ram"}]},h=class extends p{newMachine(){return new o("zx")}getPresets(){return M}getDefaultExtension(){return".asm"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return v}showHelp(){window.open("https://worldofspectrum.org/faq/reference/reference.htm","_help")}};n.zx=h;
|
||||
//# sourceMappingURL=zx-SU5PV2YL.js.map
|
@ -850,7 +850,7 @@ export abstract class BaseMachinePlatform<T extends Machine> extends BaseDebugPl
|
||||
}
|
||||
|
||||
loadROM(title, data) {
|
||||
this.machine.loadROM(data);
|
||||
this.machine.loadROM(data, title);
|
||||
this.reset();
|
||||
}
|
||||
|
||||
|
@ -308,7 +308,7 @@ export abstract class BasicMachine extends BasicHeadlessMachine implements Sampl
|
||||
abstract sampleRate : number;
|
||||
overscan : boolean = false;
|
||||
rotate : number = 0;
|
||||
aspectRatio : number = 1.0;
|
||||
aspectRatio : number;
|
||||
|
||||
pixels : Uint32Array;
|
||||
audio : SampledAudioSink;
|
||||
|
@ -746,8 +746,9 @@ export function gtia_ntsc_to_rgb(val: number) {
|
||||
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);
|
||||
if (cr) lm += 1;
|
||||
let phase = ((cr - 1) * 25 - 25) * (2 * Math.PI / 360);
|
||||
let y = 256 * bright * Math.pow(lm / 16, gamma);
|
||||
let i = crlv * Math.cos(phase);
|
||||
let q = crlv * Math.sin(phase);
|
||||
var r = y + 0.956 * i + 0.621 * q;
|
||||
|
@ -563,7 +563,15 @@ export class AddressHeatMapView extends ProbeBitmapViewBase implements ProjectVi
|
||||
this.canvas.onclick = (e) => {
|
||||
var pos = getMousePos(this.canvas, e);
|
||||
var opaddr = Math.floor(pos.x) + Math.floor(pos.y) * 256;
|
||||
runToPC(opaddr & 0xffff);
|
||||
var lastpc = -1;
|
||||
var runpc = -1;
|
||||
this.redraw( (op,addr) => {
|
||||
if (runpc < 0 && lastpc >= 0 && addr == opaddr) {
|
||||
runpc = lastpc;
|
||||
}
|
||||
if (op == ProbeFlags.EXECUTE) lastpc = addr;
|
||||
});
|
||||
if (runpc >= 0) runToPC(runpc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { newPOKEYAudio, TssChannelAdapter } from "../common/audio";
|
||||
import { EmuState, Machine } from "../common/baseplatform";
|
||||
import { Machine } from "../common/baseplatform";
|
||||
import { MOS6502 } from "../common/cpu/MOS6502";
|
||||
import { AcceptsKeyInput, AcceptsPaddleInput, AcceptsROM, BasicScanlineMachine, FrameBased, Probeable, RasterFrameBased, TrapCondition, VideoSource } from "../common/devices";
|
||||
import { dumpRAM, EmuHalt, KeyFlags, Keys, makeKeycodeMap, newAddressDecoder, newKeyboardHandler } from "../common/emu";
|
||||
import { hex, lpad, lzgmini, rgb2bgr, safe_extend, stringToByteArray } from "../common/util";
|
||||
import { AcceptsKeyInput, AcceptsPaddleInput, AcceptsROM, BasicScanlineMachine, FrameBased, Probeable, TrapCondition, VideoSource } from "../common/devices";
|
||||
import { KeyFlags, Keys, makeKeycodeMap, newAddressDecoder, newKeyboardHandler } from "../common/emu";
|
||||
import { hex } from "../common/util";
|
||||
import { BaseWASIMachine } from "../common/wasmplatform";
|
||||
import { ANTIC, MODE_SHIFT } from "./chips/antic";
|
||||
import { CONSOL, GTIA, TRIG0 } from "./chips/gtia";
|
||||
@ -46,12 +46,11 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
cpuFrequency = 1789773;
|
||||
numTotalScanlines = 262;
|
||||
cpuCyclesPerLine = 114;
|
||||
canvasWidth = 348; // TODO?
|
||||
canvasWidth = 336;
|
||||
numVisibleScanlines = 224;
|
||||
aspectRatio = 240 / 172;
|
||||
aspectRatio = this.canvasWidth / this.numVisibleScanlines * 0.857;
|
||||
firstVisibleScanline = 16;
|
||||
firstVisibleClock = 44 * 2; // ... to 215 * 2
|
||||
// TODO: for 400/800/5200
|
||||
firstVisibleClock = (44 - 6) * 2; // ... to 215 * 2
|
||||
defaultROMSize = 0x8000;
|
||||
overscan = true;
|
||||
audioOversample = 4;
|
||||
@ -59,7 +58,6 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
|
||||
cpu: MOS6502;
|
||||
ram: Uint8Array;
|
||||
rom: Uint8Array;
|
||||
bios: Uint8Array;
|
||||
bus;
|
||||
audio_pokey;
|
||||
@ -73,6 +71,7 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
keycode = 0;
|
||||
cart_80 = false;
|
||||
cart_a0 = false;
|
||||
xexdata = null;
|
||||
// TODO: save/load vars
|
||||
|
||||
constructor() {
|
||||
@ -106,10 +105,12 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
[0xd800, 0xffff, 0xffff, (a) => { return this.bios[a - 0xd800]; }],
|
||||
]),
|
||||
write: newAddressDecoder([
|
||||
[0x0000, 0xbfff, 0xffff, (a, v) => { this.ram[a] = v; }],
|
||||
[0x0000, 0xbffa, 0xffff, (a, v) => { this.ram[a] = v; }],
|
||||
[0xbffb, 0xbfff, 0xffff, (a, v) => { this.ram[a] = v; this.initCartA(); }],
|
||||
[0xd000, 0xd0ff, 0x1f, (a, v) => { this.gtia.setReg(a, v); }],
|
||||
[0xd200, 0xd2ff, 0xf, (a, v) => { this.writePokey(a, v); }],
|
||||
[0xd400, 0xd4ff, 0xf, (a, v) => { this.antic.setReg(a, v); }],
|
||||
[0xd500, 0xd5ff, 0xff, (a, v) => { this.writeMapper(a, v); }],
|
||||
]),
|
||||
};
|
||||
}
|
||||
@ -119,11 +120,11 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
}
|
||||
|
||||
reset() {
|
||||
console.log(this.saveState());
|
||||
super.reset();
|
||||
this.antic.reset();
|
||||
this.gtia.reset();
|
||||
this.keycode = 0;
|
||||
if (this.xexdata) this.cart_a0 = true; // TODO
|
||||
}
|
||||
|
||||
read(a) {
|
||||
@ -197,8 +198,6 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
// update GTIA
|
||||
// get X coordinate within scanline
|
||||
let xofs = this.antic.h * 4 - this.firstVisibleClock;
|
||||
// correct for HSCROL
|
||||
if (this.antic.dliop & 0x10) xofs += (this.antic.regs[4] & 1) << 1;
|
||||
// GTIA tick functions
|
||||
let gtiatick1 = () => {
|
||||
this.gtia.clockPulse1();
|
||||
@ -209,8 +208,17 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
this.linergb[xofs++] = this.gtia.rgb;
|
||||
}
|
||||
// tick 4 GTIA clocks for each CPU/ANTIC cycle
|
||||
this.gtia.clockPulse4();
|
||||
// correct for HSCROL -- bias antic +2, bias gtia -1
|
||||
if ((this.antic.dliop & 0x10) && (this.antic.regs[4] & 1)) {
|
||||
xofs += 2;
|
||||
this.gtia.setBias(-1);
|
||||
} else {
|
||||
this.gtia.setBias(0);
|
||||
}
|
||||
let bp = MODE_SHIFT[this.antic.mode];
|
||||
if (bp < 8 || (xofs & 4) == 0) { this.gtia.an = this.antic.shiftout(); }
|
||||
let odd = this.antic.h & 1;
|
||||
if (bp < 8 || odd) { this.gtia.an = this.antic.shiftout(); }
|
||||
gtiatick1();
|
||||
if (bp == 1) { this.gtia.an = this.antic.shiftout(); }
|
||||
gtiatick2();
|
||||
@ -222,12 +230,12 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
}
|
||||
|
||||
loadState(state: any) {
|
||||
this.loadControlsState(state);
|
||||
this.cpu.loadState(state.c);
|
||||
this.ram.set(state.ram);
|
||||
this.antic.loadState(state.antic);
|
||||
this.gtia.loadState(state.gtia);
|
||||
this.irq_pokey.loadState(state.pokey);
|
||||
this.loadControlsState(state);
|
||||
this.lastdmabyte = state.lastdmabyte;
|
||||
this.keycode = state.keycode;
|
||||
}
|
||||
@ -240,7 +248,7 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
pokey: this.irq_pokey.saveState(),
|
||||
inputs: this.inputs.slice(0),
|
||||
lastdmabyte: this.lastdmabyte,
|
||||
keycode: this.keycode, // TODO: inputs?
|
||||
keycode: this.keycode,
|
||||
};
|
||||
}
|
||||
loadControlsState(state) {
|
||||
@ -300,9 +308,26 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
this.probe.logInterrupt(1);
|
||||
}
|
||||
|
||||
loadROM(rom: Uint8Array) {
|
||||
if (rom.length != 0x2000 && rom.length != 0x4000 && rom.length != 0x8000)
|
||||
throw new Error("Sorry, this platform can only load 8/16/32 KB cartridges at the moment.");
|
||||
loadROM(rom: Uint8Array, title: string) {
|
||||
// XEX file?
|
||||
if (title && title.toLowerCase().endsWith('.xex') && rom[0] == 0xff && rom[1] == 0xff) {
|
||||
// TODO: we fake a cartridge
|
||||
this.xexdata = rom;
|
||||
let cart = new Uint8Array(0x1000);
|
||||
cart.set([0x00, 0x01, 0x00, 0x04, 0x00, 0x01], 0xffa);
|
||||
this.loadCartridge(cart);
|
||||
} else {
|
||||
this.loadCartridge(rom);
|
||||
}
|
||||
}
|
||||
|
||||
loadCartridge(rom: Uint8Array) {
|
||||
// strip off header
|
||||
if (rom[0] == 0x43 && rom[1] == 0x41 && rom[2] == 0x52 && rom[3] == 0x54) {
|
||||
rom = rom.slice(16);
|
||||
}
|
||||
if (rom.length != 0x1000 && rom.length != 0x2000 && rom.length != 0x4000 && rom.length != 0x8000)
|
||||
throw new Error("Sorry, this platform can only load 4/8/16/32 KB cartridges at the moment.");
|
||||
// TODO: support other than 8 KB carts
|
||||
// support 4/8/16/32 KB carts
|
||||
let rom2 = new Uint8Array(0x8000);
|
||||
@ -310,9 +335,63 @@ export class Atari800 extends BasicScanlineMachine {
|
||||
rom2.set(rom, i);
|
||||
}
|
||||
this.cart_a0 = true; // TODO
|
||||
if (rom.length == 0x4000) { this.cart_80 = true; }
|
||||
this.cart_80 = rom.length == 0x4000;
|
||||
super.loadROM(rom2);
|
||||
}
|
||||
|
||||
writeMapper(addr:number, value:number) {
|
||||
if (addr == 0xff) {
|
||||
if (value == 0x80) this.cart_80 = false;
|
||||
if (value == 0xa0) this.cart_a0 = false;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO
|
||||
loadXEX(rom: Uint8Array) {
|
||||
let ofs = 2;
|
||||
let cart = this.ram;
|
||||
let cartofs = 0x100; // stub routine in stack page
|
||||
while (ofs < rom.length) {
|
||||
let start = rom[ofs+0] + rom[ofs+1] * 256;
|
||||
let end = rom[ofs+2] + rom[ofs+3] * 256;
|
||||
console.log('XEX', ofs, hex(start), hex(end));
|
||||
ofs += 4;
|
||||
for (let i=start; i<=end; i++) {
|
||||
this.ram[i] = rom[ofs++];
|
||||
}
|
||||
var runaddr = this.ram[0x2e0] + this.ram[0x2e1]*256;
|
||||
var initaddr = this.ram[0x2e2] + this.ram[0x2e3]*256;
|
||||
console.log('XEX run', hex(runaddr), 'init', hex(initaddr));
|
||||
if (initaddr) {
|
||||
cart[cartofs++] = 0x20;
|
||||
cart[cartofs++] = initaddr & 0xff;
|
||||
cart[cartofs++] = initaddr >> 8;
|
||||
}
|
||||
if (ofs > rom.length) throw new Error("Bad .XEX file format");
|
||||
}
|
||||
if (runaddr) {
|
||||
cart[cartofs++] = 0xa9; // lda #$a0
|
||||
cart[cartofs++] = 0xa0;
|
||||
cart[cartofs++] = 0x8d; // sta $d5ff (disable cart)
|
||||
cart[cartofs++] = 0xff;
|
||||
cart[cartofs++] = 0xd5;
|
||||
cart[cartofs++] = 0x4c; // jmp runaddr
|
||||
cart[cartofs++] = runaddr & 0xff;
|
||||
cart[cartofs++] = runaddr >> 8;
|
||||
}
|
||||
}
|
||||
|
||||
initCartA() {
|
||||
//console.log('init', hex(this.cpu.getPC()));
|
||||
// disable cartridges and load XEX
|
||||
if (this.cpu.getPC() == 0xf17f) {
|
||||
if (this.xexdata) {
|
||||
this.loadXEX(this.xexdata);
|
||||
}
|
||||
//this.cart_80 = this.cart_a0 = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class Atari5200 extends Atari800 {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user