63 lines
695 B
C
63 lines
695 B
C
|
#pragma once
|
||
|
|
||
|
#include "types.h"
|
||
|
|
||
|
class Cpu;
|
||
|
class Mem_device;
|
||
|
|
||
|
enum Flags {
|
||
|
F_ZERO = 0x8,
|
||
|
F_SUB = 0x4,
|
||
|
F_HALF = 0x2,
|
||
|
F_CARRY = 0x1,
|
||
|
};
|
||
|
|
||
|
union Register_pair {
|
||
|
struct { u8 hi; u8 lo; }
|
||
|
u16 hilo;
|
||
|
};
|
||
|
|
||
|
struct Cpu_state {
|
||
|
// Registers
|
||
|
union {
|
||
|
u16 BC;
|
||
|
struct { u8 B; u8 C; };
|
||
|
};
|
||
|
union {
|
||
|
u16 DE;
|
||
|
struct { u8 D; u8 E; };
|
||
|
};
|
||
|
union {
|
||
|
u16 HL;
|
||
|
struct { u8 H; u8 L; };
|
||
|
};
|
||
|
|
||
|
u8 A;
|
||
|
u16 SP;
|
||
|
u16 PC;
|
||
|
|
||
|
bool zero;
|
||
|
bool subtract;
|
||
|
bool halfcarry;
|
||
|
bool carry;
|
||
|
};
|
||
|
|
||
|
class Cpu {
|
||
|
private:
|
||
|
Cpu_state state;
|
||
|
Mem_device* bus;
|
||
|
|
||
|
typedef u8 opcode_t;
|
||
|
|
||
|
private:
|
||
|
u8 readPC();
|
||
|
|
||
|
void pushStack(u8 data);
|
||
|
u8 popStack();
|
||
|
|
||
|
public:
|
||
|
Cpu();
|
||
|
|
||
|
void step();
|
||
|
};
|