summaryrefslogtreecommitdiff
path: root/lib/nes/sys/controller.hh
blob: c33036528afb2c362cf76b1942329e83bf2bcf11 (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
#pragma once

#include "nes/sys/types/button-mask.hh"
#include "nes/common/types.hh"

namespace nes::sys
{
	class controller
	{
		button_mask pressed_;
		u32 index_{ 0 };
		bool strobing_{ false };

	public:
		explicit controller() = default;

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

		auto get_pressed() const -> button_mask { return pressed_;}
		auto ref_pressed() -> button_mask& { return pressed_; }
		auto set_pressed(button_mask const value) -> void { pressed_ = value; }

		// IO register

		auto read() -> u8;
		auto write(u8) -> void;
	};
} // namespace nes::sys