/////////////////////////////////////////////////////////////////////////////// // Sim // /////////////////////////////////////////////////////////////////////////////// // One simulated Virtual Boy class Sim { ///////////////////////// Initialization Methods ////////////////////////// constructor(core, sim, index) { this.core = core; this.index = index; this.sim = sim; } ///////////////////////////// Public Methods ////////////////////////////// // Locate CPU instructions disassemble(target, row, rows, scroll, options = {}) { return this.core.send({ command : "disassemble", row : row, rows : rows, scroll : scroll, sim : this.sim, subscribe: options.subscribe, target : target }); } // Retrieve all CPU program registers getProgramRegisters(options = {}) { return this.core.send({ command : "getProgramRegisters", sim : this.sim, subscribe: options.subscribe }); } // Retrieve the value of a system register getSystemRegister(id, options = {}) { return this.core.send({ command : "getSystemRegister", id : id, sim : this.sim, subscribe: options.subscribe }); } // Retrieve all CPU system registers (including PC) getSystemRegisters(options = {}) { return this.core.send({ command : "getSystemRegisters", sim : this.sim, subscribe: options.subscribe }); } // Read multiple bytes from the bus read(address, length, options = {}) { return this.core.send({ address : address, command : "read", debug : !("debug" in options) || !!options.debug, length : length, sim : this.sim, subscribe: options.subscribe }); } // Specify a new value for PC setProgramCounter(value, options = {}) { return this.core.send({ command: "setProgramCounter", refresh: !!options.refresh, sim : this.sim, value : value }); } // Specify a new value for a program register setProgramRegister(id, value, options = {}) { return this.core.send({ command: "setProgramRegister", id : id, refresh: !!options.refresh, sim : this.sim, value : value }); } // Specify the current ROM buffer setROM(rom, options = {}) { return this.core.send({ command: "setROM", rom : rom, refresh: !!options.refresh, sim : this.sim }, [ rom.buffer ]); } // Specify a new value for a system register setSystemRegister(id, value, options = {}) { return this.core.send({ command: "setSystemRegister", id : id, refresh: !!options.refresh, sim : this.sim, value : value }); } // Ubsubscribe from frame data unsubscribe(key) { return this.core.unsubscribe(key, this.sim); } // Write multiple bytes to the bus write(address, bytes, options = {}) { return this.core.send({ address : address, command : "write", bytes : bytes, debug : !("debug" in options) || !!options.debug, refresh : !!options.refresh, sim : this.sim, subscribe: options.subscribe }, bytes instanceof ArrayBuffer ? [ bytes ] : bytes.buffer instanceof ArrayBuffer ? [ bytes.buffer ] : undefined ); } ///////////////////////////// Package Methods ///////////////////////////// // The simulation has been destroyed destroy() { let sim = this.sim; this.core = null; this.sim = 0; return sim; } } export { Sim };