git-svn-id: https://localhost/svn/Project64/trunk@47 111125ac-702d-7242-af9c-5ba8ae61c1ef

This commit is contained in:
zilmar 2010-11-12 05:30:08 +00:00
parent 49d660df78
commit f6cfb46c57
22 changed files with 791 additions and 1556 deletions

View File

@ -13673,30 +13673,25 @@ SP Hack=No
Core Note=
[635A2BFF-8B022326-C:45]
Good Name=Super Mario 64 (U)
Internal Name=SUPER MARIO 64
RDRAM Size=4
Counter Factor=2
Save Type=First Save Type
CPU Type=Recompiler
Self-modifying code Method=Cache
Use TLB=Yes
Linking=Global
Reg Cache=Yes
Use Large Buffer=No
Delay SI=No
SP Hack=No
Status=Compatible
Plugin Note=[video] missing:dissolve effect (see GameFAQ)
Core Note=
Clear Frame=0
Self Texture=0
Primary Frame Buffer=0
//Resolution Width=-1
//Resolution Height=-1
Core Note=
Culling=1
Emulate Clear=0
FuncFind=2
Good Name=Super Mario 64 (U)
Internal Name=SUPER MARIO 64
Linking=On
MD5=49FBF9C744C458405F685D42B762A0BE
Plugin Note=[video] missing:dissolve effect (see GameFAQ)
Primary Frame Buffer=0
SMM-FUNC=0
SMM-PI DMA=0
SMM-TLB=0
SP Hack=No
Self Texture=0
Self-modifying code Method=Cache
Status=Compatible
Use Large Buffer=No
[D6FBA4A8-6326AA2C-C:4A]
Good Name=Super Mario 64 Shindou Edition (J)

View File

@ -35,7 +35,6 @@ class CNotification;
#include "N64 System/Mips/System Events.h"
//C Core - to be upgrdaded and removed
#include "N64 System/C Core/CPU Log.h"
#include "N64 System/C Core/r4300i Commands.h"
#include "N64 System/C Core/Win32Timer.h"
#include "N64 System/C Core/Logging.h"
@ -59,6 +58,7 @@ class CNotification;
#include "N64 System/Recompiler/Function Map Class.h"
#include "N64 System/Recompiler/Delay Slot Map Class.h"
#include "N64 System/Recompiler/Recompiler Class.h"
#include "N64 System/Recompiler/x86CodeLog.h"
//cheats
#include "N64 System/Cheat Class.h"

View File

@ -2,7 +2,6 @@
#include "mempak.h"
#include "Plugin.h"
#include "Logging.h"
#include "CPU Log.h"
//settings
BOOL g_ShowCPUPer = false, g_ShowTLBMisses = false, g_UseTlb = true,

View File

