aboutsummaryrefslogtreecommitdiffstats
path: root/src/Processor.hpp
blob: b00c02cd8445bddc68f8ab229295acec3aaea82e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#pragma once

#include <cstdint>
#include "Memory.hpp"

namespace DMG01
{
	class SM83
	{
    public:
		struct Cycles
		{
			uint32_t total_cycles;
		};
		union Registers
		{
			uint16_t word;
			struct
			{
				uint8_t higher;
				uint8_t lower;
			} byte;
		};
		Registers af;
		Registers hl;
		Registers de;
		Registers bc;
		uint16_t pc;
		uint16_t sp;
		Cycles cycles;
		bool stop_state;
		inline void add_cycles(Cycles& cycles, const uint32_t count);
		inline void set_flag(uint8_t& f, uint8_t index, bool on=true);
		inline bool test_flag(uint8_t& f, const uint8_t index);
		void load_bin(const std::string& filename, Memory& memory);
		template <typename T1, typename T2>
		inline void ld_imm(T1& reg, const T2& data);
		template <typename T1, typename T2>
		inline void ld_reg(T1& reg1, const T2& reg2);
		template <typename T>
		inline void inc_reg(T& val);
		template <typename T>
		inline void dec_reg(T& val);
		inline void rlca(SM83& sm83);
		template <typename T1, typename T2>
		inline void add_reg(T1& aug, const T2& add);
		inline void rrca(SM83& sm83);
		inline void stop(SM83& sm83, Memory& memory);
		void process_opcodes(const uint8_t opcode, Memory& memory, SM83& sm83);
	};   
}