mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2026-04-20 15:16:38 +00:00
Deploying to gh-pages from @ sehugg/8bitworkshop@cd245c5b84 🚀
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
import{a as M}from"./chunk-BFRMBEKQ.js";import{B as S,I as _,r as g,y as b}from"./chunk-ARTNMEGN.js";import{J as c,O as a,V as x,a as l,g as o,v as p}from"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.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]==196&&(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)if(this.romarr[6]==158){for(var s=0,t=0;t<5;t++){var e=this.romarr[7+t];if(e==155||e==0)break;s=s*10+(e&15)}this.prgstart=s,console.log("SYS",s,o(s))}else this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("RUN",this.prgstart,o(this.prgstart));if(this.prgstart<32768){this.exports.machine_exec(this.sys,25e4);for(var i="\rSYS "+this.prgstart,t=0;t<i.length;t++){var r=i.charCodeAt(t);this.exports.machine_exec(this.sys,3e4),this.exports.machine_key_down(this.sys,r),this.exports.machine_exec(this.sys,3e4),this.exports.machine_key_up(this.sys,r),this.exports.machine_exec(this.sys,1)}this.exports.machine_key_down(this.sys,13),this.exports.machine_exec(this.sys,1);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 n=this.romarr[4]+this.romarr[5]*256,t=0;t<15e4&&this.getPC()!=n;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),n=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(n,n+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)}}getRasterX(){return this.statearr[244]}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getRasterCanvasPosition(){return{x:this.getRasterX()*392/63,y:this.getRasterY()-14}}getDebugStateOffset(e){var s=this.exports.machine_get_debug_pointer(this.sys,e);return s-this.sys}getDebugCategories(){return["CPU","ZPRAM","Stack","PLA","CIA","VIC","SID"]}getDebugInfo(e,s){switch(e){case"PLA":{let t="",i=s.pla[0],r=s.pla[3];return t+=`$0000 - $9FFF RAM
|
||||
import{a as M}from"./chunk-BFRMBEKQ.js";import{B as S,I as _,r as g,y as b}from"./chunk-ARTNMEGN.js";import{J as c,O as a,V as x,a as l,g as o,v as p}from"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.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]==196&&(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)if(this.romarr[6]==158){for(var s=0,t=0;t<5;t++){var e=this.romarr[7+t];if(e==155||e==0)break;s=s*10+(e&15)}this.prgstart=s,console.log("SYS",s,o(s))}else this.prgstart=this.romarr[2]+(this.romarr[3]<<8)+2,console.log("RUN",this.prgstart,o(this.prgstart));if(this.prgstart<32768){this.exports.machine_exec(this.sys,25e4);for(var i="\rSYS "+this.prgstart,t=0;t<i.length;t++){var r=i.charCodeAt(t);this.exports.machine_exec(this.sys,3e4),this.exports.machine_key_down(this.sys,r),this.exports.machine_exec(this.sys,3e4),this.exports.machine_key_up(this.sys,r),this.exports.machine_exec(this.sys,1)}this.exports.machine_key_down(this.sys,13),this.exports.machine_exec(this.sys,1);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 n=this.romarr[4]+this.romarr[5]*256,t=0;t<15e4&&this.getPC()!=n;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),n=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(n,n+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=r=16;break;case 37:e=8,i=r=4;break;case 38:e=11,i=r=1;break;case 39:e=9,i=r=8;break;case 40:e=10,i=r=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)}}getRasterX(){return this.statearr[244]}getRasterY(){return this.exports.machine_get_raster_line(this.sys)}getRasterCanvasPosition(){return{x:this.getRasterX()*392/63,y:this.getRasterY()-14}}getDebugStateOffset(e){var s=this.exports.machine_get_debug_pointer(this.sys,e);return s-this.sys}getDebugCategories(){return["CPU","ZPRAM","Stack","PLA","CIA","VIC","SID"]}getDebugInfo(e,s){switch(e){case"PLA":{let t="",i=s.pla[0],r=s.pla[3];return t+=`$0000 - $9FFF RAM
|
||||
`,t+=`$A000 - $BFFF ${(r&3)==3?"BASIC ROM":"RAM"}
|
||||
`,t+=`$C000 - $CFFF RAM
|
||||
`,t+=`$D000 - $DFFF ${i?"I/O":(r&3)!=0?"CHAR ROM":"RAM"}
|
||||
@@ -11,4 +11,4 @@ import{a as M}from"./chunk-BFRMBEKQ.js";import{B as S,I as _,r as g,y as b}from"
|
||||
`,i+=`VIC Bank: $${o(r,4)} Scrn: $${o(m,4)} `,h?i+=`Bitmap: $${o(n&57344,4)}`:C?i+=`Char: ROM $${o(n,4)}`:i+=`Char: $${o(n,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,n=220,m=p(0,255,(this.lightpen_x-t)/(r-t)*160+24),h=p(0,255,(this.lightpen_y-i)/(n-i)*200+50);this.exports.machine_set_mouse(this.sys,m,h)}};var y=[{id:"helloc.c",name:"Hello World",category:"C"},{id:"screen_ram.c",name:"Screen RAM"},{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:"test_setirq.c",name:"Raster Interrupts"},{id:"test_display_list.c",name:"Raster IRQ Library"},{id:"scrolling_text.c",name:"Big Scrolling Text"},{id:"side_scroller.c",name:"Side-Scrolling Game"},{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:"fullscrollgame.c",name:"Full-Scrolling Game"},{id:"test_multiplex.c",name:"Sprite Retriggering"},{id:"test_multispritelib.c",name:"Sprite Multiplexing Library"},{id:"mcbitmap.c",name:"Multicolor Bitmap Mode"},{id:"testlz4.c",name:"LZ4 Bitmap Compression"},{id:"musicplayer.c",name:"Music Player"},{id:"siddemo.c",name:"SID Player Demo"},{id:"digisound.c",name:"Digi Sound Player"},{id:"climber.c",name:"Climber Game"},{id:"test_border_sprites.c",name:"Sprites in the Borders"},{id:"sprite_stretch.c",name:"Sprite Stretching"},{id:"linecrunch.c",name:"Linecrunch"},{id:"fld.c",name:"Flexible Line Distance"},{id:"plasma.c",name:"Plasma Demo"},{id:"23matches.c",name:"23 Matches"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"upandaway.c",name:"Up, Up and Away"},{id:"hello.dasm",name:"Hello World (DASM)",category:"Assembly Language"},{id:"hello.acme",name:"Hello World (ACME)"},{id:"hello.wiz",name:"Hello Wiz (Wiz)"}],R={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 y}getDefaultExtension(){return".c"}readAddress(e){return this.machine.readConst(e)}getMemoryMap(){return R}showHelp(){return"https://8bitworkshop.com/docs/platforms/c64/"}getROMExtension(e){return e&&e[0]==1&&e[1]==8?".prg":".bin"}},v=class extends M{constructor(){super(...arguments);this.getToolForFilename=b;this.getOpcodeMetadata=S}getPresets(){return y}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 R}};c.c64=f;c["c64.wasm"]=f;c["c64.mame"]=v;
|
||||
//# sourceMappingURL=c64-7BVS4UW4.js.map
|
||||
//# sourceMappingURL=c64-E2JRSX5S.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
@@ -733,6 +733,12 @@ class WASIRunner {
|
||||
__syscall_readlinkat: this.path_readlinkat.bind(this),
|
||||
__syscall_getcwd() { warning("TODO: getcwd"); return WASIErrors.NOTSUP; },
|
||||
__syscall_rmdir() { warning("TODO: rmdir"); return WASIErrors.NOTSUP; },
|
||||
segfault() { warning("TODO: segfault"); return WASIErrors.NOTSUP; },
|
||||
alignfault() { warning("TODO: alignfault"); return WASIErrors.NOTSUP; },
|
||||
__wasilibc_cwd: new WebAssembly.Global({
|
||||
value: 'i32',
|
||||
mutable: true
|
||||
}, 0)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
import{a as d}from"./chunk-3XE5YOCV.js";import{t as c}from"./chunk-Q5ACPWUW.js";import"./chunk-XWTSBLAW.js";import"./chunk-B2GOFULO.js";import"./chunk-MPSJCPTJ.js";import{I as m,o as u,t as h}from"./chunk-ARTNMEGN.js";import{C as o,J as l,aa as i,n}from"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.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-SCFJVO7L.js.map
|
||||
import{a as d}from"./chunk-3XE5YOCV.js";import{t as c}from"./chunk-FX24YGB7.js";import"./chunk-XWTSBLAW.js";import"./chunk-B2GOFULO.js";import"./chunk-KWVOEMKM.js";import{I as m,o as u,t as h}from"./chunk-ARTNMEGN.js";import{C as o,J as l,aa as i,n}from"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.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-UU7FPCW4.js.map
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
import{b as w,c as x}from"./chunk-MPSJCPTJ.js";import{A as p,E as v,J as c,l as m,m as u,y as g}from"./chunk-RXF2JDJ3.js";import{e as I}from"./chunk-WAARL7ET.js";var h=I(x()),i,a,l,y=function(e){if(!e||e.length==0)return{};for(var r={},t=0;t<e.length;++t){var o=e[t].split("=",2);o.length==1?r[o[0]]="":r[o[0]]=decodeURIComponent(o[1].replace(/\+/g," "))}return r}(window.location.search.substr(1).split("&"));function P(){typeof window.onerror=="object"&&(window.onerror=function(e,r,t,o,n){var s=e+" "+r+" "+t+":"+o+", "+n;$.get("/error?msg="+encodeURIComponent(s),"text")})}function M(){var e=!1;document.addEventListener("visibilitychange",function(r){document.visibilityState=="hidden"&&a.isRunning()?(a.pause(),e=!0):document.visibilityState=="visible"&&e&&(a.resume(),e=!1)}),$(window).on("focus",function(){e&&(a.resume(),e=!1)}),$(window).on("blur",function(){a.isRunning()&&(a.pause(),e=!0)})}async function k(e,r){if(!r){alert("No ROM found.");return}console.log(r.length+" bytes"),await a.loadROM(e,r),a.resume()}function R(){return $("#emulator").find("canvas")}function E(e,r,t){v("gif.js/dist/gif.js").then(()=>{var o=R()[0];if(!o){alert("Could not find canvas element to record video!");return}var n=0;o.style&&o.style.transform&&(o.style.transform.indexOf("rotate(-90deg)")>=0?n=-1:o.style.transform.indexOf("rotate(90deg)")>=0&&(n=1));var s=new GIF({workerScript:"gif.js/dist/gif.worker.js",workers:4,quality:10,rotate:n});s.on("finished",function(C){console.log("finished encoding GIF"),t(C)}),e=e||100+(Math.random()*256&3),r=r||100+(Math.random()*256&15);var f=0;console.log("Recording video",o);var d=()=>{f++>r?(console.log("Rendering video"),s.render()):(s.addFrame(o,{delay:e,copy:!0}),setTimeout(d,e))};d()})}async function S(e){if(!c[i])throw Error("Invalid platform '"+i+"'.");a=new c[i]($("#emuscreen")[0]),await a.start(),e.rec&&R().on("focus",()=>{a.resume()});var r=e.n||"Game",t,o=e.url,n=e.r;if(o)return console.log(o),g(o,f=>{k(r,f)},"arraybuffer"),!0;if(n){var s=u(atob(n));t=new m().decode(s)}return M(),k(r,t),!0}async function b(e){if(e.data&&(e=e.data),i=e.p,!i)throw new Error("No platform variable!");try{var r=await w(p(i));console.log("starting platform",i),await S(e)}catch(t){console.log(t),alert('Platform "'+i+'" not supported.')}}function F(){P(),y.p&&b(y)}window.addEventListener("message",O,!1);function O(e){if(e.data){var r=e.data.cmd;if(r=="start"&&!a)b(e);else if(r=="reset")a.reset(),l.reset();else if(r=="getReplay"){var t={frameCount:l.frameCount,checkpoints:l.checkpoints,framerecs:l.framerecs,checkpointInterval:l.checkpointInterval,maxCheckpoints:l.maxCheckpoints};e.source.postMessage({ack:r,replay:t},e.origin)}else if(r=="watchState"){var o=new Function("platform","state",e.data.fn);l.callbackNewCheckpoint=n=>{e.source.postMessage({ack:r,state:o(a,n)},e.origin)}}else r=="recordVideo"?E(e.data.intervalMsec,e.data.maxFrames,function(n){e.data.filename&&(0,h.saveAs)(n,e.data.filename),e.source.postMessage({ack:r,gif:n},e.origin)}):console.log("Unknown data.cmd: "+r)}}self===top&&(document.body.style.backgroundColor="#555");F();export{a as platform,i as platform_id,F as startEmbed,l as stateRecorder};
|
||||
import{b as w,c as x}from"./chunk-KWVOEMKM.js";import{A as p,E as v,J as c,l as m,m as u,y as g}from"./chunk-RXF2JDJ3.js";import{e as I}from"./chunk-WAARL7ET.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
|
||||
|
||||
+6
-6
@@ -155,23 +155,23 @@ class C64_WASMMachine extends wasmplatform_1.BaseWASMMachine {
|
||||
var mask2 = 0;
|
||||
switch (key) {
|
||||
case 32:
|
||||
mask = 0x10;
|
||||
break;
|
||||
mask = mask2 = 0x10;
|
||||
break; // FIRE
|
||||
case 37:
|
||||
key = 0x8;
|
||||
mask = 0x4;
|
||||
mask = mask2 = 0x4;
|
||||
break; // LEFT
|
||||
case 38:
|
||||
key = 0xb;
|
||||
mask = 0x1;
|
||||
mask = mask2 = 0x1;
|
||||
break; // UP
|
||||
case 39:
|
||||
key = 0x9;
|
||||
mask = 0x8;
|
||||
mask = mask2 = 0x8;
|
||||
break; // RIGHT
|
||||
case 40:
|
||||
key = 0xa;
|
||||
mask = 0x2;
|
||||
mask = mask2 = 0x2;
|
||||
break; // DOWN
|
||||
case 113:
|
||||
key = 0xf1;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -110,10 +110,12 @@ describe('test WASI oscar64', function () {
|
||||
let shim = await loadOscar64();
|
||||
const zipdata = fs.readFileSync(`./src/worker/fs/oscar64-fs.zip`);
|
||||
shim.fs = await unzipWASIFilesystem(zipdata, "/root/");
|
||||
// https://github.com/WebAssembly/wasi-filesystem/issues/24
|
||||
// https://github.com/WebAssembly/wasi-libc/pull/214
|
||||
shim.addPreopenDirectory("/root");
|
||||
shim.fs.putSymbolicLink("/proc/self/exe", "/root/bin/oscar64");
|
||||
shim.fs.putFile("/root/main.c", "#include <stdio.h>\nint main() { return 0; }");
|
||||
shim.setArgs(["oscar64", '-v', '-o=foo.prg', 'main.c']);
|
||||
shim.fs.putFile("/root/main.c", `#include <stdio.h>\nint main() { printf("FOO"); return 0; }`);
|
||||
shim.setArgs(["oscar64", '-v', '-g', '-O', '-o=foo.prg', 'main.c']);
|
||||
let errno = shim.run();
|
||||
const stdout = shim.fds[1].getBytesAsString();
|
||||
console.log(stdout);
|
||||
@@ -121,7 +123,7 @@ describe('test WASI oscar64', function () {
|
||||
console.log(stderr);
|
||||
assert.strictEqual(errno, 0);
|
||||
assert.ok(stdout.indexOf('Starting oscar64') >= 0);
|
||||
console.log(shim.fs.getFile("./foo.asm").getBytesAsString());
|
||||
console.log(shim.fs.getFile("/root/foo.asm").getBytesAsString());
|
||||
});
|
||||
});
|
||||
*/
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"testwasishim.js","sourceRoot":"","sources":["../../src/test/testwasishim.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"testwasishim.js","sourceRoot":"","sources":["../../src/test/testwasishim.ts"],"names":[],"mappings":"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"}
|
||||
@@ -1,2 +1,2 @@
|
||||
import{A as z,B as A,C as B,D as C,b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r,t as s,u as t,v as u,w as v,x as w,y as x,z as y}from"./chunk-Q5ACPWUW.js";import"./chunk-XWTSBLAW.js";import"./chunk-B2GOFULO.js";import"./chunk-MPSJCPTJ.js";import"./chunk-ARTNMEGN.js";import"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.js";export{q as clearBreakpoint,f as current_project,A as emulationHalted,n as getCurrentEditorFilename,m as getCurrentMainFilename,k as getCurrentOutput,j as getCurrentProject,v as getPlatformAndRepo,i as getPlatformStore,z as getSaveState,y as getTestOutput,l as getWorkerParams,t as gotoNewLocation,s as haltEmulation,C as highlightSearch,h as lastDebugState,e as platform,b as platform_id,g as projectWindows,a as qs,B as reloadWorkspaceFile,d as repo_id,p as runToPC,r as setFrameRateUI,x as setTestInput,o as setupBreakpoint,u as setupSplits,w as startUI,c as store_id};
|
||||
import{A as z,B as A,C as B,D as C,b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p,r as q,s as r,t as s,u as t,v as u,w as v,x as w,y as x,z as y}from"./chunk-FX24YGB7.js";import"./chunk-XWTSBLAW.js";import"./chunk-B2GOFULO.js";import"./chunk-KWVOEMKM.js";import"./chunk-ARTNMEGN.js";import"./chunk-RXF2JDJ3.js";import"./chunk-WAARL7ET.js";export{q as clearBreakpoint,f as current_project,A as emulationHalted,n as getCurrentEditorFilename,m as getCurrentMainFilename,k as getCurrentOutput,j as getCurrentProject,v as getPlatformAndRepo,i as getPlatformStore,z as getSaveState,y as getTestOutput,l as getWorkerParams,t as gotoNewLocation,s as haltEmulation,C as highlightSearch,h as lastDebugState,e as platform,b as platform_id,g as projectWindows,a as qs,B as reloadWorkspaceFile,d as repo_id,p as runToPC,r as setFrameRateUI,x as setTestInput,o as setupBreakpoint,u as setupSplits,w as startUI,c as store_id};
|
||||
//# sourceMappingURL=ui.js.map
|
||||
|
||||
+15
-2
@@ -5953,6 +5953,7 @@
|
||||
var run = mod.callMain || mod.run;
|
||||
run(args);
|
||||
endtime(step.tool);
|
||||
console.log("exec", step.tool, args.join(" "));
|
||||
}
|
||||
var fsMeta = {};
|
||||
var fsBlob = {};
|
||||
@@ -7373,7 +7374,19 @@
|
||||
__syscall_rmdir() {
|
||||
warning("TODO: rmdir");
|
||||
return 58;
|
||||
}
|
||||
},
|
||||
segfault() {
|
||||
warning("TODO: segfault");
|
||||
return 58;
|
||||
},
|
||||
alignfault() {
|
||||
warning("TODO: alignfault");
|
||||
return 58;
|
||||
},
|
||||
__wasilibc_cwd: new WebAssembly.Global({
|
||||
value: "i32",
|
||||
mutable: true
|
||||
}, 0)
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -14789,7 +14802,7 @@ ${this.scopeSymbol(name)} = ${name}::__Start`;
|
||||
if (errors.length) {
|
||||
return { errors };
|
||||
}
|
||||
const output = wasi.fs.getFile(destpath).getBytes();
|
||||
const output = wasi.fs.getFile(rootDir + destpath).getBytes();
|
||||
putWorkFile(destpath, output);
|
||||
return {
|
||||
output,
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -184,7 +184,6 @@ function linkLD65(step) {
|
||||
//'--dbgfile', 'main.dbg', // TODO: get proper line numbers
|
||||
'-o', 'main',
|
||||
'-m', 'main.map'].concat(step.args, libargs);
|
||||
//console.log(args);
|
||||
(0, wasmutils_1.execMain)(step, LD65, args);
|
||||
if (errors.length)
|
||||
return { errors: errors };
|
||||
@@ -333,7 +332,6 @@ function compileCC65(step) {
|
||||
var customArgs = params.extra_compiler_args || ['-T', '-g', '-Oirs', '-Cl', '-W', '-pointer-sign,-no-effect'];
|
||||
args = args.concat(customArgs, args);
|
||||
args.push(step.path);
|
||||
//console.log(args);
|
||||
(0, wasmutils_1.execMain)(step, CC65, args);
|
||||
if (errors.length)
|
||||
return { errors: errors };
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -49,7 +49,7 @@ async function compileOscar64(step) {
|
||||
if (errors.length) {
|
||||
return { errors };
|
||||
}
|
||||
const output = wasi.fs.getFile(destpath).getBytes();
|
||||
const output = wasi.fs.getFile(rootDir + destpath).getBytes();
|
||||
(0, builder_1.putWorkFile)(destpath, output);
|
||||
return {
|
||||
output,
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"oscar64.js","sourceRoot":"","sources":["../../../src/worker/tools/oscar64.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"oscar64.js","sourceRoot":"","sources":["../../../src/worker/tools/oscar64.ts"],"names":[],"mappings":"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"}
|
||||
@@ -81,6 +81,7 @@ function execMain(step, mod, args) {
|
||||
var run = mod.callMain || mod.run; // TODO: run?
|
||||
run(args);
|
||||
(0, builder_1.endtime)(step.tool);
|
||||
console.log('exec', step.tool, args.join(' '));
|
||||
}
|
||||
/// asm.js / WASM / filesystem loading
|
||||
exports.fsMeta = {};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -7,10 +7,10 @@
|
||||
|
||||
#include "sidplaysfx.h"
|
||||
//#resource "sidmusic1.bin"
|
||||
//#link "sidplaysfx.ca65"
|
||||
//#link "sidplaysfx.s"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#include "bcd.h"
|
||||
//#link "bcd.c"
|
||||
@@ -647,7 +647,7 @@ void pickup_object(Actor* actor) {
|
||||
}
|
||||
|
||||
void move_player() {
|
||||
char joy = joy_read(0);
|
||||
char joy = joy_read(1);
|
||||
move_actor(&actors[0], joy, true);
|
||||
pickup_object(&actors[0]);
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ void main(void) {
|
||||
clrscr();
|
||||
digi_setup();
|
||||
while (1) {
|
||||
digi_play(digisound, 0xacf8L);
|
||||
digi_play(digisound, sizeof(digisound));
|
||||
printf("\nPress ENTER to restart digi...\n");
|
||||
getchar();
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
//#link "common.c"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#include "bcd.h"
|
||||
//#link "bcd.c"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "sprites.h"
|
||||
//#link "sprites.c"
|
||||
|
||||
//#link "level2.ca65"
|
||||
//#link "level2.s"
|
||||
|
||||
#define CAMERA_OFFSET_X 158
|
||||
#define CAMERA_OFFSET_Y 120
|
||||
@@ -57,8 +57,8 @@ extern const byte chartileset_tag_data[];
|
||||
extern const byte map_data[];
|
||||
|
||||
|
||||
static byte framecount;
|
||||
static byte framemask;
|
||||
static byte framecount; // frame counter
|
||||
static byte framemask; // single bit rotates each frame
|
||||
|
||||
const byte BITMASKS[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
|
||||
|
||||
@@ -112,17 +112,18 @@ static void build_tile_flag_map(void) {
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_cell(word ofs, byte scrn_x, byte scrn_y) {
|
||||
byte ch, color;
|
||||
void draw_cell(word ofs, byte scrn_x, byte scrn_y) {
|
||||
byte ch, color; // character and color to draw
|
||||
// get the character and color from the level map
|
||||
if (get_cell_at(scrn_x + origin_x, scrn_y + origin_y)) {
|
||||
ch = tilechar;
|
||||
color = chartileset_colour_data[tileindex];
|
||||
ch = tilechar; // character from tileset
|
||||
color = chartileset_colour_data[tileindex]; // color from tileset
|
||||
} else {
|
||||
ch = DEFAULT_CHAR;
|
||||
color = DEFAULT_COLOR;
|
||||
ch = DEFAULT_CHAR; // default character
|
||||
color = DEFAULT_COLOR; // default color
|
||||
}
|
||||
hidbuf[ofs] = ch;
|
||||
colorbuf[ofs] = color;
|
||||
hidbuf[ofs] = ch; // draw character to hidden buffer
|
||||
colorbuf[ofs] = color; // draw color to color buffer
|
||||
}
|
||||
|
||||
void scroll_draw_column(byte col) {
|
||||
@@ -273,12 +274,12 @@ typedef enum {
|
||||
} ActorState;
|
||||
|
||||
typedef struct Actor {
|
||||
word xx;
|
||||
word yy;
|
||||
sbyte xvel;
|
||||
sbyte yvel;
|
||||
word xx; // X coord
|
||||
word yy; // Y coord
|
||||
sbyte xvel; // X velocity
|
||||
sbyte yvel; // Y velocity
|
||||
ActorState state;
|
||||
bool faceleft;
|
||||
bool faceleft; // facing left?
|
||||
} Actor;
|
||||
|
||||
Actor actors[MAX_ACTORS];
|
||||
@@ -290,7 +291,7 @@ void draw_actor(register Actor* actor, byte index) {
|
||||
word xpos = actor->xx + pixofs_x + fine_correct_x + ACTOR_OFFSET_X;
|
||||
word ypos = actor->yy + pixofs_y + fine_correct_y + ACTOR_OFFSET_Y;
|
||||
if (xpos > 320 || ypos > 250) {
|
||||
ypos = 255;
|
||||
ypos = 255; // hide the sprite
|
||||
}
|
||||
switch (actor->state) {
|
||||
case STANDING:
|
||||
@@ -318,23 +319,10 @@ const char velocity_bitmasks[8] = {
|
||||
0b01110101, // 5/8
|
||||
0b11101110, // 6/8
|
||||
0b11110111, // 7/8
|
||||
// 0b11111111, // 8/8
|
||||
};
|
||||
|
||||
static byte box[4]; // hit box
|
||||
|
||||
/*
|
||||
void actor_set_position(register Actor* actor,
|
||||
word world_x,
|
||||
word world_y,
|
||||
ActorState state) {
|
||||
actor->xx = world_x;
|
||||
actor->yy = world_y;
|
||||
actor->state = state;
|
||||
actor->tileindex = (world_x>>5) | (world_y>>5)*MAP_COLS;
|
||||
}
|
||||
*/
|
||||
|
||||
void move_actor(register Actor* actor,
|
||||
sbyte cmd_dx,
|
||||
sbyte cmd_dy) {
|
||||
@@ -553,7 +541,7 @@ void next_frame() {
|
||||
// increment frame counter
|
||||
framemask = BITMASKS[++framecount & 7];
|
||||
// get joystick bits
|
||||
joy = joy_read(0);
|
||||
joy = joy_read(1);
|
||||
// move player
|
||||
control_actor(player, joy);
|
||||
// move enemy
|
||||
@@ -615,20 +603,12 @@ void main(void) {
|
||||
// repaint screen memory w/ the map
|
||||
scroll_refresh();
|
||||
|
||||
player->xx = 3*32+8;
|
||||
player->yy = 2*32+8-16;
|
||||
|
||||
// set player initial position
|
||||
player->xx = 0;
|
||||
player->yy = 31;
|
||||
player->state = STANDING;
|
||||
/*
|
||||
player->xx = 32;
|
||||
player->yy = 0;
|
||||
player->xx = 33;
|
||||
player->yy = 100;
|
||||
player->state = JUMPING;
|
||||
*/
|
||||
// actor_set_position(player, 63, 63, STANDING);
|
||||
|
||||
// set other actor's initial position
|
||||
actors[1].xx = 128;
|
||||
|
||||
// infinite loop
|
||||
|
||||
@@ -117,7 +117,7 @@ void main(void) {
|
||||
sprite_update(DEFAULT_SCREEN);
|
||||
|
||||
// get joystick bits
|
||||
joy = joy_read(0);
|
||||
joy = joy_read(1);
|
||||
move_player(joy);
|
||||
// move other objects
|
||||
move_non_players();
|
||||
|
||||
@@ -37,7 +37,7 @@ void main(void) {
|
||||
// loop forever
|
||||
while (1) {
|
||||
// get joystick bits
|
||||
joy = joy_read(0);
|
||||
joy = joy_read(1);
|
||||
// move sprite based on joystick
|
||||
if (JOY_LEFT(joy)) { x -= 1; } // move left 1 pixel
|
||||
if (JOY_RIGHT(joy)) { x += 1; } // move right 1 pixel
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//#link "common.c"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#include "bcd.h"
|
||||
//#link "bcd.c"
|
||||
|
||||
@@ -189,7 +189,7 @@ char music_update() {
|
||||
|
||||
void handleInput() {
|
||||
char key = 0;
|
||||
char joy = joy_read(0);
|
||||
char joy = joy_read(1);
|
||||
if (joy == 0) return;
|
||||
if (JOY_UP(joy)) key = 'i';
|
||||
if (JOY_DOWN(joy)) key = 'k';
|
||||
|
||||
@@ -104,7 +104,7 @@ void main(void) {
|
||||
// infinite loop
|
||||
while (1) {
|
||||
// get joystick bits
|
||||
char joy = joy_read(0);
|
||||
char joy = joy_read(1);
|
||||
// move sprite based on arrow keys
|
||||
if (JOY_LEFT(joy)) scroll_horiz(-1);
|
||||
if (JOY_UP(joy)) scroll_vert(-1);
|
||||
|
||||
@@ -72,7 +72,7 @@ void main(void) {
|
||||
while (1) {
|
||||
static char speed = 1;
|
||||
// get joystick bits
|
||||
char joy = joy_read(0);
|
||||
char joy = joy_read(1);
|
||||
// speed up scrolling while button pressed
|
||||
speed = JOY_BTN_1(joy) ? 2 : 1;
|
||||
// move sprite based on arrow keys
|
||||
|
||||
@@ -101,7 +101,7 @@ void main(void) {
|
||||
static char joy;
|
||||
static bool slowframe = false;
|
||||
// get joystick bits
|
||||
joy = joy_read(0);
|
||||
joy = joy_read(1);
|
||||
// speed up scrolling while button pressed
|
||||
speed = JOY_BTN_1(joy) ? 3 : 1;
|
||||
// if we copied screen memory last frame,
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
//#link "common.c"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
// generated from https://8bitworkshop.com/bitmapfontgenerator/
|
||||
// 16 x 32 MSB first y offset 6 Terminus
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "sprites.h"
|
||||
//#link "sprites.c"
|
||||
|
||||
//#link "level1.ca65"
|
||||
//#link "level2.s"
|
||||
|
||||
extern const byte charset_data[];
|
||||
extern const byte charset_attrib_data[];
|
||||
@@ -152,7 +152,7 @@ void main(void) {
|
||||
static char joy;
|
||||
static bool slowframe = false;
|
||||
// get joystick bits
|
||||
joy = joy_read(0);
|
||||
joy = joy_read(1);
|
||||
// speed up scrolling while button pressed
|
||||
speed = JOY_BTN_1(joy) ? 3 : 1;
|
||||
// if we copied screen memory last frame,
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#define CFGFILE c64-sid.cfg
|
||||
|
||||
//#resource "sidmusic1.bin"
|
||||
//#link "sidplaysfx.ca65"
|
||||
//#link "sidplaysfx.s"
|
||||
#include "sidplaysfx.h"
|
||||
|
||||
static const unsigned char Palette[2] =
|
||||
@@ -85,7 +85,7 @@ void main(void) {
|
||||
|
||||
while (1) {
|
||||
// play sound effect when joystick is moved
|
||||
byte joy = joy_read(0);
|
||||
byte joy = joy_read(1);
|
||||
if (joy) {
|
||||
sid_sfx(joy & 3);
|
||||
// exit when fire button pressed
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
//#link "sprites.c"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#include "bcd.h"
|
||||
//#link "bcd.c"
|
||||
@@ -332,7 +332,7 @@ void main() {
|
||||
detect_player_collision(bg_coll, spr_coll);
|
||||
|
||||
// get joystick bits and move player
|
||||
move_player(joy_read(0));
|
||||
move_player(joy_read(1));
|
||||
|
||||
// move obstacle and powerup sprites
|
||||
move_items();
|
||||
|
||||
+23
-5
@@ -30,10 +30,10 @@ typedef struct {
|
||||
bool human; // is this player a human?
|
||||
} Player;
|
||||
|
||||
Player players[2]; // two player structs
|
||||
Player players[2]; // player #0 and #1 data
|
||||
|
||||
byte frames_per_move;
|
||||
byte gameover;
|
||||
byte frames_per_move; // speed of game
|
||||
byte gameover; // = 1 if game is over
|
||||
|
||||
#define START_SPEED 12
|
||||
#define MAX_SPEED 5
|
||||
@@ -44,6 +44,7 @@ byte gameover;
|
||||
const char BOX_CHARS[8] = { '+', '+', '+', '+',
|
||||
'-', '-', '!', '!'};
|
||||
|
||||
// draw a box from coordinate (x,y) to (x2,y2)
|
||||
void draw_box(byte x, byte y, byte x2, byte y2, const char* chars) {
|
||||
byte x1 = x;
|
||||
cputcxy(x, y, chars[2]);
|
||||
@@ -60,6 +61,7 @@ void draw_box(byte x, byte y, byte x2, byte y2, const char* chars) {
|
||||
}
|
||||
}
|
||||
|
||||
// draw the playfield border and score
|
||||
void draw_playfield() {
|
||||
draw_box(0,1,COLS-1,ROWS-1,BOX_CHARS);
|
||||
cputsxy( 0, 0, "plyr1:");
|
||||
@@ -68,10 +70,12 @@ void draw_playfield() {
|
||||
cputcxy(27, 0, players[1].score+'0');
|
||||
}
|
||||
|
||||
// constants for the 4 cardinal directions
|
||||
typedef enum { D_RIGHT, D_DOWN, D_LEFT, D_UP } dir_t;
|
||||
const sbyte DIR_X[4] = { 1, 0, -1, 0 };
|
||||
const sbyte DIR_Y[4] = { 0, 1, 0, -1 };
|
||||
|
||||
// initialize game and player data
|
||||
void init_game() {
|
||||
memset(players, 0, sizeof(players));
|
||||
players[0].head_attr = '1';
|
||||
@@ -81,6 +85,7 @@ void init_game() {
|
||||
frames_per_move = START_SPEED;
|
||||
}
|
||||
|
||||
// reset players to initial conditions
|
||||
void reset_players() {
|
||||
players[0].x = players[0].y = 5;
|
||||
players[0].dir = D_RIGHT;
|
||||
@@ -90,10 +95,12 @@ void reset_players() {
|
||||
players[0].collided = players[1].collided = 0;
|
||||
}
|
||||
|
||||
// draw player character at head
|
||||
void draw_player(Player* p) {
|
||||
cputcxy(p->x, p->y, p->head_attr);
|
||||
}
|
||||
|
||||
// move player and detect collision
|
||||
void move_player(Player* p) {
|
||||
cputcxy(p->x, p->y, p->tail_attr);
|
||||
p->x += DIR_X[p->dir];
|
||||
@@ -103,12 +110,13 @@ void move_player(Player* p) {
|
||||
draw_player(p);
|
||||
}
|
||||
|
||||
// read joystick and move player
|
||||
void human_control(Player* p) {
|
||||
byte dir = 0xff;
|
||||
char joy;
|
||||
if (!p->human) return;
|
||||
if (!kbhit()) return;
|
||||
joy = joy_read(0);
|
||||
joy = joy_read(1);
|
||||
if (JOY_UP(joy)) dir = D_UP;
|
||||
if (JOY_LEFT(joy)) dir = D_LEFT;
|
||||
if (JOY_RIGHT(joy)) dir = D_RIGHT;
|
||||
@@ -119,6 +127,9 @@ void human_control(Player* p) {
|
||||
}
|
||||
}
|
||||
|
||||
// AI player: try to move in direction 'dir'
|
||||
// the number of squares (1 << shift)
|
||||
// return 1 if successful, and change p->dir
|
||||
byte ai_try_dir(Player* p, dir_t dir, byte shift) {
|
||||
byte x,y;
|
||||
dir &= 3;
|
||||
@@ -133,6 +144,7 @@ byte ai_try_dir(Player* p, dir_t dir, byte shift) {
|
||||
}
|
||||
}
|
||||
|
||||
// AI computer player routine
|
||||
void ai_control(Player* p) {
|
||||
dir_t dir;
|
||||
if (p->human) return;
|
||||
@@ -147,9 +159,9 @@ void ai_control(Player* p) {
|
||||
}
|
||||
}
|
||||
|
||||
// flash player(s) that collided
|
||||
void flash_colliders() {
|
||||
byte i;
|
||||
// flash players that collided
|
||||
for (i=0; i<56; i++) {
|
||||
delay(2);
|
||||
revers(players[0].collided && (i&1));
|
||||
@@ -160,6 +172,7 @@ void flash_colliders() {
|
||||
revers(0);
|
||||
}
|
||||
|
||||
// move both players
|
||||
void make_move() {
|
||||
byte i;
|
||||
for (i=0; i<frames_per_move; i++) {
|
||||
@@ -176,6 +189,7 @@ void make_move() {
|
||||
textcolor(COLOR_WHITE);
|
||||
}
|
||||
|
||||
// end of game, show the winner
|
||||
void declare_winner(byte winner) {
|
||||
byte i;
|
||||
clrscr();
|
||||
@@ -190,6 +204,8 @@ void declare_winner(byte winner) {
|
||||
gameover = 1;
|
||||
}
|
||||
|
||||
// play a round of the game
|
||||
// if someone got MAX_SCORE points, show the winner
|
||||
void play_round() {
|
||||
reset_players();
|
||||
clrscr();
|
||||
@@ -214,6 +230,7 @@ void play_round() {
|
||||
}
|
||||
}
|
||||
|
||||
// play a complete game until someone wins
|
||||
void play_game() {
|
||||
gameover = 0;
|
||||
init_game();
|
||||
@@ -223,6 +240,7 @@ void play_game() {
|
||||
}
|
||||
}
|
||||
|
||||
// main routine
|
||||
void main() {
|
||||
joy_install (joy_static_stddrv);
|
||||
play_game();
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//#link "common.c"
|
||||
#include "common.h"
|
||||
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
#include "rasterirq.h"
|
||||
|
||||
//#link "sprites.c"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//#link "common.c"
|
||||
#include "common.h"
|
||||
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
#include "rasterirq.h"
|
||||
|
||||
//#link "sprites.c"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//#link "common.c"
|
||||
#include "common.h"
|
||||
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
#include "rasterirq.h"
|
||||
|
||||
//#link "sprites.c"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//#link "common.c"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#include "bcd.h"
|
||||
//#link "bcd.c"
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
//#link "common.c"
|
||||
|
||||
#include "multisprite.h"
|
||||
//#link "multisprite.ca65"
|
||||
//#link "multisprite.s"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#define NUM_TEST_SPRITES 24
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
#include "common.h"
|
||||
//#link "common.c"
|
||||
|
||||
//#link "multisprite.ca65"
|
||||
//#link "multisprite.s"
|
||||
|
||||
#include "rasterirq.h"
|
||||
//#link "rasterirq.ca65"
|
||||
//#link "rasterirq.s"
|
||||
|
||||
#define NUM_TEST_SPRITES 24
|
||||
|
||||
|
||||
@@ -703,6 +703,12 @@ export class WASIRunner {
|
||||
__syscall_readlinkat: this.path_readlinkat.bind(this),
|
||||
__syscall_getcwd() { warning("TODO: getcwd"); return WASIErrors.NOTSUP; },
|
||||
__syscall_rmdir() { warning("TODO: rmdir"); return WASIErrors.NOTSUP; },
|
||||
segfault() { warning("TODO: segfault"); return WASIErrors.NOTSUP; },
|
||||
alignfault() { warning("TODO: alignfault"); return WASIErrors.NOTSUP; },
|
||||
__wasilibc_cwd: new WebAssembly.Global({
|
||||
value: 'i32',
|
||||
mutable: true
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -160,11 +160,11 @@ export class C64_WASMMachine extends BaseWASMMachine
|
||||
var mask = 0;
|
||||
var mask2 = 0;
|
||||
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 32: mask = mask2 = 0x10; break; // FIRE
|
||||
case 37: key = 0x8; mask = mask2 = 0x4; break; // LEFT
|
||||
case 38: key = 0xb; mask = mask2 = 0x1; break; // UP
|
||||
case 39: key = 0x9; mask = mask2 = 0x8; break; // RIGHT
|
||||
case 40: key = 0xa; mask = mask2 = 0x2; break; // DOWN
|
||||
case 113: key = 0xf1; break; // F2
|
||||
case 115: key = 0xf3; break; // F4
|
||||
case 119: key = 0xf5; break; // F8
|
||||
|
||||
@@ -88,10 +88,12 @@ describe('test WASI oscar64', function () {
|
||||
let shim = await loadOscar64();
|
||||
const zipdata = fs.readFileSync(`./src/worker/fs/oscar64-fs.zip`);
|
||||
shim.fs = await unzipWASIFilesystem(zipdata, "/root/");
|
||||
// https://github.com/WebAssembly/wasi-filesystem/issues/24
|
||||
// https://github.com/WebAssembly/wasi-libc/pull/214
|
||||
shim.addPreopenDirectory("/root");
|
||||
shim.fs.putSymbolicLink("/proc/self/exe", "/root/bin/oscar64");
|
||||
shim.fs.putFile("/root/main.c", "#include <stdio.h>\nint main() { return 0; }");
|
||||
shim.setArgs(["oscar64", '-v', '-o=foo.prg', 'main.c']);
|
||||
shim.fs.putFile("/root/main.c", `#include <stdio.h>\nint main() { printf("FOO"); return 0; }`);
|
||||
shim.setArgs(["oscar64", '-v', '-g', '-O', '-o=foo.prg', 'main.c']);
|
||||
let errno = shim.run();
|
||||
const stdout = shim.fds[1].getBytesAsString();
|
||||
console.log(stdout);
|
||||
@@ -99,7 +101,7 @@ describe('test WASI oscar64', function () {
|
||||
console.log(stderr);
|
||||
assert.strictEqual(errno, 0);
|
||||
assert.ok(stdout.indexOf('Starting oscar64') >= 0);
|
||||
console.log(shim.fs.getFile("./foo.asm").getBytesAsString());
|
||||
console.log(shim.fs.getFile("/root/foo.asm").getBytesAsString());
|
||||
});
|
||||
});
|
||||
*/
|
||||
|
||||
@@ -180,7 +180,6 @@ export function linkLD65(step: BuildStep): BuildStepResult {
|
||||
//'--dbgfile', 'main.dbg', // TODO: get proper line numbers
|
||||
'-o', 'main',
|
||||
'-m', 'main.map'].concat(step.args, libargs);
|
||||
//console.log(args);
|
||||
execMain(step, LD65, args);
|
||||
if (errors.length)
|
||||
return { errors: errors };
|
||||
@@ -325,7 +324,6 @@ export function compileCC65(step: BuildStep): BuildStepResult {
|
||||
var customArgs = params.extra_compiler_args || ['-T', '-g', '-Oirs', '-Cl', '-W', '-pointer-sign,-no-effect'];
|
||||
args = args.concat(customArgs, args);
|
||||
args.push(step.path);
|
||||
//console.log(args);
|
||||
execMain(step, CC65, args);
|
||||
if (errors.length)
|
||||
return { errors: errors };
|
||||
|
||||
@@ -47,7 +47,7 @@ export async function compileOscar64(step: BuildStep): Promise<BuildStepResult>
|
||||
if (errors.length) {
|
||||
return { errors };
|
||||
}
|
||||
const output = wasi.fs.getFile(destpath).getBytes();
|
||||
const output = wasi.fs.getFile(rootDir + destpath).getBytes();
|
||||
putWorkFile(destpath, output);
|
||||
return {
|
||||
output,
|
||||
|
||||
@@ -81,6 +81,7 @@ export function execMain(step: BuildStep, mod, args: string[]) {
|
||||
var run = mod.callMain || mod.run; // TODO: run?
|
||||
run(args);
|
||||
endtime(step.tool);
|
||||
console.log('exec', step.tool, args.join(' '));
|
||||
}
|
||||
|
||||
/// asm.js / WASM / filesystem loading
|
||||
|
||||
Reference in New Issue
Block a user