1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-06-07 17:29:31 +00:00

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

This commit is contained in:
sehugg 2022-08-31 00:57:30 +00:00
parent ab3f7cc6c9
commit faf5ffd3ac
260 changed files with 33365 additions and 1398 deletions

View File

@ -292,9 +292,9 @@ div.emuspacer {
padding: 20px;
background: #000;
margin-top:40px;
margin-left:5%;
margin-right:5%;
width:90%;
margin-left:3%;
margin-right:3%;
width:94%;
pointer-events:auto;
}
.emuvideo:focus {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

7
gen/atari8-7ER66A5A.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{a as g}from"./chunk-A5IUZ32U.js";import{G as p,q as h,w as d,z as c}from"./chunk-QTJUNOGR.js";import"./chunk-5B4VPQ4V.js";import{I as o,N as r,U as m,X as l}from"./chunk-ZDSSTLWD.js";import"./chunk-5XVCUSSZ.js";var n=class extends h{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.joymask0=0;this.joymask1=0}loadROM(e){super.loadROM(e),this.reloadROM()}reloadROM(){if(this.sys){var e=this.exports.machine_load_rom(this.sys,this.romptr,this.romlen);console.log("machine_load_rom",e)}}loadBIOS(e){super.loadBIOS(e)}reset(){super.reset(),this.reloadROM()}advanceFrame(e){return this.exports.machine_start_frame(this.sys),e?this.advanceFrameClock(e,999999):this.exports.machine_advance_frame(this.sys),this.syncVideo(),this.syncAudio(),1}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.stateptr);var e=this.statearr,t=e[6]+(e[7]<<8);return{PC:t,SP:e[2],A:e[0],X:e[3],Y:e[4],C:e[1]&1,Z:e[1]&2,I:e[1]&4,D:e[1]&8,V:e[1]&64,N:e[1]&128,o:this.readConst(t)}}saveState(){var e=this.getCPUState();return this.exports.machine_save_state(this.sys,this.stateptr),{c:e,state:this.statearr.slice(0)}}loadState(e){this.statearr.set(e.state),this.exports.machine_load_state(this.sys,this.stateptr)}getVideoParams(){return{width:384,height:240,overscan:!0,videoFrequency:60}}pollControls(){}setKeyInput(e,t,i){i&r.Shift&&(e|=256),i&r.Ctrl&&(e|=512);var a=0;e==37&&(e=8,a=4),e==38&&(e=11,a=1),e==39&&(e=9,a=8),e==40&&(e=10,a=2),e==32&&(a=256),i&r.KeyDown?(this.exports.machine_key_down(this.sys,e),this.joymask0|=a):i&r.KeyUp&&(this.exports.machine_key_up(this.sys,e),this.joymask0&=~a),this.setJoyInput(0,this.joymask0),this.setJoyInput(1,this.joymask1)}setJoyInput(e,t){this.exports.machine_joy_set(this.sys,e,t)}setPaddleInput(e,t){this.exports.machine_paddle_set(this.sys,e,t)}};var x=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"hellopm.dasm",name:"Hello Sprites (ASM)"},{id:"helloconio.c",name:"Text Mode (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"hellodlist.c",name:"Display List (C)"}],B=x.concat([{id:"sieve.bas",name:"Benchmark (FastBasic)"},{id:"pmtest.bas",name:"Sprites Test (FastBasic)"},{id:"dli.bas",name:"DLI Test (FastBasic)"},{id:"joyas.bas",name:"Match-3 Game (FastBasic)"}]),Z=l([[m.VK_SPACE,0,0],[m.VK_ENTER,0,0]]),f={main:[{name:"RAM",start:0,size:65536,type:"ram"},{name:"Left Cartridge ROM",start:40960,size:8192,type:"rom"},{name:"GTIA",start:53248,size:32,type:"io"},{name:"POKEY",start:53760,size:16,type:"io"},{name:"PIA",start:54016,size:4,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"Cartridge Control Line",start:54784,size:256,type:"io"},{name:"ROM",start:55296,size:2048,type:"rom"},{name:"ATARI Character Set",start:57344,size:1024,type:"rom"},{name:"ROM",start:58368,size:7168,type:"rom"}]};function u(s){return s.endsWith(".bas")||s.endsWith(".fb")||s.endsWith(".fbi")?"fastbasic":d(s)}var A=class extends g{constructor(){super(...arguments);this.getToolForFilename=u;this.getOpcodeMetadata=c}getPresets(){return x}getDefaultExtension(){return".asm"}showHelp(e,t){e=="fastbasic"?window.open("https://github.com/dmsc/fastbasic/blob/master/manual.md","_help"):window.open("https://atariwiki.org/wiki/Wiki.jsp?page=Assembler","_help")}};var M=class extends A{constructor(){super(...arguments);this.getMemoryMap=function(){return f}}getPresets(){return B}loadROM(e,t){this.started?(this.loadROMFile(t),this.loadRegion(":cartleft:cart:rom",t)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a800xl.zip",cfgfile:"a800xl.cfg",driver:"a800xl",width:336*2,height:225*2,romfn:"/emulator/cart.rom",romdata:new Uint8Array(t),romsize:8192,preInit:function(i){}})}start(){}},y=class extends A{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"Cartridge ROM",start:16384,size:32768,type:"rom"},{name:"GTIA",start:49152,size:32,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"POKEY",start:59392,size:16,type:"io"},{name:"ATARI Character Set",start:63488,size:1024,type:"rom"},{name:"ROM",start:64512,size:1024,type:"rom"}]}}}loadROM(e,t){this.started?(this.loadROMFile(t),this.loadRegion(":cartleft:cart:rom",t)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a5200/5200.rom",cfgfile:"a5200.cfg",driver:"a5200",width:336*2,height:225*2,romfn:"/emulator/cart.rom",romdata:new Uint8Array(t),romsize:32768,preInit:function(i){}})}start(){}};var w=class extends p{constructor(){super(...arguments);this.getToolForFilename=u}newMachine(){return new n("atari8")}getPresets(){return B}getDefaultExtension(){return".c"}readAddress(e){return this.machine.readConst(e)}getMemoryMap(){return f}showHelp(){}getROMExtension(e){return e&&e[0]==1&&e[1]==8?".prg":".bin"}},I=class extends w{};o["atari8-800xl.mame"]=M;o["atari8-5200.mame"]=y;o["atari8-800xl"]=I;
//# sourceMappingURL=atari8-Y3VYCG3G.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

14
gen/c64-HQRY4UD3.js Normal file
View File

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

7
gen/c64-HQRY4UD3.js.map Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,3 +0,0 @@
import{a as u}from"./chunk-A5IUZ32U.js";import{G as x,p as h,w as p,z as d}from"./chunk-QTJUNOGR.js";import"./chunk-5B4VPQ4V.js";import{I as i,N as o,g as l}from"./chunk-ZDSSTLWD.js";import"./chunk-5XVCUSSZ.js";var m=class extends h{constructor(){super(...arguments);this.numTotalScanlines=312;this.cpuCyclesPerLine=63;this.joymask0=0;this.joymask1=0}loadBIOS(t){var s=59940-57344+12288;t[s]=96,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==2049&&(this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("prgstart",l(this.prgstart))),this.prgstart<32768){this.exports.machine_exec(this.sys,25e4);for(var s="SYS "+this.prgstart+"\r",e=0;e<s.length;e++){var r=s.charCodeAt(e);this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_down(this.sys,r),this.exports.machine_exec(this.sys,2e4),this.exports.machine_key_up(this.sys,r)}for(var e=0;e<1e5&&this.getPC()!=this.prgstart;e++)this.exports.machine_tick(this.sys)}else{this.exports.machine_exec(this.sys,100);for(var a=this.romarr[4]+this.romarr[5]*256,e=0;e<15e4&&this.getPC()!=a;e++)this.exports.machine_tick(this.sys)}}advanceFrame(t){var s=this.exports.machine_get_raster_line(this.sys),e=Math.floor((this.numTotalScanlines-s)*(19656+295)/this.numTotalScanlines),r=this.probe!=null;return r&&this.exports.machine_reset_probe_buffer(),e=super.advanceFrameClock(t,e),r&&this.copyProbeData(),e}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,s=t[2]+(t[3]<<8);return{PC:s,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(s)}}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:392,height:272,overscan:!0,videoFrequency:50}}setKeyInput(t,s,e){if(!(t==16||t==17||t==18||t==224)){var r=0,a=0;t==37&&(t=8,r=4),t==38&&(t=11,r=1),t==39&&(t=9,r=8),t==40&&(t=10,r=2),t==32&&(r=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|=r,this.joymask1|=a):e&o.KeyUp&&(this.exports.machine_key_up(this.sys,t),this.joymask0&=~r,this.joymask1&=~a),this.exports.c64_joystick(this.sys,this.joymask0,this.joymask1)}}};var f=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"eliza.c",name:"Eliza (C)"},{id:"tgidemo.c",name:"TGI Graphics Demo (C)"},{id:"upandaway.c",name:"Up, Up and Away (C)"},{id:"joymove.c",name:"Joystick Movement (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"scroll1.c",name:"Scrolling 1 (C)"},{id:"scroll2.c",name:"Scrolling 2 (C)"},{id:"scroll3.c",name:"Scrolling 3 (C)"},{id:"scroll4.c",name:"Scrolling 4 (C)"},{id:"scroll5.c",name:"Scrolling 5 (C)"},{id:"climber.c",name:"Climber Game (C)"},{id:"multilines.c",name:"Multicolor Lines+Flood Fill (C)"},{id:"sidtune.dasm",name:"SID Tune (ASM)"},{id:"musicplayer.c",name:"Music Player (C)"}],g={main:[{name:"6510 Registers",start:0,size:2,type:"io"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:40960,size:8192,type:"rom"},{name:"RAM",start:49152,size:4096,type:"ram"},{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"}]},n=class extends x{newMachine(){return new m("c64")}getPresets(){return f}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return g}showHelp(){window.open("https://8bitworkshop.com/docs/platforms/c64/","_help")}getROMExtension(t){return t&&t[0]==1&&t[1]==8?".prg":".bin"}},y=class extends u{constructor(){super(...arguments);this.getToolForFilename=p;this.getOpcodeMetadata=d}getPresets(){return f}getDefaultExtension(){return".c"}loadROM(t,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(r){}});else{this.loadROMFile(s),this.loadRegion(":quickload",s);var e=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",e)}}start(){}getMemoryMap(){return g}};i.c64=n;i["c64.wasm"]=n;i["c64.mame"]=y;
//# sourceMappingURL=c64-KHKRKUGM.js.map

File diff suppressed because one or more lines are too long

View File

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

View File

@ -1,4 +0,0 @@
import{A as w,a as p,b as P,y as C}from"./chunk-QTJUNOGR.js";import{O as b,Q as v,S}from"./chunk-ZDSSTLWD.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-A5IUZ32U.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

View File

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

26
gen/chunk-OKJZYBWI.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

48
gen/chunk-P4DRXSWU.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
gen/chunk-PVJ5UPJQ.js Normal file
View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import{b as E}from"./chunk-SYHXEOUM.js";import{b as f}from"./chunk-A5IUZ32U.js";import{C as m,H as n,d as w,f as c}from"./chunk-QTJUNOGR.js";import"./chunk-5B4VPQ4V.js";import{I as o,U as e,X as s,_ as t,k as g,l as a}from"./chunk-ZDSSTLWD.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-AUJWOUYJ.js";import{b as f}from"./chunk-PVJ5UPJQ.js";import{D as m,I as n,d as w,f as c}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{$ as t,J as o,V as e,Y as s,k as g,l as a}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var Q=s([[e.UP,0,1],[e.DOWN,0,4],[e.LEFT,0,8],[e.RIGHT,0,2],[e.A,0,64],[e.B,1,64],[e.P2_UP,2,1],[e.P2_DOWN,2,4],[e.P2_LEFT,2,8],[e.P2_RIGHT,2,2],[e.P2_A,2,64],[e.P2_B,3,64]]),i=class extends E{constructor(){super();this.defaultROMSize=32768;this.ram=new Uint8Array(1024);this.read=t([[0,8191,8191,A=>this.bios?this.bios[A]:0],[24576,32767,1023,A=>this.ram[A]],[32768,65535,32767,A=>this.rom?this.rom[A]:0]]);this.write=t([[24576,32767,1023,(A,B)=>{this.ram[A]=B}]]);this.init(this,this.newIOBus(),new c(new w)),this.bios=new g().decode(a(atob(l)))}getKeyboardMap(){return Q}vdpInterrupt(){this.probe.logInterrupt(0),this.cpu.NMI()}newIOBus(){return{read:A=>{switch(A&=255,A){case 252:return this.inputs[this.keypadMode?1:0]^255;case 255:return this.inputs[this.keypadMode?3:2]^255}return A>=160&&A<=191?A&1?this.vdp.readStatus():this.vdp.readData():0},write:(A,B)=>{switch(A&=255,B&=255,A>>4){case 8:case 9:this.keypadMode=!0;break;case 12:case 13:this.keypadMode=!1;break;case 10:case 11:return A&1?this.vdp.writeAddress(B):this.vdp.writeData(B);case 15:this.psg.setData(B);break}}}}loadState(A){super.loadState(A),this.keypadMode=A.kpm}saveState(){var A=super.saveState();return A.kpm=this.keypadMode,A}reset(){super.reset(),this.keypadMode=!1}},l=`
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-SHS6BO7B.js.map
//# sourceMappingURL=coleco-6D3Q7HL5.js.map

View File

@ -233,6 +233,10 @@ var POKEYDeviceChannel = function () {
}
}
};
this.getRegister = function (addr) {
addr &= 0xf;
return regs[addr];
};
this.setTIARegister = function (addr, value) {
switch (addr) {
case 0x17:

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseZ80MachinePlatform = exports.Base6502MachinePlatform = exports.BaseMachinePlatform = exports.hasSerialIO = exports.hasBIOS = exports.hasProbe = exports.isRaster = exports.hasPaddleInput = exports.hasJoyInput = exports.hasKeyInput = exports.hasAudio = exports.hasVideo = exports.lookupSymbol = exports.dumpStackToString = exports.Base6809Platform = exports.getToolForFilename_6809 = exports.cpuStateToLongString_6809 = exports.getToolForFilename_z80 = exports.BaseZ80Platform = exports.cpuStateToLongString_Z80 = exports.getOpcodeMetadata_6502 = exports.cpuStateToLongString_6502 = exports.Base6502Platform = exports.getToolForFilename_6502 = exports.inspectSymbol = exports.BaseDebugPlatform = exports.BasePlatform = exports.BreakpointList = exports.isDebuggable = exports.DebugSymbols = void 0;
exports.Base6809MachinePlatform = exports.BaseZ80MachinePlatform = exports.Base6502MachinePlatform = exports.BaseMachinePlatform = exports.hasSerialIO = exports.hasBIOS = exports.hasProbe = exports.isRaster = exports.hasPaddleInput = exports.hasJoyInput = exports.hasKeyInput = exports.hasAudio = exports.hasVideo = exports.lookupSymbol = exports.dumpStackToString = exports.Base6809Platform = exports.getToolForFilename_6809 = exports.cpuStateToLongString_6809 = exports.getToolForFilename_z80 = exports.BaseZ80Platform = exports.cpuStateToLongString_Z80 = exports.getOpcodeMetadata_6502 = exports.cpuStateToLongString_6502 = exports.Base6502Platform = exports.getToolForFilename_6502 = exports.inspectSymbol = exports.BaseDebugPlatform = exports.BasePlatform = exports.BreakpointList = exports.isDebuggable = exports.DebugSymbols = void 0;
const emu_1 = require("./emu");
const util_1 = require("./util");
const disasm6502_1 = require("./cpu/disasm6502");
@ -532,7 +532,7 @@ class Base6809Platform extends BaseZ80Platform {
}
exports.Base6809Platform = Base6809Platform;
//TODO: how to get stack_end?
function dumpStackToString(platform, mem, start, end, sp, jsrop) {
function dumpStackToString(platform, mem, start, end, sp, jsrop, bigendian) {
var s = "";
var nraw = 0;
//s = dumpRAM(mem.slice(start,start+end+1), start, end-start+1);
@ -547,6 +547,9 @@ function dumpStackToString(platform, mem, start, end, sp, jsrop) {
// see if there's a JSR on the stack here
// TODO: make work with roms and memory maps
var addr = read(sp) + read(sp + 1) * 256;
if (bigendian) {
addr = ((addr & 0xff) << 8) | ((addr & 0xff00) >> 8);
}
var jsrofs = jsrop == 0x20 ? -2 : -3; // 6502 vs Z80
var opcode = read(addr + jsrofs); // might be out of bounds
if (opcode == jsrop) { // JSR
@ -738,18 +741,17 @@ class BaseMachinePlatform extends BaseDebugPlatform {
pause() {
this.timer.stop();
this.audio && this.audio.stop();
// i guess for runToVsync()?
if (this.probeRecorder) {
this.probeRecorder.singleFrame = true;
}
}
// so probe views stick around TODO: must be a better way?
runToVsync() {
if (this.probeRecorder) {
this.probeRecorder.clear();
this.probeRecorder.singleFrame = false;
}
super.runToVsync();
this.restartDebugging();
var flag = false;
this.runEval(() => {
if (this.getRasterScanline() > 0)
flag = true;
else
return flag;
});
}
// TODO: reset target clock counter
getRasterScanline() {
@ -814,7 +816,6 @@ class BaseZ80MachinePlatform extends BaseMachinePlatform {
var end = start + 0xff;
if (sp == 0)
sp = 0x10000;
console.log(sp, start, end);
return dumpStackToString(this, [], start, end, sp, 0xcd);
}
default: return isDebuggable(this.machine) && this.machine.getDebugInfo(category, state);
@ -825,6 +826,37 @@ class BaseZ80MachinePlatform extends BaseMachinePlatform {
}
}
exports.BaseZ80MachinePlatform = BaseZ80MachinePlatform;
class Base6809MachinePlatform extends BaseMachinePlatform {
constructor() {
super(...arguments);
this.getToolForFilename = getToolForFilename_6809;
}
getDebugCategories() {
if (isDebuggable(this.machine))
return this.machine.getDebugCategories();
else
return ['CPU', 'Stack'];
}
getDebugInfo(category, state) {
switch (category) {
case 'CPU': return cpuStateToLongString_6809(state.c);
case 'Stack': {
var sp = (state.c.SP - 1) & 0xffff;
var start = sp & 0xff00;
var end = start + 0xff;
if (sp == 0)
sp = 0x10000;
return dumpStackToString(this, [], start, end, sp, 0x17, true);
}
default: return super.getDebugInfo(category, state);
}
}
disassemble(pc, read) {
// TODO: don't create new CPU
return Object.create((0, _6809_1.CPU6809)()).disasm(read(pc), read(pc + 1), read(pc + 2), read(pc + 3), read(pc + 4), pc);
}
}
exports.Base6809MachinePlatform = Base6809MachinePlatform;
///
class SerialIOVisualizer {
constructor(parentElement, device) {

File diff suppressed because one or more lines are too long

View File

@ -2645,7 +2645,8 @@ function CPU6809() {
}
return f;
},
disasm: disasm
disasm: disasm,
isStable: function () { return true; }
};
}
exports.CPU6809 = CPU6809;

File diff suppressed because one or more lines are too long

View File

@ -1785,7 +1785,7 @@ var _MOS6502 = function () {
pushToStack((PC >>> 8) & 0xff);
},
function () { pushToStack(PC & 0xff); },
function () { pushToStack(getStatusBits()); },
function () { pushToStack(getStatusBits() & ~0x10); },
function () { AD = bus.read(IRQ_VECTOR); },
function () { AD |= bus.read(IRQ_VECTOR + 1) << 8; },
function () { PC = AD; fetchNextOpcode(); }
@ -1801,7 +1801,7 @@ var _MOS6502 = function () {
pushToStack((PC >>> 8) & 0xff);
},
function () { pushToStack(PC & 0xff); },
function () { pushToStack(getStatusBits()); },
function () { pushToStack(getStatusBits() & ~0x10); },
function () { AD = bus.read(NMI_VECTOR); },
function () { AD |= bus.read(NMI_VECTOR + 1) << 8; },
function () { PC = AD; fetchNextOpcode(); }

File diff suppressed because one or more lines are too long

View File

@ -112,6 +112,7 @@ class BasicMachine extends BasicHeadlessMachine {
super(...arguments);
this.overscan = false;
this.rotate = 0;
this.aspectRatio = 1.0;
}
getAudioParams() {
return { sampleRate: this.sampleRate, stereo: false };
@ -120,7 +121,11 @@ class BasicMachine extends BasicHeadlessMachine {
this.audio = audio;
}
getVideoParams() {
return { width: this.canvasWidth, height: this.numVisibleScanlines, overscan: this.overscan, rotate: this.rotate };
return { width: this.canvasWidth,
height: this.numVisibleScanlines,
aspect: this.aspectRatio,
overscan: this.overscan,
rotate: this.rotate };
}
connectVideo(pixels) {
this.pixels = pixels;

View File

@ -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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"}

View File

@ -45,7 +45,9 @@ var KeyFlags;
function _setKeyboardEvents(canvas, callback) {
canvas.onkeydown = (e) => {
callback(e.which, 0, KeyFlags.KeyDown | _metakeyflags(e));
if (e.ctrlKey || e.which == 8 || e.which == 9 || e.which == 27) { // eat backspace, tab, escape keys
// eat backspace, tab, escape, slash, ' keys
if (e.ctrlKey || e.which == 8 || e.which == 9 || e.which == 27
|| e.which == 191 || e.which == 191 || e.which == 222) {
e.preventDefault();
}
};
@ -312,6 +314,7 @@ exports.Keys = {
GP_D: { c: 67, n: "C", plyr: 0, button: 3 },
SELECT: { c: 220, n: "\\", plyr: 0, button: 8 },
START: { c: 13, n: "Enter", plyr: 0, button: 9 },
OPTION: { c: 9, n: "Tab", plyr: 0, button: 10 },
// gamepad and keyboard (player 1)
P2_UP: { c: 87, n: "W", plyr: 1, yaxis: -1 },
P2_DOWN: { c: 83, n: "S", plyr: 1, yaxis: 1 },

File diff suppressed because one or more lines are too long

View File

@ -10,7 +10,7 @@
* GNU General Public License v2.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.SMSVDP = exports.TMS9918A = void 0;
exports.GameGearVDP = exports.SMSVDP = exports.TMS9918A = void 0;
const util_1 = require("../util");
const devices_1 = require("../devices");
var TMS9918A_Mode;
@ -930,4 +930,36 @@ class SMSVDP extends TMS9918A {
}
exports.SMSVDP = SMSVDP;
;
class GameGearVDP extends SMSVDP {
constructor() {
super(...arguments);
this.cram = new Uint8Array(64); // color RAM
this.cram_latch = 0;
}
writeData(value) {
if (this.writeToCRAM) {
//console.log(hex(this.addressRegister), hex(value), hex(this.cram_latch));
if (this.addressRegister & 1) { // odd address?
let rgb4 = this.cram_latch + (value << 8);
let rgba = (0, util_1.RGBA)((rgb4 & 15) * 17, ((rgb4 >> 4) & 15) * 17, ((rgb4 >> 8) & 15) * 17);
let palindex = this.addressRegister & (this.cram.length - 1);
this.cram[palindex - 1] = this.cram_latch;
this.cram[palindex] = value;
this.cpalette[palindex >> 1] = rgba;
this.prefetchByte = value;
this.addressRegister &= this.ramMask;
this.redrawRequired = true;
}
else {
this.cram_latch = value; // even address
}
this.addressRegister++;
}
else {
super.writeData(value);
}
this.latch = false;
}
}
exports.GameGearVDP = GameGearVDP;
//# sourceMappingURL=tms9918a.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
import{H as l,p}from"./chunk-QTJUNOGR.js";import"./chunk-5B4VPQ4V.js";import{I as i,N as o}from"./chunk-ZDSSTLWD.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.exports.machine_get_raster_line(this.sys),a=Math.floor((this.numTotalScanlines-e)*19965/this.numTotalScanlines),s=this.probe!=null;return s&&this.exports.machine_reset_probe_buffer(),a=super.advanceFrameClock(t,a),s&&this.copyProbeData(),a}getCPUState(){this.exports.machine_save_cpu_state(this.sys,this.cpustateptr);var t=this.cpustatearr,e=t[9]+(t[8]<<8),a=t[10]+(t[11]<<8),s=t[12]+(t[13]<<8),r=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:r,DE:s,HL:a,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,a){if(!(t==16||t==17||t==18||t==224)){var s=0,r=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,r=4),t==87&&(t=87,r=1),t==68&&(t=68,r=8),t==83&&(t=83,r=2),t==69&&(r=16),t==113&&(t=241),t==115&&(t=243),t==119&&(t=245),t==121&&(t=247),a&o.KeyDown?(this.exports.machine_key_down(this.sys,t),this.joymask0|=s):a&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-OHVHKVLP.js.map

File diff suppressed because one or more lines are too long

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

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

7
gen/cpc-UWHQWW7T.js.map Normal file

File diff suppressed because one or more lines are too long

View File

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

View File

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

File diff suppressed because one or more lines are too long

2
gen/galaxian-RGULKR25.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -100,12 +100,13 @@ function convertWordsToImages(words, fmt) {
var mask = (1 << bpp) - 1;
var pofs = fmt.pofs || wordsperline * height * count;
var skip = fmt.skip || 0;
var wpimg = fmt.wpimg || wordsperline * height;
var images = [];
for (var n = 0; n < count; n++) {
var imgdata = [];
for (var y = 0; y < height; y++) {
var yp = fmt.flip ? height - 1 - y : y;
var ofs0 = n * wordsperline * height + yp * wordsperline;
var ofs0 = wpimg * n + yp * wordsperline;
var shift = 0;
for (var x = 0; x < width; x++) {
var color = 0;
@ -144,19 +145,20 @@ function convertImagesToWords(images, fmt) {
var mask = (1 << bpp) - 1;
var pofs = fmt.pofs || wordsperline * height * count;
var skip = fmt.skip || 0;
var wpimg = fmt.wpimg || wordsperline * height;
var words;
if (nplanes > 0 && fmt.sl) // TODO?
words = new Uint8Array(wordsperline * height * count);
words = new Uint8Array(wpimg * count);
else if (bitsperword <= 8)
words = new Uint8Array(wordsperline * height * count * nplanes);
words = new Uint8Array(wpimg * count * nplanes);
else
words = new Uint32Array(wordsperline * height * count * nplanes);
words = new Uint32Array(wpimg * count * nplanes);
for (var n = 0; n < count; n++) {
var imgdata = images[n];
var i = 0;
for (var y = 0; y < height; y++) {
var yp = fmt.flip ? height - 1 - y : y;
var ofs0 = n * wordsperline * height + yp * wordsperline;
var ofs0 = n * wpimg + yp * wordsperline;
var shift = 0;
for (var x = 0; x < width; x++) {
var color = imgdata[i++];
@ -379,7 +381,7 @@ class TextDataNode extends CodeProjectDataNode {
}
updateLeft() {
if (this.right.words.length != this.words.length)
throw Error("Expected " + this.right.words.length + " bytes; image has " + this.words.length);
throw Error("Cannot put " + this.right.words.length + " image bytes into array of " + this.words.length + " bytes");
this.words = this.right.words;
// TODO: reload editors?
var datastr = this.text.substring(this.start, this.end);
@ -916,7 +918,13 @@ class PixEditor extends Viewer {
}
commit() {
this.updateImage();
this.left.refreshLeft();
try {
this.left.refreshLeft();
}
catch (e) {
console.log(e);
alert(`Could not update source code. ${e}`);
}
}
remapPixels(mapfn) {
var i = 0;

File diff suppressed because one or more lines are too long

View File

@ -55,6 +55,7 @@ var debugCategory; // current debug category
var debugTickPaused = false;
var recorderActive = false;
var lastViewClicked = null;
var lastDebugCommand = null;
var errorWasRuntime = false;
var lastBreakExpr = "c.PC == 0x6000";
// TODO: codemirror multiplex support?
@ -317,7 +318,8 @@ function refreshWindowList() {
});
// TODO: only if raster
addWindowItem("#crtheatmap", "CRT Probe", () => {
return new debugviews_1.RasterPCHeatMapView();
//return new RasterPCHeatMapView();
return new debugviews_1.RasterStackMapView();
});
addWindowItem("#probelog", "Probe Log", () => {
return new debugviews_1.ProbeLogView();
@ -1365,33 +1367,44 @@ function checkRunReady() {
return true;
}
function openRelevantListing(state) {
// if we clicked on another window, retain it
if (lastViewClicked != null)
// if we clicked on a specific tool, don't switch windows
if (lastViewClicked && lastViewClicked.startsWith('#'))
return;
// don't switch windows for specific debug commands
if (['toline', 'restart', 'tovsync', 'stepover'].includes(lastDebugCommand))
return;
// has to support disassembly, at least
if (!exports.platform.disassemble)
return;
// search through listings
var listings = exports.current_project.getListings();
var bestid = "#disasm";
var bestscore = 32;
let listings = exports.current_project.getListings();
let bestid = "#disasm";
let bestscore = 256;
if (listings) {
var pc = state.c ? (state.c.EPC || state.c.PC) : 0;
for (var lstfn in listings) {
var lst = listings[lstfn];
var file = lst.assemblyfile || lst.sourcefile;
let pc = state.c ? (state.c.EPC || state.c.PC) : 0;
for (let lstfn in listings) {
let lst = listings[lstfn];
let file = lst.assemblyfile || lst.sourcefile;
// pick either listing or source file
var wndid = exports.current_project.filename2path[lstfn] || lstfn;
let wndid = exports.current_project.filename2path[lstfn] || lstfn;
if (file == lst.sourcefile)
wndid = exports.projectWindows.findWindowWithFilePrefix(lstfn);
// does this window exist?
if (exports.projectWindows.isWindow(wndid)) {
var res = file && file.findLineForOffset(pc, 32); // TODO: const
if (res && pc - res.offset < bestscore) {
bestid = wndid;
bestscore = pc - res.offset;
// find the source line at the PC or closely before it
let srcline1 = file && file.findLineForOffset(pc, editors_1.PC_LINE_LOOKAHEAD);
if (srcline1) {
// try to find the next line and bound the PC
let srcline2 = file.lines[srcline1.line + 1];
if (!srcline2 || pc < srcline2.offset) {
let score = pc - srcline1.offset;
if (score < bestscore) {
bestid = wndid;
bestscore = score;
}
}
//console.log(hex(pc,4), srcline1, srcline2, wndid, lstfn, bestid, bestscore);
}
//console.log(hex(pc,4), wndid, lstfn, bestid, bestscore);
}
}
}
@ -1406,12 +1419,14 @@ function uiDebugCallback(state) {
debugTickPaused = true;
}
function setupDebugCallback(btnid) {
if (exports.platform.setupDebug)
if (exports.platform.setupDebug) {
exports.platform.setupDebug((state, msg) => {
uiDebugCallback(state);
setDebugButtonState(btnid || "pause", "stopped");
msg && showErrorAlert([{ msg: "STOPPED: " + msg, line: 0 }], true);
});
lastDebugCommand = btnid;
}
}
function setupBreakpoint(btnid) {
if (!checkRunReady())

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProbeSymbolView = exports.ScanlineIOView = exports.ProbeLogView = exports.RasterPCHeatMapView = exports.AddressHeatMapView = exports.ProbeViewBaseBase = exports.MemoryMapView = exports.BinaryFileView = exports.VRAMMemoryView = exports.MemoryView = void 0;
exports.ProbeSymbolView = exports.ScanlineIOView = exports.ProbeLogView = exports.RasterStackMapView = exports.RasterPCHeatMapView = exports.AddressHeatMapView = exports.ProbeViewBaseBase = exports.MemoryMapView = exports.BinaryFileView = exports.VRAMMemoryView = exports.MemoryView = void 0;
const baseviews_1 = require("./baseviews");
const ui_1 = require("../ui");
const util_1 = require("../../common/util");
@ -289,6 +289,7 @@ class MemoryMapView {
exports.MemoryMapView = MemoryMapView;
///
// TODO: clear buffer when scrubbing
const OPAQUE_BLACK = 0xff000000;
class ProbeViewBaseBase {
constructor() {
this.cumulativeData = false;
@ -347,11 +348,12 @@ class ProbeViewBaseBase {
var row = 0;
var col = 0;
var clk = 0;
this.sp = 0;
for (var i = 0; i < p.idx; i++) {
var word = p.buf[i];
var addr = word & 0xffff;
var value = (word >> 16) & 0xff;
var op = word & 0xff000000;
var op = word & OPAQUE_BLACK;
switch (op) {
case recorder_1.ProbeFlags.SCANLINE:
row++;
@ -365,6 +367,9 @@ class ProbeViewBaseBase {
col += addr;
clk += addr;
break;
case recorder_1.ProbeFlags.SP_PUSH:
case recorder_1.ProbeFlags.SP_POP:
this.sp = addr;
default:
eventfn(op, addr, col, row, clk, value);
break;
@ -415,7 +420,7 @@ class ProbeViewBaseBase {
s += " = $" + (0, util_1.hex)(value, 2);
return s;
}
getOpRGB(op) {
getOpRGB(op, addr) {
switch (op) {
case recorder_1.ProbeFlags.EXECUTE: return 0x018001;
case recorder_1.ProbeFlags.MEM_READ: return 0x800101;
@ -424,7 +429,7 @@ class ProbeViewBaseBase {
case recorder_1.ProbeFlags.IO_WRITE: return 0xc00180;
case recorder_1.ProbeFlags.VRAM_READ: return 0x808001;
case recorder_1.ProbeFlags.VRAM_WRITE: return 0x4080c0;
case recorder_1.ProbeFlags.INTERRUPT: return 0xcfcfcf;
case recorder_1.ProbeFlags.INTERRUPT: return 0x3fbf3f;
case recorder_1.ProbeFlags.ILLEGAL: return 0x3f3fff;
default: return 0;
}
@ -519,14 +524,17 @@ class ProbeBitmapViewBase extends ProbeViewBase {
}
refresh() {
this.tick();
this.datau32.fill(0xff000000);
this.datau32.fill(OPAQUE_BLACK);
}
tick() {
super.tick();
this.drawImage();
}
drawImage() {
this.ctx.putImageData(this.imageData, 0, 0);
}
clear() {
this.datau32.fill(0xff000000);
this.datau32.fill(OPAQUE_BLACK);
}
}
class AddressHeatMapView extends ProbeBitmapViewBase {
@ -538,17 +546,17 @@ class AddressHeatMapView extends ProbeBitmapViewBase {
var v = ui_1.platform.readAddress(i);
var rgb = (v >> 2) | (v & 0x1f);
rgb |= (rgb << 8) | (rgb << 16);
this.datau32[i] = rgb | 0xff000000;
this.datau32[i] = rgb | OPAQUE_BLACK;
}
}
drawEvent(op, addr, col, row) {
var rgb = this.getOpRGB(op);
var rgb = this.getOpRGB(op, addr);
if (!rgb)
return;
var x = addr & 0xff;
var y = (addr >> 8) & 0xff;
var data = this.datau32[addr & 0xffff];
data = data | rgb | 0xff000000;
data = data | rgb | OPAQUE_BLACK;
this.datau32[addr & 0xffff] = data;
}
getTooltipText(x, y) {
@ -586,16 +594,86 @@ class AddressHeatMapView extends ProbeBitmapViewBase {
exports.AddressHeatMapView = AddressHeatMapView;
class RasterPCHeatMapView extends ProbeBitmapViewBase {
drawEvent(op, addr, col, row) {
var iofs = col + row * this.canvas.width;
var rgb = this.getOpRGB(op);
var rgb = this.getOpRGB(op, addr);
if (!rgb)
return;
var data = this.datau32[iofs];
data = data | rgb | 0xff000000;
this.datau32[iofs] = data;
var iofs = col + row * this.canvas.width;
var data = rgb | OPAQUE_BLACK;
this.datau32[iofs] |= data;
}
drawImage() {
// fill in the gaps
let last = OPAQUE_BLACK;
for (let i = 0; i < this.datau32.length; i++) {
if (this.datau32[i] == OPAQUE_BLACK) {
this.datau32[i] = last;
}
else {
last = this.datau32[i];
}
}
super.drawImage();
}
}
exports.RasterPCHeatMapView = RasterPCHeatMapView;
class RasterStackMapView extends RasterPCHeatMapView {
constructor() {
super(...arguments);
this.interrupt = 0;
this.rgb = 0;
this.lastpc = 0;
}
drawEvent(op, addr, col, row) {
var iofs = col + row * this.canvas.width;
// track interrupts
if (op == recorder_1.ProbeFlags.INTERRUPT)
this.interrupt = 1;
if (this.interrupt == 1 && op == recorder_1.ProbeFlags.SP_PUSH)
this.interrupt = addr;
if (this.interrupt > 1 && this.sp > this.interrupt)
this.interrupt = 0;
// track writes
if (op == recorder_1.ProbeFlags.MEM_WRITE) {
this.rgb |= 0x00002f;
}
if (op == recorder_1.ProbeFlags.VRAM_WRITE) {
this.rgb |= 0x003f80;
}
if (op == recorder_1.ProbeFlags.IO_WRITE) {
this.rgb |= 0x1f3f80;
}
if (op == recorder_1.ProbeFlags.IO_READ) {
this.rgb |= 0x001f00;
}
// draw pixels?
if (op == recorder_1.ProbeFlags.ILLEGAL || op == recorder_1.ProbeFlags.VRAM_READ) {
this.datau32[iofs] = 0xff0f0f0f;
}
else {
let data = this.rgb;
if (op == recorder_1.ProbeFlags.EXECUTE) {
let sp = this.sp & 15;
if (sp >= 8)
sp = 16 - sp;
if (Math.abs(this.lastpc) - addr > 16) {
sp += 1;
}
if (Math.abs(this.lastpc) - addr > 256) {
sp += 1;
}
data = this.rgb = (0x080808 * sp) + 0x202020;
this.lastpc = addr;
}
if (this.interrupt) {
data |= 0x800040;
}
if (this.datau32[iofs] == OPAQUE_BLACK) {
this.datau32[iofs] = data | OPAQUE_BLACK;
}
}
}
}
exports.RasterStackMapView = RasterStackMapView;
class ProbeLogView extends ProbeViewBaseBase {
constructor() {
super(...arguments);
@ -671,7 +749,7 @@ class ScanlineIOView extends ProbeViewBaseBase {
var opaddr = line[i];
if (opaddr !== undefined) {
var addr = opaddr & 0xffff;
var op = op & 0xff000000;
var op = op & OPAQUE_BLACK;
if (op == recorder_1.ProbeFlags.EXECUTE) {
s += ',';
}

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ListingView = exports.DisassemblerView = exports.SourceEditor = exports.textMapFunctions = void 0;
exports.ListingView = exports.DisassemblerView = exports.SourceEditor = exports.textMapFunctions = exports.PC_LINE_LOOKAHEAD = void 0;
const baseviews_1 = require("./baseviews");
const ui_1 = require("../ui");
const util_1 = require("../../common/util");
@ -17,6 +17,8 @@ function createTextSpan(text, className) {
return span;
}
/////
// look ahead this many bytes when finding source lines for a PC
exports.PC_LINE_LOOKAHEAD = 64;
const MAX_ERRORS = 200;
const MODEDEFS = {
default: { theme: 'mbo' },
@ -349,7 +351,7 @@ class SourceEditor {
cpustate = ui_1.platform.getCPUState();
if (cpustate) {
var EPC = (cpustate && (cpustate.EPC || cpustate.PC));
var res = this.sourcefile.findLineForOffset(EPC, 15);
var res = this.sourcefile.findLineForOffset(EPC, exports.PC_LINE_LOOKAHEAD);
return res;
}
}
@ -548,7 +550,7 @@ class ListingView extends DisassemblerView {
var state = ui_1.lastDebugState || ui_1.platform.saveState();
var pc = state.c ? (state.c.EPC || state.c.PC) : 0;
if (pc >= 0 && this.assemblyfile) {
var res = this.assemblyfile.findLineForOffset(pc, 15);
var res = this.assemblyfile.findLineForOffset(pc, exports.PC_LINE_LOOKAHEAD);
if (res) {
// set cursor while debugging
if (moveCursor) {

File diff suppressed because one or more lines are too long

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -11,6 +11,8 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
this.cpuCyclesPerLine = 63;
this.joymask0 = 0;
this.joymask1 = 0;
this.lightpen_x = 0;
this.lightpen_y = 0;
}
loadBIOS(srcArray) {
var patch1ofs = 0xea24 - 0xe000 + 0x3000;
@ -21,7 +23,7 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
super.reset();
// clear keyboard
for (var ch = 0; ch < 128; ch++) {
this.setKeyInput(ch, 0, emu_1.KeyFlags.KeyUp);
this.exports.machine_key_up(this.sys, ch);
}
// load rom
if (this.romptr && this.romlen) {
@ -37,12 +39,12 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
// advance BIOS a few frames
this.exports.machine_exec(this.sys, 250000);
// type in command (SYS 2061)
var cmd = "SYS " + this.prgstart + "\r";
var cmd = "\rSYS " + this.prgstart + "\r";
for (var i = 0; i < cmd.length; i++) {
var key = cmd.charCodeAt(i);
this.exports.machine_exec(this.sys, 20000);
this.exports.machine_key_down(this.sys, key);
this.exports.machine_exec(this.sys, 20000);
this.exports.machine_exec(this.sys, 5000);
this.exports.machine_key_up(this.sys, key);
}
// advance clock until program starts
@ -66,14 +68,16 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
}
advanceFrame(trap) {
// TODO: does this sync with VSYNC?
var scanline = this.exports.machine_get_raster_line(this.sys);
var clocks = Math.floor((this.numTotalScanlines - scanline) * (19656 + 295) / this.numTotalScanlines);
// TODO: ticks, not msec (machine_tick() has different rate then machine_exec())
var scanline = this.getRasterY();
var clocks = Math.floor((this.numTotalScanlines - scanline) * 19656 / this.numTotalScanlines);
var probing = this.probe != null;
if (probing)
this.exports.machine_reset_probe_buffer();
clocks = super.advanceFrameClock(trap, clocks);
if (probing)
this.copyProbeData();
//console.log(clocks, this.getRasterY());
return clocks;
}
getCPUState() {
@ -93,18 +97,26 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
V: s[10] & 64,
N: s[10] & 128,
o: this.readConst(pc),
R: s[19] != 0x37, // bit 28 of PINS
};
}
saveState() {
this.exports.machine_save_state(this.sys, this.stateptr);
/*
for (var i=0; i<this.statearr.length; i++)
if (this.statearr[i] == 0xa0 && this.statearr[i+1] == 0x4d && this.statearr[i+2] == 0xe2) console.log(hex(i));
*/
let cia1 = this.getDebugStateOffset(1);
let cia2 = this.getDebugStateOffset(2);
let vic = this.getDebugStateOffset(3);
let sid = this.getDebugStateOffset(4);
let ramofs = this.getDebugStateOffset(5);
let pla = this.getDebugStateOffset(9);
return {
c: this.getCPUState(),
state: this.statearr.slice(0),
ram: this.statearr.slice(18640, 18640 + 0x200), // ZP and stack
ram: this.statearr.slice(ramofs, ramofs + 0x10000),
cia1: this.statearr.slice(cia1, cia1 + 64),
cia2: this.statearr.slice(cia2, cia2 + 64),
vic: this.statearr.slice(vic + 1, vic + 1 + 64),
sid: this.statearr.slice(sid, sid + 32),
pla: this.statearr.slice(pla, pla + 16)
};
}
loadState(state) {
@ -112,7 +124,7 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
this.exports.machine_load_state(this.sys, this.stateptr);
}
getVideoParams() {
return { width: 392, height: 272, overscan: true, videoFrequency: 50 };
return { width: 392, height: 272, overscan: true, videoFrequency: 50, aspect: 392 / 272 * 0.9365 };
}
setKeyInput(key, code, flags) {
// TODO: handle shifted keys
@ -123,44 +135,108 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
// convert to c64
var mask = 0;
var mask2 = 0;
if (key == 37) {
key = 0x8;
mask = 0x4;
} // LEFT
if (key == 38) {
key = 0xb;
mask = 0x1;
} // UP
if (key == 39) {
key = 0x9;
mask = 0x8;
} // RIGHT
if (key == 40) {
key = 0xa;
mask = 0x2;
} // DOWN
if (key == 32) {
mask = 0x10;
} // FIRE
/* player 2 (TODO)
if (key == 65) { key = 65; mask2 = 0x4; } // LEFT
if (key == 87) { key = 87; mask2 = 0x1; } // UP
if (key == 68) { key = 68; mask2 = 0x8; } // RIGHT
if (key == 83) { key = 83; mask2 = 0x2; } // DOWN
if (key == 69) { mask2 = 0x10; } // FIRE
*/
if (key == 113) {
key = 0xf1;
} // F2
if (key == 115) {
key = 0xf3;
} // F4
if (key == 119) {
key = 0xf5;
} // F8
if (key == 121) {
key = 0xf7;
} // F10
switch (key) {
case 32:
mask = 0x10;
break;
case 37:
key = 0x8;
mask = 0x4;
break; // LEFT
case 38:
key = 0xb;
mask = 0x1;
break; // UP
case 39:
key = 0x9;
mask = 0x8;
break; // RIGHT
case 40:
key = 0xa;
mask = 0x2;
break; // DOWN
case 113:
key = 0xf1;
break; // F2
case 115:
key = 0xf3;
break; // F4
case 119:
key = 0xf5;
break; // F8
case 121:
key = 0xf7;
break; // F10
case 188:
key = flags & emu_1.KeyFlags.Shift ? 0x3c : 0x2e;
break; // < .
case 190:
key = flags & emu_1.KeyFlags.Shift ? 0x3e : 0x2c;
break; // > ,
case 191:
key = flags & emu_1.KeyFlags.Shift ? 0x3f : 0x2f;
break; // ? /
case 222:
key = flags & emu_1.KeyFlags.Shift ? 0x22 : 0x27;
break; // " '
case 219:
key = flags & emu_1.KeyFlags.Shift ? 0x7b : 0x5b;
break; // [
case 221:
key = flags & emu_1.KeyFlags.Shift ? 0x7d : 0x5d;
break; // ]
case 48:
if (flags & emu_1.KeyFlags.Shift)
key = 0x29;
break; // )
case 49:
if (flags & emu_1.KeyFlags.Shift)
key = 0x21;
break; // !
case 50:
if (flags & emu_1.KeyFlags.Shift)
key = 0x40;
break; // @
case 51:
if (flags & emu_1.KeyFlags.Shift)
key = 0x23;
break; // #
case 52:
if (flags & emu_1.KeyFlags.Shift)
key = 0x24;
break; // $
case 53:
if (flags & emu_1.KeyFlags.Shift)
key = 0x25;
break; // %
case 54:
if (flags & emu_1.KeyFlags.Shift)
key = 0x5e;
break; // ^
case 55:
if (flags & emu_1.KeyFlags.Shift)
key = 0x26;
break; // &
case 56:
if (flags & emu_1.KeyFlags.Shift)
key = 0x2a;
break; // *
case 57:
if (flags & emu_1.KeyFlags.Shift)
key = 0x28;
break; // (
case 59:
if (flags & emu_1.KeyFlags.Shift)
key = 0x3a;
break; // ;
case 61:
if (flags & emu_1.KeyFlags.Shift)
key = 0x2b;
break; // +
case 173:
key = flags & emu_1.KeyFlags.Shift ? 0x5f : 0x2d;
break; // _ -
}
if (flags & emu_1.KeyFlags.KeyDown) {
this.exports.machine_key_down(this.sys, key);
this.joymask0 |= mask;
@ -173,6 +249,97 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
}
this.exports.c64_joystick(this.sys, this.joymask0, this.joymask1);
}
getRasterY() {
return this.exports.machine_get_raster_line(this.sys);
}
getDebugStateOffset(index) {
var p = this.exports.machine_get_debug_pointer(this.sys, index);
return p - this.sys;
}
getDebugCategories() {
return ['CPU', 'ZPRAM', 'Stack', 'PLA', 'CIA', 'VIC', 'SID'];
}
getDebugInfo(category, state) {
switch (category) {
case 'PLA': {
let s = "";
let iomapped = state.pla[0];
let port = state.pla[3];
s += `$0000 - $9FFF RAM\n`;
s += `$A000 - $BFFF ${(port & 3) == 3 ? 'BASIC ROM' : 'RAM'}\n`;
s += `$C000 - $CFFF RAM\n`;
s += `$D000 - $DFFF ${iomapped ? 'I/O' : (port & 3) != 0 ? 'CHAR ROM' : 'RAM'}\n`;
s += `$E000 - $FFFF ${(port & 2) == 2 ? 'KERNAL ROM' : 'RAM'}\n`;
return s;
}
case 'CIA': {
let s = "";
for (let i = 0; i < 2; i++) {
let m = i ? state.cia2 : state.cia1;
s += `CIA ${i + 1}\n`;
s += ` A: Data ${(0, util_1.hex)(m[0])} DDR ${(0, util_1.hex)(m[1])} Input ${(0, util_1.hex)(m[2])}`;
s += ` Timer ${(0, util_1.hex)(m[10] + m[11] * 256, 4)}\n`;
s += ` B: Data ${(0, util_1.hex)(m[4])} DDR ${(0, util_1.hex)(m[5])} Input ${(0, util_1.hex)(m[6])}`;
s += ` Timer ${(0, util_1.hex)(m[10 + 10] + m[11 + 10] * 256, 4)}\n`;
//s += ` IMR ${hex(m[48])} ICR ${hex(m[50])}\n`
}
return s;
}
case 'VIC': {
let m = state.vic;
let s = '';
let vicbank = ((state.cia2[0] & 3) ^ 3) * 0x4000;
let charmem = vicbank + (state.vic[0x18] & 14) * 0x400;
let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;
let isbitmap = state.vic[0x11] & 0x20;
let ischar = (state.cia2[0] & 1) == 1 && (state.vic[0x18] & 12) == 4;
let rasterX = state.state[0xf4];
let rasterY = this.getRasterY();
s += 'Mode:';
if (state.vic[0x11] & 0x20)
s += ' BITMAP';
else
s += ' CHAR';
if (state.vic[0x16] & 0x10)
s += ' MULTICOLOR';
if (state.vic[0x11] & 0x40)
s += ' EXTENDED';
s += "\n";
s += `Raster: (${(0, util_1.lpad)(rasterX, 3)}, ${(0, util_1.lpad)(rasterY, 3)}) `;
s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;
s += "\n";
s += `VIC Bank: $${(0, util_1.hex)(vicbank, 4)} Scrn: $${(0, util_1.hex)(screen, 4)} `;
if (isbitmap)
s += `Bitmap: $${(0, util_1.hex)(charmem & 0xe000, 4)}`;
else if (ischar)
s += `Char: ROM $${(0, util_1.hex)(charmem, 4)}`;
else
s += `Char: $${(0, util_1.hex)(charmem, 4)}`;
s += "\n";
s += (0, emu_1.dumpRAM)(m, 0xd000, 64);
return s;
}
case 'SID': {
let m = state.sid;
let s = '';
s += (0, emu_1.dumpRAM)(m, 0xd400, 32);
return s;
}
}
}
setPaddleInput(controller, value) {
if (controller == 0)
this.lightpen_x = value;
if (controller == 1)
this.lightpen_y = value;
const x1 = 22;
const y1 = 36;
const x2 = 228;
const y2 = 220;
let x = (0, util_1.clamp)(0, 255, (this.lightpen_x - x1) / (x2 - x1) * 160 + 24);
let y = (0, util_1.clamp)(0, 255, (this.lightpen_y - y1) / (y2 - y1) * 200 + 50);
this.exports.machine_set_mouse(this.sys, x, y);
}
}
exports.C64_WASMMachine = C64_WASMMachine;
//# sourceMappingURL=c64.js.map

File diff suppressed because one or more lines are too long

View File

@ -55,8 +55,8 @@ class CPC_WASMMachine extends wasmplatform_1.BaseWASMMachine {
}
}
advanceFrame(trap) {
var scanline = this.exports.machine_get_raster_line(this.sys);
var clocks = Math.floor((this.numTotalScanlines - scanline) * 19965 / this.numTotalScanlines);
var scanline = this.getRasterY();
var clocks = Math.floor((this.numTotalScanlines - scanline) * (4000000 / 50) / this.numTotalScanlines);
var probing = this.probe != null;
if (probing)
this.exports.machine_reset_probe_buffer();
@ -65,6 +65,9 @@ class CPC_WASMMachine extends wasmplatform_1.BaseWASMMachine {
this.copyProbeData();
return clocks;
}
getRasterY() {
return this.exports.machine_get_raster_line(this.sys);
}
/*
z80_tick_t tick_cb; // 0
uint64_t bc_de_hl_fa; // 8

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SMS = exports.SG1000 = void 0;
exports.GameGear = exports.SMS = exports.SG1000 = void 0;
const vdp_z80_1 = require("./vdp_z80");
const emu_1 = require("../common/emu");
const util_1 = require("../common/util");
@ -24,7 +24,8 @@ var SG1000_KEYCODE_MAP = (0, emu_1.makeKeycodeMap)([
[emu_1.Keys.P2_RIGHT, 1, 0x2],
[emu_1.Keys.P2_A, 1, 0x4],
[emu_1.Keys.P2_B, 1, 0x8],
[emu_1.Keys.VK_BACK_SLASH, 1, 0x10], // reset
[emu_1.Keys.VK_BACK_SLASH, 1, 0x10],
[emu_1.Keys.VK_ENTER, 1, 0x80], // start/pause
]);
class SG1000 extends vdp_z80_1.BaseZ80VDPBasedMachine {
constructor() {
@ -50,33 +51,39 @@ class SG1000 extends vdp_z80_1.BaseZ80VDPBasedMachine {
getHCounter() { return 0; }
setMemoryControl(v) { }
setIOPortControl(v) { }
readIO(addr) {
switch (addr & 0xc1) {
case 0x40: return this.getVCounter();
case 0x41: return this.getHCounter();
case 0x80: return this.vdp.readData();
case 0x81: return this.vdp.readStatus();
case 0xc0: return this.inputs[0] ^ 0xff;
case 0xc1: return this.inputs[1] ^ 0xff;
}
return 0;
}
writeIO(addr, val) {
switch (addr & 0xc1) {
case 0x00: return this.setMemoryControl(val);
case 0x01: return this.setIOPortControl(val);
case 0x40:
case 0x41: return this.psg.setData(val);
case 0x80: return this.vdp.writeData(val);
case 0x81: return this.vdp.writeAddress(val);
}
}
newIOBus() {
return {
read: (addr) => {
addr &= 0xff;
//console.log('IO read', hex(addr,4));
switch (addr & 0xc1) {
case 0x40: return this.getVCounter();
case 0x41: return this.getHCounter();
case 0x80: return this.vdp.readData();
case 0x81: return this.vdp.readStatus();
case 0xc0: return this.inputs[0] ^ 0xff;
case 0xc1: return this.inputs[1] ^ 0xff;
}
return 0;
return this.readIO(addr);
},
write: (addr, val) => {
addr &= 0xff;
val &= 0xff;
//console.log('IO write', hex(addr,4), hex(val,2));
switch (addr & 0xc1) {
case 0x00: return this.setMemoryControl(val);
case 0x01: return this.setIOPortControl(val);
case 0x40:
case 0x41: return this.psg.setData(val);
case 0x80: return this.vdp.writeData(val);
case 0x81: return this.vdp.writeAddress(val);
}
this.writeIO(addr, val);
}
};
}
@ -204,4 +211,19 @@ class SMS extends SG1000 {
}
}
exports.SMS = SMS;
// https://segaretro.org/images/1/16/Sega_Game_Gear_Hardware_Reference_Manual.pdf
class GameGear extends SMS {
newVDP(frameData, cru, flicker) {
return new tms9918a_1.GameGearVDP(frameData, cru, flicker);
}
readIO(addr) {
switch (addr & 0xc1) {
case 0x00: return (~this.inputs[1] & 0x80) | 0x40;
case 0xdc: return this.inputs[0] ^ 0xff;
case 0xdd: return this.inputs[1] ^ 0xff;
}
return super.readIO(addr);
}
}
exports.GameGear = GameGear;
//# sourceMappingURL=sms.js.map

File diff suppressed because one or more lines are too long

View File

@ -71,8 +71,8 @@ class VIC20_WASMMachine extends wasmplatform_1.BaseWASMMachine {
}
advanceFrame(trap) {
// TODO: does this sync with VSYNC?
var scanline = this.exports.machine_get_raster_line(this.sys);
var clocks = Math.floor((this.numTotalScanlines - scanline) * (19656 + 295 + 32) / this.numTotalScanlines);
var scanline = this.getRasterY();
var clocks = Math.floor((this.numTotalScanlines - scanline) * 19656 / this.numTotalScanlines);
var probing = this.probe != null;
if (probing)
this.exports.machine_reset_probe_buffer();
@ -81,6 +81,9 @@ class VIC20_WASMMachine extends wasmplatform_1.BaseWASMMachine {
this.copyProbeData();
return clocks;
}
getRasterY() {
return this.exports.machine_get_raster_line(this.sys);
}
getCPUState() {
this.exports.machine_save_cpu_state(this.sys, this.cpustateptr);
var s = this.cpustatearr;

File diff suppressed because one or more lines are too long

382
gen/machine/williams.js Normal file
View File

@ -0,0 +1,382 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.WilliamsMachine = void 0;
const audio_1 = require("../common/audio");
const _6809_1 = require("../common/cpu/6809");
const devices_1 = require("../common/devices");
const emu_1 = require("../common/emu");
const INITIAL_WATCHDOG = 8;
const SCREEN_HEIGHT = 304;
class WilliamsMachine extends devices_1.BasicScanlineMachine {
constructor(isDefender) {
super();
this.isDefender = isDefender;
this.xtal = 12000000;
this.cpuFrequency = this.xtal / 3 / 4;
//cpuCyclesPerLine = 64;
this.cpuCyclesPerLine = 54; // TODO: becuse we swapped width and height
this.canvasWidth = 256;
this.numTotalScanlines = 304;
this.numVisibleScanlines = 304;
this.defaultROMSize = 0xc000;
this.rotate = -90;
this.sampleRate = 1;
this.ram = new Uint8Array(0xc000);
this.nvram = new Uint8Array(0x400);
this.rom = new Uint8Array(0xc000);
this.portsel = 0;
this.banksel = 0;
this.watchdog_counter = 0;
this.watchdog_enabled = false;
this.pia6821 = new Uint8Array(8);
this.blitregs = new Uint8Array(8);
this.palette = new Uint32Array(16);
this.screenNeedsRefresh = false;
this.cpuScale = 1;
this.waitCycles = 0;
this.palette.fill(0xff000000);
this.initBus(isDefender);
this.initInputs(isDefender);
this.initAudio();
this.initCPU();
}
initInputs(isDefender) {
var DEFENDER_KEYCODE_MAP = (0, emu_1.makeKeycodeMap)([
[emu_1.Keys.A, 4, 0x1],
[emu_1.Keys.RIGHT, 4, 0x2],
[emu_1.Keys.B, 4, 0x4],
[emu_1.Keys.VK_X, 4, 0x8],
[emu_1.Keys.P2_START, 4, 0x10],
[emu_1.Keys.START, 4, 0x20],
[emu_1.Keys.LEFT, 4, 0x40],
[emu_1.Keys.DOWN, 4, 0x80],
[emu_1.Keys.UP, 6, 0x1],
[emu_1.Keys.SELECT, 0, 0x4],
[emu_1.Keys.VK_7, 0, 0x1],
[emu_1.Keys.VK_8, 0, 0x2],
[emu_1.Keys.VK_9, 0, 0x8],
]);
var ROBOTRON_KEYCODE_MAP = (0, emu_1.makeKeycodeMap)([
[emu_1.Keys.P2_UP, 0, 0x1],
[emu_1.Keys.P2_DOWN, 0, 0x2],
[emu_1.Keys.P2_LEFT, 0, 0x4],
[emu_1.Keys.P2_RIGHT, 0, 0x8],
[emu_1.Keys.START, 0, 0x10],
[emu_1.Keys.P2_START, 0, 0x20],
[emu_1.Keys.UP, 0, 0x40],
[emu_1.Keys.DOWN, 0, 0x80],
[emu_1.Keys.LEFT, 2, 0x1],
[emu_1.Keys.RIGHT, 2, 0x2],
[emu_1.Keys.VK_7, 4, 0x1],
[emu_1.Keys.VK_8, 4, 0x2],
[emu_1.Keys.VK_6, 4, 0x4],
[emu_1.Keys.VK_9, 4, 0x8],
[emu_1.Keys.SELECT, 4, 0x10],
]);
var KEYCODE_MAP = isDefender ? DEFENDER_KEYCODE_MAP : ROBOTRON_KEYCODE_MAP;
//this.inputs.set(this.pia6821);
this.handler = (0, emu_1.newKeyboardHandler)(this.pia6821, KEYCODE_MAP);
}
initBus(isDefender) {
var ioread_defender = (0, emu_1.newAddressDecoder)([
[0x400, 0x5ff, 0x1ff, (a) => { return this.nvram[a]; }],
[0x800, 0x800, 0, (a) => { return this.scanline; }],
[0xc00, 0xc07, 0x7, (a) => { return this.pia6821[a]; }],
[0x0, 0xfff, 0, (a) => { }],
]);
var iowrite_defender = (0, emu_1.newAddressDecoder)([
[0x0, 0xf, 0xf, this.setPalette.bind(this)],
[0x3fc, 0x3ff, 0, (a, v) => { if (v == 0x38)
this.watchdog_counter = INITIAL_WATCHDOG; this.watchdog_enabled = true; }],
[0x400, 0x5ff, 0x1ff, (a, v) => { this.nvram[a] = v; }],
[0xc02, 0xc02, 0x1, (a, v) => { if (this.worker)
this.worker.postMessage({ command: v & 0x3f }); }],
[0xc00, 0xc07, 0x7, (a, v) => { this.pia6821[a] = v; }],
[0x0, 0xfff, 0, (a, v) => { }],
]);
var memread_defender = (0, emu_1.newAddressDecoder)([
[0x0000, 0xbfff, 0xffff, (a) => { return this.ram[a]; }],
[0xc000, 0xcfff, 0x0fff, (a) => {
switch (this.banksel) {
case 0: return ioread_defender(a);
case 1: return this.rom[a + 0x3000];
case 2: return this.rom[a + 0x4000];
case 3: return this.rom[a + 0x5000];
case 7: return this.rom[a + 0x6000];
default: return 0; // TODO: error light
}
}],
[0xd000, 0xffff, 0xffff, (a) => { return this.rom ? this.rom[a - 0xd000] : 0; }],
]);
var memwrite_defender = (0, emu_1.newAddressDecoder)([
[0x0000, 0x97ff, 0, this.write_display_byte.bind(this)],
[0x9800, 0xbfff, 0, (a, v) => { this.ram[a] = v; }],
[0xc000, 0xcfff, 0x0fff, iowrite_defender.bind(this)],
[0xd000, 0xdfff, 0, (a, v) => { this.banksel = v & 0x7; }],
[0, 0xffff, 0, (a, v) => { }],
]);
// Robotron, Joust, Bubbles, Stargate
var ioread_robotron = (0, emu_1.newAddressDecoder)([
[0x804, 0x807, 0x3, (a) => { return this.pia6821[a]; }],
[0x80c, 0x80f, 0x3, (a) => { return this.pia6821[a + 4]; }],
[0xb00, 0xbff, 0, (a) => { return this.scanline; }],
[0xc00, 0xfff, 0x3ff, (a) => { return this.nvram[a]; }],
[0x0, 0xfff, 0, (a) => { }],
]);
var iowrite_robotron = (0, emu_1.newAddressDecoder)([
[0x0, 0xf, 0xf, this.setPalette.bind(this)],
[0x80c, 0x80c, 0xf, (a, v) => { if (this.worker)
this.worker.postMessage({ command: v }); }],
//[0x804, 0x807, 0x3, function(a,v) { console.log('iowrite',a); }], // TODO: sound
//[0x80c, 0x80f, 0x3, function(a,v) { console.log('iowrite',a+4); }], // TODO: sound
[0x900, 0x9ff, 0, (a, v) => { this.banksel = v & 0x1; }],
[0xa00, 0xa07, 0x7, this.setBlitter.bind(this)],
[0xbff, 0xbff, 0, (a, v) => { if (v == 0x39) {
this.watchdog_counter = INITIAL_WATCHDOG;
this.watchdog_enabled = true;
} }],
[0xc00, 0xfff, 0x3ff, (a, v) => { this.nvram[a] = v; }],
//[0x0, 0xfff, 0, function(a,v) { console.log('iowrite',hex(a),hex(v)); }],
]);
var memread_robotron = (0, emu_1.newAddressDecoder)([
[0x0000, 0x8fff, 0xffff, (a) => { return this.banksel ? this.rom[a] : this.ram[a]; }],
[0x9000, 0xbfff, 0xffff, (a) => { return this.ram[a]; }],
[0xc000, 0xcfff, 0x0fff, ioread_robotron],
[0xd000, 0xffff, 0xffff, (a) => { return this.rom ? this.rom[a - 0x4000] : 0; }],
]);
var memwrite_robotron = (0, emu_1.newAddressDecoder)([
[0x0000, 0x97ff, 0, this.write_display_byte.bind(this)],
[0x9800, 0xbfff, 0, (a, v) => { this.ram[a] = v; }],
[0xc000, 0xcfff, 0x0fff, iowrite_robotron.bind(this)],
//[0x0000, 0xffff, 0, function(a,v) { console.log(hex(a), hex(v)); }],
]);
var memread_williams = isDefender ? memread_defender : memread_robotron;
var memwrite_williams = isDefender ? memwrite_defender : memwrite_robotron;
this.membus = {
read: memread_williams,
write: memwrite_williams,
};
this.membus = this.probeMemoryBus(this.membus);
this.readAddress = this.membus.read;
}
initAudio() {
this.master = new audio_1.MasterAudio();
this.worker = new Worker("./src/common/audio/z80worker.js");
let workerchannel = new audio_1.WorkerSoundChannel(this.worker);
this.master.master.addChannel(workerchannel);
}
initCPU() {
this.rom = new Uint8Array(this.defaultROMSize);
this.cpu = this.newCPU(this.membus);
//this.connectCPUMemoryBus(this);
}
newCPU(membus) {
var cpu = Object.create((0, _6809_1.CPU6809)());
cpu.init(membus.write, membus.read, 0);
return cpu;
}
// d1d6 ldu $11 / beq $d1ed
setPalette(a, v) {
// RRRGGGBB
var color = 0xff000000 | ((v & 7) << 5) | (((v >> 3) & 7) << 13) | (((v >> 6) << 22));
if (color != this.palette[a]) {
this.palette[a] = color;
this.screenNeedsRefresh = true;
}
}
write_display_byte(a, v) {
this.ram[a] = v;
this.drawDisplayByte(a, v);
if (this.displayPCs)
this.displayPCs[a] = this.cpu.getPC(); // save program counter
}
drawDisplayByte(a, v) {
var ofs = ((a & 0xff00) << 1) | ((a & 0xff) ^ 0xff);
this.pixels[ofs] = this.palette[v >> 4];
this.pixels[ofs + 256] = this.palette[v & 0xf];
}
setBlitter(a, v) {
if (a) {
this.blitregs[a] = v;
}
else {
var cycles = this.doBlit(v);
this.waitCycles -= cycles * this.cpuScale; // wait CPU cycles
}
}
doBlit(flags) {
//console.log(hex(flags), blitregs);
flags &= 0xff;
var offs = SCREEN_HEIGHT - this.blitregs[7];
var sstart = (this.blitregs[2] << 8) + this.blitregs[3];
var dstart = (this.blitregs[4] << 8) + this.blitregs[5];
var w = this.blitregs[6] ^ 4; // blitter bug fix
var h = this.blitregs[7] ^ 4;
if (w == 0)
w++;
if (h == 0)
h++;
if (h == 255)
h++;
var sxinc = (flags & 0x1) ? 256 : 1;
var syinc = (flags & 0x1) ? 1 : w;
var dxinc = (flags & 0x2) ? 256 : 1;
var dyinc = (flags & 0x2) ? 1 : w;
var pixdata = 0;
for (var y = 0; y < h; y++) {
var source = sstart & 0xffff;
var dest = dstart & 0xffff;
for (var x = 0; x < w; x++) {
var data = this.membus.read(source);
if (flags & 0x20) {
pixdata = (pixdata << 8) | data;
this.blit_pixel(dest, (pixdata >> 4) & 0xff, flags);
}
else {
this.blit_pixel(dest, data, flags);
}
source += sxinc;
source &= 0xffff;
dest += dxinc;
dest &= 0xffff;
}
if (flags & 0x2)
dstart = (dstart & 0xff00) | ((dstart + dyinc) & 0xff);
else
dstart += dyinc;
if (flags & 0x1)
sstart = (sstart & 0xff00) | ((sstart + syinc) & 0xff);
else
sstart += syinc;
}
return w * h * (2 + ((flags & 0x4) >> 2)); // # of memory accesses
}
blit_pixel(dstaddr, srcdata, flags) {
var curpix = dstaddr < 0xc000 ? this.ram[dstaddr] : this.membus.read(dstaddr);
var solid = this.blitregs[1];
var keepmask = 0xff; //what part of original dst byte should be kept, based on NO_EVEN and NO_ODD flags
//even pixel (D7-D4)
if ((flags & 0x8) && !(srcdata & 0xf0)) { //FG only and src even pixel=0
if (flags & 0x80)
keepmask &= 0x0f; // no even
}
else {
if (!(flags & 0x80))
keepmask &= 0x0f; // not no even
}
//odd pixel (D3-D0)
if ((flags & 0x8) && !(srcdata & 0x0f)) { //FG only and src odd pixel=0
if (flags & 0x40)
keepmask &= 0xf0; // no odd
}
else {
if (!(flags & 0x40))
keepmask &= 0xf0; // not no odd
}
curpix &= keepmask;
if (flags & 0x10) // solid bit
curpix |= (solid & ~keepmask);
else
curpix |= (srcdata & ~keepmask);
if (dstaddr < 0x9800) // can cause recursion otherwise
this.membus.write(dstaddr, curpix);
}
startScanline() {
this.audio && this.audioadapter && this.audioadapter.generate(this.audio);
// TODO: line-by-line
if (this.screenNeedsRefresh && this.scanline == 0) {
for (var i = 0; i < 0x9800; i++)
this.drawDisplayByte(i, this.ram[i]);
this.screenNeedsRefresh = false;
}
if (this.scanline == 0 && this.watchdog_enabled && this.watchdog_counter-- <= 0) {
console.log("WATCHDOG FIRED, PC =", this.cpu.getPC().toString(16)); // TODO: alert on video
// TODO: this.breakpointHit(cpu.T());
this.reset();
}
}
drawScanline() {
// interrupts happen every 1/4 of the screen
let sl = this.scanline;
if (sl == 0 || sl == 0x3c || sl == 0xbc || sl == 0xfc) {
if (!this.isDefender || this.pia6821[7] == 0x3c) { // TODO?
if (this.cpu.interrupt)
this.cpu.interrupt();
if (this.cpu.requestInterrupt)
this.cpu.requestInterrupt();
}
}
}
read(a) {
return this.membus.read(a);
}
write(a, v) {
this.membus.write(a, v);
}
readConst(a) {
if (a >= 0xc000 && a <= 0xcbff)
return 0xff;
else
return this.membus.read(a); // TODO
}
reset() {
super.reset();
this.watchdog_counter = INITIAL_WATCHDOG;
this.watchdog_enabled = false;
this.banksel = 1;
}
loadSoundROM(data) {
console.log("loading sound ROM " + data.length + " bytes");
var soundrom = (0, emu_1.padBytes)(data, 0x4000);
this.worker.postMessage({ rom: soundrom });
}
loadROM(data) {
if (data.length > 2) {
if (this.isDefender) {
this.loadSoundROM(data.slice(0x6800));
data = this.rom.slice(0, 0x6800);
}
else if (data.length > 0xc000) {
this.loadSoundROM(data.slice(0xc000));
data = this.rom.slice(0, 0xc000);
}
else if (data.length > 0x9000 && data[0x9000]) {
this.loadSoundROM(data.slice(0x9000));
}
data = (0, emu_1.padBytes)(data, 0xc000);
}
super.loadROM(data);
}
loadState(state) {
this.cpu.loadState(state.c);
this.ram.set(state.ram);
this.nvram.set(state.nvram);
this.pia6821.set(state.inputs);
this.blitregs.set(state.blt);
this.watchdog_counter = state.wdc;
this.banksel = state.bs;
this.portsel = state.ps;
}
saveState() {
return {
c: this.cpu.saveState(),
ram: this.ram.slice(0),
nvram: this.nvram.slice(0),
inputs: this.pia6821.slice(0),
blt: this.blitregs.slice(0),
wdc: this.watchdog_counter,
bs: this.banksel,
ps: this.portsel,
};
}
loadControlsState(state) {
this.pia6821.set(state.inputs);
}
saveControlsState() {
return {
inputs: this.pia6821.slice(0),
};
}
}
exports.WilliamsMachine = WilliamsMachine;
//# sourceMappingURL=williams.js.map

File diff suppressed because one or more lines are too long

View File

@ -13,7 +13,7 @@ class ZX_WASMMachine extends wasmplatform_1.BaseWASMMachine {
reset() {
super.reset();
// advance bios
this.exports.machine_exec(this.sys, 500000); // TODO?
this.exports.machine_exec(this.sys, 2000000);
// load rom (Z80 header: https://worldofspectrum.org/faq/reference/z80format.htm)
if (this.romptr && this.romlen) {
// TODO
@ -35,7 +35,7 @@ class ZX_WASMMachine extends wasmplatform_1.BaseWASMMachine {
var probing = this.probe != null;
if (probing)
this.exports.machine_reset_probe_buffer();
var clocks = super.advanceFrameClock(trap, Math.floor(1000000 / 50)); // TODO: use ticks, not msec
var clocks = super.advanceFrameClock(trap, Math.floor(3500000 / 50));
if (probing)
this.copyProbeData();
return clocks;

View File

@ -1 +1 @@
{"version":3,"file":"zx.js","sourceRoot":"","sources":["../../src/machine/zx.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"zx.js","sourceRoot":"","sources":["../../src/machine/zx.ts"],"names":[],"mappings":"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"}

View File

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

View File

@ -1,4 +1,4 @@
import{b as r}from"./chunk-SYHXEOUM.js";import{H as x,d as U,e as Q}from"./chunk-QTJUNOGR.js";import"./chunk-5B4VPQ4V.js";import{I as T,N as t,U as A,X as H,k as E,l as O}from"./chunk-ZDSSTLWD.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-AUJWOUYJ.js";import{I as x,d as U,e as Q}from"./chunk-OKJZYBWI.js";import"./chunk-HKPUADCX.js";import{J as T,O as t,V as A,Y as H,k as E,l as O}from"./chunk-UWX4LVLA.js";import"./chunk-5XVCUSSZ.js";var n=H([[A.UP,0,1],[A.DOWN,0,2],[A.LEFT,0,4],[A.RIGHT,0,8],[A.A,0,16],[A.B,0,32],[A.P2_UP,1,1],[A.P2_DOWN,1,2],[A.P2_LEFT,1,4],[A.P2_RIGHT,1,8],[A.P2_A,1,16],[A.P2_B,1,32],[A.ANYKEY,2,0]]),o=0;var w=16,a=[A.VK_7,A.VK_6,A.VK_5,A.VK_4,A.VK_3,A.VK_2,A.VK_1,A.VK_0,A.VK_SEMICOLON,A.VK_CLOSE_BRACKET,A.VK_OPEN_BRACKET,A.VK_BACK_SLASH,A.VK_EQUALS,A.VK_MINUS,A.VK_9,A.VK_8,A.VK_B,A.VK_A,null,A.VK_SLASH,A.VK_PERIOD,A.VK_COMMA,A.VK_ACUTE,A.VK_QUOTE,A.VK_J,A.VK_I,A.VK_H,A.VK_G,A.VK_F,A.VK_E,A.VK_D,A.VK_C,A.VK_R,A.VK_Q,A.VK_P,A.VK_O,A.VK_N,A.VK_M,A.VK_L,A.VK_K,A.VK_Z,A.VK_Y,A.VK_X,A.VK_W,A.VK_V,A.VK_U,A.VK_T,A.VK_S,A.VK_F3,A.VK_F2,A.VK_F1,null,A.VK_CAPS_LOCK,null,A.VK_CONTROL,A.VK_SHIFT,A.VK_ENTER,null,A.VK_BACK_SPACE,null,A.VK_TAB,A.VK_ESCAPE,A.VK_F5,A.VK_F4,A.VK_RIGHT,A.VK_DOWN,A.VK_UP,A.VK_LEFT,A.VK_DELETE,A.VK_INSERT,A.VK_HOME,A.VK_SPACE,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],i=class extends r{constructor(){super();this.numVisibleScanlines=240;this.defaultROMSize=32768;this.ram=new Uint8Array(65536);this.slotmask=0;this.ppi_c=0;this.read=s=>{let e=s>>14<<1,D=this.slotmask>>e&3,g=this.slots[D];return g?g.read(s):0};this.write=(s,e)=>{let D=s>>14<<1,g=this.slotmask>>D&3,B=this.slots[g];B&&B.write(s,e)};this.init(this,this.newIOBus(),new Q(new U)),this.bios=new E().decode(O(atob(l))),this.bios[3541]=0,this.bios[3542]=0,this.bios[3543]=0,this.slots=[{read:s=>this.bios[s]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.rom[s-16384]|0,write:(s,e)=>{}},{read:s=>this.ram[s]|0,write:(s,e)=>{this.ram[s]=e}}]}getKeyboardMap(){return n}getKeyboardFunction(){return(s,e,D,g)=>{for(var B=a,M=0;M<B.length;M++)if(B[M]&&B[M].c==e){let R=M>>3,f=7-(M&7);g&t.KeyDown?this.inputs[w+R]|=1<<f:g&t.KeyUp&&(this.inputs[w+R]&=~(1<<f));break}}}newIOBus(){return{read:s=>{switch(s&=255,s){case 152:return this.vdp.readData();case 153:return this.vdp.readStatus();case 162:return this.psg.currentRegister()==14?~this.inputs[o]:this.psg.readData();case 168:return this.slotmask;case 169:return~this.inputs[w+(this.ppi_c&15)];case 170:return this.ppi_c}return 0},write:(s,e)=>{switch(s&=255,e&=255,s){case 152:this.vdp.writeData(e);break;case 153:this.vdp.writeAddress(e);break;case 168:this.slotmask=e;break;case 170:this.ppi_c=e;break;case 171:let D=e>>1&7;this.ppi_c=this.ppi_c&~(1<<D)|(e&1)<<D;break;case 160:this.psg.selectRegister(e);break;case 161:this.psg.setData(e);break;case 252:case 253:case 254:case 255:break}}}}vdpInterrupt(){this.probe.logInterrupt(255),this.cpu.interrupt(255)}loadState(s){super.loadState(s),this.slotmask=s.slotmask,this.ppi_c=s.ppi_c,this.psg.selectRegister(s.psgRegister)}saveState(){var s=super.saveState();return s.slotmask=this.slotmask,s.ppi_c=this.ppi_c,s.psgRegister=this.psg.currentRegister(),s}reset(){super.reset(),this.slotmask=0,this.ppi_c=0}resetInputs(){this.inputs.fill(0)}},l=`
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-5RZY6MI3.js.map
//# sourceMappingURL=msx-AEGYRQBR.js.map

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -22,7 +22,7 @@ const ATARI8_KEYCODE_MAP = (0, emu_1.makeKeycodeMap)([
[emu_1.Keys.VK_ENTER, 0, 0],
]);
const Atari800_MemoryMap = { main: [
{ name: 'RAM', start: 0x0, size: 0x10000, type: 'ram' },
{ name: 'RAM', start: 0x0, size: 0xc000, type: 'ram' },
{ name: 'Left Cartridge ROM', start: 0xa000, size: 0x2000, type: 'rom' },
{ name: 'GTIA', start: 0xd000, size: 0x20, type: 'io' },
{ name: 'POKEY', start: 0xd200, size: 0x10, type: 'io' },
@ -30,7 +30,7 @@ const Atari800_MemoryMap = { main: [
{ name: 'ANTIC', start: 0xd400, size: 0x10, type: 'io' },
{ name: 'Cartridge Control Line', start: 0xd600, size: 0x100, type: 'io' },
{ name: 'ROM', start: 0xd800, size: 0x800, type: 'rom' },
{ name: 'ATARI Character Set', start: 0xe000, size: 0x400, type: 'rom' },
{ name: 'Character Set', start: 0xe000, size: 0x400, type: 'rom' },
{ name: 'ROM', start: 0xe400, size: 0x1c00, type: 'rom' },
] };
function getToolForFilename_Atari8(fn) {
@ -141,29 +141,6 @@ class Atari5200MAMEPlatform extends Atari8MAMEPlatform {
start() {
}
}
///
// Altirra Superkernel ROM (http://www.virtualdub.org/altirra.html) compiled with MADS
const ALTIRRA_SUPERKERNEL_LZG = `
TFpHAAAIAAAABJGU01hQARcZHSUAACUFGCUBABgAAGZmZh2IZv9mJUEAGD5gPAZ8HVBsGDBmRgAcNhw4
b2Y7HagdoA4cGBgcDgAAcDgYGDhwHSA8/zwdehgYfhkFGh1EMCWhfhkGYx0IAAAGDBgwYEAAADxmbnZm
PB0MHTgYHRs8Zh0RJeF+DBgMHVAMHDxsfgwdCGB8Bh1IPGB8ZiXifh15MB1oPB2IPGY+Bgw4GQRVGQNx
JeMwHV4YDAYZBHclQWAdBhgwYBkEYBkC6Dxmbm5gPh0nHT9+ZgAAfGZ8ZmZ8HVBgYBkCUHhsZmZseBkD
eGBgHXwl4h04PmBgbmYdMB1uGSIrfhkiOR0YBiUBHXAdLR0zAAAdJR2wY3d/a2NjHRB2fn5uHRA8HS4d
YBkCZhkCSB1IbDYdyB1wPGA8BgYdGBkDUBkkkGZmfiXkPB0IY2Nrf3cZAkhmPB0zJeMdoH4ZAtcdIB4d
bx4AAEAZAuoGAAB4HUh4AAAIHDYdLiUF/wAANn9/PhwIGSLHHx8lgQMlBR0D+PgZRA/4+Bkk5CXjAwcO
HDhw4MDA4HA4HA4HAwEDBw8fP3//HRgADyUBgMDg8Pj8/v8dRB1M8CUBJeL/HZolBh3GHZQcHHd3CBwd
RxkDeBkGFR0D//8diDx+fn48GQUu///AJQUdhxkjEx0gGQVEJQIZA8AdCHhgeGB+GQL4GDwZIjoZA0l+
GSIwGDB+MBlDFwx+DCXjPH4dkAA8Bj4ZIshgGUJYfB1IYGBgPBkiyD5mHVAAPGZ+HUgOGD4ZBJ8dTwZ8
HehmAAAYADgYGB1oGSP6PB0QbBkj+B0OHZAAZn9/axkich1nHRAZI+kdUBkm+RkDSAYdSBlDWAAZY3EA
ABliPxgOHXglARkCgBkl+ABja38+Nh1IPBgZY2kdVwwZQqEZZDgZAtAYPBljzyUCAH54fG5mBgAIGDh4
OBgIABAYHB4cGBAAbAACSKkgLA7o0A1FAI0O6KUlgmwQAjAPqYAZCQkMAnAPqUAZCQkIAmodLfAZCi0S
AmokAPASGQ5EFAKpARkODBYCKhkOCxgZEAsaAopIur0BASkQ0ANsDgJoqmhA////aKgdQUiKSJhI5gLQ
COYBpQQwAuYEpQPQ5aUFjQLUpQaNA9SlB40A1KAAJAQQAqQBogiYVQidEsDKEPeiB70A6JURyhD4jQvo
bAQC////GQJBrQnoSikPqr0T/WwKAv8LAAoOCQgHDQYFBAwDAgEsD9SND9QQA2wGAmwCAnjYov+arf2/
yf/QA2z+v6IAqQCVAJ0AwJ0A1J0A6OjQ8qn4jQnUogu9lf6dAAIZAmtPvc39nQAQHUMTvei/nVAdQ6kQ
hQypD4UNqQCFDiVhDyVhEKkEjRvAogq9wh0nIB1cIoUHqcCNDtQdFQWpIIUGqQKND+ipwIUZIhapeMUC
0Pxs/r9wcHBCABCCB0HC/SFsdGlycmEAFRIQEAAyLy0AK2VybmVsGWpyJQMub3cAcGxheWluZxoZDxUZ
a58lHiUcJQkD/Lj8svyh/gL9svxI5gzQBBkiJhkj9SUfJR8lHiUBI/0x/QD8`;
/// WASM Atari8 platform
class Atari8WASMPlatform extends baseplatform_1.Base6502MachinePlatform {
constructor() {
@ -189,8 +166,55 @@ class Atari8WASMPlatform extends baseplatform_1.Base6502MachinePlatform {
}
class Atari800WASMPlatform extends Atari8WASMPlatform {
}
////
class Atari800Platform extends baseplatform_1.Base6502MachinePlatform {
constructor() {
super(...arguments);
this.getToolForFilename = getToolForFilename_Atari8;
this.biosPath = 'res/altirra/kernel.rom';
}
newMachine() { return new atari8_1.Atari800(); }
getPresets() { return Atari800_PRESETS; }
getDefaultExtension() { return ".c"; }
;
readAddress(a) { return this.machine.readConst(a); }
getMemoryMap() { return Atari800_MemoryMap; }
showHelp() {
// TODO
}
getROMExtension(rom) {
// TODO
if (rom && rom[0] == 0x01 && rom[1] == 0x08)
return ".prg";
else
return ".bin";
}
async start() {
let bios = await this.loadKernel();
await super.start();
this.machine.loadBIOS(bios);
}
async loadKernel() {
var biosResponse = await fetch(this.biosPath);
if (biosResponse.status == 200 || biosResponse.size) {
var biosBinary = await biosResponse.arrayBuffer();
return new Uint8Array(biosBinary);
}
else
throw new Error('could not load BIOS file');
}
}
class Atari5200Platform extends Atari800Platform {
constructor() {
super(...arguments);
this.biosPath = 'res/altirra/superkernel.rom';
}
newMachine() { return new atari8_1.Atari5200(); }
}
///
emu_1.PLATFORMS['atari8-800xl.mame'] = Atari800MAMEPlatform;
emu_1.PLATFORMS['atari8-800.xlmame'] = Atari800MAMEPlatform;
emu_1.PLATFORMS['atari8-5200.mame'] = Atari5200MAMEPlatform;
emu_1.PLATFORMS['atari8-800xl'] = Atari800WASMPlatform;
emu_1.PLATFORMS['atari8-800.xlwasm'] = Atari800WASMPlatform;
emu_1.PLATFORMS['atari8-800'] = Atari800Platform;
emu_1.PLATFORMS['atari8-5200'] = Atari5200Platform;
//# sourceMappingURL=atari8.js.map

File diff suppressed because one or more lines are too long

View File

@ -6,27 +6,38 @@ const emu_1 = require("../common/emu");
const mameplatform_1 = require("../common/mameplatform");
const C64_PRESETS = [
{ id: 'hello.dasm', name: 'Hello World (ASM)' },
{ id: 'eliza.c', name: 'Eliza (C)' },
{ id: 'tgidemo.c', name: 'TGI Graphics Demo (C)' },
{ id: 'upandaway.c', name: 'Up, Up and Away (C)' },
{ id: 'joymove.c', name: 'Joystick Movement (C)' },
{ id: 'siegegame.c', name: 'Siege Game (C)' },
{ id: 'scroll1.c', name: 'Scrolling 1 (C)' },
{ id: 'scroll2.c', name: 'Scrolling 2 (C)' },
{ id: 'scroll3.c', name: 'Scrolling 3 (C)' },
{ id: 'scroll4.c', name: 'Scrolling 4 (C)' },
{ id: 'scroll5.c', name: 'Scrolling 5 (C)' },
{ id: 'climber.c', name: 'Climber Game (C)' },
{ id: 'multilines.c', name: 'Multicolor Lines+Flood Fill (C)' },
{ id: 'sidtune.dasm', name: 'SID Tune (ASM)' },
{ id: 'musicplayer.c', name: 'Music Player (C)' },
{ 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:'mandel.c', name:'Mandelbrot Fractal'},
{ id: 'musicplayer.c', name: 'Music Player' },
//{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},
{ id: 'siddemo.c', name: 'SID Player Demo' },
{ id: 'climber.c', name: 'Climber Game' },
];
const C64_MEMORY_MAP = { main: [
{ name: '6510 Registers', start: 0x0, size: 0x2, type: 'io' },
{ name: 'BIOS Reserved', start: 0x200, size: 0xa7 },
{ name: 'Default Screen RAM', start: 0x400, size: 1024, type: 'ram' },
//{name:'RAM', start:0x2, size:0x7ffe,type:'ram'},
{ name: 'Cartridge ROM', start: 0x8000, size: 0x2000, type: 'rom' },
{ name: 'BASIC ROM', start: 0xa000, size: 0x2000, type: 'rom' },
{ name: 'RAM', start: 0xc000, size: 0x1000, type: 'ram' },
{ name: 'Upper RAM', start: 0xc000, size: 0x1000, type: 'ram' },
{ name: 'Character ROM', start: 0xd000, size: 0x1000, type: 'rom' },
{ name: 'VIC-II I/O', start: 0xd000, size: 0x0400, type: 'io' },
{ name: 'SID', start: 0xd400, size: 0x0400, type: 'io' },
{ name: 'Color RAM', start: 0xd800, size: 0x0400, type: 'io' },

View File

@ -1 +1 @@
{"version":3,"file":"c64.js","sourceRoot":"","sources":["../../src/platform/c64.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"c64.js","sourceRoot":"","sources":["../../src/platform/c64.ts"],"names":[],"mappings":"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"}

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