diff options
| author | Shawn Hoffman <godisgovernment@gmail.com> | 2010-02-21 18:50:44 +0000 |
|---|---|---|
| committer | Shawn Hoffman <godisgovernment@gmail.com> | 2010-02-21 18:50:44 +0000 |
| commit | b6a3df2fcf8eabffa6cb91b8d88d291b6239ce11 (patch) | |
| tree | 523031f20bd8fa4dc6c3a986128266b9947802d1 /Source/Core | |
| parent | f7bf29a5289f17fd26a865af7e49c90333016db5 (diff) | |
commit current GBA link cable work. no touching (unless you're skid_au or ask first) :P
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5096 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Core.vcproj | 22 | ||||
| -rw-r--r-- | Source/Core/Core/Src/HW/GBAPipe.cpp | 164 | ||||
| -rw-r--r-- | Source/Core/Core/Src/HW/GBAPipe.h | 51 | ||||
| -rw-r--r-- | Source/Core/Core/Src/HW/SI_DeviceGBA.cpp | 180 | ||||
| -rw-r--r-- | Source/Core/Core/Src/HW/SI_DeviceGBA.h | 68 |
5 files changed, 98 insertions, 387 deletions
diff --git a/Source/Core/Core/Core.vcproj b/Source/Core/Core/Core.vcproj index 7732da0d93..5a18054a09 100644 --- a/Source/Core/Core/Core.vcproj +++ b/Source/Core/Core/Core.vcproj @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="Core"
ProjectGUID="{F0B874CB-4476-4199-9315-8343D05AE684}"
RootNamespace="Core"
@@ -45,7 +45,7 @@ <Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua"
+ AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua;..\..\..\Externals\SFML\include"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -115,7 +115,7 @@ <Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua"
+ AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua;..\..\..\Externals\SFML\include"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -189,7 +189,7 @@ FavorSizeOrSpeed="1"
OmitFramePointers="true"
EnableFiberSafeOptimizations="false"
- AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua"
+ AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua;..\..\..\Externals\SFML\include"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0"
StringPooling="true"
RuntimeLibrary="0"
@@ -265,7 +265,7 @@ OmitFramePointers="true"
EnableFiberSafeOptimizations="false"
WholeProgramOptimization="false"
- AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua"
+ AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua;..\..\..\Externals\SFML\include"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0"
StringPooling="true"
RuntimeLibrary="0"
@@ -339,7 +339,7 @@ FavorSizeOrSpeed="1"
OmitFramePointers="true"
EnableFiberSafeOptimizations="false"
- AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua"
+ AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua;..\..\..\Externals\SFML\include"
PreprocessorDefinitions="NDEBUG;_LIB;DEBUGFAST;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0"
RuntimeLibrary="0"
BufferSecurityCheck="true"
@@ -413,7 +413,7 @@ FavorSizeOrSpeed="1"
OmitFramePointers="true"
EnableFiberSafeOptimizations="false"
- AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua"
+ AdditionalIncludeDirectories=".\Core\Core\Src\Debugger;..\Common\Src;..\DiscIO\Src;..\..\Core\InputCommon\Src;..\..\PluginSpecs;..\..\..\Externals\LZO;..\..\..\Externals\Bochs_disasm;..\..\..\Externals\zlib;..\..\..\Externals\Lua;..\..\..\Externals\SFML\include"
PreprocessorDefinitions="NDEBUG;_LIB;DEBUGFAST;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0"
RuntimeLibrary="0"
BufferSecurityCheck="false"
@@ -617,14 +617,6 @@ Name="SI - Serial Interface"
>
<File
- RelativePath=".\Src\HW\GBAPipe.cpp"
- >
- </File>
- <File
- RelativePath=".\Src\HW\GBAPipe.h"
- >
- </File>
- <File
RelativePath=".\Src\HW\SI.cpp"
>
</File>
diff --git a/Source/Core/Core/Src/HW/GBAPipe.cpp b/Source/Core/Core/Src/HW/GBAPipe.cpp deleted file mode 100644 index 5852e9851b..0000000000 --- a/Source/Core/Core/Src/HW/GBAPipe.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - -#ifdef _WIN32 -#include <windows.h> -#endif - -#include "GBAPipe.h" - - -#ifdef _WIN32 - -namespace GBAPipe -{ - -HANDLE m_hPipe; -bool m_bIsServer; -bool m_bEnabled; - -#define PIPENAME "\\\\.\\pipe\\gbapipe" - - -void StartServer() -{ - if (m_bEnabled) - return; - - //TODO: error checking - m_hPipe = CreateNamedPipe( - PIPENAME, - PIPE_ACCESS_DUPLEX, // client and server can both r+w - PIPE_WAIT |/* PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,*/ PIPE_TYPE_BYTE | PIPE_READMODE_BYTE, - 1, //maxinst - 0x1000, //outbufsize - 0x1000, //inbufsize - INFINITE, //timeout - 0); - - if (m_hPipe == INVALID_HANDLE_VALUE) - { - INFO_LOG(SERIALINTERFACE, "Failed to create pipe."); - } - else - { - INFO_LOG(SERIALINTERFACE, "Pipe %s created.", PIPENAME); - } - - m_bIsServer = true; - m_bEnabled = true; -} - -void ConnectAsClient() -{ - if (m_bEnabled) - return; - - //TODO: error checking - m_hPipe = CreateFile( - PIPENAME, - GENERIC_READ|GENERIC_WRITE, - 0, //share - NULL, - OPEN_EXISTING, - 0, - NULL); - - if (m_hPipe == INVALID_HANDLE_VALUE) - { - INFO_LOG(SERIALINTERFACE, "Failed to connect to pipe. %08x (2 = file not found)", GetLastError()); - } - - m_bEnabled = true; - m_bIsServer = false; -} - -void Stop() -{ - if (m_bEnabled) - { - if (m_bIsServer) - DisconnectNamedPipe(m_hPipe); - - CloseHandle(m_hPipe); - m_bEnabled = false; - } -} - -void Read(u8& data) -{ - if (!m_bEnabled) - return; - - u32 read; - memset(&data, 0x00, sizeof(data)); // pad with zeros for now - HRESULT result = ReadFile(m_hPipe, &data, sizeof(data), (LPDWORD)&read, FALSE); - if (FAILED(result)/* || read != sizeof(data)*/) - { - INFO_LOG(SERIALINTERFACE, "Failed to read pipe %s", PIPENAME); - Stop(); - } - else - { - INFO_LOG(SERIALINTERFACE, "read %x bytes: 0x%02x", read, data); - } -} - -void Write(u8 data) -{ - if (!m_bEnabled) - return; - - u32 written; - HRESULT result = WriteFile(m_hPipe, &data, sizeof(data), (LPDWORD)&written,FALSE); - if (FAILED(result)) - { - INFO_LOG(SERIALINTERFACE, "Failed to write to pipe %s", PIPENAME); - Stop(); - } - else - { - INFO_LOG(SERIALINTERFACE, "Wrote %x bytes: 0x%02x", written, data); - } -} - -bool IsEnabled() -{ - return m_bEnabled; -} - -bool IsServer() -{ - return m_bIsServer; -} - -} // namespace GBAPipe - -#else - -namespace GBAPipe -{ -void StartServer() { } -void ConnectAsClient() { } -void Stop() { } -void Read(u8& data) { } -void Write(u8 data) { } -bool IsEnabled() { return false; } -bool IsServer() { return false; } -} // namespace GBAPipe - -#endif diff --git a/Source/Core/Core/Src/HW/GBAPipe.h b/Source/Core/Core/Src/HW/GBAPipe.h deleted file mode 100644 index f8ac6b795e..0000000000 --- a/Source/Core/Core/Src/HW/GBAPipe.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2003 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ -// Sets up and maintains interprocess communication to make it possible -// to easily compare any two cpu cores by running two instances of DolphinHLE and -// comparing them to each other. -// - -#ifndef _GBAPIPE_H -#define _GBAPIPE_H - -#include "Common.h" - -namespace GBAPipe -{ - -// start the server -void StartServer(); - -// connect as client -void ConnectAsClient(); - -// stop -void Stop(); - -// Transfer funcs -void Read(u8& data); -void Write(u8 data); - -// IsEnabled -bool IsEnabled(); - -// IsServer -bool IsServer(); - -} // namespace GBAPipe - -#endif diff --git a/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp b/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp index ec6983edaa..1e913fe6a9 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp +++ b/Source/Core/Core/Src/HW/SI_DeviceGBA.cpp @@ -17,135 +17,93 @@ #include "SI_Device.h" #include "SI_DeviceGBA.h" -#include "GBAPipe.h" +#include "SFML/Network.hpp" +#include <algorithm> -// --- GameBoy Advance --- +// --- GameBoy Advance "Link Cable" --- +GBASockServer::GBASockServer() +{ + if (!server.Listen(8080)) + return; + server.Accept(client, &client_addr); +} -CSIDevice_GBA::CSIDevice_GBA(int _iDeviceNumber) : - ISIDevice(_iDeviceNumber) +GBASockServer::~GBASockServer() { - GBAPipe::StartServer(); - js.U16 = 0; + client.Close(); + server.Close(); } -CSIDevice_GBA::~CSIDevice_GBA() +// Blocking, since GBA must always send lower byte of REG_JOYSTAT +void GBASockServer::Transfer(char* si_buffer) { - GBAPipe::Stop(); + current_data[0] = si_buffer[3]; + current_data[1] = si_buffer[2]; + current_data[2] = si_buffer[1]; + current_data[3] = si_buffer[0]; + current_data[4] = si_buffer[7]; + + u8 cmd = *current_data; + + if (cmd == CMD_WRITE) + client.Send(current_data, sizeof(current_data)); + else + client.Send(current_data, 1); + + DEBUG_LOG(SERIALINTERFACE, "> cmd %02x %02x%02x%02x%02x", + (u8)current_data[0], (u8)current_data[1], (u8)current_data[2], + (u8)current_data[3], (u8)current_data[4]); + + memset(current_data, 0, sizeof(current_data)); + size_t num_received = 0; + client.Receive(current_data, sizeof(current_data), num_received); + + DEBUG_LOG(SERIALINTERFACE, "< %02x%02x%02x%02x%02x", + (u8)current_data[0], (u8)current_data[1], (u8)current_data[2], + (u8)current_data[3], (u8)current_data[4]); + +#ifdef _DEBUG + size_t num_expecting = 3; + if (cmd == CMD_READ) + num_expecting = 5; + else if (cmd == CMD_WRITE) + num_expecting = 1; + if (num_received != num_expecting) + ERROR_LOG(SERIALINTERFACE, "%x:%x:%x", (u8)cmd, num_received, num_expecting); +#endif + + si_buffer[0] = current_data[3]; + si_buffer[1] = current_data[2]; + si_buffer[2] = current_data[1]; + si_buffer[3] = current_data[0]; + si_buffer[7] = current_data[4]; } -int CSIDevice_GBA::RunBuffer(u8* _pBuffer, int _iLength) +CSIDevice_GBA::CSIDevice_GBA(int _iDeviceNumber) + : ISIDevice(_iDeviceNumber) + , GBASockServer() { - // for debug logging only - ISIDevice::RunBuffer(_pBuffer, _iLength); - - int iPosition = 0; - - // read the command - EBufferCommands command = static_cast<EBufferCommands>(_pBuffer[3]); - iPosition++; - - // handle it - switch(command) - { - // NOTE: All "Send/Recieve" mentioned here is from dolphin's perspective, - // NOT the GBA's - // This means the first "Send"s are seen as CMDs to the GBA, and are therefor IMPORTANT :p - // Also this means that we can randomly fill recieve bits and try for a fake gba... - // (try playing with the fake joystat) - // It seems like JOYSTAT is polled all the time, it's value may or may not matter - case CMD_RESET: - { - //Send 0xFF - GBAPipe::Write(CMD_RESET); - //Recieve 0x00 - //Recieve 0x04 - //Recieve from lower 8bits of JOYSTAT register - for (;iPosition < _iLength; ++iPosition) - GBAPipe::Read(_pBuffer[iPosition]); - - js.U16 = 0; // FAKE - js.stat_send = 1; // FAKE - *(u32*)&_pBuffer[0] |= SI_GBA | js.U16; // hax for now - WARN_LOG(SERIALINTERFACE, "GBA %i CMD_RESET", this->m_iDeviceNumber); - } - break; - case CMD_STATUS: - { - //Send 0x00 - GBAPipe::Write(CMD_STATUS); - //Recieve 0x00 - //Recieve 0x04 - //Recieve from lower 8bits of JOYSTAT register - for (;iPosition < _iLength; ++iPosition) - GBAPipe::Read(_pBuffer[iPosition]); - - js.U16 = 0; // FAKE - js.stat_rec = 1; // FAKE - *(u32*)&_pBuffer[0] |= SI_GBA | js.U16; // hax for now - WARN_LOG(SERIALINTERFACE, "GBA %i CMD_STATUS", this->m_iDeviceNumber); - } - break; - // Probably read and write belong in getdata and sendcommand - case CMD_WRITE: - { - //Send 0x15 - GBAPipe::Write(CMD_WRITE); - //Send to Lower 8bits of JOY_RECV_L - //Send to Upper 8bits of JOY_RECV_L - //Send to Lower 8bits of JOY_RECV_H - //Send to Upper 8bits of JOY_RECV_H - for (;iPosition < _iLength-1; ++iPosition) - GBAPipe::Write(_pBuffer[iPosition]); - //Receive from lower 8bits of JOYSTAT register - GBAPipe::Read(_pBuffer[++iPosition]); - - WARN_LOG(SERIALINTERFACE, "GBA %i CMD_WRITE", this->m_iDeviceNumber); - } - break; - case CMD_READ: - { - //Send 0x14 - GBAPipe::Write(CMD_READ); - //Receive from Lower 8bits of JOY_TRANS_L - //Receive from Upper 8bits of JOY_TRANS_L - //Receive from Lower 8bits of JOY_TRANS_H - //Receive from Upper 8bits of JOY_TRANS_H - //Receive from lower 8bits of JOYSTAT register - for (;iPosition < _iLength; ++iPosition) - GBAPipe::Read(_pBuffer[iPosition]); - - WARN_LOG(SERIALINTERFACE, "GBA %i CMD_READ", this->m_iDeviceNumber);; - } - break; - default: - { - WARN_LOG(SERIALINTERFACE, "GBA %i CMD_UNKNOWN (0x%x)", this->m_iDeviceNumber, command); - } - break; - } - INFO_LOG(SERIALINTERFACE, "GBA buffer %08x",*(u32*)&_pBuffer[0]); - - return iPosition; } +CSIDevice_GBA::~CSIDevice_GBA() +{ +} -// GetData - -bool -CSIDevice_GBA::GetData(u32& _Hi, u32& _Low) +int CSIDevice_GBA::RunBuffer(u8* _pBuffer, int _iLength) { - INFO_LOG(SERIALINTERFACE, "GBA %i GetData Hi: 0x%08x Low: 0x%08x", this->m_iDeviceNumber, _Hi, _Low); + Transfer((char*)_pBuffer); + return _iLength; +} +bool CSIDevice_GBA::GetData(u32& _Hi, u32& _Low) +{ + DEBUG_LOG(SERIALINTERFACE, "GBA %i GetData Hi: 0x%08x Low: 0x%08x", m_iDeviceNumber, _Hi, _Low); return true; } - -// SendCommand - -void -CSIDevice_GBA::SendCommand(u32 _Cmd, u8 _Poll) +void CSIDevice_GBA::SendCommand(u32 _Cmd, u8 _Poll) { - INFO_LOG(SERIALINTERFACE, "GBA %i SendCommand: (0x%08x)", this->m_iDeviceNumber, _Cmd); + DEBUG_LOG(SERIALINTERFACE, "GBA %i SendCommand: (0x%08x)", m_iDeviceNumber, _Cmd); } diff --git a/Source/Core/Core/Src/HW/SI_DeviceGBA.h b/Source/Core/Core/Src/HW/SI_DeviceGBA.h index ed09586235..c3da5e9528 100644 --- a/Source/Core/Core/Src/HW/SI_DeviceGBA.h +++ b/Source/Core/Core/Src/HW/SI_DeviceGBA.h @@ -18,63 +18,38 @@ #ifndef _SI_DEVICEGBA_H #define _SI_DEVICEGBA_H +#include "SFML/Network.hpp" -// GameBoy Advance +// GameBoy Advance "Link Cable" - -class CSIDevice_GBA : public ISIDevice +class GBASockServer : public sf::SocketTCP { -private: +public: + GBASockServer(); + ~GBASockServer(); + + void Transfer(char* si_buffer); - // Commands + char current_data[5]; + +private: enum EBufferCommands { - CMD_RESET = 0xFF, - CMD_STATUS = 0x00, - CMD_WRITE = 0x15, - CMD_READ = 0x14 + CMD_RESET = 0xff, + CMD_STATUS = 0x00, + CMD_READ = 0x14, + CMD_WRITE = 0x15 }; - union FAKE_JOYSTAT - { - u16 U16; - struct{ - unsigned :1; - unsigned stat_rec :1; // GBA-side reception status flag - unsigned :1; - unsigned stat_send :1; // GBA-side transmission status flag - unsigned gp0 :1; // General-purpose flag 0 - unsigned gp1 :1; // General-purpose flag 1 - unsigned :2; - - unsigned :8; - }; - }; - FAKE_JOYSTAT js; - - //0x4000158 - JOYSTAT - Receive Status Register (R/W) (ON THE GBA) - - // NOTE: there is a typo in GBATEK! - // in the JOY BUS command descriptions, SIOSTAT==JOYSTAT - //Bit Expl. - //0 Not used - //1 Receive Status Flag (0=Remote GBA is/was receiving) (Read Only?) - //2 Not used - //3 Send Status Flag (1=Remote GBA is/was sending) (Read Only?) - //4-5 General Purpose Flag (Not assigned, may be used for whatever purpose) - //6-15 Not used - //-------------------------------------- - //0b0000000000 00 0 0 0 0 - //______________________________________ - //Bit 1 is automatically set when writing to local JOY_TRANS. - //Bit 3 is automatically reset when reading from local JOY_RECV. + sf::SocketTCP server; + sf::SocketTCP client; + sf::IPAddress client_addr; +}; +class CSIDevice_GBA : public ISIDevice, private GBASockServer +{ public: - - // Constructor CSIDevice_GBA(int _iDeviceNumber); - - // Destructor ~CSIDevice_GBA(); // Run the SI Buffer @@ -86,4 +61,5 @@ public: // Send a command directly virtual void SendCommand(u32 _Cmd, u8 _Poll); }; + #endif |
