8048: fix JMPP @A extra dereference

JMPP was doing two indirections : one in PData and then one again in
AddrInd, where there should only be one.

MCS-48 docs :

> The contents of the Program Memory location addressed by the
Accumulator
is used as the new page offset of the Program Counter.

i.e.
(PC 0 – 7) <- ((A))

Previous implementation caused disasm / decompiler errors such as
"Low-level Error: Could not find op at target address"

refs:
https://github.com/NationalSecurityAgency/ghidra/discussions/4818
This commit is contained in:
fenugrec 2022-12-13 10:53:50 -05:00 committed by ghidorahrex
parent 97b0984426
commit bb08f67417

View File

@ -273,7 +273,7 @@ P3Data: @A is A {
local addr:2 = 0x300; addr[0,8] = A; export *[CODE]:1 addr;
}
AddrInd: PData is PData {
local addr:2 = inst_next; addr[0,8] = PData; export *[CODE]:1 addr;
local addr:2 = inst_next; addr[0,8] = PData; export addr;
}
Ab: abit is abit {
local bit:1 = (A>>abit)&1; export bit;
@ -450,7 +450,7 @@ RniI: Imm is Imm {
goto Addr12;
}
:JMPP AddrInd is ophi=11 & oplo=3 & AddrInd {
goto AddrInd;
goto [AddrInd];
}
:MOV A,Imm is (ophi=2 & A)... & Imm {
A = Imm;