]> Chaos Git - console/XDS.git/commitdiff
fixed thumb *xtb instr + some am stuff
authorichfly <fake@example.com>
Fri, 11 Dec 2015 17:34:30 +0000 (18:34 +0100)
committerichfly <fake@example.com>
Fri, 11 Dec 2015 17:34:30 +0000 (18:34 +0100)
source/Main.cpp
source/arm/dyncom/arm_dyncom_thumb.cpp
source/process9/am.cpp

index c12dee5dace9c2032cdc6b385538daa27777a283..6689694710566802768d5f9128c36bacfd5535dc 100644 (file)
@@ -48,4 +48,4 @@ extern "C" void citraFireInterrupt(int id)
 }
 bool novideo = true;
 extern "C" int citraPressedkey = 0;
-extern "C" bool citraSettingSkipGSP = false;
\ No newline at end of file
+extern "C" bool citraSettingSkipGSP = true;
\ No newline at end of file
index 7cf3858d4532e66120573e3effc31a64ad434a3c..c8298fd19def9126102c4813bb2fdfd2897de862 100644 (file)
@@ -351,10 +351,11 @@ tdstate thumb_translate(addr_t addr, uint32_t instr, uint32_t* ainstr, uint32_t*
                                //e6ef1078 uxtb r1, r8
 
                                u32 subset[4] = { //Bit 12 - 15 dest Bit 0 - 3 src
-                                       0xe6ff0070, /* uxth */
-                                       0xe6ef0070, /* uxtb */
                                        0xe6bf0070, /* sxth */
-                                       0xe6af0070 /* sxtb */
+                                       0xe6af0070, /* sxtb */
+                                       0xe6ff0070, /* uxth */
+                                       0xe6ef0070 /* uxtb */
+
                                };
 
                                if ((tinstr & 0xF00) == 0x200) //Bit(7) unsigned (set = sxt. cleared = uxt) Bit(6) byte (set = .xtb cleared = .xth) Bit 5-3 Rb src Bit 2-0 Rd dest
index 40b48a42fdea012be8eb235d8bdb77892846a469..b8eb48ef7f6dd402b963bff5038e6ba9ad71afda 100644 (file)
@@ -25,8 +25,69 @@ void P9AM::Command(u32 data[], u32 numb)
                LOG("GetTitleCount %02x", data[1] & 0xFF);
                resdata[0] = 0x00010080;
                resdata[1] = 0;
-               resdata[2] = 0;
+               resdata[2] = 0; //only the old one are used (that is not correct but it works)
                break;
+       case 0x3:
+       {
+               u8 medid = data[1] & 0xFF;
+               u32 count = data[2];
+               u32 desc_read = data[3];
+               u32 ptr_read = data[4];
+               u32 desc_write = data[5];
+               u32 ptr_write = data[6];
+               LOG("GetTitleInfo %02x %08x", medid, count);
+               for (int j = 0; j < count; j++)
+               {
+                       u8 temp = 0;
+                       for (u32 i = 0; i < 8; i++) // copy id
+                       {
+                               m_owner->m_kernel->m_IPCFIFOAdresses[(desc_read >> 4) & 0xF]->Read8(i + ptr_read, temp);
+                               printf("%02x", temp);
+                               m_owner->m_kernel->m_IPCFIFOAdresses[(desc_write >> 4) & 0xF]->Write8(i + ptr_write, temp);
+                       }
+                       for (u32 i = 8; i < 24; i++)
+                       {
+                               m_owner->m_kernel->m_IPCFIFOAdresses[(desc_write >> 4) & 0xF]->Write8(i + ptr_write, 0);
+                       }
+                       LOG("");
+                       ptr_write += 24;
+               }
+
+               resdata[0] = 0x00030040;
+               resdata[1] = 0;
+               break;
+       }
+       case 0x1F:
+       {
+               u8 count = data[1];
+               u32 unk = data[2]; //(always 0?)
+               u32 desc_read = data[3];
+               u32 ptr_read = data[4];
+               u32 desc_write = data[5];
+               u32 ptr_write = data[6];
+               LOG("GetTitleTemporaryInfo %08x %08x", unk, count);
+               for (int j = 0; j < count; j++)
+               {
+                       u8 temp = 0;
+                       for (u32 i = 0; i < 8; i++) // copy id
+                       {
+                               m_owner->m_kernel->m_IPCFIFOAdresses[(desc_read >> 4) & 0xF]->Read8(i + ptr_read, temp);
+                               printf("%02x", temp);
+                               m_owner->m_kernel->m_IPCFIFOAdresses[(desc_write >> 4) & 0xF]->Write8(i + ptr_write, temp);
+                       }
+                       for (u32 i = 8; i < 24; i++)
+                       {
+                               m_owner->m_kernel->m_IPCFIFOAdresses[(desc_write >> 4) & 0xF]->Write8(i + ptr_write, 0);
+                       }
+                       LOG("");
+                       ptr_write += 24;
+               }
+
+               resdata[0] = 0x00030040;
+               resdata[1] = 0;
+               break;
+       }
+
        case 0x3F:
                LOG("unk3F %02x", data[1]&0xFF);
                resdata[0] = 0x003F0080;