chore: reorganize instructions.rs
This commit is contained in:
		| @@ -1,5 +1,6 @@ | |||||||
| use super::cpu::{Cpu, Flags, Register, RegisterPair}; | use super::cpu::{Cpu, Flags, Register, RegisterPair}; | ||||||
| use std::convert::TryFrom; | use std::convert::TryFrom; | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] | #[derive(Debug, Copy, Clone)] | ||||||
| pub enum Instruction { | pub enum Instruction { | ||||||
|     NOP, |     NOP, | ||||||
| @@ -48,6 +49,75 @@ pub enum Instruction { | |||||||
|     SET(u8, InstrRegister), |     SET(u8, InstrRegister), | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | pub enum JPTarget { | ||||||
|  |     RegisterPair(RegisterPair), | ||||||
|  |     ImmediateWord(u16), | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | pub enum Registers { | ||||||
|  |     Byte(InstrRegister), | ||||||
|  |     Word(RegisterPair), | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | pub enum MATHTarget { | ||||||
|  |     HL, | ||||||
|  |     SP, | ||||||
|  |     Register(InstrRegister), | ||||||
|  |     RegisterPair(RegisterPair), | ||||||
|  |     ImmediateByte(u8), | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | pub enum LDTarget { | ||||||
|  |     Register(InstrRegister), | ||||||
|  |     IndirectRegister(InstrRegisterPair), | ||||||
|  |     ByteAtAddress(u16), | ||||||
|  |     ImmediateWord(u16), | ||||||
|  |     ImmediateByte(u8), | ||||||
|  |     RegisterPair(RegisterPair), | ||||||
|  |     ByteAtAddressWithOffset(u8), | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | enum InstrRegisterPair { | ||||||
|  |     AF, | ||||||
|  |     BC, | ||||||
|  |     DE, | ||||||
|  |     HL, | ||||||
|  |     SP, | ||||||
|  |     PC, | ||||||
|  |     IncrementHL, | ||||||
|  |     DecrementHL, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | enum InstrRegister { | ||||||
|  |     A, | ||||||
|  |     B, | ||||||
|  |     C, | ||||||
|  |     D, | ||||||
|  |     E, | ||||||
|  |     H, | ||||||
|  |     L, | ||||||
|  |     IndirectHL, // (HL) | ||||||
|  |     IndirectC,  // (0xFF00 + C) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | pub enum JumpCondition { | ||||||
|  |     NotZero, | ||||||
|  |     Zero, | ||||||
|  |     NotCarry, | ||||||
|  |     Carry, | ||||||
|  |     Always, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Copy, Clone)] | ||||||
|  | struct Table; | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] | #[derive(Debug, Copy, Clone)] | ||||||
| pub struct Cycles(u8); | pub struct Cycles(u8); | ||||||
|  |  | ||||||
| @@ -1783,50 +1853,6 @@ impl Instruction { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| pub enum JPTarget { |  | ||||||
|     RegisterPair(RegisterPair), |  | ||||||
|     ImmediateWord(u16), |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| pub enum Registers { |  | ||||||
|     Byte(InstrRegister), |  | ||||||
|     Word(RegisterPair), |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| pub enum MATHTarget { |  | ||||||
|     HL, |  | ||||||
|     SP, |  | ||||||
|     Register(InstrRegister), |  | ||||||
|     RegisterPair(RegisterPair), |  | ||||||
|     ImmediateByte(u8), |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| pub enum LDTarget { |  | ||||||
|     Register(InstrRegister), |  | ||||||
|     IndirectRegister(InstrRegisterPair), |  | ||||||
|     ByteAtAddress(u16), |  | ||||||
|     ImmediateWord(u16), |  | ||||||
|     ImmediateByte(u8), |  | ||||||
|     RegisterPair(RegisterPair), |  | ||||||
|     ByteAtAddressWithOffset(u8), |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| enum InstrRegisterPair { |  | ||||||
|     AF, |  | ||||||
|     BC, |  | ||||||
|     DE, |  | ||||||
|     HL, |  | ||||||
|     SP, |  | ||||||
|     PC, |  | ||||||
|     IncrementHL, |  | ||||||
|     DecrementHL, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| impl From<RegisterPair> for InstrRegisterPair { | impl From<RegisterPair> for InstrRegisterPair { | ||||||
|     fn from(pair: RegisterPair) -> Self { |     fn from(pair: RegisterPair) -> Self { | ||||||
|         match pair { |         match pair { | ||||||
| @@ -1861,19 +1887,6 @@ impl TryFrom<InstrRegisterPair> for RegisterPair { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| enum InstrRegister { |  | ||||||
|     A, |  | ||||||
|     B, |  | ||||||
|     C, |  | ||||||
|     D, |  | ||||||
|     E, |  | ||||||
|     H, |  | ||||||
|     L, |  | ||||||
|     IndirectHL, // (HL) |  | ||||||
|     IndirectC,  // (0xFF00 + C) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| impl TryFrom<Register> for InstrRegister { | impl TryFrom<Register> for InstrRegister { | ||||||
|     type Error = &'static str; // FIXME: Proper error type goes here |     type Error = &'static str; // FIXME: Proper error type goes here | ||||||
|  |  | ||||||
| @@ -1913,18 +1926,6 @@ impl TryFrom<InstrRegister> for Register { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| pub enum JumpCondition { |  | ||||||
|     NotZero, |  | ||||||
|     Zero, |  | ||||||
|     NotCarry, |  | ||||||
|     Carry, |  | ||||||
|     Always, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #[derive(Debug, Copy, Clone)] |  | ||||||
| struct Table; |  | ||||||
|  |  | ||||||
| impl Table { | impl Table { | ||||||
|     pub fn r(index: u8) -> InstrRegister { |     pub fn r(index: u8) -> InstrRegister { | ||||||
|         match index { |         match index { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user