use std::fmt::Display;
#[derive(Debug, PartialEq, Clone)]
pub enum Op {
ADC(Location8, Location8),
ADD8(Location8, Location8),
INC(Location8),
SBC(Location8, Location8),
SUB8(Location8, Location8),
DEC(Location8),
AND(Location8),
OR(Location8),
XOR(Location8),
CP(Location8),
CPL, NEG, CCF, SCF,
NOP,
HALT,
DAA,
RLCA,
RLA,
RRCA,
RRA,
RLC(Location8),
RL(Location8),
RRC(Location8),
RR(Location8),
SLA(Location8),
SRL(Location8),
SRA(Location8),
RLD,
RRD,
BIT(u8, Location8),
SET(u8, Location8),
RES(u8, Location8),
IN(Location8, Location8),
OUT(Location8, Location8),
JP(JumpConditional, Location16),
JR(JumpConditional, i8),
DJNZ(i8),
CALL(JumpConditional, u16),
RET(JumpConditional),
POP(Location16),
PUSH(Location16),
LD8(Location8, Location8),
LD16(Location16, Location16),
}
#[derive(Debug, PartialEq, Clone, Copy, Display)]
pub enum Reg8 {
A,
F,
B,
C,
D,
E,
H,
L,
AP,
FP,
BP,
CP,
DP,
EP,
HP,
LP,
}
#[derive(Debug, PartialEq, Clone, Display)]
pub enum Reg16 {
AF,
BC,
DE,
HL,
AFP,
BCP,
DEP,
HLP,
IX,
IY,
SP,
}
#[derive(Debug, PartialEq, Clone)]
pub enum Location8 {
Reg(Reg8),
RegIndirect(Reg16),
ImmediateIndirect(u16),
Immediate(u8),
}
#[derive(Debug, PartialEq, Clone)]
pub enum Location16 {
Reg(Reg16),
RegIndirect(Reg16), ImmediateIndirect(u16),
Immediate(u16),
}
#[derive(Debug, PartialEq, Clone)]
pub enum StatusFlag {
Carry,
AddSubtract,
ParityOverflow,
HalfCarry,
Zero,
Sign,
}
#[derive(Debug, PartialEq, Copy, Clone)]
pub enum JumpConditional {
Unconditional,
NonZero,
Zero,
NoCarry,
Carry,
ParityOdd,
ParityEven,
SignPositive,
SignNegative,
}