diff --git a/src/emu.c b/src/emu.c index ab41b7b..7dece4e 100644 --- a/src/emu.c +++ b/src/emu.c @@ -5,13 +5,14 @@ static inline Instruction fetchInst(Emulator* emu) { } static inline void updateFlagsRegister(Emulator* emu, int32_t value) { - if (value == 0) { - emu->regs[REG_F] = FLAG_ZERO; - } else if (value < 0) { - emu->regs[REG_F] = FLAG_NEGATIVE; - } else if (value > UINT16_MAX) { - emu->regs[REG_F] = FLAG_OVERFLOW; - } + + FlagsRegister flags = (FlagsRegister)emu->regs[REG_F]; + + flags.fields.zero = value == 0; + flags.fields.negative = value < 0; + flags.fields.overflow = value > UINT16_MAX; + + emu->regs[REG_F] = flags.raw; } static inline void updateDevices(Emulator* emu) { diff --git a/src/emu.h b/src/emu.h index ea253d5..b9d3508 100644 --- a/src/emu.h +++ b/src/emu.h @@ -24,9 +24,21 @@ typedef struct { uint32_t ihp; uint32_t sp; + bool irq; bool halted; } Emulator; +typedef union { + struct { + uint16_t zero : 1; + uint16_t overflow : 1; + uint16_t negative : 1; + uint16_t interrupts : 1; + } fields; + + uint16_t raw; +} FlagsRegister; + // -- FUNCTIONS -- // Emulator* initEmulator(uint32_t memorySize); void freeEmulator(Emulator* emu);