1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 08:41:30 +00:00
8bitworkshop/src/tools/runmachine.ts
2020-10-14 17:33:15 -05:00

52 lines
1.3 KiB
TypeScript

import { hasAudio, hasVideo, Machine } from "../common/baseplatform";
import { SampledAudioSink } from "../common/devices";
class NullAudio implements SampledAudioSink {
feedSample(value: number, count: number): void {
}
}
class MachineRunner {
machine: Machine;
pixels: Uint32Array;
constructor(machine: Machine) {
this.machine = machine;
}
setup() {
if (hasVideo(this.machine)) {
var vid = this.machine.getVideoParams();
this.pixels = new Uint32Array(vid.width * vid.height);
this.machine.connectVideo(this.pixels);
}
if (hasAudio(this.machine)) {
this.machine.connectAudio(new NullAudio());
}
this.machine.reset();
}
run() {
this.machine.advanceFrame(null);
}
}
async function loadMachine(modname: string, clsname: string) : Promise<Machine> {
var mod = await import('../machine/'+modname);
var cls = mod[clsname];
var machine = new cls();
return machine;
}
async function runMachine() {
var machine = await loadMachine(process.argv[2], process.argv[3]);
var runner = new MachineRunner(machine);
runner.setup();
runner.run();
console.log(runner.machine.saveState());
}
global.atob = require('atob');
global.btoa = require('btoa');
runMachine();