1 #pragma once
2 #include "stdafx.h"
3 #include "ControlManager.h"
4 #include "CPU.h"
5 #include "Console.h"
6 #include "VsZapper.h"
7 #include <assert.h>
8 #include "StandardController.h"
9 #include "MovieManager.h"
10 #include "IInputProvider.h"
11 
12 class BaseControlDevice;
13 
14 class VsControlManager : public ControlManager, public IInputProvider
15 {
16 private:
17 	uint8_t _prgChrSelectBit = 0;
18 	uint8_t _slaveMasterBit = 0;
19 
20 	bool _refreshState = false;
21 
22 	VsSystemType _vsSystemType;
23 
24 	uint32_t _protectionCounter = 0;
25 	const uint32_t _protectionData[3][32] = {
26 		{
27 			0xFF, 0xBF, 0xB7, 0x97, 0x97, 0x17, 0x57, 0x4F,
28 			0x6F, 0x6B, 0xEB, 0xA9, 0xB1, 0x90, 0x94, 0x14,
29 			0x56, 0x4E, 0x6F, 0x6B, 0xEB, 0xA9, 0xB1, 0x90,
30 			0xD4, 0x5C, 0x3E, 0x26, 0x87, 0x83, 0x13, 0x00
31 		},
32 		{
33 			0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00,
34 			0x00, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00,
35 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
36 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
37 		},
38 		{
39 			0x05, 0x01, 0x89, 0x37, 0x05, 0x00, 0xD1, 0x3E,
40 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
43 		}
44 	};
45 
46 protected:
47 	ControllerType GetControllerType(uint8_t port) override;
48 	void RemapControllerButtons() override;
49 	uint8_t GetOpenBusMask(uint8_t port) override;
50 
51 	void UpdateSlaveMasterBit(uint8_t slaveMasterBit);
52 
53 public:
54 	using ControlManager::ControlManager;
55 
56 	void StreamState(bool saving) override;
57 	void Reset(bool softReset) override;
58 
59 	void GetMemoryRanges(MemoryRanges &ranges) override;
60 
61 	uint8_t GetPrgChrSelectBit();
62 
63 	void UpdateControlDevices() override;
64 
65 	uint8_t ReadRAM(uint16_t addr) override;
66 	void WriteRAM(uint16_t addr, uint8_t value) override;
67 
68 	// Inherited via IInputProvider
69 	virtual bool SetInput(BaseControlDevice* device) override;
70 };