1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2026-03-10 21:25:31 +00:00

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

This commit is contained in:
sehugg
2025-09-04 15:09:33 +00:00
parent f5e5b9a3a5
commit d3417ec581
16 changed files with 78 additions and 75 deletions

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

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{t as c}from"./chunk-X7HTZJQJ.js";import"./chunk-T4FRG4BA.js";import"./chunk-B2GOFULO.js";import"./chunk-HJLNIWCH.js";import{I as m,o as u,t as h}from"./chunk-HOSZ5TQY.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-5ZB3MOPT.js.map
import{a as d}from"./chunk-3XE5YOCV.js";import{t as c}from"./chunk-R2WG5Q3S.js";import"./chunk-T4FRG4BA.js";import"./chunk-B2GOFULO.js";import"./chunk-7U3MLVOX.js";import{I as m,o as u,t as h}from"./chunk-HOSZ5TQY.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-LCSOTPUJ.js.map

View File

@@ -1,2 +1,2 @@
import{b as w,c as x}from"./chunk-HJLNIWCH.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-7U3MLVOX.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

View File

@@ -343,14 +343,15 @@ class AppleII extends devices_1.BasicScanlineMachine {
return super.advanceCPU();
}
setKeyInput(key, code, flags) {
//console.log(`setKeyInput: ${key} ${code} ${flags}`);
console.log(`setKeyInput: ${key} ${code} ${flags}`);
if (flags & emu_1.KeyFlags.KeyDown) {
code = 0;
switch (key) {
case 16:
case 17:
case 18:
break; // ignore shift/ctrl/etc
case 91:
return; // ignore shift/ctrl/alt - don't set any key
case 8:
code = 8; // left
if (flags & emu_1.KeyFlags.Shift) {
@@ -378,57 +379,56 @@ class AppleII extends devices_1.BasicScanlineMachine {
code = 10;
break; // down
case 48:
if (flags & emu_1.KeyFlags.Shift)
code = 0x29;
break; // )
code = (flags & emu_1.KeyFlags.Shift) ? 0x29 : 0x30;
break; // ) or 0
case 49:
if (flags & emu_1.KeyFlags.Shift)
code = 0x21;
break; // !
code = (flags & emu_1.KeyFlags.Shift) ? 0x21 : 0x31;
break; // ! or 1
case 50:
if (flags & emu_1.KeyFlags.Shift)
code = 0x40;
break; // @
code = (flags & emu_1.KeyFlags.Shift) ? 0x40 : 0x32;
break; // @ or 2
case 51:
if (flags & emu_1.KeyFlags.Shift)
code = 0x23;
break; // #
code = (flags & emu_1.KeyFlags.Shift) ? 0x23 : 0x33;
break; // # or 3
case 52:
if (flags & emu_1.KeyFlags.Shift)
code = 0x24;
break; // $
code = (flags & emu_1.KeyFlags.Shift) ? 0x24 : 0x34;
break; // $ or 4
case 53:
if (flags & emu_1.KeyFlags.Shift)
code = 0x25;
break; // %
code = (flags & emu_1.KeyFlags.Shift) ? 0x25 : 0x35;
break; // % or 5
case 54:
if (flags & emu_1.KeyFlags.Shift)
code = 0x5e;
break; // ^
code = (flags & emu_1.KeyFlags.Shift) ? 0x5e : 0x36;
break; // ^ or 6
case 55:
if (flags & emu_1.KeyFlags.Shift)
code = 0x26;
break; // &
code = (flags & emu_1.KeyFlags.Shift) ? 0x26 : 0x37;
break; // & or 7
case 56:
if (flags & emu_1.KeyFlags.Shift)
code = 0x2a;
break; // *
code = (flags & emu_1.KeyFlags.Shift) ? 0x2a : 0x38;
break; // * or 8
case 57:
if (flags & emu_1.KeyFlags.Shift)
code = 0x28;
break; // (
code = (flags & emu_1.KeyFlags.Shift) ? 0x28 : 0x39;
break; // ( or 9
case 61:
code = (flags & emu_1.KeyFlags.Shift) ? 0x2b : 0x3d;
break; // +
case 173:
code = (flags & emu_1.KeyFlags.Shift) ? 0x5f : 0x2d;
break; // _
break; // _ or -
case 173:
code = (flags & emu_1.KeyFlags.Shift) ? 0x2b : 0x3d;
break; // + or =
case 59:
code = (flags & emu_1.KeyFlags.Shift) ? 0x3a : 0x3b;
break;
break; // : or ;
case 186:
code = (flags & emu_1.KeyFlags.Shift) ? 0x3a : 0x3b;
break; // : or ;
case 187:
code = (flags & emu_1.KeyFlags.Shift) ? 0x2b : 0x3d;
break; // + or =
case 188:
code = (flags & emu_1.KeyFlags.Shift) ? 0x3c : 0x2c;
break;
case 189:
code = (flags & emu_1.KeyFlags.Shift) ? 0x5f : 0x2d;
break; // _ or -
case 190:
code = (flags & emu_1.KeyFlags.Shift) ? 0x3e : 0x2e;
break;

File diff suppressed because one or more lines are too long

View File

@@ -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-X7HTZJQJ.js";import"./chunk-T4FRG4BA.js";import"./chunk-B2GOFULO.js";import"./chunk-HJLNIWCH.js";import"./chunk-HOSZ5TQY.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-R2WG5Q3S.js";import"./chunk-T4FRG4BA.js";import"./chunk-B2GOFULO.js";import"./chunk-7U3MLVOX.js";import"./chunk-HOSZ5TQY.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

View File

@@ -355,12 +355,12 @@ export class AppleII extends BasicScanlineMachine implements AcceptsBIOS {
}
setKeyInput(key:number, code:number, flags:number) : void {
//console.log(`setKeyInput: ${key} ${code} ${flags}`);
console.log(`setKeyInput: ${key} ${code} ${flags}`);
if (flags & KeyFlags.KeyDown) {
code = 0;
switch (key) {
case 16: case 17: case 18:
break; // ignore shift/ctrl/etc
case 16: case 17: case 18: case 91:
return; // ignore shift/ctrl/alt - don't set any key
case 8:
code=8; // left
if (flags & KeyFlags.Shift) {
@@ -375,20 +375,23 @@ export class AppleII extends BasicScanlineMachine implements AcceptsBIOS {
case 39: code=21; break; // right
case 38: code=11; break; // up
case 40: code=10; break; // down
case 48: if (flags & KeyFlags.Shift) code = 0x29; break; // )
case 49: if (flags & KeyFlags.Shift) code = 0x21; break; // !
case 50: if (flags & KeyFlags.Shift) code = 0x40; break; // @
case 51: if (flags & KeyFlags.Shift) code = 0x23; break; // #
case 52: if (flags & KeyFlags.Shift) code = 0x24; break; // $
case 53: if (flags & KeyFlags.Shift) code = 0x25; break; // %
case 54: if (flags & KeyFlags.Shift) code = 0x5e; break; // ^
case 55: if (flags & KeyFlags.Shift) code = 0x26; break; // &
case 56: if (flags & KeyFlags.Shift) code = 0x2a; break; // *
case 57: if (flags & KeyFlags.Shift) code = 0x28; break; // (
case 61: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // +
case 173: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _
case 59: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break;
case 48: code = (flags & KeyFlags.Shift) ? 0x29 : 0x30; break; // ) or 0
case 49: code = (flags & KeyFlags.Shift) ? 0x21 : 0x31; break; // ! or 1
case 50: code = (flags & KeyFlags.Shift) ? 0x40 : 0x32; break; // @ or 2
case 51: code = (flags & KeyFlags.Shift) ? 0x23 : 0x33; break; // # or 3
case 52: code = (flags & KeyFlags.Shift) ? 0x24 : 0x34; break; // $ or 4
case 53: code = (flags & KeyFlags.Shift) ? 0x25 : 0x35; break; // % or 5
case 54: code = (flags & KeyFlags.Shift) ? 0x5e : 0x36; break; // ^ or 6
case 55: code = (flags & KeyFlags.Shift) ? 0x26 : 0x37; break; // & or 7
case 56: code = (flags & KeyFlags.Shift) ? 0x2a : 0x38; break; // * or 8
case 57: code = (flags & KeyFlags.Shift) ? 0x28 : 0x39; break; // ( or 9
case 61: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _ or -
case 173: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // + or =
case 59: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break; // : or ;
case 186: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break; // : or ;
case 187: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // + or =
case 188: code = (flags & KeyFlags.Shift) ? 0x3c : 0x2c; break;
case 189: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _ or -
case 190: code = (flags & KeyFlags.Shift) ? 0x3e : 0x2e; break;
case 191: code = (flags & KeyFlags.Shift) ? 0x3f : 0x2f; break;
case 222: code = (flags & KeyFlags.Shift) ? 0x22 : 0x27; break;