protected mode bit

This commit is contained in:
caheckman 2019-08-25 13:35:15 -04:00
parent 3556745c32
commit 017537be35
4 changed files with 8 additions and 5 deletions

View file

@ -105,10 +105,10 @@ public class SegmentedAddress extends GenericAddress {
*/
@Override
public Address getNewAddress(long byteOffset) {
SegmentedAddress res =
((SegmentedAddressSpace) addrSpace).getAddressInSegment(byteOffset, segment);
SegmentedAddressSpace segSpace = (SegmentedAddressSpace) addrSpace;
SegmentedAddress res = segSpace.getAddressInSegment(byteOffset, segment);
if (res == null) {
return this;
return segSpace.getAddress(byteOffset);
}
return res;
}

View file

@ -251,7 +251,7 @@ define context contextreg
opsize=(2,3) # =0 16-bit operands =1 32-bit operands =2 64-bit operands
segover=(4,6) # 0=default 1=cs 2=ss 3=ds 4=es 5=fs 6=gs
highseg=(4,4) # high bit of segover will be set for ES, FS, GS
# sstype=(7,7) # 0=DS default 1=SS default
protectedMode=(7,7) # 0 for real mode, 1 for protected mode
repneprefx=(8,8) # 0xf2 REPNE prefix
repprefx=(9,9) # 0xf3 REP prefix
@ -1387,7 +1387,8 @@ check_Rmr32_dest: is epsilon { }
check_rm32_dest: is epsilon { }
check_EAX_dest: is epsilon { }
ptr1616: reloc is imm16; j16 [ reloc = j16*0x10000 + imm16; ] { CS = j16; export *[ram]:4 reloc; }
ptr1616: reloc is protectedMode=0 & imm16; j16 [ reloc = j16*0x10 + imm16; ] { CS = j16; export *[ram]:4 reloc; }
ptr1616: reloc is protectedMode=1 & imm16; j16 [ reloc = j16*0x10000 + imm16; ] { CS = j16; export *[ram]:4 reloc; }
ptr1632: j16":"imm32 is imm32; j16 { CS = j16; export *:4 imm32; }

View file

@ -19,6 +19,7 @@
<context_set space="ram">
<set name="addrsize" val="0"/>
<set name="opsize" val="0"/>
<set name="protectedMode" val="0"/>
</context_set>
<tracked_set space="ram">
<set name="DF" val="0"/>

View file

@ -20,6 +20,7 @@
<context_set space="ram">
<set name="addrsize" val="0"/>
<set name="opsize" val="0"/>
<set name="protectedMode" val="1"/>
</context_set>
<tracked_set space="ram">
<set name="DF" val="0"/>