mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-22 14:33:51 +00:00
file#_post: ignore/force params
This commit is contained in:
parent
e475dfe38e
commit
0600ab3b9f
@ -57,7 +57,8 @@
|
||||
"test-platforms": "NODE_PATH=$(pwd) mocha --recursive --timeout 60000 test/cli/testplatforms.js",
|
||||
"test-profile": "NODE_PATH=$(pwd) mocha --recursive --timeout 60000 --prof test/cli",
|
||||
"start": "electron .",
|
||||
"fuzzbasic": "jsfuzz gen/common/basic/fuzz.js ~/basic/corpus/ --versifier false"
|
||||
"fuzzbasic": "jsfuzz gen/common/basic/fuzz.js ~/basic/corpus/ --versifier false",
|
||||
"machine": "node gen/tools/runmachine.js"
|
||||
},
|
||||
"main": "electron.js",
|
||||
"keywords": [
|
||||
|
@ -1029,25 +1029,25 @@ import { ProbeRecorder } from "./recorder";
|
||||
export interface Machine extends Bus, Resettable, FrameBased, AcceptsROM, HasCPU, SavesState<EmuState>, SavesInputState<any> {
|
||||
}
|
||||
|
||||
function hasVideo(arg:any): arg is VideoSource {
|
||||
export function hasVideo(arg:any): arg is VideoSource {
|
||||
return typeof arg.connectVideo === 'function';
|
||||
}
|
||||
function hasAudio(arg:any): arg is SampledAudioSource {
|
||||
export function hasAudio(arg:any): arg is SampledAudioSource {
|
||||
return typeof arg.connectAudio === 'function';
|
||||
}
|
||||
function hasKeyInput(arg:any): arg is AcceptsKeyInput {
|
||||
export function hasKeyInput(arg:any): arg is AcceptsKeyInput {
|
||||
return typeof arg.setKeyInput === 'function';
|
||||
}
|
||||
function hasPaddleInput(arg:any): arg is AcceptsPaddleInput {
|
||||
export function hasPaddleInput(arg:any): arg is AcceptsPaddleInput {
|
||||
return typeof arg.setPaddleInput === 'function';
|
||||
}
|
||||
function isRaster(arg:any): arg is RasterFrameBased {
|
||||
export function isRaster(arg:any): arg is RasterFrameBased {
|
||||
return typeof arg.getRasterY === 'function';
|
||||
}
|
||||
function hasProbe(arg:any): arg is Probeable {
|
||||
export function hasProbe(arg:any): arg is Probeable {
|
||||
return typeof arg.connectProbe == 'function';
|
||||
}
|
||||
function hasBIOS(arg:any): arg is AcceptsBIOS {
|
||||
export function hasBIOS(arg:any): arg is AcceptsBIOS {
|
||||
return typeof arg.loadBIOS == 'function';
|
||||
}
|
||||
|
||||
|
@ -2129,24 +2129,30 @@ function loadImportedURL(url : string) {
|
||||
}
|
||||
|
||||
async function loadFormDataUpload() {
|
||||
var ignore = !!qs['ignore'];
|
||||
var force = !!qs['force'];
|
||||
setWaitDialog(true);
|
||||
for (var i=0; i<20; i++) {
|
||||
let path = qs['file'+i+'_name'];
|
||||
let dataenc = qs['file'+i+'_data'];
|
||||
if (path == null || dataenc == null) break;
|
||||
var olddata = await store.getItem(path);
|
||||
if (!(ignore && olddata)) {
|
||||
let value = dataenc;
|
||||
if (qs['file'+i+'_type'] == 'binary') {
|
||||
value = stringToByteArray(atob(value));
|
||||
}
|
||||
var olddata = await store.getItem(path);
|
||||
if (!olddata || confirm("Replace existing file '" + path + "'?")) {
|
||||
await store.setItem(path, value); // TODO: alert when replacing?
|
||||
if (i == 0) { qs['file'] = path; } // set main filename
|
||||
if (!olddata || force || confirm("Replace existing file '" + path + "'?")) {
|
||||
await store.setItem(path, value);
|
||||
}
|
||||
}
|
||||
if (i == 0) { qs['file'] = path; } // set main filename
|
||||
delete qs['file'+i+'_name'];
|
||||
delete qs['file'+i+'_data'];
|
||||
delete qs['file'+i+'_type'];
|
||||
}
|
||||
delete qs['ignore'];
|
||||
delete qs['force'];
|
||||
setWaitDialog(false);
|
||||
replaceURLState();
|
||||
}
|
||||
|
51
src/tools/runmachine.ts
Normal file
51
src/tools/runmachine.ts
Normal file
@ -0,0 +1,51 @@
|
||||
|
||||
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();
|
||||
|
@ -5,7 +5,8 @@
|
||||
"outDir": "../../gen/tools"
|
||||
},
|
||||
"references": [
|
||||
{ "path": "../common" }
|
||||
{ "path": "../common" },
|
||||
{ "path": "../machine" }
|
||||
],
|
||||
"include": [
|
||||
"**/*.ts"
|
||||
|
Loading…
Reference in New Issue
Block a user