diff --git a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp index fbfe449493..19cafc7567 100644 --- a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp +++ b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.cpp @@ -106,4 +106,32 @@ void PrintCallstack() } } +void PrintCallstack(LogTypes::LOG_TYPE _Log) +{ + u32 addr = Memory::ReadUnchecked_U32(PowerPC::ppcState.gpr[1]); // SP + + __Log(_Log, "\n == STACK TRACE - SP = %08x ==\n", PowerPC::ppcState.gpr[1]); + + if (LR == 0) { + __Log(_Log, " LR = 0 - this is bad\n"); + } + int count = 1; + if (g_symbolDB.GetDescription(PowerPC::ppcState.pc) != g_symbolDB.GetDescription(LR)) + { + __Log(_Log, " * %s [ LR = %08x ]\n", g_symbolDB.GetDescription(LR), LR); + count++; + } + + //walk the stack chain + while ((addr != 0xFFFFFFFF) && (addr != 0) && (count++ < 20) && (PowerPC::ppcState.gpr[1] != 0)) + { + u32 func = Memory::ReadUnchecked_U32(addr + 4); + const char *str = g_symbolDB.GetDescription(func); + if (!str || strlen(str) == 0 || !strcmp(str, "Invalid")) + str = "(unknown)"; + __Log(_Log, " * %s [ addr = %08x ]\n", str, func); + addr = Memory::ReadUnchecked_U32(addr); + } +} + } // end of namespace Debugger diff --git a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h index d3446354a2..7a8366531a 100644 --- a/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h +++ b/Source/Core/Core/Src/Debugger/Debugger_SymbolMap.h @@ -34,6 +34,7 @@ struct CallstackEntry bool GetCallstack(std::vector &output); void PrintCallstack(); +void PrintCallstack(LogTypes::LOG_TYPE _Log); } // end of namespace Debugger diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp index 6f6e3ccf43..bd6ef5fa3e 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE.cpp @@ -35,6 +35,8 @@ #include "../HW/Memmap.h" #include "../HW/WII_IPC.h" +#include "../Debugger/Debugger_SymbolMap.h" + namespace WII_IPC_HLE_Interface { @@ -174,7 +176,8 @@ bool AckCommand(u32 _Address) CCPU::Break(); Count++; */ - LOG(WII_IPC_HLE, "AckCommand: 0%08x", _Address); +// Debugger::PrintCallstack(LogTypes::WII_IPC_HLE); +// LOG(WII_IPC_HLE, "AckCommand: 0%08x", _Address); m_Ack.push(_Address); diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp index 04606cbb48..8c91b173b5 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.cpp @@ -17,17 +17,23 @@ #include "WII_IPC_HLE_Device_usb.h" #include "../Plugins/Plugin_Wiimote.h" -#include +// ugly hacks for "SendEventNumberOfCompletedPackets" int g_HCICount = 0; -int globalHandle = 0; +int g_GlobalHandle = 0; CWII_IPC_HLE_Device_usb_oh1_57e_305::CWII_IPC_HLE_Device_usb_oh1_57e_305(u32 _DeviceID, const std::string& _rDeviceName) : IWII_IPC_HLE_Device(_DeviceID, _rDeviceName) , m_pACLBuffer(NULL) , m_pHCIBuffer(NULL) - , m_UpdateWaitCount(0) - , scan_enable(0) + , m_ScanEnable(0) + , m_PINType(0) + , m_EventFilterType(0) + , m_EventFilterCondition(0) + , m_HostMaxACLSize(0) + , m_HostMaxSCOSize(0) + , m_HostNumACLPackets(0) + , m_HostNumSCOPackets(0) { m_WiiMotes.push_back(CWII_IPC_HLE_WiiMote(this, 0)); @@ -37,6 +43,12 @@ CWII_IPC_HLE_Device_usb_oh1_57e_305::CWII_IPC_HLE_Device_usb_oh1_57e_305(u32 _De m_ControllerBD.b[3] = 0x79; m_ControllerBD.b[4] = 0x00; m_ControllerBD.b[5] = 0xFF; + + m_ClassOfDevice[0] = 0x00; + m_ClassOfDevice[1] = 0x00; + m_ClassOfDevice[2] = 0x00; + + memset(m_LocalName, 0, HCI_UNIT_NAME_SIZE); } CWII_IPC_HLE_Device_usb_oh1_57e_305::~CWII_IPC_HLE_Device_usb_oh1_57e_305() @@ -57,16 +69,13 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::IOCtlV(u32 _CommandAddress) { // wpadsampled.elf - patch so the USB_LOG will print somehting // even it it wasn't very useful yet... -// Memory::Write_U8(1, 0x801514A8); // USB_LOG -// Memory::Write_U8(1, 0x801514D8); // WUD_DEBUGPrint - - Memory::Write_U8(1, 0x80148E09); // HID LOG - + // Memory::Write_U8(1, 0x801514A8); // USB_LOG + // Memory::Write_U8(1, 0x801514D8); // WUD_DEBUGPrint + // Memory::Write_U8(1, 0x80148E09); // HID LOG SIOCtlVBuffer CommandBuffer(_CommandAddress); -// LOG(WIIMOTE, "USB_IOCTL_CTRLMSG(0x%x)", CommandBuffer.Parameter); - + // LOG(WIIMOTE, "USB_IOCTL_CTRLMSG(0x%x)", CommandBuffer.Parameter); // DumpAsync(CommandBuffer.BufferVector, _CommandAddress, CommandBuffer.NumberInBuffer, CommandBuffer.NumberPayloadBuffer); switch(CommandBuffer.Parameter) @@ -75,23 +84,21 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::IOCtlV(u32 _CommandAddress) { SHCICommandMessage CtrlSetup; - // the USB stuff is little endian + // the USB stuff is little endian.. CtrlSetup.bRequestType = *(u8*)Memory::GetPointer(CommandBuffer.InBuffer[0].m_Address); CtrlSetup.bRequest = *(u8*)Memory::GetPointer(CommandBuffer.InBuffer[1].m_Address); CtrlSetup.wValue = *(u16*)Memory::GetPointer(CommandBuffer.InBuffer[2].m_Address); CtrlSetup.wIndex = *(u16*)Memory::GetPointer(CommandBuffer.InBuffer[3].m_Address); CtrlSetup.wLength = *(u16*)Memory::GetPointer(CommandBuffer.InBuffer[4].m_Address); -#ifdef LOGGING - u8 Termination =*(u8*)Memory::GetPointer(CommandBuffer.InBuffer[5].m_Address); -#endif - CtrlSetup.m_PayLoadAddr = CommandBuffer.PayloadBuffer[0].m_Address; CtrlSetup.m_PayLoadSize = CommandBuffer.PayloadBuffer[0].m_Size; - _dbg_assert_msg_(WIIMOTE, Termination == 0, "WIIMOTE: Termination != 0"); + // check termination + _dbg_assert_msg_(WIIMOTE, *(u8*)Memory::GetPointer(CommandBuffer.InBuffer[5].m_Address) == 0, + "WIIMOTE: Termination != 0"); #if 0 - LOG(WIIMOTE, "USB_IOCTL_CTRLMSG (0x%08x) - add to queue and send ack only", _CommandAddress); + LOG(WIIMOTE, "USB_IOCTL_CTRLMSG (0x%08x) - execute command", _CommandAddress); LOG(WIIMOTE, " bRequestType: 0x%x", CtrlSetup.bRequestType); LOG(WIIMOTE, " bRequest: 0x%x", CtrlSetup.bRequest); @@ -100,10 +107,11 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::IOCtlV(u32 _CommandAddress) LOG(WIIMOTE, " wLength: 0x%x", CtrlSetup.wLength); #endif - m_HCICommandMessageQueue.push(CtrlSetup); + ExecuteHCICommandMessage(CtrlSetup); - // control message has been sent... + // control message has been sent executed Memory::Write_U32(0, _CommandAddress + 0x4); + return true; } break; @@ -162,8 +170,6 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::IOCtlV(u32 _CommandAddress) delete m_pHCIBuffer; } m_pHCIBuffer = new SIOCtlVBuffer(_CommandAddress); - - // LOG(WIIMOTE, "HCI_EVENT_ENDPOINT: 0x%08x", _CommandAddress); return false; } break; @@ -221,57 +227,34 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::SendACLFrame(u16 _ConnectionHandle, u8 memcpy(frame.data, _pData, _Size); frame.size = _Size; m_AclFrameQue.push(frame); + + g_HCICount++; } u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update() { -#if 0 - if(m_UpdateWaitCount < 5) { - m_UpdateWaitCount++; - return 0; - } else { - m_UpdateWaitCount = 0; - } -#endif - if (!m_EventQueue.empty() && m_pHCIBuffer) { + SIOCtlVBuffer* pHCIBuffer = m_pHCIBuffer; + m_pHCIBuffer = NULL; + // copy the event to memory + const SQueuedEvent& rEvent = m_EventQueue.front(); + u8* pHCIEvent = Memory::GetPointer(pHCIBuffer->PayloadBuffer[0].m_Address); + memcpy(pHCIEvent, rEvent.m_buffer, rEvent.m_size); + + // return reply buffer size + Memory::Write_U32(rEvent.m_size, pHCIBuffer->m_Address + 0x4); + + if (rEvent.m_connectionHandle > 0) { - const SQueuedEvent& rEvent = m_EventQueue.front(); - - u8* pHCIEvent = Memory::GetPointer(m_pHCIBuffer->PayloadBuffer[0].m_Address); - memcpy(pHCIEvent, rEvent.m_buffer, rEvent.m_size); - - // return reply buffer size - Memory::Write_U32(rEvent.m_size, m_pHCIBuffer->m_Address + 0x4); - - if (rEvent.m_connectionHandle > 0) - { - g_HCICount++; - } - - m_EventQueue.pop(); + g_HCICount++; } - u32 Addr = m_pHCIBuffer->m_Address; - delete m_pHCIBuffer; - m_pHCIBuffer = NULL; + m_EventQueue.pop(); - return Addr; - } - - // HCI control message/event handling - if (!m_HCICommandMessageQueue.empty() && m_pHCIBuffer) - { - const SHCICommandMessage& rMessage = m_HCICommandMessageQueue.front(); - - ExecuteHCICommandMessage(rMessage); - m_HCICommandMessageQueue.pop(); - - u32 Addr = m_pHCIBuffer->m_Address; - delete m_pHCIBuffer; - m_pHCIBuffer = NULL; + u32 Addr = pHCIBuffer->m_Address; + delete pHCIBuffer; return Addr; } @@ -303,9 +286,9 @@ u32 CWII_IPC_HLE_Device_usb_oh1_57e_305::Update() return Addr; } - if (m_HCICommandMessageQueue.empty() && (globalHandle != 0) && (g_HCICount > 0)) + if ((g_GlobalHandle != 0) && (g_HCICount > 0)) { - SendEventNumberOfCompletedPackets(globalHandle, g_HCICount*2); + SendEventNumberOfCompletedPackets(g_GlobalHandle, g_HCICount*2); g_HCICount = 0; } @@ -516,7 +499,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventConnectionComplete(bdaddr_t _ AddEventToQueue(Event); - globalHandle = pConnectionComplete->Connection_Handle; + g_GlobalHandle = pConnectionComplete->Connection_Handle; #ifdef LOGGING static char s_szLinkType[][128] = @@ -683,7 +666,7 @@ bool CWII_IPC_HLE_Device_usb_oh1_57e_305::SendEventNumberOfCompletedPackets(u16 SHCIEventNumberOfCompletedPackets* pNumberOfCompletedPackets = (SHCIEventNumberOfCompletedPackets*)Event.m_buffer; pNumberOfCompletedPackets->EventType = 0x13; - pNumberOfCompletedPackets->PayloadLength = sizeof(SHCIEventReadRemoteFeatures) - 2; + pNumberOfCompletedPackets->PayloadLength = sizeof(SHCIEventNumberOfCompletedPackets) - 2; pNumberOfCompletedPackets->NumberOfHandles = 1; pNumberOfCompletedPackets->Connection_Handle = _connectionHandle; pNumberOfCompletedPackets->Number_Of_Completed_Packets = _count; @@ -892,6 +875,9 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::ExecuteHCICommandMessage(const SHCICom CommandSniffMode(pInput); break; + case HCI_CMD_DISCONNECT: + PanicAlert("HCI_CMD_DISCONNECT is not implemented"); + break; // // --- default --- // @@ -902,7 +888,23 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::ExecuteHCICommandMessage(const SHCICom u16 ogf = HCI_OGF(pMsg->Opcode); #endif - _dbg_assert_msg_(WIIMOTE, 0, "Unknown USB_IOCTL_CTRLMSG: 0x%04X (ocf: 0x%x ogf 0x%x)", pMsg->Opcode, ocf, ogf); + + PanicAlert("0x%08x", _rHCICommandMessage.m_PayLoadAddr); + + if (ogf == 0x3f) + { + PanicAlert("Vendor specific HCI command"); + LOG(WIIMOTE, "Command: vendor specific: 0x%04X (ocf: 0x%x)", pMsg->Opcode, ocf); + + for (int i=0; ilen; i++) + { + LOG(WIIMOTE, " 0x02%x", pInput[i]); + } + } + else + { + _dbg_assert_msg_(WIIMOTE, 0, "Unknown USB_IOCTL_CTRLMSG: 0x%04X (ocf: 0x%x ogf 0x%x)", pMsg->Opcode, ocf, ogf); + } // send fake all is okay msg... SendEventCommandComplete(pMsg->Opcode, NULL, 0); @@ -1093,10 +1095,10 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandHostBufferSize(u8* _Input) { // command parameters hci_host_buffer_size_cp* pHostBufferSize = (hci_host_buffer_size_cp*)_Input; - Host_max_acl_size = pHostBufferSize->max_acl_size; - Host_max_sco_size = pHostBufferSize->max_sco_size; - Host_num_acl_pkts = pHostBufferSize->num_acl_pkts; - Host_num_sco_pkts = pHostBufferSize->num_sco_pkts; + m_HostMaxACLSize = pHostBufferSize->max_acl_size; + m_HostMaxSCOSize = pHostBufferSize->max_sco_size; + m_HostNumACLPackets = pHostBufferSize->num_acl_pkts; + m_HostNumSCOPackets = pHostBufferSize->num_sco_pkts; // reply hci_host_buffer_size_rp Reply; @@ -1134,7 +1136,7 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteScanEnable(u8* _Input) { // command parameters hci_write_scan_enable_cp* pWriteScanEnable = (hci_write_scan_enable_cp*)_Input; - scan_enable = pWriteScanEnable->scan_enable; + m_ScanEnable = pWriteScanEnable->scan_enable; // reply hci_write_scan_enable_rp Reply; @@ -1157,15 +1159,16 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteScanEnable(u8* _Input) SendEventCommandComplete(HCI_CMD_WRITE_SCAN_ENABLE, &Reply, sizeof(hci_write_scan_enable_rp)); // TODO: fix this ugly request connection hack :) - // for homebrew works this if (pWriteScanEnable->scan_enable & 2) // check if page scan is enable -/* { + //for homebrew works this + if (pWriteScanEnable->scan_enable & 2) // check if page scan is enable + { static bool first = true; if (first) { first = false; - SendEventRequestConnection(); + // SendEventRequestConnection(); } - }*/ + } } void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandWriteInquiryMode(u8* _Input) @@ -1224,8 +1227,8 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandSetEventFilter(u8* _Input) { // command parameters hci_set_event_filter_cp* pSetEventFilter = (hci_set_event_filter_cp*)_Input; - filter_type = pSetEventFilter->filter_type; - filter_condition_type = pSetEventFilter->filter_condition_type; + m_EventFilterType = pSetEventFilter->filter_type; + m_EventFilterCondition = pSetEventFilter->filter_condition_type; // reply hci_set_event_filter_rp Reply; @@ -1415,6 +1418,10 @@ void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandReadRemoteVerInfo(u8* _Input) SendEventCommandStatus(HCI_CMD_READ_REMOTE_VER_INFO); SendEventReadRemoteVerInfo(pReadRemoteVerInfo->con_handle); + + // connect + // CWII_IPC_HLE_WiiMote* pWiimote = AccessWiiMote(pReadRemoteVerInfo->con_handle); + // pWiimote->Connect(); } void CWII_IPC_HLE_Device_usb_oh1_57e_305::CommandReadRemoteFeatures(u8* _Input) diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h index 4434fff2aa..e0c983414a 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h @@ -25,9 +25,7 @@ #include "WII_IPC_HLE_WiiMote.h" class CWII_IPC_HLE_WiiMote; -struct SCommandMessage; -struct SHCIEventCommand; -struct usb_ctrl_setup; + union UACLHeader { @@ -41,6 +39,13 @@ union UACLHeader u32 Hex; }; +struct ACLFrame +{ + u16 ConnectionHandle; + u8* data; + u32 size; +}; + struct SQueuedEvent { u8 m_buffer[1024]; @@ -50,14 +55,13 @@ struct SQueuedEvent SQueuedEvent(size_t size, u16 connectionHandle) : m_size(size) , m_connectionHandle(connectionHandle) - {} -}; - -struct ACLFrame -{ - u16 ConnectionHandle; - u8* data; - u32 size; + { + if (m_size > 1024) + { + // i know this code sux... + PanicAlert("SQueuedEvent: allocate a to big buffer!!"); + } + } }; class CWII_IPC_HLE_Device_usb_oh1_57e_305 : public IWII_IPC_HLE_Device @@ -77,17 +81,16 @@ public: void SendACLFrame(u16 _ConnectionHandle, u8* _pData, u32 _Size); + //hack for wiimote plugin + +public: + + std::vector m_WiiMotes; + CWII_IPC_HLE_WiiMote* AccessWiiMote(const bdaddr_t& _rAddr); + CWII_IPC_HLE_WiiMote* AccessWiiMote(u16 _ConnectionHandle); + private: - typedef std::queue CEventQueue; - CEventQueue m_EventQueue; - - void AddEventToQueue(const SQueuedEvent& _event) - { - m_EventQueue.push(_event); - } - - enum { USB_IOCTL_HCI_COMMAND_MESSAGE = 0, @@ -120,20 +123,34 @@ private: u32 m_PayLoadSize; }; + bdaddr_t m_ControllerBD; + u8 m_ClassOfDevice[HCI_CLASS_SIZE]; + char m_LocalName[HCI_UNIT_NAME_SIZE]; + u8 m_PINType; + u8 m_ScanEnable; - // STATE_TO_SAVE - std::queue m_HCICommandMessageQueue; - std::queue m_AclFrameQue; + u8 m_EventFilterType; + u8 m_EventFilterCondition; + + u16 m_HostMaxACLSize; + u8 m_HostMaxSCOSize; + u16 m_HostNumACLPackets; + u16 m_HostNumSCOPackets; + + typedef std::queue CEventQueue; + typedef std::queue CACLFrameQueue; + + CEventQueue m_EventQueue; + CACLFrameQueue m_AclFrameQue; SIOCtlVBuffer* m_pACLBuffer; SIOCtlVBuffer* m_pHCIBuffer; + // Events bool SendEventCommandStatus(u16 _Opcode); void SendEventCommandComplete(u16 _OpCode, void* _pData, u32 _DataSize); - bool SendEventInquiryResponse(); bool SendEventInquiryComplete(); - bool SendEventRemoteNameReq(bdaddr_t _bd); bool SendEventRequestConnection(); bool SendEventConnectionComplete(bdaddr_t _bd); @@ -145,28 +162,13 @@ private: bool SendEventAuthenticationCompleted(u16 _connectionHandle); bool SendEventModeChange(u16 _connectionHandle, u8 _mode, u16 _value); + // Execute HCI Message void ExecuteHCICommandMessage(const SHCICommandMessage& _rCtrlMessage); - // commands - void CommandReset(u8* _Input); - void CommandReadBufferSize(u8* _Input); - void CommandReadLocalVer(u8* _Input); - void CommandReadBDAdrr(u8* _Input); - void CommandReadLocalFeatures(u8* _Input); - void CommandReadStoredLinkKey(u8* _Input); - void CommandWriteUnitClass(u8* _Input); - void CommandWriteLocalName(u8* _Input); - void CommandWritePinType(u8* _Input); - void CommandHostBufferSize(u8* _Input); - void CommandWritePageTimeOut(u8* _Input); - void CommandWriteScanEnable(u8* _Input); + // OGF 0x01 Link control commands and return parameters void CommandWriteInquiryMode(u8* _Input); void CommandWritePageScanType(u8* _Input); - void CommandSetEventFilter(u8* _Input); - void CommandInquiry(u8* _Input); - void CommandWriteInquiryScanType(u8* _Input); - void CommandVendorSpecific_FC4C(u8* _Input, u32 _Size); - void CommandVendorSpecific_FC4F(u8* _Input, u32 _Size); + void CommandHostBufferSize(u8* _Input); void CommandInquiryCancel(u8* _Input); void CommandRemoteNameReq(u8* _Input); void CommandCreateCon(u8* _Input); @@ -174,33 +176,40 @@ private: void CommandReadClockOffset(u8* _Input); void CommandReadRemoteVerInfo(u8* _Input); void CommandReadRemoteFeatures(u8* _Input); - void CommandWriteLinkPolicy(u8* _Input); void CommandAuthenticationRequested(u8* _Input); + void CommandInquiry(u8* _Input); + + // OGF 0x02 Link policy commands and return parameters + void CommandWriteLinkPolicy(u8* _Input); void CommandSniffMode(u8* _Input); + // OGF 0x03 Host Controller and Baseband commands and return parameters + void CommandReset(u8* _Input); + void CommandWriteLocalName(u8* _Input); + void CommandWritePageTimeOut(u8* _Input); + void CommandWriteScanEnable(u8* _Input); + void CommandWriteUnitClass(u8* _Input); + void CommandReadStoredLinkKey(u8* _Input); + void CommandWritePinType(u8* _Input); + void CommandSetEventFilter(u8* _Input); + void CommandWriteInquiryScanType(u8* _Input); + + // OGF 0x04 Informational commands and return parameters + void CommandReadBufferSize(u8* _Input); + void CommandReadLocalVer(u8* _Input); + void CommandReadLocalFeatures(u8* _Input); + void CommandReadBDAdrr(u8* _Input); + + // OGF 0x3F Vendor specific + void CommandVendorSpecific_FC4C(u8* _Input, u32 _Size); + void CommandVendorSpecific_FC4F(u8* _Input, u32 _Size); + void SendToDevice(u16 _ConnectionHandle, u8* _pData, u32 _Size); - - u32 m_UpdateWaitCount; - - u8 scan_enable; - bdaddr_t m_ControllerBD; - u8 m_ClassOfDevice[HCI_CLASS_SIZE]; - char m_LocalName[HCI_UNIT_NAME_SIZE]; - u8 m_PINType; - u8 filter_type; - u8 filter_condition_type; - - - u16 Host_max_acl_size; /* Max. size of ACL packet (bytes) */ - u8 Host_max_sco_size; /* Max. size of SCO packet (bytes) */ - u16 Host_num_acl_pkts; /* Max. number of ACL packets */ - u16 Host_num_sco_pkts; /* Max. number of SCO packets */ - -public: //hack for wiimote plugin - std::vector m_WiiMotes; - CWII_IPC_HLE_WiiMote* AccessWiiMote(const bdaddr_t& _rAddr); - CWII_IPC_HLE_WiiMote* AccessWiiMote(u16 _ConnectionHandle); + void AddEventToQueue(const SQueuedEvent& _event) + { + m_EventQueue.push(_event); + } }; #endif diff --git a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp index 743eb16da9..9dbde16423 100644 --- a/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp +++ b/Source/Core/Core/Src/PowerPC/Interpreter/Interpreter.cpp @@ -59,26 +59,24 @@ void Shutdown() { } - -//#include "../../Plugins/Plugin_DSP.h" void patches() { -// if (Memory::Read_U32(0x80095AC0) != -1) CCPU::Break(); - // if (Memory::Read_U32(0x8003E574) != 0) CCPU::Break(); - - // if (PC == 0x800077e8) -/* u32 op = Memory::Read_U32(0x80015180); - if ((op != 0xc0028218) && (op != 0)) - { - PanicAlert("hrehre %x", op); - CCPU::Break(); - } */ - - // if (PC == 0x80022588) CCPU::Break(); - -// WII_IPC_HLE_Interface::Update(); - +/* if (Memory::Read_U16(0x90000880) == 0x130b) + { + PanicAlert("Memory::Read_U16(0x900008800) == 0x130b"); + } +*/ +/* if (PC == 0x80074cd4) + { + u16 command = Common::swap16(Memory::Read_U16(PowerPC::ppcState.gpr[3] + 8)); + if (command == 0x0b13) + { + PanicAlert("command: %x", command); + CCPU::Break(); + } + }*/ } + void SingleStepInner(void) { static UGeckoInstruction instCode;