From 8c25e202e86c72cb5c0118977db142fe01943a01 Mon Sep 17 00:00:00 2001 From: Franco Colmenarez Date: Wed, 27 Dec 2023 22:19:05 -0500 Subject: [PATCH] cop --- snes-core/src/cpu/instructionstemp/cop.rs | 38 +++++++++++++++++++++++ snes-core/src/cpu/instructionstemp/mod.rs | 1 + 2 files changed, 39 insertions(+) create mode 100644 snes-core/src/cpu/instructionstemp/cop.rs diff --git a/snes-core/src/cpu/instructionstemp/cop.rs b/snes-core/src/cpu/instructionstemp/cop.rs new file mode 100644 index 0000000..fe126e8 --- /dev/null +++ b/snes-core/src/cpu/instructionstemp/cop.rs @@ -0,0 +1,38 @@ +use crate::cpu::{bus::Bus, registers::Registers}; + +use super::{CPUInstruction, Decode}; +use super::decoder_common; +use super::push_common; +use crate::cpu::cycles; + +static INSTR_NAME: &'static str = "COP"; + +pub struct COP {} + +impl CPUInstruction for COP { + fn execute(&self, registers: &mut Registers, bus: &mut Bus) { + push_common::do_push(registers, bus, &[registers.pbr]); + push_common::do_push(registers, bus, &[(registers.pc >> 8) as u8, registers.pc as u8]); + push_common::do_push(registers, bus, &[registers.p]); + registers.set_decimal_mode_flag(false); + registers.set_irq_disable_flag(true); + let (bytes, cycles) = cycles::increment_cycles_brk(registers.emulation_mode); + registers.increment_pc(bytes); registers.cycles += cycles; + } +} + +impl Decode for COP { + fn mnemonic(&self, _registers: &Registers, _bus: &Bus, opcode: u8) -> String { + decoder_common::mnemonic_single_byte_instr(opcode, INSTR_NAME) + } +} + + +#[cfg(test)] +mod cpu_instructions_tests { + use super::*; + + #[test] + fn test() { + } +} diff --git a/snes-core/src/cpu/instructionstemp/mod.rs b/snes-core/src/cpu/instructionstemp/mod.rs index b16acc6..471a4e4 100644 --- a/snes-core/src/cpu/instructionstemp/mod.rs +++ b/snes-core/src/cpu/instructionstemp/mod.rs @@ -22,6 +22,7 @@ pub mod cld; pub mod cli; pub mod clv; pub mod cmp; +pub mod cop; pub mod bit_common; pub mod decoder_common; pub mod branch_common;