@ -1,75 +0,0 @@
#include "stdafx.h"
/*
* Project 64 - A Nintendo 64 emulator.
*
* (c) Copyright 2001 zilmar (zilmar@emulation64.com) and
* Jabo (jabo@emulation64.com).
*
* pj64 homepage: www.pj64.net
*
* Permission to use, copy, modify and distribute Project64 in both binary and
* source form, for non-commercial purposes, is hereby granted without fee,
* providing that this license information and copyright notice appear with
* all copies and any derived work.
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event shall the authors be held liable for any damages
* arising from the use of this software.
*
* Project64 is freeware for PERSONAL USE only. Commercial users should
* seek permission of the copyright holders first. Commercial use includes
* charging money for Project64 or software derived from Project64.
*
* The copyright holders request that bug fixes and improvements to the code
* should be forwarded to them so if they want them.
*
*/
//#if (!defined(EXTERNAL_RELEASE))
#include <windows.h>
#include <stdio.h>
#ifdef Log_x86Code
static HANDLE hCPULogFile = NULL;
BOOL IsX86Logging ( void )
{
return hCPULogFile != NULL;
}
void CPU_Message (const char * Message, ...) {
DWORD dwWritten;
char Msg[400];
va_list ap;
va_start( ap, Message );
vsprintf( Msg, Message, ap );
va_end( ap );
strcat(Msg,"\r\n");
WriteFile( hCPULogFile,Msg,strlen(Msg),&dwWritten,NULL );
}
void Start_x86_Log (void) {
CPath LogFileName(CPath::MODULE_DIRECTORY);
LogFileName.AppendDirectory("Logs");
LogFileName.SetNameExtension(_T("CPUoutput.log"));
if (hCPULogFile) { Stop_x86_Log(); }
hCPULogFile = CreateFile(LogFileName,GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
SetFilePointer(hCPULogFile,0,NULL,FILE_BEGIN);
}
void Stop_x86_Log (void) {
if (hCPULogFile) {
CloseHandle(hCPULogFile);
hCPULogFile = NULL;
}
}
#endif
//#endif

View File

@ -1,44 +0,0 @@
/*
* Project 64 - A Nintendo 64 emulator.
*
* (c) Copyright 2001 zilmar (zilmar@emulation64.com) and
* Jabo (jabo@emulation64.com).
*
* pj64 homepage: www.pj64.net
*
* Permission to use, copy, modify and distribute Project64 in both binary and
* source form, for non-commercial purposes, is hereby granted without fee,
* providing that this license information and copyright notice appear with
* all copies and any derived work.
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event shall the authors be held liable for any damages
* arising from the use of this software.
*
* Project64 is freeware for PERSONAL USE only. Commercial users should
* seek permission of the copyright holders first. Commercial use includes
* charging money for Project64 or software derived from Project64.
*
* The copyright holders request that bug fixes and improvements to the code
* should be forwarded to them so if they want them.
*
*/
#define Log_x86Code
#if defined(Log_x86Code)
#ifdef __cplusplus
extern "C" {
#endif
void CPU_Message (const char * Message, ...);
void Start_x86_Log (void);
void Stop_x86_Log (void);
BOOL IsX86Logging ( void );
#ifdef __cplusplus
}
#endif
#else
#define CPU_Message
#endif

View File

@ -168,7 +168,7 @@ void CCheats::ApplyCheats(CMipsMemory * _MMU)
for (size_t CurrentCheat = 0; CurrentCheat < m_Codes.size(); CurrentCheat ++)
{
const CODES & CodeEntry = m_Codes[CurrentCheat];
for (int CurrentEntry = 0; CurrentEntry < CodeEntry.size();)
for (size_t CurrentEntry = 0; CurrentEntry < CodeEntry.size();)
{
CurrentEntry += ApplyCheatEntry(_MMU, CodeEntry,CurrentEntry,TRUE);
}
@ -178,7 +178,7 @@ void CCheats::ApplyCheats(CMipsMemory * _MMU)
void CCheats::ApplyGSButton (CMipsMemory * _MMU)
{
DWORD Address;
for (int CurrentCheat = 0; CurrentCheat < m_Codes.size(); CurrentCheat ++)
for (size_t CurrentCheat = 0; CurrentCheat < m_Codes.size(); CurrentCheat ++)
{
const CODES & CodeEntry = m_Codes[CurrentCheat];
for (size_t CurrentEntry = 0; CurrentEntry < CodeEntry.size(); CurrentEntry ++)
@ -187,7 +187,7 @@ void CCheats::ApplyGSButton (CMipsMemory * _MMU)
switch (Code.Command & 0xFF000000) {
case 0x88000000:
Address = 0x80000000 | (Code.Command & 0xFFFFFF);
_MMU->SB_VAddr(Address,Code.Value);
_MMU->SB_VAddr(Address,(BYTE)Code.Value);
break;
case 0x89000000:
Address = 0x80000000 | (Code.Command & 0xFFFFFF);
@ -196,7 +196,7 @@ void CCheats::ApplyGSButton (CMipsMemory * _MMU)
// Xplorer64
case 0xA8000000:
Address = 0x80000000 | (ConvertXP64Address(Code.Command) & 0xFFFFFF);
_MMU->SB_VAddr(Address,ConvertXP64Value(Code.Value));
_MMU->SB_VAddr(Address,(BYTE)ConvertXP64Value(Code.Value));
break;
case 0xA9000000:
Address = 0x80000000 | (ConvertXP64Address(Code.Command) & 0xFFFFFF);
@ -288,7 +288,7 @@ bool CCheats::IsValid16BitCode (LPCSTR CheatString) const
int CCheats::ApplyCheatEntry (CMipsMemory * _MMU, const CODES & CodeEntry, int CurrentEntry, BOOL Execute )
{
if (CurrentEntry < 0 || CurrentEntry >= CodeEntry.size())
if (CurrentEntry < 0 || CurrentEntry >= (int)CodeEntry.size())
{
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -3,10 +3,9 @@ class R4300iOp32 :
{
public:
/************************* OpCode functions *************************/
static void J ( void );
static void JAL ( void );
static void BNE ( void );
static void BEQ ( void );
static void BNE ( void );
static void BLEZ ( void );
static void BGTZ ( void );
static void ADDI ( void );
@ -29,16 +28,7 @@ public:
static void LHU ( void );
static void LWR ( void );
static void LWU ( void );
static void SB ( void );
static void SH ( void );
static void SWL ( void );
static void SW ( void );
static void SWR ( void );
static void CACHE ( void );
static void LL ( void );
static void LWC1 ( void );
static void SC ( void );
static void SWC1 ( void );
/********************** R4300i OpCodes: Special **********************/
static void SPECIAL_SLL ( void );
@ -47,11 +37,7 @@ public:
static void SPECIAL_SLLV ( void );
static void SPECIAL_SRLV ( void );
static void SPECIAL_SRAV ( void );
static void SPECIAL_JR ( void );
static void SPECIAL_JALR ( void );
static void SPECIAL_SYSCALL ( void );
static void SPECIAL_BREAK ( void );
static void SPECIAL_SYNC ( void );
static void SPECIAL_MTHI ( void );
static void SPECIAL_MTLO ( void );
static void SPECIAL_ADD ( void );
@ -60,7 +46,6 @@ public:
static void SPECIAL_SUBU ( void );
static void SPECIAL_AND ( void );
static void SPECIAL_OR ( void );
static void SPECIAL_XOR ( void );
static void SPECIAL_NOR ( void );
static void SPECIAL_SLT ( void );
static void SPECIAL_SLTU ( void );
@ -80,80 +65,10 @@ public:
static void COP0_MF ( void );
static void COP0_MT ( void );
/************************** COP0 CO functions ***********************/
static void COP0_CO_TLBR ( void );
static void COP0_CO_TLBWI ( void );
static void COP0_CO_TLBWR ( void );
static void COP0_CO_TLBP ( void );
static void COP0_CO_ERET ( void );
/************************** COP1 functions **************************/
static void COP1_MF ( void );
static void COP1_DMF ( void );
static void COP1_CF ( void );
static void COP1_MT ( void );
static void COP1_DMT ( void );
static void COP1_CT ( void );
/************************* COP1: BC1 functions ***********************/
static void COP1_BCF ( void );
static void COP1_BCT ( void );
static void COP1_BCFL ( void );
static void COP1_BCTL ( void );
/************************** COP1: S functions ************************/
static void COP1_S_ADD ( void );
static void COP1_S_SUB ( void );
static void COP1_S_MUL ( void );
static void COP1_S_DIV ( void );
static void COP1_S_SQRT ( void );
static void COP1_S_ABS ( void );
static void COP1_S_MOV ( void );
static void COP1_S_NEG ( void );
static void COP1_S_TRUNC_L ( void );
static void COP1_S_CEIL_L ( void ); //added by Witten
static void COP1_S_FLOOR_L ( void ); //added by Witten
static void COP1_S_ROUND_W ( void );
static void COP1_S_TRUNC_W ( void );
static void COP1_S_CEIL_W ( void ); //added by Witten
static void COP1_S_FLOOR_W ( void );
static void COP1_S_CVT_D ( void );
static void COP1_S_CVT_W ( void );
static void COP1_S_CVT_L ( void );
static void COP1_S_CMP ( void );
/************************** COP1: D functions ************************/
static void COP1_D_ADD ( void );
static void COP1_D_SUB ( void );
static void COP1_D_MUL ( void );
static void COP1_D_DIV ( void );
static void COP1_D_SQRT ( void );
static void COP1_D_ABS ( void );
static void COP1_D_MOV ( void );
static void COP1_D_NEG ( void );
static void COP1_D_TRUNC_L ( void ); //added by Witten
static void COP1_D_CEIL_L ( void ); //added by Witten
static void COP1_D_FLOOR_L ( void ); //added by Witten
static void COP1_D_ROUND_W ( void );
static void COP1_D_TRUNC_W ( void );
static void COP1_D_CEIL_W ( void ); //added by Witten
static void COP1_D_FLOOR_W ( void ); //added by Witten
static void COP1_D_CVT_S ( void );
static void COP1_D_CVT_W ( void );
static void COP1_D_CVT_L ( void );
static void COP1_D_CMP ( void );
/************************** COP1: W functions ************************/
static void COP1_W_CVT_S ( void );
static void COP1_W_CVT_D ( void );
/************************** COP1: L functions ************************/
static void COP1_L_CVT_S ( void );
static void COP1_L_CVT_D ( void );
/************************** Other functions **************************/
static void UnknownOpcode ( void );
static Func * BuildInterpreter (void );
};

View File

@ -1046,11 +1046,12 @@ void R4300iOp::LW (void) {
DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset;
if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); }
#if (!defined(EXTERNAL_RELEASE))
Log_LW((*_PROGRAM_COUNTER),Address);
#endif
if (m_Opcode.rt == 0) { return; }
if (LogOptions.GenerateLog)
{
Log_LW((*_PROGRAM_COUNTER),Address);
}
if (m_Opcode.rt == 0) { return; }
if (!_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) {
if (g_ShowTLBMisses) {
@ -1097,7 +1098,7 @@ void R4300iOp::LWR (void) {
{
if (g_ShowTLBMisses)
{
DisplayError("LDL TLB: %X",Address);
DisplayError("LWR TLB: %X",Address);
}
return;
}
@ -1168,7 +1169,10 @@ void R4300iOp::SW (void) {
DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset;
if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); }
#if (!defined(EXTERNAL_RELEASE))
Log_SW((*_PROGRAM_COUNTER),Address,_GPR[m_Opcode.rt].UW[0]);
if (LogOptions.GenerateLog)
{
Log_SW((*_PROGRAM_COUNTER),Address,_GPR[m_Opcode.rt].UW[0]);
}
#endif
if (!_MMU->SW_VAddr(Address,_GPR[m_Opcode.rt].UW[0]))
{
@ -1387,7 +1391,7 @@ void R4300iOp::SD (void) {
#endif
}
}
/********************** R4300i m_Opcodes: Special **********************/
/********************** R4300i OpCodes: Special **********************/
void R4300iOp::SPECIAL_SLL (void) {
_GPR[m_Opcode.rd].DW = (_GPR[m_Opcode.rt].W[0] << m_Opcode.sa);
}
@ -1653,12 +1657,18 @@ void R4300iOp::SPECIAL_DSRA32 (void) {
_GPR[m_Opcode.rd].DW = (_GPR[m_Opcode.rt].DW >> (m_Opcode.sa + 32));
}
/********************** R4300i m_Opcodes: RegImm **********************/
/********************** R4300i OpCodes: RegImm **********************/
void R4300iOp::REGIMM_BLTZ (void) {
m_NextInstruction = DELAY_SLOT;
if (_GPR[m_Opcode.rs].DW < 0) {
m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4;
TestInterpreterJump((*_PROGRAM_COUNTER),m_JumpToLocation,m_Opcode.rs,0);
if ((*_PROGRAM_COUNTER) == m_JumpToLocation)
{
if (!DelaySlotEffectsCompare((*_PROGRAM_COUNTER),m_Opcode.rs,0))
{
InPermLoop();
}
}
} else {
m_JumpToLocation = (*_PROGRAM_COUNTER) + 8;
}
@ -1668,7 +1678,13 @@ void R4300iOp::REGIMM_BGEZ (void) {
m_NextInstruction = DELAY_SLOT;
if (_GPR[m_Opcode.rs].DW >= 0) {
m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4;
TestInterpreterJump((*_PROGRAM_COUNTER),m_JumpToLocation,m_Opcode.rs,0);
if ((*_PROGRAM_COUNTER) == m_JumpToLocation)
{
if (!DelaySlotEffectsCompare((*_PROGRAM_COUNTER),m_Opcode.rs,0))
{
InPermLoop();
}
}
} else {
m_JumpToLocation = (*_PROGRAM_COUNTER) + 8;
}
@ -1678,7 +1694,13 @@ void R4300iOp::REGIMM_BLTZL (void) {
if (_GPR[m_Opcode.rs].DW < 0) {
m_NextInstruction = DELAY_SLOT;
m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4;
TestInterpreterJump((*_PROGRAM_COUNTER),m_JumpToLocation,m_Opcode.rs,0);
if ((*_PROGRAM_COUNTER) == m_JumpToLocation)
{
if (!DelaySlotEffectsCompare((*_PROGRAM_COUNTER),m_Opcode.rs,0))
{
InPermLoop();
}
}
} else {
m_NextInstruction = JUMP;
m_JumpToLocation = (*_PROGRAM_COUNTER) + 8;
@ -1689,7 +1711,13 @@ void R4300iOp::REGIMM_BGEZL (void) {
if (_GPR[m_Opcode.rs].DW >= 0) {
m_NextInstruction = DELAY_SLOT;
m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4;
TestInterpreterJump((*_PROGRAM_COUNTER),m_JumpToLocation,m_Opcode.rs,0);
if ((*_PROGRAM_COUNTER) == m_JumpToLocation)
{
if (!DelaySlotEffectsCompare((*_PROGRAM_COUNTER),m_Opcode.rs,0))
{
InPermLoop();
}
}
} else {
m_NextInstruction = JUMP;
m_JumpToLocation = (*_PROGRAM_COUNTER) + 8;
@ -1700,7 +1728,13 @@ void R4300iOp::REGIMM_BLTZAL (void) {
m_NextInstruction = DELAY_SLOT;
if (_GPR[m_Opcode.rs].DW < 0) {
m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4;
TestInterpreterJump((*_PROGRAM_COUNTER),m_JumpToLocation,m_Opcode.rs,0);
if ((*_PROGRAM_COUNTER) == m_JumpToLocation)
{
if (!DelaySlotEffectsCompare((*_PROGRAM_COUNTER),m_Opcode.rs,0))
{
InPermLoop();
}
}
} else {
m_JumpToLocation = (*_PROGRAM_COUNTER) + 8;
}
@ -1711,7 +1745,13 @@ void R4300iOp::REGIMM_BGEZAL (void) {
m_NextInstruction = DELAY_SLOT;
if (_GPR[m_Opcode.rs].DW >= 0) {
m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4;
TestInterpreterJump((*_PROGRAM_COUNTER),m_JumpToLocation,m_Opcode.rs,0);
if ((*_PROGRAM_COUNTER) == m_JumpToLocation)
{
if (!DelaySlotEffectsCompare((*_PROGRAM_COUNTER),m_Opcode.rs,0))
{
InPermLoop();
}
}
} else {
m_JumpToLocation = (*_PROGRAM_COUNTER) + 8;
}
@ -1748,7 +1788,6 @@ void R4300iOp::COP0_MT (void) {
case 2: //EntryLo0
case 3: //EntryLo1
case 5: //PageMask
case 6: //Wired
case 10: //Entry Hi
case 14: //EPC
case 16: //Config
@ -1759,6 +1798,10 @@ void R4300iOp::COP0_MT (void) {
case 30: //ErrEPC
_CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0];
break;
case 6: //Wired
_SystemTimer->UpdateTimers();
_CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0];
break;
case 4: //Context
_CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0] & 0xFF800000;
break;
@ -1811,7 +1854,7 @@ void R4300iOp::COP0_CO_TLBWI (void) {
void R4300iOp::COP0_CO_TLBWR (void) {
if (!g_UseTlb) { return; }
_TLB->WriteEntry(_Reg->RANDOM_REGISTER & 0x1F,TRUE);
_TLB->WriteEntry(_Reg->RANDOM_REGISTER & 0x1F,true);
}
void R4300iOp::COP0_CO_TLBP (void) {

View File

@ -36,9 +36,9 @@ void CSystemEvents::ExecuteEvents ( void )
EventList Events = m_Events;
m_Events.clear();
bool bPause = false;
bool bPause = false, bLoadedSave = false;
for (EventList::const_iterator iter = Events.begin(); iter != Events.end(); iter++ )
for (EventList::const_iterator iter = Events.begin(); !bLoadedSave && iter != Events.end(); iter++ )
{
switch (*iter)
{
@ -97,7 +97,10 @@ void CSystemEvents::ExecuteEvents ( void )
}
break;
case SysEvent_LoadMachineState:
Machine_LoadState();
if (Machine_LoadState())
{
bLoadedSave = true;
}
break;
case SysEvent_ChangePlugins:
ChangePluginFunc();

View File

@ -47,11 +47,11 @@ bool CCodeBlock::Compile()
if (m_bDelaySlot)
{
m_EnterSection.GenerateX86Code(m_EnterSection.m_Test + 1);
m_EnterSection.GenerateX86Code(NextTest());
} else {
/*if (bLinkBlocks()) {
for (int i = 0; i < m_NoOfSections; i ++) {
m_EnterSection.DisplaySectionInformation(i + 1,m_EnterSection.m_Test + 1);
m_EnterSection.DisplaySectionInformation(i + 1,NextTest());
}
}*/
if (_SyncSystem) {

View File

@ -910,6 +910,11 @@ bool CCodeSection::GenerateX86Code ( DWORD Test )
m_NextInstruction = m_DelaySlotSection ? END_BLOCK : NORMAL;
m_Section = this;
if (m_DelaySlotSection)
{
m_Cont.JumpPC = m_EnterPC;
}
if (m_CompilePC < m_BlockInfo->VAddrFirst())
{
m_BlockInfo->SetVAddrFirst(m_CompilePC);
@ -2462,7 +2467,8 @@ void CCodeSection::UnlinkParent( CCodeSection * Parent, bool ContinueSection )
}
ParentIter->m_ContinueSection = NULL;
}
else if (ParentIter->m_JumpSection == this)
if (ParentIter->m_JumpSection == this)
{
if (ParentIter->m_CompiledLocation)
{
@ -2517,7 +2523,7 @@ bool CCodeSection::InheritParentInfo ( void )
char Label[100];
BOOL NeedSync;
*/
DisplaySectionInformation(m_SectionID,m_BlockInfo->NextTest());
DisplaySectionInformation();
if (m_ParentSection.empty())
{
@ -2843,7 +2849,7 @@ bool CCodeSection::InheritParentInfo ( void )
bool CCodeSection::DisplaySectionInformation (DWORD ID, DWORD Test)
{
if (!IsX86Logging())
if (!bX86Logging)
{
return false;
}
@ -2855,6 +2861,12 @@ bool CCodeSection::DisplaySectionInformation (DWORD ID, DWORD Test)
if (m_JumpSection->DisplaySectionInformation(ID,Test)) { return true; }
return false;
}
DisplaySectionInformation();
return true;
}
void CCodeSection::DisplaySectionInformation (void)
{
CPU_Message("====== Section %d ======",m_SectionID);
CPU_Message("Start PC: %X",m_EnterPC);
CPU_Message("CompiledLocation: %X",m_RecompPos);
@ -2884,5 +2896,4 @@ bool CCodeSection::DisplaySectionInformation (DWORD ID, DWORD Test)
CPU_Message("Continue Section: None");
}
CPU_Message("=======================");
return true;
}

View File

@ -21,6 +21,7 @@ public:
CCodeSection * ExistingSection ( DWORD Addr, DWORD Test );
bool SectionAccessible ( DWORD SectionId, DWORD Test );
bool DisplaySectionInformation ( DWORD ID, DWORD Test );
void DisplaySectionInformation ( void );
/* Block Connection info */
SECTION_LIST m_ParentSection;

View File

@ -258,65 +258,44 @@ void CRecompilerOps::Compile_BranchLikely (BranchFunction CompareFunc, BOOL Link
CompareFunc();
ResetX86Protection();
m_Section->m_Cont.RegSet = m_RegWorkingSet;
if (g_UseLinking && m_Section->m_Jump.TargetPC == m_Section->m_Cont.TargetPC)
{
_Notify->BreakPoint(__FILE__,__LINE__);
#ifdef tofix
if (m_Section->m_Cont.FallThrough)
{
BreakPoint(__FILE__,__LINE__);
if (m_Section->m_Cont.FallThrough) {
if (m_Section->m_Jump.LinkLocation != NULL) {
#ifndef EXTERNAL_RELEASE
DisplayError("WTF .. problem with CRecompilerOps::BranchLikely");
#endif
}
if (!m_Section->m_Jump.FallThrough)
{
BreakPoint(__FILE__,__LINE__);
}
m_Section->m_JumpSection->m_Cont.TargetPC = m_Section->m_Jump.TargetPC;
m_Section->m_JumpSection->DelaySlotSection = true;
m_Section->m_Jump.TargetPC = m_CompilePC + 4;
m_Section->m_Jump.RegSet = m_RegWorkingSet;
m_Section->GenerateSectionLinkage();
m_NextInstruction = END_BLOCK;
#endif
} else {
if (m_Section->m_Cont.FallThrough) {
if ((m_CompilePC & 0xFFC) == 0xFFC) {
m_Section->m_Jump.FallThrough = FALSE;
if (m_Section->m_Jump.LinkLocation != NULL) {
#ifndef EXTERNAL_RELEASE
DisplayError("WTF .. problem with CRecompilerOps::BranchLikely");
#endif
SetJump32(m_Section->m_Jump.LinkLocation,(DWORD *)m_RecompPos);
m_Section->m_Jump.LinkLocation = NULL;
if (m_Section->m_Jump.LinkLocation2 != NULL) {
SetJump32(m_Section->m_Jump.LinkLocation2,(DWORD *)m_RecompPos);
m_Section->m_Jump.LinkLocation2 = NULL;
}
}
JmpLabel32("DoDelaySlot",0);
m_Section->m_Jump.LinkLocation = (DWORD *)(m_RecompPos - 4);
CPU_Message(" ");
CPU_Message(" %s:",m_Section->m_Cont.BranchLabel.c_str());
if (m_Section->m_Cont.LinkLocation != NULL) {
SetJump32(m_Section->m_Cont.LinkLocation,(DWORD *)m_RecompPos);
m_Section->m_Cont.LinkLocation = NULL;
if (m_Section->m_Cont.LinkLocation2 != NULL) {
SetJump32(m_Section->m_Cont.LinkLocation2,(DWORD *)m_RecompPos);
m_Section->m_Cont.LinkLocation2 = NULL;
}
}
m_Section->CompileExit(m_CompilePC, m_CompilePC + 8,m_Section->m_Cont.RegSet,CExitInfo::Normal,TRUE,NULL);
CPU_Message("");
CPU_Message(" DoDelaySlot:");
m_Section->GenerateSectionLinkage();
m_NextInstruction = END_BLOCK;
} else {
if ((m_CompilePC & 0xFFC) == 0xFFC) {
m_Section->m_Jump.FallThrough = FALSE;
if (m_Section->m_Jump.LinkLocation != NULL) {
SetJump32(m_Section->m_Jump.LinkLocation,(DWORD *)m_RecompPos);
m_Section->m_Jump.LinkLocation = NULL;
if (m_Section->m_Jump.LinkLocation2 != NULL) {
SetJump32(m_Section->m_Jump.LinkLocation2,(DWORD *)m_RecompPos);
m_Section->m_Jump.LinkLocation2 = NULL;
}
}
JmpLabel32("DoDelaySlot",0);
m_Section->m_Jump.LinkLocation = (DWORD *)(m_RecompPos - 4);
CPU_Message(" ");
CPU_Message(" %s:",m_Section->m_Cont.BranchLabel.c_str());
if (m_Section->m_Cont.LinkLocation != NULL) {
SetJump32(m_Section->m_Cont.LinkLocation,(DWORD *)m_RecompPos);
m_Section->m_Cont.LinkLocation = NULL;
if (m_Section->m_Cont.LinkLocation2 != NULL) {
SetJump32(m_Section->m_Cont.LinkLocation2,(DWORD *)m_RecompPos);
m_Section->m_Cont.LinkLocation2 = NULL;
}
}
m_Section->CompileExit(m_CompilePC, m_CompilePC + 8,m_Section->m_Cont.RegSet,CExitInfo::Normal,TRUE,NULL);
CPU_Message("");
CPU_Message(" DoDelaySlot:");
m_Section->GenerateSectionLinkage();
m_NextInstruction = END_BLOCK;
} else {
m_NextInstruction = DO_DELAY_SLOT;
}
m_NextInstruction = DO_DELAY_SLOT;
}
}
} else if (m_NextInstruction == DELAY_SLOT_DONE ) {
@ -1963,6 +1942,13 @@ void CRecompilerOps::SPECIAL_JR (void) {
m_NextInstruction = END_BLOCK;
return;
}
} else {
m_Section->m_Jump.FallThrough = false;
m_Section->m_Jump.LinkLocation = NULL;
m_Section->m_Jump.LinkLocation2 = NULL;
m_Section->m_Cont.FallThrough = FALSE;
m_Section->m_Cont.LinkLocation = NULL;
m_Section->m_Cont.LinkLocation2 = NULL;
}
if ((m_CompilePC & 0xFFC) == 0xFFC) {
if (IsMapped(m_Opcode.rs)) {
@ -1989,7 +1975,7 @@ void CRecompilerOps::SPECIAL_JR (void) {
m_Section->CompileExit(m_CompilePC,(DWORD)-1,m_RegWorkingSet,CExitInfo::Normal,TRUE,NULL);
} else {
if (IsConst(m_Opcode.rs)) {
UpdateCounters(m_RegWorkingSet,true,true);
m_Section->m_Jump.JumpPC = m_Section->m_Jump.TargetPC + 4;
m_Section->m_Jump.RegSet = m_RegWorkingSet;
m_Section->GenerateSectionLinkage();
} else {
@ -2160,7 +2146,6 @@ void CRecompilerOps::SPECIAL_DSLLV (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rs)) {
DWORD Shift = (cMipsRegLo(m_Opcode.rs) & 0x3F);
CRecompilerOps::UnknownOpcode();
@ -2198,7 +2183,6 @@ void CRecompilerOps::SPECIAL_DSRLV (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rs)) {
DWORD Shift = (cMipsRegLo(m_Opcode.rs) & 0x3F);
if (IsConst(m_Opcode.rt)) {
@ -2462,8 +2446,6 @@ void CRecompilerOps::SPECIAL_DMULT (void)
{
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (m_Opcode.rs != 0) { UnMap_GPR(m_Opcode.rs,TRUE); }
if (m_Opcode.rs != 0) { UnMap_GPR(m_Opcode.rt,TRUE); }
BeforeCallDirect(m_RegWorkingSet);
@ -3120,25 +3102,40 @@ void CRecompilerOps::SPECIAL_NOR (void) {
int KnownReg = IsKnown(m_Opcode.rt)?m_Opcode.rt:m_Opcode.rs;
int UnknownReg = IsKnown(m_Opcode.rt)?m_Opcode.rs:m_Opcode.rt;
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(KnownReg)) {
unsigned __int64 Value;
Value = Is64Bit(KnownReg)?MipsReg(KnownReg):MipsRegLo_S(KnownReg);
Map_GPR_64bit(m_Opcode.rd,UnknownReg);
if ((Value >> 32) != 0) {
OrConstToX86Reg((DWORD)(Value >> 32),MipsRegMapHi(m_Opcode.rd));
}
if ((DWORD)Value != 0) {
OrConstToX86Reg((DWORD)Value,cMipsRegMapLo(m_Opcode.rd));
if (b32BitCore() && Is32Bit(KnownReg))
{
Map_GPR_32bit(m_Opcode.rd,true,UnknownReg);
if ((DWORD)Value != 0) {
OrConstToX86Reg((DWORD)Value,cMipsRegMapLo(m_Opcode.rd));
}
} else {
Map_GPR_64bit(m_Opcode.rd,UnknownReg);
if ((Value >> 32) != 0) {
OrConstToX86Reg((DWORD)(Value >> 32),MipsRegMapHi(m_Opcode.rd));
}
if ((DWORD)Value != 0) {
OrConstToX86Reg((DWORD)Value,cMipsRegMapLo(m_Opcode.rd));
}
}
} else {
Map_GPR_64bit(m_Opcode.rd,KnownReg);
OrVariableToX86Reg(&_GPR[UnknownReg].W[1],CRegName::GPR_Hi[UnknownReg],cMipsRegMapHi(m_Opcode.rd));
OrVariableToX86Reg(&_GPR[UnknownReg].W[0],CRegName::GPR_Lo[UnknownReg],cMipsRegMapLo(m_Opcode.rd));
if (b32BitCore())
{
Map_GPR_32bit(m_Opcode.rd,true,KnownReg);
OrVariableToX86Reg(&_GPR[UnknownReg].W[0],CRegName::GPR_Lo[UnknownReg],cMipsRegMapLo(m_Opcode.rd));
} else {
Map_GPR_64bit(m_Opcode.rd,KnownReg);
OrVariableToX86Reg(&_GPR[UnknownReg].W[1],CRegName::GPR_Hi[UnknownReg],cMipsRegMapHi(m_Opcode.rd));
OrVariableToX86Reg(&_GPR[UnknownReg].W[0],CRegName::GPR_Lo[UnknownReg],cMipsRegMapLo(m_Opcode.rd));
}
}
if (Is64Bit(m_Opcode.rd))
{
NotX86Reg(cMipsRegMapHi(m_Opcode.rd));
}
NotX86Reg(cMipsRegMapHi(m_Opcode.rd));
NotX86Reg(cMipsRegMapLo(m_Opcode.rd));
} else if (b32BitCore()) {
Map_GPR_32bit(m_Opcode.rd,true,m_Opcode.rt);
@ -3605,8 +3602,6 @@ void CRecompilerOps::SPECIAL_DADD (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rt) && IsConst(m_Opcode.rs)) {
if (IsMapped(m_Opcode.rd)) { UnMap_GPR(m_Opcode.rd, FALSE); }
MipsReg(m_Opcode.rd) =
@ -3643,8 +3638,6 @@ void CRecompilerOps::SPECIAL_DADDU (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rt) && IsConst(m_Opcode.rs)) {
__int64 ValRs = Is64Bit(m_Opcode.rs)?MipsReg(m_Opcode.rs):(__int64)MipsRegLo_S(m_Opcode.rs);
__int64 ValRt = Is64Bit(m_Opcode.rt)?MipsReg(m_Opcode.rt):(__int64)MipsRegLo_S(m_Opcode.rt);
@ -3681,8 +3674,6 @@ void CRecompilerOps::SPECIAL_DSUB (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rt) && IsConst(m_Opcode.rs)) {
if (IsMapped(m_Opcode.rd)) { UnMap_GPR(m_Opcode.rd, FALSE); }
MipsReg(m_Opcode.rd) =
@ -3768,7 +3759,7 @@ void CRecompilerOps::SPECIAL_DSLL (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rt))
{
if (IsMapped(m_Opcode.rd)) { UnMap_GPR(m_Opcode.rd, FALSE); }
@ -3793,7 +3784,7 @@ void CRecompilerOps::SPECIAL_DSRL (void) {
CPU_Message(" %X %s",m_CompilePC,R4300iOpcodeName(m_Opcode.Hex,m_CompilePC));
if (m_Opcode.rd == 0) { return; }
if (b32BitCore()) { _Notify->BreakPoint(__FILE__,__LINE__); }
if (IsConst(m_Opcode.rt)) {
if (IsMapped(m_Opcode.rd)) { UnMap_GPR(m_Opcode.rd, FALSE); }
@ -3904,7 +3895,7 @@ void CRecompilerOps::SPECIAL_DSRL32 (void) {
}
} else {
Map_GPR_32bit(m_Opcode.rd,FALSE,-1);
MoveVariableToX86reg(&_GPR[m_Opcode.rt].UW[1],CRegName::GPR_Lo[m_Opcode.rt],cMipsRegMapLo(m_Opcode.rd));
MoveVariableToX86reg(&_GPR[m_Opcode.rt].UW[1],CRegName::GPR_Hi[m_Opcode.rt],cMipsRegMapLo(m_Opcode.rd));
if ((BYTE)m_Opcode.sa != 0) {
ShiftRightUnsignImmed(cMipsRegMapLo(m_Opcode.rd),(BYTE)m_Opcode.sa);
}
@ -4063,22 +4054,17 @@ void CRecompilerOps::COP0_MT (void) {
}
break;
case 6: //Wired
_Notify->BreakPoint(__FILE__,__LINE__);
#ifdef tofix
BeforeCallDirect(m_RegWorkingSet);
UpdateCounters(&m_RegWorkingSet.BlockCycleCount(),&m_RegWorkingSet.BlockRandomModifier(),FALSE);
m_RegWorkingSet.BlockCycleCount() = 0;
m_RegWorkingSet.BlockRandomModifier() = 0;
Call_Direct(FixRandomReg,"FixRandomReg");
UpdateCounters(m_RegWorkingSet, false, true);
//Call_Direct(FixRandomReg,"FixRandomReg");
AfterCallDirect(m_RegWorkingSet);
if (IsConst(m_Opcode.rt)) {
MoveConstToVariable(cMipsRegLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
} else if (IsMapped(m_Opcode.rt)) {
MoveX86regToVariable(cMipsRegLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
MoveX86regToVariable(cMipsRegMapLo(m_Opcode.rt), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
} else {
MoveX86regToVariable(Map_TempReg(x86_Any,m_Opcode.rt,FALSE), &_CP0[m_Opcode.rd], CRegName::Cop0[m_Opcode.rd]);
}
#endif
break;
case 13: //cause
if (IsConst(m_Opcode.rt)) {

View File

@ -939,17 +939,20 @@ void CRegInfo::UnMap_GPR (DWORD Reg, bool WriteBackValue)
return;
}
MoveX86regToVariable(MipsRegMapLo(Reg),&_GPR[Reg].UW[0],CRegName::GPR_Lo[Reg]);
MipsRegMapLo(Reg) = x86_Unknown;
if (Is64Bit(Reg)) {
MipsRegMapLo(Reg) = x86_Unknown;
MoveX86regToVariable(MipsRegMapHi(Reg),&_GPR[Reg].UW[1],CRegName::GPR_Hi[Reg]);
MipsRegMapHi(Reg) = x86_Unknown;
} else if (!m_b32bitCore) {
if (IsSigned(Reg)) {
ShiftRightSignImmed(MipsRegMapLo(Reg),31);
MoveX86regToVariable(MipsRegMapLo(Reg),&_GPR[Reg].UW[1],CRegName::GPR_Hi[Reg]);
} else {
MoveConstToVariable(0,&_GPR[Reg].UW[1],CRegName::GPR_Hi[Reg]);
} else {
if (!m_b32bitCore) {
if (IsSigned(Reg)) {
ShiftRightSignImmed(MipsRegMapLo(Reg),31);
MoveX86regToVariable(MipsRegMapLo(Reg),&_GPR[Reg].UW[1],CRegName::GPR_Hi[Reg]);
} else {
MoveConstToVariable(0,&_GPR[Reg].UW[1],CRegName::GPR_Hi[Reg]);
}
}
MipsRegMapLo(Reg) = x86_Unknown;
}
MipsRegState(Reg) = STATE_UNKNOWN;
}

View File

@ -0,0 +1,42 @@
#include "stdafx.h"
static HANDLE hCPULogFile = NULL;
bool bX86Logging = false;
void x86_Log_Message (const char * Message, ...) {
DWORD dwWritten;
char Msg[400];
va_list ap;
va_start( ap, Message );
vsprintf( Msg, Message, ap );
va_end( ap );
strcat(Msg,"\r\n");
WriteFile( hCPULogFile,Msg,strlen(Msg),&dwWritten,NULL );
}
void Start_x86_Log (void) {
CPath LogFileName(CPath::MODULE_DIRECTORY);
LogFileName.AppendDirectory("Logs");
LogFileName.SetNameExtension(_T("CPUoutput.log"));
if (hCPULogFile) { Stop_x86_Log(); }
hCPULogFile = CreateFile(LogFileName,GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hCPULogFile)
{
bX86Logging = true;
SetFilePointer(hCPULogFile,0,NULL,FILE_BEGIN);
}
}
void Stop_x86_Log (void) {
if (hCPULogFile) {
CloseHandle(hCPULogFile);
hCPULogFile = NULL;
bX86Logging = false;
}
}

View File

@ -0,0 +1,7 @@
#define CPU_Message(Message,... ) if (bX86Logging) { x86_Log_Message(Message,## __VA_ARGS__); }
void x86_Log_Message (const char * Message, ...);
void Start_x86_Log (void);
void Stop_x86_Log (void);
extern bool bX86Logging;

View File

@ -278,7 +278,7 @@
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
OptimizeForWindows98="1"
OptimizeForWindows98="0"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
TargetMachine="1"
@ -2743,37 +2743,6 @@
/>
</FileConfiguration>
</File>
<File
RelativePath="N64 System\C Core\CPU Log.cpp"
>
<FileConfiguration
Name="External Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories=""
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="N64 System\C Core\Logging.cpp"
>
@ -3274,6 +3243,10 @@
/>
</FileConfiguration>
</File>
<File
RelativePath=".\N64 System\Recompiler\x86CodeLog.cpp"
>
</File>
<File
RelativePath="N64 System\Recompiler\X86ops.cpp"
>
@ -4221,10 +4194,6 @@
RelativePath="N64 System\C Core\Core Settings.h"
>
</File>
<File
RelativePath="N64 System\C Core\CPU Log.h"
>
</File>
<File
RelativePath="N64 System\C Core\CPU.h"
>
@ -4345,6 +4314,10 @@
RelativePath="N64 System\Recompiler\Section Info.h"
>
</File>
<File
RelativePath=".\N64 System\Recompiler\x86CodeLog.h"
>
</File>
<File
RelativePath="N64 System\Recompiler\X86ops.h"
>

View File

@ -925,8 +925,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,7,51,46
PRODUCTVERSION 1,7,51,46
FILEVERSION 1,7,51,47
PRODUCTVERSION 1,7,51,47
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -943,12 +943,12 @@ BEGIN
BEGIN
VALUE "CompanyName", " "
VALUE "FileDescription", "Project64"
VALUE "FileVersion", "1, 7, 51, 46"
VALUE "FileVersion", "1, 7, 51, 47"
VALUE "InternalName", "Project64"
VALUE "LegalCopyright", "Copyright © 2010"
VALUE "OriginalFilename", "Project64.exe"
VALUE "ProductName", " Project64"
VALUE "ProductVersion", "1, 7, 51, 46"
VALUE "ProductVersion", "1, 7, 51, 47"
END
END
BLOCK "VarFileInfo"

View File

@ -138,10 +138,10 @@ void TestValidBinaryThread ( )
}
#ifdef VALIDATE_BIN_LOCAL
char Site[] = { "local.pj64.net" };
char Site[] = { "www.local.pj64-emu.com" };
ValidateEncryptString(Site,sizeof(Site) - 1);
#else
char Site[] = { "\xda\x1a\x5c\x02\x19\x48\x08\x18\x5b\x4d\x0c\x02" }; //"pj64-emu.com"
char Site[] = { "\xDD\x00\x00\x59\x5e\x1a\x5c\x02\x19\x48\x08\x18\x5b\x4d\x0c\x02" }; //"www.pj64-emu.com"
#endif
ValidateDecryptString(Site,sizeof(Site) - 1);
HINTERNET hConnect = InternetConnect(hSession, Site, 80, "", "", INTERNET_SERVICE_HTTP, 0, (LPARAM)0);
@ -223,6 +223,36 @@ void TestValidBinaryThread ( )
return;
}
#ifdef VALIDATE_DEBUG
{
bool bGotHeaders = true;
DWORD dwBufferLength = 300;
std::auto_ptr<BYTE> Headers(new BYTE[dwBufferLength]);
if (!HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS,Headers.get(),&dwBufferLength,NULL))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
Headers.reset(new BYTE[dwBufferLength]);
if (!HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS,Headers.get(),&dwBufferLength,NULL))
{
bGotHeaders = false;
}
}
}
if (bGotHeaders)
{
for (LPCTSTR Header = (LPCTSTR)Headers.get(); Header != NULL && Header[0] != 0; Header += strlen(Header) + 1)
{
WriteTraceF(TraceValidate,"v6a: Header: %s",Header);
}
} else {
WriteTrace(TraceValidate,"v6b: Failed to get headers");
}
}
#endif
std::auto_ptr<BYTE> WebSiteData;
DWORD dwRead = 0;
ULONG DataLen = 0;

View File

@ -12,7 +12,6 @@
#include "Validate Binary.h"
#include <Aclapi.h>
#include "N64 System/C Core/CPU Log.h"
#include "N64 System/C Core/C Core Interface.h"
#include "3rd Party/Zip.h"