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 };