summaryrefslogtreecommitdiff
path: root/src/nes/nes.hh
blob: 16e645ab5f594f356a4430a209b3df4267cf3eac (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
#pragma once

#include "nes/util/cycle_count.hh"
#include "nes/cartridge.hh"
#include "nes/controller.hh"
#include "nes/cpu.hh"
#include "nes/ppu.hh"
#include "nes/mapper.hh"
#include "status.hh"

namespace nes
{
	class display;

	/// The main console abstraction.
	class nes
	{
		cartridge cartridge_;
		display& display_;
		controller controller_1_;
		controller controller_2_;
		mapper mapper_;
		ppu ppu_;
		cpu cpu_;
		cycle_count current_cycles_;

	public:
		explicit nes(cartridge, display&);

		nes(nes const&) = delete;
		nes(nes&&) = delete;
		auto operator=(nes const&) -> nes& = delete;
		auto operator=(nes&&) -> nes& = delete;

		auto get_controller_1() const -> controller const& { return controller_1_; }
		auto get_controller_1() -> controller& { return controller_1_; }
		auto get_controller_2() const -> controller const& { return controller_2_; }
		auto get_controller_2() -> controller& { return controller_2_; }

		auto step(std::chrono::microseconds delta) -> void;
		auto step(cycle_count delta) -> void;

		auto snapshot() -> test::status;
	};
} // namespace nes