1 #pragma once
2 #include "stdafx.h"
3 #include "Zapper.h"
4 
5 class VsZapper : public Zapper
6 {
7 private:
8 	uint32_t _stateBuffer = 0;
9 
10 protected:
StreamState(bool saving)11 	void StreamState(bool saving) override
12 	{
13 		Zapper::StreamState(saving);
14 		Stream(_stateBuffer);
15 	}
16 
RefreshStateBuffer()17 	void RefreshStateBuffer() override
18 	{
19 		_stateBuffer = 0x10 | (IsLightFound() ? 0x40 : 0x00) | (IsPressed(Zapper::Buttons::Fire) ? 0x80 : 0x00);
20 	}
21 
22 public:
VsZapper(shared_ptr<Console> console,uint8_t port)23 	VsZapper(shared_ptr<Console> console, uint8_t port) : Zapper(console, port)
24 	{
25 	}
26 
ReadRAM(uint16_t addr)27 	uint8_t ReadRAM(uint16_t addr) override
28 	{
29 		if(IsCurrentPort(addr)) {
30 			uint8_t returnValue = _stateBuffer & 0x01;
31 			_stateBuffer >>= 1;
32 			StrobeProcessRead();
33 			return returnValue;
34 		}
35 
36 		return 0;
37 	}
38 
WriteRAM(uint16_t addr,uint8_t value)39 	void WriteRAM(uint16_t addr, uint8_t value) override
40 	{
41 		StrobeProcessWrite(value);
42 	}
43 };