mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 18:47:34 +00:00
UE+LibX86: Support bigger reads and writes
This commit is contained in:
parent
a99812633b
commit
f1957bb86b
11 changed files with 316 additions and 4 deletions
|
@ -133,6 +133,25 @@ ValueWithShadow<u64> SoftCPU::read_memory64(X86::LogicalAddress address)
|
|||
return value;
|
||||
}
|
||||
|
||||
ValueWithShadow<u128> SoftCPU::read_memory128(X86::LogicalAddress address)
|
||||
{
|
||||
VERIFY(address.selector() == 0x1b || address.selector() == 0x23 || address.selector() == 0x2b);
|
||||
auto value = m_emulator.mmu().read128(address);
|
||||
#if MEMORY_DEBUG
|
||||
outln("\033[36;1mread_memory128: @{:04x}:{:08x} -> {:032x} ({:032x})\033[0m", address.selector(), address.offset(), value, value.shadow());
|
||||
#endif
|
||||
return value;
|
||||
}
|
||||
ValueWithShadow<u256> SoftCPU::read_memory256(X86::LogicalAddress address)
|
||||
{
|
||||
VERIFY(address.selector() == 0x1b || address.selector() == 0x23 || address.selector() == 0x2b);
|
||||
auto value = m_emulator.mmu().read256(address);
|
||||
#if MEMORY_DEBUG
|
||||
outln("\033[36;1mread_memory256: @{:04x}:{:08x} -> {:064x} ({:064x})\033[0m", address.selector(), address.offset(), value, value.shadow());
|
||||
#endif
|
||||
return value;
|
||||
}
|
||||
|
||||
void SoftCPU::write_memory8(X86::LogicalAddress address, ValueWithShadow<u8> value)
|
||||
{
|
||||
VERIFY(address.selector() == 0x23 || address.selector() == 0x2b);
|
||||
|
@ -161,6 +180,24 @@ void SoftCPU::write_memory64(X86::LogicalAddress address, ValueWithShadow<u64> v
|
|||
m_emulator.mmu().write64(address, value);
|
||||
}
|
||||
|
||||
void SoftCPU::write_memory128(X86::LogicalAddress address, ValueWithShadow<u128> value)
|
||||
{
|
||||
VERIFY(address.selector() == 0x23 || address.selector() == 0x2b);
|
||||
#if MEMORY_DEBUG
|
||||
outln("\033[36;1mwrite_memory128: @{:04x}:{:08x} <- {:032x} ({:032x})\033[0m", address.selector(), address.offset(), value, value.shadow());
|
||||
#endif
|
||||
m_emulator.mmu().write128(address, value);
|
||||
}
|
||||
|
||||
void SoftCPU::write_memory256(X86::LogicalAddress address, ValueWithShadow<u256> value)
|
||||
{
|
||||
VERIFY(address.selector() == 0x23 || address.selector() == 0x2b);
|
||||
#if MEMORY_DEBUG
|
||||
outln("\033[36;1mwrite_memory256: @{:04x}:{:08x} <- {:064x} ({:064x})\033[0m", address.selector(), address.offset(), value, value.shadow());
|
||||
#endif
|
||||
m_emulator.mmu().write256(address, value);
|
||||
}
|
||||
|
||||
void SoftCPU::push_string(const StringView& string)
|
||||
{
|
||||
size_t space_to_allocate = round_up_to_power_of_two(string.length() + 1, 16);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue