-Rewrote entire GUI in .NET
-Several other fixes (bugfixes, refactoring, etc.) -Added a few more features to debugger
This commit is contained in:
parent
f8f9755eff
commit
48409ae82b
148 changed files with 10445 additions and 5762 deletions
11
Core/APU.cpp
11
Core/APU.cpp
|
@ -77,13 +77,22 @@ bool APU::Exec(uint32_t executedCycles)
|
|||
uint32_t availableSampleCount = _buf.samples_avail();
|
||||
if(availableSampleCount >= APU::SamplesPerFrame) {
|
||||
size_t sampleCount = _buf.read_samples(_outputBuffer, APU::SamplesPerFrame);
|
||||
APU::AudioDevice->PlayBuffer(_outputBuffer, sampleCount * BitsPerSample / 8);
|
||||
if(APU::AudioDevice) {
|
||||
APU::AudioDevice->PlayBuffer(_outputBuffer, sampleCount * BitsPerSample / 8);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void APU::StopAudio()
|
||||
{
|
||||
if(APU::AudioDevice) {
|
||||
APU::AudioDevice->Pause();
|
||||
}
|
||||
}
|
||||
|
||||
void APU::StreamState(bool saving)
|
||||
{
|
||||
apu_snapshot_t snapshot;
|
||||
|
|
|
@ -55,4 +55,5 @@ class APU : public IMemoryHandler, public Snapshotable
|
|||
void WriteRAM(uint16_t addr, uint8_t value);
|
||||
|
||||
bool Exec(uint32_t executedCycles);
|
||||
static void StopAudio();
|
||||
};
|
|
@ -327,7 +327,7 @@ class BaseMapper : public IMemoryHandler, public Snapshotable
|
|||
if(_hasCHRRAM) {
|
||||
_chrPages[AddrToCHRSlot(addr)][addr & (GetCHRPageSize() - 1)] = value;
|
||||
} else {
|
||||
assert(false);
|
||||
//assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
39
Core/CPU.cpp
39
Core/CPU.cpp
|
@ -1,14 +1,12 @@
|
|||
#include "stdafx.h"
|
||||
#include "CPU.h"
|
||||
|
||||
int32_t CPU::CycleCount = 0;
|
||||
int32_t CPU::RelativeCycleCount = 0;
|
||||
uint32_t CPU::CyclePenalty = 0;
|
||||
bool CPU::NMIFlag = false;
|
||||
uint32_t CPU::IRQFlag = 0;
|
||||
CPU* CPU::Instance = nullptr;
|
||||
|
||||
CPU::CPU(MemoryManager *memoryManager) : _memoryManager(memoryManager)
|
||||
{
|
||||
CPU::Instance = this;
|
||||
|
||||
Func opTable[] = {
|
||||
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
&CPU::BRK, &CPU::ORA, nullptr, nullptr, &CPU::NOP, &CPU::ORA, &CPU::ASL_Memory, nullptr, &CPU::PHP, &CPU::ORA, &CPU::ASL_Acc, nullptr, &CPU::NOP, &CPU::ORA, &CPU::ASL_Memory, nullptr, //0
|
||||
|
@ -94,10 +92,11 @@ CPU::CPU(MemoryManager *memoryManager) : _memoryManager(memoryManager)
|
|||
|
||||
void CPU::Reset(bool softReset)
|
||||
{
|
||||
CPU::NMIFlag = false;
|
||||
CPU::IRQFlag = 0;
|
||||
CPU::CycleCount = 0;
|
||||
CPU::RelativeCycleCount = 0;
|
||||
_state.NMIFlag = false;
|
||||
_state.IRQFlag = 0;
|
||||
_cycleCount = 0;
|
||||
_relativeCycleCount = 0;
|
||||
_cyclePenalty = 0;
|
||||
|
||||
_state.PC = MemoryReadWord(CPU::ResetVector);
|
||||
if(softReset) {
|
||||
|
@ -122,9 +121,9 @@ uint32_t CPU::Exec()
|
|||
if(!_runNMI && !_runIRQ) {
|
||||
uint8_t opCode = GetOPCode();
|
||||
|
||||
if(CPU::NMIFlag) {
|
||||
if(_state.NMIFlag) {
|
||||
_runNMI = true;
|
||||
} else if(opCode != 0x40 && CPU::IRQFlag > 0 && !CheckFlag(PSFlags::Interrupt)) {
|
||||
} else if(opCode != 0x40 && _state.IRQFlag > 0 && !CheckFlag(PSFlags::Interrupt)) {
|
||||
_runIRQ = true;
|
||||
}
|
||||
|
||||
|
@ -139,7 +138,7 @@ uint32_t CPU::Exec()
|
|||
//throw exception("Invalid opcode");
|
||||
}
|
||||
|
||||
if(!_runIRQ && opCode == 0x40 && CPU::IRQFlag > 0 && !CheckFlag(PSFlags::Interrupt)) {
|
||||
if(!_runIRQ && opCode == 0x40 && _state.IRQFlag > 0 && !CheckFlag(PSFlags::Interrupt)) {
|
||||
//"If an IRQ is pending and an RTI is executed that clears the I flag, the CPU will invoke the IRQ handler immediately after RTI finishes executing."
|
||||
_runIRQ = true;
|
||||
}
|
||||
|
@ -147,7 +146,7 @@ uint32_t CPU::Exec()
|
|||
if(_runNMI) {
|
||||
NMI();
|
||||
_runNMI = false;
|
||||
CPU::NMIFlag = false;
|
||||
_state.NMIFlag = false;
|
||||
} else if(_runIRQ) {
|
||||
IRQ();
|
||||
}
|
||||
|
@ -156,14 +155,14 @@ uint32_t CPU::Exec()
|
|||
executedCycles = 7;
|
||||
}
|
||||
|
||||
CPU::CycleCount += executedCycles;
|
||||
_cycleCount += executedCycles;
|
||||
return executedCycles + GetCyclePenalty();
|
||||
}
|
||||
|
||||
void CPU::EndFrame()
|
||||
{
|
||||
CPU::RelativeCycleCount += CPU::CycleCount;
|
||||
CPU::CycleCount = 0;
|
||||
_relativeCycleCount += _cycleCount;
|
||||
_cycleCount = 0;
|
||||
}
|
||||
|
||||
void CPU::StreamState(bool saving)
|
||||
|
@ -175,12 +174,12 @@ void CPU::StreamState(bool saving)
|
|||
Stream<uint8_t>(_state.X);
|
||||
Stream<uint8_t>(_state.Y);
|
||||
|
||||
Stream<int32_t>(CPU::CycleCount);
|
||||
Stream<bool>(CPU::NMIFlag);
|
||||
Stream<uint32_t>(CPU::IRQFlag);
|
||||
Stream<int32_t>(_cycleCount);
|
||||
Stream<bool>(_state.NMIFlag);
|
||||
Stream<uint32_t>(_state.IRQFlag);
|
||||
|
||||
Stream<bool>(_runNMI);
|
||||
Stream<bool>(_runIRQ);
|
||||
|
||||
Stream<int32_t>(CPU::RelativeCycleCount);
|
||||
Stream<int32_t>(_relativeCycleCount);
|
||||
}
|
55
Core/CPU.h
55
Core/CPU.h
|
@ -36,12 +36,14 @@ enum class IRQSource
|
|||
|
||||
struct State
|
||||
{
|
||||
uint16_t PC;
|
||||
uint8_t SP;
|
||||
uint8_t A;
|
||||
uint8_t X;
|
||||
uint8_t Y;
|
||||
uint8_t PS;
|
||||
uint16_t PC = 0;
|
||||
uint8_t SP = 0;
|
||||
uint8_t A = 0;
|
||||
uint8_t X = 0;
|
||||
uint8_t Y = 0;
|
||||
uint8_t PS = 0;
|
||||
uint32_t IRQFlag = 0;
|
||||
bool NMIFlag = false;
|
||||
};
|
||||
|
||||
class CPU : public Snapshotable
|
||||
|
@ -51,11 +53,13 @@ private:
|
|||
const uint16_t ResetVector = 0xFFFC;
|
||||
const uint16_t IRQVector = 0xFFFE;
|
||||
|
||||
static CPU* Instance;
|
||||
|
||||
typedef void(CPU::*Func)();
|
||||
|
||||
static int32_t CycleCount;
|
||||
static int32_t RelativeCycleCount;
|
||||
static uint32_t CyclePenalty;
|
||||
int32_t _cycleCount;
|
||||
int32_t _relativeCycleCount;
|
||||
uint32_t _cyclePenalty;
|
||||
|
||||
Func _opTable[256];
|
||||
uint8_t _cycles[256];
|
||||
|
@ -67,8 +71,6 @@ private:
|
|||
State _state;
|
||||
MemoryManager *_memoryManager = nullptr;
|
||||
|
||||
static bool NMIFlag;
|
||||
static uint32_t IRQFlag;
|
||||
bool _runNMI = false;
|
||||
bool _runIRQ = false;
|
||||
|
||||
|
@ -465,8 +467,8 @@ private:
|
|||
}
|
||||
|
||||
uint32_t GetCyclePenalty() {
|
||||
uint32_t cyclePenalty = CPU::CyclePenalty;
|
||||
CPU::CyclePenalty = 0;
|
||||
uint32_t cyclePenalty = _cyclePenalty;
|
||||
_cyclePenalty = 0;
|
||||
return cyclePenalty;
|
||||
}
|
||||
|
||||
|
@ -570,7 +572,7 @@ private:
|
|||
Push((uint16_t)(PC() + 1));
|
||||
|
||||
uint8_t flags = PS() | PSFlags::Break;
|
||||
if(CPU::NMIFlag) {
|
||||
if(_state.NMIFlag) {
|
||||
Push((uint8_t)flags);
|
||||
SetFlags(PSFlags::Interrupt);
|
||||
|
||||
|
@ -594,7 +596,7 @@ private:
|
|||
void IRQ() {
|
||||
Push((uint16_t)(PC()));
|
||||
|
||||
if(CPU::NMIFlag) {
|
||||
if(_state.NMIFlag) {
|
||||
Push((uint8_t)PS());
|
||||
SetFlags(PSFlags::Interrupt);
|
||||
|
||||
|
@ -624,27 +626,20 @@ public:
|
|||
static const uint32_t ClockRate = 1789773;
|
||||
|
||||
CPU(MemoryManager *memoryManager);
|
||||
static int32_t GetCycleCount() { return CPU::CycleCount; }
|
||||
static int32_t GetRelativeCycleCount() { return CPU::RelativeCycleCount + CPU::CycleCount; }
|
||||
static int32_t GetCycleCount() { return CPU::Instance->_cycleCount; }
|
||||
static int32_t GetRelativeCycleCount() { return CPU::Instance->_relativeCycleCount + CPU::Instance->_cycleCount; }
|
||||
static void IncCycleCount(uint32_t cycles) {
|
||||
CPU::CyclePenalty += cycles;
|
||||
CPU::CycleCount += cycles;
|
||||
}
|
||||
static void SetNMIFlag() { CPU::NMIFlag = true; }
|
||||
static void ClearNMIFlag() { CPU::NMIFlag = false; }
|
||||
static void SetIRQSource(IRQSource source)
|
||||
{
|
||||
CPU::IRQFlag |= (int)source;
|
||||
}
|
||||
static void ClearIRQSource(IRQSource source)
|
||||
{
|
||||
CPU::IRQFlag &= ~(int)source;
|
||||
CPU::Instance->_cyclePenalty += cycles;
|
||||
CPU::Instance->_cycleCount += cycles;
|
||||
}
|
||||
static void SetNMIFlag() { CPU::Instance->_state.NMIFlag = true; }
|
||||
static void ClearNMIFlag() { CPU::Instance->_state.NMIFlag = false; }
|
||||
static void SetIRQSource(IRQSource source) { CPU::Instance->_state.IRQFlag |= (int)source; }
|
||||
static void ClearIRQSource(IRQSource source) { CPU::Instance->_state.IRQFlag &= ~(int)source; }
|
||||
|
||||
void Reset(bool softReset);
|
||||
uint32_t Exec();
|
||||
void EndFrame();
|
||||
|
||||
State GetState() { return _state; }
|
||||
|
||||
};
|
32
Core/ClientConnectionData.h
Normal file
32
Core/ClientConnectionData.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
class ClientConnectionData
|
||||
{
|
||||
public:
|
||||
string Host;
|
||||
uint16_t Port;
|
||||
|
||||
wstring PlayerName;
|
||||
uint8_t* AvatarData;
|
||||
uint32_t AvatarSize;
|
||||
|
||||
ClientConnectionData(string host, uint16_t port, wstring playerName, uint8_t* avatarData, uint32_t avatarSize) :
|
||||
Host(host), Port(port), PlayerName(playerName), AvatarSize(avatarSize)
|
||||
{
|
||||
if(avatarSize > 0) {
|
||||
AvatarData = new uint8_t[avatarSize];
|
||||
memcpy(AvatarData, avatarData, avatarSize);
|
||||
} else {
|
||||
AvatarData = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
~ClientConnectionData()
|
||||
{
|
||||
if(AvatarData) {
|
||||
delete[] AvatarData;
|
||||
}
|
||||
}
|
||||
};
|
156
Core/Console.cpp
156
Core/Console.cpp
|
@ -1,13 +1,14 @@
|
|||
#include "stdafx.h"
|
||||
#include <thread>
|
||||
#include "Console.h"
|
||||
#include "BaseMapper.h"
|
||||
#include "MapperFactory.h"
|
||||
#include "Debugger.h"
|
||||
#include "../Utilities/Timer.h"
|
||||
#include "../Utilities/FolderUtilities.h"
|
||||
#include "../Utilities/ConfigManager.h"
|
||||
#include "../Core/MessageManager.h"
|
||||
|
||||
Console* Console::Instance = nullptr;
|
||||
IMessageManager* Console::MessageManager = nullptr;
|
||||
list<INotificationListener*> Console::NotificationListeners;
|
||||
shared_ptr<Console> Console::Instance = nullptr;
|
||||
uint32_t Console::Flags = 0;
|
||||
uint32_t Console::CurrentFPS = 0;
|
||||
SimpleLock Console::PauseLock;
|
||||
|
@ -15,26 +16,28 @@ SimpleLock Console::RunningLock;
|
|||
|
||||
Console::Console(wstring filename)
|
||||
{
|
||||
Console::Instance = this;
|
||||
|
||||
Initialize(filename);
|
||||
}
|
||||
|
||||
Console::~Console()
|
||||
{
|
||||
Movie::Stop();
|
||||
if(Console::Instance == this) {
|
||||
Console::Instance = nullptr;
|
||||
if(Console::Instance.get() == this) {
|
||||
Console::Instance.reset();
|
||||
}
|
||||
}
|
||||
|
||||
Console* Console::GetInstance()
|
||||
shared_ptr<Console> Console::GetInstance()
|
||||
{
|
||||
return Console::Instance;
|
||||
}
|
||||
|
||||
void Console::Initialize(wstring filename)
|
||||
{
|
||||
if(Console::Instance == nullptr) {
|
||||
Console::Instance.reset(this);
|
||||
}
|
||||
|
||||
shared_ptr<BaseMapper> mapper = MapperFactory::InitializeFromFile(filename);
|
||||
if(mapper) {
|
||||
_romFilepath = filename;
|
||||
|
@ -54,10 +57,9 @@ void Console::Initialize(wstring filename)
|
|||
|
||||
ResetComponents(false);
|
||||
|
||||
Console::SendNotification(ConsoleNotificationType::GameLoaded);
|
||||
Console::DisplayMessage(wstring(L"Game loaded: ") + FolderUtilities::GetFilename(filename, false));
|
||||
MessageManager::DisplayMessage(L"Game loaded", FolderUtilities::GetFilename(filename, false));
|
||||
} else {
|
||||
Console::DisplayMessage(wstring(L"Could not load file: ") + FolderUtilities::GetFilename(filename, true));
|
||||
MessageManager::DisplayMessage(L"Error", wstring(L"Could not load file: ") + FolderUtilities::GetFilename(filename, true));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -73,42 +75,6 @@ void Console::LoadROM(wstring filename)
|
|||
}
|
||||
}
|
||||
|
||||
bool Console::AttemptLoadROM(wstring filename, uint32_t crc32Hash)
|
||||
{
|
||||
if(Instance) {
|
||||
if(ROMLoader::GetCRC32(Instance->_romFilepath) == crc32Hash) {
|
||||
//Current game matches, no need to do anything
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
vector<wstring> romFiles = FolderUtilities::GetFilesInFolder(ConfigManager::GetValue<wstring>(Config::LastGameFolder), L"*.nes", true);
|
||||
for(wstring zipFile : FolderUtilities::GetFilesInFolder(ConfigManager::GetValue<wstring>(Config::LastGameFolder), L"*.zip", true)) {
|
||||
romFiles.push_back(zipFile);
|
||||
}
|
||||
for(wstring romFile : romFiles) {
|
||||
//Quick search by filename
|
||||
if(FolderUtilities::GetFilename(romFile, true).compare(filename) == 0) {
|
||||
if(ROMLoader::GetCRC32(romFile) == crc32Hash) {
|
||||
//Matching ROM found
|
||||
Console::LoadROM(romFile);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(wstring romFile : romFiles) {
|
||||
//Slower search by CRC value
|
||||
if(ROMLoader::GetCRC32(romFile) == crc32Hash) {
|
||||
//Matching ROM found
|
||||
Console::LoadROM(romFile);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
wstring Console::GetROMPath()
|
||||
{
|
||||
wstring filepath;
|
||||
|
@ -122,21 +88,30 @@ void Console::Reset()
|
|||
{
|
||||
Movie::Stop();
|
||||
if(Instance) {
|
||||
Console::Pause();
|
||||
Instance->ResetComponents(true);
|
||||
Console::Resume();
|
||||
}
|
||||
}
|
||||
|
||||
void Console::ResetComponents(bool softReset)
|
||||
{
|
||||
_cpu->Reset(softReset);
|
||||
_ppu->Reset();
|
||||
_apu->Reset();
|
||||
_cpu->Reset(softReset);
|
||||
if(softReset) {
|
||||
MessageManager::SendNotification(ConsoleNotificationType::GameReset);
|
||||
} else {
|
||||
MessageManager::SendNotification(ConsoleNotificationType::GameLoaded);
|
||||
}
|
||||
}
|
||||
|
||||
void Console::Stop()
|
||||
{
|
||||
_stop = true;
|
||||
Console::ClearFlags(EmulationFlags::Paused);
|
||||
Console::RunningLock.Acquire();
|
||||
Console::RunningLock.Release();
|
||||
}
|
||||
|
||||
void Console::Pause()
|
||||
|
@ -168,45 +143,11 @@ bool Console::CheckFlag(int flag)
|
|||
return (Console::Flags & flag) == flag;
|
||||
}
|
||||
|
||||
void Console::RegisterMessageManager(IMessageManager* messageManager)
|
||||
{
|
||||
Console::MessageManager = messageManager;
|
||||
}
|
||||
|
||||
void Console::DisplayMessage(wstring message)
|
||||
{
|
||||
std::wcout << message << std::endl;
|
||||
if(Console::MessageManager) {
|
||||
Console::MessageManager->DisplayMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t Console::GetFPS()
|
||||
{
|
||||
return Console::CurrentFPS;
|
||||
}
|
||||
|
||||
void Console::RegisterNotificationListener(INotificationListener* notificationListener)
|
||||
{
|
||||
Console::NotificationListeners.push_back(notificationListener);
|
||||
Console::NotificationListeners.unique();
|
||||
}
|
||||
|
||||
void Console::UnregisterNotificationListener(INotificationListener* notificationListener)
|
||||
{
|
||||
Console::NotificationListeners.remove(notificationListener);
|
||||
}
|
||||
|
||||
void Console::SendNotification(ConsoleNotificationType type)
|
||||
{
|
||||
list<INotificationListener*> listeners = Console::NotificationListeners;
|
||||
|
||||
//Iterate on a copy to prevent issues if a notification causes a listener to unregister itself
|
||||
for(INotificationListener* notificationListener : listeners) {
|
||||
notificationListener->ProcessNotification(type);
|
||||
}
|
||||
}
|
||||
|
||||
void Console::Run()
|
||||
{
|
||||
Timer clockTimer;
|
||||
|
@ -247,14 +188,18 @@ void Console::Run()
|
|||
}
|
||||
|
||||
if(CheckFlag(EmulationFlags::Paused) && !_stop) {
|
||||
Console::SendNotification(ConsoleNotificationType::GamePaused);
|
||||
MessageManager::SendNotification(ConsoleNotificationType::GamePaused);
|
||||
Console::RunningLock.Release();
|
||||
|
||||
//Prevent audio from looping endlessly while game is paused
|
||||
_apu->StopAudio();
|
||||
|
||||
while(CheckFlag(EmulationFlags::Paused)) {
|
||||
//Sleep until emulation is resumed
|
||||
std::this_thread::sleep_for(std::chrono::duration<int, std::milli>(100));
|
||||
}
|
||||
Console::RunningLock.Acquire();
|
||||
Console::SendNotification(ConsoleNotificationType::GameResumed);
|
||||
MessageManager::SendNotification(ConsoleNotificationType::GameResumed);
|
||||
}
|
||||
clockTimer.Reset();
|
||||
|
||||
|
@ -266,42 +211,17 @@ void Console::Run()
|
|||
|
||||
if(fpsTimer.GetElapsedMS() > 1000) {
|
||||
uint32_t frameCount = _ppu->GetFrameCount();
|
||||
Console::CurrentFPS = (int)(std::round((double)(frameCount - lastFrameCount) / (fpsTimer.GetElapsedMS() / 1000)));
|
||||
if((int32_t)frameCount - (int32_t)lastFrameCount < 0) {
|
||||
Console::CurrentFPS = 0;
|
||||
} else {
|
||||
Console::CurrentFPS = (int)(std::round((double)(frameCount - lastFrameCount) / (fpsTimer.GetElapsedMS() / 1000)));
|
||||
}
|
||||
lastFrameCount = frameCount;
|
||||
fpsTimer.Reset();
|
||||
}
|
||||
}
|
||||
Console::RunningLock.Release();
|
||||
}
|
||||
|
||||
void Console::SaveState(wstring filename)
|
||||
{
|
||||
ofstream file(filename, ios::out | ios::binary);
|
||||
|
||||
if(file) {
|
||||
Console::Pause();
|
||||
Console::SaveState(file);
|
||||
Console::Resume();
|
||||
file.close();
|
||||
Console::DisplayMessage(L"State saved.");
|
||||
}
|
||||
}
|
||||
|
||||
bool Console::LoadState(wstring filename)
|
||||
{
|
||||
ifstream file(filename, ios::out | ios::binary);
|
||||
|
||||
if(file) {
|
||||
Console::Pause();
|
||||
Console::LoadState(file);
|
||||
Console::Resume();
|
||||
file.close();
|
||||
Console::DisplayMessage(L"State loaded.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Console::DisplayMessage(L"Slot is empty.");
|
||||
return false;
|
||||
_apu->StopAudio();
|
||||
}
|
||||
|
||||
void Console::SaveState(ostream &saveStream)
|
||||
|
@ -326,7 +246,7 @@ void Console::LoadState(istream &loadStream)
|
|||
Instance->_apu->LoadSnapshot(&loadStream);
|
||||
Instance->_controlManager->LoadSnapshot(&loadStream);
|
||||
|
||||
Console::SendNotification(ConsoleNotificationType::StateLoaded);
|
||||
MessageManager::SendNotification(ConsoleNotificationType::StateLoaded);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -340,7 +260,7 @@ void Console::LoadState(uint8_t *buffer, uint32_t bufferSize)
|
|||
|
||||
shared_ptr<Debugger> Console::GetDebugger()
|
||||
{
|
||||
return shared_ptr<Debugger>(new Debugger(shared_ptr<Console>(this), _cpu, _memoryManager, _mapper));
|
||||
return shared_ptr<Debugger>(new Debugger(Console::Instance, _cpu, _ppu, _memoryManager, _mapper));
|
||||
}
|
||||
|
||||
bool Console::RunTest(uint8_t *expectedResult)
|
||||
|
|
|
@ -4,13 +4,9 @@
|
|||
#include "CPU.h"
|
||||
#include "PPU.h"
|
||||
#include "APU.h"
|
||||
#include "BaseMapper.h"
|
||||
#include "MemoryManager.h"
|
||||
#include "ControlManager.h"
|
||||
#include "Debugger.h"
|
||||
#include "../Utilities/SimpleLock.h"
|
||||
#include "IMessageManager.h"
|
||||
#include "INotificationListener.h"
|
||||
|
||||
enum EmulationFlags
|
||||
{
|
||||
|
@ -18,19 +14,20 @@ enum EmulationFlags
|
|||
Paused = 0x02,
|
||||
};
|
||||
|
||||
class Debugger;
|
||||
class BaseMapper;
|
||||
|
||||
class Console
|
||||
{
|
||||
private:
|
||||
static Console* Instance;
|
||||
static shared_ptr<Console> Instance;
|
||||
static uint32_t Flags;
|
||||
static uint32_t CurrentFPS;
|
||||
static SimpleLock PauseLock;
|
||||
static SimpleLock RunningLock;
|
||||
static IMessageManager* MessageManager;
|
||||
static list<INotificationListener*> NotificationListeners;
|
||||
|
||||
shared_ptr<CPU> _cpu;
|
||||
unique_ptr<PPU> _ppu;
|
||||
shared_ptr<PPU> _ppu;
|
||||
unique_ptr<APU> _apu;
|
||||
shared_ptr<BaseMapper> _mapper;
|
||||
unique_ptr<ControlManager> _controlManager;
|
||||
|
@ -62,14 +59,11 @@ class Console
|
|||
|
||||
shared_ptr<Debugger> Console::GetDebugger();
|
||||
|
||||
static void SaveState(wstring filename);
|
||||
static void SaveState(ostream &saveStream);
|
||||
static bool LoadState(wstring filename);
|
||||
static void LoadState(istream &loadStream);
|
||||
static void LoadState(uint8_t *buffer, uint32_t bufferSize);
|
||||
|
||||
static void LoadROM(wstring filename);
|
||||
static bool AttemptLoadROM(wstring filename, uint32_t crc32Hash);
|
||||
static wstring GetROMPath();
|
||||
|
||||
static bool CheckFlag(int flag);
|
||||
|
@ -77,12 +71,5 @@ class Console
|
|||
static void ClearFlags(int flags);
|
||||
static uint32_t GetFPS();
|
||||
|
||||
static void RegisterMessageManager(IMessageManager* messageManager);
|
||||
static void DisplayMessage(wstring message);
|
||||
|
||||
static void RegisterNotificationListener(INotificationListener* notificationListener);
|
||||
static void UnregisterNotificationListener(INotificationListener* notificationListener);
|
||||
static void SendNotification(ConsoleNotificationType type);
|
||||
|
||||
static Console* GetInstance();
|
||||
static shared_ptr<Console> GetInstance();
|
||||
};
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
<InlineFunctionExpansion />
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
@ -93,6 +94,7 @@
|
|||
<ClInclude Include="AXROM.h" />
|
||||
<ClInclude Include="BaseMapper.h" />
|
||||
<ClInclude Include="Breakpoint.h" />
|
||||
<ClInclude Include="ClientConnectionData.h" />
|
||||
<ClInclude Include="CNROM.h" />
|
||||
<ClInclude Include="ColorDreams.h" />
|
||||
<ClInclude Include="ControlManager.h" />
|
||||
|
@ -114,6 +116,7 @@
|
|||
<ClInclude Include="IMessageManager.h" />
|
||||
<ClInclude Include="INotificationListener.h" />
|
||||
<ClInclude Include="InputDataMessage.h" />
|
||||
<ClInclude Include="MessageManager.h" />
|
||||
<ClInclude Include="MessageType.h" />
|
||||
<ClInclude Include="MMC2.h" />
|
||||
<ClInclude Include="MMC3_189.h" />
|
||||
|
@ -121,6 +124,7 @@
|
|||
<ClInclude Include="MovieDataMessage.h" />
|
||||
<ClInclude Include="Nanjing.h" />
|
||||
<ClInclude Include="NetMessage.h" />
|
||||
<ClInclude Include="SaveStateManager.h" />
|
||||
<ClInclude Include="SaveStateMessage.h" />
|
||||
<ClInclude Include="Snapshotable.h" />
|
||||
<ClInclude Include="IVideoDevice.h" />
|
||||
|
@ -163,9 +167,11 @@
|
|||
<ClCompile Include="GameServerConnection.cpp" />
|
||||
<ClCompile Include="MapperFactory.cpp" />
|
||||
<ClCompile Include="MemoryManager.cpp" />
|
||||
<ClCompile Include="MessageManager.cpp" />
|
||||
<ClCompile Include="Movie.cpp" />
|
||||
<ClCompile Include="PPU.cpp" />
|
||||
<ClCompile Include="CPU.cpp" />
|
||||
<ClCompile Include="SaveStateManager.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
|
|
|
@ -206,6 +206,15 @@
|
|||
<ClInclude Include="Breakpoint.h">
|
||||
<Filter>Debugger</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="ClientConnectionData.h">
|
||||
<Filter>Header Files\NetPlay</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SaveStateManager.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="MessageManager.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="CPU.cpp">
|
||||
|
@ -265,5 +274,11 @@
|
|||
<ClCompile Include="Breakpoint.cpp">
|
||||
<Filter>Debugger</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SaveStateManager.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="MessageManager.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,20 +1,25 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <thread>
|
||||
#include "MessageManager.h"
|
||||
#include "Debugger.h"
|
||||
#include "Console.h"
|
||||
#include "BaseMapper.h"
|
||||
#include "Disassembler.h"
|
||||
#include "APU.h"
|
||||
|
||||
Debugger* Debugger::Instance = nullptr;
|
||||
|
||||
Debugger::Debugger(shared_ptr<Console> console, shared_ptr<CPU> cpu, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseMapper> mapper)
|
||||
Debugger::Debugger(shared_ptr<Console> console, shared_ptr<CPU> cpu, shared_ptr<PPU> ppu, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseMapper> mapper)
|
||||
{
|
||||
_console = console;
|
||||
_cpu = cpu;
|
||||
_ppu = ppu;
|
||||
_memoryManager = memoryManager;
|
||||
_mapper = mapper;
|
||||
|
||||
_disassembler.reset(new Disassembler(mapper->GetPRGCopy(), mapper->GetPRGSize()));
|
||||
_disassembler.reset(new Disassembler(memoryManager->GetInternalRAM(), mapper->GetPRGCopy(), mapper->GetPRGSize()));
|
||||
|
||||
_stepCount = -1;
|
||||
|
||||
|
@ -23,9 +28,12 @@ Debugger::Debugger(shared_ptr<Console> console, shared_ptr<CPU> cpu, shared_ptr<
|
|||
|
||||
Debugger::~Debugger()
|
||||
{
|
||||
if(Debugger::Instance == this) {
|
||||
Debugger::Instance = nullptr;
|
||||
}
|
||||
Console::Pause();
|
||||
Debugger::Instance = nullptr;
|
||||
Run();
|
||||
_breakLock.Acquire();
|
||||
_breakLock.Release();
|
||||
Console::Resume();
|
||||
}
|
||||
|
||||
void Debugger::AddBreakpoint(BreakpointType type, uint32_t address, bool isAbsoluteAddr)
|
||||
|
@ -123,9 +131,20 @@ shared_ptr<Breakpoint> Debugger::GetMatchingBreakpoint(BreakpointType type, uint
|
|||
|
||||
void Debugger::PrivateCheckBreakpoint(BreakpointType type, uint32_t addr)
|
||||
{
|
||||
_breakLock.Acquire();
|
||||
|
||||
//Check if a breakpoint has been hit and freeze execution if one has
|
||||
bool breakDone = false;
|
||||
if(type == BreakpointType::Execute) {
|
||||
_lastInstruction = _memoryManager->DebugRead(addr);
|
||||
if(_stepOut && _lastInstruction == 0x60) {
|
||||
//RTS found, set StepCount to 2 to break on the following instruction
|
||||
Step(2);
|
||||
} else if(_stepOverAddr != -1 && addr == _stepOverAddr) {
|
||||
Step(1);
|
||||
} else if(_stepCycleCount != -1 && abs(_cpu->GetRelativeCycleCount() - _stepCycleCount) < 100 && _cpu->GetRelativeCycleCount() >= _stepCycleCount) {
|
||||
Step(1);
|
||||
}
|
||||
_disassembler->BuildCache(_mapper->ToAbsoluteAddress(addr), addr);
|
||||
breakDone = SleepUntilResume();
|
||||
}
|
||||
|
@ -135,6 +154,8 @@ void Debugger::PrivateCheckBreakpoint(BreakpointType type, uint32_t addr)
|
|||
Step(1);
|
||||
SleepUntilResume();
|
||||
}
|
||||
|
||||
_breakLock.Release();
|
||||
}
|
||||
|
||||
bool Debugger::SleepUntilResume()
|
||||
|
@ -147,7 +168,9 @@ bool Debugger::SleepUntilResume()
|
|||
|
||||
if(stepCount == 0) {
|
||||
//Break
|
||||
_console->SendNotification(ConsoleNotificationType::CodeBreak);
|
||||
APU::StopAudio();
|
||||
MessageManager::SendNotification(ConsoleNotificationType::CodeBreak);
|
||||
_stepOverAddr = -1;
|
||||
while(stepCount == 0) {
|
||||
std::this_thread::sleep_for(std::chrono::duration<int, std::milli>(10));
|
||||
stepCount = _stepCount.load();
|
||||
|
@ -157,15 +180,46 @@ bool Debugger::SleepUntilResume()
|
|||
return false;
|
||||
}
|
||||
|
||||
State Debugger::GetCPUState()
|
||||
void Debugger::GetState(DebugState *state)
|
||||
{
|
||||
return _cpu->GetState();
|
||||
state->CPU = _cpu->GetState();
|
||||
state->PPU = _ppu->GetState();
|
||||
}
|
||||
|
||||
void Debugger::Step(uint32_t count)
|
||||
{
|
||||
//Run CPU for [count] cycles and before breaking again
|
||||
//Run CPU for [count] INSTRUCTIONS and before breaking again
|
||||
_stepOut = false;
|
||||
_stepCount = count;
|
||||
_stepOverAddr = -1;
|
||||
_stepCycleCount = -1;
|
||||
}
|
||||
|
||||
void Debugger::StepCycles(uint32_t count)
|
||||
{
|
||||
//Run CPU for [count] CYCLES and before breaking again
|
||||
_stepCycleCount = _cpu->GetRelativeCycleCount() + count;
|
||||
Run();
|
||||
}
|
||||
|
||||
void Debugger::StepOut()
|
||||
{
|
||||
_stepOut = true;
|
||||
_stepCount = -1;
|
||||
_stepOverAddr = -1;
|
||||
_stepCycleCount = -1;
|
||||
}
|
||||
|
||||
void Debugger::StepOver()
|
||||
{
|
||||
if(_lastInstruction == 0x20 || _lastInstruction == 0x00) {
|
||||
//We are on a JSR/BRK instruction, need to continue until the following instruction
|
||||
_stepOverAddr = _cpu->GetState().PC + (_lastInstruction == 0x20 ? 3 : 1);
|
||||
Run();
|
||||
} else {
|
||||
//Except for JSR & BRK, StepOver behaves the same as StepTnto
|
||||
Step(1);
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger::Run()
|
||||
|
@ -187,9 +241,12 @@ bool Debugger::IsCodeChanged()
|
|||
|
||||
string Debugger::GenerateOutput()
|
||||
{
|
||||
std::ostringstream output;
|
||||
vector<uint32_t> memoryRanges = _mapper->GetPRGRanges();
|
||||
|
||||
std::ostringstream output;
|
||||
//RAM code viewer doesn't work well yet
|
||||
//output << _disassembler->GetRAMCode();
|
||||
|
||||
uint16_t memoryAddr = 0x8000;
|
||||
for(int i = 0, size = memoryRanges.size(); i < size; i += 2) {
|
||||
output << _disassembler->GetCode(memoryRanges[i], memoryRanges[i+1], memoryAddr);
|
||||
|
@ -198,9 +255,9 @@ string Debugger::GenerateOutput()
|
|||
return output.str();
|
||||
}
|
||||
|
||||
string Debugger::GetCode()
|
||||
string* Debugger::GetCode()
|
||||
{
|
||||
return _outputCache;
|
||||
return &_outputCache;
|
||||
}
|
||||
|
||||
uint8_t Debugger::GetMemoryValue(uint32_t addr)
|
||||
|
|
77
Core/Debugger.h
Normal file
77
Core/Debugger.h
Normal file
|
@ -0,0 +1,77 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <atomic>
|
||||
using std::atomic;
|
||||
|
||||
#include "CPU.h"
|
||||
#include "PPU.h"
|
||||
#include "Breakpoint.h"
|
||||
#include "../Utilities/SimpleLock.h"
|
||||
|
||||
class MemoryManager;
|
||||
class Console;
|
||||
class Disassembler;
|
||||
|
||||
struct DebugState
|
||||
{
|
||||
State CPU;
|
||||
PPUDebugState PPU;
|
||||
};
|
||||
|
||||
class Debugger
|
||||
{
|
||||
private:
|
||||
static Debugger* Instance;
|
||||
|
||||
unique_ptr<Disassembler> _disassembler;
|
||||
shared_ptr<Console> _console;
|
||||
shared_ptr<CPU> _cpu;
|
||||
shared_ptr<PPU> _ppu;
|
||||
shared_ptr<MemoryManager> _memoryManager;
|
||||
shared_ptr<BaseMapper> _mapper;
|
||||
vector<shared_ptr<Breakpoint>> _readBreakpoints;
|
||||
vector<shared_ptr<Breakpoint>> _writeBreakpoints;
|
||||
vector<shared_ptr<Breakpoint>> _execBreakpoints;
|
||||
|
||||
SimpleLock _bpLock;
|
||||
SimpleLock _breakLock;
|
||||
|
||||
string _outputCache;
|
||||
atomic<uint32_t> _stepCount;
|
||||
atomic<int32_t> _stepCycleCount;
|
||||
atomic<uint8_t> _lastInstruction;
|
||||
atomic<bool> _stepOut;
|
||||
atomic<int32_t> _stepOverAddr;
|
||||
|
||||
private:
|
||||
void PrivateCheckBreakpoint(BreakpointType type, uint32_t addr);
|
||||
bool SleepUntilResume();
|
||||
|
||||
public:
|
||||
Debugger(shared_ptr<Console> console, shared_ptr<CPU> cpu, shared_ptr<PPU> ppu, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseMapper> mapper);
|
||||
~Debugger();
|
||||
|
||||
void AddBreakpoint(BreakpointType type, uint32_t address, bool isAbsoluteAddr);
|
||||
void RemoveBreakpoint(shared_ptr<Breakpoint> breakpoint);
|
||||
shared_ptr<Breakpoint> GetMatchingBreakpoint(BreakpointType type, uint32_t addr);
|
||||
vector<shared_ptr<Breakpoint>> GetBreakpoints();
|
||||
vector<uint32_t> GetExecBreakpointAddresses();
|
||||
|
||||
void GetState(DebugState *state);
|
||||
|
||||
void Step(uint32_t count = 1);
|
||||
void StepCycles(uint32_t cycleCount = 1);
|
||||
void StepOver();
|
||||
void StepOut();
|
||||
void Run();
|
||||
|
||||
bool IsCodeChanged();
|
||||
string GenerateOutput();
|
||||
string* GetCode();
|
||||
|
||||
uint8_t GetMemoryValue(uint32_t addr);
|
||||
uint32_t GetRelativeAddress(uint32_t addr);
|
||||
|
||||
static void CheckBreakpoint(BreakpointType type, uint32_t addr);
|
||||
};
|
|
@ -3,13 +3,18 @@
|
|||
#include "DisassemblyInfo.h"
|
||||
#include "CPU.h"
|
||||
|
||||
Disassembler::Disassembler(uint8_t* prgROM, uint32_t prgSize)
|
||||
Disassembler::Disassembler(uint8_t* internalRAM, uint8_t* prgROM, uint32_t prgSize)
|
||||
{
|
||||
_internalRAM = internalRAM;
|
||||
_prgROM = prgROM;
|
||||
_prgSize = prgSize;
|
||||
for(uint32_t i = 0; i < prgSize; i++) {
|
||||
_disassembleCache.push_back(shared_ptr<DisassemblyInfo>(nullptr));
|
||||
}
|
||||
for(uint32_t i = 0; i < 0x2000; i++) {
|
||||
_disassembleMemoryCache.push_back(shared_ptr<DisassemblyInfo>(nullptr));
|
||||
}
|
||||
|
||||
|
||||
string opName[256] = {
|
||||
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
|
@ -81,24 +86,74 @@ Disassembler::Disassembler(uint8_t* prgROM, uint32_t prgSize)
|
|||
}
|
||||
}
|
||||
|
||||
Disassembler::~Disassembler()
|
||||
{
|
||||
if(_prgROM) {
|
||||
delete[] _prgROM;
|
||||
}
|
||||
}
|
||||
|
||||
void Disassembler::BuildCache(uint32_t absoluteAddr, uint16_t memoryAddr)
|
||||
{
|
||||
while(!_disassembleCache[absoluteAddr]) {
|
||||
shared_ptr<DisassemblyInfo> disInfo(new DisassemblyInfo(&_prgROM[absoluteAddr]));
|
||||
_disassembleCache[absoluteAddr] = disInfo;
|
||||
|
||||
uint8_t opCode = _prgROM[absoluteAddr];
|
||||
|
||||
if(opCode == 0x10 || opCode == 0x20 || opCode == 0x30 || opCode == 0x40 || opCode == 0x50 || opCode == 0x60 || opCode == 0x70 || opCode == 0x90 || opCode == 0xB0 || opCode == 0xD0 || opCode == 0xF0 || opCode == 0x4C || opCode == 0x6C) {
|
||||
//Hit a jump/return instruction, can't assume that what follows is actual code, stop disassembling
|
||||
break;
|
||||
if(memoryAddr < 0x2000) {
|
||||
memoryAddr = memoryAddr & 0x7FF;
|
||||
if(!_disassembleMemoryCache[memoryAddr]) {
|
||||
shared_ptr<DisassemblyInfo> disInfo(new DisassemblyInfo(&_internalRAM[memoryAddr]));
|
||||
_disassembleMemoryCache[memoryAddr] = disInfo;
|
||||
}
|
||||
} else {
|
||||
while(!_disassembleCache[absoluteAddr]) {
|
||||
shared_ptr<DisassemblyInfo> disInfo(new DisassemblyInfo(&_prgROM[absoluteAddr]));
|
||||
_disassembleCache[absoluteAddr] = disInfo;
|
||||
|
||||
absoluteAddr += disInfo->GetSize();
|
||||
memoryAddr += disInfo->GetSize();
|
||||
uint8_t opCode = _prgROM[absoluteAddr];
|
||||
|
||||
if(opCode == 0x10 || opCode == 0x20 || opCode == 0x30 || opCode == 0x40 || opCode == 0x50 || opCode == 0x60 || opCode == 0x70 || opCode == 0x90 || opCode == 0xB0 || opCode == 0xD0 || opCode == 0xF0 || opCode == 0x4C || opCode == 0x6C) {
|
||||
//Hit a jump/return instruction, can't assume that what follows is actual code, stop disassembling
|
||||
break;
|
||||
}
|
||||
|
||||
absoluteAddr += disInfo->GetSize();
|
||||
memoryAddr += disInfo->GetSize();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string Disassembler::GetRAMCode()
|
||||
{
|
||||
std::ostringstream output;
|
||||
|
||||
uint32_t addr = 0x0000;
|
||||
uint32_t byteCount = 0;
|
||||
while(addr < 0x2000) {
|
||||
shared_ptr<DisassemblyInfo> info;
|
||||
if(info = _disassembleMemoryCache[addr&0x7FF]) {
|
||||
if(byteCount > 0) {
|
||||
output << "\n";
|
||||
byteCount = 0;
|
||||
}
|
||||
output << std::hex << std::uppercase << addr << ":" << info->ToString(addr) << "\n";
|
||||
addr += info->GetSize();
|
||||
} else {
|
||||
if(byteCount >= 8) {
|
||||
output << "\n";
|
||||
byteCount = 0;
|
||||
}
|
||||
if(byteCount == 0) {
|
||||
output << std::hex << std::uppercase << addr << ":" << ".db";
|
||||
}
|
||||
output << std::hex << " $" << std::setfill('0') << std::setw(2) << (short)_internalRAM[addr];
|
||||
|
||||
byteCount++;
|
||||
addr++;
|
||||
}
|
||||
}
|
||||
|
||||
output << "\n1FFF:--END OF INTERNAL RAM--\n";
|
||||
|
||||
return output.str();
|
||||
}
|
||||
|
||||
string Disassembler::GetCode(uint32_t startAddr, uint32_t endAddr, uint16_t &memoryAddr)
|
||||
{
|
||||
std::ostringstream output;
|
||||
|
@ -109,19 +164,19 @@ string Disassembler::GetCode(uint32_t startAddr, uint32_t endAddr, uint16_t &mem
|
|||
shared_ptr<DisassemblyInfo> info;
|
||||
if(info = _disassembleCache[addr]) {
|
||||
if(byteCount > 0) {
|
||||
output << "\\par\n";
|
||||
output << "\n";
|
||||
byteCount = 0;
|
||||
}
|
||||
output << "{\\highlight1\n " << std::hex << std::uppercase << memoryAddr << ":} " << info->ToString(memoryAddr) << "\\par\n";
|
||||
output << std::hex << std::uppercase << memoryAddr << ":" << info->ToString(memoryAddr) << "\n";
|
||||
addr += info->GetSize();
|
||||
memoryAddr += info->GetSize();
|
||||
} else {
|
||||
if(byteCount >= 8) {
|
||||
output << "\\par\n";
|
||||
output << "\n";
|
||||
byteCount = 0;
|
||||
}
|
||||
if(byteCount == 0) {
|
||||
output << "{\\highlight1\n " << std::hex << std::uppercase << memoryAddr << ":} " << ".db";
|
||||
output << std::hex << std::uppercase << memoryAddr << ":" << ".db";
|
||||
}
|
||||
output << std::hex << " $" << std::setfill('0') << std::setw(2) << (short)_prgROM[addr];
|
||||
|
||||
|
@ -131,9 +186,7 @@ string Disassembler::GetCode(uint32_t startAddr, uint32_t endAddr, uint16_t &mem
|
|||
}
|
||||
}
|
||||
|
||||
if(byteCount > 0) {
|
||||
output << "\\par\n";
|
||||
}
|
||||
output << "\n";
|
||||
|
||||
return output.str();
|
||||
}
|
||||
|
|
|
@ -7,12 +7,16 @@ class Disassembler
|
|||
{
|
||||
private:
|
||||
vector<shared_ptr<DisassemblyInfo>> _disassembleCache;
|
||||
vector<shared_ptr<DisassemblyInfo>> _disassembleMemoryCache;
|
||||
uint8_t* _internalRAM;
|
||||
uint8_t* _prgROM;
|
||||
uint32_t _prgSize;
|
||||
|
||||
public:
|
||||
Disassembler(uint8_t* prgROM, uint32_t prgSize);
|
||||
Disassembler(uint8_t* internalRAM, uint8_t* prgROM, uint32_t prgSize);
|
||||
~Disassembler();
|
||||
|
||||
void BuildCache(uint32_t absoluteAddr, uint16_t memoryAddr);
|
||||
string GetRAMCode();
|
||||
string GetCode(uint32_t startAddr, uint32_t endAddr, uint16_t &memoryAddr);
|
||||
};
|
||||
|
|
|
@ -22,7 +22,7 @@ void DisassemblyInfo::Initialize(uint32_t memoryAddr)
|
|||
}
|
||||
|
||||
if(DisassemblyInfo::OPName[opCode].empty()) {
|
||||
std::cout << "error";
|
||||
output << "invalid opcode";
|
||||
}
|
||||
|
||||
std::ostringstream nextByte;
|
||||
|
|
|
@ -1,20 +1,26 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include <thread>
|
||||
using std::thread;
|
||||
|
||||
#include "MessageManager.h"
|
||||
#include "GameClient.h"
|
||||
#include "Console.h"
|
||||
#include "../Utilities/Socket.h"
|
||||
#include "ClientConnectionData.h"
|
||||
|
||||
unique_ptr<GameClient> GameClient::Instance;
|
||||
|
||||
GameClient::GameClient()
|
||||
{
|
||||
Console::RegisterNotificationListener(this);
|
||||
MessageManager::RegisterNotificationListener(this);
|
||||
}
|
||||
|
||||
GameClient::~GameClient()
|
||||
{
|
||||
_stop = true;
|
||||
_clientThread->join();
|
||||
Console::UnregisterNotificationListener(this);
|
||||
MessageManager::UnregisterNotificationListener(this);
|
||||
}
|
||||
|
||||
bool GameClient::Connected()
|
||||
|
@ -26,10 +32,10 @@ bool GameClient::Connected()
|
|||
}
|
||||
}
|
||||
|
||||
void GameClient::Connect(const char *host, u_short port)
|
||||
void GameClient::Connect(shared_ptr<ClientConnectionData> connectionData)
|
||||
{
|
||||
Instance.reset(new GameClient());
|
||||
Instance->PrivateConnect(host, port);
|
||||
Instance->PrivateConnect(connectionData);
|
||||
Instance->_clientThread.reset(new thread(&GameClient::Exec, Instance.get()));
|
||||
}
|
||||
|
||||
|
@ -38,15 +44,15 @@ void GameClient::Disconnect()
|
|||
Instance.reset();
|
||||
}
|
||||
|
||||
void GameClient::PrivateConnect(const char *host, u_short port)
|
||||
void GameClient::PrivateConnect(shared_ptr<ClientConnectionData> connectionData)
|
||||
{
|
||||
_stop = false;
|
||||
_socket.reset(new Socket());
|
||||
if(_socket->Connect(host, port)) {
|
||||
_connection.reset(new GameClientConnection(_socket));
|
||||
if(_socket->Connect(connectionData->Host.c_str(), connectionData->Port)) {
|
||||
_connection.reset(new GameClientConnection(_socket, connectionData));
|
||||
_connected = true;
|
||||
} else {
|
||||
Console::DisplayMessage(L"Could not connect to server.");
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Could not connect to server.");
|
||||
_connected = false;
|
||||
_socket.reset();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "GameClientConnection.h"
|
||||
#include "INotificationListener.h"
|
||||
|
||||
class ClientConnectionData;
|
||||
class thread;
|
||||
|
||||
class GameClient : public INotificationListener
|
||||
{
|
||||
private:
|
||||
|
@ -14,7 +18,7 @@ private:
|
|||
unique_ptr<GameClientConnection> _connection;
|
||||
bool _connected = false;
|
||||
|
||||
void PrivateConnect(const char *host, u_short port);
|
||||
void PrivateConnect(shared_ptr<ClientConnectionData> connectionData);
|
||||
void Exec();
|
||||
void PrivateDisconnect();
|
||||
|
||||
|
@ -23,7 +27,7 @@ public:
|
|||
~GameClient();
|
||||
|
||||
static bool Connected();
|
||||
static void Connect(const char *host, u_short port);
|
||||
static void Connect(shared_ptr<ClientConnectionData> connectionData);
|
||||
static void Disconnect();
|
||||
|
||||
void ProcessNotification(ConsoleNotificationType type);
|
||||
|
|
|
@ -8,13 +8,15 @@
|
|||
#include "SaveStateMessage.h"
|
||||
#include "Console.h"
|
||||
#include "ControlManager.h"
|
||||
#include "VirtualController.h"
|
||||
#include "ClientConnectionData.h"
|
||||
|
||||
GameClientConnection::GameClientConnection(shared_ptr<Socket> socket) : GameConnection(socket)
|
||||
GameClientConnection::GameClientConnection(shared_ptr<Socket> socket, shared_ptr<ClientConnectionData> connectionData) : GameConnection(socket, connectionData)
|
||||
{
|
||||
_controlDevice = ControlManager::GetControlDevice(0);
|
||||
ControlManager::BackupControlDevices();
|
||||
|
||||
Console::DisplayMessage(L"Connected to server.");
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Connected to server.");
|
||||
|
||||
SendHandshake();
|
||||
}
|
||||
|
@ -23,12 +25,12 @@ GameClientConnection::~GameClientConnection()
|
|||
{
|
||||
_virtualControllers.clear();
|
||||
ControlManager::RestoreControlDevices();
|
||||
Console::DisplayMessage(L"Connection to server lost.");
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Connection to server lost.");
|
||||
}
|
||||
|
||||
void GameClientConnection::SendHandshake()
|
||||
{
|
||||
SendNetMessage(HandShakeMessage());
|
||||
SendNetMessage(HandShakeMessage(_connectionData->PlayerName, _connectionData->AvatarData, _connectionData->AvatarSize));
|
||||
}
|
||||
|
||||
void GameClientConnection::InitializeVirtualControllers()
|
||||
|
@ -49,7 +51,7 @@ void GameClientConnection::ProcessMessage(NetMessage* message)
|
|||
uint8_t state;
|
||||
GameInformationMessage* gameInfo;
|
||||
|
||||
switch(message->Type) {
|
||||
switch(message->GetType()) {
|
||||
case MessageType::SaveState:
|
||||
if(_gameLoaded) {
|
||||
DisposeVirtualControllers();
|
||||
|
@ -65,23 +67,23 @@ void GameClientConnection::ProcessMessage(NetMessage* message)
|
|||
break;
|
||||
case MessageType::MovieData:
|
||||
if(_gameLoaded) {
|
||||
port = ((MovieDataMessage*)message)->PortNumber;
|
||||
state = ((MovieDataMessage*)message)->InputState;
|
||||
port = ((MovieDataMessage*)message)->GetPortNumber();
|
||||
state = ((MovieDataMessage*)message)->GetInputState();
|
||||
|
||||
_virtualControllers[port]->PushState(state);
|
||||
}
|
||||
break;
|
||||
case MessageType::GameInformation:
|
||||
gameInfo = (GameInformationMessage*)message;
|
||||
if(gameInfo->ControllerPort != _controllerPort) {
|
||||
_controllerPort = gameInfo->ControllerPort;
|
||||
Console::DisplayMessage(wstring(L"Connected as player ") + std::to_wstring(_controllerPort + 1));
|
||||
if(gameInfo->GetPort() != _controllerPort) {
|
||||
_controllerPort = gameInfo->GetPort();
|
||||
MessageManager::DisplayMessage(wstring(L"Connected as player ") + std::to_wstring(_controllerPort + 1));
|
||||
}
|
||||
|
||||
DisposeVirtualControllers();
|
||||
|
||||
_gameLoaded = gameInfo->AttemptLoadGame();
|
||||
if(gameInfo->Paused) {
|
||||
if(gameInfo->IsPaused()) {
|
||||
Console::SetFlags(EmulationFlags::Paused);
|
||||
} else {
|
||||
Console::ClearFlags(EmulationFlags::Paused);
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "GameConnection.h"
|
||||
#include "VirtualController.h"
|
||||
#include "IControlDevice.h"
|
||||
|
||||
class ClientConnectionData;
|
||||
class VirtualController;
|
||||
|
||||
class GameClientConnection : public GameConnection
|
||||
{
|
||||
|
@ -21,7 +24,7 @@ protected:
|
|||
void ProcessMessage(NetMessage* message);
|
||||
|
||||
public:
|
||||
GameClientConnection(shared_ptr<Socket> socket);
|
||||
GameClientConnection(shared_ptr<Socket> socket, shared_ptr<ClientConnectionData> connectionData);
|
||||
~GameClientConnection();
|
||||
|
||||
void SendInput();
|
||||
|
|
|
@ -6,9 +6,11 @@
|
|||
#include "MovieDataMessage.h"
|
||||
#include "GameInformationMessage.h"
|
||||
#include "SaveStateMessage.h"
|
||||
#include "ClientConnectionData.h"
|
||||
|
||||
GameConnection::GameConnection(shared_ptr<Socket> socket)
|
||||
GameConnection::GameConnection(shared_ptr<Socket> socket, shared_ptr<ClientConnectionData> connectionData)
|
||||
{
|
||||
_connectionData = connectionData;
|
||||
_socket = socket;
|
||||
}
|
||||
|
||||
|
@ -48,11 +50,11 @@ NetMessage* GameConnection::ReadMessage()
|
|||
uint32_t messageLength;
|
||||
if(ExtractMessage(_messageBuffer, messageLength)) {
|
||||
switch((MessageType)_messageBuffer[0]) {
|
||||
case MessageType::HandShake: return new HandShakeMessage(_messageBuffer + 1);
|
||||
case MessageType::SaveState: return new SaveStateMessage(_messageBuffer + 1, messageLength - 1);
|
||||
case MessageType::InputData: return new InputDataMessage(_messageBuffer + 1);
|
||||
case MessageType::MovieData: return new MovieDataMessage(_messageBuffer + 1);
|
||||
case MessageType::GameInformation: return new GameInformationMessage(_messageBuffer + 1);
|
||||
case MessageType::HandShake: return new HandShakeMessage(_messageBuffer, messageLength);
|
||||
case MessageType::SaveState: return new SaveStateMessage(_messageBuffer, messageLength);
|
||||
case MessageType::InputData: return new InputDataMessage(_messageBuffer, messageLength);
|
||||
case MessageType::MovieData: return new MovieDataMessage(_messageBuffer, messageLength);
|
||||
case MessageType::GameInformation: return new GameInformationMessage(_messageBuffer, messageLength);
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -75,6 +77,7 @@ void GameConnection::ProcessMessages()
|
|||
NetMessage* message;
|
||||
while(message = ReadMessage()) {
|
||||
//Loop until all messages have been processed
|
||||
message->Initialize();
|
||||
ProcessMessage(message);
|
||||
delete message;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "NetMessage.h"
|
||||
#include "../Utilities/Socket.h"
|
||||
#include "../Utilities/SimpleLock.h"
|
||||
|
||||
class Socket;
|
||||
class NetMessage;
|
||||
class ClientConnectionData;
|
||||
|
||||
class GameConnection
|
||||
{
|
||||
protected:
|
||||
shared_ptr<Socket> _socket;
|
||||
shared_ptr<ClientConnectionData> _connectionData;
|
||||
char _readBuffer[0x40000];
|
||||
char _messageBuffer[0x40000];
|
||||
int _readPosition = 0;
|
||||
|
@ -25,7 +28,7 @@ protected:
|
|||
void SendNetMessage(NetMessage &message);
|
||||
|
||||
public:
|
||||
GameConnection(shared_ptr<Socket> socket);
|
||||
GameConnection(shared_ptr<Socket> socket, shared_ptr<ClientConnectionData> connectionData);
|
||||
|
||||
bool ConnectionError();
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "MessageManager.h"
|
||||
#include "NetMessage.h"
|
||||
#include "Console.h"
|
||||
#include "ROMLoader.h"
|
||||
|
@ -7,54 +8,90 @@
|
|||
|
||||
class GameInformationMessage : public NetMessage
|
||||
{
|
||||
protected:
|
||||
virtual uint32_t GetMessageLength()
|
||||
{
|
||||
return sizeof(ROMFilename) + sizeof(CRC32Hash) + sizeof(ControllerPort) + sizeof(Paused);
|
||||
}
|
||||
private:
|
||||
wchar_t *_romFilename = nullptr;
|
||||
uint32_t _romFilenameLength = 0;
|
||||
uint32_t _crc32Hash = 0;
|
||||
uint8_t _controllerPort = 0;
|
||||
bool _paused = false;
|
||||
|
||||
virtual void ProtectedSend(Socket &socket)
|
||||
protected:
|
||||
virtual void ProtectedStreamState()
|
||||
{
|
||||
socket.BufferedSend((char*)&ROMFilename, sizeof(ROMFilename));
|
||||
socket.BufferedSend((char*)&CRC32Hash, sizeof(CRC32Hash));
|
||||
socket.BufferedSend((char*)&ControllerPort, sizeof(ControllerPort));
|
||||
socket.BufferedSend((char*)&Paused, sizeof(Paused));
|
||||
StreamArray((void**)&_romFilename, _romFilenameLength);
|
||||
Stream<uint32_t>(_crc32Hash);
|
||||
Stream<uint8_t>(_controllerPort);
|
||||
Stream<bool>(_paused);
|
||||
}
|
||||
|
||||
public:
|
||||
wchar_t ROMFilename[255];
|
||||
uint32_t CRC32Hash;
|
||||
uint8_t ControllerPort;
|
||||
bool Paused;
|
||||
|
||||
GameInformationMessage(char *readBuffer) : NetMessage(MessageType::GameInformation)
|
||||
{
|
||||
memcpy((char*)ROMFilename, readBuffer, sizeof(ROMFilename));
|
||||
memcpy((char*)&CRC32Hash, readBuffer + sizeof(ROMFilename), sizeof(CRC32Hash));
|
||||
ControllerPort = readBuffer[sizeof(ROMFilename) + sizeof(CRC32Hash)];
|
||||
Paused = readBuffer[sizeof(ROMFilename) + sizeof(CRC32Hash) + sizeof(ControllerPort)] == 1;
|
||||
}
|
||||
GameInformationMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
|
||||
GameInformationMessage(wstring filepath, uint8_t port, bool paused) : NetMessage(MessageType::GameInformation)
|
||||
{
|
||||
memset(ROMFilename, 0, sizeof(ROMFilename));
|
||||
wcscpy_s(ROMFilename, FolderUtilities::GetFilename(filepath, true).c_str());
|
||||
CRC32Hash = ROMLoader::GetCRC32(filepath);
|
||||
ControllerPort = port;
|
||||
Paused = paused;
|
||||
CopyString(&_romFilename, _romFilenameLength, FolderUtilities::GetFilename(filepath, true));
|
||||
_crc32Hash = ROMLoader::GetCRC32(filepath);
|
||||
_controllerPort = port;
|
||||
_paused = paused;
|
||||
}
|
||||
|
||||
bool AttemptLoadGame()
|
||||
{
|
||||
wstring filename = ROMFilename;
|
||||
wstring filename = _romFilename;
|
||||
if(filename.size() > 0) {
|
||||
if(Console::AttemptLoadROM(filename, CRC32Hash)) {
|
||||
if(AttemptLoadROM(filename, _crc32Hash)) {
|
||||
return true;
|
||||
} else {
|
||||
Console::DisplayMessage(L"Could not find matching game ROM.");
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Could not find matching game ROM.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8_t GetPort()
|
||||
{
|
||||
return _controllerPort;
|
||||
}
|
||||
|
||||
bool IsPaused()
|
||||
{
|
||||
return _paused;
|
||||
}
|
||||
|
||||
bool AttemptLoadROM(wstring filename, uint32_t crc32Hash)
|
||||
{
|
||||
if(!Console::GetROMPath().empty()) {
|
||||
if(ROMLoader::GetCRC32(Console::GetROMPath()) == crc32Hash) {
|
||||
//Current game matches, no need to do anything
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
vector<wstring> romFiles = FolderUtilities::GetFilesInFolder(L"D:\\Users\\Saitoh Hajime\\Desktop\\CPPApp\\NES\\Games", L"*.nes", true);
|
||||
for(wstring zipFile : FolderUtilities::GetFilesInFolder(L"D:\\Users\\Saitoh Hajime\\Desktop\\CPPApp\\NES\\Games", L"*.zip", true)) {
|
||||
romFiles.push_back(zipFile);
|
||||
}
|
||||
for(wstring romFile : romFiles) {
|
||||
//Quick search by filename
|
||||
if(FolderUtilities::GetFilename(romFile, true).compare(filename) == 0) {
|
||||
if(ROMLoader::GetCRC32(romFile) == crc32Hash) {
|
||||
//Matching ROM found
|
||||
Console::LoadROM(romFile);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(wstring romFile : romFiles) {
|
||||
//Slower search by CRC value
|
||||
if(ROMLoader::GetCRC32(romFile) == crc32Hash) {
|
||||
//Matching ROM found
|
||||
Console::LoadROM(romFile);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
|
@ -1,10 +1,30 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include <thread>
|
||||
using std::thread;
|
||||
|
||||
#include "MessageManager.h"
|
||||
#include "GameServer.h"
|
||||
#include "Console.h"
|
||||
#include "../Utilities/Socket.h"
|
||||
|
||||
unique_ptr<GameServer> GameServer::Instance;
|
||||
|
||||
GameServer::GameServer()
|
||||
{
|
||||
ControlManager::RegisterBroadcaster(this);
|
||||
}
|
||||
|
||||
GameServer::~GameServer()
|
||||
{
|
||||
_stop = true;
|
||||
_serverThread->join();
|
||||
|
||||
Stop();
|
||||
|
||||
ControlManager::UnregisterBroadcaster(this);
|
||||
}
|
||||
|
||||
void GameServer::AcceptConnections()
|
||||
{
|
||||
while(true) {
|
||||
|
@ -35,18 +55,15 @@ void GameServer::UpdateConnections()
|
|||
}
|
||||
}
|
||||
|
||||
void GameServer::Start()
|
||||
void GameServer::Exec()
|
||||
{
|
||||
Console::DisplayMessage(L"Server started.");
|
||||
_listener.reset(new Socket());
|
||||
_listener->Bind(8888);
|
||||
_listener->Bind(_port);
|
||||
_listener->Listen(10);
|
||||
_stop = false;
|
||||
_initialized = true;
|
||||
}
|
||||
MessageManager::DisplayMessage(L"Net Play" , L"Server started (Port: " + std::to_wstring(_port) + L")");
|
||||
|
||||
void GameServer::Exec()
|
||||
{
|
||||
while(!_stop) {
|
||||
AcceptConnections();
|
||||
UpdateConnections();
|
||||
|
@ -59,28 +76,13 @@ void GameServer::Stop()
|
|||
{
|
||||
_initialized = false;
|
||||
_listener.reset();
|
||||
Console::DisplayMessage(L"Server stopped.");
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Server stopped");
|
||||
}
|
||||
|
||||
GameServer::GameServer()
|
||||
{
|
||||
ControlManager::RegisterBroadcaster(this);
|
||||
Console::RegisterNotificationListener(this);
|
||||
}
|
||||
|
||||
GameServer::~GameServer()
|
||||
{
|
||||
_stop = true;
|
||||
_serverThread->join();
|
||||
|
||||
ControlManager::UnregisterBroadcaster(this);
|
||||
Console::UnregisterNotificationListener(this);
|
||||
}
|
||||
|
||||
void GameServer::StartServer()
|
||||
void GameServer::StartServer(uint16_t port)
|
||||
{
|
||||
Instance.reset(new GameServer());
|
||||
Instance->Start();
|
||||
Instance->_port = port;
|
||||
Instance->_serverThread.reset(new thread(&GameServer::Exec, Instance.get()));
|
||||
}
|
||||
|
||||
|
@ -109,21 +111,3 @@ void GameServer::BroadcastInput(uint8_t inputData, uint8_t port)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GameServer::ProcessNotification(ConsoleNotificationType type)
|
||||
{
|
||||
if(type == ConsoleNotificationType::StateLoaded) {
|
||||
for(shared_ptr<GameServerConnection> connection : _openConnections) {
|
||||
if(!connection->ConnectionError()) {
|
||||
connection->SendGameState();
|
||||
}
|
||||
}
|
||||
} else if(type == ConsoleNotificationType::GameLoaded) {
|
||||
for(shared_ptr<GameServerConnection> connection : _openConnections) {
|
||||
if(!connection->ConnectionError()) {
|
||||
connection->SendGameInformation();
|
||||
connection->SendGameState();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include <thread>
|
||||
#include "GameServerConnection.h"
|
||||
#include "INotificationListener.h"
|
||||
|
||||
class GameServer : public IGameBroadcaster, public INotificationListener
|
||||
using std::thread;
|
||||
|
||||
class GameServer : public IGameBroadcaster
|
||||
{
|
||||
private:
|
||||
static unique_ptr<GameServer> Instance;
|
||||
|
@ -11,13 +14,13 @@ private:
|
|||
atomic<bool> _stop;
|
||||
|
||||
unique_ptr<Socket> _listener;
|
||||
uint16_t _port;
|
||||
list<shared_ptr<GameServerConnection>> _openConnections;
|
||||
bool _initialized = false;
|
||||
|
||||
void AcceptConnections();
|
||||
void UpdateConnections();
|
||||
|
||||
void Start();
|
||||
void Exec();
|
||||
void Stop();
|
||||
|
||||
|
@ -25,10 +28,9 @@ public:
|
|||
GameServer();
|
||||
~GameServer();
|
||||
|
||||
static void StartServer();
|
||||
static void StartServer(uint16_t port);
|
||||
static void StopServer();
|
||||
static bool Started();
|
||||
|
||||
virtual void BroadcastInput(uint8_t inputData, uint8_t port);
|
||||
virtual void ProcessNotification(ConsoleNotificationType type);
|
||||
};
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "MessageManager.h"
|
||||
#include "GameServerConnection.h"
|
||||
#include "HandShakeMessage.h"
|
||||
#include "InputDataMessage.h"
|
||||
|
@ -8,47 +9,30 @@
|
|||
#include "SaveStateMessage.h"
|
||||
#include "Console.h"
|
||||
#include "ControlManager.h"
|
||||
#include "ClientConnectionData.h"
|
||||
|
||||
void GameServerConnection::ProcessMessage(NetMessage* message)
|
||||
{
|
||||
switch(message->Type) {
|
||||
case MessageType::HandShake:
|
||||
//Send the game's current state to the client and register the controller
|
||||
if(((HandShakeMessage*)message)->IsValid()) {
|
||||
SendGameInformation();
|
||||
SendGameState();
|
||||
}
|
||||
break;
|
||||
case MessageType::InputData:
|
||||
uint8_t state = ((InputDataMessage*)message)->InputState;
|
||||
if(_inputData.size() == 0 || state != _inputData.back()) {
|
||||
_inputData.push_back(state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
GameServerConnection::GameServerConnection(shared_ptr<Socket> socket, int controllerPort, IGameBroadcaster* gameBroadcaster) : GameConnection(socket)
|
||||
GameServerConnection::GameServerConnection(shared_ptr<Socket> socket, int controllerPort, IGameBroadcaster* gameBroadcaster) : GameConnection(socket, nullptr)
|
||||
{
|
||||
//Server-side connection
|
||||
_gameBroadcaster = gameBroadcaster;
|
||||
|
||||
_controllerPort = controllerPort;
|
||||
|
||||
Console::DisplayMessage(L"Player " + std::to_wstring(_controllerPort+1) + L" connected.");
|
||||
|
||||
ControlManager::BackupControlDevices();
|
||||
|
||||
Console::RegisterNotificationListener(this);
|
||||
MessageManager::RegisterNotificationListener(this);
|
||||
}
|
||||
|
||||
GameServerConnection::~GameServerConnection()
|
||||
{
|
||||
Console::DisplayMessage(L"Player " + std::to_wstring(_controllerPort+1) + L" disconnected.");
|
||||
if(_connectionData) {
|
||||
MessageManager::DisplayToast(L"Net Play", _connectionData->PlayerName + L" (Player " + std::to_wstring(_controllerPort + 1) + L") disconnected.", _connectionData->AvatarData, _connectionData->AvatarSize);
|
||||
} else {
|
||||
MessageManager::DisplayMessage(L"Net Play", L"Player " + std::to_wstring(_controllerPort + 1) + L" disconnected.");
|
||||
}
|
||||
|
||||
ControlManager::RestoreControlDevices();
|
||||
|
||||
Console::UnregisterNotificationListener(this);
|
||||
MessageManager::UnregisterNotificationListener(this);
|
||||
}
|
||||
|
||||
void GameServerConnection::SendGameState()
|
||||
|
@ -64,7 +48,7 @@ void GameServerConnection::SendGameState()
|
|||
|
||||
char* buffer = new char[size];
|
||||
state.read(buffer, size);
|
||||
SendNetMessage(SaveStateMessage(buffer, size));
|
||||
SendNetMessage(SaveStateMessage(buffer, size, true));
|
||||
delete[] buffer;
|
||||
}
|
||||
|
||||
|
@ -96,13 +80,37 @@ ButtonState GameServerConnection::GetButtonState()
|
|||
return state;
|
||||
}
|
||||
|
||||
void GameServerConnection::ProcessMessage(NetMessage* message)
|
||||
{
|
||||
switch(message->GetType()) {
|
||||
case MessageType::HandShake:
|
||||
//Send the game's current state to the client and register the controller
|
||||
if(((HandShakeMessage*)message)->IsValid()) {
|
||||
_connectionData.reset(new ClientConnectionData("", 0, ((HandShakeMessage*)message)->GetPlayerName(), ((HandShakeMessage*)message)->GetAvatarData(), ((HandShakeMessage*)message)->GetAvatarSize()));
|
||||
|
||||
MessageManager::DisplayToast(L"Net Play", _connectionData->PlayerName + L" (Player " + std::to_wstring(_controllerPort + 1) + L") connected.", _connectionData->AvatarData, _connectionData->AvatarSize);
|
||||
SendGameInformation();
|
||||
SendGameState();
|
||||
}
|
||||
break;
|
||||
case MessageType::InputData:
|
||||
uint8_t state = ((InputDataMessage*)message)->GetInputState();
|
||||
if(_inputData.size() == 0 || state != _inputData.back()) {
|
||||
_inputData.push_back(state);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void GameServerConnection::ProcessNotification(ConsoleNotificationType type)
|
||||
{
|
||||
switch(type) {
|
||||
case ConsoleNotificationType::GamePaused:
|
||||
SendGameInformation();
|
||||
break;
|
||||
case ConsoleNotificationType::GameLoaded:
|
||||
case ConsoleNotificationType::GameResumed:
|
||||
case ConsoleNotificationType::GameReset:
|
||||
SendGameInformation();
|
||||
SendGameState();
|
||||
break;
|
||||
|
|
|
@ -5,34 +5,48 @@
|
|||
class HandShakeMessage : public NetMessage
|
||||
{
|
||||
private:
|
||||
const int CurrentVersion = 1;
|
||||
const static int CurrentVersion = 1;
|
||||
uint32_t _protocolVersion = CurrentVersion;
|
||||
wchar_t *_playerName = nullptr;
|
||||
uint32_t _playerNameLength = 0;
|
||||
void* _avatarData = nullptr;
|
||||
uint32_t _avatarSize = 0;
|
||||
|
||||
protected:
|
||||
virtual uint32_t GetMessageLength()
|
||||
virtual void ProtectedStreamState()
|
||||
{
|
||||
return sizeof(ProtocolVersion);
|
||||
}
|
||||
|
||||
virtual void ProtectedSend(Socket &socket)
|
||||
{
|
||||
socket.BufferedSend((char*)&ProtocolVersion, sizeof(ProtocolVersion));
|
||||
Stream<uint32_t>(_protocolVersion);
|
||||
StreamArray((void**)&_playerName, _playerNameLength);
|
||||
StreamArray(&_avatarData, _avatarSize);
|
||||
}
|
||||
|
||||
public:
|
||||
uint32_t ProtocolVersion;
|
||||
|
||||
HandShakeMessage(char *readBuffer) : NetMessage(MessageType::HandShake)
|
||||
HandShakeMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
HandShakeMessage(wstring playerName, uint8_t* avatarData, uint32_t avatarSize) : NetMessage(MessageType::HandShake)
|
||||
{
|
||||
ProtocolVersion = *(uint32_t*)readBuffer;
|
||||
_protocolVersion = 1;
|
||||
CopyString(&_playerName, _playerNameLength, playerName);
|
||||
_avatarSize = avatarSize;
|
||||
_avatarData = avatarData;
|
||||
}
|
||||
|
||||
HandShakeMessage() : NetMessage(MessageType::HandShake)
|
||||
wstring GetPlayerName()
|
||||
{
|
||||
ProtocolVersion = 1;
|
||||
return wstring(_playerName);
|
||||
}
|
||||
|
||||
uint8_t* GetAvatarData()
|
||||
{
|
||||
return (uint8_t*)_avatarData;
|
||||
}
|
||||
|
||||
uint32_t GetAvatarSize()
|
||||
{
|
||||
return _avatarSize;
|
||||
}
|
||||
|
||||
bool IsValid()
|
||||
{
|
||||
return ProtocolVersion == CurrentVersion;
|
||||
return _protocolVersion == CurrentVersion;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -6,4 +6,5 @@ class IAudioDevice
|
|||
{
|
||||
public:
|
||||
virtual void PlayBuffer(int16_t *soundBuffer, uint32_t bufferSize) = 0;
|
||||
virtual void Pause() = 0;
|
||||
};
|
|
@ -1,9 +1,118 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <chrono>
|
||||
|
||||
class ToastInfo;
|
||||
|
||||
class IMessageManager
|
||||
{
|
||||
public:
|
||||
virtual void DisplayMessage(wstring message) = 0;
|
||||
virtual void DisplayMessage(wstring title, wstring message) = 0;
|
||||
virtual void DisplayToast(shared_ptr<ToastInfo> toast) = 0;
|
||||
};
|
||||
|
||||
class ToastInfo
|
||||
{
|
||||
private:
|
||||
wstring _title;
|
||||
wstring _message;
|
||||
uint8_t* _icon;
|
||||
uint32_t _iconSize;
|
||||
uint64_t _endTime;
|
||||
uint64_t _startTime;
|
||||
|
||||
uint8_t* ReadFile(wstring filename, uint32_t &fileSize)
|
||||
{
|
||||
ifstream file(filename, ios::in | ios::binary);
|
||||
if(file) {
|
||||
file.seekg(0, ios::end);
|
||||
fileSize = (uint32_t)file.tellg();
|
||||
file.seekg(0, ios::beg);
|
||||
|
||||
uint8_t* buffer = new uint8_t[fileSize];
|
||||
file.read((char*)buffer, fileSize);
|
||||
return buffer;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
uint64_t GetCurrentTime()
|
||||
{
|
||||
return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
|
||||
}
|
||||
|
||||
public:
|
||||
ToastInfo(wstring title, wstring message, int displayDuration, wstring iconFile)
|
||||
{
|
||||
_title = title;
|
||||
_message = message;
|
||||
|
||||
_icon = ReadFile(iconFile, _iconSize);
|
||||
|
||||
_startTime = GetCurrentTime();
|
||||
_endTime = _startTime + displayDuration;
|
||||
}
|
||||
|
||||
ToastInfo(wstring title, wstring message, int displayDuration, uint8_t* iconData, uint32_t iconSize)
|
||||
{
|
||||
_title = title;
|
||||
_message = message;
|
||||
|
||||
_iconSize = iconSize;
|
||||
_icon = new uint8_t[iconSize];
|
||||
memcpy(_icon, iconData, iconSize);
|
||||
|
||||
_startTime = GetCurrentTime();
|
||||
_endTime = _startTime + displayDuration;
|
||||
}
|
||||
|
||||
~ToastInfo()
|
||||
{
|
||||
if(_icon) {
|
||||
delete _icon;
|
||||
}
|
||||
}
|
||||
|
||||
wstring GetToastTitle()
|
||||
{
|
||||
return _title;
|
||||
}
|
||||
|
||||
wstring GetToastMessage()
|
||||
{
|
||||
return _message;
|
||||
}
|
||||
|
||||
uint8_t* GetToastIcon()
|
||||
{
|
||||
return _icon;
|
||||
}
|
||||
|
||||
uint32_t GetIconSize()
|
||||
{
|
||||
return _iconSize;
|
||||
}
|
||||
|
||||
bool HasIcon()
|
||||
{
|
||||
return _iconSize > 0;
|
||||
}
|
||||
|
||||
float GetOpacity()
|
||||
{
|
||||
uint64_t currentTime = GetCurrentTime();
|
||||
if(currentTime - _startTime < 333) {
|
||||
return (currentTime - _startTime) * 3.0f / 1000.0f;
|
||||
} else if(_endTime - currentTime < 333) {
|
||||
return (_endTime - currentTime) * 3.0f / 1000.0f;
|
||||
} else {
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
bool IsToastExpired()
|
||||
{
|
||||
return _endTime < GetCurrentTime();
|
||||
}
|
||||
};
|
|
@ -4,27 +4,24 @@
|
|||
|
||||
class InputDataMessage : public NetMessage
|
||||
{
|
||||
private:
|
||||
uint8_t _inputState;
|
||||
protected:
|
||||
virtual uint32_t GetMessageLength()
|
||||
virtual void ProtectedStreamState()
|
||||
{
|
||||
return sizeof(InputState);
|
||||
}
|
||||
|
||||
virtual void ProtectedSend(Socket &socket)
|
||||
{
|
||||
socket.BufferedSend((char*)&InputState, sizeof(InputState));
|
||||
Stream<uint8_t>(_inputState);
|
||||
}
|
||||
|
||||
public:
|
||||
uint8_t InputState;
|
||||
|
||||
InputDataMessage(char *readBuffer) : NetMessage(MessageType::InputData)
|
||||
{
|
||||
InputState = readBuffer[0];
|
||||
}
|
||||
InputDataMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
|
||||
InputDataMessage(uint8_t inputState) : NetMessage(MessageType::InputData)
|
||||
{
|
||||
InputState = inputState;
|
||||
_inputState = inputState;
|
||||
}
|
||||
|
||||
uint8_t GetInputState()
|
||||
{
|
||||
return _inputState;
|
||||
}
|
||||
};
|
|
@ -1,4 +1,5 @@
|
|||
#include "stdafx.h"
|
||||
#include "CPU.h"
|
||||
#include "BaseMapper.h"
|
||||
|
||||
class MMC1 : public BaseMapper
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
#include "stdafx.h"
|
||||
#include "Console.h"
|
||||
#include "MessageManager.h"
|
||||
#include "MapperFactory.h"
|
||||
#include "ROMLoader.h"
|
||||
#include "AXROM.h"
|
||||
|
@ -37,7 +37,7 @@ BaseMapper* MapperFactory::GetMapperFromID(uint8_t mapperID)
|
|||
case 71: return new UNROM(); //TODO: "It's largely a clone of UNROM, and Camerica games were initially emulated under iNES Mapper 002 before 071 was assigned."
|
||||
case 163: return new Nanjing();
|
||||
case 189: return new MMC3_189();
|
||||
default: Console::DisplayMessage(L"Unsupported mapper, cannot load file.");
|
||||
default: MessageManager::DisplayMessage(L"Error", L"Unsupported mapper, cannot load game.");
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "stdafx.h"
|
||||
#include "MemoryManager.h"
|
||||
#include "BaseMapper.h"
|
||||
#include "PPU.h"
|
||||
#include "Debugger.h"
|
||||
|
||||
|
@ -93,6 +94,11 @@ void MemoryManager::RegisterIODevice(IMemoryHandler *handler)
|
|||
InitializeMemoryHandlers(_vramWriteHandlers, handler, ranges.GetVRAMWriteAddresses());
|
||||
}
|
||||
|
||||
uint8_t* MemoryManager::GetInternalRAM()
|
||||
{
|
||||
return _internalRAM;
|
||||
}
|
||||
|
||||
uint8_t MemoryManager::DebugRead(uint16_t addr)
|
||||
{
|
||||
if(addr <= 0x1FFF) {
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
#include "stdafx.h"
|
||||
#include "IMemoryHandler.h"
|
||||
#include "ROMLoader.h"
|
||||
#include "BaseMapper.h"
|
||||
#include "Snapshotable.h"
|
||||
|
||||
class BaseMapper;
|
||||
|
||||
class MemoryManager: public Snapshotable
|
||||
{
|
||||
private:
|
||||
|
@ -47,6 +47,8 @@ class MemoryManager: public Snapshotable
|
|||
void RegisterIODevice(IMemoryHandler *handler);
|
||||
|
||||
uint8_t DebugRead(uint16_t addr);
|
||||
uint8_t* GetInternalRAM();
|
||||
|
||||
uint8_t Read(uint16_t addr, bool forExecution = false);
|
||||
uint16_t ReadWord(uint16_t addr);
|
||||
void Write(uint16_t addr, uint8_t value);
|
||||
|
|
46
Core/MessageManager.cpp
Normal file
46
Core/MessageManager.cpp
Normal file
|
@ -0,0 +1,46 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#include "MessageManager.h"
|
||||
|
||||
IMessageManager* MessageManager::_messageManager = nullptr;
|
||||
list<INotificationListener*> MessageManager::_notificationListeners;
|
||||
|
||||
void MessageManager::RegisterMessageManager(IMessageManager* messageManager)
|
||||
{
|
||||
MessageManager::_messageManager = messageManager;
|
||||
}
|
||||
|
||||
void MessageManager::DisplayMessage(wstring title, wstring message)
|
||||
{
|
||||
std::wcout << message << std::endl;
|
||||
if(MessageManager::_messageManager) {
|
||||
MessageManager::_messageManager->DisplayMessage(title, message);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageManager::DisplayToast(wstring title, wstring message, uint8_t* iconData, uint32_t iconSize)
|
||||
{
|
||||
if(MessageManager::_messageManager) {
|
||||
MessageManager::_messageManager->DisplayToast(shared_ptr<ToastInfo>(new ToastInfo(title, message, 4000, iconData, iconSize)));
|
||||
}
|
||||
}
|
||||
void MessageManager::RegisterNotificationListener(INotificationListener* notificationListener)
|
||||
{
|
||||
MessageManager::_notificationListeners.push_back(notificationListener);
|
||||
MessageManager::_notificationListeners.unique();
|
||||
}
|
||||
|
||||
void MessageManager::UnregisterNotificationListener(INotificationListener* notificationListener)
|
||||
{
|
||||
MessageManager::_notificationListeners.remove(notificationListener);
|
||||
}
|
||||
|
||||
void MessageManager::SendNotification(ConsoleNotificationType type)
|
||||
{
|
||||
list<INotificationListener*> listeners = MessageManager::_notificationListeners;
|
||||
|
||||
//Iterate on a copy to prevent issues if a notification causes a listener to unregister itself
|
||||
for(INotificationListener* notificationListener : listeners) {
|
||||
notificationListener->ProcessNotification(type);
|
||||
}
|
||||
}
|
22
Core/MessageManager.h
Normal file
22
Core/MessageManager.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "IMessageManager.h"
|
||||
#include "INotificationListener.h"
|
||||
|
||||
class MessageManager
|
||||
{
|
||||
private:
|
||||
static IMessageManager* _messageManager;
|
||||
static list<INotificationListener*> _notificationListeners;
|
||||
|
||||
public:
|
||||
static void RegisterMessageManager(IMessageManager* messageManager);
|
||||
static void DisplayMessage(wstring title, wstring message = L"");
|
||||
static void DisplayToast(wstring title, wstring message, uint8_t* iconData, uint32_t iconSize);
|
||||
|
||||
static void RegisterNotificationListener(INotificationListener* notificationListener);
|
||||
static void UnregisterNotificationListener(INotificationListener* notificationListener);
|
||||
static void SendNotification(ConsoleNotificationType type);
|
||||
};
|
|
@ -1,6 +1,8 @@
|
|||
#include "stdafx.h"
|
||||
#include "MessageManager.h"
|
||||
#include "Movie.h"
|
||||
#include "Console.h"
|
||||
#include "../Utilities/FolderUtilities.h"
|
||||
|
||||
Movie* Movie::Instance = new Movie();
|
||||
|
||||
|
@ -43,7 +45,7 @@ uint8_t Movie::GetState(uint8_t port)
|
|||
|
||||
if(_readPosition[port] >= _data.DataSize[port]) {
|
||||
//End of movie file
|
||||
Console::DisplayMessage(L"Movie ended.");
|
||||
MessageManager::DisplayMessage(L"Movie ended.");
|
||||
_playing = false;
|
||||
}
|
||||
|
||||
|
@ -84,7 +86,7 @@ void Movie::StartRecording(wstring filename, bool reset)
|
|||
|
||||
Console::Resume();
|
||||
|
||||
Console::DisplayMessage(L"Recording...");
|
||||
MessageManager::DisplayMessage(L"Recording...");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,7 +118,7 @@ void Movie::PlayMovie(wstring filename)
|
|||
}
|
||||
_playing = true;
|
||||
Console::Resume();
|
||||
Console::DisplayMessage(L"Playing movie: " + FolderUtilities::GetFilename(filename, true));
|
||||
MessageManager::DisplayMessage(L"Playing movie: " + FolderUtilities::GetFilename(filename, true));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ struct MovieData
|
|||
|
||||
bool Save(ofstream &file, stringstream &startState)
|
||||
{
|
||||
file.write("NMO", 3);
|
||||
file.write("MMO", 3);
|
||||
SaveStateSize = (uint32_t)startState.tellp();
|
||||
file.write((char*)&SaveStateSize, sizeof(uint32_t));
|
||||
|
||||
|
@ -43,7 +43,7 @@ struct MovieData
|
|||
char header[3];
|
||||
file.read((char*)&header, 3);
|
||||
|
||||
if(memcmp((char*)&header, "NMO", 3) != 0) {
|
||||
if(memcmp((char*)&header, "MMO", 3) != 0) {
|
||||
//Invalid movie file
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -4,31 +4,33 @@
|
|||
|
||||
class MovieDataMessage : public NetMessage
|
||||
{
|
||||
protected:
|
||||
virtual uint32_t GetMessageLength()
|
||||
{
|
||||
return sizeof(PortNumber) + sizeof(InputState);
|
||||
}
|
||||
private:
|
||||
uint8_t _portNumber;
|
||||
uint8_t _inputState;
|
||||
|
||||
virtual void ProtectedSend(Socket &socket)
|
||||
protected:
|
||||
virtual void ProtectedStreamState()
|
||||
{
|
||||
socket.BufferedSend((char*)&PortNumber, sizeof(PortNumber));
|
||||
socket.BufferedSend((char*)&InputState, sizeof(InputState));
|
||||
Stream<uint8_t>(_portNumber);
|
||||
Stream<uint8_t>(_inputState);
|
||||
}
|
||||
|
||||
public:
|
||||
uint8_t PortNumber;
|
||||
uint8_t InputState;
|
||||
|
||||
MovieDataMessage(char *readBuffer) : NetMessage(MessageType::MovieData)
|
||||
{
|
||||
PortNumber = readBuffer[0];
|
||||
InputState = readBuffer[1];
|
||||
}
|
||||
MovieDataMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
|
||||
MovieDataMessage(uint8_t state, uint8_t port) : NetMessage(MessageType::MovieData)
|
||||
{
|
||||
PortNumber = port;
|
||||
InputState = state;
|
||||
_portNumber = port;
|
||||
_inputState = state;
|
||||
}
|
||||
|
||||
uint8_t GetPortNumber()
|
||||
{
|
||||
return _portNumber;
|
||||
}
|
||||
|
||||
uint8_t GetInputState()
|
||||
{
|
||||
return _inputState;
|
||||
}
|
||||
};
|
|
@ -5,24 +5,104 @@
|
|||
|
||||
class NetMessage
|
||||
{
|
||||
public:
|
||||
MessageType Type;
|
||||
protected:
|
||||
MessageType _type;
|
||||
bool _sending;
|
||||
vector<uint8_t> _buffer;
|
||||
uint32_t _position = 0;
|
||||
vector<void*> _pointersToRelease;
|
||||
|
||||
template<typename T>
|
||||
void Stream(T &value)
|
||||
{
|
||||
if(_sending) {
|
||||
uint8_t* bytes = (uint8_t*)&value;
|
||||
int typeSize = sizeof(T);
|
||||
for(int i = 0; i < typeSize; i++) {
|
||||
_buffer.push_back(bytes[i]);
|
||||
}
|
||||
} else {
|
||||
value = *((T*)(&_buffer[0] + _position));
|
||||
_position += sizeof(T);
|
||||
}
|
||||
}
|
||||
|
||||
void StreamArray(void** value, uint32_t &length)
|
||||
{
|
||||
if(_sending) {
|
||||
Stream<uint32_t>(length);
|
||||
uint8_t* bytes = (uint8_t*)(*value);
|
||||
for(uint32_t i = 0, len = length; i < len; i++) {
|
||||
_buffer.push_back(bytes[i]);
|
||||
_position++;
|
||||
}
|
||||
} else {
|
||||
Stream<uint32_t>(length);
|
||||
if(*value == nullptr) {
|
||||
*value = (void*)new uint8_t[length];
|
||||
_pointersToRelease.push_back(*value);
|
||||
}
|
||||
uint8_t* bytes = (uint8_t*)(*value);
|
||||
for(uint32_t i = 0, len = length; i < len; i++) {
|
||||
bytes[i] = _buffer[_position];
|
||||
_position++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StreamState()
|
||||
{
|
||||
Stream<MessageType>(_type);
|
||||
ProtectedStreamState();
|
||||
}
|
||||
|
||||
NetMessage(MessageType type)
|
||||
{
|
||||
Type = type;
|
||||
_type = type;
|
||||
_sending = true;
|
||||
}
|
||||
|
||||
NetMessage(void* buffer, uint32_t length)
|
||||
{
|
||||
_buffer.assign((uint8_t*)buffer, (uint8_t*)buffer + length);
|
||||
_sending = false;
|
||||
}
|
||||
|
||||
public:
|
||||
virtual ~NetMessage()
|
||||
{
|
||||
for(void *pointer : _pointersToRelease) {
|
||||
delete[] pointer;
|
||||
}
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
StreamState();
|
||||
}
|
||||
|
||||
MessageType GetType()
|
||||
{
|
||||
return _type;
|
||||
}
|
||||
|
||||
void Send(Socket &socket)
|
||||
{
|
||||
uint32_t messageLength = GetMessageLength() + sizeof(Type);
|
||||
StreamState();
|
||||
uint32_t messageLength = _buffer.size();
|
||||
socket.BufferedSend((char*)&messageLength, sizeof(messageLength));
|
||||
socket.BufferedSend((char*)&Type, sizeof(Type));
|
||||
ProtectedSend(socket);
|
||||
socket.BufferedSend((char*)&_buffer[0], messageLength);
|
||||
socket.SendBuffer();
|
||||
}
|
||||
|
||||
void CopyString(wchar_t** dest, uint32_t &length, wstring src)
|
||||
{
|
||||
length = (src.length() + 1)*sizeof(wchar_t);
|
||||
*dest = (wchar_t*)new uint8_t[length];
|
||||
memcpy(*dest, src.c_str(), length);
|
||||
_pointersToRelease.push_back(*dest);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual uint32_t GetMessageLength() = 0;
|
||||
virtual void ProtectedSend(Socket &socket) = 0;
|
||||
virtual void ProtectedStreamState() = 0;
|
||||
};
|
||||
|
|
14
Core/PPU.cpp
14
Core/PPU.cpp
|
@ -52,9 +52,15 @@ void PPU::Reset()
|
|||
memset(_spriteRAM, 0xFF, 0x100);
|
||||
}
|
||||
|
||||
bool PPU::CheckFlag(PPUControlFlags flag)
|
||||
PPUDebugState PPU::GetState()
|
||||
{
|
||||
return false;
|
||||
PPUDebugState state;
|
||||
state.ControlFlags = _flags;
|
||||
state.StatusFlags = _statusFlags;
|
||||
state.State = _state;
|
||||
state.Cycle = _cycle;
|
||||
state.Scanline = _scanline;
|
||||
return state;
|
||||
}
|
||||
|
||||
void PPU::UpdateVideoRamAddr()
|
||||
|
@ -293,13 +299,13 @@ void PPU::IncHorizontalScrolling()
|
|||
_state.VideoRamAddr = addr;
|
||||
}
|
||||
|
||||
//Take from http://wiki.nesdev.com/w/index.php/The_skinny_on_NES_scrolling#Tile_and_attribute_fetching
|
||||
//Taken from http://wiki.nesdev.com/w/index.php/The_skinny_on_NES_scrolling#Tile_and_attribute_fetching
|
||||
uint16_t PPU::GetNameTableAddr()
|
||||
{
|
||||
return 0x2000 | (_state.VideoRamAddr & 0x0FFF);
|
||||
}
|
||||
|
||||
//Take from http://wiki.nesdev.com/w/index.php/The_skinny_on_NES_scrolling#Tile_and_attribute_fetching
|
||||
//Taken from http://wiki.nesdev.com/w/index.php/The_skinny_on_NES_scrolling#Tile_and_attribute_fetching
|
||||
uint16_t PPU::GetAttributeAddr()
|
||||
{
|
||||
return 0x23C0 | (_state.VideoRamAddr & 0x0C00) | ((_state.VideoRamAddr >> 4) & 0x38) | ((_state.VideoRamAddr >> 2) & 0x07);
|
||||
|
|
12
Core/PPU.h
12
Core/PPU.h
|
@ -74,6 +74,15 @@ struct SpriteInfo
|
|||
bool BackgroundPriority;
|
||||
};
|
||||
|
||||
struct PPUDebugState
|
||||
{
|
||||
PPUControlFlags ControlFlags;
|
||||
PPUStatusFlags StatusFlags;
|
||||
PPUState State;
|
||||
int32_t Scanline;
|
||||
uint32_t Cycle;
|
||||
};
|
||||
|
||||
class PPU : public IMemoryHandler, public Snapshotable
|
||||
{
|
||||
private:
|
||||
|
@ -120,7 +129,6 @@ class PPU : public IMemoryHandler, public Snapshotable
|
|||
|
||||
void SetControlRegister(uint8_t value);
|
||||
void SetMaskRegister(uint8_t value);
|
||||
bool CheckFlag(PPUControlFlags flag);
|
||||
|
||||
bool IsRenderingEnabled();
|
||||
|
||||
|
@ -172,6 +180,8 @@ class PPU : public IMemoryHandler, public Snapshotable
|
|||
|
||||
void Reset();
|
||||
|
||||
PPUDebugState GetState();
|
||||
|
||||
void GetMemoryRanges(MemoryRanges &ranges)
|
||||
{
|
||||
ranges.AddHandler(MemoryType::RAM, MemoryOperation::Read, 0x2000, 0x3FFF);
|
||||
|
|
57
Core/SaveStateManager.cpp
Normal file
57
Core/SaveStateManager.cpp
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#include "SaveStateManager.h"
|
||||
#include "MessageManager.h"
|
||||
#include "Console.h"
|
||||
#include "../Utilities/FolderUtilities.h"
|
||||
|
||||
wstring SaveStateManager::GetStateFilepath(int stateIndex)
|
||||
{
|
||||
wstring folder = FolderUtilities::GetSaveStateFolder();
|
||||
wstring filename = FolderUtilities::GetFilename(Console::GetROMPath(), false) + L"_" + std::to_wstring(stateIndex) + L".mst";
|
||||
return FolderUtilities::CombinePath(folder, filename);
|
||||
}
|
||||
|
||||
uint64_t SaveStateManager::GetStateInfo(int stateIndex)
|
||||
{
|
||||
wstring filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
ifstream file(filepath, ios::in | ios::binary);
|
||||
|
||||
if(file) {
|
||||
file.close();
|
||||
return FolderUtilities::GetFileModificationTime(filepath);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SaveStateManager::SaveState(int stateIndex)
|
||||
{
|
||||
wstring filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
ofstream file(filepath, ios::out | ios::binary);
|
||||
|
||||
if(file) {
|
||||
Console::Pause();
|
||||
Console::SaveState(file);
|
||||
Console::Resume();
|
||||
file.close();
|
||||
MessageManager::DisplayMessage(L"Game States", L"State #" + std::to_wstring(stateIndex) + L" saved.");
|
||||
}
|
||||
}
|
||||
|
||||
bool SaveStateManager::LoadState(int stateIndex)
|
||||
{
|
||||
wstring filepath = SaveStateManager::GetStateFilepath(stateIndex);
|
||||
ifstream file(filepath, ios::in | ios::binary);
|
||||
|
||||
if(file) {
|
||||
Console::Pause();
|
||||
Console::LoadState(file);
|
||||
Console::Resume();
|
||||
file.close();
|
||||
MessageManager::DisplayMessage(L"Game States", L"State #" + std::to_wstring(stateIndex) + L" loaded.");
|
||||
return true;
|
||||
}
|
||||
|
||||
MessageManager::DisplayMessage(L"Game States", L"Slot is empty.");
|
||||
return false;
|
||||
}
|
15
Core/SaveStateManager.h
Normal file
15
Core/SaveStateManager.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
class SaveStateManager
|
||||
{
|
||||
private:
|
||||
static wstring SaveStateManager::GetStateFilepath(int stateIndex);
|
||||
|
||||
public:
|
||||
static uint64_t SaveStateManager::GetStateInfo(int stateIndex);
|
||||
static void SaveStateManager::SaveState(int stateIndex);
|
||||
static bool SaveStateManager::LoadState(int stateIndex);
|
||||
|
||||
};
|
|
@ -6,31 +6,22 @@
|
|||
class SaveStateMessage : public NetMessage
|
||||
{
|
||||
private:
|
||||
char* _stateData;
|
||||
void* _stateData;
|
||||
uint32_t _dataSize;
|
||||
|
||||
protected:
|
||||
virtual uint32_t GetMessageLength()
|
||||
virtual void ProtectedStreamState()
|
||||
{
|
||||
return _dataSize;
|
||||
}
|
||||
|
||||
virtual void ProtectedSend(Socket &socket)
|
||||
{
|
||||
socket.BufferedSend(_stateData, _dataSize);
|
||||
StreamArray(&_stateData, _dataSize);
|
||||
}
|
||||
|
||||
public:
|
||||
SaveStateMessage(char *readBuffer, uint32_t bufferLength) : NetMessage(MessageType::SaveState)
|
||||
{
|
||||
_stateData = new char[bufferLength];
|
||||
_dataSize = bufferLength;
|
||||
memcpy(_stateData, readBuffer, bufferLength);
|
||||
}
|
||||
SaveStateMessage(void* buffer, uint32_t length) : NetMessage(buffer, length) { }
|
||||
|
||||
~SaveStateMessage()
|
||||
SaveStateMessage(void* stateData, uint32_t dataSize, bool forSend) : NetMessage(MessageType::SaveState)
|
||||
{
|
||||
delete[] _stateData;
|
||||
_stateData = stateData;
|
||||
_dataSize = dataSize;
|
||||
}
|
||||
|
||||
void LoadState()
|
||||
|
|
|
@ -37,7 +37,7 @@ class Snapshotable
|
|||
_stream[_position++] = bytes[i];
|
||||
}
|
||||
} else {
|
||||
for(uint32_t i = 0; i < length*typeSize; i++) {
|
||||
for(uint32_t i = 0, len = length*typeSize; i < len; i++) {
|
||||
((uint8_t*)value)[i] = _stream[_position];
|
||||
_position++;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <atomic>
|
||||
using std::atomic;
|
||||
|
||||
#include "IControlDevice.h"
|
||||
#include "../Utilities/SimpleLock.h"
|
||||
|
||||
|
|
|
@ -14,12 +14,11 @@
|
|||
#include <string>
|
||||
#include <cctype>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
#include <sstream>
|
||||
#include <atomic>
|
||||
#include <list>
|
||||
#include <atomic>
|
||||
|
||||
using std::vector;
|
||||
using std::shared_ptr;
|
||||
|
@ -32,9 +31,8 @@ using std::stringstream;
|
|||
using std::ofstream;
|
||||
using std::wstring;
|
||||
using std::exception;
|
||||
using std::atomic_flag;
|
||||
using std::atomic;
|
||||
using std::list;
|
||||
using std::max;
|
||||
using std::thread;
|
||||
using std::string;
|
||||
using std::atomic_flag;
|
||||
using std::atomic;
|
||||
|
|
6
GUI.NET/App.config
Normal file
6
GUI.NET/App.config
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
</configuration>
|
205
GUI.NET/ConfigManager/ConfigManager.cs
Normal file
205
GUI.NET/ConfigManager/ConfigManager.cs
Normal file
|
@ -0,0 +1,205 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using System.Xml.Serialization;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
namespace Mesen.GUI
|
||||
{
|
||||
class ConfigManager
|
||||
{
|
||||
private static Configuration _config;
|
||||
private static Configuration _dirtyConfig;
|
||||
|
||||
private static void LoadConfig()
|
||||
{
|
||||
if(_config == null) {
|
||||
if(File.Exists(ConfigFile)) {
|
||||
_config = Configuration.Deserialize(ConfigFile);
|
||||
_dirtyConfig = Configuration.Deserialize(ConfigFile);
|
||||
} else {
|
||||
//Create new config file and save it to disk
|
||||
_config = new Configuration();
|
||||
_dirtyConfig = new Configuration();
|
||||
SaveConfig();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SaveConfig()
|
||||
{
|
||||
_config.Serialize(ConfigFile);
|
||||
}
|
||||
|
||||
private static string ConfigFile
|
||||
{
|
||||
get
|
||||
{
|
||||
string configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData, Environment.SpecialFolderOption.Create), "Mesen");
|
||||
if(!Directory.Exists(configPath)) {
|
||||
Directory.CreateDirectory(configPath);
|
||||
}
|
||||
|
||||
return Path.Combine(configPath, "settings.xml");
|
||||
}
|
||||
}
|
||||
|
||||
public static Configuration Config
|
||||
{
|
||||
get
|
||||
{
|
||||
LoadConfig();
|
||||
return _dirtyConfig;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ApplyChanges()
|
||||
{
|
||||
_config = _dirtyConfig.Clone();
|
||||
SaveConfig();
|
||||
}
|
||||
|
||||
public static void RejectChanges()
|
||||
{
|
||||
_dirtyConfig = _config.Clone();
|
||||
}
|
||||
}
|
||||
|
||||
public class PlayerProfile
|
||||
{
|
||||
public string PlayerName = "NewPlayer";
|
||||
public byte[] PlayerAvatar;
|
||||
|
||||
public PlayerProfile()
|
||||
{
|
||||
SetAvatar(Properties.Resources.MesenLogo);
|
||||
}
|
||||
|
||||
|
||||
public void SetAvatar(Image image)
|
||||
{
|
||||
PlayerAvatar = image.ResizeImage(64, 64).ToByteArray(ImageFormat.Bmp);
|
||||
}
|
||||
|
||||
public void SetAvatar(string filename)
|
||||
{
|
||||
PlayerAvatar = File.ReadAllBytes(filename);
|
||||
}
|
||||
|
||||
public Image GetAvatarImage()
|
||||
{
|
||||
return Image.FromStream(new MemoryStream(PlayerAvatar));
|
||||
}
|
||||
}
|
||||
|
||||
public class ClientConnectionInfo
|
||||
{
|
||||
public string Host = "localhost";
|
||||
public UInt16 Port = 8888;
|
||||
}
|
||||
|
||||
public class ServerInfo
|
||||
{
|
||||
public string Name = "Default";
|
||||
public UInt16 Port = 8888;
|
||||
public string Password = null;
|
||||
public int MaxPlayers = 4;
|
||||
public bool AllowSpectators = true;
|
||||
public bool PublicServer = false;
|
||||
}
|
||||
|
||||
public class Configuration
|
||||
{
|
||||
private const int MaxRecentFiles = 10;
|
||||
|
||||
public PlayerProfile Profile;
|
||||
public ClientConnectionInfo ClientConnectionInfo;
|
||||
public ServerInfo ServerInfo;
|
||||
public List<string> RecentFiles;
|
||||
|
||||
public Configuration()
|
||||
{
|
||||
Profile = new PlayerProfile();
|
||||
ClientConnectionInfo = new ClientConnectionInfo();
|
||||
ServerInfo = new ServerInfo();
|
||||
RecentFiles = new List<string>();
|
||||
}
|
||||
|
||||
public void AddRecentFile(string filepath)
|
||||
{
|
||||
if(RecentFiles.Contains(filepath)) {
|
||||
RecentFiles.Remove(filepath);
|
||||
}
|
||||
RecentFiles.Insert(0, filepath);
|
||||
if(RecentFiles.Count > Configuration.MaxRecentFiles) {
|
||||
RecentFiles.RemoveAt(Configuration.MaxRecentFiles);
|
||||
}
|
||||
ConfigManager.ApplyChanges();
|
||||
}
|
||||
|
||||
public static Configuration Deserialize(string configFile)
|
||||
{
|
||||
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
|
||||
using(TextReader textReader = new StreamReader(configFile)) {
|
||||
return (Configuration)xmlSerializer.Deserialize(textReader);
|
||||
}
|
||||
}
|
||||
|
||||
public void Serialize(string configFile)
|
||||
{
|
||||
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
|
||||
using(TextWriter textWriter = new StreamWriter(configFile)) {
|
||||
xmlSerializer.Serialize(textWriter, this);
|
||||
}
|
||||
}
|
||||
|
||||
public Configuration Clone()
|
||||
{
|
||||
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
xmlSerializer.Serialize(stringWriter, this);
|
||||
|
||||
StringReader stringReader = new StringReader(stringWriter.ToString());
|
||||
return (Configuration)xmlSerializer.Deserialize(stringReader);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ImageExtensions
|
||||
{
|
||||
public static byte[] ToByteArray(this Image image, ImageFormat format)
|
||||
{
|
||||
using(MemoryStream ms = new MemoryStream()) {
|
||||
image.Save(ms, format);
|
||||
return ms.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static Image ResizeImage(this Image image, int width, int height)
|
||||
{
|
||||
var destRect = new Rectangle(0, 0, width, height);
|
||||
var destImage = new Bitmap(width, height);
|
||||
|
||||
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
|
||||
|
||||
using(var graphics = Graphics.FromImage(destImage)) {
|
||||
graphics.CompositingMode = CompositingMode.SourceCopy;
|
||||
graphics.CompositingQuality = CompositingQuality.HighQuality;
|
||||
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
||||
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
||||
|
||||
using(var wrapMode = new ImageAttributes()) {
|
||||
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
||||
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
|
||||
}
|
||||
}
|
||||
|
||||
return destImage;
|
||||
}
|
||||
}
|
||||
}
|
36
GUI.NET/Controls/DXViewer.Designer.cs
generated
Normal file
36
GUI.NET/Controls/DXViewer.Designer.cs
generated
Normal file
|
@ -0,0 +1,36 @@
|
|||
namespace Mesen.GUI.Controls
|
||||
{
|
||||
partial class DXViewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
20
GUI.NET/Controls/DXViewer.cs
Normal file
20
GUI.NET/Controls/DXViewer.cs
Normal file
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Controls
|
||||
{
|
||||
public partial class DXViewer : UserControl
|
||||
{
|
||||
public DXViewer()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
1119
GUI.NET/Debugger/Controls/ctrlConsoleStatus.Designer.cs
generated
Normal file
1119
GUI.NET/Debugger/Controls/ctrlConsoleStatus.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load diff
89
GUI.NET/Debugger/Controls/ctrlConsoleStatus.cs
Normal file
89
GUI.NET/Debugger/Controls/ctrlConsoleStatus.cs
Normal file
|
@ -0,0 +1,89 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
public partial class ctrlConsoleStatus : UserControl
|
||||
{
|
||||
public ctrlConsoleStatus()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void UpdateCPUStatus(ref DebugState state)
|
||||
{
|
||||
txtA.Text = state.CPU.A.ToString("x").ToUpper();
|
||||
txtX.Text = state.CPU.X.ToString("x").ToUpper();
|
||||
txtY.Text = state.CPU.Y.ToString("x").ToUpper();
|
||||
txtPC.Text = state.CPU.PC.ToString("x").ToUpper();
|
||||
txtSP.Text = state.CPU.SP.ToString("x").ToUpper();
|
||||
txtStatus.Text = state.CPU.PS.ToString("x").ToUpper();
|
||||
|
||||
PSFlags flags = (PSFlags)state.CPU.PS;
|
||||
chkBreak.Checked = flags.HasFlag(PSFlags.Break);
|
||||
chkCarry.Checked = flags.HasFlag(PSFlags.Carry);
|
||||
chkDecimal.Checked = flags.HasFlag(PSFlags.Decimal);
|
||||
chkInterrupt.Checked = flags.HasFlag(PSFlags.Interrupt);
|
||||
chkNegative.Checked = flags.HasFlag(PSFlags.Negative);
|
||||
chkOverflow.Checked = flags.HasFlag(PSFlags.Overflow);
|
||||
chkReserved.Checked = flags.HasFlag(PSFlags.Reserved);
|
||||
chkZero.Checked = flags.HasFlag(PSFlags.Zero);
|
||||
|
||||
chkExternal.Checked = state.CPU.IRQFlag.HasFlag(IRQSource.External);
|
||||
chkFrameCounter.Checked = state.CPU.IRQFlag.HasFlag(IRQSource.FrameCounter);
|
||||
chkDMC.Checked = state.CPU.IRQFlag.HasFlag(IRQSource.DMC);
|
||||
|
||||
chkNMI.Checked = state.CPU.NMIFlag;
|
||||
}
|
||||
|
||||
private void UpdatePPUStatus(ref DebugState state)
|
||||
{
|
||||
chkVerticalBlank.Checked = Convert.ToBoolean(state.PPU.StatusFlags.VerticalBlank);
|
||||
chkSprite0Hit.Checked = Convert.ToBoolean(state.PPU.StatusFlags.Sprite0Hit);
|
||||
chkSpriteOverflow.Checked = Convert.ToBoolean(state.PPU.StatusFlags.SpriteOverflow);
|
||||
|
||||
chkBGEnabled.Checked = Convert.ToBoolean(state.PPU.ControlFlags.BackgroundEnabled);
|
||||
chkSpritesEnabled.Checked = Convert.ToBoolean(state.PPU.ControlFlags.SpritesEnabled);
|
||||
chkDrawLeftBG.Checked = Convert.ToBoolean(state.PPU.ControlFlags.BackgroundMask);
|
||||
chkDrawLeftSpr.Checked = Convert.ToBoolean(state.PPU.ControlFlags.SpriteMask);
|
||||
chkVerticalWrite.Checked = Convert.ToBoolean(state.PPU.ControlFlags.VerticalWrite);
|
||||
chkNMIOnBlank.Checked = Convert.ToBoolean(state.PPU.ControlFlags.VBlank);
|
||||
chkLargeSprites.Checked = Convert.ToBoolean(state.PPU.ControlFlags.LargeSprites);
|
||||
chkGrayscale.Checked = Convert.ToBoolean(state.PPU.ControlFlags.Grayscale);
|
||||
chkIntensifyRed.Checked = Convert.ToBoolean(state.PPU.ControlFlags.IntensifyRed);
|
||||
chkIntensifyGreen.Checked = Convert.ToBoolean(state.PPU.ControlFlags.IntensifyGreen);
|
||||
chkIntensifyBlue.Checked = Convert.ToBoolean(state.PPU.ControlFlags.IntensifyBlue);
|
||||
|
||||
txtBGAddr.Text = state.PPU.ControlFlags.BackgroundPatternAddr.ToString("x").ToUpper();
|
||||
txtSprAddr.Text = state.PPU.ControlFlags.SpritePatternAddr.ToString("x").ToUpper();
|
||||
|
||||
txtVRAMAddr.Text = state.PPU.State.VideoRamAddr.ToString("x").ToUpper();
|
||||
txtCycle.Text = state.PPU.Cycle.ToString();
|
||||
txtScanline.Text = state.PPU.Scanline.ToString();
|
||||
txtNTAddr.Text = (0x2000 | (state.PPU.State.VideoRamAddr & 0x0FFF)).ToString("x").ToUpper();
|
||||
}
|
||||
|
||||
private void UpdateStack(UInt16 stackPointer)
|
||||
{
|
||||
lstStack.Items.Clear();
|
||||
for(UInt32 i = (UInt32)0x100 + stackPointer; i < 0x200; i++) {
|
||||
lstStack.Items.Add("$" + InteropEmu.DebugGetMemoryValue(i).ToString("x").ToUpper());
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateStatus(ref DebugState state)
|
||||
{
|
||||
UpdateCPUStatus(ref state);
|
||||
UpdatePPUStatus(ref state);
|
||||
UpdateStack(state.CPU.SP);
|
||||
}
|
||||
}
|
||||
}
|
120
GUI.NET/Debugger/Controls/ctrlConsoleStatus.resx
Normal file
120
GUI.NET/Debugger/Controls/ctrlConsoleStatus.resx
Normal file
|
@ -0,0 +1,120 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
206
GUI.NET/Debugger/Controls/ctrlDebuggerCode.Designer.cs
generated
Normal file
206
GUI.NET/Debugger/Controls/ctrlDebuggerCode.Designer.cs
generated
Normal file
|
@ -0,0 +1,206 @@
|
|||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
partial class ctrlDebuggerCode
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.txtCode = new Mesen.GUI.Debugger.ctrlSyncTextBox();
|
||||
this.contextMenuCode = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.mnuShowNextStatement = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuSetNextStatement = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuShowOnlyDisassembledCode = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuGoToLocation = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.txtCodeMargin = new Mesen.GUI.Debugger.ctrlSyncTextBox();
|
||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.mnuAddToWatch = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tableLayoutPanel11.SuspendLayout();
|
||||
this.contextMenuCode.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel11
|
||||
//
|
||||
this.tableLayoutPanel11.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
|
||||
this.tableLayoutPanel11.ColumnCount = 2;
|
||||
this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 74F));
|
||||
this.tableLayoutPanel11.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel11.Controls.Add(this.txtCode, 1, 0);
|
||||
this.tableLayoutPanel11.Controls.Add(this.panel1, 0, 0);
|
||||
this.tableLayoutPanel11.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel11.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel11.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.tableLayoutPanel11.Name = "tableLayoutPanel11";
|
||||
this.tableLayoutPanel11.RowCount = 1;
|
||||
this.tableLayoutPanel11.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel11.Size = new System.Drawing.Size(379, 218);
|
||||
this.tableLayoutPanel11.TabIndex = 3;
|
||||
//
|
||||
// txtCode
|
||||
//
|
||||
this.txtCode.BackColor = System.Drawing.Color.White;
|
||||
this.txtCode.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCode.ContextMenuStrip = this.contextMenuCode;
|
||||
this.txtCode.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtCode.Font = new System.Drawing.Font("Consolas", 11F);
|
||||
this.txtCode.Location = new System.Drawing.Point(76, 1);
|
||||
this.txtCode.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.txtCode.Name = "txtCode";
|
||||
this.txtCode.ReadOnly = true;
|
||||
this.txtCode.Size = new System.Drawing.Size(302, 216);
|
||||
this.txtCode.SyncedTextbox = null;
|
||||
this.txtCode.TabIndex = 0;
|
||||
this.txtCode.Text = "";
|
||||
this.txtCode.MouseMove += new System.Windows.Forms.MouseEventHandler(this.txtCode_MouseMove);
|
||||
this.txtCode.MouseUp += new System.Windows.Forms.MouseEventHandler(this.txtCode_MouseUp);
|
||||
//
|
||||
// contextMenuCode
|
||||
//
|
||||
this.contextMenuCode.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuShowNextStatement,
|
||||
this.mnuSetNextStatement,
|
||||
this.toolStripMenuItem1,
|
||||
this.mnuShowOnlyDisassembledCode,
|
||||
this.toolStripMenuItem2,
|
||||
this.mnuGoToLocation,
|
||||
this.mnuAddToWatch});
|
||||
this.contextMenuCode.Name = "contextMenuWatch";
|
||||
this.contextMenuCode.Size = new System.Drawing.Size(259, 148);
|
||||
this.contextMenuCode.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuCode_Opening);
|
||||
//
|
||||
// mnuShowNextStatement
|
||||
//
|
||||
this.mnuShowNextStatement.Name = "mnuShowNextStatement";
|
||||
this.mnuShowNextStatement.ShortcutKeyDisplayString = "Alt+*";
|
||||
this.mnuShowNextStatement.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Multiply)));
|
||||
this.mnuShowNextStatement.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuShowNextStatement.Text = "Show Next Statement";
|
||||
this.mnuShowNextStatement.Click += new System.EventHandler(this.mnuShowNextStatement_Click);
|
||||
//
|
||||
// mnuSetNextStatement
|
||||
//
|
||||
this.mnuSetNextStatement.Name = "mnuSetNextStatement";
|
||||
this.mnuSetNextStatement.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
|
||||
| System.Windows.Forms.Keys.F10)));
|
||||
this.mnuSetNextStatement.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuSetNextStatement.Text = "Set Next Statement";
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(255, 6);
|
||||
//
|
||||
// mnuShowOnlyDisassembledCode
|
||||
//
|
||||
this.mnuShowOnlyDisassembledCode.Checked = true;
|
||||
this.mnuShowOnlyDisassembledCode.CheckOnClick = true;
|
||||
this.mnuShowOnlyDisassembledCode.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.mnuShowOnlyDisassembledCode.Name = "mnuShowOnlyDisassembledCode";
|
||||
this.mnuShowOnlyDisassembledCode.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuShowOnlyDisassembledCode.Text = "Show Only Disassembled Code";
|
||||
this.mnuShowOnlyDisassembledCode.Click += new System.EventHandler(this.mnuShowOnlyDisassembledCode_Click);
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(255, 6);
|
||||
//
|
||||
// mnuGoToLocation
|
||||
//
|
||||
this.mnuGoToLocation.Name = "mnuGoToLocation";
|
||||
this.mnuGoToLocation.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuGoToLocation.Text = "Go To Location";
|
||||
this.mnuGoToLocation.Click += new System.EventHandler(this.mnuGoToLocation_Click);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.txtCodeMargin);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.panel1.Location = new System.Drawing.Point(1, 1);
|
||||
this.panel1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(74, 216);
|
||||
this.panel1.TabIndex = 1;
|
||||
//
|
||||
// txtCodeMargin
|
||||
//
|
||||
this.txtCodeMargin.BackColor = System.Drawing.Color.WhiteSmoke;
|
||||
this.txtCodeMargin.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txtCodeMargin.Dock = System.Windows.Forms.DockStyle.Left;
|
||||
this.txtCodeMargin.Font = new System.Drawing.Font("Consolas", 11F);
|
||||
this.txtCodeMargin.Location = new System.Drawing.Point(0, 0);
|
||||
this.txtCodeMargin.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.txtCodeMargin.Name = "txtCodeMargin";
|
||||
this.txtCodeMargin.ReadOnly = true;
|
||||
this.txtCodeMargin.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
|
||||
this.txtCodeMargin.Size = new System.Drawing.Size(90, 216);
|
||||
this.txtCodeMargin.SyncedTextbox = null;
|
||||
this.txtCodeMargin.TabIndex = 1;
|
||||
this.txtCodeMargin.Text = "";
|
||||
this.txtCodeMargin.Enter += new System.EventHandler(this.txtCodeMargin_Enter);
|
||||
//
|
||||
// mnuAddToWatch
|
||||
//
|
||||
this.mnuAddToWatch.Name = "mnuAddToWatch";
|
||||
this.mnuAddToWatch.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuAddToWatch.Text = "Add to Watch";
|
||||
this.mnuAddToWatch.Click += new System.EventHandler(this.mnuAddToWatch_Click);
|
||||
//
|
||||
// ctrlDebuggerCode
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.tableLayoutPanel11);
|
||||
this.Name = "ctrlDebuggerCode";
|
||||
this.Size = new System.Drawing.Size(379, 218);
|
||||
this.tableLayoutPanel11.ResumeLayout(false);
|
||||
this.contextMenuCode.ResumeLayout(false);
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel11;
|
||||
private ctrlSyncTextBox txtCode;
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private ctrlSyncTextBox txtCodeMargin;
|
||||
private System.Windows.Forms.ToolTip toolTip;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuCode;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowNextStatement;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuSetNextStatement;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowOnlyDisassembledCode;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoToLocation;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuAddToWatch;
|
||||
}
|
||||
}
|
292
GUI.NET/Debugger/Controls/ctrlDebuggerCode.cs
Normal file
292
GUI.NET/Debugger/Controls/ctrlDebuggerCode.cs
Normal file
|
@ -0,0 +1,292 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
public partial class ctrlDebuggerCode : UserControl
|
||||
{
|
||||
public delegate void WatchAddedEventHandler(WatchAddedEventArgs args);
|
||||
public event WatchAddedEventHandler OnWatchAdded;
|
||||
|
||||
public ctrlDebuggerCode()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
txtCode.SyncedTextbox = txtCodeMargin;
|
||||
}
|
||||
|
||||
private string _code;
|
||||
private bool _codeChanged;
|
||||
public string Code
|
||||
{
|
||||
get { return _code; }
|
||||
set
|
||||
{
|
||||
if(value != _code) {
|
||||
_codeChanged = true;
|
||||
_code = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private UInt32? _currentActiveAddress = null;
|
||||
public void SelectActiveAddress(UInt32 address)
|
||||
{
|
||||
txtCode.BeginUpdate();
|
||||
txtCodeMargin.BeginUpdate();
|
||||
|
||||
if(!UpdateCode()) {
|
||||
RemoveActiveHighlight();
|
||||
}
|
||||
|
||||
int lineIndex = GetAddressLine(address);
|
||||
if(lineIndex >= 0) {
|
||||
if(!IsLineVisible(lineIndex)) {
|
||||
//Scroll active line to middle of viewport if it wasn't already visible
|
||||
ScrollToLine(lineIndex);
|
||||
}
|
||||
//Set line background to yellow
|
||||
HighlightLine(lineIndex, Color.Yellow, Color.Black);
|
||||
}
|
||||
txtCode.EndUpdate();
|
||||
txtCodeMargin.EndUpdate();
|
||||
|
||||
_currentActiveAddress = address;
|
||||
}
|
||||
|
||||
public void RemoveActiveHighlight()
|
||||
{
|
||||
//Didn't update code, need to remove previous highlighting
|
||||
if(_currentActiveAddress.HasValue) {
|
||||
int lineIndex = GetAddressLine(_currentActiveAddress.Value);
|
||||
if(lineIndex != -1) {
|
||||
HighlightLine(lineIndex, Color.White, Color.Black);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int GetCurrentLine()
|
||||
{
|
||||
int cursorPos = txtCode.GetFirstCharIndexOfCurrentLine();
|
||||
return txtCode.GetLineFromCharIndex(cursorPos);
|
||||
}
|
||||
|
||||
public string GetWordUnderLocation(Point position)
|
||||
{
|
||||
int charIndex = txtCode.GetCharIndexFromPosition(position);
|
||||
|
||||
if(txtCode.Text.Length > charIndex) {
|
||||
List<char> wordDelimiters = new List<char>(new char[] { ' ', '\r', '\n', ',' });
|
||||
if(wordDelimiters.Contains(txtCode.Text[charIndex])) {
|
||||
return string.Empty;
|
||||
} else {
|
||||
int endIndex = txtCode.Text.IndexOfAny(wordDelimiters.ToArray(), charIndex);
|
||||
int startIndex = txtCode.Text.LastIndexOfAny(wordDelimiters.ToArray(), charIndex);
|
||||
return txtCode.Text.Substring(startIndex + 1, endIndex - startIndex - 1);
|
||||
}
|
||||
} else {
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
private int GetLineCount()
|
||||
{
|
||||
return (int)((float)txtCodeMargin.Height / (txtCodeMargin.Font.GetHeight() + 1)) - 1;
|
||||
}
|
||||
|
||||
private void ScrollToAddress(UInt32 address)
|
||||
{
|
||||
int lineIndex = GetAddressLine(address);
|
||||
if(lineIndex != -1 && !IsLineVisible(lineIndex)) {
|
||||
ScrollToLine(lineIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private void ScrollToLine(int lineIndex)
|
||||
{
|
||||
lineIndex = Math.Max(0, lineIndex - GetLineCount()/2);
|
||||
txtCodeMargin.SelectionStart = txtCodeMargin.GetFirstCharIndexFromLine(lineIndex);
|
||||
txtCodeMargin.ScrollToCaret();
|
||||
txtCode.SelectionStart = txtCode.GetFirstCharIndexFromLine(lineIndex);
|
||||
txtCode.ScrollToCaret();
|
||||
}
|
||||
|
||||
private bool IsLineVisible(int lineIndex)
|
||||
{
|
||||
int firstLine = txtCodeMargin.GetLineFromCharIndex(txtCodeMargin.GetCharIndexFromPosition(new Point(0, 0)));
|
||||
return lineIndex >= firstLine && lineIndex <= firstLine+GetLineCount();
|
||||
}
|
||||
|
||||
public bool UpdateCode(bool forceUpdate = false)
|
||||
{
|
||||
if(_codeChanged || forceUpdate) {
|
||||
StringBuilder lineNumbers = new StringBuilder();
|
||||
StringBuilder codeString = new StringBuilder();
|
||||
bool diassembledCodeOnly = mnuShowOnlyDisassembledCode.Checked;
|
||||
bool skippingCode = false;
|
||||
foreach(string line in _code.Split('\n')) {
|
||||
string[] lineParts = line.Split(':');
|
||||
if(skippingCode && (lineParts.Length != 2 || lineParts[1][0] != '.')) {
|
||||
lineNumbers.AppendLine(" .. ");
|
||||
codeString.AppendLine("[code not disassembled]");
|
||||
|
||||
UInt32 previousAddress = lineParts[0].Length > 0 ? ParseHexAddress(lineParts[0])-1 : 0xFFFF;
|
||||
lineNumbers.AppendLine(previousAddress.ToString("x").ToUpper());
|
||||
codeString.AppendLine("[code not disassembled]");
|
||||
|
||||
skippingCode = false;
|
||||
}
|
||||
|
||||
if(lineParts.Length == 2) {
|
||||
if(diassembledCodeOnly && lineParts[1][0] == '.') {
|
||||
if(!skippingCode) {
|
||||
lineNumbers.AppendLine(lineParts[0]);
|
||||
codeString.AppendLine("[code not disassembled]");
|
||||
skippingCode = true;
|
||||
}
|
||||
} else {
|
||||
lineNumbers.AppendLine(lineParts[0]);
|
||||
codeString.AppendLine(lineParts[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
txtCode.Text = codeString.ToString();
|
||||
txtCodeMargin.Text = lineNumbers.ToString();
|
||||
txtCodeMargin.SelectAll();
|
||||
txtCodeMargin.SelectionAlignment = HorizontalAlignment.Right;
|
||||
txtCodeMargin.SelectionLength = 0;
|
||||
_codeChanged = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private int GetAddressLine(UInt32 address)
|
||||
{
|
||||
int attempts = 8;
|
||||
do {
|
||||
int pos = txtCodeMargin.Text.IndexOf(address.ToString("x"), StringComparison.InvariantCultureIgnoreCase);
|
||||
if(pos >= 0) {
|
||||
return txtCodeMargin.GetLineFromCharIndex(pos);
|
||||
}
|
||||
address--;
|
||||
attempts--;
|
||||
} while(attempts > 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
private UInt32 ParseHexAddress(string hexAddress)
|
||||
{
|
||||
return UInt32.Parse(hexAddress, System.Globalization.NumberStyles.AllowHexSpecifier);
|
||||
}
|
||||
|
||||
private UInt32 GetLineAddress(int lineIndex)
|
||||
{
|
||||
int lineStartIndex = txtCodeMargin.GetFirstCharIndexFromLine(lineIndex);
|
||||
txtCodeMargin.SelectionStart = lineStartIndex + 3;
|
||||
txtCodeMargin.SelectionLength = 4;
|
||||
return ParseHexAddress(txtCodeMargin.SelectedText);
|
||||
}
|
||||
|
||||
public void HighlightLine(int lineIndex, Color bgColor, Color fgColor)
|
||||
{
|
||||
int lineStartIndex = txtCodeMargin.GetFirstCharIndexFromLine(lineIndex);
|
||||
txtCodeMargin.SelectionStart = lineStartIndex;
|
||||
txtCodeMargin.SelectionLength = 4;
|
||||
txtCodeMargin.SelectionBackColor = bgColor;
|
||||
txtCodeMargin.SelectionColor = fgColor;
|
||||
txtCodeMargin.SelectionLength = 0;
|
||||
|
||||
lineStartIndex = txtCode.GetFirstCharIndexFromLine(lineIndex);
|
||||
txtCode.SelectionStart = lineStartIndex;
|
||||
txtCode.SelectionLength = txtCode.GetFirstCharIndexFromLine(lineIndex+1) - lineStartIndex;
|
||||
txtCode.SelectionBackColor = bgColor;
|
||||
txtCode.SelectionColor = fgColor;
|
||||
txtCode.SelectionLength = 0;
|
||||
}
|
||||
|
||||
#region Events
|
||||
private Point _previousLocation;
|
||||
private void txtCode_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
if(_previousLocation != e.Location) {
|
||||
string word = GetWordUnderLocation(e.Location);
|
||||
if(word.StartsWith("$")) {
|
||||
UInt32 address = UInt32.Parse(word.Substring(1), System.Globalization.NumberStyles.AllowHexSpecifier);
|
||||
Byte memoryValue = InteropEmu.DebugGetMemoryValue(address);
|
||||
string valueText = "$" + memoryValue.ToString("x").ToUpper();
|
||||
toolTip.Show(valueText, txtCode, e.Location.X + 5, e.Location.Y + 5, 3000);
|
||||
}
|
||||
_previousLocation = e.Location;
|
||||
}
|
||||
}
|
||||
|
||||
UInt32 _lastClickedAddress = UInt32.MaxValue;
|
||||
private void txtCode_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
string word = GetWordUnderLocation(e.Location);
|
||||
if(word.StartsWith("$")) {
|
||||
_lastClickedAddress = UInt32.Parse(word.Substring(1), System.Globalization.NumberStyles.AllowHexSpecifier);
|
||||
mnuGoToLocation.Enabled = true;
|
||||
mnuGoToLocation.Text = "Go to Location (" + word + ")";
|
||||
|
||||
mnuAddToWatch.Enabled = true;
|
||||
mnuAddToWatch.Text = "Add to Watch (" + word + ")";
|
||||
} else {
|
||||
mnuGoToLocation.Enabled = false;
|
||||
mnuGoToLocation.Text = "Go to Location";
|
||||
mnuAddToWatch.Enabled = false;
|
||||
mnuAddToWatch.Text = "Add to Watch";
|
||||
}
|
||||
}
|
||||
|
||||
private void txtCodeMargin_Enter(object sender, EventArgs e)
|
||||
{
|
||||
txtCode.Focus();
|
||||
}
|
||||
|
||||
#region Context Menu
|
||||
private void contextMenuCode_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
mnuShowNextStatement.Enabled = _currentActiveAddress.HasValue;
|
||||
mnuSetNextStatement.Enabled = false;
|
||||
}
|
||||
|
||||
private void mnuShowNextStatement_Click(object sender, EventArgs e)
|
||||
{
|
||||
ScrollToAddress(_currentActiveAddress.Value);
|
||||
}
|
||||
|
||||
private void mnuShowOnlyDisassembledCode_Click(object sender, EventArgs e)
|
||||
{
|
||||
UpdateCode(true);
|
||||
}
|
||||
|
||||
private void mnuGoToLocation_Click(object sender, EventArgs e)
|
||||
{
|
||||
ScrollToAddress(_lastClickedAddress);
|
||||
}
|
||||
|
||||
private void mnuAddToWatch_Click(object sender, EventArgs e)
|
||||
{
|
||||
if(this.OnWatchAdded != null) {
|
||||
this.OnWatchAdded(new WatchAddedEventArgs() { Address = _lastClickedAddress});
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class WatchAddedEventArgs : EventArgs
|
||||
{
|
||||
public UInt32 Address { get; set; }
|
||||
}
|
||||
}
|
126
GUI.NET/Debugger/Controls/ctrlDebuggerCode.resx
Normal file
126
GUI.NET/Debugger/Controls/ctrlDebuggerCode.resx
Normal file
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="contextMenuCode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>143, 24</value>
|
||||
</metadata>
|
||||
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
110
GUI.NET/Debugger/Controls/ctrlSyncTextBox.cs
Normal file
110
GUI.NET/Debugger/Controls/ctrlSyncTextBox.cs
Normal file
|
@ -0,0 +1,110 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
class ctrlSyncTextBox : RichTextBox
|
||||
{
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
|
||||
|
||||
private const int WM_MOUSEWHEEL = 0x20A;
|
||||
private const int WM_VSCROLL = 0x115;
|
||||
private const int WM_USER = 0x0400;
|
||||
private const int EM_SETEVENTMASK = (WM_USER + 69);
|
||||
private const int WM_SETREDRAW = 0x0b;
|
||||
private IntPtr OldEventMask;
|
||||
|
||||
private Timer _syncTimer;
|
||||
private RichTextBox _syncedTextbox;
|
||||
|
||||
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public RichTextBox SyncedTextbox
|
||||
{
|
||||
get
|
||||
{
|
||||
return _syncedTextbox;
|
||||
}
|
||||
set
|
||||
{
|
||||
if(_syncedTextbox == null) {
|
||||
_syncedTextbox = value;
|
||||
if(!DesignMode && value != null && _syncTimer == null) {
|
||||
CreateTimer();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void BeginUpdate()
|
||||
{
|
||||
SendMessage(Handle, WM_SETREDRAW, IntPtr.Zero, IntPtr.Zero);
|
||||
OldEventMask = (IntPtr)SendMessage(Handle, EM_SETEVENTMASK, IntPtr.Zero, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public void EndUpdate()
|
||||
{
|
||||
SendMessage(Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
|
||||
SendMessage(Handle, EM_SETEVENTMASK, IntPtr.Zero, OldEventMask);
|
||||
}
|
||||
|
||||
private void CreateTimer()
|
||||
{
|
||||
_syncTimer = new Timer();
|
||||
_syncTimer.Interval = 50;
|
||||
_syncTimer.Enabled = true;
|
||||
_syncTimer.Tick += (object sender, EventArgs e) => {
|
||||
int line1 = SyncedTextbox.GetLineFromCharIndex(SyncedTextbox.GetCharIndexFromPosition(new Point(0, 0)));
|
||||
int line2 = GetLineFromCharIndex(GetCharIndexFromPosition(new Point(0, 0)));
|
||||
if(line1 != line2) {
|
||||
int selectionStart = SyncedTextbox.GetFirstCharIndexFromLine(line2);
|
||||
if(selectionStart >= 0) {
|
||||
SyncedTextbox.SelectionStart = selectionStart;
|
||||
SyncedTextbox.ScrollToCaret();
|
||||
}
|
||||
}
|
||||
};
|
||||
_syncTimer.Start();
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
if(m.Msg == WM_VSCROLL && SyncedTextbox != null && SyncedTextbox.IsHandleCreated) {
|
||||
SendMessage(SyncedTextbox.Handle, m.Msg, m.WParam, m.LParam);
|
||||
}
|
||||
if(m.Msg == WM_MOUSEWHEEL) {
|
||||
//Disable smooth scrolling by replacing the WM_MOUSEWHEEL event by regular VM_VSCROLL events
|
||||
int scrollLines = SystemInformation.MouseWheelScrollLines;
|
||||
for(int i = 0; i < scrollLines; i++) {
|
||||
if((int)m.WParam > 0) {
|
||||
SendMessage(Handle, WM_VSCROLL, (IntPtr)0, IntPtr.Zero);
|
||||
} else {
|
||||
SendMessage(Handle, WM_VSCROLL, (IntPtr)1, IntPtr.Zero);
|
||||
}
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing) {
|
||||
if(_syncTimer != null) {
|
||||
_syncTimer.Stop();
|
||||
_syncTimer = null;
|
||||
}
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
126
GUI.NET/Debugger/Controls/ctrlWatch.Designer.cs
generated
Normal file
126
GUI.NET/Debugger/Controls/ctrlWatch.Designer.cs
generated
Normal file
|
@ -0,0 +1,126 @@
|
|||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
partial class ctrlWatch
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("");
|
||||
this.lstWatch = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuWatch = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.mnuRemoveWatch = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuHexDisplay = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.colLastColumn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuWatch.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// lstWatch
|
||||
//
|
||||
this.lstWatch.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2,
|
||||
this.colLastColumn});
|
||||
this.lstWatch.ContextMenuStrip = this.contextMenuWatch;
|
||||
this.lstWatch.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lstWatch.FullRowSelect = true;
|
||||
this.lstWatch.GridLines = true;
|
||||
this.lstWatch.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.lstWatch.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
|
||||
listViewItem1});
|
||||
this.lstWatch.LabelEdit = true;
|
||||
this.lstWatch.Location = new System.Drawing.Point(0, 0);
|
||||
this.lstWatch.Name = "lstWatch";
|
||||
this.lstWatch.Size = new System.Drawing.Size(378, 112);
|
||||
this.lstWatch.TabIndex = 6;
|
||||
this.lstWatch.UseCompatibleStateImageBehavior = false;
|
||||
this.lstWatch.View = System.Windows.Forms.View.Details;
|
||||
this.lstWatch.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lstWatch_AfterLabelEdit);
|
||||
this.lstWatch.SelectedIndexChanged += new System.EventHandler(this.lstWatch_SelectedIndexChanged);
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
this.columnHeader1.Text = "Address";
|
||||
//
|
||||
// columnHeader2
|
||||
//
|
||||
this.columnHeader2.Text = "Value";
|
||||
this.columnHeader2.Width = 100;
|
||||
//
|
||||
// contextMenuWatch
|
||||
//
|
||||
this.contextMenuWatch.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuRemoveWatch,
|
||||
this.mnuHexDisplay});
|
||||
this.contextMenuWatch.Name = "contextMenuWatch";
|
||||
this.contextMenuWatch.Size = new System.Drawing.Size(184, 48);
|
||||
//
|
||||
// mnuRemoveWatch
|
||||
//
|
||||
this.mnuRemoveWatch.Name = "mnuRemoveWatch";
|
||||
this.mnuRemoveWatch.ShortcutKeys = System.Windows.Forms.Keys.Delete;
|
||||
this.mnuRemoveWatch.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuRemoveWatch.Text = "Remove";
|
||||
this.mnuRemoveWatch.Click += new System.EventHandler(this.mnuRemoveWatch_Click);
|
||||
//
|
||||
// mnuHexDisplay
|
||||
//
|
||||
this.mnuHexDisplay.Checked = true;
|
||||
this.mnuHexDisplay.CheckOnClick = true;
|
||||
this.mnuHexDisplay.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.mnuHexDisplay.Name = "mnuHexDisplay";
|
||||
this.mnuHexDisplay.Size = new System.Drawing.Size(183, 22);
|
||||
this.mnuHexDisplay.Text = "Hexadecimal Display";
|
||||
this.mnuHexDisplay.Click += new System.EventHandler(this.mnuHexDisplay_Click);
|
||||
//
|
||||
// colLastColumn
|
||||
//
|
||||
this.colLastColumn.Text = "";
|
||||
//
|
||||
// ctrlWatch
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.lstWatch);
|
||||
this.Name = "ctrlWatch";
|
||||
this.Size = new System.Drawing.Size(378, 112);
|
||||
this.contextMenuWatch.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView lstWatch;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuWatch;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRemoveWatch;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuHexDisplay;
|
||||
private System.Windows.Forms.ColumnHeader colLastColumn;
|
||||
}
|
||||
}
|
143
GUI.NET/Debugger/Controls/ctrlWatch.cs
Normal file
143
GUI.NET/Debugger/Controls/ctrlWatch.cs
Normal file
|
@ -0,0 +1,143 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
public partial class ctrlWatch : UserControl
|
||||
{
|
||||
public ctrlWatch()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
{
|
||||
base.OnLoad(e);
|
||||
AdjustColumnWidth();
|
||||
}
|
||||
|
||||
private void lstWatch_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
|
||||
{
|
||||
if(e.ColumnIndex == 2) {
|
||||
e.Cancel = true;
|
||||
}
|
||||
AdjustColumnWidth();
|
||||
}
|
||||
|
||||
void lstWatch_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
|
||||
{
|
||||
AdjustColumnWidth();
|
||||
}
|
||||
|
||||
private void AdjustColumnWidth()
|
||||
{
|
||||
lstWatch.ColumnWidthChanging -= lstWatch_ColumnWidthChanging;
|
||||
lstWatch.ColumnWidthChanged -= lstWatch_ColumnWidthChanged;
|
||||
|
||||
//Force watch values to take the full width of the list
|
||||
int totalWidth = lstWatch.Columns[0].Width + lstWatch.Columns[1].Width;
|
||||
lstWatch.Columns[2].Width = lstWatch.ClientSize.Width - totalWidth;
|
||||
|
||||
lstWatch.ColumnWidthChanging += lstWatch_ColumnWidthChanging;
|
||||
lstWatch.ColumnWidthChanged += lstWatch_ColumnWidthChanged;
|
||||
}
|
||||
|
||||
public void UpdateWatch()
|
||||
{
|
||||
lstWatch.SelectedIndices.Clear();
|
||||
|
||||
//Remove empty items
|
||||
for(int i = lstWatch.Items.Count - 1; i >= 0; i--) {
|
||||
if(string.IsNullOrWhiteSpace(lstWatch.Items[i].Text)) {
|
||||
lstWatch.Items.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
lstWatch.Items.Add("");
|
||||
|
||||
ListViewItem lastItem = lstWatch.Items[lstWatch.Items.Count - 1];
|
||||
foreach(ListViewItem item in lstWatch.Items) {
|
||||
item.UseItemStyleForSubItems = false;
|
||||
if(item != lastItem) {
|
||||
string previousValue = null;
|
||||
if(item.SubItems.Count > 1) {
|
||||
previousValue = item.SubItems[1].Text;
|
||||
item.SubItems.RemoveAt(1);
|
||||
}
|
||||
item.SubItems[0].Text = item.SubItems[0].Text.ToUpper();
|
||||
|
||||
string newValue;
|
||||
Byte memoryValue = InteropEmu.DebugGetMemoryValue((UInt32)item.Tag);
|
||||
if(mnuHexDisplay.Checked) {
|
||||
newValue = "$" + memoryValue.ToString("x").ToUpper();
|
||||
} else {
|
||||
newValue = memoryValue.ToString();
|
||||
}
|
||||
item.SubItems.Add(newValue);
|
||||
item.SubItems[1].ForeColor = newValue != previousValue ? Color.Red : Color.Black;
|
||||
}
|
||||
}
|
||||
AdjustColumnWidth();
|
||||
}
|
||||
|
||||
public void AddWatch(UInt32 address)
|
||||
{
|
||||
ListViewItem item = lstWatch.Items.Insert(lstWatch.Items.Count - 1, "$" + address.ToString("x"));
|
||||
item.Tag = address;
|
||||
UpdateWatch();
|
||||
}
|
||||
|
||||
private void lstWatch_AfterLabelEdit(object sender, LabelEditEventArgs e)
|
||||
{
|
||||
e.CancelEdit = true;
|
||||
|
||||
if(e.Label != null) {
|
||||
ListViewItem item = lstWatch.Items[e.Item];
|
||||
item.Text = e.Label;
|
||||
if(!string.IsNullOrWhiteSpace(item.Text)) {
|
||||
if(!item.Text.StartsWith("$")) {
|
||||
item.Text = "$" + item.Text;
|
||||
}
|
||||
|
||||
UInt32 address;
|
||||
if(UInt32.TryParse(item.Text.Substring(1), System.Globalization.NumberStyles.AllowHexSpecifier, null, out address)) {
|
||||
lstWatch.Items[e.Item].Tag = address;
|
||||
} else {
|
||||
item.Text = string.Empty;
|
||||
}
|
||||
}
|
||||
UpdateWatch();
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuRemoveWatch_Click(object sender, EventArgs e)
|
||||
{
|
||||
if(lstWatch.SelectedItems.Count >= 1) {
|
||||
var itemsToRemove = new List<ListViewItem>();
|
||||
foreach(ListViewItem item in lstWatch.SelectedItems) {
|
||||
itemsToRemove.Add(item);
|
||||
}
|
||||
foreach(ListViewItem item in itemsToRemove) {
|
||||
lstWatch.Items.Remove(item);
|
||||
}
|
||||
UpdateWatch();
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuHexDisplay_Click(object sender, EventArgs e)
|
||||
{
|
||||
UpdateWatch();
|
||||
}
|
||||
|
||||
private void lstWatch_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
mnuRemoveWatch.Enabled = lstWatch.SelectedItems.Count >= 1;
|
||||
}
|
||||
}
|
||||
}
|
123
GUI.NET/Debugger/Controls/ctrlWatch.resx
Normal file
123
GUI.NET/Debugger/Controls/ctrlWatch.resx
Normal file
|
@ -0,0 +1,123 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="contextMenuWatch.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
522
GUI.NET/Debugger/frmDebugger.Designer.cs
generated
Normal file
522
GUI.NET/Debugger/frmDebugger.Designer.cs
generated
Normal file
|
@ -0,0 +1,522 @@
|
|||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
partial class frmDebugger
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
if(_notifListener != null) {
|
||||
_notifListener.Dispose();
|
||||
_notifListener = null;
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmDebugger));
|
||||
this.splitContainer = new System.Windows.Forms.SplitContainer();
|
||||
this.tlpTop = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.contextMenuCode = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.mnuShowNextStatement = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuSetNextStatement = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tableLayoutPanel10 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.grpBreakpoints = new System.Windows.Forms.GroupBox();
|
||||
this.lstBreakpoints = new System.Windows.Forms.ListView();
|
||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuBreakpoints = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.mnuRemoveBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDisableBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuAddBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.grpWatch = new System.Windows.Forms.GroupBox();
|
||||
this.menuStrip = new System.Windows.Forms.MenuStrip();
|
||||
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuContinue = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreak = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStepInto = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStepOver = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStepOut = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuToggleBreakpoint = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuRunOneFrame = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFind = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFindNext = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuFindPrev = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGoTo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuClose = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuView = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuSplitView = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ctrlDebuggerCode = new Mesen.GUI.Debugger.ctrlDebuggerCode();
|
||||
this.ctrlConsoleStatus = new Mesen.GUI.Debugger.ctrlConsoleStatus();
|
||||
this.ctrlDebuggerCodeSplit = new Mesen.GUI.Debugger.ctrlDebuggerCode();
|
||||
this.ctrlWatch = new Mesen.GUI.Debugger.ctrlWatch();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
|
||||
this.splitContainer.Panel1.SuspendLayout();
|
||||
this.splitContainer.Panel2.SuspendLayout();
|
||||
this.splitContainer.SuspendLayout();
|
||||
this.tlpTop.SuspendLayout();
|
||||
this.contextMenuCode.SuspendLayout();
|
||||
this.tableLayoutPanel10.SuspendLayout();
|
||||
this.grpBreakpoints.SuspendLayout();
|
||||
this.contextMenuBreakpoints.SuspendLayout();
|
||||
this.grpWatch.SuspendLayout();
|
||||
this.menuStrip.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// splitContainer
|
||||
//
|
||||
this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||
this.splitContainer.Location = new System.Drawing.Point(0, 24);
|
||||
this.splitContainer.Name = "splitContainer";
|
||||
this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||
//
|
||||
// splitContainer.Panel1
|
||||
//
|
||||
this.splitContainer.Panel1.Controls.Add(this.tlpTop);
|
||||
this.splitContainer.Panel1MinSize = 375;
|
||||
//
|
||||
// splitContainer.Panel2
|
||||
//
|
||||
this.splitContainer.Panel2.Controls.Add(this.tableLayoutPanel10);
|
||||
this.splitContainer.Panel2MinSize = 50;
|
||||
this.splitContainer.Size = new System.Drawing.Size(984, 588);
|
||||
this.splitContainer.SplitterDistance = 422;
|
||||
this.splitContainer.TabIndex = 1;
|
||||
//
|
||||
// tlpTop
|
||||
//
|
||||
this.tlpTop.ColumnCount = 3;
|
||||
this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tlpTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tlpTop.Controls.Add(this.ctrlDebuggerCode, 0, 0);
|
||||
this.tlpTop.Controls.Add(this.ctrlConsoleStatus, 2, 0);
|
||||
this.tlpTop.Controls.Add(this.ctrlDebuggerCodeSplit, 1, 0);
|
||||
this.tlpTop.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tlpTop.Location = new System.Drawing.Point(0, 0);
|
||||
this.tlpTop.Name = "tlpTop";
|
||||
this.tlpTop.RowCount = 1;
|
||||
this.tlpTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tlpTop.Size = new System.Drawing.Size(984, 422);
|
||||
this.tlpTop.TabIndex = 2;
|
||||
//
|
||||
// contextMenuCode
|
||||
//
|
||||
this.contextMenuCode.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuShowNextStatement,
|
||||
this.mnuSetNextStatement});
|
||||
this.contextMenuCode.Name = "contextMenuWatch";
|
||||
this.contextMenuCode.Size = new System.Drawing.Size(259, 48);
|
||||
//
|
||||
// mnuShowNextStatement
|
||||
//
|
||||
this.mnuShowNextStatement.Name = "mnuShowNextStatement";
|
||||
this.mnuShowNextStatement.ShortcutKeyDisplayString = "Alt+*";
|
||||
this.mnuShowNextStatement.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.Multiply)));
|
||||
this.mnuShowNextStatement.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuShowNextStatement.Text = "Show Next Statement";
|
||||
//
|
||||
// mnuSetNextStatement
|
||||
//
|
||||
this.mnuSetNextStatement.Name = "mnuSetNextStatement";
|
||||
this.mnuSetNextStatement.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
|
||||
| System.Windows.Forms.Keys.F10)));
|
||||
this.mnuSetNextStatement.Size = new System.Drawing.Size(258, 22);
|
||||
this.mnuSetNextStatement.Text = "Set Next Statement";
|
||||
//
|
||||
// tableLayoutPanel10
|
||||
//
|
||||
this.tableLayoutPanel10.ColumnCount = 2;
|
||||
this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel10.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel10.Controls.Add(this.grpBreakpoints, 0, 0);
|
||||
this.tableLayoutPanel10.Controls.Add(this.grpWatch, 0, 0);
|
||||
this.tableLayoutPanel10.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel10.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel10.Name = "tableLayoutPanel10";
|
||||
this.tableLayoutPanel10.RowCount = 1;
|
||||
this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 195F));
|
||||
this.tableLayoutPanel10.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 195F));
|
||||
this.tableLayoutPanel10.Size = new System.Drawing.Size(984, 162);
|
||||
this.tableLayoutPanel10.TabIndex = 0;
|
||||
//
|
||||
// grpBreakpoints
|
||||
//
|
||||
this.grpBreakpoints.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpBreakpoints.Controls.Add(this.lstBreakpoints);
|
||||
this.grpBreakpoints.Location = new System.Drawing.Point(495, 3);
|
||||
this.grpBreakpoints.Name = "grpBreakpoints";
|
||||
this.grpBreakpoints.Size = new System.Drawing.Size(486, 156);
|
||||
this.grpBreakpoints.TabIndex = 3;
|
||||
this.grpBreakpoints.TabStop = false;
|
||||
this.grpBreakpoints.Text = "Breakpoints";
|
||||
//
|
||||
// lstBreakpoints
|
||||
//
|
||||
this.lstBreakpoints.CheckBoxes = true;
|
||||
this.lstBreakpoints.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader3,
|
||||
this.columnHeader4});
|
||||
this.lstBreakpoints.ContextMenuStrip = this.contextMenuBreakpoints;
|
||||
this.lstBreakpoints.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lstBreakpoints.FullRowSelect = true;
|
||||
this.lstBreakpoints.GridLines = true;
|
||||
this.lstBreakpoints.LabelEdit = true;
|
||||
this.lstBreakpoints.Location = new System.Drawing.Point(3, 16);
|
||||
this.lstBreakpoints.Name = "lstBreakpoints";
|
||||
this.lstBreakpoints.Size = new System.Drawing.Size(480, 137);
|
||||
this.lstBreakpoints.TabIndex = 5;
|
||||
this.lstBreakpoints.UseCompatibleStateImageBehavior = false;
|
||||
this.lstBreakpoints.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnHeader3
|
||||
//
|
||||
this.columnHeader3.Text = "Address";
|
||||
this.columnHeader3.Width = 59;
|
||||
//
|
||||
// columnHeader4
|
||||
//
|
||||
this.columnHeader4.Text = "Breakpoint Type";
|
||||
this.columnHeader4.Width = 100;
|
||||
//
|
||||
// contextMenuBreakpoints
|
||||
//
|
||||
this.contextMenuBreakpoints.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuRemoveBreakpoint,
|
||||
this.mnuDisableBreakpoint,
|
||||
this.mnuAddBreakpoint});
|
||||
this.contextMenuBreakpoints.Name = "contextMenuWatch";
|
||||
this.contextMenuBreakpoints.Size = new System.Drawing.Size(173, 70);
|
||||
//
|
||||
// mnuRemoveBreakpoint
|
||||
//
|
||||
this.mnuRemoveBreakpoint.Name = "mnuRemoveBreakpoint";
|
||||
this.mnuRemoveBreakpoint.Size = new System.Drawing.Size(172, 22);
|
||||
this.mnuRemoveBreakpoint.Text = "Remove";
|
||||
//
|
||||
// mnuDisableBreakpoint
|
||||
//
|
||||
this.mnuDisableBreakpoint.Name = "mnuDisableBreakpoint";
|
||||
this.mnuDisableBreakpoint.Size = new System.Drawing.Size(172, 22);
|
||||
this.mnuDisableBreakpoint.Text = "Disable Breakpoint";
|
||||
//
|
||||
// mnuAddBreakpoint
|
||||
//
|
||||
this.mnuAddBreakpoint.Name = "mnuAddBreakpoint";
|
||||
this.mnuAddBreakpoint.Size = new System.Drawing.Size(172, 22);
|
||||
this.mnuAddBreakpoint.Text = "Add...";
|
||||
//
|
||||
// grpWatch
|
||||
//
|
||||
this.grpWatch.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.grpWatch.Controls.Add(this.ctrlWatch);
|
||||
this.grpWatch.Location = new System.Drawing.Point(3, 3);
|
||||
this.grpWatch.Name = "grpWatch";
|
||||
this.grpWatch.Size = new System.Drawing.Size(486, 156);
|
||||
this.grpWatch.TabIndex = 2;
|
||||
this.grpWatch.TabStop = false;
|
||||
this.grpWatch.Text = "Watch";
|
||||
//
|
||||
// menuStrip
|
||||
//
|
||||
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.fileToolStripMenuItem,
|
||||
this.mnuView,
|
||||
this.debugToolStripMenuItem,
|
||||
this.searchToolStripMenuItem});
|
||||
this.menuStrip.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip.Name = "menuStrip";
|
||||
this.menuStrip.Size = new System.Drawing.Size(984, 24);
|
||||
this.menuStrip.TabIndex = 2;
|
||||
this.menuStrip.Text = "menuStrip1";
|
||||
//
|
||||
// fileToolStripMenuItem
|
||||
//
|
||||
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuClose});
|
||||
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
|
||||
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
|
||||
this.fileToolStripMenuItem.Text = "File";
|
||||
//
|
||||
// debugToolStripMenuItem
|
||||
//
|
||||
this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuContinue,
|
||||
this.mnuBreak,
|
||||
this.mnuStepInto,
|
||||
this.mnuStepOver,
|
||||
this.mnuStepOut,
|
||||
this.toolStripMenuItem1,
|
||||
this.mnuToggleBreakpoint,
|
||||
this.toolStripMenuItem2,
|
||||
this.mnuRunOneFrame});
|
||||
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
|
||||
this.debugToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
|
||||
this.debugToolStripMenuItem.Text = "Debug";
|
||||
//
|
||||
// mnuContinue
|
||||
//
|
||||
this.mnuContinue.Name = "mnuContinue";
|
||||
this.mnuContinue.ShortcutKeys = System.Windows.Forms.Keys.F5;
|
||||
this.mnuContinue.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuContinue.Text = "Continue";
|
||||
this.mnuContinue.Click += new System.EventHandler(this.mnuContinue_Click);
|
||||
//
|
||||
// mnuBreak
|
||||
//
|
||||
this.mnuBreak.Name = "mnuBreak";
|
||||
this.mnuBreak.ShortcutKeyDisplayString = "Ctrl+Alt+Break";
|
||||
this.mnuBreak.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Alt)
|
||||
| System.Windows.Forms.Keys.Cancel)));
|
||||
this.mnuBreak.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuBreak.Text = "Break";
|
||||
this.mnuBreak.Click += new System.EventHandler(this.mnuBreak_Click);
|
||||
//
|
||||
// mnuStepInto
|
||||
//
|
||||
this.mnuStepInto.Name = "mnuStepInto";
|
||||
this.mnuStepInto.ShortcutKeys = System.Windows.Forms.Keys.F11;
|
||||
this.mnuStepInto.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuStepInto.Text = "Step Into";
|
||||
this.mnuStepInto.Click += new System.EventHandler(this.mnuStepInto_Click);
|
||||
//
|
||||
// mnuStepOver
|
||||
//
|
||||
this.mnuStepOver.Name = "mnuStepOver";
|
||||
this.mnuStepOver.ShortcutKeys = System.Windows.Forms.Keys.F10;
|
||||
this.mnuStepOver.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuStepOver.Text = "Step Over";
|
||||
this.mnuStepOver.Click += new System.EventHandler(this.mnuStepOver_Click);
|
||||
//
|
||||
// mnuStepOut
|
||||
//
|
||||
this.mnuStepOut.Name = "mnuStepOut";
|
||||
this.mnuStepOut.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.F11)));
|
||||
this.mnuStepOut.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuStepOut.Text = "Step Out";
|
||||
this.mnuStepOut.Click += new System.EventHandler(this.mnuStepOut_Click);
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(187, 6);
|
||||
//
|
||||
// mnuToggleBreakpoint
|
||||
//
|
||||
this.mnuToggleBreakpoint.Name = "mnuToggleBreakpoint";
|
||||
this.mnuToggleBreakpoint.ShortcutKeys = System.Windows.Forms.Keys.F9;
|
||||
this.mnuToggleBreakpoint.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuToggleBreakpoint.Text = "Toggle Breakpoint";
|
||||
this.mnuToggleBreakpoint.Click += new System.EventHandler(this.mnuToggleBreakpoint_Click);
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(187, 6);
|
||||
//
|
||||
// mnuRunOneFrame
|
||||
//
|
||||
this.mnuRunOneFrame.Name = "mnuRunOneFrame";
|
||||
this.mnuRunOneFrame.ShortcutKeys = System.Windows.Forms.Keys.F12;
|
||||
this.mnuRunOneFrame.Size = new System.Drawing.Size(190, 22);
|
||||
this.mnuRunOneFrame.Text = "Run one frame";
|
||||
this.mnuRunOneFrame.Click += new System.EventHandler(this.mnuRunOneFrame_Click);
|
||||
//
|
||||
// searchToolStripMenuItem
|
||||
//
|
||||
this.searchToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuFind,
|
||||
this.mnuFindNext,
|
||||
this.mnuFindPrev,
|
||||
this.mnuGoTo});
|
||||
this.searchToolStripMenuItem.Name = "searchToolStripMenuItem";
|
||||
this.searchToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
|
||||
this.searchToolStripMenuItem.Text = "Search";
|
||||
//
|
||||
// mnuFind
|
||||
//
|
||||
this.mnuFind.Name = "mnuFind";
|
||||
this.mnuFind.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F)));
|
||||
this.mnuFind.Size = new System.Drawing.Size(196, 22);
|
||||
this.mnuFind.Text = "Find...";
|
||||
this.mnuFind.Click += new System.EventHandler(this.mnuFind_Click);
|
||||
//
|
||||
// mnuFindNext
|
||||
//
|
||||
this.mnuFindNext.Name = "mnuFindNext";
|
||||
this.mnuFindNext.ShortcutKeys = System.Windows.Forms.Keys.F3;
|
||||
this.mnuFindNext.Size = new System.Drawing.Size(196, 22);
|
||||
this.mnuFindNext.Text = "Find Next";
|
||||
//
|
||||
// mnuFindPrev
|
||||
//
|
||||
this.mnuFindPrev.Name = "mnuFindPrev";
|
||||
this.mnuFindPrev.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.F3)));
|
||||
this.mnuFindPrev.Size = new System.Drawing.Size(196, 22);
|
||||
this.mnuFindPrev.Text = "Find Previous";
|
||||
//
|
||||
// mnuGoTo
|
||||
//
|
||||
this.mnuGoTo.Name = "mnuGoTo";
|
||||
this.mnuGoTo.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G)));
|
||||
this.mnuGoTo.Size = new System.Drawing.Size(196, 22);
|
||||
this.mnuGoTo.Text = "Go to...";
|
||||
//
|
||||
// mnuClose
|
||||
//
|
||||
this.mnuClose.Name = "mnuClose";
|
||||
this.mnuClose.Size = new System.Drawing.Size(103, 22);
|
||||
this.mnuClose.Text = "Close";
|
||||
//
|
||||
// mnuView
|
||||
//
|
||||
this.mnuView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuSplitView});
|
||||
this.mnuView.Name = "mnuView";
|
||||
this.mnuView.Size = new System.Drawing.Size(44, 20);
|
||||
this.mnuView.Text = "View";
|
||||
//
|
||||
// mnuSplitView
|
||||
//
|
||||
this.mnuSplitView.CheckOnClick = true;
|
||||
this.mnuSplitView.Name = "mnuSplitView";
|
||||
this.mnuSplitView.Size = new System.Drawing.Size(125, 22);
|
||||
this.mnuSplitView.Text = "Split View";
|
||||
this.mnuSplitView.Click += new System.EventHandler(this.mnuSplitView_Click);
|
||||
//
|
||||
// ctrlDebuggerCode
|
||||
//
|
||||
this.ctrlDebuggerCode.ContextMenuStrip = this.contextMenuCode;
|
||||
this.ctrlDebuggerCode.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlDebuggerCode.Location = new System.Drawing.Point(3, 3);
|
||||
this.ctrlDebuggerCode.Name = "ctrlDebuggerCode";
|
||||
this.ctrlDebuggerCode.Size = new System.Drawing.Size(270, 416);
|
||||
this.ctrlDebuggerCode.TabIndex = 2;
|
||||
this.ctrlDebuggerCode.OnWatchAdded += new Mesen.GUI.Debugger.ctrlDebuggerCode.WatchAddedEventHandler(this.ctrlDebuggerCode_OnWatchAdded);
|
||||
//
|
||||
// ctrlConsoleStatus
|
||||
//
|
||||
this.ctrlConsoleStatus.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.ctrlConsoleStatus.Location = new System.Drawing.Point(552, 0);
|
||||
this.ctrlConsoleStatus.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.ctrlConsoleStatus.Name = "ctrlConsoleStatus";
|
||||
this.ctrlConsoleStatus.Size = new System.Drawing.Size(432, 362);
|
||||
this.ctrlConsoleStatus.TabIndex = 3;
|
||||
//
|
||||
// ctrlDebuggerCodeSplit
|
||||
//
|
||||
this.ctrlDebuggerCodeSplit.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlDebuggerCodeSplit.Location = new System.Drawing.Point(279, 3);
|
||||
this.ctrlDebuggerCodeSplit.Name = "ctrlDebuggerCodeSplit";
|
||||
this.ctrlDebuggerCodeSplit.Size = new System.Drawing.Size(270, 416);
|
||||
this.ctrlDebuggerCodeSplit.TabIndex = 4;
|
||||
//
|
||||
// ctrlWatch
|
||||
//
|
||||
this.ctrlWatch.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.ctrlWatch.Location = new System.Drawing.Point(3, 16);
|
||||
this.ctrlWatch.Name = "ctrlWatch";
|
||||
this.ctrlWatch.Size = new System.Drawing.Size(480, 137);
|
||||
this.ctrlWatch.TabIndex = 0;
|
||||
//
|
||||
// frmDebugger
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(984, 612);
|
||||
this.Controls.Add(this.splitContainer);
|
||||
this.Controls.Add(this.menuStrip);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MainMenuStrip = this.menuStrip;
|
||||
this.MinimumSize = new System.Drawing.Size(1000, 650);
|
||||
this.Name = "frmDebugger";
|
||||
this.Text = "Debugger";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmDebugger_FormClosed);
|
||||
this.splitContainer.Panel1.ResumeLayout(false);
|
||||
this.splitContainer.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
|
||||
this.splitContainer.ResumeLayout(false);
|
||||
this.tlpTop.ResumeLayout(false);
|
||||
this.contextMenuCode.ResumeLayout(false);
|
||||
this.tableLayoutPanel10.ResumeLayout(false);
|
||||
this.grpBreakpoints.ResumeLayout(false);
|
||||
this.contextMenuBreakpoints.ResumeLayout(false);
|
||||
this.grpWatch.ResumeLayout(false);
|
||||
this.menuStrip.ResumeLayout(false);
|
||||
this.menuStrip.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.SplitContainer splitContainer;
|
||||
private System.Windows.Forms.TableLayoutPanel tlpTop;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel10;
|
||||
private System.Windows.Forms.GroupBox grpBreakpoints;
|
||||
private System.Windows.Forms.ListView lstBreakpoints;
|
||||
private System.Windows.Forms.GroupBox grpWatch;
|
||||
private System.Windows.Forms.MenuStrip menuStrip;
|
||||
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuBreakpoints;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRemoveBreakpoint;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuDisableBreakpoint;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuAddBreakpoint;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuContinue;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreak;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStepInto;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStepOver;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStepOut;
|
||||
private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFind;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFindNext;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFindPrev;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGoTo;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuToggleBreakpoint;
|
||||
private ctrlDebuggerCode ctrlDebuggerCode;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRunOneFrame;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuCode;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowNextStatement;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuSetNextStatement;
|
||||
private ctrlWatch ctrlWatch;
|
||||
private ctrlConsoleStatus ctrlConsoleStatus;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuClose;
|
||||
private ctrlDebuggerCode ctrlDebuggerCodeSplit;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuView;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuSplitView;
|
||||
}
|
||||
}
|
139
GUI.NET/Debugger/frmDebugger.cs
Normal file
139
GUI.NET/Debugger/frmDebugger.cs
Normal file
|
@ -0,0 +1,139 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Text;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Debugger
|
||||
{
|
||||
public partial class frmDebugger : Form
|
||||
{
|
||||
InteropEmu.NotificationListener _notifListener;
|
||||
|
||||
public frmDebugger()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e)
|
||||
{
|
||||
base.OnLoad(e);
|
||||
|
||||
_notifListener = new InteropEmu.NotificationListener();
|
||||
_notifListener.OnNotification += _notifListener_OnNotification;
|
||||
|
||||
InteropEmu.DebugInitialize();
|
||||
InteropEmu.DebugStep(1);
|
||||
}
|
||||
|
||||
void _notifListener_OnNotification(InteropEmu.NotificationEventArgs e)
|
||||
{
|
||||
if(e.NotificationType == InteropEmu.ConsoleNotificationType.CodeBreak) {
|
||||
this.BeginInvoke((MethodInvoker)(() => UpdateDebugger()));
|
||||
}
|
||||
}
|
||||
|
||||
private bool UpdateSplitView()
|
||||
{
|
||||
if(mnuSplitView.Checked) {
|
||||
tlpTop.ColumnStyles[1].SizeType = SizeType.Percent;
|
||||
tlpTop.ColumnStyles[1].Width = 50f;
|
||||
this.MinimumSize = new Size(1250, 650);
|
||||
} else {
|
||||
tlpTop.ColumnStyles[1].SizeType = SizeType.Absolute;
|
||||
tlpTop.ColumnStyles[1].Width = 0f;
|
||||
this.MinimumSize = new Size(1000, 650);
|
||||
}
|
||||
return mnuSplitView.Checked;
|
||||
}
|
||||
|
||||
private void UpdateDebugger()
|
||||
{
|
||||
if(InteropEmu.DebugIsCodeChanged()) {
|
||||
string code = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(InteropEmu.DebugGetCode());
|
||||
ctrlDebuggerCode.Code = code;
|
||||
ctrlDebuggerCodeSplit.Code = code;
|
||||
}
|
||||
|
||||
DebugState state = new DebugState();
|
||||
InteropEmu.DebugGetState(ref state);
|
||||
|
||||
if(UpdateSplitView()) {
|
||||
ctrlDebuggerCodeSplit.UpdateCode(true);
|
||||
}
|
||||
|
||||
ctrlDebuggerCode.SelectActiveAddress(state.CPU.PC);
|
||||
ctrlConsoleStatus.UpdateStatus(ref state);
|
||||
ctrlWatch.UpdateWatch();
|
||||
}
|
||||
|
||||
private void ToggleBreakpoint()
|
||||
{
|
||||
this.ctrlDebuggerCode.HighlightLine(this.ctrlDebuggerCode.GetCurrentLine(), Color.FromArgb(158, 84, 94), Color.White);
|
||||
|
||||
//this.AddBreakpoint(this.GetLineAddress(lineIndex));
|
||||
}
|
||||
|
||||
private void mnuContinue_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.DebugRun();
|
||||
this.ctrlDebuggerCode.RemoveActiveHighlight();
|
||||
}
|
||||
|
||||
private void frmDebugger_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
InteropEmu.DebugRelease();
|
||||
}
|
||||
|
||||
private void mnuToggleBreakpoint_Click(object sender, EventArgs e)
|
||||
{
|
||||
ToggleBreakpoint();
|
||||
}
|
||||
|
||||
private void mnuBreak_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.DebugStep(1);
|
||||
}
|
||||
|
||||
private void mnuStepInto_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.DebugStep(1);
|
||||
}
|
||||
|
||||
private void mnuStepOut_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.DebugStepOut();
|
||||
}
|
||||
|
||||
private void mnuStepOver_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.DebugStepOver();
|
||||
}
|
||||
|
||||
private void mnuRunOneFrame_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.DebugStepCycles(29780);
|
||||
}
|
||||
|
||||
private void ctrlDebuggerCode_OnWatchAdded(WatchAddedEventArgs args)
|
||||
{
|
||||
this.ctrlWatch.AddWatch(args.Address);
|
||||
}
|
||||
|
||||
private void mnuFind_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void mnuSplitView_Click(object sender, EventArgs e)
|
||||
{
|
||||
UpdateDebugger();
|
||||
}
|
||||
}
|
||||
}
|
418
GUI.NET/Debugger/frmDebugger.resx
Normal file
418
GUI.NET/Debugger/frmDebugger.resx
Normal file
|
@ -0,0 +1,418 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="contextMenuCode.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>561, 17</value>
|
||||
</metadata>
|
||||
<metadata name="contextMenuBreakpoints.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>373, 17</value>
|
||||
</metadata>
|
||||
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>107, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAAAGABoAwAANgAAACAgAAAAABgAqAwAAJ4DAABAQAAAAAAYACgyAABGEAAAKAAAABAA
|
||||
AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT0/////////////////////////7+/v7+/v///////////////////////9PT09PT
|
||||
0////////////+np6cHBwaamppubm5qamqWlpb6+vuTk5P///////////9PT09PT0/////j4+Ly8vJqa
|
||||
mpqamq2trb6+vr6+vq6urpubm5qamrW1tfT09P///9PT09PT0/b29qqqqpqamry8vPDw8Pz8/Ofn5+fn
|
||||
5/z8/PPz88PDw5ubm6WlpfLy8tPT09PT07a2tpqamtbW1v///+Li4qKiopqampqamqKiouLi4v///9/f
|
||||
35ubm7Ozs9PT09PT06WlpcPDw/////T09J6enp6enqmpqZqampqamp6envT09P///8XFxaWlpdPT09PT
|
||||
0/f5/f7+/////9jY2JqamsTExO3t7ZqampqampqamtjY2P////7+//f5/dPT09PT0xxv/22i/////93d
|
||||
3ZqamsbGxu/v75qampqampqamt3d3f///2mg/xxv/9PT09PT00CG/wRg/67L//v7+6mpqbq6uuHh4Zqa
|
||||
mpqamqmpqfv7+5e9/wFf/0eL/9PT09PT093q/xtv/wJf/2mg/9ji9b29vaCgoKCgoL29vc/d9FeV/wBe
|
||||
/yh3/+jw/9PT09PT0////+Pt/0SJ/wBe/wJf/zR//1uX/1qX/zF8/wFf/wBe/1eV/+70/////9PT09PT
|
||||
0////////////7zU/1yY/x1w/wFf/wFf/x9x/2Kc/8jc/////////////9PT09PT0///////////////
|
||||
//////////z9//z9/////////////////////////9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT0///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/Pz84eHhycnJtra2qqqqpKSkpKSkqqqqtra2x8fH3t7e+fn5////////////////////////////////
|
||||
////09PT09PT////////////////////////////7u7uwcHBn5+fmpqampqampqampqampqampqampqa
|
||||
mpqampqampqanJycubm54+Pj////////////////////////////09PT09PT////////////////////
|
||||
8/Pzvb29m5ubmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqasLCw6Ojo
|
||||
////////////////////09PT09PT////////////////2NjYn5+fmpqampqampqampqampqampqapqam
|
||||
tbW1vb29vb29tbW1p6enmpqampqampqampqampqampqam5ubxcXF/Pz8////////////09PT09PT////
|
||||
/////f39wcHBmpqampqampqampqampqarKys1NTU8/Pz////////////////////////9vb22tratbW1
|
||||
mpqampqampqampqampqasLCw9vb2////////09PT09PT/////f39ubm5mpqampqampqampqaqqqq4eHh
|
||||
////////////////////////////////////////////////7e3tt7e3mpqampqampqampqaq6ur9/f3
|
||||
////09PT09PT////wcHBmpqampqampqampqayMjI/Pz8////////////7e3txMTEqqqqnZ2dnZ2dqqqq
|
||||
xMTE7e3t////////////////29vbn5+fmpqampqampqatLS0/v7+09PT09PT3t7empqampqampqanJyc
|
||||
3Nzc/////////////f39xsbGm5ubmpqampqampqampqampqampqam5ubxsbG/f39////////////7Ozs
|
||||
o6Ojmpqampqampqa1tbW09PT09PTrKysmpqampqampqa3d3d/////////////v7+u7u7mpqampqampqa
|
||||
mpqampqampqampqampqampqampqau7u7/v7+////////////6urqnZ2dmpqampqaqqqq09PT09PTnZ2d
|
||||
mpqampqawcHB////////////////1dXVmpqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
1dXV////////////////xcXFmpqampqanZ2d09PT09PTz8/Pm5ubqKio8/Pz/////////////v7+pKSk
|
||||
mpqampqampqavLy819fXpaWlmpqampqampqampqampqampqapaWl/v7+////////////8/PzqKiom5ub
|
||||
0NDQ09PT09PT/////Pz8/v7+////////////////6+vrmpqampqampqanp6e/f39////19fXmpqampqa
|
||||
mpqampqampqampqampqa6+vr/////////////////v7+/Pz8////09PT09PT////+Pr//v7/////////
|
||||
////////3t7empqampqampqaoqKi////////3d3dmpqampqampqampqampqampqampqa3t7e////////
|
||||
/////////v7/+Pr/////09PT09PTiLP/BWD/JXT/4ez/////////////4uLimpqampqampqaoqKi////
|
||||
////3d3dmpqampqampqampqampqampqampqa4uLi////////////4ez/JXT/BWD/ibP/09PT09PTCmT/
|
||||
AF7/AF7/b6P/////////////9vb2m5ubmpqampqaoqKi////////3d3dmpqampqampqampqampqampqa
|
||||
m5ub9vb2////////////Y5z/AF7/AF7/CmT/09PT09PTKnj/AF7/AF7/B2L/zN7/////////////ubm5
|
||||
mpqampqaoqKi////////3d3dmpqampqampqampqampqampqauLi4////////////qsj/AV//AF7/AF7/
|
||||
Lnr/09PT09PTmr7/AF7/AF7/AF7/F2z/0eH/////////8PDwn5+fmpqam5ub8fHx////yMjImpqampqa
|
||||
mpqampqampqan5+f8PDw////////qMf/BmH/AF7/AF7/AF7/rcv/09PT09PT/f3/Qof/AF7/AF7/AF7/
|
||||
DWb/pcX/////////5eXloKCgmpqaoaGhsbGxmpqampqampqampqampqaoKCg5eXl////+fv/dqf/AV//
|
||||
AF7/AF7/AF7/ZJz/////09PT09PT////7PL/Knj/AF7/AF7/AF7/AF7/Soz/0uL/////8fHxurq6m5ub
|
||||
mpqampqampqampqam5uburq68fHx////tM//KXf/AF7/AF7/AF7/AF7/UI//+vz/////09PT09PT////
|
||||
////6vH/OIH/AF7/AF7/AF7/AF7/AV//RYn/osP/6vH/9PT02trazs7Ozs7O2tra9PT04uz/k7r/L3v/
|
||||
AF7/AF7/AF7/AF7/AF7/ZJz/+vz/////////09PT09PT////////////+Pr/bqP/Al//AF7/AF7/AF7/
|
||||
AF7/AF7/AV7/InP/Ror/WJX/WZX/RYn/HnD/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ncH/////////////
|
||||
////09PT09PT////////////////////xtr/OIH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al//WZb/4u3/////////////////////09PT09PT////////////////////
|
||||
////////utP/UJD/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ZZ3/1OP/////////
|
||||
////////////////////09PT09PT////////////////////////////////////8PX/rMr/cqX/R4r/
|
||||
Knj/G27/G27/Knj/SYv/d6n/ttD/9vn/////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////+vr66Ojo2dnZzc3NxMTE
|
||||
v7+/vLy8vLy8v7+/xcXFzc3N2NjY5ubm+Pj4////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////+fn53d3dwsLCqqqqmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqapaWlvLy81dXV8vLy////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////////////////////////////////////////Pz83Nzct7e3nJyc
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaq6urzc3N8/Pz////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////9fX1ysrK
|
||||
oqKimpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqam5ubtra24uLi////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
9vb2xcXFnZ2dmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqara2t4ODg////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////f39z8/Pn5+fmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
sbGx6+vr////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////6Ojoqqqqmpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqam5ubxsbG+/v7////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////f39ysrKm5ubmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqaoqKirq6utbW1uLi4uLi4tbW1rq6uo6Ojmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqaqKio6urq////////////////////////////
|
||||
////09PT09PT////////////////////////////9fX1sbGxmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqanJyctLS0z8/P5eXl+fn5////////////////////////////////+/v76enp
|
||||
1NTUvLy8oaGhmpqampqampqampqampqampqampqampqampqampqampqampqampqanJyc1tbW////////
|
||||
////////////////////09PT09PT////////////////////////6+vrpKSkmpqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqasrKy2NjY+fn5////////////////////////////////////////
|
||||
/////////////////////////v7+5eXlwsLCn5+fmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqaxcXF/v7+////////////////////09PT09PT////////////////////5OTkn5+fmpqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ubvr6+7Ozs////////////////////////////////////
|
||||
////////////////////////////////////////////////////+vr61NTUpqammpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqavb29/v7+////////////////09PT09PT////////////////4+Pj
|
||||
nZ2dmpqampqampqampqampqampqampqampqampqampqauLi47+/v////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////f39
|
||||
1dXVoqKimpqampqampqampqampqampqampqampqampqampqavb29/v7+////////////09PT09PT////
|
||||
////////6OjonZ2dmpqampqampqampqampqampqampqampqampqapaWl4eHh////////////////////
|
||||
////////////////////////+/v76enp3d3d19fX19fX3d3d6enp+/v7////////////////////////
|
||||
////////////////////+fn5w8PDmpqampqampqampqampqampqampqampqampqampqaxsbG////////
|
||||
////09PT09PT////////8vLyoaGhmpqampqampqampqampqampqampqampqampqavr6++fn5////////
|
||||
////////////////////////////9vb20NDQsLCwm5ubmpqampqampqampqampqampqam5ubsLCw0NDQ
|
||||
9vb2////////////////////////////////////////5OTkpKSkmpqampqampqampqampqampqampqa
|
||||
mpqampqa29vb////////09PT09PT/////f39rq6umpqampqampqampqampqampqampqampqanJyc19fX
|
||||
////////////////////////////////////9/f3xMTEnZ2dmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqanZ2dxMTE9/f3////////////////////////////////////9vb2sbGxmpqampqa
|
||||
mpqampqampqampqampqampqan5+f8/Pz////09PT09PT////zMzMmpqampqampqampqampqampqampqa
|
||||
mpqaoKCg5ubm////////////////////////////////////39/foqKimpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqaoqKi39/f////////////////////////////////
|
||||
/////Pz8urq6mpqampqampqampqampqampqampqampqau7u7////09PT09PT8/PznZ2dmpqampqampqa
|
||||
mpqampqampqampqaoaGh7Ozs////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqazMzM////////////
|
||||
/////////////////////////f39urq6mpqampqampqampqampqampqampqampqa7Ozs09PT09PTx8fH
|
||||
mpqampqampqampqampqampqampqanp6e6urq////////////////////////////////////ysrKmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaysrK/////////////////////////////////////Pz8sLCwmpqampqampqampqampqampqampqa
|
||||
w8PD09PT09PTpaWlmpqampqampqampqampqampqampqa3t7e////////////////////////////////
|
||||
////2dnZmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqa2dnZ////////////////////////////////////8/Pzn5+fmpqampqa
|
||||
mpqampqampqampqapaWl09PT09PTm5ubmpqampqampqampqampqampqav7+/////////////////////
|
||||
////////////////8/Pznp6empqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqan5+f8/Pz////////////////////////////////
|
||||
////zc3Nmpqampqampqampqampqampqam5ub09PT09PTrKysmpqampqampqampqampqam5ub8vLy////
|
||||
////////////////////////////////vb29mpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29////////////////
|
||||
////////////////////8/PzmpqampqampqampqampqampqarKys09PT09PT39/fmpqampqampqampqa
|
||||
mpqawsLC////////////////////////////////////8fHxmpqampqampqampqampqampqampqampqa
|
||||
mpqasLCwxcXFrq6umpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam5ub
|
||||
8fHx////////////////////////////////////wsLCmpqampqampqampqampqa39/f09PT09PT////
|
||||
3d3dqKiompqaoKCgysrK/f39////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqazs7O////////////yMjImpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqazMzM/////////////////////////////////////f39ysrKoKCgmpqaqKio3d3d
|
||||
////09PT09PT////////////+/v7/v7+////////////////////////////////////////////r6+v
|
||||
mpqampqampqampqampqampqampqaqqqq/////////////////f39paWlmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqar6+v////////////////////////////////////////////
|
||||
/v7++/v7////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////f39nJycmpqampqampqampqampqampqampqavb29////////////////////uLi4mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqanJyc/v7+////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////9PT0mpqampqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa9PT0////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////+vz//f7/
|
||||
////////////////////////////////////////7+/vmpqampqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqa7u7u/////////////////////////////////////////f7/+vz/////////////09PT09PT////
|
||||
rMn/J3X/Al7/FGn/fKr/+/z/////////////////////////////////8/Pzmpqampqampqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqa8/Pz////////////////////////////////+/z/e6r/FGn/Al7/KHX/rMn/
|
||||
////09PT09PTsMv/AV7/AF7/AF7/AF7/AF7/aJ7//////////////////////////////////Pz8m5ub
|
||||
mpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ub/f39////////////////////////////////aJ7/AF7/
|
||||
AF7/AF7/AF7/Al//sMz/09PT09PTMHv/AF7/AF7/AF7/AF7/AF7/A1//4+3/////////////////////
|
||||
////////////rKysmpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqarKys////////////////////////////
|
||||
////3+r/Al7/AF7/AF7/AF7/AF7/AF7/MHv/09PT09PTBGD/AF7/AF7/AF7/AF7/AF7/AF7/hbD/////
|
||||
////////////////////////////x8fHmpqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqax8fH////////////
|
||||
////////////////////YZr/AF7/AF7/AF7/AF7/AF7/AF7/BGD/09PT09PTHm//AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/D2b/4uz/////////////////////////////7Ozsmpqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
7Ozs////////////////////////////rcr/AV7/AF7/AF7/AF7/AF7/AF7/AF7/HnD/09PT09PTaZ//
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/OoH/+Pr/////////////////////////////tbW1mpqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqatbW1////////////////////////////zN7/DGX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
dKX/09PT09PTz+D/AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH//P3/////////////////////////
|
||||
7e3tm5ubmpqampqampqampqampqauLi4////////////////////srKympqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqanJyc7e3t////////////////////////0OD/FGn/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/CWP/4+z/09PT09PT////VJH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH/+fv/////
|
||||
////////////////////zs7OmpqampqampqampqampqanZ2d8vLy////////////7e3tm5ubmpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqazs7O////////////////////////wtf/EWj/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/gK3/////09PT09PT////4ez/Dmb/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/PYP/6fD//////////////////////v7+vb29mpqampqampqampqampqaqKio4+Pj+fn54ODg
|
||||
paWlmpqampqampqampqampqampqampqampqampqampqampqampqavLy8/v7+////////////////////
|
||||
nL//B2L/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/NH3/+vv/////09PT09PT////////pcX/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/G27/vtX//////////////////////f39vb29mpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29/f39////////
|
||||
////////8fb/Xpj/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/3+r/////////09PT09PT////
|
||||
////////c6T/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Al//bKD/8fb/////////////////////
|
||||
0NDQnJycmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqanJyc0NDQ
|
||||
////////////////////ttD/H3D/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CmT/xtr/////////
|
||||
////09PT09PT/////////////f3/WZX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/GGz/mL3/
|
||||
+/z/////////////////7u7utra2mpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqatra27u7u////////////////2OX/T47/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/
|
||||
utL/////////////////09PT09PT////////////////+vz/WZT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/InL/lbr/9Pj/////////////////6urqwsLCoqKimpqampqampqampqampqampqa
|
||||
mpqampqaoqKiwsLC6urq////////////////0+L/XZf/BGD/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/DWX/vdT/////////////////////09PT09PT/////////////////////P3/bqL/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/EGf/Z53/wdb//P3//////////////v7+7e3t2tra
|
||||
zs7OyMjIyMjIzs7O2tra7e3t/v7+////////////8PX/oMH/P4T/AV7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/HG7/z9//////////////////////////09PT09PT////////////////////
|
||||
////////mL3/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/WJT/lrv/
|
||||
ytz/9fn/////////////////////////////////8fb/wdb/iLL/RIj/B2L/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/PYP/5+//////////////////////////////09PT09PT////
|
||||
////////////////////////////zN7/JnT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al7/Gm3/NH3/Ron/To7/T47/R4n/NH3/GGz/AV3/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/A1//fKv/+/z/////////////////////////////
|
||||
////09PT09PT////////////////////////////////////9Pj/cKP/Al//AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Knf/x9r/////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////zd7/PIP/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Dmb/ibP/+fv/////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////////v7/sc3/MXz/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/cKP/6fH/
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
/////////////////////////////////////v//uNH/Sov/Al7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/
|
||||
e6r/5+//////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////4Or/hLD/LXj/AV7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
BmH/TI3/qcf/9/r/////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////3en/l7z/V5P/HW//AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
A17/KXb/Zp3/q8n/7/X/////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////v//7PL/wtf/n8H/g6//bqL/YJn/WZT/WJT/X5n/
|
||||
bqL/hLD/osP/x9r/8fb/////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
27
GUI.NET/Forms/BaseConfigForm.cs
Normal file
27
GUI.NET/Forms/BaseConfigForm.cs
Normal file
|
@ -0,0 +1,27 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Forms
|
||||
{
|
||||
public class BaseConfigForm : Form
|
||||
{
|
||||
protected override void OnFormClosed(FormClosedEventArgs e)
|
||||
{
|
||||
if(this.DialogResult == System.Windows.Forms.DialogResult.OK) {
|
||||
UpdateConfig();
|
||||
ConfigManager.ApplyChanges();
|
||||
} else {
|
||||
ConfigManager.RejectChanges();
|
||||
}
|
||||
base.OnFormClosed(e);
|
||||
}
|
||||
|
||||
protected virtual void UpdateConfig()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
177
GUI.NET/Forms/Config/frmVideoConfig.Designer.cs
generated
Normal file
177
GUI.NET/Forms/Config/frmVideoConfig.Designer.cs
generated
Normal file
|
@ -0,0 +1,177 @@
|
|||
namespace Mesen.GUI.Forms.Config
|
||||
{
|
||||
partial class frmVideoConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmVideoConfig));
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.lblHost = new System.Windows.Forms.Label();
|
||||
this.lblPort = new System.Windows.Forms.Label();
|
||||
this.txtHost = new System.Windows.Forms.TextBox();
|
||||
this.chkSpectator = new System.Windows.Forms.CheckBox();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 2;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtPort, 1, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblHost, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblPort, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtHost, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkSpectator, 0, 2);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 4;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(284, 262);
|
||||
this.tableLayoutPanel1.TabIndex = 1;
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
this.txtPort.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtPort.Location = new System.Drawing.Point(41, 29);
|
||||
this.txtPort.Name = "txtPort";
|
||||
this.txtPort.Size = new System.Drawing.Size(240, 20);
|
||||
this.txtPort.TabIndex = 6;
|
||||
this.txtPort.Text = "8888";
|
||||
//
|
||||
// flowLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.flowLayoutPanel1, 2);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnCancel);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnOK);
|
||||
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
|
||||
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 233);
|
||||
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
|
||||
this.flowLayoutPanel1.Size = new System.Drawing.Size(284, 29);
|
||||
this.flowLayoutPanel1.TabIndex = 2;
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Location = new System.Drawing.Point(206, 3);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 0;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.btnOK.Location = new System.Drawing.Point(125, 3);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnOK.TabIndex = 1;
|
||||
this.btnOK.Text = "Connect";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lblHost
|
||||
//
|
||||
this.lblHost.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblHost.AutoSize = true;
|
||||
this.lblHost.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblHost.Name = "lblHost";
|
||||
this.lblHost.Size = new System.Drawing.Size(32, 13);
|
||||
this.lblHost.TabIndex = 3;
|
||||
this.lblHost.Text = "Host:";
|
||||
//
|
||||
// lblPort
|
||||
//
|
||||
this.lblPort.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblPort.AutoSize = true;
|
||||
this.lblPort.Location = new System.Drawing.Point(3, 32);
|
||||
this.lblPort.Name = "lblPort";
|
||||
this.lblPort.Size = new System.Drawing.Size(29, 13);
|
||||
this.lblPort.TabIndex = 4;
|
||||
this.lblPort.Text = "Port:";
|
||||
//
|
||||
// txtHost
|
||||
//
|
||||
this.txtHost.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtHost.Location = new System.Drawing.Point(41, 3);
|
||||
this.txtHost.Name = "txtHost";
|
||||
this.txtHost.Size = new System.Drawing.Size(240, 20);
|
||||
this.txtHost.TabIndex = 5;
|
||||
this.txtHost.Text = "127.0.0.1";
|
||||
//
|
||||
// chkSpectator
|
||||
//
|
||||
this.chkSpectator.AutoSize = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.chkSpectator, 2);
|
||||
this.chkSpectator.Enabled = false;
|
||||
this.chkSpectator.Location = new System.Drawing.Point(3, 55);
|
||||
this.chkSpectator.Name = "chkSpectator";
|
||||
this.chkSpectator.Size = new System.Drawing.Size(106, 17);
|
||||
this.chkSpectator.TabIndex = 7;
|
||||
this.chkSpectator.Text = "Join as spectator";
|
||||
this.chkSpectator.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// frmVideoConfig
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(284, 262);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Name = "frmVideoConfig";
|
||||
this.Text = "Video Options";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.flowLayoutPanel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.TextBox txtPort;
|
||||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Label lblHost;
|
||||
private System.Windows.Forms.Label lblPort;
|
||||
private System.Windows.Forms.TextBox txtHost;
|
||||
private System.Windows.Forms.CheckBox chkSpectator;
|
||||
}
|
||||
}
|
20
GUI.NET/Forms/Config/frmVideoConfig.cs
Normal file
20
GUI.NET/Forms/Config/frmVideoConfig.cs
Normal file
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Forms.Config
|
||||
{
|
||||
public partial class frmVideoConfig : Form
|
||||
{
|
||||
public frmVideoConfig()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
409
GUI.NET/Forms/Config/frmVideoConfig.resx
Normal file
409
GUI.NET/Forms/Config/frmVideoConfig.resx
Normal file
|
@ -0,0 +1,409 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAAAGABoAwAANgAAACAgAAAAABgAqAwAAJ4DAABAQAAAAAAYACgyAABGEAAAKAAAABAA
|
||||
AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT0/////////////////////////7+/v7+/v///////////////////////9PT09PT
|
||||
0////////////+np6cHBwaamppubm5qamqWlpb6+vuTk5P///////////9PT09PT0/////j4+Ly8vJqa
|
||||
mpqamq2trb6+vr6+vq6urpubm5qamrW1tfT09P///9PT09PT0/b29qqqqpqamry8vPDw8Pz8/Ofn5+fn
|
||||
5/z8/PPz88PDw5ubm6WlpfLy8tPT09PT07a2tpqamtbW1v///+Li4qKiopqampqamqKiouLi4v///9/f
|
||||
35ubm7Ozs9PT09PT06WlpcPDw/////T09J6enp6enqmpqZqampqamp6envT09P///8XFxaWlpdPT09PT
|
||||
0/f5/f7+/////9jY2JqamsTExO3t7ZqampqampqamtjY2P////7+//f5/dPT09PT0xxv/22i/////93d
|
||||
3ZqamsbGxu/v75qampqampqamt3d3f///2mg/xxv/9PT09PT00CG/wRg/67L//v7+6mpqbq6uuHh4Zqa
|
||||
mpqamqmpqfv7+5e9/wFf/0eL/9PT09PT093q/xtv/wJf/2mg/9ji9b29vaCgoKCgoL29vc/d9FeV/wBe
|
||||
/yh3/+jw/9PT09PT0////+Pt/0SJ/wBe/wJf/zR//1uX/1qX/zF8/wFf/wBe/1eV/+70/////9PT09PT
|
||||
0////////////7zU/1yY/x1w/wFf/wFf/x9x/2Kc/8jc/////////////9PT09PT0///////////////
|
||||
//////////z9//z9/////////////////////////9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT0///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/Pz84eHhycnJtra2qqqqpKSkpKSkqqqqtra2x8fH3t7e+fn5////////////////////////////////
|
||||
////09PT09PT////////////////////////////7u7uwcHBn5+fmpqampqampqampqampqampqampqa
|
||||
mpqampqampqanJycubm54+Pj////////////////////////////09PT09PT////////////////////
|
||||
8/Pzvb29m5ubmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqasLCw6Ojo
|
||||
////////////////////09PT09PT////////////////2NjYn5+fmpqampqampqampqampqampqapqam
|
||||
tbW1vb29vb29tbW1p6enmpqampqampqampqampqampqam5ubxcXF/Pz8////////////09PT09PT////
|
||||
/////f39wcHBmpqampqampqampqampqarKys1NTU8/Pz////////////////////////9vb22tratbW1
|
||||
mpqampqampqampqampqasLCw9vb2////////09PT09PT/////f39ubm5mpqampqampqampqaqqqq4eHh
|
||||
////////////////////////////////////////////////7e3tt7e3mpqampqampqampqaq6ur9/f3
|
||||
////09PT09PT////wcHBmpqampqampqampqayMjI/Pz8////////////7e3txMTEqqqqnZ2dnZ2dqqqq
|
||||
xMTE7e3t////////////////29vbn5+fmpqampqampqatLS0/v7+09PT09PT3t7empqampqampqanJyc
|
||||
3Nzc/////////////f39xsbGm5ubmpqampqampqampqampqampqam5ubxsbG/f39////////////7Ozs
|
||||
o6Ojmpqampqampqa1tbW09PT09PTrKysmpqampqampqa3d3d/////////////v7+u7u7mpqampqampqa
|
||||
mpqampqampqampqampqampqampqau7u7/v7+////////////6urqnZ2dmpqampqaqqqq09PT09PTnZ2d
|
||||
mpqampqawcHB////////////////1dXVmpqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
1dXV////////////////xcXFmpqampqanZ2d09PT09PTz8/Pm5ubqKio8/Pz/////////////v7+pKSk
|
||||
mpqampqampqavLy819fXpaWlmpqampqampqampqampqampqapaWl/v7+////////////8/PzqKiom5ub
|
||||
0NDQ09PT09PT/////Pz8/v7+////////////////6+vrmpqampqampqanp6e/f39////19fXmpqampqa
|
||||
mpqampqampqampqampqa6+vr/////////////////v7+/Pz8////09PT09PT////+Pr//v7/////////
|
||||
////////3t7empqampqampqaoqKi////////3d3dmpqampqampqampqampqampqampqa3t7e////////
|
||||
/////////v7/+Pr/////09PT09PTiLP/BWD/JXT/4ez/////////////4uLimpqampqampqaoqKi////
|
||||
////3d3dmpqampqampqampqampqampqampqa4uLi////////////4ez/JXT/BWD/ibP/09PT09PTCmT/
|
||||
AF7/AF7/b6P/////////////9vb2m5ubmpqampqaoqKi////////3d3dmpqampqampqampqampqampqa
|
||||
m5ub9vb2////////////Y5z/AF7/AF7/CmT/09PT09PTKnj/AF7/AF7/B2L/zN7/////////////ubm5
|
||||
mpqampqaoqKi////////3d3dmpqampqampqampqampqampqauLi4////////////qsj/AV//AF7/AF7/
|
||||
Lnr/09PT09PTmr7/AF7/AF7/AF7/F2z/0eH/////////8PDwn5+fmpqam5ub8fHx////yMjImpqampqa
|
||||
mpqampqampqan5+f8PDw////////qMf/BmH/AF7/AF7/AF7/rcv/09PT09PT/f3/Qof/AF7/AF7/AF7/
|
||||
DWb/pcX/////////5eXloKCgmpqaoaGhsbGxmpqampqampqampqampqaoKCg5eXl////+fv/dqf/AV//
|
||||
AF7/AF7/AF7/ZJz/////09PT09PT////7PL/Knj/AF7/AF7/AF7/AF7/Soz/0uL/////8fHxurq6m5ub
|
||||
mpqampqampqampqam5uburq68fHx////tM//KXf/AF7/AF7/AF7/AF7/UI//+vz/////09PT09PT////
|
||||
////6vH/OIH/AF7/AF7/AF7/AF7/AV//RYn/osP/6vH/9PT02trazs7Ozs7O2tra9PT04uz/k7r/L3v/
|
||||
AF7/AF7/AF7/AF7/AF7/ZJz/+vz/////////09PT09PT////////////+Pr/bqP/Al//AF7/AF7/AF7/
|
||||
AF7/AF7/AV7/InP/Ror/WJX/WZX/RYn/HnD/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ncH/////////////
|
||||
////09PT09PT////////////////////xtr/OIH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al//WZb/4u3/////////////////////09PT09PT////////////////////
|
||||
////////utP/UJD/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ZZ3/1OP/////////
|
||||
////////////////////09PT09PT////////////////////////////////////8PX/rMr/cqX/R4r/
|
||||
Knj/G27/G27/Knj/SYv/d6n/ttD/9vn/////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////+vr66Ojo2dnZzc3NxMTE
|
||||
v7+/vLy8vLy8v7+/xcXFzc3N2NjY5ubm+Pj4////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////+fn53d3dwsLCqqqqmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqapaWlvLy81dXV8vLy////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////////////////////////////////////////Pz83Nzct7e3nJyc
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaq6urzc3N8/Pz////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////9fX1ysrK
|
||||
oqKimpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqam5ubtra24uLi////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
9vb2xcXFnZ2dmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqara2t4ODg////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////f39z8/Pn5+fmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
sbGx6+vr////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////6Ojoqqqqmpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqam5ubxsbG+/v7////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////f39ysrKm5ubmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqaoqKirq6utbW1uLi4uLi4tbW1rq6uo6Ojmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqaqKio6urq////////////////////////////
|
||||
////09PT09PT////////////////////////////9fX1sbGxmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqanJyctLS0z8/P5eXl+fn5////////////////////////////////+/v76enp
|
||||
1NTUvLy8oaGhmpqampqampqampqampqampqampqampqampqampqampqampqampqanJyc1tbW////////
|
||||
////////////////////09PT09PT////////////////////////6+vrpKSkmpqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqasrKy2NjY+fn5////////////////////////////////////////
|
||||
/////////////////////////v7+5eXlwsLCn5+fmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqaxcXF/v7+////////////////////09PT09PT////////////////////5OTkn5+fmpqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ubvr6+7Ozs////////////////////////////////////
|
||||
////////////////////////////////////////////////////+vr61NTUpqammpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqavb29/v7+////////////////09PT09PT////////////////4+Pj
|
||||
nZ2dmpqampqampqampqampqampqampqampqampqampqauLi47+/v////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////f39
|
||||
1dXVoqKimpqampqampqampqampqampqampqampqampqampqavb29/v7+////////////09PT09PT////
|
||||
////////6OjonZ2dmpqampqampqampqampqampqampqampqampqapaWl4eHh////////////////////
|
||||
////////////////////////+/v76enp3d3d19fX19fX3d3d6enp+/v7////////////////////////
|
||||
////////////////////+fn5w8PDmpqampqampqampqampqampqampqampqampqampqaxsbG////////
|
||||
////09PT09PT////////8vLyoaGhmpqampqampqampqampqampqampqampqampqavr6++fn5////////
|
||||
////////////////////////////9vb20NDQsLCwm5ubmpqampqampqampqampqampqam5ubsLCw0NDQ
|
||||
9vb2////////////////////////////////////////5OTkpKSkmpqampqampqampqampqampqampqa
|
||||
mpqampqa29vb////////09PT09PT/////f39rq6umpqampqampqampqampqampqampqampqanJyc19fX
|
||||
////////////////////////////////////9/f3xMTEnZ2dmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqanZ2dxMTE9/f3////////////////////////////////////9vb2sbGxmpqampqa
|
||||
mpqampqampqampqampqampqan5+f8/Pz////09PT09PT////zMzMmpqampqampqampqampqampqampqa
|
||||
mpqaoKCg5ubm////////////////////////////////////39/foqKimpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqaoqKi39/f////////////////////////////////
|
||||
/////Pz8urq6mpqampqampqampqampqampqampqampqau7u7////09PT09PT8/PznZ2dmpqampqampqa
|
||||
mpqampqampqampqaoaGh7Ozs////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqazMzM////////////
|
||||
/////////////////////////f39urq6mpqampqampqampqampqampqampqampqa7Ozs09PT09PTx8fH
|
||||
mpqampqampqampqampqampqampqanp6e6urq////////////////////////////////////ysrKmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaysrK/////////////////////////////////////Pz8sLCwmpqampqampqampqampqampqampqa
|
||||
w8PD09PT09PTpaWlmpqampqampqampqampqampqampqa3t7e////////////////////////////////
|
||||
////2dnZmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqa2dnZ////////////////////////////////////8/Pzn5+fmpqampqa
|
||||
mpqampqampqampqapaWl09PT09PTm5ubmpqampqampqampqampqampqav7+/////////////////////
|
||||
////////////////8/Pznp6empqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqan5+f8/Pz////////////////////////////////
|
||||
////zc3Nmpqampqampqampqampqampqam5ub09PT09PTrKysmpqampqampqampqampqam5ub8vLy////
|
||||
////////////////////////////////vb29mpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29////////////////
|
||||
////////////////////8/PzmpqampqampqampqampqampqarKys09PT09PT39/fmpqampqampqampqa
|
||||
mpqawsLC////////////////////////////////////8fHxmpqampqampqampqampqampqampqampqa
|
||||
mpqasLCwxcXFrq6umpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam5ub
|
||||
8fHx////////////////////////////////////wsLCmpqampqampqampqampqa39/f09PT09PT////
|
||||
3d3dqKiompqaoKCgysrK/f39////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqazs7O////////////yMjImpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqazMzM/////////////////////////////////////f39ysrKoKCgmpqaqKio3d3d
|
||||
////09PT09PT////////////+/v7/v7+////////////////////////////////////////////r6+v
|
||||
mpqampqampqampqampqampqampqaqqqq/////////////////f39paWlmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqar6+v////////////////////////////////////////////
|
||||
/v7++/v7////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////f39nJycmpqampqampqampqampqampqampqavb29////////////////////uLi4mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqanJyc/v7+////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////9PT0mpqampqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa9PT0////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////+vz//f7/
|
||||
////////////////////////////////////////7+/vmpqampqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqa7u7u/////////////////////////////////////////f7/+vz/////////////09PT09PT////
|
||||
rMn/J3X/Al7/FGn/fKr/+/z/////////////////////////////////8/Pzmpqampqampqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqa8/Pz////////////////////////////////+/z/e6r/FGn/Al7/KHX/rMn/
|
||||
////09PT09PTsMv/AV7/AF7/AF7/AF7/AF7/aJ7//////////////////////////////////Pz8m5ub
|
||||
mpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ub/f39////////////////////////////////aJ7/AF7/
|
||||
AF7/AF7/AF7/Al//sMz/09PT09PTMHv/AF7/AF7/AF7/AF7/AF7/A1//4+3/////////////////////
|
||||
////////////rKysmpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqarKys////////////////////////////
|
||||
////3+r/Al7/AF7/AF7/AF7/AF7/AF7/MHv/09PT09PTBGD/AF7/AF7/AF7/AF7/AF7/AF7/hbD/////
|
||||
////////////////////////////x8fHmpqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqax8fH////////////
|
||||
////////////////////YZr/AF7/AF7/AF7/AF7/AF7/AF7/BGD/09PT09PTHm//AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/D2b/4uz/////////////////////////////7Ozsmpqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
7Ozs////////////////////////////rcr/AV7/AF7/AF7/AF7/AF7/AF7/AF7/HnD/09PT09PTaZ//
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/OoH/+Pr/////////////////////////////tbW1mpqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqatbW1////////////////////////////zN7/DGX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
dKX/09PT09PTz+D/AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH//P3/////////////////////////
|
||||
7e3tm5ubmpqampqampqampqampqauLi4////////////////////srKympqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqanJyc7e3t////////////////////////0OD/FGn/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/CWP/4+z/09PT09PT////VJH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH/+fv/////
|
||||
////////////////////zs7OmpqampqampqampqampqanZ2d8vLy////////////7e3tm5ubmpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqazs7O////////////////////////wtf/EWj/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/gK3/////09PT09PT////4ez/Dmb/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/PYP/6fD//////////////////////v7+vb29mpqampqampqampqampqaqKio4+Pj+fn54ODg
|
||||
paWlmpqampqampqampqampqampqampqampqampqampqampqampqavLy8/v7+////////////////////
|
||||
nL//B2L/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/NH3/+vv/////09PT09PT////////pcX/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/G27/vtX//////////////////////f39vb29mpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29/f39////////
|
||||
////////8fb/Xpj/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/3+r/////////09PT09PT////
|
||||
////////c6T/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Al//bKD/8fb/////////////////////
|
||||
0NDQnJycmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqanJyc0NDQ
|
||||
////////////////////ttD/H3D/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CmT/xtr/////////
|
||||
////09PT09PT/////////////f3/WZX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/GGz/mL3/
|
||||
+/z/////////////////7u7utra2mpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqatra27u7u////////////////2OX/T47/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/
|
||||
utL/////////////////09PT09PT////////////////+vz/WZT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/InL/lbr/9Pj/////////////////6urqwsLCoqKimpqampqampqampqampqampqa
|
||||
mpqampqaoqKiwsLC6urq////////////////0+L/XZf/BGD/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/DWX/vdT/////////////////////09PT09PT/////////////////////P3/bqL/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/EGf/Z53/wdb//P3//////////////v7+7e3t2tra
|
||||
zs7OyMjIyMjIzs7O2tra7e3t/v7+////////////8PX/oMH/P4T/AV7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/HG7/z9//////////////////////////09PT09PT////////////////////
|
||||
////////mL3/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/WJT/lrv/
|
||||
ytz/9fn/////////////////////////////////8fb/wdb/iLL/RIj/B2L/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/PYP/5+//////////////////////////////09PT09PT////
|
||||
////////////////////////////zN7/JnT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al7/Gm3/NH3/Ron/To7/T47/R4n/NH3/GGz/AV3/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/A1//fKv/+/z/////////////////////////////
|
||||
////09PT09PT////////////////////////////////////9Pj/cKP/Al//AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Knf/x9r/////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////zd7/PIP/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Dmb/ibP/+fv/////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////////v7/sc3/MXz/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/cKP/6fH/
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
/////////////////////////////////////v//uNH/Sov/Al7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/
|
||||
e6r/5+//////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////4Or/hLD/LXj/AV7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
BmH/TI3/qcf/9/r/////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////3en/l7z/V5P/HW//AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
A17/KXb/Zp3/q8n/7/X/////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////v//7PL/wtf/n8H/g6//bqL/YJn/WZT/WJT/X5n/
|
||||
bqL/hLD/osP/x9r/8fb/////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
186
GUI.NET/Forms/NetPlay/frmClientConfig.Designer.cs
generated
Normal file
186
GUI.NET/Forms/NetPlay/frmClientConfig.Designer.cs
generated
Normal file
|
@ -0,0 +1,186 @@
|
|||
namespace Mesen.GUI.Forms.NetPlay
|
||||
{
|
||||
partial class frmClientConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmClientConfig));
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.lblHost = new System.Windows.Forms.Label();
|
||||
this.lblPort = new System.Windows.Forms.Label();
|
||||
this.txtHost = new System.Windows.Forms.TextBox();
|
||||
this.chkSpectator = new System.Windows.Forms.CheckBox();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 2;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtPort, 1, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblHost, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblPort, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtHost, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.chkSpectator, 0, 2);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 4;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(290, 140);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
this.txtPort.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtPort.Location = new System.Drawing.Point(41, 29);
|
||||
this.txtPort.Name = "txtPort";
|
||||
this.txtPort.Size = new System.Drawing.Size(246, 20);
|
||||
this.txtPort.TabIndex = 6;
|
||||
this.txtPort.TextChanged += new System.EventHandler(this.Field_TextChanged);
|
||||
//
|
||||
// flowLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.flowLayoutPanel1, 2);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnCancel);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnOK);
|
||||
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
|
||||
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 111);
|
||||
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
|
||||
this.flowLayoutPanel1.Size = new System.Drawing.Size(290, 29);
|
||||
this.flowLayoutPanel1.TabIndex = 2;
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Location = new System.Drawing.Point(212, 3);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 0;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.btnOK.Location = new System.Drawing.Point(131, 3);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnOK.TabIndex = 1;
|
||||
this.btnOK.Text = "Connect";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lblHost
|
||||
//
|
||||
this.lblHost.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblHost.AutoSize = true;
|
||||
this.lblHost.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblHost.Name = "lblHost";
|
||||
this.lblHost.Size = new System.Drawing.Size(32, 13);
|
||||
this.lblHost.TabIndex = 3;
|
||||
this.lblHost.Text = "Host:";
|
||||
//
|
||||
// lblPort
|
||||
//
|
||||
this.lblPort.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblPort.AutoSize = true;
|
||||
this.lblPort.Location = new System.Drawing.Point(3, 32);
|
||||
this.lblPort.Name = "lblPort";
|
||||
this.lblPort.Size = new System.Drawing.Size(29, 13);
|
||||
this.lblPort.TabIndex = 4;
|
||||
this.lblPort.Text = "Port:";
|
||||
//
|
||||
// txtHost
|
||||
//
|
||||
this.txtHost.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtHost.Location = new System.Drawing.Point(41, 3);
|
||||
this.txtHost.Name = "txtHost";
|
||||
this.txtHost.Size = new System.Drawing.Size(246, 20);
|
||||
this.txtHost.TabIndex = 5;
|
||||
this.txtHost.TextChanged += new System.EventHandler(this.Field_TextChanged);
|
||||
//
|
||||
// chkSpectator
|
||||
//
|
||||
this.chkSpectator.AutoSize = true;
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.chkSpectator, 2);
|
||||
this.chkSpectator.Enabled = false;
|
||||
this.chkSpectator.Location = new System.Drawing.Point(3, 55);
|
||||
this.chkSpectator.Name = "chkSpectator";
|
||||
this.chkSpectator.Size = new System.Drawing.Size(106, 17);
|
||||
this.chkSpectator.TabIndex = 7;
|
||||
this.chkSpectator.Text = "Join as spectator";
|
||||
this.chkSpectator.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// frmClientConfig
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnCancel;
|
||||
this.ClientSize = new System.Drawing.Size(290, 140);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MaximumSize = new System.Drawing.Size(306, 178);
|
||||
this.MinimizeBox = false;
|
||||
this.MinimumSize = new System.Drawing.Size(306, 178);
|
||||
this.Name = "frmClientConfig";
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Connect...";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.flowLayoutPanel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.TextBox txtPort;
|
||||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Label lblHost;
|
||||
private System.Windows.Forms.Label lblPort;
|
||||
private System.Windows.Forms.TextBox txtHost;
|
||||
private System.Windows.Forms.CheckBox chkSpectator;
|
||||
}
|
||||
}
|
39
GUI.NET/Forms/NetPlay/frmClientConfig.cs
Normal file
39
GUI.NET/Forms/NetPlay/frmClientConfig.cs
Normal file
|
@ -0,0 +1,39 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Forms.NetPlay
|
||||
{
|
||||
public partial class frmClientConfig : BaseConfigForm
|
||||
{
|
||||
public frmClientConfig()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.txtHost.Text = ConfigManager.Config.ClientConnectionInfo.Host;
|
||||
this.txtPort.Text = ConfigManager.Config.ClientConnectionInfo.Port.ToString();
|
||||
}
|
||||
|
||||
protected override void UpdateConfig()
|
||||
{
|
||||
ConfigManager.Config.ClientConnectionInfo = new ClientConnectionInfo() { Host = this.txtHost.Text, Port = Convert.ToUInt16(this.txtPort.Text) };
|
||||
}
|
||||
|
||||
private void Field_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
UInt16 port;
|
||||
if(!UInt16.TryParse(this.txtPort.Text, out port)) {
|
||||
this.btnOK.Enabled = false;
|
||||
} else {
|
||||
this.btnOK.Enabled = !string.IsNullOrWhiteSpace(this.txtHost.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
409
GUI.NET/Forms/NetPlay/frmClientConfig.resx
Normal file
409
GUI.NET/Forms/NetPlay/frmClientConfig.resx
Normal file
|
@ -0,0 +1,409 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAAAGABoAwAANgAAACAgAAAAABgAqAwAAJ4DAABAQAAAAAAYACgyAABGEAAAKAAAABAA
|
||||
AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT0/////////////////////////7+/v7+/v///////////////////////9PT09PT
|
||||
0////////////+np6cHBwaamppubm5qamqWlpb6+vuTk5P///////////9PT09PT0/////j4+Ly8vJqa
|
||||
mpqamq2trb6+vr6+vq6urpubm5qamrW1tfT09P///9PT09PT0/b29qqqqpqamry8vPDw8Pz8/Ofn5+fn
|
||||
5/z8/PPz88PDw5ubm6WlpfLy8tPT09PT07a2tpqamtbW1v///+Li4qKiopqampqamqKiouLi4v///9/f
|
||||
35ubm7Ozs9PT09PT06WlpcPDw/////T09J6enp6enqmpqZqampqamp6envT09P///8XFxaWlpdPT09PT
|
||||
0/f5/f7+/////9jY2JqamsTExO3t7ZqampqampqamtjY2P////7+//f5/dPT09PT0xxv/22i/////93d
|
||||
3ZqamsbGxu/v75qampqampqamt3d3f///2mg/xxv/9PT09PT00CG/wRg/67L//v7+6mpqbq6uuHh4Zqa
|
||||
mpqamqmpqfv7+5e9/wFf/0eL/9PT09PT093q/xtv/wJf/2mg/9ji9b29vaCgoKCgoL29vc/d9FeV/wBe
|
||||
/yh3/+jw/9PT09PT0////+Pt/0SJ/wBe/wJf/zR//1uX/1qX/zF8/wFf/wBe/1eV/+70/////9PT09PT
|
||||
0////////////7zU/1yY/x1w/wFf/wFf/x9x/2Kc/8jc/////////////9PT09PT0///////////////
|
||||
//////////z9//z9/////////////////////////9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT0///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/Pz84eHhycnJtra2qqqqpKSkpKSkqqqqtra2x8fH3t7e+fn5////////////////////////////////
|
||||
////09PT09PT////////////////////////////7u7uwcHBn5+fmpqampqampqampqampqampqampqa
|
||||
mpqampqampqanJycubm54+Pj////////////////////////////09PT09PT////////////////////
|
||||
8/Pzvb29m5ubmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqasLCw6Ojo
|
||||
////////////////////09PT09PT////////////////2NjYn5+fmpqampqampqampqampqampqapqam
|
||||
tbW1vb29vb29tbW1p6enmpqampqampqampqampqampqam5ubxcXF/Pz8////////////09PT09PT////
|
||||
/////f39wcHBmpqampqampqampqampqarKys1NTU8/Pz////////////////////////9vb22tratbW1
|
||||
mpqampqampqampqampqasLCw9vb2////////09PT09PT/////f39ubm5mpqampqampqampqaqqqq4eHh
|
||||
////////////////////////////////////////////////7e3tt7e3mpqampqampqampqaq6ur9/f3
|
||||
////09PT09PT////wcHBmpqampqampqampqayMjI/Pz8////////////7e3txMTEqqqqnZ2dnZ2dqqqq
|
||||
xMTE7e3t////////////////29vbn5+fmpqampqampqatLS0/v7+09PT09PT3t7empqampqampqanJyc
|
||||
3Nzc/////////////f39xsbGm5ubmpqampqampqampqampqampqam5ubxsbG/f39////////////7Ozs
|
||||
o6Ojmpqampqampqa1tbW09PT09PTrKysmpqampqampqa3d3d/////////////v7+u7u7mpqampqampqa
|
||||
mpqampqampqampqampqampqampqau7u7/v7+////////////6urqnZ2dmpqampqaqqqq09PT09PTnZ2d
|
||||
mpqampqawcHB////////////////1dXVmpqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
1dXV////////////////xcXFmpqampqanZ2d09PT09PTz8/Pm5ubqKio8/Pz/////////////v7+pKSk
|
||||
mpqampqampqavLy819fXpaWlmpqampqampqampqampqampqapaWl/v7+////////////8/PzqKiom5ub
|
||||
0NDQ09PT09PT/////Pz8/v7+////////////////6+vrmpqampqampqanp6e/f39////19fXmpqampqa
|
||||
mpqampqampqampqampqa6+vr/////////////////v7+/Pz8////09PT09PT////+Pr//v7/////////
|
||||
////////3t7empqampqampqaoqKi////////3d3dmpqampqampqampqampqampqampqa3t7e////////
|
||||
/////////v7/+Pr/////09PT09PTiLP/BWD/JXT/4ez/////////////4uLimpqampqampqaoqKi////
|
||||
////3d3dmpqampqampqampqampqampqampqa4uLi////////////4ez/JXT/BWD/ibP/09PT09PTCmT/
|
||||
AF7/AF7/b6P/////////////9vb2m5ubmpqampqaoqKi////////3d3dmpqampqampqampqampqampqa
|
||||
m5ub9vb2////////////Y5z/AF7/AF7/CmT/09PT09PTKnj/AF7/AF7/B2L/zN7/////////////ubm5
|
||||
mpqampqaoqKi////////3d3dmpqampqampqampqampqampqauLi4////////////qsj/AV//AF7/AF7/
|
||||
Lnr/09PT09PTmr7/AF7/AF7/AF7/F2z/0eH/////////8PDwn5+fmpqam5ub8fHx////yMjImpqampqa
|
||||
mpqampqampqan5+f8PDw////////qMf/BmH/AF7/AF7/AF7/rcv/09PT09PT/f3/Qof/AF7/AF7/AF7/
|
||||
DWb/pcX/////////5eXloKCgmpqaoaGhsbGxmpqampqampqampqampqaoKCg5eXl////+fv/dqf/AV//
|
||||
AF7/AF7/AF7/ZJz/////09PT09PT////7PL/Knj/AF7/AF7/AF7/AF7/Soz/0uL/////8fHxurq6m5ub
|
||||
mpqampqampqampqam5uburq68fHx////tM//KXf/AF7/AF7/AF7/AF7/UI//+vz/////09PT09PT////
|
||||
////6vH/OIH/AF7/AF7/AF7/AF7/AV//RYn/osP/6vH/9PT02trazs7Ozs7O2tra9PT04uz/k7r/L3v/
|
||||
AF7/AF7/AF7/AF7/AF7/ZJz/+vz/////////09PT09PT////////////+Pr/bqP/Al//AF7/AF7/AF7/
|
||||
AF7/AF7/AV7/InP/Ror/WJX/WZX/RYn/HnD/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ncH/////////////
|
||||
////09PT09PT////////////////////xtr/OIH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al//WZb/4u3/////////////////////09PT09PT////////////////////
|
||||
////////utP/UJD/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ZZ3/1OP/////////
|
||||
////////////////////09PT09PT////////////////////////////////////8PX/rMr/cqX/R4r/
|
||||
Knj/G27/G27/Knj/SYv/d6n/ttD/9vn/////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////+vr66Ojo2dnZzc3NxMTE
|
||||
v7+/vLy8vLy8v7+/xcXFzc3N2NjY5ubm+Pj4////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////+fn53d3dwsLCqqqqmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqapaWlvLy81dXV8vLy////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////////////////////////////////////////Pz83Nzct7e3nJyc
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaq6urzc3N8/Pz////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////9fX1ysrK
|
||||
oqKimpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqam5ubtra24uLi////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
9vb2xcXFnZ2dmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqara2t4ODg////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////f39z8/Pn5+fmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
sbGx6+vr////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////6Ojoqqqqmpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqam5ubxsbG+/v7////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////f39ysrKm5ubmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqaoqKirq6utbW1uLi4uLi4tbW1rq6uo6Ojmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqaqKio6urq////////////////////////////
|
||||
////09PT09PT////////////////////////////9fX1sbGxmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqanJyctLS0z8/P5eXl+fn5////////////////////////////////+/v76enp
|
||||
1NTUvLy8oaGhmpqampqampqampqampqampqampqampqampqampqampqampqampqanJyc1tbW////////
|
||||
////////////////////09PT09PT////////////////////////6+vrpKSkmpqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqasrKy2NjY+fn5////////////////////////////////////////
|
||||
/////////////////////////v7+5eXlwsLCn5+fmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqaxcXF/v7+////////////////////09PT09PT////////////////////5OTkn5+fmpqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ubvr6+7Ozs////////////////////////////////////
|
||||
////////////////////////////////////////////////////+vr61NTUpqammpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqavb29/v7+////////////////09PT09PT////////////////4+Pj
|
||||
nZ2dmpqampqampqampqampqampqampqampqampqampqauLi47+/v////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////f39
|
||||
1dXVoqKimpqampqampqampqampqampqampqampqampqampqavb29/v7+////////////09PT09PT////
|
||||
////////6OjonZ2dmpqampqampqampqampqampqampqampqampqapaWl4eHh////////////////////
|
||||
////////////////////////+/v76enp3d3d19fX19fX3d3d6enp+/v7////////////////////////
|
||||
////////////////////+fn5w8PDmpqampqampqampqampqampqampqampqampqampqaxsbG////////
|
||||
////09PT09PT////////8vLyoaGhmpqampqampqampqampqampqampqampqampqavr6++fn5////////
|
||||
////////////////////////////9vb20NDQsLCwm5ubmpqampqampqampqampqampqam5ubsLCw0NDQ
|
||||
9vb2////////////////////////////////////////5OTkpKSkmpqampqampqampqampqampqampqa
|
||||
mpqampqa29vb////////09PT09PT/////f39rq6umpqampqampqampqampqampqampqampqanJyc19fX
|
||||
////////////////////////////////////9/f3xMTEnZ2dmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqanZ2dxMTE9/f3////////////////////////////////////9vb2sbGxmpqampqa
|
||||
mpqampqampqampqampqampqan5+f8/Pz////09PT09PT////zMzMmpqampqampqampqampqampqampqa
|
||||
mpqaoKCg5ubm////////////////////////////////////39/foqKimpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqaoqKi39/f////////////////////////////////
|
||||
/////Pz8urq6mpqampqampqampqampqampqampqampqau7u7////09PT09PT8/PznZ2dmpqampqampqa
|
||||
mpqampqampqampqaoaGh7Ozs////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqazMzM////////////
|
||||
/////////////////////////f39urq6mpqampqampqampqampqampqampqampqa7Ozs09PT09PTx8fH
|
||||
mpqampqampqampqampqampqampqanp6e6urq////////////////////////////////////ysrKmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaysrK/////////////////////////////////////Pz8sLCwmpqampqampqampqampqampqampqa
|
||||
w8PD09PT09PTpaWlmpqampqampqampqampqampqampqa3t7e////////////////////////////////
|
||||
////2dnZmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqa2dnZ////////////////////////////////////8/Pzn5+fmpqampqa
|
||||
mpqampqampqampqapaWl09PT09PTm5ubmpqampqampqampqampqampqav7+/////////////////////
|
||||
////////////////8/Pznp6empqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqan5+f8/Pz////////////////////////////////
|
||||
////zc3Nmpqampqampqampqampqampqam5ub09PT09PTrKysmpqampqampqampqampqam5ub8vLy////
|
||||
////////////////////////////////vb29mpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29////////////////
|
||||
////////////////////8/PzmpqampqampqampqampqampqarKys09PT09PT39/fmpqampqampqampqa
|
||||
mpqawsLC////////////////////////////////////8fHxmpqampqampqampqampqampqampqampqa
|
||||
mpqasLCwxcXFrq6umpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam5ub
|
||||
8fHx////////////////////////////////////wsLCmpqampqampqampqampqa39/f09PT09PT////
|
||||
3d3dqKiompqaoKCgysrK/f39////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqazs7O////////////yMjImpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqazMzM/////////////////////////////////////f39ysrKoKCgmpqaqKio3d3d
|
||||
////09PT09PT////////////+/v7/v7+////////////////////////////////////////////r6+v
|
||||
mpqampqampqampqampqampqampqaqqqq/////////////////f39paWlmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqar6+v////////////////////////////////////////////
|
||||
/v7++/v7////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////f39nJycmpqampqampqampqampqampqampqavb29////////////////////uLi4mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqanJyc/v7+////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////9PT0mpqampqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa9PT0////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////+vz//f7/
|
||||
////////////////////////////////////////7+/vmpqampqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqa7u7u/////////////////////////////////////////f7/+vz/////////////09PT09PT////
|
||||
rMn/J3X/Al7/FGn/fKr/+/z/////////////////////////////////8/Pzmpqampqampqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqa8/Pz////////////////////////////////+/z/e6r/FGn/Al7/KHX/rMn/
|
||||
////09PT09PTsMv/AV7/AF7/AF7/AF7/AF7/aJ7//////////////////////////////////Pz8m5ub
|
||||
mpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ub/f39////////////////////////////////aJ7/AF7/
|
||||
AF7/AF7/AF7/Al//sMz/09PT09PTMHv/AF7/AF7/AF7/AF7/AF7/A1//4+3/////////////////////
|
||||
////////////rKysmpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqarKys////////////////////////////
|
||||
////3+r/Al7/AF7/AF7/AF7/AF7/AF7/MHv/09PT09PTBGD/AF7/AF7/AF7/AF7/AF7/AF7/hbD/////
|
||||
////////////////////////////x8fHmpqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqax8fH////////////
|
||||
////////////////////YZr/AF7/AF7/AF7/AF7/AF7/AF7/BGD/09PT09PTHm//AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/D2b/4uz/////////////////////////////7Ozsmpqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
7Ozs////////////////////////////rcr/AV7/AF7/AF7/AF7/AF7/AF7/AF7/HnD/09PT09PTaZ//
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/OoH/+Pr/////////////////////////////tbW1mpqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqatbW1////////////////////////////zN7/DGX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
dKX/09PT09PTz+D/AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH//P3/////////////////////////
|
||||
7e3tm5ubmpqampqampqampqampqauLi4////////////////////srKympqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqanJyc7e3t////////////////////////0OD/FGn/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/CWP/4+z/09PT09PT////VJH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH/+fv/////
|
||||
////////////////////zs7OmpqampqampqampqampqanZ2d8vLy////////////7e3tm5ubmpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqazs7O////////////////////////wtf/EWj/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/gK3/////09PT09PT////4ez/Dmb/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/PYP/6fD//////////////////////v7+vb29mpqampqampqampqampqaqKio4+Pj+fn54ODg
|
||||
paWlmpqampqampqampqampqampqampqampqampqampqampqampqavLy8/v7+////////////////////
|
||||
nL//B2L/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/NH3/+vv/////09PT09PT////////pcX/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/G27/vtX//////////////////////f39vb29mpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29/f39////////
|
||||
////////8fb/Xpj/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/3+r/////////09PT09PT////
|
||||
////////c6T/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Al//bKD/8fb/////////////////////
|
||||
0NDQnJycmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqanJyc0NDQ
|
||||
////////////////////ttD/H3D/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CmT/xtr/////////
|
||||
////09PT09PT/////////////f3/WZX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/GGz/mL3/
|
||||
+/z/////////////////7u7utra2mpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqatra27u7u////////////////2OX/T47/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/
|
||||
utL/////////////////09PT09PT////////////////+vz/WZT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/InL/lbr/9Pj/////////////////6urqwsLCoqKimpqampqampqampqampqampqa
|
||||
mpqampqaoqKiwsLC6urq////////////////0+L/XZf/BGD/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/DWX/vdT/////////////////////09PT09PT/////////////////////P3/bqL/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/EGf/Z53/wdb//P3//////////////v7+7e3t2tra
|
||||
zs7OyMjIyMjIzs7O2tra7e3t/v7+////////////8PX/oMH/P4T/AV7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/HG7/z9//////////////////////////09PT09PT////////////////////
|
||||
////////mL3/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/WJT/lrv/
|
||||
ytz/9fn/////////////////////////////////8fb/wdb/iLL/RIj/B2L/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/PYP/5+//////////////////////////////09PT09PT////
|
||||
////////////////////////////zN7/JnT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al7/Gm3/NH3/Ron/To7/T47/R4n/NH3/GGz/AV3/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/A1//fKv/+/z/////////////////////////////
|
||||
////09PT09PT////////////////////////////////////9Pj/cKP/Al//AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Knf/x9r/////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////zd7/PIP/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Dmb/ibP/+fv/////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////////v7/sc3/MXz/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/cKP/6fH/
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
/////////////////////////////////////v//uNH/Sov/Al7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/
|
||||
e6r/5+//////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////4Or/hLD/LXj/AV7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
BmH/TI3/qcf/9/r/////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////3en/l7z/V5P/HW//AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
A17/KXb/Zp3/q8n/7/X/////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////v//7PL/wtf/n8H/g6//bqL/YJn/WZT/WJT/X5n/
|
||||
bqL/hLD/osP/x9r/8fb/////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
171
GUI.NET/Forms/NetPlay/frmPlayerProfile.Designer.cs
generated
Normal file
171
GUI.NET/Forms/NetPlay/frmPlayerProfile.Designer.cs
generated
Normal file
|
@ -0,0 +1,171 @@
|
|||
namespace Mesen.GUI.Forms.NetPlay
|
||||
{
|
||||
partial class frmPlayerProfile
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmPlayerProfile));
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.lblName = new System.Windows.Forms.Label();
|
||||
this.lblAvatar = new System.Windows.Forms.Label();
|
||||
this.txtPlayerName = new System.Windows.Forms.TextBox();
|
||||
this.picAvatar = new System.Windows.Forms.PictureBox();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picAvatar)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 2;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 3);
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblName, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.lblAvatar, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.txtPlayerName, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.picAvatar, 1, 1);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 4;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(302, 163);
|
||||
this.tableLayoutPanel1.TabIndex = 1;
|
||||
//
|
||||
// flowLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.SetColumnSpan(this.flowLayoutPanel1, 2);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnCancel);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnOK);
|
||||
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
|
||||
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 134);
|
||||
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
|
||||
this.flowLayoutPanel1.Size = new System.Drawing.Size(302, 29);
|
||||
this.flowLayoutPanel1.TabIndex = 2;
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Location = new System.Drawing.Point(224, 3);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 0;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.btnOK.Location = new System.Drawing.Point(143, 3);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnOK.TabIndex = 1;
|
||||
this.btnOK.Text = "OK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lblName
|
||||
//
|
||||
this.lblName.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblName.AutoSize = true;
|
||||
this.lblName.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblName.Name = "lblName";
|
||||
this.lblName.Size = new System.Drawing.Size(68, 13);
|
||||
this.lblName.TabIndex = 3;
|
||||
this.lblName.Text = "Player name:";
|
||||
//
|
||||
// lblAvatar
|
||||
//
|
||||
this.lblAvatar.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblAvatar.AutoSize = true;
|
||||
this.lblAvatar.Location = new System.Drawing.Point(3, 55);
|
||||
this.lblAvatar.Name = "lblAvatar";
|
||||
this.lblAvatar.Size = new System.Drawing.Size(41, 13);
|
||||
this.lblAvatar.TabIndex = 4;
|
||||
this.lblAvatar.Text = "Avatar:";
|
||||
//
|
||||
// txtPlayerName
|
||||
//
|
||||
this.txtPlayerName.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtPlayerName.Location = new System.Drawing.Point(77, 3);
|
||||
this.txtPlayerName.Name = "txtPlayerName";
|
||||
this.txtPlayerName.Size = new System.Drawing.Size(222, 20);
|
||||
this.txtPlayerName.TabIndex = 5;
|
||||
this.txtPlayerName.Text = "DefaultPlayer";
|
||||
//
|
||||
// picAvatar
|
||||
//
|
||||
this.picAvatar.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.picAvatar.Location = new System.Drawing.Point(77, 29);
|
||||
this.picAvatar.Name = "picAvatar";
|
||||
this.picAvatar.Size = new System.Drawing.Size(66, 66);
|
||||
this.picAvatar.TabIndex = 8;
|
||||
this.picAvatar.TabStop = false;
|
||||
this.picAvatar.Click += new System.EventHandler(this.picAvatar_Click);
|
||||
//
|
||||
// frmPlayerProfile
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnCancel;
|
||||
this.ClientSize = new System.Drawing.Size(302, 163);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "frmPlayerProfile";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Profile";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.flowLayoutPanel1.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.picAvatar)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Label lblName;
|
||||
private System.Windows.Forms.Label lblAvatar;
|
||||
private System.Windows.Forms.TextBox txtPlayerName;
|
||||
private System.Windows.Forms.PictureBox picAvatar;
|
||||
}
|
||||
}
|
44
GUI.NET/Forms/NetPlay/frmPlayerProfile.cs
Normal file
44
GUI.NET/Forms/NetPlay/frmPlayerProfile.cs
Normal file
|
@ -0,0 +1,44 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Forms.NetPlay
|
||||
{
|
||||
public partial class frmPlayerProfile : BaseConfigForm
|
||||
{
|
||||
public frmPlayerProfile()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.txtPlayerName.Text = ConfigManager.Config.Profile.PlayerName;
|
||||
this.picAvatar.Image = ConfigManager.Config.Profile.GetAvatarImage();
|
||||
}
|
||||
|
||||
private void picAvatar_Click(object sender, EventArgs e)
|
||||
{
|
||||
OpenFileDialog ofd = new OpenFileDialog();
|
||||
ofd.Filter = "All supported image files (*.bmp, *.jpg, *.png)|*.bmp;*.jpg;*.png";
|
||||
if(ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
|
||||
try {
|
||||
this.picAvatar.Image = Image.FromFile(ofd.FileName).ResizeImage(64, 64);
|
||||
} catch {
|
||||
MessageBox.Show("Invalid image format.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void UpdateConfig()
|
||||
{
|
||||
PlayerProfile profile = new PlayerProfile();
|
||||
profile.PlayerName = this.txtPlayerName.Text;
|
||||
profile.SetAvatar(this.picAvatar.Image);
|
||||
ConfigManager.Config.Profile = profile;
|
||||
}
|
||||
}
|
||||
}
|
409
GUI.NET/Forms/NetPlay/frmPlayerProfile.resx
Normal file
409
GUI.NET/Forms/NetPlay/frmPlayerProfile.resx
Normal file
|
@ -0,0 +1,409 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAAAGABoAwAANgAAACAgAAAAABgAqAwAAJ4DAABAQAAAAAAYACgyAABGEAAAKAAAABAA
|
||||
AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT0/////////////////////////7+/v7+/v///////////////////////9PT09PT
|
||||
0////////////+np6cHBwaamppubm5qamqWlpb6+vuTk5P///////////9PT09PT0/////j4+Ly8vJqa
|
||||
mpqamq2trb6+vr6+vq6urpubm5qamrW1tfT09P///9PT09PT0/b29qqqqpqamry8vPDw8Pz8/Ofn5+fn
|
||||
5/z8/PPz88PDw5ubm6WlpfLy8tPT09PT07a2tpqamtbW1v///+Li4qKiopqampqamqKiouLi4v///9/f
|
||||
35ubm7Ozs9PT09PT06WlpcPDw/////T09J6enp6enqmpqZqampqamp6envT09P///8XFxaWlpdPT09PT
|
||||
0/f5/f7+/////9jY2JqamsTExO3t7ZqampqampqamtjY2P////7+//f5/dPT09PT0xxv/22i/////93d
|
||||
3ZqamsbGxu/v75qampqampqamt3d3f///2mg/xxv/9PT09PT00CG/wRg/67L//v7+6mpqbq6uuHh4Zqa
|
||||
mpqamqmpqfv7+5e9/wFf/0eL/9PT09PT093q/xtv/wJf/2mg/9ji9b29vaCgoKCgoL29vc/d9FeV/wBe
|
||||
/yh3/+jw/9PT09PT0////+Pt/0SJ/wBe/wJf/zR//1uX/1qX/zF8/wFf/wBe/1eV/+70/////9PT09PT
|
||||
0////////////7zU/1yY/x1w/wFf/wFf/x9x/2Kc/8jc/////////////9PT09PT0///////////////
|
||||
//////////z9//z9/////////////////////////9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT0///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/Pz84eHhycnJtra2qqqqpKSkpKSkqqqqtra2x8fH3t7e+fn5////////////////////////////////
|
||||
////09PT09PT////////////////////////////7u7uwcHBn5+fmpqampqampqampqampqampqampqa
|
||||
mpqampqampqanJycubm54+Pj////////////////////////////09PT09PT////////////////////
|
||||
8/Pzvb29m5ubmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqasLCw6Ojo
|
||||
////////////////////09PT09PT////////////////2NjYn5+fmpqampqampqampqampqampqapqam
|
||||
tbW1vb29vb29tbW1p6enmpqampqampqampqampqampqam5ubxcXF/Pz8////////////09PT09PT////
|
||||
/////f39wcHBmpqampqampqampqampqarKys1NTU8/Pz////////////////////////9vb22tratbW1
|
||||
mpqampqampqampqampqasLCw9vb2////////09PT09PT/////f39ubm5mpqampqampqampqaqqqq4eHh
|
||||
////////////////////////////////////////////////7e3tt7e3mpqampqampqampqaq6ur9/f3
|
||||
////09PT09PT////wcHBmpqampqampqampqayMjI/Pz8////////////7e3txMTEqqqqnZ2dnZ2dqqqq
|
||||
xMTE7e3t////////////////29vbn5+fmpqampqampqatLS0/v7+09PT09PT3t7empqampqampqanJyc
|
||||
3Nzc/////////////f39xsbGm5ubmpqampqampqampqampqampqam5ubxsbG/f39////////////7Ozs
|
||||
o6Ojmpqampqampqa1tbW09PT09PTrKysmpqampqampqa3d3d/////////////v7+u7u7mpqampqampqa
|
||||
mpqampqampqampqampqampqampqau7u7/v7+////////////6urqnZ2dmpqampqaqqqq09PT09PTnZ2d
|
||||
mpqampqawcHB////////////////1dXVmpqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
1dXV////////////////xcXFmpqampqanZ2d09PT09PTz8/Pm5ubqKio8/Pz/////////////v7+pKSk
|
||||
mpqampqampqavLy819fXpaWlmpqampqampqampqampqampqapaWl/v7+////////////8/PzqKiom5ub
|
||||
0NDQ09PT09PT/////Pz8/v7+////////////////6+vrmpqampqampqanp6e/f39////19fXmpqampqa
|
||||
mpqampqampqampqampqa6+vr/////////////////v7+/Pz8////09PT09PT////+Pr//v7/////////
|
||||
////////3t7empqampqampqaoqKi////////3d3dmpqampqampqampqampqampqampqa3t7e////////
|
||||
/////////v7/+Pr/////09PT09PTiLP/BWD/JXT/4ez/////////////4uLimpqampqampqaoqKi////
|
||||
////3d3dmpqampqampqampqampqampqampqa4uLi////////////4ez/JXT/BWD/ibP/09PT09PTCmT/
|
||||
AF7/AF7/b6P/////////////9vb2m5ubmpqampqaoqKi////////3d3dmpqampqampqampqampqampqa
|
||||
m5ub9vb2////////////Y5z/AF7/AF7/CmT/09PT09PTKnj/AF7/AF7/B2L/zN7/////////////ubm5
|
||||
mpqampqaoqKi////////3d3dmpqampqampqampqampqampqauLi4////////////qsj/AV//AF7/AF7/
|
||||
Lnr/09PT09PTmr7/AF7/AF7/AF7/F2z/0eH/////////8PDwn5+fmpqam5ub8fHx////yMjImpqampqa
|
||||
mpqampqampqan5+f8PDw////////qMf/BmH/AF7/AF7/AF7/rcv/09PT09PT/f3/Qof/AF7/AF7/AF7/
|
||||
DWb/pcX/////////5eXloKCgmpqaoaGhsbGxmpqampqampqampqampqaoKCg5eXl////+fv/dqf/AV//
|
||||
AF7/AF7/AF7/ZJz/////09PT09PT////7PL/Knj/AF7/AF7/AF7/AF7/Soz/0uL/////8fHxurq6m5ub
|
||||
mpqampqampqampqam5uburq68fHx////tM//KXf/AF7/AF7/AF7/AF7/UI//+vz/////09PT09PT////
|
||||
////6vH/OIH/AF7/AF7/AF7/AF7/AV//RYn/osP/6vH/9PT02trazs7Ozs7O2tra9PT04uz/k7r/L3v/
|
||||
AF7/AF7/AF7/AF7/AF7/ZJz/+vz/////////09PT09PT////////////+Pr/bqP/Al//AF7/AF7/AF7/
|
||||
AF7/AF7/AV7/InP/Ror/WJX/WZX/RYn/HnD/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ncH/////////////
|
||||
////09PT09PT////////////////////xtr/OIH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al//WZb/4u3/////////////////////09PT09PT////////////////////
|
||||
////////utP/UJD/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ZZ3/1OP/////////
|
||||
////////////////////09PT09PT////////////////////////////////////8PX/rMr/cqX/R4r/
|
||||
Knj/G27/G27/Knj/SYv/d6n/ttD/9vn/////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////+vr66Ojo2dnZzc3NxMTE
|
||||
v7+/vLy8vLy8v7+/xcXFzc3N2NjY5ubm+Pj4////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////+fn53d3dwsLCqqqqmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqapaWlvLy81dXV8vLy////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////////////////////////////////////////Pz83Nzct7e3nJyc
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaq6urzc3N8/Pz////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////9fX1ysrK
|
||||
oqKimpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqam5ubtra24uLi////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
9vb2xcXFnZ2dmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqara2t4ODg////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////f39z8/Pn5+fmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
sbGx6+vr////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////6Ojoqqqqmpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqam5ubxsbG+/v7////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////f39ysrKm5ubmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqaoqKirq6utbW1uLi4uLi4tbW1rq6uo6Ojmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqaqKio6urq////////////////////////////
|
||||
////09PT09PT////////////////////////////9fX1sbGxmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqanJyctLS0z8/P5eXl+fn5////////////////////////////////+/v76enp
|
||||
1NTUvLy8oaGhmpqampqampqampqampqampqampqampqampqampqampqampqampqanJyc1tbW////////
|
||||
////////////////////09PT09PT////////////////////////6+vrpKSkmpqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqasrKy2NjY+fn5////////////////////////////////////////
|
||||
/////////////////////////v7+5eXlwsLCn5+fmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqaxcXF/v7+////////////////////09PT09PT////////////////////5OTkn5+fmpqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ubvr6+7Ozs////////////////////////////////////
|
||||
////////////////////////////////////////////////////+vr61NTUpqammpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqavb29/v7+////////////////09PT09PT////////////////4+Pj
|
||||
nZ2dmpqampqampqampqampqampqampqampqampqampqauLi47+/v////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////f39
|
||||
1dXVoqKimpqampqampqampqampqampqampqampqampqampqavb29/v7+////////////09PT09PT////
|
||||
////////6OjonZ2dmpqampqampqampqampqampqampqampqampqapaWl4eHh////////////////////
|
||||
////////////////////////+/v76enp3d3d19fX19fX3d3d6enp+/v7////////////////////////
|
||||
////////////////////+fn5w8PDmpqampqampqampqampqampqampqampqampqampqaxsbG////////
|
||||
////09PT09PT////////8vLyoaGhmpqampqampqampqampqampqampqampqampqavr6++fn5////////
|
||||
////////////////////////////9vb20NDQsLCwm5ubmpqampqampqampqampqampqam5ubsLCw0NDQ
|
||||
9vb2////////////////////////////////////////5OTkpKSkmpqampqampqampqampqampqampqa
|
||||
mpqampqa29vb////////09PT09PT/////f39rq6umpqampqampqampqampqampqampqampqanJyc19fX
|
||||
////////////////////////////////////9/f3xMTEnZ2dmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqanZ2dxMTE9/f3////////////////////////////////////9vb2sbGxmpqampqa
|
||||
mpqampqampqampqampqampqan5+f8/Pz////09PT09PT////zMzMmpqampqampqampqampqampqampqa
|
||||
mpqaoKCg5ubm////////////////////////////////////39/foqKimpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqaoqKi39/f////////////////////////////////
|
||||
/////Pz8urq6mpqampqampqampqampqampqampqampqau7u7////09PT09PT8/PznZ2dmpqampqampqa
|
||||
mpqampqampqampqaoaGh7Ozs////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqazMzM////////////
|
||||
/////////////////////////f39urq6mpqampqampqampqampqampqampqampqa7Ozs09PT09PTx8fH
|
||||
mpqampqampqampqampqampqampqanp6e6urq////////////////////////////////////ysrKmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaysrK/////////////////////////////////////Pz8sLCwmpqampqampqampqampqampqampqa
|
||||
w8PD09PT09PTpaWlmpqampqampqampqampqampqampqa3t7e////////////////////////////////
|
||||
////2dnZmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqa2dnZ////////////////////////////////////8/Pzn5+fmpqampqa
|
||||
mpqampqampqampqapaWl09PT09PTm5ubmpqampqampqampqampqampqav7+/////////////////////
|
||||
////////////////8/Pznp6empqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqan5+f8/Pz////////////////////////////////
|
||||
////zc3Nmpqampqampqampqampqampqam5ub09PT09PTrKysmpqampqampqampqampqam5ub8vLy////
|
||||
////////////////////////////////vb29mpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29////////////////
|
||||
////////////////////8/PzmpqampqampqampqampqampqarKys09PT09PT39/fmpqampqampqampqa
|
||||
mpqawsLC////////////////////////////////////8fHxmpqampqampqampqampqampqampqampqa
|
||||
mpqasLCwxcXFrq6umpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam5ub
|
||||
8fHx////////////////////////////////////wsLCmpqampqampqampqampqa39/f09PT09PT////
|
||||
3d3dqKiompqaoKCgysrK/f39////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqazs7O////////////yMjImpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqazMzM/////////////////////////////////////f39ysrKoKCgmpqaqKio3d3d
|
||||
////09PT09PT////////////+/v7/v7+////////////////////////////////////////////r6+v
|
||||
mpqampqampqampqampqampqampqaqqqq/////////////////f39paWlmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqar6+v////////////////////////////////////////////
|
||||
/v7++/v7////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////f39nJycmpqampqampqampqampqampqampqavb29////////////////////uLi4mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqanJyc/v7+////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////9PT0mpqampqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa9PT0////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////+vz//f7/
|
||||
////////////////////////////////////////7+/vmpqampqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqa7u7u/////////////////////////////////////////f7/+vz/////////////09PT09PT////
|
||||
rMn/J3X/Al7/FGn/fKr/+/z/////////////////////////////////8/Pzmpqampqampqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqa8/Pz////////////////////////////////+/z/e6r/FGn/Al7/KHX/rMn/
|
||||
////09PT09PTsMv/AV7/AF7/AF7/AF7/AF7/aJ7//////////////////////////////////Pz8m5ub
|
||||
mpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ub/f39////////////////////////////////aJ7/AF7/
|
||||
AF7/AF7/AF7/Al//sMz/09PT09PTMHv/AF7/AF7/AF7/AF7/AF7/A1//4+3/////////////////////
|
||||
////////////rKysmpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqarKys////////////////////////////
|
||||
////3+r/Al7/AF7/AF7/AF7/AF7/AF7/MHv/09PT09PTBGD/AF7/AF7/AF7/AF7/AF7/AF7/hbD/////
|
||||
////////////////////////////x8fHmpqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqax8fH////////////
|
||||
////////////////////YZr/AF7/AF7/AF7/AF7/AF7/AF7/BGD/09PT09PTHm//AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/D2b/4uz/////////////////////////////7Ozsmpqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
7Ozs////////////////////////////rcr/AV7/AF7/AF7/AF7/AF7/AF7/AF7/HnD/09PT09PTaZ//
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/OoH/+Pr/////////////////////////////tbW1mpqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqatbW1////////////////////////////zN7/DGX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
dKX/09PT09PTz+D/AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH//P3/////////////////////////
|
||||
7e3tm5ubmpqampqampqampqampqauLi4////////////////////srKympqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqanJyc7e3t////////////////////////0OD/FGn/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/CWP/4+z/09PT09PT////VJH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH/+fv/////
|
||||
////////////////////zs7OmpqampqampqampqampqanZ2d8vLy////////////7e3tm5ubmpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqazs7O////////////////////////wtf/EWj/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/gK3/////09PT09PT////4ez/Dmb/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/PYP/6fD//////////////////////v7+vb29mpqampqampqampqampqaqKio4+Pj+fn54ODg
|
||||
paWlmpqampqampqampqampqampqampqampqampqampqampqampqavLy8/v7+////////////////////
|
||||
nL//B2L/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/NH3/+vv/////09PT09PT////////pcX/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/G27/vtX//////////////////////f39vb29mpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29/f39////////
|
||||
////////8fb/Xpj/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/3+r/////////09PT09PT////
|
||||
////////c6T/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Al//bKD/8fb/////////////////////
|
||||
0NDQnJycmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqanJyc0NDQ
|
||||
////////////////////ttD/H3D/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CmT/xtr/////////
|
||||
////09PT09PT/////////////f3/WZX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/GGz/mL3/
|
||||
+/z/////////////////7u7utra2mpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqatra27u7u////////////////2OX/T47/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/
|
||||
utL/////////////////09PT09PT////////////////+vz/WZT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/InL/lbr/9Pj/////////////////6urqwsLCoqKimpqampqampqampqampqampqa
|
||||
mpqampqaoqKiwsLC6urq////////////////0+L/XZf/BGD/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/DWX/vdT/////////////////////09PT09PT/////////////////////P3/bqL/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/EGf/Z53/wdb//P3//////////////v7+7e3t2tra
|
||||
zs7OyMjIyMjIzs7O2tra7e3t/v7+////////////8PX/oMH/P4T/AV7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/HG7/z9//////////////////////////09PT09PT////////////////////
|
||||
////////mL3/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/WJT/lrv/
|
||||
ytz/9fn/////////////////////////////////8fb/wdb/iLL/RIj/B2L/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/PYP/5+//////////////////////////////09PT09PT////
|
||||
////////////////////////////zN7/JnT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al7/Gm3/NH3/Ron/To7/T47/R4n/NH3/GGz/AV3/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/A1//fKv/+/z/////////////////////////////
|
||||
////09PT09PT////////////////////////////////////9Pj/cKP/Al//AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Knf/x9r/////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////zd7/PIP/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Dmb/ibP/+fv/////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////////v7/sc3/MXz/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/cKP/6fH/
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
/////////////////////////////////////v//uNH/Sov/Al7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/
|
||||
e6r/5+//////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////4Or/hLD/LXj/AV7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
BmH/TI3/qcf/9/r/////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////3en/l7z/V5P/HW//AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
A17/KXb/Zp3/q8n/7/X/////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////v//7PL/wtf/n8H/g6//bqL/YJn/WZT/WJT/X5n/
|
||||
bqL/hLD/osP/x9r/8fb/////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
270
GUI.NET/Forms/NetPlay/frmServerConfig.Designer.cs
generated
Normal file
270
GUI.NET/Forms/NetPlay/frmServerConfig.Designer.cs
generated
Normal file
|
@ -0,0 +1,270 @@
|
|||
namespace Mesen.GUI.Forms.NetPlay
|
||||
{
|
||||
partial class frmServerConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmServerConfig));
|
||||
this.tlpMain = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.txtPort = new System.Windows.Forms.TextBox();
|
||||
this.lblPort = new System.Windows.Forms.Label();
|
||||
this.chkPublicServer = new System.Windows.Forms.CheckBox();
|
||||
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.btnCancel = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.lblServerName = new System.Windows.Forms.Label();
|
||||
this.txtServerName = new System.Windows.Forms.TextBox();
|
||||
this.chkSpectator = new System.Windows.Forms.CheckBox();
|
||||
this.lblMaxPlayers = new System.Windows.Forms.Label();
|
||||
this.lblPassword = new System.Windows.Forms.Label();
|
||||
this.txtPassword = new System.Windows.Forms.TextBox();
|
||||
this.nudNbPlayers = new System.Windows.Forms.NumericUpDown();
|
||||
this.tlpMain.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudNbPlayers)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tlpMain
|
||||
//
|
||||
this.tlpMain.ColumnCount = 2;
|
||||
this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||
this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tlpMain.Controls.Add(this.txtPort, 1, 1);
|
||||
this.tlpMain.Controls.Add(this.lblPort, 0, 1);
|
||||
this.tlpMain.Controls.Add(this.chkPublicServer, 0, 4);
|
||||
this.tlpMain.Controls.Add(this.flowLayoutPanel1, 0, 6);
|
||||
this.tlpMain.Controls.Add(this.lblServerName, 0, 0);
|
||||
this.tlpMain.Controls.Add(this.txtServerName, 1, 0);
|
||||
this.tlpMain.Controls.Add(this.chkSpectator, 0, 5);
|
||||
this.tlpMain.Controls.Add(this.lblMaxPlayers, 0, 3);
|
||||
this.tlpMain.Controls.Add(this.lblPassword, 0, 2);
|
||||
this.tlpMain.Controls.Add(this.txtPassword, 1, 2);
|
||||
this.tlpMain.Controls.Add(this.nudNbPlayers, 1, 3);
|
||||
this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tlpMain.Location = new System.Drawing.Point(0, 0);
|
||||
this.tlpMain.Name = "tlpMain";
|
||||
this.tlpMain.RowCount = 7;
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||
this.tlpMain.Size = new System.Drawing.Size(302, 190);
|
||||
this.tlpMain.TabIndex = 1;
|
||||
//
|
||||
// txtPort
|
||||
//
|
||||
this.txtPort.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtPort.Location = new System.Drawing.Point(128, 29);
|
||||
this.txtPort.Name = "txtPort";
|
||||
this.txtPort.Size = new System.Drawing.Size(171, 20);
|
||||
this.txtPort.TabIndex = 13;
|
||||
this.txtPort.TextChanged += new System.EventHandler(this.Field_ValueChanged);
|
||||
//
|
||||
// lblPort
|
||||
//
|
||||
this.lblPort.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblPort.AutoSize = true;
|
||||
this.lblPort.Location = new System.Drawing.Point(3, 32);
|
||||
this.lblPort.Name = "lblPort";
|
||||
this.lblPort.Size = new System.Drawing.Size(29, 13);
|
||||
this.lblPort.TabIndex = 12;
|
||||
this.lblPort.Text = "Port:";
|
||||
//
|
||||
// chkPublicServer
|
||||
//
|
||||
this.chkPublicServer.AutoSize = true;
|
||||
this.tlpMain.SetColumnSpan(this.chkPublicServer, 2);
|
||||
this.chkPublicServer.Enabled = false;
|
||||
this.chkPublicServer.Location = new System.Drawing.Point(3, 107);
|
||||
this.chkPublicServer.Name = "chkPublicServer";
|
||||
this.chkPublicServer.Size = new System.Drawing.Size(87, 17);
|
||||
this.chkPublicServer.TabIndex = 11;
|
||||
this.chkPublicServer.Text = "Public server";
|
||||
this.chkPublicServer.UseVisualStyleBackColor = true;
|
||||
this.chkPublicServer.CheckedChanged += new System.EventHandler(this.Field_ValueChanged);
|
||||
//
|
||||
// flowLayoutPanel1
|
||||
//
|
||||
this.tlpMain.SetColumnSpan(this.flowLayoutPanel1, 2);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnCancel);
|
||||
this.flowLayoutPanel1.Controls.Add(this.btnOK);
|
||||
this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
|
||||
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 161);
|
||||
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
|
||||
this.flowLayoutPanel1.Size = new System.Drawing.Size(302, 29);
|
||||
this.flowLayoutPanel1.TabIndex = 2;
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Location = new System.Drawing.Point(224, 3);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnCancel.TabIndex = 0;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.btnOK.Location = new System.Drawing.Point(143, 3);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnOK.TabIndex = 1;
|
||||
this.btnOK.Text = "Start Server";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lblServerName
|
||||
//
|
||||
this.lblServerName.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblServerName.AutoSize = true;
|
||||
this.lblServerName.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblServerName.Name = "lblServerName";
|
||||
this.lblServerName.Size = new System.Drawing.Size(70, 13);
|
||||
this.lblServerName.TabIndex = 3;
|
||||
this.lblServerName.Text = "Server name:";
|
||||
//
|
||||
// txtServerName
|
||||
//
|
||||
this.txtServerName.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtServerName.Location = new System.Drawing.Point(128, 3);
|
||||
this.txtServerName.Name = "txtServerName";
|
||||
this.txtServerName.Size = new System.Drawing.Size(171, 20);
|
||||
this.txtServerName.TabIndex = 5;
|
||||
this.txtServerName.TextChanged += new System.EventHandler(this.Field_ValueChanged);
|
||||
//
|
||||
// chkSpectator
|
||||
//
|
||||
this.chkSpectator.AutoSize = true;
|
||||
this.tlpMain.SetColumnSpan(this.chkSpectator, 2);
|
||||
this.chkSpectator.Enabled = false;
|
||||
this.chkSpectator.Location = new System.Drawing.Point(3, 130);
|
||||
this.chkSpectator.Name = "chkSpectator";
|
||||
this.chkSpectator.Size = new System.Drawing.Size(103, 17);
|
||||
this.chkSpectator.TabIndex = 7;
|
||||
this.chkSpectator.Text = "Allow spectators";
|
||||
this.chkSpectator.UseVisualStyleBackColor = true;
|
||||
this.chkSpectator.CheckedChanged += new System.EventHandler(this.Field_ValueChanged);
|
||||
//
|
||||
// lblMaxPlayers
|
||||
//
|
||||
this.lblMaxPlayers.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblMaxPlayers.AutoSize = true;
|
||||
this.lblMaxPlayers.Location = new System.Drawing.Point(3, 84);
|
||||
this.lblMaxPlayers.Name = "lblMaxPlayers";
|
||||
this.lblMaxPlayers.Size = new System.Drawing.Size(119, 13);
|
||||
this.lblMaxPlayers.TabIndex = 4;
|
||||
this.lblMaxPlayers.Text = "Max. number of players:";
|
||||
//
|
||||
// lblPassword
|
||||
//
|
||||
this.lblPassword.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblPassword.AutoSize = true;
|
||||
this.lblPassword.Location = new System.Drawing.Point(3, 58);
|
||||
this.lblPassword.Name = "lblPassword";
|
||||
this.lblPassword.Size = new System.Drawing.Size(56, 13);
|
||||
this.lblPassword.TabIndex = 9;
|
||||
this.lblPassword.Text = "Password:";
|
||||
//
|
||||
// txtPassword
|
||||
//
|
||||
this.txtPassword.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txtPassword.Location = new System.Drawing.Point(128, 55);
|
||||
this.txtPassword.Name = "txtPassword";
|
||||
this.txtPassword.Size = new System.Drawing.Size(171, 20);
|
||||
this.txtPassword.TabIndex = 10;
|
||||
this.txtPassword.UseSystemPasswordChar = true;
|
||||
this.txtPassword.TextChanged += new System.EventHandler(this.Field_ValueChanged);
|
||||
//
|
||||
// nudNbPlayers
|
||||
//
|
||||
this.nudNbPlayers.Location = new System.Drawing.Point(128, 81);
|
||||
this.nudNbPlayers.Maximum = new decimal(new int[] {
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudNbPlayers.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudNbPlayers.Name = "nudNbPlayers";
|
||||
this.nudNbPlayers.Size = new System.Drawing.Size(39, 20);
|
||||
this.nudNbPlayers.TabIndex = 8;
|
||||
this.nudNbPlayers.Value = new decimal(new int[] {
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudNbPlayers.ValueChanged += new System.EventHandler(this.Field_ValueChanged);
|
||||
//
|
||||
// frmServerConfig
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnCancel;
|
||||
this.ClientSize = new System.Drawing.Size(302, 190);
|
||||
this.Controls.Add(this.tlpMain);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "frmServerConfig";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Server Configuration";
|
||||
this.tlpMain.ResumeLayout(false);
|
||||
this.tlpMain.PerformLayout();
|
||||
this.flowLayoutPanel1.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.nudNbPlayers)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel tlpMain;
|
||||
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
|
||||
private System.Windows.Forms.Button btnCancel;
|
||||
private System.Windows.Forms.Button btnOK;
|
||||
private System.Windows.Forms.Label lblServerName;
|
||||
private System.Windows.Forms.Label lblMaxPlayers;
|
||||
private System.Windows.Forms.TextBox txtServerName;
|
||||
private System.Windows.Forms.CheckBox chkSpectator;
|
||||
private System.Windows.Forms.NumericUpDown nudNbPlayers;
|
||||
private System.Windows.Forms.CheckBox chkPublicServer;
|
||||
private System.Windows.Forms.Label lblPassword;
|
||||
private System.Windows.Forms.TextBox txtPassword;
|
||||
private System.Windows.Forms.Label lblPort;
|
||||
private System.Windows.Forms.TextBox txtPort;
|
||||
}
|
||||
}
|
49
GUI.NET/Forms/NetPlay/frmServerConfig.cs
Normal file
49
GUI.NET/Forms/NetPlay/frmServerConfig.cs
Normal file
|
@ -0,0 +1,49 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI.Forms.NetPlay
|
||||
{
|
||||
public partial class frmServerConfig : BaseConfigForm
|
||||
{
|
||||
public frmServerConfig()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
this.txtServerName.Text = ConfigManager.Config.ServerInfo.Name;
|
||||
this.txtPort.Text = ConfigManager.Config.ServerInfo.Port.ToString();
|
||||
this.txtPassword.Text = string.Empty;
|
||||
this.nudNbPlayers.Value = ConfigManager.Config.ServerInfo.MaxPlayers;
|
||||
this.chkSpectator.Checked = ConfigManager.Config.ServerInfo.AllowSpectators;
|
||||
this.chkPublicServer.Checked = ConfigManager.Config.ServerInfo.PublicServer;
|
||||
}
|
||||
|
||||
protected override void UpdateConfig()
|
||||
{
|
||||
ConfigManager.Config.ServerInfo = new ServerInfo() {
|
||||
Name = this.txtServerName.Text,
|
||||
Port = Convert.ToUInt16(this.txtPort.Text),
|
||||
Password = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(this.txtPassword.Text))).Replace("-", ""),
|
||||
MaxPlayers = (int)this.nudNbPlayers.Value,
|
||||
AllowSpectators = this.chkSpectator.Checked,
|
||||
PublicServer = this.chkPublicServer.Checked
|
||||
};
|
||||
}
|
||||
|
||||
private void Field_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
UInt16 port;
|
||||
if(!UInt16.TryParse(this.txtPort.Text, out port)) {
|
||||
this.btnOK.Enabled = false;
|
||||
} else {
|
||||
this.btnOK.Enabled = !string.IsNullOrWhiteSpace(this.txtServerName.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
409
GUI.NET/Forms/NetPlay/frmServerConfig.resx
Normal file
409
GUI.NET/Forms/NetPlay/frmServerConfig.resx
Normal file
|
@ -0,0 +1,409 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAAAGABoAwAANgAAACAgAAAAABgAqAwAAJ4DAABAQAAAAAAYACgyAABGEAAAKAAAABAA
|
||||
AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT0/////////////////////////7+/v7+/v///////////////////////9PT09PT
|
||||
0////////////+np6cHBwaamppubm5qamqWlpb6+vuTk5P///////////9PT09PT0/////j4+Ly8vJqa
|
||||
mpqamq2trb6+vr6+vq6urpubm5qamrW1tfT09P///9PT09PT0/b29qqqqpqamry8vPDw8Pz8/Ofn5+fn
|
||||
5/z8/PPz88PDw5ubm6WlpfLy8tPT09PT07a2tpqamtbW1v///+Li4qKiopqampqamqKiouLi4v///9/f
|
||||
35ubm7Ozs9PT09PT06WlpcPDw/////T09J6enp6enqmpqZqampqamp6envT09P///8XFxaWlpdPT09PT
|
||||
0/f5/f7+/////9jY2JqamsTExO3t7ZqampqampqamtjY2P////7+//f5/dPT09PT0xxv/22i/////93d
|
||||
3ZqamsbGxu/v75qampqampqamt3d3f///2mg/xxv/9PT09PT00CG/wRg/67L//v7+6mpqbq6uuHh4Zqa
|
||||
mpqamqmpqfv7+5e9/wFf/0eL/9PT09PT093q/xtv/wJf/2mg/9ji9b29vaCgoKCgoL29vc/d9FeV/wBe
|
||||
/yh3/+jw/9PT09PT0////+Pt/0SJ/wBe/wJf/zR//1uX/1qX/zF8/wFf/wBe/1eV/+70/////9PT09PT
|
||||
0////////////7zU/1yY/x1w/wFf/wFf/x9x/2Kc/8jc/////////////9PT09PT0///////////////
|
||||
//////////z9//z9/////////////////////////9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT0///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/Pz84eHhycnJtra2qqqqpKSkpKSkqqqqtra2x8fH3t7e+fn5////////////////////////////////
|
||||
////09PT09PT////////////////////////////7u7uwcHBn5+fmpqampqampqampqampqampqampqa
|
||||
mpqampqampqanJycubm54+Pj////////////////////////////09PT09PT////////////////////
|
||||
8/Pzvb29m5ubmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqasLCw6Ojo
|
||||
////////////////////09PT09PT////////////////2NjYn5+fmpqampqampqampqampqampqapqam
|
||||
tbW1vb29vb29tbW1p6enmpqampqampqampqampqampqam5ubxcXF/Pz8////////////09PT09PT////
|
||||
/////f39wcHBmpqampqampqampqampqarKys1NTU8/Pz////////////////////////9vb22tratbW1
|
||||
mpqampqampqampqampqasLCw9vb2////////09PT09PT/////f39ubm5mpqampqampqampqaqqqq4eHh
|
||||
////////////////////////////////////////////////7e3tt7e3mpqampqampqampqaq6ur9/f3
|
||||
////09PT09PT////wcHBmpqampqampqampqayMjI/Pz8////////////7e3txMTEqqqqnZ2dnZ2dqqqq
|
||||
xMTE7e3t////////////////29vbn5+fmpqampqampqatLS0/v7+09PT09PT3t7empqampqampqanJyc
|
||||
3Nzc/////////////f39xsbGm5ubmpqampqampqampqampqampqam5ubxsbG/f39////////////7Ozs
|
||||
o6Ojmpqampqampqa1tbW09PT09PTrKysmpqampqampqa3d3d/////////////v7+u7u7mpqampqampqa
|
||||
mpqampqampqampqampqampqampqau7u7/v7+////////////6urqnZ2dmpqampqaqqqq09PT09PTnZ2d
|
||||
mpqampqawcHB////////////////1dXVmpqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
1dXV////////////////xcXFmpqampqanZ2d09PT09PTz8/Pm5ubqKio8/Pz/////////////v7+pKSk
|
||||
mpqampqampqavLy819fXpaWlmpqampqampqampqampqampqapaWl/v7+////////////8/PzqKiom5ub
|
||||
0NDQ09PT09PT/////Pz8/v7+////////////////6+vrmpqampqampqanp6e/f39////19fXmpqampqa
|
||||
mpqampqampqampqampqa6+vr/////////////////v7+/Pz8////09PT09PT////+Pr//v7/////////
|
||||
////////3t7empqampqampqaoqKi////////3d3dmpqampqampqampqampqampqampqa3t7e////////
|
||||
/////////v7/+Pr/////09PT09PTiLP/BWD/JXT/4ez/////////////4uLimpqampqampqaoqKi////
|
||||
////3d3dmpqampqampqampqampqampqampqa4uLi////////////4ez/JXT/BWD/ibP/09PT09PTCmT/
|
||||
AF7/AF7/b6P/////////////9vb2m5ubmpqampqaoqKi////////3d3dmpqampqampqampqampqampqa
|
||||
m5ub9vb2////////////Y5z/AF7/AF7/CmT/09PT09PTKnj/AF7/AF7/B2L/zN7/////////////ubm5
|
||||
mpqampqaoqKi////////3d3dmpqampqampqampqampqampqauLi4////////////qsj/AV//AF7/AF7/
|
||||
Lnr/09PT09PTmr7/AF7/AF7/AF7/F2z/0eH/////////8PDwn5+fmpqam5ub8fHx////yMjImpqampqa
|
||||
mpqampqampqan5+f8PDw////////qMf/BmH/AF7/AF7/AF7/rcv/09PT09PT/f3/Qof/AF7/AF7/AF7/
|
||||
DWb/pcX/////////5eXloKCgmpqaoaGhsbGxmpqampqampqampqampqaoKCg5eXl////+fv/dqf/AV//
|
||||
AF7/AF7/AF7/ZJz/////09PT09PT////7PL/Knj/AF7/AF7/AF7/AF7/Soz/0uL/////8fHxurq6m5ub
|
||||
mpqampqampqampqam5uburq68fHx////tM//KXf/AF7/AF7/AF7/AF7/UI//+vz/////09PT09PT////
|
||||
////6vH/OIH/AF7/AF7/AF7/AF7/AV//RYn/osP/6vH/9PT02trazs7Ozs7O2tra9PT04uz/k7r/L3v/
|
||||
AF7/AF7/AF7/AF7/AF7/ZJz/+vz/////////09PT09PT////////////+Pr/bqP/Al//AF7/AF7/AF7/
|
||||
AF7/AF7/AV7/InP/Ror/WJX/WZX/RYn/HnD/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ncH/////////////
|
||||
////09PT09PT////////////////////xtr/OIH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al//WZb/4u3/////////////////////09PT09PT////////////////////
|
||||
////////utP/UJD/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ZZ3/1OP/////////
|
||||
////////////////////09PT09PT////////////////////////////////////8PX/rMr/cqX/R4r/
|
||||
Knj/G27/G27/Knj/SYv/d6n/ttD/9vn/////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////+vr66Ojo2dnZzc3NxMTE
|
||||
v7+/vLy8vLy8v7+/xcXFzc3N2NjY5ubm+Pj4////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////+fn53d3dwsLCqqqqmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqapaWlvLy81dXV8vLy////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////////////////////////////////////////Pz83Nzct7e3nJyc
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaq6urzc3N8/Pz////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////9fX1ysrK
|
||||
oqKimpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqam5ubtra24uLi////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
9vb2xcXFnZ2dmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqara2t4ODg////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////f39z8/Pn5+fmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
sbGx6+vr////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////6Ojoqqqqmpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqam5ubxsbG+/v7////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////f39ysrKm5ubmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqaoqKirq6utbW1uLi4uLi4tbW1rq6uo6Ojmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqaqKio6urq////////////////////////////
|
||||
////09PT09PT////////////////////////////9fX1sbGxmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqanJyctLS0z8/P5eXl+fn5////////////////////////////////+/v76enp
|
||||
1NTUvLy8oaGhmpqampqampqampqampqampqampqampqampqampqampqampqampqanJyc1tbW////////
|
||||
////////////////////09PT09PT////////////////////////6+vrpKSkmpqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqasrKy2NjY+fn5////////////////////////////////////////
|
||||
/////////////////////////v7+5eXlwsLCn5+fmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqaxcXF/v7+////////////////////09PT09PT////////////////////5OTkn5+fmpqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ubvr6+7Ozs////////////////////////////////////
|
||||
////////////////////////////////////////////////////+vr61NTUpqammpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqavb29/v7+////////////////09PT09PT////////////////4+Pj
|
||||
nZ2dmpqampqampqampqampqampqampqampqampqampqauLi47+/v////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////f39
|
||||
1dXVoqKimpqampqampqampqampqampqampqampqampqampqavb29/v7+////////////09PT09PT////
|
||||
////////6OjonZ2dmpqampqampqampqampqampqampqampqampqapaWl4eHh////////////////////
|
||||
////////////////////////+/v76enp3d3d19fX19fX3d3d6enp+/v7////////////////////////
|
||||
////////////////////+fn5w8PDmpqampqampqampqampqampqampqampqampqampqaxsbG////////
|
||||
////09PT09PT////////8vLyoaGhmpqampqampqampqampqampqampqampqampqavr6++fn5////////
|
||||
////////////////////////////9vb20NDQsLCwm5ubmpqampqampqampqampqampqam5ubsLCw0NDQ
|
||||
9vb2////////////////////////////////////////5OTkpKSkmpqampqampqampqampqampqampqa
|
||||
mpqampqa29vb////////09PT09PT/////f39rq6umpqampqampqampqampqampqampqampqanJyc19fX
|
||||
////////////////////////////////////9/f3xMTEnZ2dmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqanZ2dxMTE9/f3////////////////////////////////////9vb2sbGxmpqampqa
|
||||
mpqampqampqampqampqampqan5+f8/Pz////09PT09PT////zMzMmpqampqampqampqampqampqampqa
|
||||
mpqaoKCg5ubm////////////////////////////////////39/foqKimpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqaoqKi39/f////////////////////////////////
|
||||
/////Pz8urq6mpqampqampqampqampqampqampqampqau7u7////09PT09PT8/PznZ2dmpqampqampqa
|
||||
mpqampqampqampqaoaGh7Ozs////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqazMzM////////////
|
||||
/////////////////////////f39urq6mpqampqampqampqampqampqampqampqa7Ozs09PT09PTx8fH
|
||||
mpqampqampqampqampqampqampqanp6e6urq////////////////////////////////////ysrKmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaysrK/////////////////////////////////////Pz8sLCwmpqampqampqampqampqampqampqa
|
||||
w8PD09PT09PTpaWlmpqampqampqampqampqampqampqa3t7e////////////////////////////////
|
||||
////2dnZmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqa2dnZ////////////////////////////////////8/Pzn5+fmpqampqa
|
||||
mpqampqampqampqapaWl09PT09PTm5ubmpqampqampqampqampqampqav7+/////////////////////
|
||||
////////////////8/Pznp6empqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqan5+f8/Pz////////////////////////////////
|
||||
////zc3Nmpqampqampqampqampqampqam5ub09PT09PTrKysmpqampqampqampqampqam5ub8vLy////
|
||||
////////////////////////////////vb29mpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29////////////////
|
||||
////////////////////8/PzmpqampqampqampqampqampqarKys09PT09PT39/fmpqampqampqampqa
|
||||
mpqawsLC////////////////////////////////////8fHxmpqampqampqampqampqampqampqampqa
|
||||
mpqasLCwxcXFrq6umpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam5ub
|
||||
8fHx////////////////////////////////////wsLCmpqampqampqampqampqa39/f09PT09PT////
|
||||
3d3dqKiompqaoKCgysrK/f39////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqazs7O////////////yMjImpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqazMzM/////////////////////////////////////f39ysrKoKCgmpqaqKio3d3d
|
||||
////09PT09PT////////////+/v7/v7+////////////////////////////////////////////r6+v
|
||||
mpqampqampqampqampqampqampqaqqqq/////////////////f39paWlmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqar6+v////////////////////////////////////////////
|
||||
/v7++/v7////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////f39nJycmpqampqampqampqampqampqampqavb29////////////////////uLi4mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqanJyc/v7+////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////9PT0mpqampqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa9PT0////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////+vz//f7/
|
||||
////////////////////////////////////////7+/vmpqampqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqa7u7u/////////////////////////////////////////f7/+vz/////////////09PT09PT////
|
||||
rMn/J3X/Al7/FGn/fKr/+/z/////////////////////////////////8/Pzmpqampqampqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqa8/Pz////////////////////////////////+/z/e6r/FGn/Al7/KHX/rMn/
|
||||
////09PT09PTsMv/AV7/AF7/AF7/AF7/AF7/aJ7//////////////////////////////////Pz8m5ub
|
||||
mpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ub/f39////////////////////////////////aJ7/AF7/
|
||||
AF7/AF7/AF7/Al//sMz/09PT09PTMHv/AF7/AF7/AF7/AF7/AF7/A1//4+3/////////////////////
|
||||
////////////rKysmpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqarKys////////////////////////////
|
||||
////3+r/Al7/AF7/AF7/AF7/AF7/AF7/MHv/09PT09PTBGD/AF7/AF7/AF7/AF7/AF7/AF7/hbD/////
|
||||
////////////////////////////x8fHmpqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqax8fH////////////
|
||||
////////////////////YZr/AF7/AF7/AF7/AF7/AF7/AF7/BGD/09PT09PTHm//AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/D2b/4uz/////////////////////////////7Ozsmpqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
7Ozs////////////////////////////rcr/AV7/AF7/AF7/AF7/AF7/AF7/AF7/HnD/09PT09PTaZ//
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/OoH/+Pr/////////////////////////////tbW1mpqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqatbW1////////////////////////////zN7/DGX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
dKX/09PT09PTz+D/AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH//P3/////////////////////////
|
||||
7e3tm5ubmpqampqampqampqampqauLi4////////////////////srKympqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqanJyc7e3t////////////////////////0OD/FGn/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/CWP/4+z/09PT09PT////VJH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH/+fv/////
|
||||
////////////////////zs7OmpqampqampqampqampqanZ2d8vLy////////////7e3tm5ubmpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqazs7O////////////////////////wtf/EWj/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/gK3/////09PT09PT////4ez/Dmb/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/PYP/6fD//////////////////////v7+vb29mpqampqampqampqampqaqKio4+Pj+fn54ODg
|
||||
paWlmpqampqampqampqampqampqampqampqampqampqampqampqavLy8/v7+////////////////////
|
||||
nL//B2L/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/NH3/+vv/////09PT09PT////////pcX/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/G27/vtX//////////////////////f39vb29mpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29/f39////////
|
||||
////////8fb/Xpj/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/3+r/////////09PT09PT////
|
||||
////////c6T/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Al//bKD/8fb/////////////////////
|
||||
0NDQnJycmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqanJyc0NDQ
|
||||
////////////////////ttD/H3D/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CmT/xtr/////////
|
||||
////09PT09PT/////////////f3/WZX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/GGz/mL3/
|
||||
+/z/////////////////7u7utra2mpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqatra27u7u////////////////2OX/T47/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/
|
||||
utL/////////////////09PT09PT////////////////+vz/WZT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/InL/lbr/9Pj/////////////////6urqwsLCoqKimpqampqampqampqampqampqa
|
||||
mpqampqaoqKiwsLC6urq////////////////0+L/XZf/BGD/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/DWX/vdT/////////////////////09PT09PT/////////////////////P3/bqL/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/EGf/Z53/wdb//P3//////////////v7+7e3t2tra
|
||||
zs7OyMjIyMjIzs7O2tra7e3t/v7+////////////8PX/oMH/P4T/AV7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/HG7/z9//////////////////////////09PT09PT////////////////////
|
||||
////////mL3/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/WJT/lrv/
|
||||
ytz/9fn/////////////////////////////////8fb/wdb/iLL/RIj/B2L/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/PYP/5+//////////////////////////////09PT09PT////
|
||||
////////////////////////////zN7/JnT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al7/Gm3/NH3/Ron/To7/T47/R4n/NH3/GGz/AV3/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/A1//fKv/+/z/////////////////////////////
|
||||
////09PT09PT////////////////////////////////////9Pj/cKP/Al//AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Knf/x9r/////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////zd7/PIP/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Dmb/ibP/+fv/////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////////v7/sc3/MXz/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/cKP/6fH/
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
/////////////////////////////////////v//uNH/Sov/Al7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/
|
||||
e6r/5+//////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////4Or/hLD/LXj/AV7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
BmH/TI3/qcf/9/r/////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////3en/l7z/V5P/HW//AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
A17/KXb/Zp3/q8n/7/X/////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////v//7PL/wtf/n8H/g6//bqL/YJn/WZT/WJT/X5n/
|
||||
bqL/hLD/osP/x9r/8fb/////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
526
GUI.NET/Forms/frmMain.Designer.cs
generated
Normal file
526
GUI.NET/Forms/frmMain.Designer.cs
generated
Normal file
|
@ -0,0 +1,526 @@
|
|||
namespace Mesen.GUI.Forms
|
||||
{
|
||||
partial class frmMain
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if(disposing && (components != null)) {
|
||||
components.Dispose();
|
||||
}
|
||||
if(_notifListener != null) {
|
||||
_notifListener.Dispose();
|
||||
_notifListener = null;
|
||||
}
|
||||
StopEmu();
|
||||
InteropEmu.Release();
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));
|
||||
this.menuStrip = new System.Windows.Forms.MenuStrip();
|
||||
this.mnuFile = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuOpen = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuRecentFiles = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuGame = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuPause = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuReset = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuOptions = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuLimitFPS = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuShowFPS = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuInputDevices = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuVideoConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuAudioConfig = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuTools = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuNetPlay = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStartServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStopServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuFindServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuConnect = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDisconnect = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuProfile = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuMovies = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuPlayMovie = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRecordFrom = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRecordFromStart = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuRecordFromNow = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuStopMovie = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuDebugger = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuTakeScreenshot = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuHelp = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuCheckForUpdates = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuAbout = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuSaveState = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuLoadState = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuSaveState1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuLoadState1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.dxViewer = new Mesen.GUI.Controls.DXViewer();
|
||||
this.menuStrip.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// menuStrip
|
||||
//
|
||||
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuFile,
|
||||
this.mnuGame,
|
||||
this.mnuOptions,
|
||||
this.mnuTools,
|
||||
this.mnuHelp});
|
||||
this.menuStrip.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip.Name = "menuStrip";
|
||||
this.menuStrip.Size = new System.Drawing.Size(365, 24);
|
||||
this.menuStrip.TabIndex = 0;
|
||||
this.menuStrip.Text = "menuStrip1";
|
||||
//
|
||||
// mnuFile
|
||||
//
|
||||
this.mnuFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuOpen,
|
||||
this.toolStripMenuItem4,
|
||||
this.mnuSaveState,
|
||||
this.mnuLoadState,
|
||||
this.toolStripMenuItem7,
|
||||
this.mnuRecentFiles,
|
||||
this.toolStripMenuItem6,
|
||||
this.mnuExit});
|
||||
this.mnuFile.Name = "mnuFile";
|
||||
this.mnuFile.Size = new System.Drawing.Size(37, 20);
|
||||
this.mnuFile.Text = "File";
|
||||
//
|
||||
// mnuOpen
|
||||
//
|
||||
this.mnuOpen.Name = "mnuOpen";
|
||||
this.mnuOpen.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
|
||||
this.mnuOpen.Size = new System.Drawing.Size(146, 22);
|
||||
this.mnuOpen.Text = "Open";
|
||||
this.mnuOpen.Click += new System.EventHandler(this.mnuOpen_Click);
|
||||
//
|
||||
// toolStripMenuItem4
|
||||
//
|
||||
this.toolStripMenuItem4.Name = "toolStripMenuItem4";
|
||||
this.toolStripMenuItem4.Size = new System.Drawing.Size(143, 6);
|
||||
//
|
||||
// mnuRecentFiles
|
||||
//
|
||||
this.mnuRecentFiles.Name = "mnuRecentFiles";
|
||||
this.mnuRecentFiles.Size = new System.Drawing.Size(146, 22);
|
||||
this.mnuRecentFiles.Text = "Recent Files";
|
||||
//
|
||||
// toolStripMenuItem6
|
||||
//
|
||||
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
|
||||
this.toolStripMenuItem6.Size = new System.Drawing.Size(143, 6);
|
||||
//
|
||||
// mnuExit
|
||||
//
|
||||
this.mnuExit.Name = "mnuExit";
|
||||
this.mnuExit.Size = new System.Drawing.Size(146, 22);
|
||||
this.mnuExit.Text = "Exit";
|
||||
this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
|
||||
//
|
||||
// mnuGame
|
||||
//
|
||||
this.mnuGame.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuPause,
|
||||
this.mnuReset,
|
||||
this.mnuStop});
|
||||
this.mnuGame.Name = "mnuGame";
|
||||
this.mnuGame.Size = new System.Drawing.Size(50, 20);
|
||||
this.mnuGame.Text = "Game";
|
||||
//
|
||||
// mnuPause
|
||||
//
|
||||
this.mnuPause.Enabled = false;
|
||||
this.mnuPause.Name = "mnuPause";
|
||||
this.mnuPause.ShortcutKeyDisplayString = "Esc";
|
||||
this.mnuPause.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuPause.Text = "Pause";
|
||||
this.mnuPause.Click += new System.EventHandler(this.mnuPause_Click);
|
||||
//
|
||||
// mnuReset
|
||||
//
|
||||
this.mnuReset.Enabled = false;
|
||||
this.mnuReset.Name = "mnuReset";
|
||||
this.mnuReset.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuReset.Text = "Reset";
|
||||
this.mnuReset.Click += new System.EventHandler(this.mnuReset_Click);
|
||||
//
|
||||
// mnuStop
|
||||
//
|
||||
this.mnuStop.Enabled = false;
|
||||
this.mnuStop.Name = "mnuStop";
|
||||
this.mnuStop.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuStop.Text = "Stop";
|
||||
this.mnuStop.Click += new System.EventHandler(this.mnuStop_Click);
|
||||
//
|
||||
// mnuOptions
|
||||
//
|
||||
this.mnuOptions.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuLimitFPS,
|
||||
this.mnuShowFPS,
|
||||
this.toolStripMenuItem1,
|
||||
this.mnuInputDevices,
|
||||
this.mnuVideoConfig,
|
||||
this.mnuAudioConfig});
|
||||
this.mnuOptions.Name = "mnuOptions";
|
||||
this.mnuOptions.Size = new System.Drawing.Size(61, 20);
|
||||
this.mnuOptions.Text = "Options";
|
||||
//
|
||||
// mnuLimitFPS
|
||||
//
|
||||
this.mnuLimitFPS.Checked = true;
|
||||
this.mnuLimitFPS.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.mnuLimitFPS.Name = "mnuLimitFPS";
|
||||
this.mnuLimitFPS.ShortcutKeys = System.Windows.Forms.Keys.F9;
|
||||
this.mnuLimitFPS.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuLimitFPS.Text = "Limit FPS";
|
||||
this.mnuLimitFPS.Click += new System.EventHandler(this.mnuLimitFPS_Click);
|
||||
//
|
||||
// mnuShowFPS
|
||||
//
|
||||
this.mnuShowFPS.Name = "mnuShowFPS";
|
||||
this.mnuShowFPS.ShortcutKeys = System.Windows.Forms.Keys.F10;
|
||||
this.mnuShowFPS.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuShowFPS.Text = "Show FPS";
|
||||
this.mnuShowFPS.Click += new System.EventHandler(this.mnuShowFPS_Click);
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(149, 6);
|
||||
//
|
||||
// mnuInputDevices
|
||||
//
|
||||
this.mnuInputDevices.Enabled = false;
|
||||
this.mnuInputDevices.Name = "mnuInputDevices";
|
||||
this.mnuInputDevices.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuInputDevices.Text = "Input Devices";
|
||||
//
|
||||
// mnuVideoConfig
|
||||
//
|
||||
this.mnuVideoConfig.Enabled = false;
|
||||
this.mnuVideoConfig.Name = "mnuVideoConfig";
|
||||
this.mnuVideoConfig.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuVideoConfig.Text = "Video";
|
||||
this.mnuVideoConfig.Click += new System.EventHandler(this.mnuVideoConfig_Click);
|
||||
//
|
||||
// mnuAudioConfig
|
||||
//
|
||||
this.mnuAudioConfig.Enabled = false;
|
||||
this.mnuAudioConfig.Name = "mnuAudioConfig";
|
||||
this.mnuAudioConfig.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuAudioConfig.Text = "Audio";
|
||||
//
|
||||
// mnuTools
|
||||
//
|
||||
this.mnuTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuNetPlay,
|
||||
this.mnuMovies,
|
||||
this.mnuDebugger,
|
||||
this.mnuTakeScreenshot});
|
||||
this.mnuTools.Name = "mnuTools";
|
||||
this.mnuTools.Size = new System.Drawing.Size(48, 20);
|
||||
this.mnuTools.Text = "Tools";
|
||||
//
|
||||
// mnuNetPlay
|
||||
//
|
||||
this.mnuNetPlay.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuStartServer,
|
||||
this.mnuStopServer,
|
||||
this.toolStripMenuItem2,
|
||||
this.mnuFindServer,
|
||||
this.mnuConnect,
|
||||
this.mnuDisconnect,
|
||||
this.toolStripMenuItem3,
|
||||
this.mnuProfile});
|
||||
this.mnuNetPlay.Name = "mnuNetPlay";
|
||||
this.mnuNetPlay.Size = new System.Drawing.Size(185, 22);
|
||||
this.mnuNetPlay.Text = "Net Play";
|
||||
//
|
||||
// mnuStartServer
|
||||
//
|
||||
this.mnuStartServer.Name = "mnuStartServer";
|
||||
this.mnuStartServer.Size = new System.Drawing.Size(177, 22);
|
||||
this.mnuStartServer.Text = "Start Server";
|
||||
this.mnuStartServer.Click += new System.EventHandler(this.mnuStartServer_Click);
|
||||
//
|
||||
// mnuStopServer
|
||||
//
|
||||
this.mnuStopServer.Name = "mnuStopServer";
|
||||
this.mnuStopServer.Size = new System.Drawing.Size(177, 22);
|
||||
this.mnuStopServer.Text = "Stop Server";
|
||||
this.mnuStopServer.Click += new System.EventHandler(this.mnuStopServer_Click);
|
||||
//
|
||||
// toolStripMenuItem2
|
||||
//
|
||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
||||
this.toolStripMenuItem2.Size = new System.Drawing.Size(174, 6);
|
||||
//
|
||||
// mnuFindServer
|
||||
//
|
||||
this.mnuFindServer.Enabled = false;
|
||||
this.mnuFindServer.Name = "mnuFindServer";
|
||||
this.mnuFindServer.Size = new System.Drawing.Size(177, 22);
|
||||
this.mnuFindServer.Text = "Find Public Server...";
|
||||
//
|
||||
// mnuConnect
|
||||
//
|
||||
this.mnuConnect.Name = "mnuConnect";
|
||||
this.mnuConnect.Size = new System.Drawing.Size(177, 22);
|
||||
this.mnuConnect.Text = "Connect...";
|
||||
this.mnuConnect.Click += new System.EventHandler(this.mnuConnect_Click);
|
||||
//
|
||||
// mnuDisconnect
|
||||
//
|
||||
this.mnuDisconnect.Name = "mnuDisconnect";
|
||||
this.mnuDisconnect.Size = new System.Drawing.Size(177, 22);
|
||||
this.mnuDisconnect.Text = "Disconnect";
|
||||
this.mnuDisconnect.Click += new System.EventHandler(this.mnuDisconnect_Click);
|
||||
//
|
||||
// toolStripMenuItem3
|
||||
//
|
||||
this.toolStripMenuItem3.Name = "toolStripMenuItem3";
|
||||
this.toolStripMenuItem3.Size = new System.Drawing.Size(174, 6);
|
||||
//
|
||||
// mnuProfile
|
||||
//
|
||||
this.mnuProfile.Name = "mnuProfile";
|
||||
this.mnuProfile.Size = new System.Drawing.Size(177, 22);
|
||||
this.mnuProfile.Text = "Configure Profile";
|
||||
this.mnuProfile.Click += new System.EventHandler(this.mnuProfile_Click);
|
||||
//
|
||||
// mnuMovies
|
||||
//
|
||||
this.mnuMovies.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuPlayMovie,
|
||||
this.mnuRecordFrom,
|
||||
this.mnuStopMovie});
|
||||
this.mnuMovies.Name = "mnuMovies";
|
||||
this.mnuMovies.Size = new System.Drawing.Size(185, 22);
|
||||
this.mnuMovies.Text = "Movies";
|
||||
//
|
||||
// mnuPlayMovie
|
||||
//
|
||||
this.mnuPlayMovie.Name = "mnuPlayMovie";
|
||||
this.mnuPlayMovie.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuPlayMovie.Text = "Play...";
|
||||
this.mnuPlayMovie.Click += new System.EventHandler(this.mnuPlayMovie_Click);
|
||||
//
|
||||
// mnuRecordFrom
|
||||
//
|
||||
this.mnuRecordFrom.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuRecordFromStart,
|
||||
this.mnuRecordFromNow});
|
||||
this.mnuRecordFrom.Name = "mnuRecordFrom";
|
||||
this.mnuRecordFrom.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuRecordFrom.Text = "Record from...";
|
||||
//
|
||||
// mnuRecordFromStart
|
||||
//
|
||||
this.mnuRecordFromStart.Name = "mnuRecordFromStart";
|
||||
this.mnuRecordFromStart.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuRecordFromStart.Text = "Start";
|
||||
this.mnuRecordFromStart.Click += new System.EventHandler(this.mnuRecordFromStart_Click);
|
||||
//
|
||||
// mnuRecordFromNow
|
||||
//
|
||||
this.mnuRecordFromNow.Name = "mnuRecordFromNow";
|
||||
this.mnuRecordFromNow.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuRecordFromNow.Text = "Now";
|
||||
this.mnuRecordFromNow.Click += new System.EventHandler(this.mnuRecordFromNow_Click);
|
||||
//
|
||||
// mnuStopMovie
|
||||
//
|
||||
this.mnuStopMovie.Name = "mnuStopMovie";
|
||||
this.mnuStopMovie.Size = new System.Drawing.Size(152, 22);
|
||||
this.mnuStopMovie.Text = "Stop";
|
||||
this.mnuStopMovie.Click += new System.EventHandler(this.mnuStopMovie_Click);
|
||||
//
|
||||
// mnuDebugger
|
||||
//
|
||||
this.mnuDebugger.Name = "mnuDebugger";
|
||||
this.mnuDebugger.Size = new System.Drawing.Size(185, 22);
|
||||
this.mnuDebugger.Text = "Debugger";
|
||||
this.mnuDebugger.Click += new System.EventHandler(this.mnuDebugger_Click);
|
||||
//
|
||||
// mnuTakeScreenshot
|
||||
//
|
||||
this.mnuTakeScreenshot.Name = "mnuTakeScreenshot";
|
||||
this.mnuTakeScreenshot.ShortcutKeys = System.Windows.Forms.Keys.F12;
|
||||
this.mnuTakeScreenshot.Size = new System.Drawing.Size(185, 22);
|
||||
this.mnuTakeScreenshot.Text = "Take Screenshot";
|
||||
this.mnuTakeScreenshot.Click += new System.EventHandler(this.mnuTakeScreenshot_Click);
|
||||
//
|
||||
// mnuHelp
|
||||
//
|
||||
this.mnuHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuCheckForUpdates,
|
||||
this.toolStripMenuItem5,
|
||||
this.mnuAbout});
|
||||
this.mnuHelp.Name = "mnuHelp";
|
||||
this.mnuHelp.Size = new System.Drawing.Size(44, 20);
|
||||
this.mnuHelp.Text = "Help";
|
||||
//
|
||||
// mnuCheckForUpdates
|
||||
//
|
||||
this.mnuCheckForUpdates.Enabled = false;
|
||||
this.mnuCheckForUpdates.Name = "mnuCheckForUpdates";
|
||||
this.mnuCheckForUpdates.Size = new System.Drawing.Size(170, 22);
|
||||
this.mnuCheckForUpdates.Text = "Check for updates";
|
||||
//
|
||||
// toolStripMenuItem5
|
||||
//
|
||||
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
|
||||
this.toolStripMenuItem5.Size = new System.Drawing.Size(167, 6);
|
||||
//
|
||||
// mnuAbout
|
||||
//
|
||||
this.mnuAbout.Enabled = false;
|
||||
this.mnuAbout.Name = "mnuAbout";
|
||||
this.mnuAbout.Size = new System.Drawing.Size(170, 22);
|
||||
this.mnuAbout.Text = "About";
|
||||
//
|
||||
// toolStripMenuItem7
|
||||
//
|
||||
this.toolStripMenuItem7.Name = "toolStripMenuItem7";
|
||||
this.toolStripMenuItem7.Size = new System.Drawing.Size(143, 6);
|
||||
//
|
||||
// mnuSaveState
|
||||
//
|
||||
this.mnuSaveState.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuSaveState1});
|
||||
this.mnuSaveState.Name = "mnuSaveState";
|
||||
this.mnuSaveState.Size = new System.Drawing.Size(146, 22);
|
||||
this.mnuSaveState.Text = "Save State";
|
||||
this.mnuSaveState.DropDownOpening += new System.EventHandler(this.mnuSaveState_DropDownOpening);
|
||||
//
|
||||
// mnuLoadState
|
||||
//
|
||||
this.mnuLoadState.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mnuLoadState1});
|
||||
this.mnuLoadState.Name = "mnuLoadState";
|
||||
this.mnuLoadState.Size = new System.Drawing.Size(146, 22);
|
||||
this.mnuLoadState.Text = "Load State";
|
||||
this.mnuLoadState.DropDownOpening += new System.EventHandler(this.mnuLoadState_DropDownOpening);
|
||||
//
|
||||
// mnuSaveState1
|
||||
//
|
||||
this.mnuSaveState1.Font = new System.Drawing.Font("Segoe UI", 9F);
|
||||
this.mnuSaveState1.Name = "mnuSaveState1";
|
||||
this.mnuSaveState1.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.F1)));
|
||||
this.mnuSaveState1.Size = new System.Drawing.Size(187, 22);
|
||||
this.mnuSaveState1.Text = "1. <empty>";
|
||||
this.mnuSaveState1.Click += new System.EventHandler(this.mnuSaveState1_Click);
|
||||
//
|
||||
// mnuLoadState1
|
||||
//
|
||||
this.mnuLoadState1.Name = "mnuLoadState1";
|
||||
this.mnuLoadState1.ShortcutKeys = System.Windows.Forms.Keys.F1;
|
||||
this.mnuLoadState1.Size = new System.Drawing.Size(155, 22);
|
||||
this.mnuLoadState1.Text = "1. <empty>";
|
||||
this.mnuLoadState1.Click += new System.EventHandler(this.mnuLoadState1_Click);
|
||||
//
|
||||
// dxViewer
|
||||
//
|
||||
this.dxViewer.BackColor = System.Drawing.Color.Black;
|
||||
this.dxViewer.Location = new System.Drawing.Point(0, 24);
|
||||
this.dxViewer.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.dxViewer.Name = "dxViewer";
|
||||
this.dxViewer.Size = new System.Drawing.Size(1024, 896);
|
||||
this.dxViewer.TabIndex = 1;
|
||||
//
|
||||
// frmMain
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.ClientSize = new System.Drawing.Size(365, 272);
|
||||
this.Controls.Add(this.dxViewer);
|
||||
this.Controls.Add(this.menuStrip);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MainMenuStrip = this.menuStrip;
|
||||
this.Name = "frmMain";
|
||||
this.Text = "Mesen";
|
||||
this.menuStrip.ResumeLayout(false);
|
||||
this.menuStrip.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.MenuStrip menuStrip;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFile;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuOpen;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuGame;
|
||||
private Mesen.GUI.Controls.DXViewer dxViewer;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuPause;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuReset;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStop;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuOptions;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuLimitFPS;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowFPS;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuInputDevices;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuVideoConfig;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuAudioConfig;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuTools;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuNetPlay;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStartServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStopServer;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuConnect;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuDisconnect;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuProfile;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuMovies;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuPlayMovie;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuDebugger;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuTakeScreenshot;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRecordFrom;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRecordFromStart;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRecordFromNow;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuStopMovie;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuExit;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuFindServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuHelp;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuCheckForUpdates;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuAbout;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuRecentFiles;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem6;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuSaveState;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuLoadState;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem7;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuSaveState1;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuLoadState1;
|
||||
}
|
||||
}
|
||||
|
353
GUI.NET/Forms/frmMain.cs
Normal file
353
GUI.NET/Forms/frmMain.cs
Normal file
|
@ -0,0 +1,353 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Mesen.GUI.Debugger;
|
||||
using Mesen.GUI.Forms.NetPlay;
|
||||
|
||||
namespace Mesen.GUI.Forms
|
||||
{
|
||||
public partial class frmMain : Form
|
||||
{
|
||||
private InteropEmu.NotificationListener _notifListener;
|
||||
private Thread _emuThread;
|
||||
private Thread _renderThread;
|
||||
private bool _stop = false;
|
||||
|
||||
public frmMain()
|
||||
{
|
||||
Application.ThreadException += Application_ThreadException;
|
||||
InitializeComponent();
|
||||
|
||||
InteropEmu.InitializeEmu(this.Handle, this.dxViewer.Handle);
|
||||
InteropEmu.SetFlags((int)EmulationFlags.LimitFPS);
|
||||
_notifListener = new InteropEmu.NotificationListener();
|
||||
_notifListener.OnNotification += _notifListener_OnNotification;
|
||||
|
||||
UpdateMenus();
|
||||
UpdateRecentFiles();
|
||||
StartRenderThread();
|
||||
}
|
||||
|
||||
void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
|
||||
{
|
||||
MessageBox.Show(e.Exception.ToString(), "Unexpected Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
void _notifListener_OnNotification(InteropEmu.NotificationEventArgs e)
|
||||
{
|
||||
if(e.NotificationType == InteropEmu.ConsoleNotificationType.GameLoaded) {
|
||||
this.StartEmuThread();
|
||||
}
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
private void mnuOpen_Click(object sender, EventArgs e)
|
||||
{
|
||||
OpenFileDialog ofd = new OpenFileDialog();
|
||||
ofd.Filter = "All supported formats (*.nes, *.zip)|*.NES;*.ZIP|NES Roms (*.nes)|*.NES|ZIP Archives (*.zip)|*.ZIP|All (*.*)|*.*";
|
||||
if(ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
|
||||
LoadROM(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadROM(string filename)
|
||||
{
|
||||
ConfigManager.Config.AddRecentFile(filename);
|
||||
InteropEmu.LoadROM(filename);
|
||||
UpdateRecentFiles();
|
||||
}
|
||||
|
||||
private void UpdateMenus()
|
||||
{
|
||||
try {
|
||||
if(this.InvokeRequired) {
|
||||
this.BeginInvoke((MethodInvoker)(() => this.UpdateMenus()));
|
||||
} else {
|
||||
mnuSaveState.Enabled = mnuLoadState.Enabled = mnuPause.Enabled = mnuStop.Enabled = mnuReset.Enabled = (_emuThread != null && !InteropEmu.IsConnected());
|
||||
mnuPause.Text = InteropEmu.IsPaused() ? "Resume" : "Pause";
|
||||
|
||||
bool netPlay = InteropEmu.IsServerRunning() || InteropEmu.IsConnected();
|
||||
|
||||
mnuStartServer.Enabled = !netPlay;
|
||||
mnuStopServer.Enabled = !mnuStartServer.Enabled && !InteropEmu.IsConnected();
|
||||
|
||||
mnuConnect.Enabled = !netPlay;
|
||||
mnuDisconnect.Enabled = !mnuConnect.Enabled && !InteropEmu.IsServerRunning();
|
||||
|
||||
bool moviePlaying = InteropEmu.MoviePlaying();
|
||||
bool movieRecording = InteropEmu.MovieRecording();
|
||||
mnuPlayMovie.Enabled = _emuThread != null && !netPlay && !moviePlaying && !movieRecording;
|
||||
mnuStopMovie.Enabled = _emuThread != null && !netPlay && (moviePlaying || movieRecording);
|
||||
mnuRecordFrom.Enabled = _emuThread != null && !moviePlaying && !movieRecording;
|
||||
mnuRecordFromStart.Enabled = _emuThread != null && !InteropEmu.IsConnected() && !moviePlaying && !movieRecording;
|
||||
mnuRecordFromNow.Enabled = _emuThread != null && !moviePlaying && !movieRecording;
|
||||
|
||||
mnuDebugger.Enabled = !netPlay && _emuThread != null;
|
||||
|
||||
mnuTakeScreenshot.Enabled = _emuThread != null;
|
||||
}
|
||||
} catch { }
|
||||
}
|
||||
|
||||
private void UpdateRecentFiles()
|
||||
{
|
||||
mnuRecentFiles.DropDownItems.Clear();
|
||||
foreach(string filepath in ConfigManager.Config.RecentFiles) {
|
||||
ToolStripMenuItem tsmi = new ToolStripMenuItem();
|
||||
tsmi.Text = System.IO.Path.GetFileName(filepath);
|
||||
tsmi.Click += (object sender, EventArgs args) => {
|
||||
LoadROM(filepath);
|
||||
};
|
||||
mnuRecentFiles.DropDownItems.Add(tsmi);
|
||||
}
|
||||
}
|
||||
|
||||
private void StartEmuThread()
|
||||
{
|
||||
if(_emuThread == null) {
|
||||
_emuThread = new Thread(() => {
|
||||
try {
|
||||
InteropEmu.Run();
|
||||
_emuThread = null;
|
||||
} catch(Exception ex) {
|
||||
MessageBox.Show(ex.Message);
|
||||
}
|
||||
});
|
||||
_emuThread.Start();
|
||||
}
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
private void StartRenderThread()
|
||||
{
|
||||
_renderThread = new Thread(() => {
|
||||
int count = 0;
|
||||
while(true) {
|
||||
InteropEmu.Render();
|
||||
count++;
|
||||
if(count == 20) {
|
||||
count = 0;
|
||||
UpdateMenus();
|
||||
}
|
||||
System.Threading.Thread.Sleep(5);
|
||||
System.Threading.Thread.MemoryBarrier();
|
||||
if(_stop) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
_renderThread.Start();
|
||||
}
|
||||
|
||||
private void StopEmu()
|
||||
{
|
||||
InteropEmu.Stop();
|
||||
_stop = true;
|
||||
_renderThread.Join();
|
||||
}
|
||||
|
||||
private void PauseEmu()
|
||||
{
|
||||
if(InteropEmu.IsPaused()) {
|
||||
InteropEmu.Resume();
|
||||
} else {
|
||||
InteropEmu.Pause();
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetEmu()
|
||||
{
|
||||
InteropEmu.Reset();
|
||||
}
|
||||
|
||||
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
{
|
||||
if(keyData == Keys.Escape && _emuThread != null && mnuPause.Enabled) {
|
||||
PauseEmu();
|
||||
return true;
|
||||
}
|
||||
return base.ProcessCmdKey(ref msg, keyData);
|
||||
}
|
||||
|
||||
const int NumberOfSaveSlots = 5;
|
||||
private void InitializeStateMenu(ToolStripMenuItem menu, bool forSave)
|
||||
{
|
||||
menu.DropDownItems.Clear();
|
||||
for(uint i = 1; i <= frmMain.NumberOfSaveSlots; i++) {
|
||||
Int64 fileTime = InteropEmu.GetStateInfo(i);
|
||||
string label;
|
||||
if(fileTime == 0) {
|
||||
label = i.ToString() + ". <empty>";
|
||||
} else {
|
||||
DateTime dateTime = DateTime.FromFileTime(fileTime);
|
||||
label = i.ToString() + ". " + dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString();
|
||||
}
|
||||
|
||||
ToolStripMenuItem item = (ToolStripMenuItem)menu.DropDownItems.Add(label);
|
||||
uint stateIndex = i;
|
||||
item.Click += (object sender, EventArgs e) => {
|
||||
if(forSave) {
|
||||
InteropEmu.SaveState(stateIndex);
|
||||
} else {
|
||||
InteropEmu.LoadState(stateIndex);
|
||||
}
|
||||
};
|
||||
item.ShortcutKeys = (Keys)((int)Keys.F1 + i - 1);
|
||||
if(forSave) {
|
||||
item.ShortcutKeys |= Keys.Shift;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Events
|
||||
|
||||
private void mnuPause_Click(object sender, EventArgs e)
|
||||
{
|
||||
PauseEmu();
|
||||
}
|
||||
|
||||
private void mnuReset_Click(object sender, EventArgs e)
|
||||
{
|
||||
ResetEmu();
|
||||
}
|
||||
|
||||
private void mnuStop_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.Stop();
|
||||
}
|
||||
|
||||
private void mnuLimitFPS_Click(object sender, EventArgs e)
|
||||
{
|
||||
if(mnuLimitFPS.Checked) {
|
||||
InteropEmu.ClearFlags((int)EmulationFlags.LimitFPS);
|
||||
} else {
|
||||
InteropEmu.SetFlags((int)EmulationFlags.LimitFPS);
|
||||
}
|
||||
mnuLimitFPS.Checked = !mnuLimitFPS.Checked;
|
||||
}
|
||||
|
||||
private void mnuShowFPS_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void mnuStartServer_Click(object sender, EventArgs e)
|
||||
{
|
||||
frmServerConfig frm = new frmServerConfig();
|
||||
if(frm.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
|
||||
InteropEmu.StartServer(ConfigManager.Config.ServerInfo.Port);
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuConnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
frmClientConfig frm = new frmClientConfig();
|
||||
if(frm.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
|
||||
InteropEmu.Connect(ConfigManager.Config.ClientConnectionInfo.Host, ConfigManager.Config.ClientConnectionInfo.Port, ConfigManager.Config.Profile.PlayerName, ConfigManager.Config.Profile.PlayerAvatar, (UInt16)ConfigManager.Config.Profile.PlayerAvatar.Length);
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuProfile_Click(object sender, EventArgs e)
|
||||
{
|
||||
new frmPlayerProfile().ShowDialog();
|
||||
}
|
||||
|
||||
private void mnuStopServer_Click(object sender, EventArgs e)
|
||||
{
|
||||
Task.Run(() => InteropEmu.StopServer());
|
||||
}
|
||||
|
||||
private void mnuDisconnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
Task.Run(() => InteropEmu.Disconnect());
|
||||
}
|
||||
|
||||
private void mnuExit_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void mnuVideoConfig_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void mnuDebugger_Click(object sender, EventArgs e)
|
||||
{
|
||||
new frmDebugger().Show();
|
||||
}
|
||||
|
||||
private void mnuSaveState1_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.SaveState(1);
|
||||
}
|
||||
|
||||
private void mnuLoadState1_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.LoadState(1);
|
||||
}
|
||||
|
||||
private void mnuSaveState_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
InitializeStateMenu(mnuSaveState, true);
|
||||
}
|
||||
|
||||
private void mnuLoadState_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
InitializeStateMenu(mnuLoadState, false);
|
||||
}
|
||||
|
||||
private void mnuTakeScreenshot_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.TakeScreenshot();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private enum EmulationFlags
|
||||
{
|
||||
LimitFPS = 0x01,
|
||||
Paused = 0x02,
|
||||
}
|
||||
|
||||
private void RecordMovie(bool resetEmu)
|
||||
{
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.Filter = "Movie files (*.mmo)|*.mmo|All (*.*)|*.*";
|
||||
if(sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
|
||||
InteropEmu.MovieRecord(sfd.FileName, resetEmu);
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuPlayMovie_Click(object sender, EventArgs e)
|
||||
{
|
||||
OpenFileDialog ofd = new OpenFileDialog();
|
||||
ofd.Filter = "Movie files (*.mmo)|*.mmo|All (*.*)|*.*";
|
||||
if(ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
|
||||
InteropEmu.MoviePlay(ofd.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void mnuStopMovie_Click(object sender, EventArgs e)
|
||||
{
|
||||
InteropEmu.MovieStop();
|
||||
}
|
||||
|
||||
private void mnuRecordFromStart_Click(object sender, EventArgs e)
|
||||
{
|
||||
RecordMovie(true);
|
||||
}
|
||||
|
||||
private void mnuRecordFromNow_Click(object sender, EventArgs e)
|
||||
{
|
||||
RecordMovie(false);
|
||||
}
|
||||
}
|
||||
}
|
412
GUI.NET/Forms/frmMain.resx
Normal file
412
GUI.NET/Forms/frmMain.resx
Normal file
|
@ -0,0 +1,412 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAMAEBAAAAAAGABoAwAANgAAACAgAAAAABgAqAwAAJ4DAABAQAAAAAAYACgyAABGEAAAKAAAABAA
|
||||
AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT0/////////////////////////7+/v7+/v///////////////////////9PT09PT
|
||||
0////////////+np6cHBwaamppubm5qamqWlpb6+vuTk5P///////////9PT09PT0/////j4+Ly8vJqa
|
||||
mpqamq2trb6+vr6+vq6urpubm5qamrW1tfT09P///9PT09PT0/b29qqqqpqamry8vPDw8Pz8/Ofn5+fn
|
||||
5/z8/PPz88PDw5ubm6WlpfLy8tPT09PT07a2tpqamtbW1v///+Li4qKiopqampqamqKiouLi4v///9/f
|
||||
35ubm7Ozs9PT09PT06WlpcPDw/////T09J6enp6enqmpqZqampqamp6envT09P///8XFxaWlpdPT09PT
|
||||
0/f5/f7+/////9jY2JqamsTExO3t7ZqampqampqamtjY2P////7+//f5/dPT09PT0xxv/22i/////93d
|
||||
3ZqamsbGxu/v75qampqampqamt3d3f///2mg/xxv/9PT09PT00CG/wRg/67L//v7+6mpqbq6uuHh4Zqa
|
||||
mpqamqmpqfv7+5e9/wFf/0eL/9PT09PT093q/xtv/wJf/2mg/9ji9b29vaCgoKCgoL29vc/d9FeV/wBe
|
||||
/yh3/+jw/9PT09PT0////+Pt/0SJ/wBe/wJf/zR//1uX/1qX/zF8/wFf/wBe/1eV/+70/////9PT09PT
|
||||
0////////////7zU/1yY/x1w/wFf/wFf/x9x/2Kc/8jc/////////////9PT09PT0///////////////
|
||||
//////////z9//z9/////////////////////////9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT0///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/Pz84eHhycnJtra2qqqqpKSkpKSkqqqqtra2x8fH3t7e+fn5////////////////////////////////
|
||||
////09PT09PT////////////////////////////7u7uwcHBn5+fmpqampqampqampqampqampqampqa
|
||||
mpqampqampqanJycubm54+Pj////////////////////////////09PT09PT////////////////////
|
||||
8/Pzvb29m5ubmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqasLCw6Ojo
|
||||
////////////////////09PT09PT////////////////2NjYn5+fmpqampqampqampqampqampqapqam
|
||||
tbW1vb29vb29tbW1p6enmpqampqampqampqampqampqam5ubxcXF/Pz8////////////09PT09PT////
|
||||
/////f39wcHBmpqampqampqampqampqarKys1NTU8/Pz////////////////////////9vb22tratbW1
|
||||
mpqampqampqampqampqasLCw9vb2////////09PT09PT/////f39ubm5mpqampqampqampqaqqqq4eHh
|
||||
////////////////////////////////////////////////7e3tt7e3mpqampqampqampqaq6ur9/f3
|
||||
////09PT09PT////wcHBmpqampqampqampqayMjI/Pz8////////////7e3txMTEqqqqnZ2dnZ2dqqqq
|
||||
xMTE7e3t////////////////29vbn5+fmpqampqampqatLS0/v7+09PT09PT3t7empqampqampqanJyc
|
||||
3Nzc/////////////f39xsbGm5ubmpqampqampqampqampqampqam5ubxsbG/f39////////////7Ozs
|
||||
o6Ojmpqampqampqa1tbW09PT09PTrKysmpqampqampqa3d3d/////////////v7+u7u7mpqampqampqa
|
||||
mpqampqampqampqampqampqampqau7u7/v7+////////////6urqnZ2dmpqampqaqqqq09PT09PTnZ2d
|
||||
mpqampqawcHB////////////////1dXVmpqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
1dXV////////////////xcXFmpqampqanZ2d09PT09PTz8/Pm5ubqKio8/Pz/////////////v7+pKSk
|
||||
mpqampqampqavLy819fXpaWlmpqampqampqampqampqampqapaWl/v7+////////////8/PzqKiom5ub
|
||||
0NDQ09PT09PT/////Pz8/v7+////////////////6+vrmpqampqampqanp6e/f39////19fXmpqampqa
|
||||
mpqampqampqampqampqa6+vr/////////////////v7+/Pz8////09PT09PT////+Pr//v7/////////
|
||||
////////3t7empqampqampqaoqKi////////3d3dmpqampqampqampqampqampqampqa3t7e////////
|
||||
/////////v7/+Pr/////09PT09PTiLP/BWD/JXT/4ez/////////////4uLimpqampqampqaoqKi////
|
||||
////3d3dmpqampqampqampqampqampqampqa4uLi////////////4ez/JXT/BWD/ibP/09PT09PTCmT/
|
||||
AF7/AF7/b6P/////////////9vb2m5ubmpqampqaoqKi////////3d3dmpqampqampqampqampqampqa
|
||||
m5ub9vb2////////////Y5z/AF7/AF7/CmT/09PT09PTKnj/AF7/AF7/B2L/zN7/////////////ubm5
|
||||
mpqampqaoqKi////////3d3dmpqampqampqampqampqampqauLi4////////////qsj/AV//AF7/AF7/
|
||||
Lnr/09PT09PTmr7/AF7/AF7/AF7/F2z/0eH/////////8PDwn5+fmpqam5ub8fHx////yMjImpqampqa
|
||||
mpqampqampqan5+f8PDw////////qMf/BmH/AF7/AF7/AF7/rcv/09PT09PT/f3/Qof/AF7/AF7/AF7/
|
||||
DWb/pcX/////////5eXloKCgmpqaoaGhsbGxmpqampqampqampqampqaoKCg5eXl////+fv/dqf/AV//
|
||||
AF7/AF7/AF7/ZJz/////09PT09PT////7PL/Knj/AF7/AF7/AF7/AF7/Soz/0uL/////8fHxurq6m5ub
|
||||
mpqampqampqampqam5uburq68fHx////tM//KXf/AF7/AF7/AF7/AF7/UI//+vz/////09PT09PT////
|
||||
////6vH/OIH/AF7/AF7/AF7/AF7/AV//RYn/osP/6vH/9PT02trazs7Ozs7O2tra9PT04uz/k7r/L3v/
|
||||
AF7/AF7/AF7/AF7/AF7/ZJz/+vz/////////09PT09PT////////////+Pr/bqP/Al//AF7/AF7/AF7/
|
||||
AF7/AF7/AV7/InP/Ror/WJX/WZX/RYn/HnD/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ncH/////////////
|
||||
////09PT09PT////////////////////xtr/OIH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al//WZb/4u3/////////////////////09PT09PT////////////////////
|
||||
////////utP/UJD/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/DWb/ZZ3/1OP/////////
|
||||
////////////////////09PT09PT////////////////////////////////////8PX/rMr/cqX/R4r/
|
||||
Knj/G27/G27/Knj/SYv/d6n/ttD/9vn/////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////+vr66Ojo2dnZzc3NxMTE
|
||||
v7+/vLy8vLy8v7+/xcXFzc3N2NjY5ubm+Pj4////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////+fn53d3dwsLCqqqqmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqapaWlvLy81dXV8vLy////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////////////////////////////////////////Pz83Nzct7e3nJyc
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaq6urzc3N8/Pz////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////9fX1ysrK
|
||||
oqKimpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqam5ubtra24uLi////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
9vb2xcXFnZ2dmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqara2t4ODg////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////f39z8/Pn5+fmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
sbGx6+vr////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////6Ojoqqqqmpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqam5ubxsbG+/v7////////////////////////////////////09PT09PT////
|
||||
/////////////////////////////f39ysrKm5ubmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqaoqKirq6utbW1uLi4uLi4tbW1rq6uo6Ojmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqaqKio6urq////////////////////////////
|
||||
////09PT09PT////////////////////////////9fX1sbGxmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqanJyctLS0z8/P5eXl+fn5////////////////////////////////+/v76enp
|
||||
1NTUvLy8oaGhmpqampqampqampqampqampqampqampqampqampqampqampqampqanJyc1tbW////////
|
||||
////////////////////09PT09PT////////////////////////6+vrpKSkmpqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqasrKy2NjY+fn5////////////////////////////////////////
|
||||
/////////////////////////v7+5eXlwsLCn5+fmpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqaxcXF/v7+////////////////////09PT09PT////////////////////5OTkn5+fmpqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ubvr6+7Ozs////////////////////////////////////
|
||||
////////////////////////////////////////////////////+vr61NTUpqammpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqavb29/v7+////////////////09PT09PT////////////////4+Pj
|
||||
nZ2dmpqampqampqampqampqampqampqampqampqampqauLi47+/v////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////f39
|
||||
1dXVoqKimpqampqampqampqampqampqampqampqampqampqavb29/v7+////////////09PT09PT////
|
||||
////////6OjonZ2dmpqampqampqampqampqampqampqampqampqapaWl4eHh////////////////////
|
||||
////////////////////////+/v76enp3d3d19fX19fX3d3d6enp+/v7////////////////////////
|
||||
////////////////////+fn5w8PDmpqampqampqampqampqampqampqampqampqampqaxsbG////////
|
||||
////09PT09PT////////8vLyoaGhmpqampqampqampqampqampqampqampqampqavr6++fn5////////
|
||||
////////////////////////////9vb20NDQsLCwm5ubmpqampqampqampqampqampqam5ubsLCw0NDQ
|
||||
9vb2////////////////////////////////////////5OTkpKSkmpqampqampqampqampqampqampqa
|
||||
mpqampqa29vb////////09PT09PT/////f39rq6umpqampqampqampqampqampqampqampqanJyc19fX
|
||||
////////////////////////////////////9/f3xMTEnZ2dmpqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqanZ2dxMTE9/f3////////////////////////////////////9vb2sbGxmpqampqa
|
||||
mpqampqampqampqampqampqan5+f8/Pz////09PT09PT////zMzMmpqampqampqampqampqampqampqa
|
||||
mpqaoKCg5ubm////////////////////////////////////39/foqKimpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqaoqKi39/f////////////////////////////////
|
||||
/////Pz8urq6mpqampqampqampqampqampqampqampqau7u7////09PT09PT8/PznZ2dmpqampqampqa
|
||||
mpqampqampqampqaoaGh7Ozs////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqazMzM////////////
|
||||
/////////////////////////f39urq6mpqampqampqampqampqampqampqampqa7Ozs09PT09PTx8fH
|
||||
mpqampqampqampqampqampqampqanp6e6urq////////////////////////////////////ysrKmpqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqaysrK/////////////////////////////////////Pz8sLCwmpqampqampqampqampqampqampqa
|
||||
w8PD09PT09PTpaWlmpqampqampqampqampqampqampqa3t7e////////////////////////////////
|
||||
////2dnZmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqa2dnZ////////////////////////////////////8/Pzn5+fmpqampqa
|
||||
mpqampqampqampqapaWl09PT09PTm5ubmpqampqampqampqampqampqav7+/////////////////////
|
||||
////////////////8/Pznp6empqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqan5+f8/Pz////////////////////////////////
|
||||
////zc3Nmpqampqampqampqampqampqam5ub09PT09PTrKysmpqampqampqampqampqam5ub8vLy////
|
||||
////////////////////////////////vb29mpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29////////////////
|
||||
////////////////////8/PzmpqampqampqampqampqampqarKys09PT09PT39/fmpqampqampqampqa
|
||||
mpqawsLC////////////////////////////////////8fHxmpqampqampqampqampqampqampqampqa
|
||||
mpqasLCwxcXFrq6umpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqam5ub
|
||||
8fHx////////////////////////////////////wsLCmpqampqampqampqampqa39/f09PT09PT////
|
||||
3d3dqKiompqaoKCgysrK/f39////////////////////////////////////zMzMmpqampqampqampqa
|
||||
mpqampqampqampqazs7O////////////yMjImpqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqazMzM/////////////////////////////////////f39ysrKoKCgmpqaqKio3d3d
|
||||
////09PT09PT////////////+/v7/v7+////////////////////////////////////////////r6+v
|
||||
mpqampqampqampqampqampqampqaqqqq/////////////////f39paWlmpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqar6+v////////////////////////////////////////////
|
||||
/v7++/v7////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////f39nJycmpqampqampqampqampqampqampqavb29////////////////////uLi4mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqanJyc/v7+////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////9PT0mpqampqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa9PT0////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////+vz//f7/
|
||||
////////////////////////////////////////7+/vmpqampqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqa7u7u/////////////////////////////////////////f7/+vz/////////////09PT09PT////
|
||||
rMn/J3X/Al7/FGn/fKr/+/z/////////////////////////////////8/Pzmpqampqampqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqampqampqa8/Pz////////////////////////////////+/z/e6r/FGn/Al7/KHX/rMn/
|
||||
////09PT09PTsMv/AV7/AF7/AF7/AF7/AF7/aJ7//////////////////////////////////Pz8m5ub
|
||||
mpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqam5ub/f39////////////////////////////////aJ7/AF7/
|
||||
AF7/AF7/AF7/Al//sMz/09PT09PTMHv/AF7/AF7/AF7/AF7/AF7/A1//4+3/////////////////////
|
||||
////////////rKysmpqampqampqampqampqampqampqavr6+////////////////////ubm5mpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqarKys////////////////////////////
|
||||
////3+r/Al7/AF7/AF7/AF7/AF7/AF7/MHv/09PT09PTBGD/AF7/AF7/AF7/AF7/AF7/AF7/hbD/////
|
||||
////////////////////////////x8fHmpqampqampqampqampqampqampqavr6+////////////////
|
||||
////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqax8fH////////////
|
||||
////////////////////YZr/AF7/AF7/AF7/AF7/AF7/AF7/BGD/09PT09PTHm//AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/D2b/4uz/////////////////////////////7Ozsmpqampqampqampqampqampqampqavr6+
|
||||
////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
7Ozs////////////////////////////rcr/AV7/AF7/AF7/AF7/AF7/AF7/AF7/HnD/09PT09PTaZ//
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/OoH/+Pr/////////////////////////////tbW1mpqampqampqa
|
||||
mpqampqampqavr6+////////////////////ubm5mpqampqampqampqampqampqampqampqampqampqa
|
||||
mpqampqampqatbW1////////////////////////////zN7/DGX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
dKX/09PT09PTz+D/AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH//P3/////////////////////////
|
||||
7e3tm5ubmpqampqampqampqampqauLi4////////////////////srKympqampqampqampqampqampqa
|
||||
mpqampqampqampqampqampqanJyc7e3t////////////////////////0OD/FGn/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/CWP/4+z/09PT09PT////VJH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/VZH/+fv/////
|
||||
////////////////////zs7OmpqampqampqampqampqanZ2d8vLy////////////7e3tm5ubmpqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqazs7O////////////////////////wtf/EWj/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/gK3/////09PT09PT////4ez/Dmb/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/PYP/6fD//////////////////////v7+vb29mpqampqampqampqampqaqKio4+Pj+fn54ODg
|
||||
paWlmpqampqampqampqampqampqampqampqampqampqampqampqavLy8/v7+////////////////////
|
||||
nL//B2L/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/NH3/+vv/////09PT09PT////////pcX/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/G27/vtX//////////////////////f39vb29mpqampqampqampqa
|
||||
mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqavb29/f39////////
|
||||
////////8fb/Xpj/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/3+r/////////09PT09PT////
|
||||
////////c6T/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Al//bKD/8fb/////////////////////
|
||||
0NDQnJycmpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqanJyc0NDQ
|
||||
////////////////////ttD/H3D/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CmT/xtr/////////
|
||||
////09PT09PT/////////////f3/WZX/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/GGz/mL3/
|
||||
+/z/////////////////7u7utra2mpqampqampqampqampqampqampqampqampqampqampqampqampqa
|
||||
mpqatra27u7u////////////////2OX/T47/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/
|
||||
utL/////////////////09PT09PT////////////////+vz/WZT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/InL/lbr/9Pj/////////////////6urqwsLCoqKimpqampqampqampqampqampqa
|
||||
mpqampqaoqKiwsLC6urq////////////////0+L/XZf/BGD/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/DWX/vdT/////////////////////09PT09PT/////////////////////P3/bqL/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/EGf/Z53/wdb//P3//////////////v7+7e3t2tra
|
||||
zs7OyMjIyMjIzs7O2tra7e3t/v7+////////////8PX/oMH/P4T/AV7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/HG7/z9//////////////////////////09PT09PT////////////////////
|
||||
////////mL3/BmH/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/WJT/lrv/
|
||||
ytz/9fn/////////////////////////////////8fb/wdb/iLL/RIj/B2L/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/PYP/5+//////////////////////////////09PT09PT////
|
||||
////////////////////////////zN7/JnT/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/Al7/Gm3/NH3/Ron/To7/T47/R4n/NH3/GGz/AV3/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/A1//fKv/+/z/////////////////////////////
|
||||
////09PT09PT////////////////////////////////////9Pj/cKP/Al//AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Knf/x9r/////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////zd7/PIP/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/Dmb/ibP/+fv/////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
/////////////v7/sc3/MXz/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/CWP/cKP/6fH/
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
/////////////////////////////////////v//uNH/Sov/Al7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/FWr/
|
||||
e6r/5+//////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////4Or/hLD/LXj/AV7/
|
||||
AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
BmH/TI3/qcf/9/r/////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////3en/l7z/V5P/HW//AV7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/AF7/
|
||||
A17/KXb/Zp3/q8n/7/X/////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////v//7PL/wtf/n8H/g6//bqL/YJn/WZT/WJT/X5n/
|
||||
bqL/hLD/osP/x9r/8fb/////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////09PT09PT////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////09PT09PT////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////09PT09PT////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////09PT09PT////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT
|
||||
09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
185
GUI.NET/GUI.NET.csproj
Normal file
185
GUI.NET/GUI.NET.csproj
Normal file
|
@ -0,0 +1,185 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{08D83A7E-52A9-451E-A53A-1A7946F8BB77}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Mesen.GUI</RootNamespace>
|
||||
<AssemblyName>Mesen</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Icon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ConfigManager\ConfigManager.cs" />
|
||||
<Compile Include="Controls\DXViewer.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Controls\DXViewer.Designer.cs">
|
||||
<DependentUpon>DXViewer.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlConsoleStatus.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlConsoleStatus.Designer.cs">
|
||||
<DependentUpon>ctrlConsoleStatus.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlDebuggerCode.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlDebuggerCode.Designer.cs">
|
||||
<DependentUpon>ctrlDebuggerCode.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlSyncTextBox.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlWatch.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\Controls\ctrlWatch.Designer.cs">
|
||||
<DependentUpon>ctrlWatch.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\frmDebugger.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Debugger\frmDebugger.Designer.cs">
|
||||
<DependentUpon>frmDebugger.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\BaseConfigForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\Config\frmVideoConfig.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\Config\frmVideoConfig.Designer.cs">
|
||||
<DependentUpon>frmVideoConfig.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetPlay\frmClientConfig.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetPlay\frmClientConfig.Designer.cs">
|
||||
<DependentUpon>frmClientConfig.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\frmMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\frmMain.Designer.cs">
|
||||
<DependentUpon>frmMain.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetPlay\frmPlayerProfile.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetPlay\frmPlayerProfile.Designer.cs">
|
||||
<DependentUpon>frmPlayerProfile.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetPlay\frmServerConfig.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\NetPlay\frmServerConfig.Designer.cs">
|
||||
<DependentUpon>frmServerConfig.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="InteropEmu.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="Debugger\Controls\ctrlConsoleStatus.resx">
|
||||
<DependentUpon>ctrlConsoleStatus.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Debugger\Controls\ctrlDebuggerCode.resx">
|
||||
<DependentUpon>ctrlDebuggerCode.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Debugger\Controls\ctrlWatch.resx">
|
||||
<DependentUpon>ctrlWatch.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Debugger\frmDebugger.resx">
|
||||
<DependentUpon>frmDebugger.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\Config\frmVideoConfig.resx">
|
||||
<DependentUpon>frmVideoConfig.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\frmMain.resx">
|
||||
<DependentUpon>frmMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetPlay\frmClientConfig.resx">
|
||||
<DependentUpon>frmClientConfig.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetPlay\frmPlayerProfile.resx">
|
||||
<DependentUpon>frmPlayerProfile.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Forms\NetPlay\frmServerConfig.resx">
|
||||
<DependentUpon>frmServerConfig.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Icon.ico" />
|
||||
<None Include="Resources\MesenLogo.bmp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
BIN
GUI.NET/Icon.bmp
Normal file
BIN
GUI.NET/Icon.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
BIN
GUI.NET/Icon.ico
Normal file
BIN
GUI.NET/Icon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
195
GUI.NET/InteropEmu.cs
Normal file
195
GUI.NET/InteropEmu.cs
Normal file
|
@ -0,0 +1,195 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Mesen.GUI
|
||||
{
|
||||
public class InteropEmu
|
||||
{
|
||||
private const string DLLPath = "WinMesen.dll";
|
||||
[DllImport(DLLPath)] public static extern void InitializeEmu(IntPtr windowHandle, IntPtr dxViewerHandle);
|
||||
[DllImport(DLLPath)] public static extern void Release();
|
||||
[DllImport(DLLPath)] public static extern void LoadROM([MarshalAs(UnmanagedType.LPWStr)]string filename);
|
||||
[DllImport(DLLPath)] public static extern void Run();
|
||||
[DllImport(DLLPath)] public static extern void Pause();
|
||||
[DllImport(DLLPath)] public static extern void Resume();
|
||||
[DllImport(DLLPath)] public static extern bool IsPaused();
|
||||
[DllImport(DLLPath)] public static extern void Stop();
|
||||
[DllImport(DLLPath)] public static extern void Reset();
|
||||
[DllImport(DLLPath)] public static extern void SetFlags(int flags);
|
||||
[DllImport(DLLPath)] public static extern void ClearFlags(int flags);
|
||||
[DllImport(DLLPath)] public static extern void StartServer(UInt16 port);
|
||||
[DllImport(DLLPath)] public static extern void StopServer();
|
||||
[DllImport(DLLPath)] public static extern bool IsServerRunning();
|
||||
[DllImport(DLLPath)] public static extern void Connect(string host, UInt16 port, [MarshalAs(UnmanagedType.LPWStr)]string playerName, byte[] avatarData, UInt32 avatarSize);
|
||||
[DllImport(DLLPath)] public static extern void Disconnect();
|
||||
[DllImport(DLLPath)] public static extern bool IsConnected();
|
||||
[DllImport(DLLPath)] public static extern void Render();
|
||||
[DllImport(DLLPath)] public static extern IntPtr RegisterNotificationCallback(NotificationListener.NotificationCallback callback);
|
||||
[DllImport(DLLPath)] public static extern void UnregisterNotificationCallback(IntPtr notificationListener);
|
||||
|
||||
[DllImport(DLLPath)] public static extern void TakeScreenshot();
|
||||
|
||||
[DllImport(DLLPath)] public static extern void MoviePlay([MarshalAs(UnmanagedType.LPWStr)]string filename);
|
||||
[DllImport(DLLPath)] public static extern void MovieRecord([MarshalAs(UnmanagedType.LPWStr)]string filename, bool reset);
|
||||
[DllImport(DLLPath)] public static extern void MovieStop();
|
||||
[DllImport(DLLPath)] public static extern bool MoviePlaying();
|
||||
[DllImport(DLLPath)] public static extern bool MovieRecording();
|
||||
|
||||
[DllImport(DLLPath)] public static extern void SaveState(UInt32 stateIndex);
|
||||
[DllImport(DLLPath)] public static extern void LoadState(UInt32 stateIndex);
|
||||
[DllImport(DLLPath)] public static extern Int64 GetStateInfo(UInt32 stateIndex);
|
||||
|
||||
[DllImport(DLLPath)] public static extern void DebugInitialize();
|
||||
[DllImport(DLLPath)] public static extern void DebugRelease();
|
||||
[DllImport(DLLPath)] public static extern void DebugGetState(ref DebugState state);
|
||||
//[DllImport(DLLPath)] public static extern void DebugSetBreakpoints();
|
||||
[DllImport(DLLPath)] public static extern void DebugStep(UInt32 count);
|
||||
[DllImport(DLLPath)] public static extern void DebugStepCycles(UInt32 count);
|
||||
[DllImport(DLLPath)] public static extern void DebugStepOut();
|
||||
[DllImport(DLLPath)] public static extern void DebugStepOver();
|
||||
[DllImport(DLLPath)] public static extern void DebugRun();
|
||||
[DllImport(DLLPath)] public static extern bool DebugIsCodeChanged();
|
||||
[DllImport(DLLPath)] public static extern IntPtr DebugGetCode();
|
||||
[DllImport(DLLPath)] public static extern Byte DebugGetMemoryValue(UInt32 addr);
|
||||
[DllImport(DLLPath)] public static extern UInt32 DebugGetRelativeAddress(UInt32 addr);
|
||||
|
||||
public enum ConsoleNotificationType
|
||||
{
|
||||
GameLoaded = 0,
|
||||
StateLoaded = 1,
|
||||
GameReset = 2,
|
||||
GamePaused = 3,
|
||||
GameResumed = 4,
|
||||
GameStopped = 5,
|
||||
CodeBreak = 6,
|
||||
}
|
||||
|
||||
public class NotificationEventArgs
|
||||
{
|
||||
public ConsoleNotificationType NotificationType;
|
||||
}
|
||||
|
||||
public class NotificationListener : IDisposable
|
||||
{
|
||||
public delegate void NotificationCallback(int type);
|
||||
public delegate void NotificationEventHandler(NotificationEventArgs e);
|
||||
public event NotificationEventHandler OnNotification;
|
||||
|
||||
//Need to keep a reference to this callback, or it will get garbage collected (since the only reference to it is on the native side)
|
||||
NotificationCallback _callback;
|
||||
IntPtr _notificationListener;
|
||||
|
||||
public NotificationListener()
|
||||
{
|
||||
_callback = (int type) => {
|
||||
this.ProcessNotification(type);
|
||||
};
|
||||
_notificationListener = InteropEmu.RegisterNotificationCallback(_callback);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
InteropEmu.UnregisterNotificationCallback(_notificationListener);
|
||||
}
|
||||
|
||||
public void ProcessNotification(int type)
|
||||
{
|
||||
if(this.OnNotification != null) {
|
||||
this.OnNotification(new NotificationEventArgs() { NotificationType = (ConsoleNotificationType)type });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public struct DebugState
|
||||
{
|
||||
public CPUState CPU;
|
||||
public PPUDebugState PPU;
|
||||
}
|
||||
|
||||
public struct PPUDebugState
|
||||
{
|
||||
public PPUControlFlags ControlFlags;
|
||||
public PPUStatusFlags StatusFlags;
|
||||
public PPUState State;
|
||||
public Int32 Scanline;
|
||||
public UInt32 Cycle;
|
||||
}
|
||||
|
||||
public struct PPUState
|
||||
{
|
||||
public Byte Control;
|
||||
public Byte Mask;
|
||||
public Byte Status;
|
||||
public UInt32 SpriteRamAddr;
|
||||
public UInt16 VideoRamAddr;
|
||||
public Byte XScroll;
|
||||
public UInt16 TmpVideoRamAddr;
|
||||
public Byte WriteToggle;
|
||||
|
||||
public UInt16 HighBitShift;
|
||||
public UInt16 LowBitShift;
|
||||
}
|
||||
|
||||
public struct PPUControlFlags
|
||||
{
|
||||
public Byte VerticalWrite;
|
||||
public UInt16 SpritePatternAddr;
|
||||
public UInt16 BackgroundPatternAddr;
|
||||
public Byte LargeSprites;
|
||||
public Byte VBlank;
|
||||
|
||||
public Byte Grayscale;
|
||||
public Byte BackgroundMask;
|
||||
public Byte SpriteMask;
|
||||
public Byte BackgroundEnabled;
|
||||
public Byte SpritesEnabled;
|
||||
public Byte IntensifyRed;
|
||||
public Byte IntensifyGreen;
|
||||
public Byte IntensifyBlue;
|
||||
}
|
||||
|
||||
public struct PPUStatusFlags
|
||||
{
|
||||
public Byte SpriteOverflow;
|
||||
public Byte Sprite0Hit;
|
||||
public Byte VerticalBlank;
|
||||
}
|
||||
|
||||
public struct CPUState
|
||||
{
|
||||
public UInt16 PC;
|
||||
public Byte SP;
|
||||
public Byte A;
|
||||
public Byte X;
|
||||
public Byte Y;
|
||||
public Byte PS;
|
||||
public IRQSource IRQFlag;
|
||||
public bool NMIFlag;
|
||||
};
|
||||
|
||||
[Flags]
|
||||
public enum IRQSource : uint
|
||||
{
|
||||
External = 1,
|
||||
FrameCounter = 2,
|
||||
DMC = 4,
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum PSFlags
|
||||
{
|
||||
Carry = 0x01,
|
||||
Zero = 0x02,
|
||||
Interrupt = 0x04,
|
||||
Decimal = 0x08,
|
||||
Break = 0x10,
|
||||
Reserved = 0x20,
|
||||
Overflow = 0x40,
|
||||
Negative = 0x80
|
||||
}
|
||||
}
|
22
GUI.NET/Program.cs
Normal file
22
GUI.NET/Program.cs
Normal file
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Mesen.GUI
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new Mesen.GUI.Forms.frmMain());
|
||||
}
|
||||
}
|
||||
}
|
36
GUI.NET/Properties/AssemblyInfo.cs
Normal file
36
GUI.NET/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Mesen")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Mesen")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("c8d4fadf-6247-47bc-8cd5-4c2e29812c3c")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
73
GUI.NET/Properties/Resources.Designer.cs
generated
Normal file
73
GUI.NET/Properties/Resources.Designer.cs
generated
Normal file
|
@ -0,0 +1,73 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.18408
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Mesen.GUI.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Mesen.GUI.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap MesenLogo {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("MesenLogo", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
124
GUI.NET/Properties/Resources.resx
Normal file
124
GUI.NET/Properties/Resources.resx
Normal file
|
@ -0,0 +1,124 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="MesenLogo" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\MesenLogo.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
26
GUI.NET/Properties/Settings.Designer.cs
generated
Normal file
26
GUI.NET/Properties/Settings.Designer.cs
generated
Normal file
|
@ -0,0 +1,26 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.18408
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Mesen.GUI.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
7
GUI.NET/Properties/Settings.settings
Normal file
7
GUI.NET/Properties/Settings.settings
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
BIN
GUI.NET/Resources/MesenLogo.bmp
Normal file
BIN
GUI.NET/Resources/MesenLogo.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
|
@ -99,37 +99,14 @@
|
|||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="DebugWindow.h" />
|
||||
<ClInclude Include="DirectXTK\Audio.h" />
|
||||
<ClInclude Include="DirectXTK\CommonStates.h" />
|
||||
<ClInclude Include="DirectXTK\DDSTextureLoader.h" />
|
||||
<ClInclude Include="DirectXTK\DirectXHelpers.h" />
|
||||
<ClInclude Include="DirectXTK\Effects.h" />
|
||||
<ClInclude Include="DirectXTK\GeometricPrimitive.h" />
|
||||
<ClInclude Include="DirectXTK\Model.h" />
|
||||
<ClInclude Include="DirectXTK\PrimitiveBatch.h" />
|
||||
<ClInclude Include="DirectXTK\ScreenGrab.h" />
|
||||
<ClInclude Include="DirectXTK\SimpleMath.h" />
|
||||
<ClInclude Include="DirectXTK\SpriteBatch.h" />
|
||||
<ClInclude Include="DirectXTK\SpriteFont.h" />
|
||||
<ClInclude Include="DirectXTK\VertexTypes.h" />
|
||||
<ClInclude Include="DirectXTK\WICTextureLoader.h" />
|
||||
<ClInclude Include="DirectXTK\XboxDDSTextureLoader.h" />
|
||||
<ClInclude Include="GamePad.h" />
|
||||
<ClInclude Include="InputManager.h" />
|
||||
<ClInclude Include="NavigationHistory.h" />
|
||||
<ClInclude Include="Renderer.h" />
|
||||
<ClInclude Include="Resource.h" />
|
||||
<ClInclude Include="SoundManager.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="MainWindow.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="DebugWindow.cpp" />
|
||||
<ClCompile Include="GamePad.cpp" />
|
||||
<ClCompile Include="InputManager.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="Renderer.cpp" />
|
||||
<ClCompile Include="SoundManager.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
|
@ -157,7 +134,6 @@
|
|||
<None Include="Calibri.30.spritefont">
|
||||
<DeploymentContent>true</DeploymentContent>
|
||||
</None>
|
||||
<None Include="DirectXTK\SimpleMath.inl" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Calibri.30.spritefont">
|
||||
|
|
|
@ -13,9 +13,6 @@
|
|||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\DirectXTK">
|
||||
<UniqueIdentifier>{e3fb11e9-60dd-47df-8444-72d62eb07828}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Debugger">
|
||||
<UniqueIdentifier>{5c2b5caf-e71a-40cc-823a-625c65ee7cb2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
|
@ -27,66 +24,9 @@
|
|||
<ClInclude Include="MainWindow.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Renderer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\Audio.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\CommonStates.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\DDSTextureLoader.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\DirectXHelpers.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\Effects.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\GeometricPrimitive.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\Model.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\PrimitiveBatch.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\ScreenGrab.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\SimpleMath.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\SpriteBatch.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\SpriteFont.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\VertexTypes.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\WICTextureLoader.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DirectXTK\XboxDDSTextureLoader.h">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="InputManager.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Resource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="GamePad.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SoundManager.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="DebugWindow.h">
|
||||
<Filter>Debugger</Filter>
|
||||
</ClInclude>
|
||||
|
@ -104,18 +44,6 @@
|
|||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Renderer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="InputManager.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="GamePad.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SoundManager.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="DebugWindow.cpp">
|
||||
<Filter>Debugger</Filter>
|
||||
</ClCompile>
|
||||
|
@ -134,9 +62,6 @@
|
|||
</Image>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="DirectXTK\SimpleMath.inl">
|
||||
<Filter>Header Files\DirectXTK</Filter>
|
||||
</None>
|
||||
<None Include="Calibri.30.spritefont">
|
||||
<Filter>Resource Files</Filter>
|
||||
</None>
|
||||
|
|
130
InteropDLL/ConsoleWrapper.cpp
Normal file
130
InteropDLL/ConsoleWrapper.cpp
Normal file
|
@ -0,0 +1,130 @@
|
|||
#include "stdafx.h"
|
||||
|
||||
#include "../Core/MessageManager.h"
|
||||
#include "../Core/Console.h"
|
||||
#include "../Windows/Renderer.h"
|
||||
#include "../Windows/SoundManager.h"
|
||||
#include "../Windows/InputManager.h"
|
||||
#include "../Core/GameServer.h"
|
||||
#include "../Core/GameClient.h"
|
||||
#include "../Core/ClientConnectionData.h"
|
||||
#include "../Core/SaveStateManager.h"
|
||||
|
||||
static NES::Renderer *_renderer = nullptr;
|
||||
static SoundManager *_soundManager = nullptr;
|
||||
static InputManager *_inputManager = nullptr;
|
||||
static HWND _windowHandle = nullptr;
|
||||
static HWND _viewerHandle = nullptr;
|
||||
|
||||
typedef void (__stdcall *NotificationListenerCallback)(int);
|
||||
|
||||
namespace InteropEmu {
|
||||
class InteropNotificationListener : public INotificationListener
|
||||
{
|
||||
NotificationListenerCallback _callback;
|
||||
public:
|
||||
InteropNotificationListener(NotificationListenerCallback callback)
|
||||
{
|
||||
_callback = callback;
|
||||
}
|
||||
|
||||
void ProcessNotification(ConsoleNotificationType type)
|
||||
{
|
||||
_callback((int)type);
|
||||
}
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
DllExport void __stdcall InitializeEmu(HWND windowHandle, HWND dxViewerHandle)
|
||||
{
|
||||
_windowHandle = windowHandle;
|
||||
_viewerHandle = dxViewerHandle;
|
||||
|
||||
_renderer = new NES::Renderer(_viewerHandle);
|
||||
MessageManager::RegisterMessageManager(_renderer);
|
||||
_renderer->SetFlags(NES::UIFlags::ShowFPS);
|
||||
|
||||
_soundManager = new SoundManager(_windowHandle);
|
||||
_inputManager = new InputManager(_windowHandle, 0);
|
||||
}
|
||||
|
||||
DllExport void __stdcall LoadROM(wchar_t* filename) { Console::LoadROM(filename); }
|
||||
|
||||
DllExport void __stdcall Run()
|
||||
{
|
||||
if(Console::GetInstance()) {
|
||||
Console::GetInstance()->Run();
|
||||
}
|
||||
}
|
||||
|
||||
DllExport void __stdcall Resume() { Console::ClearFlags(EmulationFlags::Paused); }
|
||||
DllExport int __stdcall IsPaused() { return Console::CheckFlag(EmulationFlags::Paused); }
|
||||
DllExport void __stdcall Stop()
|
||||
{
|
||||
if(Console::GetInstance()) {
|
||||
Console::GetInstance()->Stop();
|
||||
}
|
||||
}
|
||||
DllExport void __stdcall Reset() { Console::Reset(); }
|
||||
DllExport void __stdcall SetFlags(int flags) { Console::SetFlags(flags); }
|
||||
DllExport void __stdcall ClearFlags(int flags) { Console::ClearFlags(flags); }
|
||||
|
||||
DllExport void __stdcall StartServer(uint16_t port) { GameServer::StartServer(port); }
|
||||
DllExport void __stdcall StopServer() { GameServer::StopServer(); }
|
||||
DllExport int __stdcall IsServerRunning() { return GameServer::Started(); }
|
||||
|
||||
DllExport void __stdcall Connect(char* host, uint16_t port, wchar_t* playerName, uint8_t* avatarData, uint32_t avatarSize)
|
||||
{
|
||||
shared_ptr<ClientConnectionData> connectionData(new ClientConnectionData(
|
||||
host,
|
||||
port,
|
||||
playerName,
|
||||
avatarData,
|
||||
avatarSize
|
||||
));
|
||||
|
||||
GameClient::Connect(connectionData);
|
||||
}
|
||||
|
||||
DllExport void __stdcall Disconnect() { GameClient::Disconnect(); }
|
||||
DllExport int __stdcall IsConnected() { return GameClient::Connected(); }
|
||||
|
||||
DllExport void __stdcall Pause()
|
||||
{
|
||||
if(!IsConnected()) {
|
||||
Console::SetFlags(EmulationFlags::Paused);
|
||||
}
|
||||
}
|
||||
|
||||
DllExport void __stdcall Release()
|
||||
{
|
||||
GameServer::StopServer();
|
||||
GameClient::Disconnect();
|
||||
MessageManager::RegisterMessageManager(nullptr);
|
||||
delete _renderer;
|
||||
delete _soundManager;
|
||||
delete _inputManager;
|
||||
}
|
||||
|
||||
DllExport void __stdcall Render() { _renderer->Render(); }
|
||||
DllExport void __stdcall TakeScreenshot() { _renderer->TakeScreenshot(Console::GetROMPath()); }
|
||||
|
||||
DllExport INotificationListener* __stdcall RegisterNotificationCallback(NotificationListenerCallback callback)
|
||||
{
|
||||
INotificationListener* listener = new InteropNotificationListener(callback);
|
||||
MessageManager::RegisterNotificationListener(listener);
|
||||
return listener;
|
||||
}
|
||||
DllExport void __stdcall UnregisterNotificationCallback(INotificationListener *listener) { MessageManager::UnregisterNotificationListener(listener); }
|
||||
|
||||
DllExport void __stdcall SaveState(uint32_t stateIndex) { SaveStateManager::SaveState(stateIndex); }
|
||||
DllExport uint32_t __stdcall LoadState(uint32_t stateIndex) { return SaveStateManager::LoadState(stateIndex); }
|
||||
DllExport int64_t __stdcall GetStateInfo(uint32_t stateIndex) { return SaveStateManager::GetStateInfo(stateIndex); }
|
||||
|
||||
DllExport void __stdcall MoviePlay(wchar_t* filename) { Movie::Play(filename); }
|
||||
DllExport void __stdcall MovieRecord(wchar_t* filename, int reset) { Movie::Record(filename, reset != 0); }
|
||||
DllExport void __stdcall MovieStop() { Movie::Stop(); }
|
||||
DllExport int __stdcall MoviePlaying() { return Movie::Playing(); }
|
||||
DllExport int __stdcall MovieRecording() { return Movie::Recording(); }
|
||||
}
|
||||
}
|
40
InteropDLL/DebugWrapper.cpp
Normal file
40
InteropDLL/DebugWrapper.cpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
#include "stdafx.h"
|
||||
#include "../Core/Console.h"
|
||||
#include "../Core/Debugger.h"
|
||||
|
||||
static shared_ptr<Debugger> _debugger = nullptr;
|
||||
|
||||
extern "C"
|
||||
{
|
||||
//Debugger wrapper
|
||||
DllExport void __stdcall DebugInitialize()
|
||||
{
|
||||
_debugger = Console::GetInstance()->GetDebugger();
|
||||
}
|
||||
|
||||
DllExport void __stdcall DebugRelease()
|
||||
{
|
||||
if(_debugger != nullptr) {
|
||||
_debugger->Run();
|
||||
_debugger.reset();
|
||||
}
|
||||
}
|
||||
|
||||
DllExport void __stdcall DebugGetState(DebugState *state) { _debugger->GetState(state); }
|
||||
|
||||
DllExport void DebugSetBreakpoints()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
DllExport void __stdcall DebugRun() { _debugger->Run(); }
|
||||
DllExport void __stdcall DebugStep(uint32_t count) { _debugger->Step(count); }
|
||||
DllExport void __stdcall DebugStepCycles(uint32_t count) { _debugger->StepCycles(count); }
|
||||
DllExport void __stdcall DebugStepOver() { _debugger->StepOver(); }
|
||||
DllExport void __stdcall DebugStepOut() { _debugger->StepOut(); }
|
||||
DllExport int __stdcall DebugIsCodeChanged() { return _debugger->IsCodeChanged(); }
|
||||
DllExport const char* __stdcall DebugGetCode() { return _debugger->GetCode()->c_str(); }
|
||||
|
||||
DllExport uint8_t __stdcall DebugGetMemoryValue(uint32_t addr) { return _debugger->GetMemoryValue(addr); }
|
||||
DllExport uint32_t __stdcall DebugGetRelativeAddress(uint32_t addr) { return _debugger->GetRelativeAddress(addr); }
|
||||
};
|
96
InteropDLL/InteropDLL.vcxproj
Normal file
96
InteropDLL/InteropDLL.vcxproj
Normal file
|
@ -0,0 +1,96 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{37749BB2-FA78-4EC9-8990-5628FC0BBA19}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>InteropDLL</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v120</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>WinMesen</TargetName>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>WinMesen</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<CallingConvention>Cdecl</CallingConvention>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>Xinput9_1_0.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;INTEROPDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalDependencies>Xinput9_1_0.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="targetver.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ConsoleWrapper.cpp" />
|
||||
<ClCompile Include="DebugWrapper.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
36
InteropDLL/InteropDLL.vcxproj.filters
Normal file
36
InteropDLL/InteropDLL.vcxproj.filters
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="targetver.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ConsoleWrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="DebugWrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
8
InteropDLL/stdafx.cpp
Normal file
8
InteropDLL/stdafx.cpp
Normal file
|
@ -0,0 +1,8 @@
|
|||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// InteropDLL.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
31
InteropDLL/stdafx.h
Normal file
31
InteropDLL/stdafx.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "targetver.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
// Windows Header Files:
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#pragma comment(lib, "../Debug/Core.lib")
|
||||
#pragma comment(lib, "../Debug/Utilities.lib")
|
||||
#pragma comment(lib, "../Debug/Windows.lib")
|
||||
#pragma comment(lib, "../Windows/DirectXTK/DirectXTK.debug.lib")
|
||||
#pragma comment(lib, "../Core/Nes_Apu/Nes_Apu.debug.lib")
|
||||
#else
|
||||
#pragma comment(lib, "../Release/Core.lib")
|
||||
#pragma comment(lib, "../Release/Utilities.lib")
|
||||
#pragma comment(lib, "../Release/Windows.lib")
|
||||
#pragma comment(lib, "../Windows/DirectXTK/DirectXTK.lib")
|
||||
#pragma comment(lib, "../Core/Nes_Apu/Nes_Apu.lib")
|
||||
#endif
|
||||
|
||||
#define DllExport __declspec(dllexport)
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
8
InteropDLL/targetver.h
Normal file
8
InteropDLL/targetver.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
// Including SDKDDKVer.h defines the highest available Windows platform.
|
||||
|
||||
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
||||
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
||||
|
||||
#include <SDKDDKVer.h>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue