mirror of https://github.com/PCSX2/pcsx2.git
250 lines
8.1 KiB
C++
250 lines
8.1 KiB
C++
// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team
|
|
// SPDX-License-Identifier: LGPL-3.0+
|
|
|
|
// --------------------------------------------------------------------------------------
|
|
// Source / Tracre Logging (high volume logging facilities)
|
|
// --------------------------------------------------------------------------------------
|
|
// This module defines functions for performing high-volume diagnostic trace logging.
|
|
// Only ASCII versions of these logging functions are provided. Translated messages are
|
|
// not supported, and typically all logs are written to disk (ASCII), thus making the
|
|
// ASCII versions the more efficient option.
|
|
|
|
#include "DebugTools/Debug.h"
|
|
#include "R3000A.h"
|
|
#include "x86/iR5900.h"
|
|
|
|
#include "fmt/core.h"
|
|
|
|
#include <cctype>
|
|
#include <cstdarg>
|
|
|
|
#ifndef _WIN32
|
|
#include <sys/time.h>
|
|
#endif
|
|
|
|
using namespace R5900;
|
|
|
|
FILE* emuLog;
|
|
|
|
SysTraceLogPack SysTrace;
|
|
SysConsoleLogPack SysConsole;
|
|
|
|
// writes text directly to the logfile, no newlines appended.
|
|
void __Log(const char* fmt, ...)
|
|
{
|
|
va_list list;
|
|
va_start(list, fmt);
|
|
|
|
if (emuLog != NULL)
|
|
{
|
|
std::vfprintf(emuLog, fmt, list);
|
|
fputs("\n", emuLog);
|
|
fflush(emuLog);
|
|
}
|
|
|
|
va_end(list);
|
|
}
|
|
|
|
void SysTraceLog::DoWrite(const char* msg) const
|
|
{
|
|
if (emuLog == NULL)
|
|
return;
|
|
|
|
fputs(msg, emuLog);
|
|
fputs("\n", emuLog);
|
|
fflush(emuLog);
|
|
}
|
|
|
|
void SysTraceLog_EE::ApplyPrefix(std::string& ascii) const
|
|
{
|
|
fmt::format_to(std::back_inserter(ascii), "{:<4}({:08x} {:08x}): ", ((SysTraceLogDescriptor*)m_Descriptor)->Prefix, cpuRegs.pc, cpuRegs.cycle);
|
|
}
|
|
|
|
void SysTraceLog_IOP::ApplyPrefix(std::string& ascii) const
|
|
{
|
|
fmt::format_to(std::back_inserter(ascii), "{:<4}({:08x} {:08x}): ", ((SysTraceLogDescriptor*)m_Descriptor)->Prefix, psxRegs.pc, psxRegs.cycle);
|
|
}
|
|
|
|
void SysTraceLog_VIFcode::ApplyPrefix(std::string& ascii) const
|
|
{
|
|
_parent::ApplyPrefix(ascii);
|
|
ascii.append("vifCode_");
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------------
|
|
// SysConsoleLogPack (descriptions)
|
|
// --------------------------------------------------------------------------------------
|
|
static const TraceLogDescriptor
|
|
|
|
TLD_ELF = {
|
|
"ELF", "E&LF",
|
|
"Dumps detailed information for PS2 executables (ELFs)."},
|
|
|
|
TLD_eeRecPerf = {"EErecPerf", "EErec &Performance", "Logs manual protection, split blocks, and other things that might impact performance."},
|
|
|
|
TLD_eeConsole = {"EEout", "EE C&onsole", "Shows the game developer's logging text (EE processor)."},
|
|
|
|
TLD_iopConsole = {"IOPout", "&IOP Console", "Shows the game developer's logging text (IOP processor)."},
|
|
|
|
TLD_deci2 = {"DECI2", "DECI&2 Console", "Shows DECI2 debugging logs (EE processor)."},
|
|
|
|
TLD_Pgif = {"PGIFout", "&PGIF Console", "Shows output from pgif the emulated ps1 gpu"},
|
|
|
|
TLD_recordingConsole = {"Input Recording", "Input Recording Console", "Shows recording related logs and information."},
|
|
|
|
TLD_controlInfo = {"Controller Info", "Controller Info", "Shows detailed controller input values for port 1, every frame."}
|
|
; // End init of TraceLogDescriptors
|
|
|
|
SysConsoleLogPack::SysConsoleLogPack()
|
|
: ELF(&TLD_ELF, Color_Gray)
|
|
, eeRecPerf(&TLD_eeRecPerf, Color_Gray)
|
|
, pgifLog(&TLD_Pgif)
|
|
, eeConsole(&TLD_eeConsole)
|
|
, iopConsole(&TLD_iopConsole)
|
|
, deci2(&TLD_deci2)
|
|
, recordingConsole(&TLD_recordingConsole)
|
|
, controlInfo(&TLD_controlInfo)
|
|
{
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------------
|
|
// SysTraceLogPack (descriptions)
|
|
// --------------------------------------------------------------------------------------
|
|
static const SysTraceLogDescriptor
|
|
TLD_SIF = {
|
|
{"SIF", "SIF (EE <-> IOP)",
|
|
""},
|
|
"SIF"};
|
|
|
|
// ----------------------------
|
|
// EmotionEngine (EE/R5900)
|
|
// ----------------------------
|
|
|
|
static const SysTraceLogDescriptor
|
|
TLD_EE_Bios = {
|
|
{"Bios", "Bios",
|
|
"SYSCALL and DECI2 activity."},
|
|
"EE"},
|
|
|
|
TLD_EE_Memory = {{"Memory", "Memory", "Direct memory accesses to unknown or unmapped EE memory space."}, "eMem"},
|
|
|
|
TLD_EE_R5900 = {{"R5900", "R5900 Core", "Disasm of executing core instructions (excluding COPs and CACHE)."}, "eDis"},
|
|
|
|
TLD_EE_COP0 = {{"COP0", "COP0", "Disasm of COP0 instructions (MMU, cpu and dma status, etc)."}, "eDis"},
|
|
|
|
TLD_EE_COP1 = {{"FPU", "COP1/FPU", "Disasm of the EE's floating point unit (FPU) only."}, "eDis"},
|
|
|
|
TLD_EE_COP2 = {{"VUmacro", "COP2/VUmacro", "Disasm of the EE's VU0macro co-processor instructions."}, "eDis"},
|
|
|
|
TLD_EE_Cache = {{"Cache", "Cache", "Execution of EE cache instructions."}, "eDis"},
|
|
|
|
TLD_EE_KnownHw = {{"HwRegs", "Hardware Regs", "All known hardware register accesses (very slow!); not including sub filter options below."}, "eReg"},
|
|
|
|
TLD_EE_UnknownHw = {{"UnknownRegs", "Unknown Regs", "Logs only unknown, unmapped, or unimplemented register accesses."}, "eReg"},
|
|
|
|
TLD_EE_DMAhw = {{"DmaRegs", "DMA Regs", "Logs only DMA-related registers."}, "eReg"},
|
|
|
|
TLD_EE_IPU = {{"IPU", "IPU", "IPU activity: hardware registers, decoding operations, DMA status, etc."}, "IPU"},
|
|
|
|
TLD_EE_GIFtag = {{"GIFtags", "GIFtags", "All GIFtag parse activity; path index, tag type, etc."}, "GIF"},
|
|
|
|
TLD_EE_VIFcode = {{"VIFcodes", "VIFcodes", "All VIFcode processing; command, tag style, interrupts."}, "VIF"},
|
|
|
|
TLD_EE_MSKPATH3 = {{"MSKPATH3", "MSKPATH3", "All processing involved in Path3 Masking."}, "MSKPATH3"},
|
|
|
|
TLD_EE_SPR = {{"MFIFO", "Scratchpad MFIFO", "Scratchpad's MFIFO activity."}, "SPR"},
|
|
|
|
TLD_EE_DMAC = {{"DmaCtrl", "DMA Controller", "Actual data transfer logs, bus right arbitration, stalls, etc."}, "eDmaC"},
|
|
|
|
TLD_EE_Counters = {{"Counters", "Counters", "Tracks all EE counters events and some counter register activity."}, "eCnt"},
|
|
|
|
TLD_EE_VIF = {{"VIF", "VIF", "Dumps various VIF and VIFcode processing data."}, "VIF"},
|
|
|
|
TLD_EE_GIF = {{"GIF", "GIF", "Dumps various GIF and GIFtag parsing data."}, "GIF"};
|
|
|
|
// ----------------------------------
|
|
// IOP - Input / Output Processor
|
|
// ----------------------------------
|
|
|
|
static const SysTraceLogDescriptor
|
|
TLD_IOP_Bios = {
|
|
{"Bios", "Bios",
|
|
"SYSCALL and IRX activity."},
|
|
"IOP"},
|
|
|
|
TLD_IOP_Memory = {{"Memory", "Memory", "Direct memory accesses to unknown or unmapped IOP memory space."}, "iMem"},
|
|
|
|
TLD_IOP_R3000A = {{"R3000A", "R3000A Core", "Disasm of executing core instructions (excluding COPs and CACHE)."}, "iDis"},
|
|
|
|
TLD_IOP_COP2 = {{"COP2/GPU", "COP2", "Disasm of the IOP's GPU co-processor instructions."}, "iDis"},
|
|
|
|
TLD_IOP_KnownHw = {{"HwRegs", "Hardware Regs", "All known hardware register accesses, not including the sub-filters below."}, "iReg"},
|
|
|
|
TLD_IOP_UnknownHw = {{"UnknownRegs", "Unknown Regs", "Logs only unknown, unmapped, or unimplemented register accesses."}, "iReg"},
|
|
|
|
TLD_IOP_DMAhw = {{"DmaRegs", "DMA Regs", "Logs only DMA-related registers."}, "iReg"},
|
|
|
|
TLD_IOP_Memcards = {{"Memorycards", "Memorycards", "Memorycard reads, writes, erases, terminators, and other processing."}, "Mcd"},
|
|
|
|
TLD_IOP_PAD = {{"Pad", "Pad", "Gamepad activity on the SIO."}, "Pad"},
|
|
|
|
TLD_IOP_DMAC = {{"DmaCrl", "DMA Controller", "Actual DMA event processing and data transfer logs."}, "iDmaC"},
|
|
|
|
TLD_IOP_Counters = {{"Counters", "Counters", "Tracks all IOP counters events and some counter register activity."}, "iCnt"},
|
|
|
|
TLD_IOP_CDVD = {{"CDVD", "CDVD", "Detailed logging of CDVD hardware."}, "CDVD"},
|
|
|
|
TLD_IOP_MDEC = {{"MDEC", "MDEC", "Detailed logging of the Motion (FMV) Decoder hardware unit."}, "MDEC"};
|
|
|
|
SysTraceLogPack::SysTraceLogPack()
|
|
: SIF(&TLD_SIF)
|
|
{
|
|
}
|
|
|
|
SysTraceLogPack::EE_PACK::EE_PACK()
|
|
: Bios(&TLD_EE_Bios)
|
|
, Memory(&TLD_EE_Memory)
|
|
, GIFtag(&TLD_EE_GIFtag)
|
|
, VIFcode(&TLD_EE_VIFcode)
|
|
, MSKPATH3(&TLD_EE_MSKPATH3)
|
|
|
|
, R5900(&TLD_EE_R5900)
|
|
, COP0(&TLD_EE_COP0)
|
|
, COP1(&TLD_EE_COP1)
|
|
, COP2(&TLD_EE_COP2)
|
|
, Cache(&TLD_EE_Cache)
|
|
|
|
, KnownHw(&TLD_EE_KnownHw)
|
|
, UnknownHw(&TLD_EE_UnknownHw)
|
|
, DMAhw(&TLD_EE_DMAhw)
|
|
, IPU(&TLD_EE_IPU)
|
|
|
|
, DMAC(&TLD_EE_DMAC)
|
|
, Counters(&TLD_EE_Counters)
|
|
, SPR(&TLD_EE_SPR)
|
|
|
|
, VIF(&TLD_EE_VIF)
|
|
, GIF(&TLD_EE_GIF)
|
|
{
|
|
}
|
|
|
|
SysTraceLogPack::IOP_PACK::IOP_PACK()
|
|
: Bios(&TLD_IOP_Bios)
|
|
, Memcards(&TLD_IOP_Memcards)
|
|
, PAD(&TLD_IOP_PAD)
|
|
|
|
, R3000A(&TLD_IOP_R3000A)
|
|
, COP2(&TLD_IOP_COP2)
|
|
, Memory(&TLD_IOP_Memory)
|
|
|
|
, KnownHw(&TLD_IOP_KnownHw)
|
|
, UnknownHw(&TLD_IOP_UnknownHw)
|
|
, DMAhw(&TLD_IOP_DMAhw)
|
|
|
|
, DMAC(&TLD_IOP_DMAC)
|
|
, Counters(&TLD_IOP_Counters)
|
|
, CDVD(&TLD_IOP_CDVD)
|
|
, MDEC(&TLD_IOP_MDEC)
|
|
{
|
|
}
|