Skip to content

Instantly share code, notes, and snippets.

@GovanifY
Created April 27, 2018 21:04
Show Gist options
  • Save GovanifY/6fb17d9f0acd8bc5007b91d3d24f1280 to your computer and use it in GitHub Desktop.
Save GovanifY/6fb17d9f0acd8bc5007b91d3d24f1280 to your computer and use it in GitHub Desktop.
GetCommandBuffer = function(){ return call(0x3ACE54, [], [], [], false); }
SendSyncRequest = function(handle, buffer, size){ return call(0x3ACE5C, [], [], [[handle, 0], buffer, [size, 0]], false)[0]; }
svcCloseHandle = function(handle){ return svc(0x16, [[handle, 0]], false)[0]; }
getMemInfo = function(addr){
addrinfo = queryMem(addr);
utils.log(" ");
utils.log("Memory Info:");
utils.log("Page: " + utils.paddr(addrinfo[0]));
utils.log("Size: " + utils.paddr(addrinfo[1]));
utils.log("State: " + addrinfo[2]);
utils.log("Permissions: " + addrinfo[3]);
utils.log(utils.paddr(addrinfo[4]));
}
printCmdbuf = function(buffer){
size = read4(buffer, 1) & 0x1FF;
if (size & 1) size += 1;
utils.log(" ");
utils.log("Command buffer:");
for (i = 0; i < size; i+=2) utils.log(utils.paddr(read8(cmdbuf, i)));
}
/*
* TODO:
* - Add buffer descs
* - Auto-align data region.
*/
sendIPCRequest = function(handle, cmd, args){
cmdbuf_unaligned = malloc(0x2000);
cmdbuf = utils.add2(cmdbuf_unaligned, 0x1000);
cmdbuf[0] &= 0xFFFFF000;
total_wordcount = 8 + (args.length*2);
write8([4, total_wordcount], cmdbuf, 0); //ipc header
write8([0, 0], cmdbuf, 2); //padding for data alignment
write8([0x49434653, 0], cmdbuf, 4); //SFCI (input)
write8([cmd, 0], cmdbuf, 6); //cmd
for (i = 0; i < args.length; i++)
write8(args[i], cmdbuf, 8 + (i*2)); //args
//printCmdbuf(cmdbuf);
result = SendSyncRequest(ns_am_handle, cmdbuf, 0x1000);
if (result == 0) result = read4(cmdbuf, 6);
//printCmdbuf(cmdbuf);
free(cmdbuf_unaligned);
return result;
}
parseError = function(error){ //lol
if (error == 0) return;
modules = {
1: "KERNEL", 2: "FS", 5: "GAMECARD", 9: "RO SERVICE", 10: "IPC", 11: "IPC",
16: "NS", 21: "SM", 22: "RO USER", 124: "ACCOUNT", 126: "MII", 203: "HID"
};
mod = error & 0x1FF;
if (mod in modules) module = modules[mod];
else module = "UNKNOWN";
desc = error >> 9;
utils.log("0x" + error.toString(16) + ": " + module + " - " + desc.toString());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment