mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	Remove trailing spaces in every file but the ones imported from SkyEye, AOSP or generated
This commit is contained in:
		
							parent
							
								
									eeb921fc6e
								
							
						
					
					
						commit
						f5d38649c7
					
				
					 75 changed files with 296 additions and 296 deletions
				
			
		| 
						 | 
					@ -28,23 +28,23 @@ Follow the indentation/whitespace style shown below. Do not use tabs, use 4-spac
 | 
				
			||||||
namespace Example {
 | 
					namespace Example {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Namespace contents are not indented
 | 
					// Namespace contents are not indented
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
// Declare globals at the top
 | 
					// Declare globals at the top
 | 
				
			||||||
int g_foo = 0;
 | 
					int g_foo = 0;
 | 
				
			||||||
char* g_some_pointer; // Notice the position of the *
 | 
					char* g_some_pointer; // Notice the position of the *
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
enum SomeEnum {
 | 
					enum SomeEnum {
 | 
				
			||||||
    COLOR_RED,
 | 
					    COLOR_RED,
 | 
				
			||||||
    COLOR_GREEN,
 | 
					    COLOR_GREEN,
 | 
				
			||||||
    COLOR_BLUE
 | 
					    COLOR_BLUE
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
struct Position {
 | 
					struct Position {
 | 
				
			||||||
    int x, y;
 | 
					    int x, y;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
// Use "typename" rather than "class" here, just to be consistent
 | 
					// Use "typename" rather than "class" here, just to be consistent
 | 
				
			||||||
template 
 | 
					template
 | 
				
			||||||
void FooBar() {
 | 
					void FooBar() {
 | 
				
			||||||
    int some_array[] = {
 | 
					    int some_array[] = {
 | 
				
			||||||
        5,
 | 
					        5,
 | 
				
			||||||
| 
						 | 
					@ -52,29 +52,29 @@ void FooBar() {
 | 
				
			||||||
        7,
 | 
					        7,
 | 
				
			||||||
        42
 | 
					        42
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    if (note == the_space_after_the_if) {
 | 
					    if (note == the_space_after_the_if) {
 | 
				
			||||||
        CallAfunction();
 | 
					        CallAfunction();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        // Use a space after the // when commenting
 | 
					        // Use a space after the // when commenting
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    // Comment directly above code when possible
 | 
					    // Comment directly above code when possible
 | 
				
			||||||
    if (some_condition) single_statement();
 | 
					    if (some_condition) single_statement();
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    // Place a single space after the for loop semicolons
 | 
					    // Place a single space after the for loop semicolons
 | 
				
			||||||
    for (int i = 0; i != 25; ++i) {
 | 
					    for (int i = 0; i != 25; ++i) {
 | 
				
			||||||
        // This is how we write loops
 | 
					        // This is how we write loops
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    DoStuff(this, function, call, takes, up, multiple,
 | 
					    DoStuff(this, function, call, takes, up, multiple,
 | 
				
			||||||
            lines, like, this);
 | 
					            lines, like, this);
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    if (this || condition_takes_up_multiple &&
 | 
					    if (this || condition_takes_up_multiple &&
 | 
				
			||||||
        lines && like && this || everything ||
 | 
					        lines && like && this || everything ||
 | 
				
			||||||
        alright || then) {
 | 
					        alright || then) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    switch (var) {
 | 
					    switch (var) {
 | 
				
			||||||
    // No indentation for case label
 | 
					    // No indentation for case label
 | 
				
			||||||
    case 1: {
 | 
					    case 1: {
 | 
				
			||||||
| 
						 | 
					@ -85,18 +85,18 @@ void FooBar() {
 | 
				
			||||||
    case 3:
 | 
					    case 3:
 | 
				
			||||||
        DoSomething(var);
 | 
					        DoSomething(var);
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        // Yes, even break for the last case
 | 
					        // Yes, even break for the last case
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    std::vector
 | 
					    std::vector
 | 
				
			||||||
        you_can_declare,
 | 
					        you_can_declare,
 | 
				
			||||||
        a_few,
 | 
					        a_few,
 | 
				
			||||||
        variables,
 | 
					        variables,
 | 
				
			||||||
        like_this;
 | 
					        like_this;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@ int __cdecl main(int argc, char **argv) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Config config;
 | 
					    Config config;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    if (!Settings::values.enable_log)
 | 
					    if (!Settings::values.enable_log)
 | 
				
			||||||
        LogManager::Shutdown();
 | 
					        LogManager::Shutdown();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,7 +23,7 @@
 | 
				
			||||||
#define APP_TITLE       APP_NAME " " APP_VERSION
 | 
					#define APP_TITLE       APP_NAME " " APP_VERSION
 | 
				
			||||||
#define COPYRIGHT       "Copyright (C) 2013-2014 Citra Team"
 | 
					#define COPYRIGHT       "Copyright (C) 2013-2014 Citra Team"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EmuThread::EmuThread(GRenderWindow* render_window) : 
 | 
					EmuThread::EmuThread(GRenderWindow* render_window) :
 | 
				
			||||||
    filename(""), exec_cpu_step(false), cpu_running(false),
 | 
					    filename(""), exec_cpu_step(false), cpu_running(false),
 | 
				
			||||||
    stop_run(false), render_window(render_window)
 | 
					    stop_run(false), render_window(render_window)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -42,7 +42,7 @@ void EmuThread::run()
 | 
				
			||||||
        if (cpu_running)
 | 
					        if (cpu_running)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Core::RunLoop();
 | 
					            Core::RunLoop();
 | 
				
			||||||
        } 
 | 
					        }
 | 
				
			||||||
        else if (exec_cpu_step)
 | 
					        else if (exec_cpu_step)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            exec_cpu_step = false;
 | 
					            exec_cpu_step = false;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@ class EmuThread : public QThread
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set image filename
 | 
					     * Set image filename
 | 
				
			||||||
     * 
 | 
					     *
 | 
				
			||||||
     * @param filename
 | 
					     * @param filename
 | 
				
			||||||
     * @warning Only call when not running!
 | 
					     * @warning Only call when not running!
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ void CallstackWidget::OnCPUStepped()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u32 sp = app_core->GetReg(13); //stack pointer
 | 
					    u32 sp = app_core->GetReg(13); //stack pointer
 | 
				
			||||||
    u32 addr, ret_addr, call_addr, func_addr;
 | 
					    u32 addr, ret_addr, call_addr, func_addr;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    int counter = 0;
 | 
					    int counter = 0;
 | 
				
			||||||
    for (int addr = 0x10000000; addr >= sp; addr -= 4)
 | 
					    for (int addr = 0x10000000; addr >= sp; addr -= 4)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ void CallstackWidget::OnCPUStepped()
 | 
				
			||||||
            callstack_model->setItem(counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0'))));
 | 
					            callstack_model->setItem(counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0'))));
 | 
				
			||||||
            callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(ret_addr, 8, 16, QLatin1Char('0'))));
 | 
					            callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(ret_addr, 8, 16, QLatin1Char('0'))));
 | 
				
			||||||
            callstack_model->setItem(counter, 2, new QStandardItem(QString("0x%1").arg(call_addr, 8, 16, QLatin1Char('0'))));
 | 
					            callstack_model->setItem(counter, 2, new QStandardItem(QString("0x%1").arg(call_addr, 8, 16, QLatin1Char('0'))));
 | 
				
			||||||
            
 | 
					
 | 
				
			||||||
            name = Symbols::HasSymbol(func_addr) ? Symbols::GetSymbol(func_addr).name : "unknown";
 | 
					            name = Symbols::HasSymbol(func_addr) ? Symbols::GetSymbol(func_addr).name : "unknown";
 | 
				
			||||||
            callstack_model->setItem(counter, 3, new QStandardItem(QString("%1_%2").arg(QString::fromStdString(name))
 | 
					            callstack_model->setItem(counter, 3, new QStandardItem(QString("%1_%2").arg(QString::fromStdString(name))
 | 
				
			||||||
                .arg(QString("0x%1").arg(func_addr, 8, 16, QLatin1Char('0')))));
 | 
					                .arg(QString("0x%1").arg(func_addr, 8, 16, QLatin1Char('0')))));
 | 
				
			||||||
| 
						 | 
					@ -63,4 +63,4 @@ void CallstackWidget::OnCPUStepped()
 | 
				
			||||||
            counter++;
 | 
					            counter++;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ private:
 | 
				
			||||||
	Ui::ARMRegisters cpu_regs_ui;
 | 
						Ui::ARMRegisters cpu_regs_ui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	QTreeWidget* tree;
 | 
						QTreeWidget* tree;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
	QTreeWidgetItem* registers;
 | 
						QTreeWidgetItem* registers;
 | 
				
			||||||
	QTreeWidgetItem* CSPR;
 | 
						QTreeWidgetItem* CSPR;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +51,7 @@ public:
 | 
				
			||||||
    PointerWrapSection(PointerWrap &p, int ver, const char *title) : p_(p), ver_(ver), title_(title) {
 | 
					    PointerWrapSection(PointerWrap &p, int ver, const char *title) : p_(p), ver_(ver), title_(title) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ~PointerWrapSection();
 | 
					    ~PointerWrapSection();
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    bool operator == (const int &v) const { return ver_ == v; }
 | 
					    bool operator == (const int &v) const { return ver_ == v; }
 | 
				
			||||||
    bool operator != (const int &v) const { return ver_ != v; }
 | 
					    bool operator != (const int &v) const { return ver_ != v; }
 | 
				
			||||||
    bool operator <= (const int &v) const { return ver_ <= v; }
 | 
					    bool operator <= (const int &v) const { return ver_ <= v; }
 | 
				
			||||||
| 
						 | 
					@ -196,7 +196,7 @@ public:
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        (*ptr) += size;
 | 
					        (*ptr) += size;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    template<class K, class T>
 | 
					    template<class K, class T>
 | 
				
			||||||
    void Do(std::map<K, T *> &x)
 | 
					    void Do(std::map<K, T *> &x)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -364,7 +364,7 @@ public:
 | 
				
			||||||
        if (vec_size > 0)
 | 
					        if (vec_size > 0)
 | 
				
			||||||
            DoArray(&x[0], vec_size);
 | 
					            DoArray(&x[0], vec_size);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Store deques.
 | 
					    // Store deques.
 | 
				
			||||||
    template<class T>
 | 
					    template<class T>
 | 
				
			||||||
    void Do(std::deque<T *> &x)
 | 
					    void Do(std::deque<T *> &x)
 | 
				
			||||||
| 
						 | 
					@ -481,11 +481,11 @@ public:
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Store strings.
 | 
					    // Store strings.
 | 
				
			||||||
    void Do(std::string &x) 
 | 
					    void Do(std::string &x)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int stringLen = (int)x.length() + 1;
 | 
					        int stringLen = (int)x.length() + 1;
 | 
				
			||||||
        Do(stringLen);
 | 
					        Do(stringLen);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        switch (mode) {
 | 
					        switch (mode) {
 | 
				
			||||||
        case MODE_READ:        x = (char*)*ptr; break;
 | 
					        case MODE_READ:        x = (char*)*ptr; break;
 | 
				
			||||||
        case MODE_WRITE:    memcpy(*ptr, x.c_str(), stringLen); break;
 | 
					        case MODE_WRITE:    memcpy(*ptr, x.c_str(), stringLen); break;
 | 
				
			||||||
| 
						 | 
					@ -495,7 +495,7 @@ public:
 | 
				
			||||||
        (*ptr) += stringLen;
 | 
					        (*ptr) += stringLen;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Do(std::wstring &x) 
 | 
					    void Do(std::wstring &x)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int stringLen = sizeof(wchar_t)*((int)x.length() + 1);
 | 
					        int stringLen = sizeof(wchar_t)*((int)x.length() + 1);
 | 
				
			||||||
        Do(stringLen);
 | 
					        Do(stringLen);
 | 
				
			||||||
| 
						 | 
					@ -534,7 +534,7 @@ public:
 | 
				
			||||||
    void Do(T &x) {
 | 
					    void Do(T &x) {
 | 
				
			||||||
        DoHelper<T>::Do(this, x);
 | 
					        DoHelper<T>::Do(this, x);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    template<class T>
 | 
					    template<class T>
 | 
				
			||||||
    void DoPOD(T &x) {
 | 
					    void DoPOD(T &x) {
 | 
				
			||||||
        DoHelper<T>::Do(this, x);
 | 
					        DoHelper<T>::Do(this, x);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,7 @@ template<> struct CompileTimeAssert<true> {};
 | 
				
			||||||
#define b2(x)   (   (x) | (   (x) >> 1) )
 | 
					#define b2(x)   (   (x) | (   (x) >> 1) )
 | 
				
			||||||
#define b4(x)   ( b2(x) | ( b2(x) >> 2) )
 | 
					#define b4(x)   ( b2(x) | ( b2(x) >> 2) )
 | 
				
			||||||
#define b8(x)   ( b4(x) | ( b4(x) >> 4) )
 | 
					#define b8(x)   ( b4(x) | ( b4(x) >> 4) )
 | 
				
			||||||
#define b16(x)  ( b8(x) | ( b8(x) >> 8) )  
 | 
					#define b16(x)  ( b8(x) | ( b8(x) >> 8) )
 | 
				
			||||||
#define b32(x)  (b16(x) | (b16(x) >>16) )
 | 
					#define b32(x)  (b16(x) | (b16(x) >>16) )
 | 
				
			||||||
#define ROUND_UP_POW2(x)    (b32(x - 1) + 1)
 | 
					#define ROUND_UP_POW2(x)    (b32(x - 1) + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,12 +79,12 @@ inline u64 _rotr64(u64 x, unsigned int shift){
 | 
				
			||||||
    #define unlink _unlink
 | 
					    #define unlink _unlink
 | 
				
			||||||
    #define snprintf _snprintf
 | 
					    #define snprintf _snprintf
 | 
				
			||||||
    #define vscprintf _vscprintf
 | 
					    #define vscprintf _vscprintf
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
// Locale Cross-Compatibility
 | 
					// Locale Cross-Compatibility
 | 
				
			||||||
    #define locale_t _locale_t
 | 
					    #define locale_t _locale_t
 | 
				
			||||||
    #define freelocale _free_locale
 | 
					    #define freelocale _free_locale
 | 
				
			||||||
    #define newlocale(mask, locale, base) _create_locale(mask, locale)
 | 
					    #define newlocale(mask, locale, base) _create_locale(mask, locale)
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    #define LC_GLOBAL_LOCALE    ((locale_t)-1)
 | 
					    #define LC_GLOBAL_LOCALE    ((locale_t)-1)
 | 
				
			||||||
    #define LC_ALL_MASK            LC_ALL
 | 
					    #define LC_ALL_MASK            LC_ALL
 | 
				
			||||||
    #define LC_COLLATE_MASK        LC_COLLATE
 | 
					    #define LC_COLLATE_MASK        LC_COLLATE
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ inline u64 _rotr64(u64 x, unsigned int shift){
 | 
				
			||||||
    #define LC_MONETARY_MASK    LC_MONETARY
 | 
					    #define LC_MONETARY_MASK    LC_MONETARY
 | 
				
			||||||
    #define LC_NUMERIC_MASK        LC_NUMERIC
 | 
					    #define LC_NUMERIC_MASK        LC_NUMERIC
 | 
				
			||||||
    #define LC_TIME_MASK        LC_TIME
 | 
					    #define LC_TIME_MASK        LC_TIME
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    inline locale_t uselocale(locale_t new_locale)
 | 
					    inline locale_t uselocale(locale_t new_locale)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Retrieve the current per thread locale setting
 | 
					        // Retrieve the current per thread locale setting
 | 
				
			||||||
| 
						 | 
					@ -168,8 +168,8 @@ inline u16 swap16(u16 _data) {return _byteswap_ushort(_data);}
 | 
				
			||||||
inline u32 swap32(u32 _data) {return _byteswap_ulong (_data);}
 | 
					inline u32 swap32(u32 _data) {return _byteswap_ulong (_data);}
 | 
				
			||||||
inline u64 swap64(u64 _data) {return _byteswap_uint64(_data);}
 | 
					inline u64 swap64(u64 _data) {return _byteswap_uint64(_data);}
 | 
				
			||||||
#elif _M_ARM
 | 
					#elif _M_ARM
 | 
				
			||||||
inline u16 swap16 (u16 _data) { u32 data = _data; __asm__ ("rev16 %0, %1\n" : "=l" (data) : "l" (data)); return (u16)data;} 
 | 
					inline u16 swap16 (u16 _data) { u32 data = _data; __asm__ ("rev16 %0, %1\n" : "=l" (data) : "l" (data)); return (u16)data;}
 | 
				
			||||||
inline u32 swap32 (u32 _data) {__asm__ ("rev %0, %1\n" : "=l" (_data) : "l" (_data)); return _data;} 
 | 
					inline u32 swap32 (u32 _data) {__asm__ ("rev %0, %1\n" : "=l" (_data) : "l" (_data)); return _data;}
 | 
				
			||||||
inline u64 swap64(u64 _data) {return ((u64)swap32(_data) << 32) | swap32(_data >> 32);}
 | 
					inline u64 swap64(u64 _data) {return ((u64)swap32(_data) << 32) | swap32(_data >> 32);}
 | 
				
			||||||
#elif __linux__
 | 
					#elif __linux__
 | 
				
			||||||
inline u16 swap16(u16 _data) {return bswap_16(_data);}
 | 
					inline u16 swap16(u16 _data) {return bswap_16(_data);}
 | 
				
			||||||
| 
						 | 
					@ -226,7 +226,7 @@ template <typename T>
 | 
				
			||||||
inline T FromBigEndian(T data)
 | 
					inline T FromBigEndian(T data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    //static_assert(std::is_arithmetic<T>::value, "function only makes sense with arithmetic types");
 | 
					    //static_assert(std::is_arithmetic<T>::value, "function only makes sense with arithmetic types");
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    swap<sizeof(data)>(reinterpret_cast<u8*>(&data));
 | 
					    swap<sizeof(data)>(reinterpret_cast<u8*>(&data));
 | 
				
			||||||
    return data;
 | 
					    return data;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@
 | 
				
			||||||
 * http://code.google.com/p/gekko-gc-emu/
 | 
					 * http://code.google.com/p/gekko-gc-emu/
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once 
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cmath>
 | 
					#include <cmath>
 | 
				
			||||||
#include <cstdint>
 | 
					#include <cstdint>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,7 +86,7 @@ bool ConsoleListener::IsOpen()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
  LetterSpace: SetConsoleScreenBufferSize and SetConsoleWindowInfo are
 | 
					  LetterSpace: SetConsoleScreenBufferSize and SetConsoleWindowInfo are
 | 
				
			||||||
    dependent on each other, that's the reason for the additional checks.  
 | 
					    dependent on each other, that's the reason for the additional checks.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
void ConsoleListener::BufferWidthHeight(int BufferWidth, int BufferHeight, int ScreenWidth, int ScreenHeight, bool BufferFirst)
 | 
					void ConsoleListener::BufferWidthHeight(int BufferWidth, int BufferHeight, int ScreenWidth, int ScreenHeight, bool BufferFirst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -225,7 +225,7 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        BytesWritten += cAttrWritten;
 | 
					        BytesWritten += cAttrWritten;
 | 
				
			||||||
        coordScreen = GetCoordinates(BytesWritten, LBufWidth);
 | 
					        coordScreen = GetCoordinates(BytesWritten, LBufWidth);
 | 
				
			||||||
    }    
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X;
 | 
					    const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X;
 | 
				
			||||||
    COORD Coo = GetCoordinates(OldCursor, LBufWidth);
 | 
					    COORD Coo = GetCoordinates(OldCursor, LBufWidth);
 | 
				
			||||||
| 
						 | 
					@ -296,23 +296,23 @@ void ConsoleListener::Log(LogTypes::LOG_LEVELS Level, const char *Text)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// Clear console screen
 | 
					// Clear console screen
 | 
				
			||||||
void ConsoleListener::ClearScreen(bool Cursor)
 | 
					void ConsoleListener::ClearScreen(bool Cursor)
 | 
				
			||||||
{ 
 | 
					{
 | 
				
			||||||
#if defined(_WIN32)
 | 
					#if defined(_WIN32)
 | 
				
			||||||
    COORD coordScreen = { 0, 0 }; 
 | 
					    COORD coordScreen = { 0, 0 };
 | 
				
			||||||
    DWORD cCharsWritten; 
 | 
					    DWORD cCharsWritten;
 | 
				
			||||||
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
 | 
					    CONSOLE_SCREEN_BUFFER_INFO csbi;
 | 
				
			||||||
    DWORD dwConSize; 
 | 
					    DWORD dwConSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
 | 
					    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GetConsoleScreenBufferInfo(hConsole, &csbi); 
 | 
					    GetConsoleScreenBufferInfo(hConsole, &csbi);
 | 
				
			||||||
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
 | 
					    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
 | 
				
			||||||
    // Write space to the entire console
 | 
					    // Write space to the entire console
 | 
				
			||||||
    FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); 
 | 
					    FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
 | 
				
			||||||
    GetConsoleScreenBufferInfo(hConsole, &csbi); 
 | 
					    GetConsoleScreenBufferInfo(hConsole, &csbi);
 | 
				
			||||||
    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
 | 
					    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
 | 
				
			||||||
    // Reset cursor
 | 
					    // Reset cursor
 | 
				
			||||||
    if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen); 
 | 
					    if (Cursor) SetConsoleCursorPosition(hConsole, coordScreen);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ using namespace std;
 | 
				
			||||||
void PCSTR2LPTSTR( PCSTR lpszIn, LPTSTR lpszOut )
 | 
					void PCSTR2LPTSTR( PCSTR lpszIn, LPTSTR lpszOut )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if defined(UNICODE)||defined(_UNICODE)
 | 
					#if defined(UNICODE)||defined(_UNICODE)
 | 
				
			||||||
    ULONG index = 0; 
 | 
					    ULONG index = 0;
 | 
				
			||||||
    PCSTR lpAct = lpszIn;
 | 
					    PCSTR lpAct = lpszIn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for( ; ; lpAct++ )
 | 
					    for( ; ; lpAct++ )
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,7 @@ void PCSTR2LPTSTR( PCSTR lpszIn, LPTSTR lpszOut )
 | 
				
			||||||
        lpszOut[index++] = (TCHAR)(*lpAct);
 | 
					        lpszOut[index++] = (TCHAR)(*lpAct);
 | 
				
			||||||
        if ( *lpAct == 0 )
 | 
					        if ( *lpAct == 0 )
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
    } 
 | 
					    }
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    // This is trivial :)
 | 
					    // This is trivial :)
 | 
				
			||||||
    strcpy( lpszOut, lpszIn );
 | 
					    strcpy( lpszOut, lpszIn );
 | 
				
			||||||
| 
						 | 
					@ -101,7 +101,7 @@ BOOL InitSymInfo( PCSTR lpszInitialSymbolPath )
 | 
				
			||||||
    CHAR     lpszSymbolPath[BUFFERSIZE];
 | 
					    CHAR     lpszSymbolPath[BUFFERSIZE];
 | 
				
			||||||
    DWORD    symOptions = SymGetOptions();
 | 
					    DWORD    symOptions = SymGetOptions();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    symOptions |= SYMOPT_LOAD_LINES; 
 | 
					    symOptions |= SYMOPT_LOAD_LINES;
 | 
				
			||||||
    symOptions &= ~SYMOPT_UNDNAME;
 | 
					    symOptions &= ~SYMOPT_UNDNAME;
 | 
				
			||||||
    SymSetOptions( symOptions );
 | 
					    SymSetOptions( symOptions );
 | 
				
			||||||
    InitSymbolPath( lpszSymbolPath, lpszInitialSymbolPath );
 | 
					    InitSymbolPath( lpszSymbolPath, lpszInitialSymbolPath );
 | 
				
			||||||
| 
						 | 
					@ -153,15 +153,15 @@ static BOOL GetFunctionInfoFromAddresses( ULONG fnAddress, ULONG stackAddress, L
 | 
				
			||||||
#ifndef _M_X64
 | 
					#ifndef _M_X64
 | 
				
			||||||
    DWORD             dwDisp = 0;
 | 
					    DWORD             dwDisp = 0;
 | 
				
			||||||
    if ( SymGetSymFromAddr( GetCurrentProcess(), (ULONG)fnAddress, &dwDisp, pSym ) )
 | 
					    if ( SymGetSymFromAddr( GetCurrentProcess(), (ULONG)fnAddress, &dwDisp, pSym ) )
 | 
				
			||||||
#else 
 | 
					#else
 | 
				
			||||||
    //makes it compile but hell im not sure if this works...
 | 
					    //makes it compile but hell im not sure if this works...
 | 
				
			||||||
    DWORD64           dwDisp = 0;
 | 
					    DWORD64           dwDisp = 0;
 | 
				
			||||||
    if ( SymGetSymFromAddr( GetCurrentProcess(), (ULONG)fnAddress, (PDWORD64)&dwDisp, pSym ) )
 | 
					    if ( SymGetSymFromAddr( GetCurrentProcess(), (ULONG)fnAddress, (PDWORD64)&dwDisp, pSym ) )
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Make the symbol readable for humans
 | 
					        // Make the symbol readable for humans
 | 
				
			||||||
        UnDecorateSymbolName( pSym->Name, lpszNonUnicodeUnDSymbol, BUFFERSIZE, 
 | 
					        UnDecorateSymbolName( pSym->Name, lpszNonUnicodeUnDSymbol, BUFFERSIZE,
 | 
				
			||||||
            UNDNAME_COMPLETE | 
 | 
					            UNDNAME_COMPLETE |
 | 
				
			||||||
            UNDNAME_NO_THISTYPE |
 | 
					            UNDNAME_NO_THISTYPE |
 | 
				
			||||||
            UNDNAME_NO_SPECIAL_SYMS |
 | 
					            UNDNAME_NO_SPECIAL_SYMS |
 | 
				
			||||||
            UNDNAME_NO_MEMBER_TYPE |
 | 
					            UNDNAME_NO_MEMBER_TYPE |
 | 
				
			||||||
| 
						 | 
					@ -219,7 +219,7 @@ static BOOL GetFunctionInfoFromAddresses( ULONG fnAddress, ULONG stackAddress, L
 | 
				
			||||||
        _tcscat( lpszSymbol, lpszParsed );
 | 
					        _tcscat( lpszSymbol, lpszParsed );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ret = TRUE;
 | 
					        ret = TRUE;
 | 
				
			||||||
    } 
 | 
					    }
 | 
				
			||||||
    GlobalFree( pSym );
 | 
					    GlobalFree( pSym );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
| 
						 | 
					@ -325,14 +325,14 @@ void StackTrace( HANDLE hThread, const char* lpszMessage, FILE *file )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        PrintFunctionAndSourceInfo(file, callStack);
 | 
					        PrintFunctionAndSourceInfo(file, callStack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for( ULONG index = 0; ; index++ ) 
 | 
					        for( ULONG index = 0; ; index++ )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            bResult = StackWalk(
 | 
					            bResult = StackWalk(
 | 
				
			||||||
                IMAGE_FILE_MACHINE_I386,
 | 
					                IMAGE_FILE_MACHINE_I386,
 | 
				
			||||||
                hProcess,
 | 
					                hProcess,
 | 
				
			||||||
                hThread,
 | 
					                hThread,
 | 
				
			||||||
                &callStack,
 | 
					                &callStack,
 | 
				
			||||||
                NULL, 
 | 
					                NULL,
 | 
				
			||||||
                NULL,
 | 
					                NULL,
 | 
				
			||||||
                SymFunctionTableAccess,
 | 
					                SymFunctionTableAccess,
 | 
				
			||||||
                SymGetModuleBase,
 | 
					                SymGetModuleBase,
 | 
				
			||||||
| 
						 | 
					@ -341,7 +341,7 @@ void StackTrace( HANDLE hThread, const char* lpszMessage, FILE *file )
 | 
				
			||||||
            if ( index == 0 )
 | 
					            if ( index == 0 )
 | 
				
			||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if( !bResult || callStack.AddrFrame.Offset == 0 ) 
 | 
					            if( !bResult || callStack.AddrFrame.Offset == 0 )
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            PrintFunctionAndSourceInfo(file, callStack);
 | 
					            PrintFunctionAndSourceInfo(file, callStack);
 | 
				
			||||||
| 
						 | 
					@ -382,14 +382,14 @@ void StackTrace(HANDLE hThread, const char* lpszMessage, FILE *file, DWORD eip,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        PrintFunctionAndSourceInfo(file, callStack);
 | 
					        PrintFunctionAndSourceInfo(file, callStack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for( ULONG index = 0; ; index++ ) 
 | 
					        for( ULONG index = 0; ; index++ )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            bResult = StackWalk(
 | 
					            bResult = StackWalk(
 | 
				
			||||||
                IMAGE_FILE_MACHINE_I386,
 | 
					                IMAGE_FILE_MACHINE_I386,
 | 
				
			||||||
                hProcess,
 | 
					                hProcess,
 | 
				
			||||||
                hThread,
 | 
					                hThread,
 | 
				
			||||||
                &callStack,
 | 
					                &callStack,
 | 
				
			||||||
                NULL, 
 | 
					                NULL,
 | 
				
			||||||
                NULL,
 | 
					                NULL,
 | 
				
			||||||
                SymFunctionTableAccess,
 | 
					                SymFunctionTableAccess,
 | 
				
			||||||
                SymGetModuleBase,
 | 
					                SymGetModuleBase,
 | 
				
			||||||
| 
						 | 
					@ -398,7 +398,7 @@ void StackTrace(HANDLE hThread, const char* lpszMessage, FILE *file, DWORD eip,
 | 
				
			||||||
            if ( index == 0 )
 | 
					            if ( index == 0 )
 | 
				
			||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if( !bResult || callStack.AddrFrame.Offset == 0 ) 
 | 
					            if( !bResult || callStack.AddrFrame.Offset == 0 )
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            PrintFunctionAndSourceInfo(file, callStack);
 | 
					            PrintFunctionAndSourceInfo(file, callStack);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ public:
 | 
				
			||||||
        // create the element, add it to the queue
 | 
					        // create the element, add it to the queue
 | 
				
			||||||
        m_write_ptr->current = new T(std::forward<Arg>(t));
 | 
					        m_write_ptr->current = new T(std::forward<Arg>(t));
 | 
				
			||||||
        // set the next pointer to a new element ptr
 | 
					        // set the next pointer to a new element ptr
 | 
				
			||||||
        // then advance the write pointer 
 | 
					        // then advance the write pointer
 | 
				
			||||||
        m_write_ptr = m_write_ptr->next = new ElementPtr();
 | 
					        m_write_ptr = m_write_ptr->next = new ElementPtr();
 | 
				
			||||||
        Common::AtomicIncrement(m_size);
 | 
					        Common::AtomicIncrement(m_size);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,7 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string&
 | 
				
			||||||
        bool bkeepLooping = true;
 | 
					        bool bkeepLooping = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        while (bkeepLooping)
 | 
					        while (bkeepLooping)
 | 
				
			||||||
        {            
 | 
					        {
 | 
				
			||||||
            if (findData.cFileName[0] != '.')
 | 
					            if (findData.cFileName[0] != '.')
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                std::string strFilename;
 | 
					                std::string strFilename;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ bool IsDirectory(const std::string &filename)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (result < 0) {
 | 
					    if (result < 0) {
 | 
				
			||||||
        WARN_LOG(COMMON, "IsDirectory: stat failed on %s: %s", 
 | 
					        WARN_LOG(COMMON, "IsDirectory: stat failed on %s: %s",
 | 
				
			||||||
                 filename.c_str(), GetLastErrorMsg());
 | 
					                 filename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -102,7 +102,7 @@ bool Delete(const std::string &filename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    INFO_LOG(COMMON, "Delete: file %s", filename.c_str());
 | 
					    INFO_LOG(COMMON, "Delete: file %s", filename.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Return true because we care about the file no 
 | 
					    // Return true because we care about the file no
 | 
				
			||||||
    // being there, not the actual delete.
 | 
					    // being there, not the actual delete.
 | 
				
			||||||
    if (!Exists(filename))
 | 
					    if (!Exists(filename))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -120,13 +120,13 @@ bool Delete(const std::string &filename)
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    if (!DeleteFile(Common::UTF8ToTStr(filename).c_str()))
 | 
					    if (!DeleteFile(Common::UTF8ToTStr(filename).c_str()))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s", 
 | 
					        WARN_LOG(COMMON, "Delete: DeleteFile failed on %s: %s",
 | 
				
			||||||
                 filename.c_str(), GetLastErrorMsg());
 | 
					                 filename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    if (unlink(filename.c_str()) == -1) {
 | 
					    if (unlink(filename.c_str()) == -1) {
 | 
				
			||||||
        WARN_LOG(COMMON, "Delete: unlink failed on %s: %s", 
 | 
					        WARN_LOG(COMMON, "Delete: unlink failed on %s: %s",
 | 
				
			||||||
                 filename.c_str(), GetLastErrorMsg());
 | 
					                 filename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -232,28 +232,28 @@ bool DeleteDir(const std::string &filename)
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// renames file srcFilename to destFilename, returns true on success 
 | 
					// renames file srcFilename to destFilename, returns true on success
 | 
				
			||||||
bool Rename(const std::string &srcFilename, const std::string &destFilename)
 | 
					bool Rename(const std::string &srcFilename, const std::string &destFilename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    INFO_LOG(COMMON, "Rename: %s --> %s", 
 | 
					    INFO_LOG(COMMON, "Rename: %s --> %s",
 | 
				
			||||||
            srcFilename.c_str(), destFilename.c_str());
 | 
					            srcFilename.c_str(), destFilename.c_str());
 | 
				
			||||||
    if (rename(srcFilename.c_str(), destFilename.c_str()) == 0)
 | 
					    if (rename(srcFilename.c_str(), destFilename.c_str()) == 0)
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    ERROR_LOG(COMMON, "Rename: failed %s --> %s: %s", 
 | 
					    ERROR_LOG(COMMON, "Rename: failed %s --> %s: %s",
 | 
				
			||||||
              srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
					              srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// copies file srcFilename to destFilename, returns true on success 
 | 
					// copies file srcFilename to destFilename, returns true on success
 | 
				
			||||||
bool Copy(const std::string &srcFilename, const std::string &destFilename)
 | 
					bool Copy(const std::string &srcFilename, const std::string &destFilename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    INFO_LOG(COMMON, "Copy: %s --> %s", 
 | 
					    INFO_LOG(COMMON, "Copy: %s --> %s",
 | 
				
			||||||
            srcFilename.c_str(), destFilename.c_str());
 | 
					            srcFilename.c_str(), destFilename.c_str());
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    if (CopyFile(Common::UTF8ToTStr(srcFilename).c_str(), Common::UTF8ToTStr(destFilename).c_str(), FALSE))
 | 
					    if (CopyFile(Common::UTF8ToTStr(srcFilename).c_str(), Common::UTF8ToTStr(destFilename).c_str(), FALSE))
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s", 
 | 
					    ERROR_LOG(COMMON, "Copy: failed %s --> %s: %s",
 | 
				
			||||||
            srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
					            srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					@ -267,7 +267,7 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename)
 | 
				
			||||||
    FILE *input = fopen(srcFilename.c_str(), "rb");
 | 
					    FILE *input = fopen(srcFilename.c_str(), "rb");
 | 
				
			||||||
    if (!input)
 | 
					    if (!input)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ERROR_LOG(COMMON, "Copy: input failed %s --> %s: %s", 
 | 
					        ERROR_LOG(COMMON, "Copy: input failed %s --> %s: %s",
 | 
				
			||||||
                srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
					                srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -277,7 +277,7 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename)
 | 
				
			||||||
    if (!output)
 | 
					    if (!output)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        fclose(input);
 | 
					        fclose(input);
 | 
				
			||||||
        ERROR_LOG(COMMON, "Copy: output failed %s --> %s: %s", 
 | 
					        ERROR_LOG(COMMON, "Copy: output failed %s --> %s: %s",
 | 
				
			||||||
                srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
					                srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -291,8 +291,8 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (ferror(input) != 0)
 | 
					            if (ferror(input) != 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ERROR_LOG(COMMON, 
 | 
					                ERROR_LOG(COMMON,
 | 
				
			||||||
                        "Copy: failed reading from source, %s --> %s: %s", 
 | 
					                        "Copy: failed reading from source, %s --> %s: %s",
 | 
				
			||||||
                        srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
					                        srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
                goto bail;
 | 
					                goto bail;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -302,8 +302,8 @@ bool Copy(const std::string &srcFilename, const std::string &destFilename)
 | 
				
			||||||
        int wnum = fwrite(buffer, sizeof(char), rnum, output);
 | 
					        int wnum = fwrite(buffer, sizeof(char), rnum, output);
 | 
				
			||||||
        if (wnum != rnum)
 | 
					        if (wnum != rnum)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ERROR_LOG(COMMON, 
 | 
					            ERROR_LOG(COMMON,
 | 
				
			||||||
                    "Copy: failed writing to output, %s --> %s: %s", 
 | 
					                    "Copy: failed writing to output, %s --> %s: %s",
 | 
				
			||||||
                    srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
					                    srcFilename.c_str(), destFilename.c_str(), GetLastErrorMsg());
 | 
				
			||||||
            goto bail;
 | 
					            goto bail;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -335,7 +335,7 @@ u64 GetSize(const std::string &filename)
 | 
				
			||||||
        WARN_LOG(COMMON, "GetSize: failed %s: is a directory", filename.c_str());
 | 
					        WARN_LOG(COMMON, "GetSize: failed %s: is a directory", filename.c_str());
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    struct stat64 buf;
 | 
					    struct stat64 buf;
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    if (_tstat64(Common::UTF8ToTStr(filename).c_str(), &buf) == 0)
 | 
					    if (_tstat64(Common::UTF8ToTStr(filename).c_str(), &buf) == 0)
 | 
				
			||||||
| 
						 | 
					@ -384,10 +384,10 @@ u64 GetSize(FILE *f)
 | 
				
			||||||
    return size;
 | 
					    return size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// creates an empty file filename, returns true on success 
 | 
					// creates an empty file filename, returns true on success
 | 
				
			||||||
bool CreateEmptyFile(const std::string &filename)
 | 
					bool CreateEmptyFile(const std::string &filename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    INFO_LOG(COMMON, "CreateEmptyFile: %s", filename.c_str()); 
 | 
					    INFO_LOG(COMMON, "CreateEmptyFile: %s", filename.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!FileUtil::IOFile(filename, "wb"))
 | 
					    if (!FileUtil::IOFile(filename, "wb"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -437,7 +437,7 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        // check for "." and ".."
 | 
					        // check for "." and ".."
 | 
				
			||||||
        if (((virtualName[0] == '.') && (virtualName[1] == '\0')) ||
 | 
					        if (((virtualName[0] == '.') && (virtualName[1] == '\0')) ||
 | 
				
			||||||
                ((virtualName[0] == '.') && (virtualName[1] == '.') && 
 | 
					                ((virtualName[0] == '.') && (virtualName[1] == '.') &&
 | 
				
			||||||
                 (virtualName[2] == '\0')))
 | 
					                 (virtualName[2] == '\0')))
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        entry.virtualName = virtualName;
 | 
					        entry.virtualName = virtualName;
 | 
				
			||||||
| 
						 | 
					@ -452,14 +452,14 @@ u32 ScanDirectoryTree(const std::string &directory, FSTEntry& parentEntry)
 | 
				
			||||||
            foundEntries += (u32)entry.size;
 | 
					            foundEntries += (u32)entry.size;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        { // is a file 
 | 
					        { // is a file
 | 
				
			||||||
            entry.isDirectory = false;
 | 
					            entry.isDirectory = false;
 | 
				
			||||||
            entry.size = GetSize(entry.physicalName.c_str());
 | 
					            entry.size = GetSize(entry.physicalName.c_str());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        ++foundEntries;
 | 
					        ++foundEntries;
 | 
				
			||||||
        // Push into the tree
 | 
					        // Push into the tree
 | 
				
			||||||
        parentEntry.children.push_back(entry);        
 | 
					        parentEntry.children.push_back(entry);
 | 
				
			||||||
#ifdef _WIN32 
 | 
					#ifdef _WIN32
 | 
				
			||||||
    } while (FindNextFile(hFind, &ffd) != 0);
 | 
					    } while (FindNextFile(hFind, &ffd) != 0);
 | 
				
			||||||
    FindClose(hFind);
 | 
					    FindClose(hFind);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					@ -504,7 +504,7 @@ bool DeleteDirRecursively(const std::string &directory)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // check for "." and ".."
 | 
					        // check for "." and ".."
 | 
				
			||||||
        if (((virtualName[0] == '.') && (virtualName[1] == '\0')) ||
 | 
					        if (((virtualName[0] == '.') && (virtualName[1] == '\0')) ||
 | 
				
			||||||
            ((virtualName[0] == '.') && (virtualName[1] == '.') && 
 | 
					            ((virtualName[0] == '.') && (virtualName[1] == '.') &&
 | 
				
			||||||
             (virtualName[2] == '\0')))
 | 
					             (virtualName[2] == '\0')))
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -540,7 +540,7 @@ bool DeleteDirRecursively(const std::string &directory)
 | 
				
			||||||
    closedir(dirp);
 | 
					    closedir(dirp);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    FileUtil::DeleteDir(directory);
 | 
					    FileUtil::DeleteDir(directory);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -585,7 +585,7 @@ void CopyDir(const std::string &source_path, const std::string &dest_path)
 | 
				
			||||||
std::string GetCurrentDir()
 | 
					std::string GetCurrentDir()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char *dir;
 | 
					    char *dir;
 | 
				
			||||||
    // Get the current working directory (getcwd uses malloc) 
 | 
					    // Get the current working directory (getcwd uses malloc)
 | 
				
			||||||
    if (!(dir = __getcwd(NULL, 0))) {
 | 
					    if (!(dir = __getcwd(NULL, 0))) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ERROR_LOG(COMMON, "GetCurrentDirectory failed: %s",
 | 
					        ERROR_LOG(COMMON, "GetCurrentDirectory failed: %s",
 | 
				
			||||||
| 
						 | 
					@ -604,7 +604,7 @@ bool SetCurrentDir(const std::string &directory)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__)
 | 
					#if defined(__APPLE__)
 | 
				
			||||||
std::string GetBundleDirectory() 
 | 
					std::string GetBundleDirectory()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    CFURLRef BundleRef;
 | 
					    CFURLRef BundleRef;
 | 
				
			||||||
    char AppBundlePath[MAXPATHLEN];
 | 
					    char AppBundlePath[MAXPATHLEN];
 | 
				
			||||||
| 
						 | 
					@ -666,8 +666,8 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string &new
 | 
				
			||||||
        if (FileUtil::Exists(ROOT_DIR DIR_SEP USERDATA_DIR))
 | 
					        if (FileUtil::Exists(ROOT_DIR DIR_SEP USERDATA_DIR))
 | 
				
			||||||
            paths[D_USER_IDX] = ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP;
 | 
					            paths[D_USER_IDX] = ROOT_DIR DIR_SEP USERDATA_DIR DIR_SEP;
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            paths[D_USER_IDX] = std::string(getenv("HOME") ? 
 | 
					            paths[D_USER_IDX] = std::string(getenv("HOME") ?
 | 
				
			||||||
                getenv("HOME") : getenv("PWD") ? 
 | 
					                getenv("HOME") : getenv("PWD") ?
 | 
				
			||||||
                getenv("PWD") : "") + DIR_SEP EMU_DATA_DIR DIR_SEP;
 | 
					                getenv("PWD") : "") + DIR_SEP EMU_DATA_DIR DIR_SEP;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -749,7 +749,7 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string &new
 | 
				
			||||||
            paths[F_MAINLOG_IDX]        = paths[D_LOGS_IDX] + MAIN_LOG;
 | 
					            paths[F_MAINLOG_IDX]        = paths[D_LOGS_IDX] + MAIN_LOG;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return paths[DirIDX];
 | 
					    return paths[DirIDX];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -762,7 +762,7 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string &new
 | 
				
			||||||
//    if (!FileUtil::Exists(dir))
 | 
					//    if (!FileUtil::Exists(dir))
 | 
				
			||||||
//        dir = SHARED_USER_DIR THEMES_DIR "/" + theme_name + "/";
 | 
					//        dir = SHARED_USER_DIR THEMES_DIR "/" + theme_name + "/";
 | 
				
			||||||
//#endif
 | 
					//#endif
 | 
				
			||||||
//    
 | 
					//
 | 
				
			||||||
//    return dir;
 | 
					//    return dir;
 | 
				
			||||||
//}
 | 
					//}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,15 +115,15 @@ inline u64 getblock(const u64 * p, int i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline void bmix64(u64 & h1, u64 & h2, u64 & k1, u64 & k2, u64 & c1, u64 & c2)
 | 
					inline void bmix64(u64 & h1, u64 & h2, u64 & k1, u64 & k2, u64 & c1, u64 & c2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    k1 *= c1; 
 | 
					    k1 *= c1;
 | 
				
			||||||
    k1  = _rotl64(k1,23); 
 | 
					    k1  = _rotl64(k1,23);
 | 
				
			||||||
    k1 *= c2;
 | 
					    k1 *= c2;
 | 
				
			||||||
    h1 ^= k1;
 | 
					    h1 ^= k1;
 | 
				
			||||||
    h1 += h2;
 | 
					    h1 += h2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    h2 = _rotl64(h2,41);
 | 
					    h2 = _rotl64(h2,41);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    k2 *= c2; 
 | 
					    k2 *= c2;
 | 
				
			||||||
    k2  = _rotl64(k2,23);
 | 
					    k2  = _rotl64(k2,23);
 | 
				
			||||||
    k2 *= c1;
 | 
					    k2 *= c1;
 | 
				
			||||||
    h2 ^= k2;
 | 
					    h2 ^= k2;
 | 
				
			||||||
| 
						 | 
					@ -250,7 +250,7 @@ u64 GetCRC32(const u8 *src, int len, u32 samples)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 
 | 
					/*
 | 
				
			||||||
 * NOTE: This hash function is used for custom texture loading/dumping, so
 | 
					 * NOTE: This hash function is used for custom texture loading/dumping, so
 | 
				
			||||||
 * it should not be changed, which would require all custom textures to be
 | 
					 * it should not be changed, which would require all custom textures to be
 | 
				
			||||||
 * recalculated for their new hash values. If the hashing function is
 | 
					 * recalculated for their new hash values. If the hashing function is
 | 
				
			||||||
| 
						 | 
					@ -273,7 +273,7 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples)
 | 
				
			||||||
        u64 k = data[0];
 | 
					        u64 k = data[0];
 | 
				
			||||||
        data+=Step;
 | 
					        data+=Step;
 | 
				
			||||||
        k *= m;
 | 
					        k *= m;
 | 
				
			||||||
        k ^= k >> r; 
 | 
					        k ^= k >> r;
 | 
				
			||||||
        k *= m;
 | 
					        k *= m;
 | 
				
			||||||
        h ^= k;
 | 
					        h ^= k;
 | 
				
			||||||
        h *= m;
 | 
					        h *= m;
 | 
				
			||||||
| 
						 | 
					@ -292,13 +292,13 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples)
 | 
				
			||||||
    case 1: h ^= u64(data2[0]);
 | 
					    case 1: h ^= u64(data2[0]);
 | 
				
			||||||
            h *= m;
 | 
					            h *= m;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    h ^= h >> r;
 | 
					    h ^= h >> r;
 | 
				
			||||||
    h *= m;
 | 
					    h *= m;
 | 
				
			||||||
    h ^= h >> r;
 | 
					    h ^= h >> r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return h;
 | 
					    return h;
 | 
				
			||||||
} 
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
// CRC32 hash using the SSE4.2 instruction
 | 
					// CRC32 hash using the SSE4.2 instruction
 | 
				
			||||||
u64 GetCRC32(const u8 *src, int len, u32 samples)
 | 
					u64 GetCRC32(const u8 *src, int len, u32 samples)
 | 
				
			||||||
| 
						 | 
					@ -351,15 +351,15 @@ inline u32 fmix32(u32 h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline void bmix32(u32 & h1, u32 & h2, u32 & k1, u32 & k2, u32 & c1, u32 & c2)
 | 
					inline void bmix32(u32 & h1, u32 & h2, u32 & k1, u32 & k2, u32 & c1, u32 & c2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    k1 *= c1; 
 | 
					    k1 *= c1;
 | 
				
			||||||
    k1  = _rotl(k1,11); 
 | 
					    k1  = _rotl(k1,11);
 | 
				
			||||||
    k1 *= c2;
 | 
					    k1 *= c2;
 | 
				
			||||||
    h1 ^= k1;
 | 
					    h1 ^= k1;
 | 
				
			||||||
    h1 += h2;
 | 
					    h1 += h2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    h2 = _rotl(h2,17);
 | 
					    h2 = _rotl(h2,17);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    k2 *= c2; 
 | 
					    k2 *= c2;
 | 
				
			||||||
    k2  = _rotl(k2,11);
 | 
					    k2  = _rotl(k2,11);
 | 
				
			||||||
    k2 *= c1;
 | 
					    k2 *= c1;
 | 
				
			||||||
    h2 ^= k2;
 | 
					    h2 ^= k2;
 | 
				
			||||||
| 
						 | 
					@ -405,7 +405,7 @@ u64 GetMurmurHash3(const u8* src, int len, u32 samples)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //----------
 | 
					    //----------
 | 
				
			||||||
    // tail
 | 
					    // tail
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    const u8 * tail = (const u8*)(data + nblocks*8);
 | 
					    const u8 * tail = (const u8*)(data + nblocks*8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u32 k1 = 0;
 | 
					    u32 k1 = 0;
 | 
				
			||||||
| 
						 | 
					@ -439,7 +439,7 @@ u64 GetMurmurHash3(const u8* src, int len, u32 samples)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    out[0] = h1;
 | 
					    out[0] = h1;
 | 
				
			||||||
    out[1] = h2;
 | 
					    out[1] = h2;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return *((u64 *)&out);
 | 
					    return *((u64 *)&out);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -463,11 +463,11 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        u64 k = data[0];
 | 
					        u64 k = data[0];
 | 
				
			||||||
        data+=Step;
 | 
					        data+=Step;
 | 
				
			||||||
        k *= m; 
 | 
					        k *= m;
 | 
				
			||||||
        k ^= k >> r; 
 | 
					        k ^= k >> r;
 | 
				
			||||||
        k *= m;
 | 
					        k *= m;
 | 
				
			||||||
        h ^= k;
 | 
					        h ^= k;
 | 
				
			||||||
        h *= m; 
 | 
					        h *= m;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const u8 * data2 = (const u8*)end;
 | 
					    const u8 * data2 = (const u8*)end;
 | 
				
			||||||
| 
						 | 
					@ -483,7 +483,7 @@ u64 GetHashHiresTexture(const u8 *src, int len, u32 samples)
 | 
				
			||||||
    case 1: h ^= u64(data2[0]);
 | 
					    case 1: h ^= u64(data2[0]);
 | 
				
			||||||
            h *= m;
 | 
					            h *= m;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
    h ^= h >> r;
 | 
					    h ^= h >> r;
 | 
				
			||||||
    h *= m;
 | 
					    h *= m;
 | 
				
			||||||
    h ^= h >> r;
 | 
					    h ^= h >> r;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,7 @@ public:
 | 
				
			||||||
        m_file.seekg(0, std::ios::beg);
 | 
					        m_file.seekg(0, std::ios::beg);
 | 
				
			||||||
        std::fstream::pos_type start_pos = m_file.tellg();
 | 
					        std::fstream::pos_type start_pos = m_file.tellg();
 | 
				
			||||||
        std::streamoff file_size = end_pos - start_pos;
 | 
					        std::streamoff file_size = end_pos - start_pos;
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        if (m_file.is_open() && ValidateHeader())
 | 
					        if (m_file.is_open() && ValidateHeader())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // good header, read some key/value pairs
 | 
					            // good header, read some key/value pairs
 | 
				
			||||||
| 
						 | 
					@ -87,7 +87,7 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // read key/value and pass to reader
 | 
					                // read key/value and pass to reader
 | 
				
			||||||
                if (Read(&key) &&
 | 
					                if (Read(&key) &&
 | 
				
			||||||
                    Read(value, value_size) && 
 | 
					                    Read(value, value_size) &&
 | 
				
			||||||
                    Read(&entry_number) &&
 | 
					                    Read(&entry_number) &&
 | 
				
			||||||
                    entry_number == m_num_entries+1)
 | 
					                    entry_number == m_num_entries+1)
 | 
				
			||||||
                 {
 | 
					                 {
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ public:
 | 
				
			||||||
        WriteHeader();
 | 
					        WriteHeader();
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    void Sync()
 | 
					    void Sync()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        m_file.flush();
 | 
					        m_file.flush();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
    OS_LEVEL,       // Printed by the emulated operating system
 | 
					    OS_LEVEL,       // Printed by the emulated operating system
 | 
				
			||||||
    NOTICE_LEVEL,   // VERY important information that is NOT errors. Like startup and OSReports.
 | 
					    NOTICE_LEVEL,   // VERY important information that is NOT errors. Like startup and OSReports.
 | 
				
			||||||
    ERROR_LEVEL,    // Critical errors 
 | 
					    ERROR_LEVEL,    // Critical errors
 | 
				
			||||||
    WARNING_LEVEL,  // Something is suspicious.
 | 
					    WARNING_LEVEL,  // Something is suspicious.
 | 
				
			||||||
    INFO_LEVEL,     // General information.
 | 
					    INFO_LEVEL,     // General information.
 | 
				
			||||||
    DEBUG_LEVEL,    // Detailed debugging - might make things slow.
 | 
					    DEBUG_LEVEL,    // Detailed debugging - might make things slow.
 | 
				
			||||||
| 
						 | 
					@ -46,7 +46,7 @@ enum LOG_TYPE {
 | 
				
			||||||
    MEMMAP,
 | 
					    MEMMAP,
 | 
				
			||||||
    MEMCARD_MANAGER,
 | 
					    MEMCARD_MANAGER,
 | 
				
			||||||
    OSREPORT,
 | 
					    OSREPORT,
 | 
				
			||||||
    PAD, 
 | 
					    PAD,
 | 
				
			||||||
    PROCESSORINTERFACE,
 | 
					    PROCESSORINTERFACE,
 | 
				
			||||||
    PIXELENGINE,
 | 
					    PIXELENGINE,
 | 
				
			||||||
    SERIALINTERFACE,
 | 
					    SERIALINTERFACE,
 | 
				
			||||||
| 
						 | 
					@ -89,7 +89,7 @@ enum LOG_LEVELS {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}  // namespace
 | 
					}  // namespace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type, const char*file, int line, 
 | 
					void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type, const char*file, int line,
 | 
				
			||||||
    const char* function, const char* fmt, ...)
 | 
					    const char* function, const char* fmt, ...)
 | 
				
			||||||
#ifdef __GNUC__
 | 
					#ifdef __GNUC__
 | 
				
			||||||
        __attribute__((format(printf, 6, 7)))
 | 
					        __attribute__((format(printf, 6, 7)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@
 | 
				
			||||||
#include "common/timer.h"
 | 
					#include "common/timer.h"
 | 
				
			||||||
#include "common/thread.h"
 | 
					#include "common/thread.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line, 
 | 
					void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line,
 | 
				
			||||||
    const char* function, const char* fmt, ...)
 | 
					    const char* function, const char* fmt, ...)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    va_list args;
 | 
					    va_list args;
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ LogManager::~LogManager()
 | 
				
			||||||
    delete m_debuggerLog;
 | 
					    delete m_debuggerLog;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, 
 | 
					void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file,
 | 
				
			||||||
    int line, const char* function, const char *fmt, va_list args)
 | 
					    int line, const char* function, const char *fmt, va_list args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char temp[MAX_MSGLEN];
 | 
					    char temp[MAX_MSGLEN];
 | 
				
			||||||
| 
						 | 
					@ -125,11 +125,11 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const
 | 
				
			||||||
    Common::CharArrayFromFormatV(temp, MAX_MSGLEN, fmt, args);
 | 
					    Common::CharArrayFromFormatV(temp, MAX_MSGLEN, fmt, args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static const char level_to_char[7] = "ONEWID";
 | 
					    static const char level_to_char[7] = "ONEWID";
 | 
				
			||||||
    sprintf(msg, "%s %s:%u %c[%s] %s: %s\n", Common::Timer::GetTimeFormatted().c_str(), file, line, 
 | 
					    sprintf(msg, "%s %s:%u %c[%s] %s: %s\n", Common::Timer::GetTimeFormatted().c_str(), file, line,
 | 
				
			||||||
        level_to_char[(int)level], log->GetShortName(), function, temp);
 | 
					        level_to_char[(int)level], log->GetShortName(), function, temp);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
#ifdef ANDROID
 | 
					#ifdef ANDROID
 | 
				
			||||||
    Host_SysMessage(msg);    
 | 
					    Host_SysMessage(msg);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    log->Trigger(level, msg);
 | 
					    log->Trigger(level, msg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ class LogContainer
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    LogContainer(const char* shortName, const char* fullName, bool enable = false);
 | 
					    LogContainer(const char* shortName, const char* fullName, bool enable = false);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    const char* GetShortName() const { return m_shortName; }
 | 
					    const char* GetShortName() const { return m_shortName; }
 | 
				
			||||||
    const char* GetFullName() const { return m_fullName; }
 | 
					    const char* GetFullName() const { return m_fullName; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static u32 GetMaxLevel() { return LogTypes::MAX_LOGLEVEL;    }
 | 
					    static u32 GetMaxLevel() { return LogTypes::MAX_LOGLEVEL;    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line, 
 | 
					    void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line,
 | 
				
			||||||
        const char* function, const char *fmt, va_list args);
 | 
					        const char* function, const char *fmt, va_list args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level)
 | 
					    void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,7 @@ u32 ClassifyDouble(double dvalue)
 | 
				
			||||||
    value.d = dvalue;
 | 
					    value.d = dvalue;
 | 
				
			||||||
    u64 sign = value.i & DOUBLE_SIGN;
 | 
					    u64 sign = value.i & DOUBLE_SIGN;
 | 
				
			||||||
    u64 exp  = value.i & DOUBLE_EXP;
 | 
					    u64 exp  = value.i & DOUBLE_EXP;
 | 
				
			||||||
    if (exp > DOUBLE_ZERO && exp < DOUBLE_EXP) 
 | 
					    if (exp > DOUBLE_ZERO && exp < DOUBLE_EXP)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Nice normalized number.
 | 
					        // Nice normalized number.
 | 
				
			||||||
        return sign ? PPC_FPCLASS_NN : PPC_FPCLASS_PN;
 | 
					        return sign ? PPC_FPCLASS_NN : PPC_FPCLASS_PN;
 | 
				
			||||||
| 
						 | 
					@ -58,7 +58,7 @@ u32 ClassifyFloat(float fvalue)
 | 
				
			||||||
    value.f = fvalue;
 | 
					    value.f = fvalue;
 | 
				
			||||||
    u32 sign = value.i & FLOAT_SIGN;
 | 
					    u32 sign = value.i & FLOAT_SIGN;
 | 
				
			||||||
    u32 exp  = value.i & FLOAT_EXP;
 | 
					    u32 exp  = value.i & FLOAT_EXP;
 | 
				
			||||||
    if (exp > FLOAT_ZERO && exp < FLOAT_EXP) 
 | 
					    if (exp > FLOAT_ZERO && exp < FLOAT_EXP)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Nice normalized number.
 | 
					        // Nice normalized number.
 | 
				
			||||||
        return sign ? PPC_FPCLASS_NN : PPC_FPCLASS_PN;
 | 
					        return sign ? PPC_FPCLASS_NN : PPC_FPCLASS_PN;
 | 
				
			||||||
| 
						 | 
					@ -77,13 +77,13 @@ u32 ClassifyFloat(float fvalue)
 | 
				
			||||||
                // Denormalized number.
 | 
					                // Denormalized number.
 | 
				
			||||||
                return sign ? PPC_FPCLASS_ND : PPC_FPCLASS_PD;
 | 
					                return sign ? PPC_FPCLASS_ND : PPC_FPCLASS_PD;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } 
 | 
					        }
 | 
				
			||||||
        else if (exp) 
 | 
					        else if (exp)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Infinite
 | 
					            // Infinite
 | 
				
			||||||
            return sign ? PPC_FPCLASS_NINF : PPC_FPCLASS_PINF;
 | 
					            return sign ? PPC_FPCLASS_NINF : PPC_FPCLASS_PINF;
 | 
				
			||||||
        } 
 | 
					        }
 | 
				
			||||||
        else 
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //Zero
 | 
					            //Zero
 | 
				
			||||||
            return sign ? PPC_FPCLASS_NZ : PPC_FPCLASS_PZ;
 | 
					            return sign ? PPC_FPCLASS_NZ : PPC_FPCLASS_PZ;
 | 
				
			||||||
| 
						 | 
					@ -143,7 +143,7 @@ void Matrix33::RotateY(Matrix33 &mtx, float rad)
 | 
				
			||||||
    mtx.data[0] = c;
 | 
					    mtx.data[0] = c;
 | 
				
			||||||
    mtx.data[2] = s;
 | 
					    mtx.data[2] = s;
 | 
				
			||||||
    mtx.data[4] = 1;
 | 
					    mtx.data[4] = 1;
 | 
				
			||||||
    mtx.data[6] = -s;    
 | 
					    mtx.data[6] = -s;
 | 
				
			||||||
    mtx.data[8] = c;
 | 
					    mtx.data[8] = c;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -272,11 +272,11 @@ u8* MemArena::Find4GBBase()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// yeah, this could also be done in like two bitwise ops...
 | 
					// yeah, this could also be done in like two bitwise ops...
 | 
				
			||||||
#define SKIP(a_flags, b_flags) 
 | 
					#define SKIP(a_flags, b_flags)
 | 
				
			||||||
//	if (!(a_flags & MV_WII_ONLY) && (b_flags & MV_WII_ONLY)) 
 | 
					//	if (!(a_flags & MV_WII_ONLY) && (b_flags & MV_WII_ONLY))
 | 
				
			||||||
//		continue; 
 | 
					//		continue;
 | 
				
			||||||
//	if (!(a_flags & MV_FAKE_VMEM) && (b_flags & MV_FAKE_VMEM)) 
 | 
					//	if (!(a_flags & MV_FAKE_VMEM) && (b_flags & MV_FAKE_VMEM))
 | 
				
			||||||
//		continue; 
 | 
					//		continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool Memory_TryBase(u8 *base, const MemoryView *views, int num_views, u32 flags, MemArena *arena) {
 | 
					static bool Memory_TryBase(u8 *base, const MemoryView *views, int num_views, u32 flags, MemArena *arena) {
 | 
				
			||||||
    // OK, we know where to find free space. Now grab it!
 | 
					    // OK, we know where to find free space. Now grab it!
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,7 +47,7 @@ void* AllocateExecutableMemory(size_t size, bool low)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // printf("Mapped executable memory at %p (size %ld)\n", ptr,
 | 
					    // printf("Mapped executable memory at %p (size %ld)\n", ptr,
 | 
				
			||||||
    //    (unsigned long)size);
 | 
					    //    (unsigned long)size);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    if (ptr == nullptr)
 | 
					    if (ptr == nullptr)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ void* AllocateExecutableMemory(size_t size, bool low)
 | 
				
			||||||
    if (ptr == MAP_FAILED)
 | 
					    if (ptr == MAP_FAILED)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ptr = nullptr;
 | 
					        ptr = nullptr;
 | 
				
			||||||
#endif 
 | 
					#endif
 | 
				
			||||||
        PanicAlert("Failed to allocate executable memory");
 | 
					        PanicAlert("Failed to allocate executable memory");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#if !defined(_WIN32) && defined(__x86_64__) && !defined(MAP_32BIT)
 | 
					#if !defined(_WIN32) && defined(__x86_64__) && !defined(MAP_32BIT)
 | 
				
			||||||
| 
						 | 
					@ -127,11 +127,11 @@ void FreeMemoryPages(void* ptr, size_t size)
 | 
				
			||||||
    if (ptr)
 | 
					    if (ptr)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
        if (!VirtualFree(ptr, 0, MEM_RELEASE))
 | 
					        if (!VirtualFree(ptr, 0, MEM_RELEASE))
 | 
				
			||||||
            PanicAlert("FreeMemoryPages failed!\n%s", GetLastErrorMsg());
 | 
					            PanicAlert("FreeMemoryPages failed!\n%s", GetLastErrorMsg());
 | 
				
			||||||
        ptr = NULL; // Is this our responsibility?
 | 
					        ptr = NULL; // Is this our responsibility?
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
        munmap(ptr, size);
 | 
					        munmap(ptr, size);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ enum MSG_TYPE
 | 
				
			||||||
    CRITICAL
 | 
					    CRITICAL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef bool (*MsgAlertHandler)(const char* caption, const char* text, 
 | 
					typedef bool (*MsgAlertHandler)(const char* caption, const char* text,
 | 
				
			||||||
                                bool yes_no, int Style);
 | 
					                                bool yes_no, int Style);
 | 
				
			||||||
typedef std::string (*StringTranslator)(const char* text);
 | 
					typedef std::string (*StringTranslator)(const char* text);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,29 +31,29 @@ void SetEnableAlert(bool enable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef GEKKO
 | 
					#ifndef GEKKO
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__) 
 | 
					    #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__)
 | 
				
			||||||
    #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__) 
 | 
					    #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__)
 | 
				
			||||||
    #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__) 
 | 
					    #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__)
 | 
				
			||||||
    #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__) 
 | 
					    #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__)
 | 
				
			||||||
    #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__) 
 | 
					    #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__)
 | 
				
			||||||
    // Use these macros (that do the same thing) if the message should be translated.
 | 
					    // Use these macros (that do the same thing) if the message should be translated.
 | 
				
			||||||
    #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__) 
 | 
					    #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, __VA_ARGS__)
 | 
				
			||||||
    #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__) 
 | 
					    #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, __VA_ARGS__)
 | 
				
			||||||
    #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__) 
 | 
					    #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, __VA_ARGS__)
 | 
				
			||||||
    #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__) 
 | 
					    #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, __VA_ARGS__)
 | 
				
			||||||
    #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__) 
 | 
					    #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, __VA_ARGS__)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__) 
 | 
					    #define SuccessAlert(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__) 
 | 
					    #define PanicAlert(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__) 
 | 
					    #define PanicYesNo(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__) 
 | 
					    #define AskYesNo(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__) 
 | 
					    #define CriticalAlert(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__)
 | 
				
			||||||
    // Use these macros (that do the same thing) if the message should be translated.
 | 
					    // Use these macros (that do the same thing) if the message should be translated.
 | 
				
			||||||
    #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__) 
 | 
					    #define SuccessAlertT(format, ...) MsgAlert(false, INFORMATION, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__) 
 | 
					    #define PanicAlertT(format, ...) MsgAlert(false, WARNING, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__) 
 | 
					    #define PanicYesNoT(format, ...) MsgAlert(true, WARNING, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__) 
 | 
					    #define AskYesNoT(format, ...) MsgAlert(true, QUESTION, format, ##__VA_ARGS__)
 | 
				
			||||||
    #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__) 
 | 
					    #define CriticalAlertT(format, ...) MsgAlert(false, CRITICAL, format, ##__VA_ARGS__)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
// GEKKO
 | 
					// GEKKO
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -121,11 +121,11 @@ std::string ArrayToString(const u8 *data, u32 size, int line_len, bool spaces)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::ostringstream oss;
 | 
					    std::ostringstream oss;
 | 
				
			||||||
    oss << std::setfill('0') << std::hex;
 | 
					    oss << std::setfill('0') << std::hex;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    for (int line = 0; size; ++data, --size)
 | 
					    for (int line = 0; size; ++data, --size)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        oss << std::setw(2) << (int)*data;
 | 
					        oss << std::setw(2) << (int)*data;
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        if (line_len == ++line)
 | 
					        if (line_len == ++line)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            oss << '\n';
 | 
					            oss << '\n';
 | 
				
			||||||
| 
						 | 
					@ -168,7 +168,7 @@ bool TryParse(const std::string &str, u32 *const output)
 | 
				
			||||||
    errno = 0;
 | 
					    errno = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unsigned long value = strtoul(str.c_str(), &endptr, 0);
 | 
					    unsigned long value = strtoul(str.c_str(), &endptr, 0);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    if (!endptr || *endptr)
 | 
					    if (!endptr || *endptr)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -294,7 +294,7 @@ std::string ReplaceAll(std::string result, const std::string& src, const std::st
 | 
				
			||||||
//#include <string>
 | 
					//#include <string>
 | 
				
			||||||
//#include <assert.h>
 | 
					//#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char HEX2DEC[256] = 
 | 
					const char HEX2DEC[256] =
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /*       0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F */
 | 
					    /*       0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F */
 | 
				
			||||||
    /* 0 */ 16,16,16,16, 16,16,16,16, 16,16,16,16, 16,16,16,16,
 | 
					    /* 0 */ 16,16,16,16, 16,16,16,16, 16,16,16,16, 16,16,16,16,
 | 
				
			||||||
| 
						 | 
					@ -327,7 +327,7 @@ std::string UriDecode(const std::string & sSrc)
 | 
				
			||||||
    const unsigned char * pSrc = (const unsigned char *)sSrc.c_str();
 | 
					    const unsigned char * pSrc = (const unsigned char *)sSrc.c_str();
 | 
				
			||||||
    const size_t SRC_LEN = sSrc.length();
 | 
					    const size_t SRC_LEN = sSrc.length();
 | 
				
			||||||
    const unsigned char * const SRC_END = pSrc + SRC_LEN;
 | 
					    const unsigned char * const SRC_END = pSrc + SRC_LEN;
 | 
				
			||||||
    const unsigned char * const SRC_LAST_DEC = SRC_END - 2;   // last decodable '%' 
 | 
					    const unsigned char * const SRC_LAST_DEC = SRC_END - 2;   // last decodable '%'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    char * const pStart = new char[SRC_LEN];
 | 
					    char * const pStart = new char[SRC_LEN];
 | 
				
			||||||
    char * pEnd = pStart;
 | 
					    char * pEnd = pStart;
 | 
				
			||||||
| 
						 | 
					@ -394,7 +394,7 @@ std::string UriEncode(const std::string & sSrc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (; pSrc < SRC_END; ++pSrc)
 | 
					    for (; pSrc < SRC_END; ++pSrc)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (SAFE[*pSrc]) 
 | 
					        if (SAFE[*pSrc])
 | 
				
			||||||
            *pEnd++ = *pSrc;
 | 
					            *pEnd++ = *pSrc;
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					@ -518,9 +518,9 @@ static std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>&
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    out_buffer.resize(out_buffer_size - dst_bytes);
 | 
					    out_buffer.resize(out_buffer_size - dst_bytes);
 | 
				
			||||||
    out_buffer.swap(result);
 | 
					    out_buffer.swap(result);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    iconv_close(conv_desc);
 | 
					    iconv_close(conv_desc);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -576,7 +576,7 @@ std::u16string UTF8ToUTF16(const std::string& input)
 | 
				
			||||||
    out_buffer.swap(result);
 | 
					    out_buffer.swap(result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    iconv_close(conv_desc);
 | 
					    iconv_close(conv_desc);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ template <typename N>
 | 
				
			||||||
static bool TryParse(const std::string &str, N *const output)
 | 
					static bool TryParse(const std::string &str, N *const output)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::istringstream iss(str);
 | 
					    std::istringstream iss(str);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    N tmp = 0;
 | 
					    N tmp = 0;
 | 
				
			||||||
    if (iss >> tmp)
 | 
					    if (iss >> tmp)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ namespace Symbols
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        TSymbolsMap::iterator foundSymbolItr;
 | 
					        TSymbolsMap::iterator foundSymbolItr;
 | 
				
			||||||
        TSymbol symbol;
 | 
					        TSymbol symbol;
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        foundSymbolItr = g_symbols.find(_address);
 | 
					        foundSymbolItr = g_symbols.find(_address);
 | 
				
			||||||
        if (foundSymbolItr != g_symbols.end())
 | 
					        if (foundSymbolItr != g_symbols.end())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					@ -44,7 +44,7 @@ namespace Symbols
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return GetSymbol(_address).name;
 | 
					        return GetSymbol(_address).name;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    void Remove(u32 _address)
 | 
					    void Remove(u32 _address)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        g_symbols.erase(_address);
 | 
					        g_symbols.erase(_address);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ int CurrentThreadId()
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask)
 | 
					void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask)
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,7 @@ void SwitchCurrentThread()
 | 
				
			||||||
// Sets the debugger-visible name of the current thread.
 | 
					// Sets the debugger-visible name of the current thread.
 | 
				
			||||||
// Uses undocumented (actually, it is now documented) trick.
 | 
					// Uses undocumented (actually, it is now documented) trick.
 | 
				
			||||||
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxtsksettingthreadname.asp
 | 
					// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxtsksettingthreadname.asp
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
// This is implemented much nicer in upcoming msvc++, see:
 | 
					// This is implemented much nicer in upcoming msvc++, see:
 | 
				
			||||||
// http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.100).aspx
 | 
					// http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.100).aspx
 | 
				
			||||||
void SetCurrentThreadName(const char* szThreadName)
 | 
					void SetCurrentThreadName(const char* szThreadName)
 | 
				
			||||||
| 
						 | 
					@ -81,7 +81,7 @@ void SetCurrentThreadName(const char* szThreadName)
 | 
				
			||||||
    __except(EXCEPTION_CONTINUE_EXECUTION)
 | 
					    __except(EXCEPTION_CONTINUE_EXECUTION)
 | 
				
			||||||
    {}
 | 
					    {}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
#else // !WIN32, so must be POSIX threads
 | 
					#else // !WIN32, so must be POSIX threads
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask)
 | 
					void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@ int CurrentThreadId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask);
 | 
					void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask);
 | 
				
			||||||
void SetCurrentThreadAffinity(u32 mask);
 | 
					void SetCurrentThreadAffinity(u32 mask);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
class Event
 | 
					class Event
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,7 @@ private:
 | 
				
			||||||
    const size_t m_count;
 | 
					    const size_t m_count;
 | 
				
			||||||
    volatile size_t m_waiting;
 | 
					    volatile size_t m_waiting;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
void SleepCurrentThread(int ms);
 | 
					void SleepCurrentThread(int ms);
 | 
				
			||||||
void SwitchCurrentThread();    // On Linux, this is equal to sleep 1ms
 | 
					void SwitchCurrentThread();    // On Linux, this is equal to sleep 1ms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -146,7 +146,7 @@ inline void YieldCPU()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::this_thread::yield();
 | 
					    std::this_thread::yield();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
void SetCurrentThreadName(const char *name);
 | 
					void SetCurrentThreadName(const char *name);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
} // namespace Common
 | 
					} // namespace Common
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
					// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ template<class IdType>
 | 
				
			||||||
struct ThreadQueueList {
 | 
					struct ThreadQueueList {
 | 
				
			||||||
    // Number of queues (number of priority levels starting at 0.)
 | 
					    // Number of queues (number of priority levels starting at 0.)
 | 
				
			||||||
    static const int NUM_QUEUES = 128;
 | 
					    static const int NUM_QUEUES = 128;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Initial number of threads a single queue can handle.
 | 
					    // Initial number of threads a single queue can handle.
 | 
				
			||||||
    static const int INITIAL_CAPACITY = 32;
 | 
					    static const int INITIAL_CAPACITY = 32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ public:
 | 
				
			||||||
     * Get the current CPSR register
 | 
					     * Get the current CPSR register
 | 
				
			||||||
     * @return Returns the value of the CPSR register
 | 
					     * @return Returns the value of the CPSR register
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual u32 GetCPSR() const = 0;  
 | 
					    virtual u32 GetCPSR() const = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set the current CPSR register
 | 
					     * Set the current CPSR register
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ public:
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Executes the given number of instructions
 | 
					     * Executes the given number of instructions
 | 
				
			||||||
     * @param num_instructions Number of instructions to executes
 | 
					     * @param num_instructions Number of instructions to executes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,8 @@ void LoadSymbolMap(std::string filename) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (std::getline(infile, line)) {
 | 
					    while (std::getline(infile, line)) {
 | 
				
			||||||
        std::istringstream iss(line);
 | 
					        std::istringstream iss(line);
 | 
				
			||||||
        if (!(iss >> address_str >> size >> function_name)) { 
 | 
					        if (!(iss >> address_str >> size >> function_name)) {
 | 
				
			||||||
            break; // Error parsing 
 | 
					            break; // Error parsing
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        u32 address = std::stoul(address_str, nullptr, 16);
 | 
					        u32 address = std::stoul(address_str, nullptr, 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "core/arm/skyeye_common/armcpu.h"
 | 
					#include "core/arm/skyeye_common/armcpu.h"
 | 
				
			||||||
#include "core/arm/skyeye_common/armemu.h"
 | 
					#include "core/arm/skyeye_common/armemu.h"
 | 
				
			||||||
| 
						 | 
					@ -113,7 +113,7 @@ void ARM_DynCom::ExecuteInstructions(int num_instructions) {
 | 
				
			||||||
    state->NumInstrsToExecute = num_instructions;
 | 
					    state->NumInstrsToExecute = num_instructions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Dyncom only breaks on instruction dispatch. This only happens on every instruction when
 | 
					    // Dyncom only breaks on instruction dispatch. This only happens on every instruction when
 | 
				
			||||||
    // executing one instruction at a time. Otherwise, if a block is being executed, more 
 | 
					    // executing one instruction at a time. Otherwise, if a block is being executed, more
 | 
				
			||||||
    // instructions may actually be executed than specified.
 | 
					    // instructions may actually be executed than specified.
 | 
				
			||||||
    ticks += InterpreterMainLoop(state.get());
 | 
					    ticks += InterpreterMainLoop(state.get());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "core/arm/interpreter/arm_interpreter.h"
 | 
					#include "core/arm/interpreter/arm_interpreter.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ ARM_Interpreter::ARM_Interpreter()  {
 | 
				
			||||||
    state->lateabtSig = LOW;
 | 
					    state->lateabtSig = LOW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Reset the core to initial state
 | 
					    // Reset the core to initial state
 | 
				
			||||||
    ARMul_CoProInit(state); 
 | 
					    ARMul_CoProInit(state);
 | 
				
			||||||
    ARMul_Reset(state);
 | 
					    ARMul_Reset(state);
 | 
				
			||||||
    state->NextInstr = RESUME; // NOTE: This will be overwritten by LoadContext
 | 
					    state->NextInstr = RESUME; // NOTE: This will be overwritten by LoadContext
 | 
				
			||||||
    state->Emulate = 3;
 | 
					    state->Emulate = 3;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -249,7 +249,7 @@ void AddEventToQueue(Event* ne)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This must be run ONLY from within the cpu thread
 | 
					// This must be run ONLY from within the cpu thread
 | 
				
			||||||
// cyclesIntoFuture may be VERY inaccurate if called from anything else
 | 
					// cyclesIntoFuture may be VERY inaccurate if called from anything else
 | 
				
			||||||
// than Advance 
 | 
					// than Advance
 | 
				
			||||||
void ScheduleEvent(s64 cyclesIntoFuture, int event_type, u64 userdata)
 | 
					void ScheduleEvent(s64 cyclesIntoFuture, int event_type, u64 userdata)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Event *ne = GetNewEvent();
 | 
					    Event *ne = GetNewEvent();
 | 
				
			||||||
| 
						 | 
					@ -469,7 +469,7 @@ void ProcessFifoWaitEvents()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (first->time <= globalTimer)
 | 
					        if (first->time <= globalTimer)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //			LOG(TIMER, "[Scheduler] %s		 (%lld, %lld) ", 
 | 
					            //			LOG(TIMER, "[Scheduler] %s		 (%lld, %lld) ",
 | 
				
			||||||
            //				first->name ? first->name : "?", (u64)globalTimer, (u64)first->time);
 | 
					            //				first->name ? first->name : "?", (u64)globalTimer, (u64)first->time);
 | 
				
			||||||
            Event* evt = first;
 | 
					            Event* evt = first;
 | 
				
			||||||
            first = first->next;
 | 
					            first = first->next;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -222,7 +222,7 @@ public:
 | 
				
			||||||
     * @return Size of the archive in bytes
 | 
					     * @return Size of the archive in bytes
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    virtual size_t GetSize() const = 0;
 | 
					    virtual size_t GetSize() const = 0;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set the size of the archive in bytes
 | 
					     * Set the size of the archive in bytes
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,7 +74,7 @@ public:
 | 
				
			||||||
     * @return Size of the archive in bytes
 | 
					     * @return Size of the archive in bytes
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    size_t GetSize() const override;
 | 
					    size_t GetSize() const override;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Set the size of the archive in bytes
 | 
					     * Set the size of the archive in bytes
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common/common_types.h"
 | 
					#include "common/common_types.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "core/hle/coprocessor.h"
 | 
					#include "core/hle/coprocessor.h"
 | 
				
			||||||
#include "core/hle/hle.h"
 | 
					#include "core/hle/hle.h"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,7 @@ template<s32 func(u32*, u32, u32, u32, u32, u32)> void Wrap(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<s32 func(s32*, u32*, s32, bool, s64)> void Wrap() {
 | 
					template<s32 func(s32*, u32*, s32, bool, s64)> void Wrap() {
 | 
				
			||||||
    s32 param_1 = 0;
 | 
					    s32 param_1 = 0;
 | 
				
			||||||
    s32 retval = func(¶m_1, (Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), 
 | 
					    s32 retval = func(¶m_1, (Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2),
 | 
				
			||||||
        (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0)));
 | 
					        (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0)));
 | 
				
			||||||
    Core::g_app_core->SetReg(1, (u32)param_1);
 | 
					    Core::g_app_core->SetReg(1, (u32)param_1);
 | 
				
			||||||
    FuncReturn(retval);
 | 
					    FuncReturn(retval);
 | 
				
			||||||
| 
						 | 
					@ -103,7 +103,7 @@ template<s32 func(void*)> void Wrap() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<s32 func(s64*, u32, void*, s32)> void Wrap(){
 | 
					template<s32 func(s64*, u32, void*, s32)> void Wrap(){
 | 
				
			||||||
    FuncReturn(func((s64*)Memory::GetPointer(PARAM(0)), PARAM(1), Memory::GetPointer(PARAM(2)), 
 | 
					    FuncReturn(func((s64*)Memory::GetPointer(PARAM(0)), PARAM(1), Memory::GetPointer(PARAM(2)),
 | 
				
			||||||
        (s32)PARAM(3)));
 | 
					        (s32)PARAM(3)));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ bool g_reschedule = false;  ///< If true, immediately reschedules the CPU to a n
 | 
				
			||||||
const FunctionDef* GetSVCInfo(u32 opcode) {
 | 
					const FunctionDef* GetSVCInfo(u32 opcode) {
 | 
				
			||||||
    u32 func_num = opcode & 0xFFFFFF; // 8 bits
 | 
					    u32 func_num = opcode & 0xFFFFFF; // 8 bits
 | 
				
			||||||
    if (func_num > 0xFF) {
 | 
					    if (func_num > 0xFF) {
 | 
				
			||||||
        ERROR_LOG(HLE,"unknown svc=0x%02X", func_num); 
 | 
					        ERROR_LOG(HLE,"unknown svc=0x%02X", func_num);
 | 
				
			||||||
        return nullptr;
 | 
					        return nullptr;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return &g_module_db[0].func_table[func_num];
 | 
					    return &g_module_db[0].func_table[func_num];
 | 
				
			||||||
| 
						 | 
					@ -58,7 +58,7 @@ void RegisterAllModules() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Init() {
 | 
					void Init() {
 | 
				
			||||||
    Service::Init();
 | 
					    Service::Init();
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    RegisterAllModules();
 | 
					    RegisterAllModules();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NOTICE_LOG(HLE, "initialized OK");
 | 
					    NOTICE_LOG(HLE, "initialized OK");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@
 | 
				
			||||||
// Address arbiters are an underlying kernel synchronization object that can be created/used via
 | 
					// Address arbiters are an underlying kernel synchronization object that can be created/used via
 | 
				
			||||||
// supervisor calls (SVCs). They function as sort of a global lock. Typically, games/other CTR
 | 
					// supervisor calls (SVCs). They function as sort of a global lock. Typically, games/other CTR
 | 
				
			||||||
// applications use them as an underlying mechanism to implement thread-safe barriers, events, and
 | 
					// applications use them as an underlying mechanism to implement thread-safe barriers, events, and
 | 
				
			||||||
// semphores. 
 | 
					// semphores.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Kernel namespace
 | 
					// Kernel namespace
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,14 +52,14 @@ public:
 | 
				
			||||||
    FileSys::Archive* backend;  ///< Archive backend interface
 | 
					    FileSys::Archive* backend;  ///< Archive backend interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Synchronize kernel object 
 | 
					     * Synchronize kernel object
 | 
				
			||||||
     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
					     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
				
			||||||
     * @return Result of operation, 0 on success, otherwise error code
 | 
					     * @return Result of operation, 0 on success, otherwise error code
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    Result SyncRequest(bool* wait) override {
 | 
					    Result SyncRequest(bool* wait) override {
 | 
				
			||||||
        u32* cmd_buff = Service::GetCommandBuffer();
 | 
					        u32* cmd_buff = Service::GetCommandBuffer();
 | 
				
			||||||
        FileCommand cmd = static_cast<FileCommand>(cmd_buff[0]);
 | 
					        FileCommand cmd = static_cast<FileCommand>(cmd_buff[0]);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        switch (cmd) {
 | 
					        switch (cmd) {
 | 
				
			||||||
        // Read from archive...
 | 
					        // Read from archive...
 | 
				
			||||||
        case FileCommand::Read:
 | 
					        case FileCommand::Read:
 | 
				
			||||||
| 
						 | 
					@ -343,7 +343,7 @@ Archive* CreateArchive(Handle& handle, FileSys::Archive* backend, const std::str
 | 
				
			||||||
    archive->backend = backend;
 | 
					    archive->backend = backend;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MountArchive(archive);
 | 
					    MountArchive(archive);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return archive;
 | 
					    return archive;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <map>
 | 
					#include <map>
 | 
				
			||||||
#include <algorithm>
 | 
					#include <algorithm>
 | 
				
			||||||
| 
						 | 
					@ -95,7 +95,7 @@ Result SignalEvent(const Handle handle) {
 | 
				
			||||||
    for (size_t i = 0; i < evt->waiting_threads.size(); ++i) {
 | 
					    for (size_t i = 0; i < evt->waiting_threads.size(); ++i) {
 | 
				
			||||||
        ResumeThreadFromWait( evt->waiting_threads[i]);
 | 
					        ResumeThreadFromWait( evt->waiting_threads[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // If any thread is signalled awake by this event, assume the event was "caught" and reset 
 | 
					        // If any thread is signalled awake by this event, assume the event was "caught" and reset
 | 
				
			||||||
        // the event. This will result in the next thread waiting on the event to block. Otherwise,
 | 
					        // the event. This will result in the next thread waiting on the event to block. Otherwise,
 | 
				
			||||||
        // the event will not be reset, and the next thread to call WaitSynchronization on it will
 | 
					        // the event will not be reset, and the next thread to call WaitSynchronization on it will
 | 
				
			||||||
        // not block. Not sure if this is correct behavior, but it seems to work.
 | 
					        // not block. Not sure if this is correct behavior, but it seems to work.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
					// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common/common.h"
 | 
					#include "common/common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,7 +68,7 @@ void ObjectPool::List() {
 | 
				
			||||||
    for (int i = 0; i < MAX_COUNT; i++) {
 | 
					    for (int i = 0; i < MAX_COUNT; i++) {
 | 
				
			||||||
        if (occupied[i]) {
 | 
					        if (occupied[i]) {
 | 
				
			||||||
            if (pool[i]) {
 | 
					            if (pool[i]) {
 | 
				
			||||||
                INFO_LOG(KERNEL, "KO %i: %s \"%s\"", i + HANDLE_OFFSET, pool[i]->GetTypeName().c_str(), 
 | 
					                INFO_LOG(KERNEL, "KO %i: %s \"%s\"", i + HANDLE_OFFSET, pool[i]->GetTypeName().c_str(),
 | 
				
			||||||
                    pool[i]->GetName().c_str());
 | 
					                    pool[i]->GetName().c_str());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -110,7 +110,7 @@ void Shutdown() {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
bool LoadExec(u32 entry_point) {
 | 
					bool LoadExec(u32 entry_point) {
 | 
				
			||||||
    Init();
 | 
					    Init();
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    Core::g_app_core->SetPC(entry_point);
 | 
					    Core::g_app_core->SetPC(entry_point);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 0x30 is the typical main thread priority I've seen used so far
 | 
					    // 0x30 is the typical main thread priority I've seen used so far
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
					// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ enum class HandleType : u32 {
 | 
				
			||||||
    Archive         = 12,
 | 
					    Archive         = 12,
 | 
				
			||||||
    Directory       = 13,
 | 
					    Directory       = 13,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
    DEFAULT_STACK_SIZE  = 0x4000,
 | 
					    DEFAULT_STACK_SIZE  = 0x4000,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,7 @@ public:
 | 
				
			||||||
    virtual Kernel::HandleType GetHandleType() const = 0;
 | 
					    virtual Kernel::HandleType GetHandleType() const = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Synchronize kernel object 
 | 
					     * Synchronize kernel object
 | 
				
			||||||
     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
					     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
				
			||||||
     * @return Result of operation, 0 on success, otherwise error code
 | 
					     * @return Result of operation, 0 on success, otherwise error code
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -139,7 +139,7 @@ public:
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool GetIDType(Handle handle, HandleType* type) const {
 | 
					    bool GetIDType(Handle handle, HandleType* type) const {
 | 
				
			||||||
        if ((handle < HANDLE_OFFSET) || (handle >= HANDLE_OFFSET + MAX_COUNT) || 
 | 
					        if ((handle < HANDLE_OFFSET) || (handle >= HANDLE_OFFSET + MAX_COUNT) ||
 | 
				
			||||||
            !occupied[handle - HANDLE_OFFSET]) {
 | 
					            !occupied[handle - HANDLE_OFFSET]) {
 | 
				
			||||||
            ERROR_LOG(KERNEL, "Kernel: Bad object handle %i (%08x)", handle, handle);
 | 
					            ERROR_LOG(KERNEL, "Kernel: Bad object handle %i (%08x)", handle, handle);
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
| 
						 | 
					@ -155,7 +155,7 @@ public:
 | 
				
			||||||
    int GetCount();
 | 
					    int GetCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    enum {
 | 
					    enum {
 | 
				
			||||||
        MAX_COUNT       = 0x1000,
 | 
					        MAX_COUNT       = 0x1000,
 | 
				
			||||||
        HANDLE_OFFSET   = 0x100,
 | 
					        HANDLE_OFFSET   = 0x100,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <map>
 | 
					#include <map>
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@ public:
 | 
				
			||||||
    std::string name;                           ///< Name of mutex (optional)
 | 
					    std::string name;                           ///< Name of mutex (optional)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Synchronize kernel object 
 | 
					     * Synchronize kernel object
 | 
				
			||||||
     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
					     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
				
			||||||
     * @return Result of operation, 0 on success, otherwise error code
 | 
					     * @return Result of operation, 0 on success, otherwise error code
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "common/common.h"
 | 
					#include "common/common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ Handle CreateSharedMemory(const std::string& name) {
 | 
				
			||||||
 * @param other_permissions Memory block map other permissions (specified by SVC field)
 | 
					 * @param other_permissions Memory block map other permissions (specified by SVC field)
 | 
				
			||||||
 * @return Result of operation, 0 on success, otherwise error code
 | 
					 * @return Result of operation, 0 on success, otherwise error code
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
Result MapSharedMemory(u32 handle, u32 address, MemoryPermission permissions, 
 | 
					Result MapSharedMemory(u32 handle, u32 address, MemoryPermission permissions,
 | 
				
			||||||
    MemoryPermission other_permissions) {
 | 
					    MemoryPermission other_permissions) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (address < Memory::SHARED_MEMORY_VADDR || address >= Memory::SHARED_MEMORY_VADDR_END) {
 | 
					    if (address < Memory::SHARED_MEMORY_VADDR || address >= Memory::SHARED_MEMORY_VADDR_END) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ Handle CreateSharedMemory(const std::string& name="Unknown");
 | 
				
			||||||
 * @param other_permissions Memory block map other permissions (specified by SVC field)
 | 
					 * @param other_permissions Memory block map other permissions (specified by SVC field)
 | 
				
			||||||
 * @return Result of operation, 0 on success, otherwise error code
 | 
					 * @return Result of operation, 0 on success, otherwise error code
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
Result MapSharedMemory(u32 handle, u32 address, MemoryPermission permissions, 
 | 
					Result MapSharedMemory(u32 handle, u32 address, MemoryPermission permissions,
 | 
				
			||||||
    MemoryPermission other_permissions);
 | 
					    MemoryPermission other_permissions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
					// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <algorithm>
 | 
					#include <algorithm>
 | 
				
			||||||
#include <list>
 | 
					#include <list>
 | 
				
			||||||
| 
						 | 
					@ -113,7 +113,7 @@ void ResetThread(Thread* t, u32 arg, s32 lowest_priority) {
 | 
				
			||||||
    t->context.pc = t->context.reg_15 = t->entry_point;
 | 
					    t->context.pc = t->context.reg_15 = t->entry_point;
 | 
				
			||||||
    t->context.sp = t->stack_top;
 | 
					    t->context.sp = t->stack_top;
 | 
				
			||||||
    t->context.cpsr = 0x1F; // Usermode
 | 
					    t->context.cpsr = 0x1F; // Usermode
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // TODO(bunnei): This instructs the CPU core to start the execution as if it is "resuming" a
 | 
					    // TODO(bunnei): This instructs the CPU core to start the execution as if it is "resuming" a
 | 
				
			||||||
    // thread. This is somewhat Sky-Eye specific, and should be re-architected in the future to be
 | 
					    // thread. This is somewhat Sky-Eye specific, and should be re-architected in the future to be
 | 
				
			||||||
    // agnostic of the CPU core.
 | 
					    // agnostic of the CPU core.
 | 
				
			||||||
| 
						 | 
					@ -148,7 +148,7 @@ inline bool VerifyWait(const Handle& handle, WaitType type, Handle wait_handle)
 | 
				
			||||||
    Thread* thread = g_object_pool.GetFast<Thread>(handle);
 | 
					    Thread* thread = g_object_pool.GetFast<Thread>(handle);
 | 
				
			||||||
    _assert_msg_(KERNEL, (thread != nullptr), "called, but thread is nullptr!");
 | 
					    _assert_msg_(KERNEL, (thread != nullptr), "called, but thread is nullptr!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (type != thread->wait_type || wait_handle != thread->wait_handle) 
 | 
					    if (type != thread->wait_type || wait_handle != thread->wait_handle)
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
| 
						 | 
					@ -158,7 +158,7 @@ inline bool VerifyWait(const Handle& handle, WaitType type, Handle wait_handle)
 | 
				
			||||||
void StopThread(Handle handle, const char* reason) {
 | 
					void StopThread(Handle handle, const char* reason) {
 | 
				
			||||||
    Thread* thread = g_object_pool.GetFast<Thread>(handle);
 | 
					    Thread* thread = g_object_pool.GetFast<Thread>(handle);
 | 
				
			||||||
    _assert_msg_(KERNEL, (thread != nullptr), "called, but thread is nullptr!");
 | 
					    _assert_msg_(KERNEL, (thread != nullptr), "called, but thread is nullptr!");
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    ChangeReadyState(thread, false);
 | 
					    ChangeReadyState(thread, false);
 | 
				
			||||||
    thread->status = THREADSTATUS_DORMANT;
 | 
					    thread->status = THREADSTATUS_DORMANT;
 | 
				
			||||||
    for (size_t i = 0; i < thread->waiting_threads.size(); ++i) {
 | 
					    for (size_t i = 0; i < thread->waiting_threads.size(); ++i) {
 | 
				
			||||||
| 
						 | 
					@ -181,7 +181,7 @@ void ChangeThreadState(Thread* t, ThreadStatus new_status) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ChangeReadyState(t, (new_status & THREADSTATUS_READY) != 0);
 | 
					    ChangeReadyState(t, (new_status & THREADSTATUS_READY) != 0);
 | 
				
			||||||
    t->status = new_status;
 | 
					    t->status = new_status;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    if (new_status == THREADSTATUS_WAIT) {
 | 
					    if (new_status == THREADSTATUS_WAIT) {
 | 
				
			||||||
        if (t->wait_type == WAITTYPE_NONE) {
 | 
					        if (t->wait_type == WAITTYPE_NONE) {
 | 
				
			||||||
            ERROR_LOG(KERNEL, "Waittype none not allowed");
 | 
					            ERROR_LOG(KERNEL, "Waittype none not allowed");
 | 
				
			||||||
| 
						 | 
					@ -216,7 +216,7 @@ Handle ArbitrateHighestPriorityThread(u32 arbiter, u32 address) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Arbitrate all threads currently waiting
 | 
					/// Arbitrate all threads currently waiting
 | 
				
			||||||
void ArbitrateAllThreads(u32 arbiter, u32 address) {
 | 
					void ArbitrateAllThreads(u32 arbiter, u32 address) {
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Iterate through threads, find highest priority thread that is waiting to be arbitrated...
 | 
					    // Iterate through threads, find highest priority thread that is waiting to be arbitrated...
 | 
				
			||||||
    for (const auto& handle : g_thread_queue) {
 | 
					    for (const auto& handle : g_thread_queue) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -238,11 +238,11 @@ void CallThread(Thread* t) {
 | 
				
			||||||
/// Switches CPU context to that of the specified thread
 | 
					/// Switches CPU context to that of the specified thread
 | 
				
			||||||
void SwitchContext(Thread* t) {
 | 
					void SwitchContext(Thread* t) {
 | 
				
			||||||
    Thread* cur = GetCurrentThread();
 | 
					    Thread* cur = GetCurrentThread();
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Save context for current thread
 | 
					    // Save context for current thread
 | 
				
			||||||
    if (cur) {
 | 
					    if (cur) {
 | 
				
			||||||
        SaveContext(cur->context);
 | 
					        SaveContext(cur->context);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        if (cur->IsRunning()) {
 | 
					        if (cur->IsRunning()) {
 | 
				
			||||||
            ChangeReadyState(cur, true);
 | 
					            ChangeReadyState(cur, true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -263,7 +263,7 @@ void SwitchContext(Thread* t) {
 | 
				
			||||||
Thread* NextThread() {
 | 
					Thread* NextThread() {
 | 
				
			||||||
    Handle next;
 | 
					    Handle next;
 | 
				
			||||||
    Thread* cur = GetCurrentThread();
 | 
					    Thread* cur = GetCurrentThread();
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    if (cur && cur->IsRunning()) {
 | 
					    if (cur && cur->IsRunning()) {
 | 
				
			||||||
        next = g_thread_ready_queue.pop_first_better(cur->current_priority);
 | 
					        next = g_thread_ready_queue.pop_first_better(cur->current_priority);
 | 
				
			||||||
    } else  {
 | 
					    } else  {
 | 
				
			||||||
| 
						 | 
					@ -319,7 +319,7 @@ void DebugThreadQueue() {
 | 
				
			||||||
Thread* CreateThread(Handle& handle, const char* name, u32 entry_point, s32 priority,
 | 
					Thread* CreateThread(Handle& handle, const char* name, u32 entry_point, s32 priority,
 | 
				
			||||||
    s32 processor_id, u32 stack_top, int stack_size) {
 | 
					    s32 processor_id, u32 stack_top, int stack_size) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _assert_msg_(KERNEL, (priority >= THREADPRIO_HIGHEST && priority <= THREADPRIO_LOWEST), 
 | 
					    _assert_msg_(KERNEL, (priority >= THREADPRIO_HIGHEST && priority <= THREADPRIO_LOWEST),
 | 
				
			||||||
        "CreateThread priority=%d, outside of allowable range!", priority)
 | 
					        "CreateThread priority=%d, outside of allowable range!", priority)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Thread* thread = new Thread;
 | 
					    Thread* thread = new Thread;
 | 
				
			||||||
| 
						 | 
					@ -351,7 +351,7 @@ Handle CreateThread(const char* name, u32 entry_point, s32 priority, u32 arg, s3
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if ((u32)stack_size < 0x200) {
 | 
					    if ((u32)stack_size < 0x200) {
 | 
				
			||||||
        ERROR_LOG(KERNEL, "CreateThread(name=%s): invalid stack_size=0x%08X", name, 
 | 
					        ERROR_LOG(KERNEL, "CreateThread(name=%s): invalid stack_size=0x%08X", name,
 | 
				
			||||||
            stack_size);
 | 
					            stack_size);
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -368,7 +368,7 @@ Handle CreateThread(const char* name, u32 entry_point, s32 priority, u32 arg, s3
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Handle handle;
 | 
					    Handle handle;
 | 
				
			||||||
    Thread* thread = CreateThread(handle, name, entry_point, priority, processor_id, stack_top, 
 | 
					    Thread* thread = CreateThread(handle, name, entry_point, priority, processor_id, stack_top,
 | 
				
			||||||
        stack_size);
 | 
					        stack_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ResetThread(thread, arg, 0);
 | 
					    ResetThread(thread, arg, 0);
 | 
				
			||||||
| 
						 | 
					@ -423,19 +423,19 @@ Result SetThreadPriority(Handle handle, s32 priority) {
 | 
				
			||||||
/// Sets up the primary application thread
 | 
					/// Sets up the primary application thread
 | 
				
			||||||
Handle SetupMainThread(s32 priority, int stack_size) {
 | 
					Handle SetupMainThread(s32 priority, int stack_size) {
 | 
				
			||||||
    Handle handle;
 | 
					    Handle handle;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Initialize new "main" thread
 | 
					    // Initialize new "main" thread
 | 
				
			||||||
    Thread* thread = CreateThread(handle, "main", Core::g_app_core->GetPC(), priority, 
 | 
					    Thread* thread = CreateThread(handle, "main", Core::g_app_core->GetPC(), priority,
 | 
				
			||||||
        THREADPROCESSORID_0, Memory::SCRATCHPAD_VADDR_END, stack_size);
 | 
					        THREADPROCESSORID_0, Memory::SCRATCHPAD_VADDR_END, stack_size);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    ResetThread(thread, 0, 0);
 | 
					    ResetThread(thread, 0, 0);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // If running another thread already, set it to "ready" state
 | 
					    // If running another thread already, set it to "ready" state
 | 
				
			||||||
    Thread* cur = GetCurrentThread();
 | 
					    Thread* cur = GetCurrentThread();
 | 
				
			||||||
    if (cur && cur->IsRunning()) {
 | 
					    if (cur && cur->IsRunning()) {
 | 
				
			||||||
        ChangeReadyState(cur, true);
 | 
					        ChangeReadyState(cur, true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Run new "main" thread
 | 
					    // Run new "main" thread
 | 
				
			||||||
    SetCurrentThread(thread);
 | 
					    SetCurrentThread(thread);
 | 
				
			||||||
    thread->status = THREADSTATUS_RUNNING;
 | 
					    thread->status = THREADSTATUS_RUNNING;
 | 
				
			||||||
| 
						 | 
					@ -452,12 +452,12 @@ void Reschedule() {
 | 
				
			||||||
    HLE::g_reschedule = false;
 | 
					    HLE::g_reschedule = false;
 | 
				
			||||||
    if (next > 0) {
 | 
					    if (next > 0) {
 | 
				
			||||||
        INFO_LOG(KERNEL, "context switch 0x%08X -> 0x%08X", prev->GetHandle(), next->GetHandle());
 | 
					        INFO_LOG(KERNEL, "context switch 0x%08X -> 0x%08X", prev->GetHandle(), next->GetHandle());
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        SwitchContext(next);
 | 
					        SwitchContext(next);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Hack - There is no mechanism yet to waken the primary thread if it has been put to sleep
 | 
					        // Hack - There is no mechanism yet to waken the primary thread if it has been put to sleep
 | 
				
			||||||
        // by a simulated VBLANK thread switch. So, we'll just immediately set it to "ready" again.
 | 
					        // by a simulated VBLANK thread switch. So, we'll just immediately set it to "ready" again.
 | 
				
			||||||
        // This results in the current thread yielding on a VBLANK once, and then it will be 
 | 
					        // This results in the current thread yielding on a VBLANK once, and then it will be
 | 
				
			||||||
        // immediately placed back in the queue for execution.
 | 
					        // immediately placed back in the queue for execution.
 | 
				
			||||||
        if (prev->wait_type == WAITTYPE_VBLANK) {
 | 
					        if (prev->wait_type == WAITTYPE_VBLANK) {
 | 
				
			||||||
            ResumeThreadFromWait(prev->GetHandle());
 | 
					            ResumeThreadFromWait(prev->GetHandle());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
					// Copyright 2014 Citra Emulator Project / PPSSPP Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Namespace AC_U
 | 
					// Namespace AC_U
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// socket service "ac:u" 
 | 
					// socket service "ac:u"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace AC_U {
 | 
					namespace AC_U {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ enum class SignalType : u32 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Initialize(Service::Interface* self) {
 | 
					void Initialize(Service::Interface* self) {
 | 
				
			||||||
    u32* cmd_buff = Service::GetCommandBuffer();
 | 
					    u32* cmd_buff = Service::GetCommandBuffer();
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    cmd_buff[3] = Kernel::CreateEvent(RESETTYPE_ONESHOT, "APT_U:Menu");  // APT menu event handle
 | 
					    cmd_buff[3] = Kernel::CreateEvent(RESETTYPE_ONESHOT, "APT_U:Menu");  // APT menu event handle
 | 
				
			||||||
    cmd_buff[4] = Kernel::CreateEvent(RESETTYPE_ONESHOT, "APT_U:Pause"); // APT pause event handle
 | 
					    cmd_buff[4] = Kernel::CreateEvent(RESETTYPE_ONESHOT, "APT_U:Pause"); // APT pause event handle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -168,7 +168,7 @@ void AppletUtility(Service::Interface* self) {
 | 
				
			||||||
    cmd_buff[1] = 0; // No error
 | 
					    cmd_buff[1] = 0; // No error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    WARN_LOG(KERNEL, "(STUBBED) called unk=0x%08X, buffer1_size=0x%08x, buffer2_size=0x%08x, "
 | 
					    WARN_LOG(KERNEL, "(STUBBED) called unk=0x%08X, buffer1_size=0x%08x, buffer2_size=0x%08x, "
 | 
				
			||||||
             "buffer1_addr=0x%08x, buffer2_addr=0x%08x", unk, buffer1_size, buffer2_size, 
 | 
					             "buffer1_addr=0x%08x, buffer2_addr=0x%08x", unk, buffer1_size, buffer2_size,
 | 
				
			||||||
             buffer1_addr, buffer2_addr);
 | 
					             buffer1_addr, buffer2_addr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,8 +13,8 @@ namespace APT_U {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Application and title launching service. These services handle signaling for home/power button as
 | 
					// Application and title launching service. These services handle signaling for home/power button as
 | 
				
			||||||
// well. Only one session for either APT service can be open at a time, normally processes close the
 | 
					// well. Only one session for either APT service can be open at a time, normally processes close the
 | 
				
			||||||
// service handle immediately once finished using the service. The commands for APT:U and APT:S are 
 | 
					// service handle immediately once finished using the service. The commands for APT:U and APT:S are
 | 
				
			||||||
// exactly the same, however certain commands are only accessible with APT:S(NS module will call 
 | 
					// exactly the same, however certain commands are only accessible with APT:S(NS module will call
 | 
				
			||||||
// svcBreak when the command isn't accessible). See http://3dbrew.org/wiki/NS#APT_Services.
 | 
					// svcBreak when the command isn't accessible). See http://3dbrew.org/wiki/NS#APT_Services.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Interface to "APT:U" service
 | 
					/// Interface to "APT:U" service
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,8 +21,8 @@ namespace BOSS_U {
 | 
				
			||||||
    Interface::Interface() {
 | 
					    Interface::Interface() {
 | 
				
			||||||
        Register(FunctionTable, ARRAY_SIZE(FunctionTable));
 | 
					        Register(FunctionTable, ARRAY_SIZE(FunctionTable));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    Interface::~Interface() {
 | 
					    Interface::~Interface() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
} // namespace
 | 
					} // namespace
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,8 +20,8 @@ namespace ERR_F {
 | 
				
			||||||
    Interface::Interface() {
 | 
					    Interface::Interface() {
 | 
				
			||||||
        Register(FunctionTable, ARRAY_SIZE(FunctionTable));
 | 
					        Register(FunctionTable, ARRAY_SIZE(FunctionTable));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    Interface::~Interface() {
 | 
					    Interface::~Interface() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
} // namespace
 | 
					} // namespace
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,5 +23,5 @@ namespace ERR_F {
 | 
				
			||||||
            return "err:f";
 | 
					            return "err:f";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
} // namespace
 | 
					} // namespace
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -269,7 +269,7 @@ static void IsSdmcDetected(Service::Interface* self) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cmd_buff[1] = 0;
 | 
					    cmd_buff[1] = 0;
 | 
				
			||||||
    cmd_buff[2] = Settings::values.use_virtual_sd ? 1 : 0;
 | 
					    cmd_buff[2] = Settings::values.use_virtual_sd ? 1 : 0;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    DEBUG_LOG(KERNEL, "called");
 | 
					    DEBUG_LOG(KERNEL, "called");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace HID_User {
 | 
					namespace HID_User {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** 
 | 
					/**
 | 
				
			||||||
 * Structure of a Pad controller state.
 | 
					 * Structure of a Pad controller state.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct PadState {
 | 
					struct PadState {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ const Interface::FunctionInfo FunctionTable[] = {
 | 
				
			||||||
    {0x000D0040, nullptr,               "SetClamp"},
 | 
					    {0x000D0040, nullptr,               "SetClamp"},
 | 
				
			||||||
    {0x000E0000, nullptr,               "GetClamp"},
 | 
					    {0x000E0000, nullptr,               "GetClamp"},
 | 
				
			||||||
    {0x000F0040, nullptr,               "unknown_input1"},
 | 
					    {0x000F0040, nullptr,               "unknown_input1"},
 | 
				
			||||||
    {0x00100040, nullptr,               "unknown_input2"},	
 | 
					    {0x00100040, nullptr,               "unknown_input2"},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ Interface* Manager::FetchFromPortName(const std::string& port_name) {
 | 
				
			||||||
/// Initialize ServiceManager
 | 
					/// Initialize ServiceManager
 | 
				
			||||||
void Init() {
 | 
					void Init() {
 | 
				
			||||||
    g_manager = new Manager;
 | 
					    g_manager = new Manager;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    g_manager->AddService(new SRV::Interface);
 | 
					    g_manager->AddService(new SRV::Interface);
 | 
				
			||||||
    g_manager->AddService(new AC_U::Interface);
 | 
					    g_manager->AddService(new AC_U::Interface);
 | 
				
			||||||
    g_manager->AddService(new APT_U::Interface);
 | 
					    g_manager->AddService(new APT_U::Interface);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ class Manager;
 | 
				
			||||||
class Interface  : public Kernel::Object {
 | 
					class Interface  : public Kernel::Object {
 | 
				
			||||||
    friend class Manager;
 | 
					    friend class Manager;
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    std::string GetName() const override { return GetPortName(); }
 | 
					    std::string GetName() const override { return GetPortName(); }
 | 
				
			||||||
    std::string GetTypeName() const override { return GetPortName(); }
 | 
					    std::string GetTypeName() const override { return GetPortName(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,7 +76,7 @@ public:
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Synchronize kernel object 
 | 
					     * Synchronize kernel object
 | 
				
			||||||
     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
					     * @param wait Boolean wait set if current thread should wait as a result of sync operation
 | 
				
			||||||
     * @return Result of operation, 0 on success, otherwise error code
 | 
					     * @return Result of operation, 0 on success, otherwise error code
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -85,23 +85,23 @@ public:
 | 
				
			||||||
        auto itr = m_functions.find(cmd_buff[0]);
 | 
					        auto itr = m_functions.find(cmd_buff[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (itr == m_functions.end()) {
 | 
					        if (itr == m_functions.end()) {
 | 
				
			||||||
            ERROR_LOG(OSHLE, "unknown/unimplemented function: port=%s, command=0x%08X", 
 | 
					            ERROR_LOG(OSHLE, "unknown/unimplemented function: port=%s, command=0x%08X",
 | 
				
			||||||
                GetPortName().c_str(), cmd_buff[0]);
 | 
					                GetPortName().c_str(), cmd_buff[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // TODO(bunnei): Hack - ignore error
 | 
					            // TODO(bunnei): Hack - ignore error
 | 
				
			||||||
            u32* cmd_buff = Service::GetCommandBuffer();
 | 
					            u32* cmd_buff = Service::GetCommandBuffer();
 | 
				
			||||||
            cmd_buff[1] = 0;
 | 
					            cmd_buff[1] = 0;
 | 
				
			||||||
            return 0; 
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (itr->second.func == nullptr) {
 | 
					        if (itr->second.func == nullptr) {
 | 
				
			||||||
            ERROR_LOG(OSHLE, "unimplemented function: port=%s, name=%s", 
 | 
					            ERROR_LOG(OSHLE, "unimplemented function: port=%s, name=%s",
 | 
				
			||||||
                GetPortName().c_str(), itr->second.name.c_str());
 | 
					                GetPortName().c_str(), itr->second.name.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // TODO(bunnei): Hack - ignore error
 | 
					            // TODO(bunnei): Hack - ignore error
 | 
				
			||||||
            u32* cmd_buff = Service::GetCommandBuffer();
 | 
					            u32* cmd_buff = Service::GetCommandBuffer();
 | 
				
			||||||
            cmd_buff[1] = 0;
 | 
					            cmd_buff[1] = 0;
 | 
				
			||||||
            return 0; 
 | 
					            return 0;
 | 
				
			||||||
        } 
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        itr->second.func(this);
 | 
					        itr->second.func(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <map>
 | 
					#include <map>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@ enum ControlMemoryOperation {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Map application or GSP heap memory
 | 
					/// Map application or GSP heap memory
 | 
				
			||||||
static Result ControlMemory(u32* out_addr, u32 operation, u32 addr0, u32 addr1, u32 size, u32 permissions) {
 | 
					static Result ControlMemory(u32* out_addr, u32 operation, u32 addr0, u32 addr1, u32 size, u32 permissions) {
 | 
				
			||||||
    DEBUG_LOG(SVC,"called operation=0x%08X, addr0=0x%08X, addr1=0x%08X, size=%08X, permissions=0x%08X", 
 | 
					    DEBUG_LOG(SVC,"called operation=0x%08X, addr0=0x%08X, addr1=0x%08X, size=%08X, permissions=0x%08X",
 | 
				
			||||||
        operation, addr0, addr1, size, permissions);
 | 
					        operation, addr0, addr1, size, permissions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (operation) {
 | 
					    switch (operation) {
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ static Result ControlMemory(u32* out_addr, u32 operation, u32 addr0, u32 addr1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Maps a memory block to specified address
 | 
					/// Maps a memory block to specified address
 | 
				
			||||||
static Result MapMemoryBlock(Handle handle, u32 addr, u32 permissions, u32 other_permissions) {
 | 
					static Result MapMemoryBlock(Handle handle, u32 addr, u32 permissions, u32 other_permissions) {
 | 
				
			||||||
    DEBUG_LOG(SVC, "called memblock=0x%08X, addr=0x%08X, mypermissions=0x%08X, otherpermission=%d", 
 | 
					    DEBUG_LOG(SVC, "called memblock=0x%08X, addr=0x%08X, mypermissions=0x%08X, otherpermission=%d",
 | 
				
			||||||
        handle, addr, permissions, other_permissions);
 | 
					        handle, addr, permissions, other_permissions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Kernel::MemoryPermission permissions_type = static_cast<Kernel::MemoryPermission>(permissions);
 | 
					    Kernel::MemoryPermission permissions_type = static_cast<Kernel::MemoryPermission>(permissions);
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ static Result MapMemoryBlock(Handle handle, u32 addr, u32 permissions, u32 other
 | 
				
			||||||
    case Kernel::MemoryPermission::Write:
 | 
					    case Kernel::MemoryPermission::Write:
 | 
				
			||||||
    case Kernel::MemoryPermission::ReadWrite:
 | 
					    case Kernel::MemoryPermission::ReadWrite:
 | 
				
			||||||
    case Kernel::MemoryPermission::DontCare:
 | 
					    case Kernel::MemoryPermission::DontCare:
 | 
				
			||||||
        Kernel::MapSharedMemory(handle, addr, permissions_type, 
 | 
					        Kernel::MapSharedMemory(handle, addr, permissions_type,
 | 
				
			||||||
            static_cast<Kernel::MemoryPermission>(other_permissions));
 | 
					            static_cast<Kernel::MemoryPermission>(other_permissions));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ static Result WaitSynchronization1(Handle handle, s64 nano_seconds) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle);
 | 
					    Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DEBUG_LOG(SVC, "called handle=0x%08X(%s:%s), nanoseconds=%lld", handle, object->GetTypeName().c_str(), 
 | 
					    DEBUG_LOG(SVC, "called handle=0x%08X(%s:%s), nanoseconds=%lld", handle, object->GetTypeName().c_str(),
 | 
				
			||||||
            object->GetName().c_str(), nano_seconds);
 | 
					            object->GetName().c_str(), nano_seconds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _assert_msg_(KERNEL, (object != nullptr), "called, but kernel object is nullptr!");
 | 
					    _assert_msg_(KERNEL, (object != nullptr), "called, but kernel object is nullptr!");
 | 
				
			||||||
| 
						 | 
					@ -138,7 +138,7 @@ static Result WaitSynchronizationN(s32* out, Handle* handles, s32 handle_count,
 | 
				
			||||||
    bool unlock_all = true;
 | 
					    bool unlock_all = true;
 | 
				
			||||||
    bool wait_infinite = (nano_seconds == -1); // Used to wait until a thread has terminated
 | 
					    bool wait_infinite = (nano_seconds == -1); // Used to wait until a thread has terminated
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DEBUG_LOG(SVC, "called handle_count=%d, wait_all=%s, nanoseconds=%lld", 
 | 
					    DEBUG_LOG(SVC, "called handle_count=%d, wait_all=%s, nanoseconds=%lld",
 | 
				
			||||||
        handle_count, (wait_all ? "true" : "false"), nano_seconds);
 | 
					        handle_count, (wait_all ? "true" : "false"), nano_seconds);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Iterate through each handle, synchronize kernel object
 | 
					    // Iterate through each handle, synchronize kernel object
 | 
				
			||||||
| 
						 | 
					@ -149,7 +149,7 @@ static Result WaitSynchronizationN(s32* out, Handle* handles, s32 handle_count,
 | 
				
			||||||
        _assert_msg_(KERNEL, (object != nullptr), "called handle=0x%08X, but kernel object "
 | 
					        _assert_msg_(KERNEL, (object != nullptr), "called handle=0x%08X, but kernel object "
 | 
				
			||||||
            "is nullptr!", handles[i]);
 | 
					            "is nullptr!", handles[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DEBUG_LOG(SVC, "\thandle[%d] = 0x%08X(%s:%s)", i, handles[i], object->GetTypeName().c_str(), 
 | 
					        DEBUG_LOG(SVC, "\thandle[%d] = 0x%08X(%s:%s)", i, handles[i], object->GetTypeName().c_str(),
 | 
				
			||||||
            object->GetName().c_str());
 | 
					            object->GetName().c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Result res = object->WaitSynchronization(&wait);
 | 
					        Result res = object->WaitSynchronization(&wait);
 | 
				
			||||||
| 
						 | 
					@ -183,7 +183,7 @@ static Result CreateAddressArbiter(u32* arbiter) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Arbitrate address
 | 
					/// Arbitrate address
 | 
				
			||||||
static Result ArbitrateAddress(Handle arbiter, u32 address, u32 type, u32 value, s64 nanoseconds) {
 | 
					static Result ArbitrateAddress(Handle arbiter, u32 address, u32 type, u32 value, s64 nanoseconds) {
 | 
				
			||||||
    return Kernel::ArbitrateAddress(arbiter, static_cast<Kernel::ArbitrationType>(type), address, 
 | 
					    return Kernel::ArbitrateAddress(arbiter, static_cast<Kernel::ArbitrationType>(type), address,
 | 
				
			||||||
        value);
 | 
					        value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -195,7 +195,7 @@ static void OutputDebugString(const char* string) {
 | 
				
			||||||
/// Get resource limit
 | 
					/// Get resource limit
 | 
				
			||||||
static Result GetResourceLimit(Handle* resource_limit, Handle process) {
 | 
					static Result GetResourceLimit(Handle* resource_limit, Handle process) {
 | 
				
			||||||
    // With regards to proceess values:
 | 
					    // With regards to proceess values:
 | 
				
			||||||
    // 0xFFFF8001 is a handle alias for the current KProcess, and 0xFFFF8000 is a handle alias for 
 | 
					    // 0xFFFF8001 is a handle alias for the current KProcess, and 0xFFFF8000 is a handle alias for
 | 
				
			||||||
    // the current KThread.
 | 
					    // the current KThread.
 | 
				
			||||||
    *resource_limit = 0xDEADBEEF;
 | 
					    *resource_limit = 0xDEADBEEF;
 | 
				
			||||||
    ERROR_LOG(SVC, "(UNIMPLEMENTED) called process=0x%08X", process);
 | 
					    ERROR_LOG(SVC, "(UNIMPLEMENTED) called process=0x%08X", process);
 | 
				
			||||||
| 
						 | 
					@ -227,9 +227,9 @@ static Result CreateThread(u32 priority, u32 entry_point, u32 arg, u32 stack_top
 | 
				
			||||||
    Core::g_app_core->SetReg(1, thread);
 | 
					    Core::g_app_core->SetReg(1, thread);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DEBUG_LOG(SVC, "called entrypoint=0x%08X (%s), arg=0x%08X, stacktop=0x%08X, "
 | 
					    DEBUG_LOG(SVC, "called entrypoint=0x%08X (%s), arg=0x%08X, stacktop=0x%08X, "
 | 
				
			||||||
        "threadpriority=0x%08X, processorid=0x%08X : created handle=0x%08X", entry_point, 
 | 
					        "threadpriority=0x%08X, processorid=0x%08X : created handle=0x%08X", entry_point,
 | 
				
			||||||
        name.c_str(), arg, stack_top, priority, processor_id, thread);
 | 
					        name.c_str(), arg, stack_top, priority, processor_id, thread);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -258,7 +258,7 @@ static Result SetThreadPriority(Handle handle, s32 priority) {
 | 
				
			||||||
/// Create a mutex
 | 
					/// Create a mutex
 | 
				
			||||||
static Result CreateMutex(Handle* mutex, u32 initial_locked) {
 | 
					static Result CreateMutex(Handle* mutex, u32 initial_locked) {
 | 
				
			||||||
    *mutex = Kernel::CreateMutex((initial_locked != 0));
 | 
					    *mutex = Kernel::CreateMutex((initial_locked != 0));
 | 
				
			||||||
    DEBUG_LOG(SVC, "called initial_locked=%s : created handle=0x%08X", 
 | 
					    DEBUG_LOG(SVC, "called initial_locked=%s : created handle=0x%08X",
 | 
				
			||||||
        initial_locked ? "true" : "false", *mutex);
 | 
					        initial_locked ? "true" : "false", *mutex);
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -286,7 +286,7 @@ static Result QueryMemory(void* info, void* out, u32 addr) {
 | 
				
			||||||
/// Create an event
 | 
					/// Create an event
 | 
				
			||||||
static Result CreateEvent(Handle* evt, u32 reset_type) {
 | 
					static Result CreateEvent(Handle* evt, u32 reset_type) {
 | 
				
			||||||
    *evt = Kernel::CreateEvent((ResetType)reset_type);
 | 
					    *evt = Kernel::CreateEvent((ResetType)reset_type);
 | 
				
			||||||
    DEBUG_LOG(SVC, "called reset_type=0x%08X : created handle=0x%08X", 
 | 
					    DEBUG_LOG(SVC, "called reset_type=0x%08X : created handle=0x%08X",
 | 
				
			||||||
        reset_type, *evt);
 | 
					        reset_type, *evt);
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -301,7 +301,7 @@ static Result DuplicateHandle(Handle* out, Handle handle) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    _assert_msg_(KERNEL, (handle != Kernel::CurrentProcess),
 | 
					    _assert_msg_(KERNEL, (handle != Kernel::CurrentProcess),
 | 
				
			||||||
        "(UNIMPLEMENTED) process handle duplication!");
 | 
					        "(UNIMPLEMENTED) process handle duplication!");
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // TODO(bunnei): FixMe - This is a hack to return the handle that we were asked to duplicate.
 | 
					    // TODO(bunnei): FixMe - This is a hack to return the handle that we were asked to duplicate.
 | 
				
			||||||
    *out = handle;
 | 
					    *out = handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
// Copyright 2014 Citra Emulator Project
 | 
					// Copyright 2014 Citra Emulator Project
 | 
				
			||||||
// Licensed under GPLv2
 | 
					// Licensed under GPLv2
 | 
				
			||||||
// Refer to the license.txt file included.  
 | 
					// Refer to the license.txt file included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,7 @@ enum {
 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
inline void Read(T &var, const u32 addr) {
 | 
					inline void Read(T &var, const u32 addr) {
 | 
				
			||||||
    switch (addr & 0xFFFFF000) {
 | 
					    switch (addr & 0xFFFFF000) {
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // TODO(bunnei): What is the virtual address of NDMA?
 | 
					    // TODO(bunnei): What is the virtual address of NDMA?
 | 
				
			||||||
    // case VADDR_NDMA:
 | 
					    // case VADDR_NDMA:
 | 
				
			||||||
    //     NDMA::Read(var, addr);
 | 
					    //     NDMA::Read(var, addr);
 | 
				
			||||||
| 
						 | 
					@ -57,9 +57,9 @@ inline void Read(T &var, const u32 addr) {
 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
inline void Write(u32 addr, const T data) {
 | 
					inline void Write(u32 addr, const T data) {
 | 
				
			||||||
    switch (addr & 0xFFFFF000) {
 | 
					    switch (addr & 0xFFFFF000) {
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // TODO(bunnei): What is the virtual address of NDMA?
 | 
					    // TODO(bunnei): What is the virtual address of NDMA?
 | 
				
			||||||
    // case VADDR_NDMA 
 | 
					    // case VADDR_NDMA
 | 
				
			||||||
    //     NDMA::Write(addr, data);
 | 
					    //     NDMA::Write(addr, data);
 | 
				
			||||||
    //     break;
 | 
					    //     break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -273,13 +273,13 @@ bool ElfReader::LoadInto(u32 vaddr) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < header->e_phnum; i++) {
 | 
					    for (int i = 0; i < header->e_phnum; i++) {
 | 
				
			||||||
        Elf32_Phdr *p = segments + i;
 | 
					        Elf32_Phdr *p = segments + i;
 | 
				
			||||||
        INFO_LOG(MASTER_LOG, "Type: %i Vaddr: %08x Filesz: %i Memsz: %i ", p->p_type, p->p_vaddr, 
 | 
					        INFO_LOG(MASTER_LOG, "Type: %i Vaddr: %08x Filesz: %i Memsz: %i ", p->p_type, p->p_vaddr,
 | 
				
			||||||
            p->p_filesz, p->p_memsz);
 | 
					            p->p_filesz, p->p_memsz);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (p->p_type == PT_LOAD) {
 | 
					        if (p->p_type == PT_LOAD) {
 | 
				
			||||||
            segment_addr[i] = base_addr + p->p_vaddr;
 | 
					            segment_addr[i] = base_addr + p->p_vaddr;
 | 
				
			||||||
            memcpy(Memory::GetPointer(segment_addr[i]), GetSegmentPtr(i), p->p_filesz);
 | 
					            memcpy(Memory::GetPointer(segment_addr[i]), GetSegmentPtr(i), p->p_filesz);
 | 
				
			||||||
            INFO_LOG(MASTER_LOG, "Loadable Segment Copied to %08x, size %08x", segment_addr[i], 
 | 
					            INFO_LOG(MASTER_LOG, "Loadable Segment Copied to %08x, size %08x", segment_addr[i],
 | 
				
			||||||
                p->p_memsz);
 | 
					                p->p_memsz);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,7 +118,7 @@ AppLoader_NCCH::~AppLoader_NCCH() {
 | 
				
			||||||
 * @return ResultStatus result of function
 | 
					 * @return ResultStatus result of function
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
ResultStatus AppLoader_NCCH::LoadExec() const {
 | 
					ResultStatus AppLoader_NCCH::LoadExec() const {
 | 
				
			||||||
    if (!is_loaded) 
 | 
					    if (!is_loaded)
 | 
				
			||||||
        return ResultStatus::ErrorNotLoaded;
 | 
					        return ResultStatus::ErrorNotLoaded;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::vector<u8> code;
 | 
					    std::vector<u8> code;
 | 
				
			||||||
| 
						 | 
					@ -185,7 +185,7 @@ ResultStatus AppLoader_NCCH::LoadSectionExeFS(const char* name, std::vector<u8>&
 | 
				
			||||||
        return ResultStatus::Error;
 | 
					        return ResultStatus::Error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return ResultStatus::ErrorNotUsed;
 | 
					    return ResultStatus::ErrorNotUsed;
 | 
				
			||||||
} 
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Loads an NCCH file (e.g. from a CCI, or the first NCCH in a CXI)
 | 
					 * Loads an NCCH file (e.g. from a CCI, or the first NCCH in a CXI)
 | 
				
			||||||
| 
						 | 
					@ -210,7 +210,7 @@ ResultStatus AppLoader_NCCH::Load() {
 | 
				
			||||||
            file.Seek(ncch_offset, 0);
 | 
					            file.Seek(ncch_offset, 0);
 | 
				
			||||||
            file.ReadBytes(&ncch_header, sizeof(NCCH_Header));
 | 
					            file.ReadBytes(&ncch_header, sizeof(NCCH_Header));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        // Verify we are loading the correct file type...
 | 
					        // Verify we are loading the correct file type...
 | 
				
			||||||
        if (0 != memcmp(&ncch_header.magic, "NCCH", 4))
 | 
					        if (0 != memcmp(&ncch_header.magic, "NCCH", 4))
 | 
				
			||||||
            return ResultStatus::ErrorInvalidFormat;
 | 
					            return ResultStatus::ErrorInvalidFormat;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -215,7 +215,7 @@ private:
 | 
				
			||||||
    u32             entry_point;
 | 
					    u32             entry_point;
 | 
				
			||||||
    u32             ncch_offset; // Offset to NCCH header, can be 0 or after NCSD header
 | 
					    u32             ncch_offset; // Offset to NCCH header, can be 0 or after NCSD header
 | 
				
			||||||
    u32             exefs_offset;
 | 
					    u32             exefs_offset;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    NCCH_Header     ncch_header;
 | 
					    NCCH_Header     ncch_header;
 | 
				
			||||||
    ExeFs_Header    exefs_header;
 | 
					    ExeFs_Header    exefs_header;
 | 
				
			||||||
    ExHeader_Header exheader_header;
 | 
					    ExHeader_Header exheader_header;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ public:
 | 
				
			||||||
    /// Swap buffers (render frame)
 | 
					    /// Swap buffers (render frame)
 | 
				
			||||||
    virtual void SwapBuffers() = 0;
 | 
					    virtual void SwapBuffers() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** 
 | 
					    /**
 | 
				
			||||||
     * Set the emulator window to use for renderer
 | 
					     * Set the emulator window to use for renderer
 | 
				
			||||||
     * @param window EmuWindow handle to emulator window to use for rendering
 | 
					     * @param window EmuWindow handle to emulator window to use for rendering
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@ namespace VideoCore {
 | 
				
			||||||
void DumpTGA(std::string filename, short width, short height, u8* raw_data) {
 | 
					void DumpTGA(std::string filename, short width, short height, u8* raw_data) {
 | 
				
			||||||
    TGAHeader hdr = {0, 0, 2, 0, 0, 0, 0, width, height, 24, 0};
 | 
					    TGAHeader hdr = {0, 0, 2, 0, 0, 0, 0, width, height, 24, 0};
 | 
				
			||||||
    FILE* fout = fopen(filename.c_str(), "wb");
 | 
					    FILE* fout = fopen(filename.c_str(), "wb");
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    fwrite(&hdr, sizeof(TGAHeader), 1, fout);
 | 
					    fwrite(&hdr, sizeof(TGAHeader), 1, fout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int y = 0; y < height; y++) {
 | 
					    for (int y = 0; y < height; y++) {
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@ void DumpTGA(std::string filename, short width, short height, u8* raw_data) {
 | 
				
			||||||
            putc(raw_data[(3 * (y * width)) + (3 * x) + 2], fout); // r
 | 
					            putc(raw_data[(3 * (y * width)) + (3 * x) + 2], fout); // r
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    fclose(fout);
 | 
					    fclose(fout);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
} // namespace
 | 
					} // namespace
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue