Fixing a Gitsplosion
This commit is contained in:
+11
-2
@@ -146,6 +146,15 @@ class Core {
|
||||
}, [], options);
|
||||
}
|
||||
|
||||
// Retrieve the value of a program register
|
||||
getSystemRegister(sim, id, options) {
|
||||
return this.message({
|
||||
command: "getProgramRegister",
|
||||
id : id,
|
||||
sim : sim.pointer
|
||||
}, [], options);
|
||||
}
|
||||
|
||||
// Retrieve the value of a system register
|
||||
getSystemRegister(sim, id, options) {
|
||||
return this.message({
|
||||
@@ -200,10 +209,10 @@ class Core {
|
||||
}
|
||||
|
||||
// Specify a value for a program register
|
||||
setProgramRegister(sim, index, value, options) {
|
||||
setProgramRegister(sim, id, value, options) {
|
||||
return this.message({
|
||||
command: "setProgramRegister",
|
||||
index : index,
|
||||
id : id,
|
||||
sim : sim.pointer,
|
||||
value : value
|
||||
}, [], options);
|
||||
|
||||
+15
-10
@@ -119,11 +119,11 @@ class CoreThread {
|
||||
let program = new Int32Array (32);
|
||||
let system = new Uint32Array(32);
|
||||
for (let x = 0; x < 32; x++) {
|
||||
program[x] = this.vbGetProgramRegister(msg.sim, x);
|
||||
system [x] = this.vbGetSystemRegister (msg.sim, x);
|
||||
program[x] = this.vbGetRegister(msg.sim, 0, x);
|
||||
system [x] = this.vbGetRegister(msg.sim, 1, x);
|
||||
}
|
||||
return {
|
||||
pc : this.vbGetProgramCounter(msg.sim) >>> 0,
|
||||
pc : this.vbGetRegister(msg.sim, 2, 0) >>> 0,
|
||||
program : program,
|
||||
system : system,
|
||||
transfers: [ program.buffer, system.buffer ]
|
||||
@@ -132,12 +132,17 @@ class CoreThread {
|
||||
|
||||
// Retrieve the value of PC
|
||||
getProgramCounter(msg) {
|
||||
return { value: this.vbGetProgramCounter(msg.sim) >>> 0 };
|
||||
return { value: this.vbGetRegister(msg.sim, 2, 0) >>> 0 };
|
||||
}
|
||||
|
||||
// Retrieve the value of a program register
|
||||
getProgramRegister(msg) {
|
||||
return { value: this.vbGetRegister(msg.sim, 0, msg.id) };
|
||||
}
|
||||
|
||||
// Retrieve the value of a system register
|
||||
getSystemRegister(msg) {
|
||||
return { value: this.vbGetSystemRegister(msg.sim, msg.id) >>> 0 };
|
||||
return { value: this.vbGetRegister(msg.sim, 1, msg.id) >>> 0 };
|
||||
}
|
||||
|
||||
// Read multiple bytes from memory
|
||||
@@ -214,19 +219,19 @@ class CoreThread {
|
||||
|
||||
let pcs = new Array(msg.sims.length);
|
||||
for (let x = 0; x < msg.sims.length; x++)
|
||||
pcs[x] = this.vbGetProgramCounter(msg.sims[x]) >>> 0;
|
||||
pcs[x] = this.vbGetRegister(msg.sims[x], 2, 0) >>> 0;
|
||||
|
||||
return { pcs: pcs };
|
||||
}
|
||||
|
||||
// Specify a value for the program counter
|
||||
setProgramCounter(msg) {
|
||||
return { value: this.vbSetProgramCounter(msg.sim, msg.value) >>> 0 };
|
||||
return { value: this.vbSetRegister(msg.sim, 2, 0, msg.value) >>> 0 };
|
||||
}
|
||||
|
||||
// Specify a value for a program register
|
||||
setProgramRegister(msg) {
|
||||
return {value:this.vbSetProgramRegister(msg.sim,msg.index,msg.value)};
|
||||
return { value: this.vbSetRegister(msg.sim, 0, msg.id, msg.value) };
|
||||
}
|
||||
|
||||
// Specify a cartridge ROM buffer
|
||||
@@ -258,7 +263,7 @@ class CoreThread {
|
||||
|
||||
// Specify a value for a system register
|
||||
setSystemRegister(msg) {
|
||||
return {value:this.vbSetSystemRegister(msg.sim,msg.id,msg.value)>>>0};
|
||||
return {value:this.vbSetRegister(msg.sim, 1, msg.id, msg.value)>>>0};
|
||||
}
|
||||
|
||||
// Execute the current instruction
|
||||
@@ -271,7 +276,7 @@ class CoreThread {
|
||||
|
||||
let pcs = new Array(msg.sims.length);
|
||||
for (let x = 0; x < msg.sims.length; x++)
|
||||
pcs[x] = this.vbGetProgramCounter(msg.sims[x]) >>> 0;
|
||||
pcs[x] = this.vbGetRegister(msg.sims[x], 2, 0) >>> 0;
|
||||
|
||||
return { pcs: pcs };
|
||||
}
|
||||
|
||||
+11
-10
@@ -41,22 +41,22 @@ EMSCRIPTEN_KEEPALIVE int PointerSize() {
|
||||
////////////////////////////// Debugger Commands //////////////////////////////
|
||||
|
||||
// Execute until the following instruction
|
||||
uint32_t RunNextAddress;
|
||||
static uint32_t RunNextAddress;
|
||||
static int RunNextFetch(VB *vb, int fetch, VBAccess *access) {
|
||||
return access->address == RunNextAddress;
|
||||
}
|
||||
static int RunNextExecute(VB *vb, VBInstruction *inst) {
|
||||
RunNextAddress = inst->address + inst->size;
|
||||
vbSetOnExecute(vb, NULL);
|
||||
vbSetOnFetch(vb, &RunNextFetch);
|
||||
vbSetCallback(vb, VB_ONEXECUTE, NULL);
|
||||
vbSetCallback(vb, VB_ONFETCH, &RunNextFetch);
|
||||
return 0;
|
||||
}
|
||||
EMSCRIPTEN_KEEPALIVE void RunNext(VB **vbs, int count) {
|
||||
uint32_t clocks = 20000000; // 1s
|
||||
vbSetOnExecute(vbs[0], &RunNextExecute);
|
||||
vbEmulateEx (vbs, count, &clocks);
|
||||
vbSetOnExecute(vbs[0], NULL);
|
||||
vbSetOnFetch (vbs[0], NULL);
|
||||
vbSetCallback(vbs[0], VB_ONEXECUTE, &RunNextExecute);
|
||||
vbEmulateEx (vbs, count, &clocks);
|
||||
vbSetCallback(vbs[0], VB_ONEXECUTE, NULL);
|
||||
vbSetCallback(vbs[0], VB_ONFETCH , NULL);
|
||||
}
|
||||
|
||||
// Execute the current instruction
|
||||
@@ -72,7 +72,8 @@ static int SingleStepFetch(VB *vb, int fetch, VBAccess *access) {
|
||||
EMSCRIPTEN_KEEPALIVE void SingleStep(VB **vbs, int count) {
|
||||
uint32_t clocks = 20000000; // 1s
|
||||
SingleStepBreak = vbs[0]->cpu.stage == 0 ? 0 : 1;
|
||||
vbSetOnFetch(vbs[0], &SingleStepFetch);
|
||||
vbEmulateEx (vbs, count, &clocks);
|
||||
vbSetOnFetch(vbs[0], NULL);
|
||||
vbSetCallback(vbs[0], VB_ONFETCH, &SingleStepFetch);
|
||||
vbEmulateEx (vbs, count, &clocks);
|
||||
vbSetCallback(vbs[0], VB_ONEXECUTE, NULL);
|
||||
vbSetCallback(vbs[0], VB_ONFETCH , NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user