mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 04:37:44 +00:00
UserspaceEmulator: Add the INC and ADD instructions
More inline assembly. I'm still figuring out how to combine templates and inline assembly, but it's turning out pretty cool. :^)
This commit is contained in:
parent
12ab46def9
commit
e852768ba6
2 changed files with 103 additions and 27 deletions
|
@ -201,6 +201,18 @@ public:
|
|||
void set_pf(bool value) { set_flag(Flags::PF, value); }
|
||||
void set_cf(bool value) { set_flag(Flags::CF, value); }
|
||||
|
||||
void set_flags_oszapc(u32 new_flags)
|
||||
{
|
||||
m_eflags &= ~(Flags::OF | Flags::SF | Flags::ZF | Flags::AF | Flags::PF | Flags::CF);
|
||||
m_eflags |= new_flags & (Flags::OF | Flags::SF | Flags::ZF | Flags::AF | Flags::PF | Flags::CF);
|
||||
}
|
||||
|
||||
void set_flags_oszap(u32 new_flags)
|
||||
{
|
||||
m_eflags &= ~(Flags::OF | Flags::SF | Flags::ZF | Flags::AF | Flags::PF);
|
||||
m_eflags |= new_flags & (Flags::OF | Flags::SF | Flags::ZF | Flags::AF | Flags::PF);
|
||||
}
|
||||
|
||||
u16 cs() const { return m_segment[(int)X86::SegmentRegister::CS]; }
|
||||
u16 ds() const { return m_segment[(int)X86::SegmentRegister::DS]; }
|
||||
u16 es() const { return m_segment[(int)X86::SegmentRegister::ES]; }
|
||||
|
@ -757,12 +769,8 @@ private:
|
|||
|
||||
template<typename T>
|
||||
T sar_impl(T data, u8 steps);
|
||||
|
||||
void set_flags_oszapc(u32 new_flags)
|
||||
{
|
||||
m_eflags &= ~(Flags::OF | Flags::SF | Flags::ZF | Flags::AF | Flags::PF | Flags::CF);
|
||||
m_eflags |= new_flags & (Flags::OF | Flags::SF | Flags::ZF | Flags::AF | Flags::PF | Flags::CF);
|
||||
}
|
||||
template<typename T>
|
||||
T inc_impl(T);
|
||||
|
||||
private:
|
||||
Emulator& m_emulator;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue