Added x86:LE:16:Protected Mode

This commit is contained in:
caheckman 2019-08-22 16:44:59 -04:00
parent cbf7b80587
commit 8240d3c8db
9 changed files with 78 additions and 32 deletions

View file

@ -35,6 +35,7 @@ public class ProtectedAddressSpace extends SegmentedAddressSpace {
offsetMask = 1;
offsetMask <<= offsetSize;
offsetMask -= 1;
maxAddress = getUncheckedAddress(maxOffset);
}
@Override
@ -64,4 +65,11 @@ public class ProtectedAddressSpace extends SegmentedAddressSpace {
protected SegmentedAddress getAddressInSegment(long flat, int preferredSegment) {
return null; // The segment cannot be changed as the flat explicitly encodes it
}
@Override
public int getNextOpenSegment(Address addr) {
int res = getDefaultSegmentFromFlat(addr.getOffset());
res += 1;
return res;
}
}

View file

@ -46,10 +46,9 @@ public class SegmentedAddressSpace extends GenericAddressSpace {
*/
protected SegmentedAddressSpace(String name, int size, int unique) {
super(name, size, TYPE_RAM, unique);
spaceSize = 1;
spaceSize <<= size;
maxOffset = spaceSize - 1;
maxAddress = getUncheckedAddress(maxOffset);
// maxAddress = getUncheckedAddress(maxOffset);
// Constructors for derived classes that call this will
// need to reconstruct maxAddress themselves.
}
/**
@ -318,6 +317,18 @@ public class SegmentedAddressSpace extends GenericAddressSpace {
return new SegmentedAddress(this, segment, segmentOffset);
}
/**
* Get the segment index for the first segment whose start address
* comes after the given address
* @param addr is the given address
* @return the segment index
*/
public int getNextOpenSegment(Address addr) {
int res = (int) addr.getOffset(); // The "flat" offset (presumably real-mode encoded)
res = (res >> 4) + 1;
return res;
}
/**
*
* @see ghidra.program.model.address.AddressSpace#getPhysicalSpace()