mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-22 14:33:51 +00:00
arm: fixed pc and listing for thumb
This commit is contained in:
parent
a7f62079db
commit
e7dc2ce750
@ -2749,7 +2749,7 @@ ARMCore.prototype.resetCPU = function(startOffset) {
|
||||
|
||||
ARMCore.prototype.freeze = function() : ARMCoreState {
|
||||
return {
|
||||
PC: this.gprs[15] - 4,
|
||||
PC: this.gprs[15] - this.instructionWidth,
|
||||
SP: this.gprs[13],
|
||||
'gprs': [
|
||||
this.gprs[0],
|
||||
@ -4097,6 +4097,7 @@ ARMCore.prototype.compileThumb = function(instruction) {
|
||||
|
||||
op.execMode = ARMMode.MODE_THUMB;
|
||||
op.fixedJump = op.fixedJump || false;
|
||||
//console.log(hex(instruction), op);
|
||||
return op;
|
||||
};
|
||||
|
||||
@ -4137,7 +4138,7 @@ export class ARM32CPU implements CPU, InstructionBased, ARMMMUInterface, ARMIRQI
|
||||
return n > 0 ? n : 1;
|
||||
}
|
||||
getPC(): number {
|
||||
return this.core.gprs[15] - 4;
|
||||
return this.core.gprs[15] - this.core.instructionWidth;
|
||||
}
|
||||
getSP(): number {
|
||||
return this.core.gprs[13];
|
||||
|
@ -2935,8 +2935,14 @@ function assembleARMIPS(step:BuildStep) {
|
||||
var lst = listings[path2];
|
||||
if (lst == null) { lst = listings[path2] = {lines:[]}; }
|
||||
var ofs = parseInt(m[1], 16);
|
||||
var insn = objout.slice(ofs, ofs+4); // TODO: doesn't do thumb or !=4 bytes
|
||||
if (lastofs == ofs) lst.lines.pop(); else lastofs = ofs;
|
||||
var insn = objout.slice(ofs, ofs+4);
|
||||
if (lastofs == ofs) {
|
||||
lst.lines.pop(); // get rid of duplicate offset
|
||||
} else if (lastofs+2 == ofs) {
|
||||
var lastline = lst.lines[lst.lines.length-1]; // convert 4-byte to 2-byte insn
|
||||
if (lastline && lastline.insns) lastline.insns = lastline.insns.substring(4,8);
|
||||
}
|
||||
lastofs = ofs;
|
||||
lst.lines.push({
|
||||
path: path,
|
||||
line: parseInt(m[4]),
|
||||
|
Loading…
Reference in New Issue
Block a user