From d2291a78e21b22164e4032ce9d727736819a31f6 Mon Sep 17 00:00:00 2001 From: Kostas Missos Date: Tue, 19 Jun 2018 16:53:41 +0300 Subject: [PATCH] Switch Framebuffer to ARGB by default --- README.md | 5 +-- ipl/di.c | 5 --- ipl/di.h | 5 +-- ipl/di.inl | 38 +--------------- ipl/gfx.c | 6 +-- ipl/gfx.h | 4 +- ipl/hos.c | 10 ++--- ipl/main.c | 92 +++++++++++++++++++------------------- ipl/pkg1.c | 2 + ipl/pkg2.c | 1 + ipl/pkg2.h | 1 + ipl/pmc.h | 1 + ipl/sd.h | 1 + ipl/sdmmc.c | 1 + ipl/sdmmc.h | 1 + ipl/sdmmc_driver.c | 1 + ipl/sdram_lp0.c | 2 + ipl/sdram_param_t210_lp0.h | 1 + ipl/tui.c | 8 ++-- ipl/tui.h | 1 + ipl/util.c | 1 + 21 files changed, 78 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index e6520e8..9cbccae 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,7 @@ ![Image of Hekate](https://i.imgur.com/O3REoy5.png) -The goddess that blesses your Nintendo Switch. - - -Nintendo Switch bootloader, firmware patcher, and more. +Custom Nintendo Switch bootloader, firmware patcher, and more. ## IPL configuration diff --git a/ipl/di.c b/ipl/di.c index c0aa832..662e97f 100755 --- a/ipl/di.c +++ b/ipl/di.c @@ -227,8 +227,3 @@ u32 *display_init_framebuffer() return (u32 *)0xC0000000; } - -void display_init_framebuffer_bgra() -{ - exec_cfg((u32 *)DISPLAY_A_BASE, cfg_display_framebuffer2, 32); -} diff --git a/ipl/di.h b/ipl/di.h index 4fafb16..777aab9 100755 --- a/ipl/di.h +++ b/ipl/di.h @@ -345,10 +345,7 @@ void display_color_screen(u32 color); /*! Switches screen backlight ON/OFF. */ void display_backlight(u8 enable); -/*! Init display in full 1280x720 resolution (R8G8B8A8, line stride 768, framebuffer size = 1280*768*4 bytes). */ +/*! Init display in full 1280x720 resolution (B8G8R8A8, line stride 768, framebuffer size = 1280*768*4 bytes). */ u32 *display_init_framebuffer(); -/*! Init display in full 1280x720 resolution (B8G8R8A8, line stride 768, framebuffer size = 1280*768*4 bytes). */ -void display_init_framebuffer_bgra(); - #endif diff --git a/ipl/di.inl b/ipl/di.inl index e397c78..907b1c0 100755 --- a/ipl/di.inl +++ b/ipl/di.inl @@ -535,43 +535,7 @@ static const cfg_op_t cfg_display_framebuffer[32] = { {DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT}, //Enable window A. {DC_WIN_WIN_OPTIONS, 0}, {DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE}, //DSI_ENABLE - {DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_R8G8B8A8}, //T_A8B8G8R8 - {DC_WIN_WIN_OPTIONS, 0}, - {DC_WIN_WIN_OPTIONS, 0}, - {DC_WIN_POSITION, 0}, //(0,0) - {DC_WIN_H_INITIAL_DDA, 0}, - {DC_WIN_V_INITIAL_DDA, 0}, - {DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(2880)}, //Pre-scaled size: 1280x2880 bytes. - {DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)}, - {DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(720)}, //Window size: 1280 vertical lines x 720 horizontal pixels. - {DC_WIN_LINE_STRIDE, 0x6000C00}, //768*2x768*4 (= 0x600 x 0xC00) bytes, see TRM for alignment requirements. - {DC_WIN_BUFFER_CONTROL, 0}, - {DC_WINBUF_SURFACE_KIND, 0}, //Regular surface. - {DC_WINBUF_START_ADDR, 0xC0000000}, //Framebuffer address. - {DC_WINBUF_ADDR_H_OFFSET, 0}, - {DC_WINBUF_ADDR_V_OFFSET, 0}, - {DC_WIN_WIN_OPTIONS, 0}, - {DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE}, //DSI_ENABLE - {DC_WIN_WIN_OPTIONS, 0}, - {DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE}, //DSI_ENABLE - {DC_WIN_WIN_OPTIONS, 0}, - {DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE}, //DSI_ENABLE - {DC_WIN_WIN_OPTIONS, WIN_ENABLE}, //Enable window AD. - {DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY}, //DISPLAY_CTRL_MODE: continuous display. - {DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE}, //General update; window A update. - {DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ} //General activation request; window A activation request. -}; - -//Display A config. -static const cfg_op_t cfg_display_framebuffer2[32] = { - {DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT}, //Enable window C. - {DC_WIN_WIN_OPTIONS, 0}, - {DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT}, //Enable window B. - {DC_WIN_WIN_OPTIONS, 0}, - {DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT}, //Enable window A. - {DC_WIN_WIN_OPTIONS, 0}, - {DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE}, //DSI_ENABLE - {DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8}, //T_A8B8G8R8 //WIN_COLOR_DEPTH_R8G8B8A8 + {DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8}, //T_A8R8G8B8 //NX Default: T_A8B8G8R8, WIN_COLOR_DEPTH_R8G8B8A8 {DC_WIN_WIN_OPTIONS, 0}, {DC_WIN_WIN_OPTIONS, 0}, {DC_WIN_POSITION, 0}, //(0,0) diff --git a/ipl/gfx.c b/ipl/gfx.c index d88b367..8d0806f 100755 --- a/ipl/gfx.c +++ b/ipl/gfx.c @@ -365,13 +365,13 @@ void gfx_set_rect_rgb(gfx_ctxt_t *ctxt, const u8 *buf, u32 size_x, u32 size_y, u { for (u32 x = pos_x; x < (pos_x + size_x); x++) { - ctxt->fb[x + y*ctxt->stride] = buf[pos] | (buf[pos + 1] << 8) | (buf[pos + 2] << 16); + ctxt->fb[x + y*ctxt->stride] = buf[pos + 2] | (buf[pos + 1] << 8) | (buf[pos] << 16); pos+=3; } } } -void gfx_set_rect_rgba(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y) +void gfx_set_rect_argb(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y) { u32 pos = 0; for (u32 y = pos_y; y < (pos_y + size_y); y++) @@ -384,7 +384,7 @@ void gfx_set_rect_rgba(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, } } -void gfx_render_bmp_rgba(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y) +void gfx_render_bmp_argb(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y) { for (u32 y = pos_y; y < (pos_y + size_y); y++) { diff --git a/ipl/gfx.h b/ipl/gfx.h index 4e31a3c..9e5b4a3 100755 --- a/ipl/gfx.h +++ b/ipl/gfx.h @@ -54,7 +54,7 @@ void gfx_set_pixel(gfx_ctxt_t *ctxt, u32 x, u32 y, u32 color); void gfx_line(gfx_ctxt_t *ctxt, int x0, int y0, int x1, int y1, u32 color); void gfx_set_rect_grey(gfx_ctxt_t *ctxt, const u8 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y); void gfx_set_rect_rgb(gfx_ctxt_t *ctxt, const u8 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y); -void gfx_set_rect_rgba(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y); -void gfx_render_bmp_rgba(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y); +void gfx_set_rect_argb(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y); +void gfx_render_bmp_argb(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y, u32 pos_x, u32 pos_y); #endif diff --git a/ipl/hos.c b/ipl/hos.c index a5d818f..a115073 100755 --- a/ipl/hos.c +++ b/ipl/hos.c @@ -219,7 +219,7 @@ static int _read_emmc_pkg1(launch_ctxt_t *ctxt) ctxt->pkg1_id = pkg1_identify(ctxt->pkg1); if (!ctxt->pkg1_id) { - gfx_printf(&gfx_con, "%kCould not identify package1,\nVersion (= '%s').%k\n", 0xFF0000FF, (char *)ctxt->pkg1 + 0x10, 0xFFFFFFFF); + gfx_printf(&gfx_con, "%kCould not identify package1,\nVersion (= '%s').%k\n", 0xFFFF0000, (char *)ctxt->pkg1 + 0x10, 0xFFCCCCCC); goto out; } gfx_printf(&gfx_con, "Identified package1 ('%s'),\nKeyblob version %d\n\n", (char *)(ctxt->pkg1 + 0x10), ctxt->pkg1_id->kb); @@ -424,7 +424,7 @@ int hos_launch(ini_sec_t *cfg) { //Else we patch it to allow for an unsigned package2 and patched kernel. patch_t *secmon_patchset = ctxt.pkg1_id->secmon_patchset; - gfx_printf(&gfx_con, "%kPatching Security Monitor%k\n", 0xFF00BAFF, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kPatching Security Monitor%k\n", 0xFFFFBA00, 0xFFCCCCCC); for (u32 i = 0; secmon_patchset[i].off != 0xFFFFFFFF; i++) *(vu32 *)(ctxt.pkg1_id->secmon_base + secmon_patchset[i].off) = secmon_patchset[i].val; } @@ -460,7 +460,7 @@ int hos_launch(ini_sec_t *cfg) patch_t *kernel_patchset = ctxt.pkg2_kernel_id->kernel_patchset; if (kernel_patchset != NULL) { - gfx_printf(&gfx_con, "%kPatching kernel%k\n", 0xFF00BAFF, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kPatching kernel%k\n", 0xFFFFBA00, 0xFFCCCCCC); //TODO: this is a bit ugly, perhaps attach a 'key' to the patchset and pass it via ini. if (ctxt.svcperm && kernel_patchset[0].off != 0xFFFFFFFF) *(vu32 *)(ctxt.kernel + kernel_patchset[0].off) = kernel_patchset[0].val; @@ -471,7 +471,7 @@ int hos_launch(ini_sec_t *cfg) } //Merge extra KIP1s into loaded ones. - gfx_printf(&gfx_con, "%kPatching kernel initial processes%k\n", 0xFF00BAFF, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kPatching kernel initial processes%k\n", 0xFFFFBA00, 0xFFCCCCCC); LIST_FOREACH_ENTRY(merge_kip_t, mki, &ctxt.kip1_list, link) pkg2_merge_kip(&kip1_info, (pkg2_kip1_t *)mki->kip1); @@ -482,7 +482,7 @@ int hos_launch(ini_sec_t *cfg) //Unmount SD card. f_mount(NULL, "", 1); - gfx_printf(&gfx_con, "\n%kBooting...%k\n", 0xFF00FF96, 0xFFCCCCCC); + gfx_printf(&gfx_con, "\n%kBooting...%k\n", 0xFF96FF00, 0xFFCCCCCC); se_aes_key_clear(8); se_aes_key_clear(11); diff --git a/ipl/main.c b/ipl/main.c index 23ca6c8..31d7af0 100755 --- a/ipl/main.c +++ b/ipl/main.c @@ -58,8 +58,8 @@ gfx_ctxt_t gfx_ctxt; gfx_con_t gfx_con; //TODO: Create more macros (info, header, debug, etc) with different colors and utilize them for consistency. -#define EPRINTF(text) gfx_printf(&gfx_con, "%k"text"%k\n", 0xFF0000FF, 0xFFCCCCCC) -#define EPRINTFARGS(text, args...) gfx_printf(&gfx_con, "%k"text"%k\n", 0xFF0000FF, args, 0xFFCCCCCC) +#define EPRINTF(text) gfx_printf(&gfx_con, "%k"text"%k\n", 0xFFFF0000, 0xFFCCCCCC) +#define EPRINTFARGS(text, args...) gfx_printf(&gfx_con, "%k"text"%k\n", 0xFFFF0000, args, 0xFFCCCCCC) //TODO: ugly. sdmmc_t sd_sdmmc; @@ -343,7 +343,7 @@ void print_fuseinfo() gfx_clear_grey(&gfx_ctxt, 0x1B); gfx_con_setpos(&gfx_con, 0, 0); - gfx_printf(&gfx_con, "%k(Unlocked) fuse cache:\n\n%k", 0xFFFFDD00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%k(Unlocked) fuse cache:\n\n%k", 0xFF00DDFF, 0xFFCCCCCC); gfx_hexdump(&gfx_con, 0x7000F900, (u8 *)0x7000F900, 0x2FC); gfx_puts(&gfx_con, "\nPress POWER to dump them to SD Card.\nPress VOL to go to the menu.\n"); @@ -372,7 +372,7 @@ void print_kfuseinfo() gfx_clear_grey(&gfx_ctxt, 0x1B); gfx_con_setpos(&gfx_con, 0, 0); - gfx_printf(&gfx_con, "%kKFuse contents:\n\n%k", 0xFFFFDD00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kKFuse contents:\n\n%k", 0xFF00DDFF, 0xFFCCCCCC); u32 buf[KFUSE_NUM_WORDS]; if (!kfuse_read(buf)) EPRINTF("CRC fail."); @@ -420,7 +420,7 @@ void print_mmc_info() u16 card_type; u32 speed; - gfx_printf(&gfx_con, "%kCard IDentification:%k\n", 0xFFFFDD00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kCard IDentification:%k\n", 0xFF00DDFF, 0xFFCCCCCC); switch (storage.csd.mmca_vsn) { case 0: /* MMC v1.0 - v1.2 */ @@ -464,7 +464,7 @@ void print_mmc_info() else { gfx_printf(&gfx_con, "%kExtended Card-Specific Data V1.%d:%k\n", - 0xFFFFDD00, storage.ext_csd.ext_struct, 0xFFCCCCCC); + 0xFF00DDFF, storage.ext_csd.ext_struct, 0xFFCCCCCC); card_type = storage.ext_csd.card_type; u8 card_type_support[96]; u8 pos_type = 0; @@ -513,16 +513,16 @@ void print_mmc_info() u32 boot_size = storage.ext_csd.boot_mult << 17; u32 rpmb_size = storage.ext_csd.rpmb_mult << 17; - gfx_printf(&gfx_con, "%keMMC Partitions:%k\n", 0xFFFFDD00, 0xFFCCCCCC); - gfx_printf(&gfx_con, " 1: %kBOOT0 %kSize: %5d KiB (LBA Sectors: 0x%07X)\n", 0xFF00FF96, 0xFFCCCCCC, + gfx_printf(&gfx_con, "%keMMC Partitions:%k\n", 0xFF00DDFF, 0xFFCCCCCC); + gfx_printf(&gfx_con, " 1: %kBOOT0 %kSize: %5d KiB (LBA Sectors: 0x%07X)\n", 0xFF96FF00, 0xFFCCCCCC, boot_size / 1024, boot_size / 1024 / 512); - gfx_printf(&gfx_con, " 2: %kBOOT1 %kSize: %5d KiB (LBA Sectors: 0x%07X)\n", 0xFF00FF96, 0xFFCCCCCC, + gfx_printf(&gfx_con, " 2: %kBOOT1 %kSize: %5d KiB (LBA Sectors: 0x%07X)\n", 0xFF96FF00, 0xFFCCCCCC, boot_size / 1024, boot_size / 1024 / 512); - gfx_printf(&gfx_con, " 3: %kRPMB %kSize: %5d KiB (LBA Sectors: 0x%07X)\n", 0xFF00FF96, 0xFFCCCCCC, + gfx_printf(&gfx_con, " 3: %kRPMB %kSize: %5d KiB (LBA Sectors: 0x%07X)\n", 0xFF96FF00, 0xFFCCCCCC, rpmb_size / 1024, rpmb_size / 1024 / 512); - gfx_printf(&gfx_con, " 0: %kGPP (USER) %kSize: %5d MiB (LBA Sectors: 0x%07X)\n\n", 0xFF00FF96, 0xFFCCCCCC, + gfx_printf(&gfx_con, " 0: %kGPP (USER) %kSize: %5d MiB (LBA Sectors: 0x%07X)\n\n", 0xFF96FF00, 0xFFCCCCCC, storage.sec_cnt >> SECTORS_TO_MIB_COEFF, storage.sec_cnt); - gfx_printf(&gfx_con, "%kGPP (eMMC USER) partition table:%k\n", 0xFFFFDD00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kGPP (eMMC USER) partition table:%k\n", 0xFF00DDFF, 0xFFCCCCCC); sdmmc_storage_set_mmc_partition(&storage, 0); LIST_INIT(gpt); @@ -531,7 +531,7 @@ void print_mmc_info() LIST_FOREACH_ENTRY(emmc_part_t, part, &gpt, link) { gfx_printf(&gfx_con, " %02d: %k%s%k\n Size: % 5d MiB (LBA Sectors 0x%07X, LBA Range: %08X-%08X)\n", - gpp_idx++, 0xFF14FDAE, part->name, 0xFFCCCCCC, (part->lba_end - part->lba_start + 1) >> SECTORS_TO_MIB_COEFF, + gpp_idx++, 0xFFAEFD14, part->name, 0xFFCCCCCC, (part->lba_end - part->lba_start + 1) >> SECTORS_TO_MIB_COEFF, part->lba_end - part->lba_start + 1, part->lba_start, part->lba_end); } } @@ -554,7 +554,7 @@ void print_sdcard_info() { u32 capacity; - gfx_printf(&gfx_con, "%kCard IDentification:%k\n", 0xFFFFDD00, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kCard IDentification:%k\n", 0xFF00DDFF, 0xFFCCCCCC); gfx_printf(&gfx_con, " Vendor ID: %02x\n\ OEM ID: %c%c\n\ @@ -569,7 +569,7 @@ void print_sdcard_info() sd_storage.cid.hwrev, sd_storage.cid.fwrev, sd_storage.cid.serial, sd_storage.cid.month, sd_storage.cid.year); - gfx_printf(&gfx_con, "%kCard-Specific Data V%d.0:%k\n", 0xFFFFDD00, sd_storage.csd.structure + 1, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kCard-Specific Data V%d.0:%k\n", 0xFF00DDFF, sd_storage.csd.structure + 1, 0xFFCCCCCC); capacity = sd_storage.csd.capacity >> (20 - sd_storage.csd.read_blkbits); gfx_printf(&gfx_con, " Cmd Classes: %02X\n\ @@ -587,7 +587,7 @@ void print_sdcard_info() gfx_puts(&gfx_con, "Acquiring FAT volume info...\n\n"); f_getfree("", &sd_fs.free_clst, NULL); gfx_printf(&gfx_con, "%kFound %s volume:%k\n Free: %d MiB\n Cluster: %d KiB\n", - 0xFFFFDD00, sd_fs.fs_type == FS_EXFAT ? "exFAT" : "FAT32", 0xFFCCCCCC, + 0xFF00DDFF, sd_fs.fs_type == FS_EXFAT ? "exFAT" : "FAT32", 0xFFCCCCCC, sd_fs.free_clst * sd_fs.csize >> SECTORS_TO_MIB_COEFF, (sd_fs.csize > 1) ? (sd_fs.csize >> 1) : 512); } @@ -621,7 +621,7 @@ void print_tsec_key() u8 key[0x10]; int res = tsec_query(key, i, pkg1 + pkg1_id->tsec_off); - gfx_printf(&gfx_con, "%kTSEC key %d: %k", 0xFFFFDD00, i, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kTSEC key %d: %k", 0xFF00DDFF, i, 0xFFCCCCCC); if (res >= 0) { for (u32 i = 0; i < 0x10; i++) @@ -676,7 +676,7 @@ int dump_emmc_verify(sdmmc_storage_t *storage, u32 lba_curr, char* outFilename, u32 lbaCurrVer = lba_curr - totalSectorsVer; u32 pct = (u64)((u64)(lbaCurrVer - part->lba_start) * 100u) / (u64)(part->lba_end - part->lba_start); - tui_pbar(&gfx_con, 0, gfx_con.y, pct, 0xFF00FF96, 0xFF005515); + tui_pbar(&gfx_con, 0, gfx_con.y, pct, 0xFF96FF00, 0xFF155500); while (totalSectorsVer > 0) { @@ -715,7 +715,7 @@ int dump_emmc_verify(sdmmc_storage_t *storage, u32 lba_curr, char* outFilename, pct = (u64)((u64)(lbaCurrVer - part->lba_start) * 100u) / (u64)(part->lba_end - part->lba_start); if (pct != prevPct) { - tui_pbar(&gfx_con, 0, gfx_con.y, pct, 0xFF00FF96, 0xFF005515); + tui_pbar(&gfx_con, 0, gfx_con.y, pct, 0xFF96FF00, 0xFF155500); prevPct = pct; } @@ -773,7 +773,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) { isSmallSdCard = 1; - gfx_printf(&gfx_con, "%k\nSD card free space is smaller than total backup size.%k\n", 0xFF00BAFF, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%k\nSD card free space is smaller than total backup size.%k\n", 0xFFFFBA00, 0xFFCCCCCC); if (!maxSplitParts) { @@ -785,7 +785,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) // Check if we continuing a previous raw eMMC backup in progress. if (f_open(&partialIdxFp, partialIdxFilename, FA_READ) == FR_OK) { - gfx_printf(&gfx_con, "%kFound Partial Backup in progress. Continuing...%k\n\n", 0xFF14FDAE, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kFound Partial Backup in progress. Continuing...%k\n\n", 0xFFAEFD14, 0xFFCCCCCC); partialDumpInProgress = 1; // Force partial dumping, even if the card is larger. @@ -805,7 +805,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) maxSplitParts += currPartIdx; } else if (isSmallSdCard) - gfx_printf(&gfx_con, "%kPartial Backup enabled (with %d MiB parts)...%k\n\n", 0xFF00BAFF, multipartSplitSize >> 20, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kPartial Backup enabled (with %d MiB parts)...%k\n\n", 0xFFFFBA00, multipartSplitSize >> 20, 0xFFCCCCCC); // Check if filesystem is FAT32 or the free space is smaller and backup in parts. if (((sd_fs.fs_type != FS_EXFAT) && totalSectors > (FAT32_FILESIZE_LIMIT / NX_EMMC_BLOCKSIZE)) | isSmallSdCard) @@ -993,7 +993,7 @@ int dump_emmc_part(char *sd_path, sdmmc_storage_t *storage, emmc_part_t *part) return 0; } else - tui_pbar(&gfx_con, 0, gfx_con.y, 100, 0xFF00FF96, 0xFF005515); + tui_pbar(&gfx_con, 0, gfx_con.y, 100, 0xFF96FF00, 0xFF155500); // Remove partial backup index file if no fatal errors occurred. if(isSmallSdCard) @@ -1052,7 +1052,7 @@ static void dump_emmc_selected(dumpType_t dumpType) bootPart.name[4] = (u8)('0' + i); bootPart.name[5] = 0; - gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFFFFDD00, i, + gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i, bootPart.name, bootPart.lba_start, bootPart.lba_end, 0xFFCCCCCC); sdmmc_storage_set_mmc_partition(&storage, i+1); @@ -1075,7 +1075,7 @@ static void dump_emmc_selected(dumpType_t dumpType) if ((dumpType & DUMP_SYSTEM) == 0 && strcmp(part->name, "USER")) continue; - gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFFFFDD00, i++, + gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i++, part->name, part->lba_start, part->lba_end, 0xFFCCCCCC); res = dump_emmc_part(part->name, &storage, part); @@ -1092,7 +1092,7 @@ static void dump_emmc_selected(dumpType_t dumpType) rawPart.lba_end = RAW_AREA_NUM_SECTORS-1; strcpy(rawPart.name, "rawnand.bin"); { - gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFFFFDD00, i++, + gfx_printf(&gfx_con, "%k%02d: %s (%07X-%07X)%k\n", 0xFF00DDFF, i++, rawPart.name, rawPart.lba_start, rawPart.lba_end, 0xFFCCCCCC); res = dump_emmc_part(rawPart.name, &storage, &rawPart); @@ -1104,7 +1104,7 @@ static void dump_emmc_selected(dumpType_t dumpType) gfx_printf(&gfx_con, "Time taken: %d seconds.\n", (get_tmr() - timer) / 1000000); sdmmc_storage_end(&storage); if (res) - gfx_printf(&gfx_con, "\n%kFinished and verified!%k\nPress any key...\n",0xFF00FF96, 0xFFCCCCCC); + gfx_printf(&gfx_con, "\n%kFinished and verified!%k\nPress any key...\n",0xFF96FF00, 0xFFCCCCCC); out:; btn_wait(); @@ -1158,16 +1158,16 @@ void dump_package1() pkg1_unpack(warmboot, secmon, loader, pkg1_id, pkg1); // Display info. - gfx_printf(&gfx_con, "%kNX Bootloader size: %k0x%05X\n", 0xFF46EAC7, 0xFFCCCCCC, hdr->ldr_size); - gfx_printf(&gfx_con, "%kNX Bootloader ofst: %k0x%05X\n\n", 0xFF46EAC7, 0xFFCCCCCC, hdr->ldr_off); + gfx_printf(&gfx_con, "%kNX Bootloader size: %k0x%05X\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->ldr_size); + gfx_printf(&gfx_con, "%kNX Bootloader ofst: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->ldr_off); - gfx_printf(&gfx_con, "%kSecure monitor addr: %k0x%05X\n", 0xFF46EAC7, 0xFFCCCCCC, pkg1_id->secmon_base); - gfx_printf(&gfx_con, "%kSecure monitor size: %k0x%05X\n\n", 0xFF46EAC7, 0xFFCCCCCC, hdr->sm_size); - gfx_printf(&gfx_con, "%kSecure monitor ofst: %k0x%05X\n\n", 0xFF46EAC7, 0xFFCCCCCC, hdr->sm_off); + gfx_printf(&gfx_con, "%kSecure monitor addr: %k0x%05X\n", 0xFFC7EA46, 0xFFCCCCCC, pkg1_id->secmon_base); + gfx_printf(&gfx_con, "%kSecure monitor size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->sm_size); + gfx_printf(&gfx_con, "%kSecure monitor ofst: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->sm_off); - gfx_printf(&gfx_con, "%kWarmboot addr: %k0x%05X\n", 0xFF46EAC7, 0xFFCCCCCC, pkg1_id->warmboot_base); - gfx_printf(&gfx_con, "%kWarmboot size: %k0x%05X\n\n", 0xFF46EAC7, 0xFFCCCCCC, hdr->wb_size); - gfx_printf(&gfx_con, "%kWarmboot ofst: %k0x%05X\n\n", 0xFF46EAC7, 0xFFCCCCCC, hdr->wb_off); + gfx_printf(&gfx_con, "%kWarmboot addr: %k0x%05X\n", 0xFFC7EA46, 0xFFCCCCCC, pkg1_id->warmboot_base); + gfx_printf(&gfx_con, "%kWarmboot size: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->wb_size); + gfx_printf(&gfx_con, "%kWarmboot ofst: %k0x%05X\n\n", 0xFFC7EA46, 0xFFCCCCCC, hdr->wb_off); // Dump package1. if (sd_save_to_file(pkg1, 0x40000, "pkg1_decr.bin")) { @@ -1306,7 +1306,7 @@ void toggle_autorcm(){ free(tempbuf); sdmmc_storage_end(&storage); - gfx_printf(&gfx_con, "%kAutoRCM mode toggled!%k\n\nPress any key...\n", 0xFF00FF96, 0xFFCCCCCC); + gfx_printf(&gfx_con, "%kAutoRCM mode toggled!%k\n\nPress any key...\n", 0xFF96FF00, 0xFFCCCCCC); out:; btn_wait(); @@ -1381,7 +1381,7 @@ void fix_sd_attr(){ buff[0] = '/'; buff[1] = 0; fix_attributes(buff, &total); - gfx_printf(&gfx_con, "\n%kTotal archive bits cleared: %d!%k\n\nDone! Press any key...", 0xFF00FF96, total, 0xFFCCCCCC); + gfx_printf(&gfx_con, "\n%kTotal archive bits cleared: %d!%k\n\nDone! Press any key...", 0xFF96FF00, total, 0xFFCCCCCC); } btn_wait(); } @@ -1418,8 +1418,8 @@ void about() gfx_clear_grey(&gfx_ctxt, 0x1B); gfx_con_setpos(&gfx_con, 0, 0); - gfx_printf(&gfx_con, octopus, 0xFFFFCC00, 0xFFCCCCCC, - 0xFFFFCC00, 0xFFCCFF00, 0xFFFFCC00, 0xFFCCCCCC); + gfx_printf(&gfx_con, octopus, 0xFF00CCFF, 0xFFCCCCCC, + 0xFF00CCFF, 0xFF00FFCC, 0xFF00CCFF, 0xFFCCCCCC); btn_wait(); } @@ -1427,12 +1427,12 @@ void about() ment_t ment_cinfo[] = { MDEF_BACK(), MDEF_CHGLINE(), - MDEF_CAPTION("---- SoC Info ----", 0xFFE6B90A), + MDEF_CAPTION("---- SoC Info ----", 0xFF0AB9E6), MDEF_HANDLER("Print fuse info", print_fuseinfo), MDEF_HANDLER("Print kfuse info", print_kfuseinfo), MDEF_HANDLER("Print TSEC keys", print_tsec_key), MDEF_CHGLINE(), - MDEF_CAPTION("-- Storage Info --", 0xFFE6B90A), + MDEF_CAPTION("-- Storage Info --", 0xFF0AB9E6), MDEF_HANDLER("Print eMMC info", print_mmc_info), MDEF_HANDLER("Print SD Card info", print_sdcard_info), MDEF_END() @@ -1443,7 +1443,7 @@ menu_t menu_cinfo = { }; ment_t ment_autorcm[] = { - MDEF_CAPTION("WARNING: This corrupts your BOOT0 partition!", 0xFF00FFE6), + MDEF_CAPTION("WARNING: This corrupts your BOOT0 partition!", 0xFFE6FF00), MDEF_CHGLINE(), MDEF_CAPTION("Do you want to continue?", 0xFFCCCCCC), MDEF_CHGLINE(), @@ -1467,19 +1467,19 @@ menu_t menu_autorcm = { ment_t ment_tools[] = { MDEF_BACK(), MDEF_CHGLINE(), - MDEF_CAPTION("------ Full --------", 0xFFE6B90A), + MDEF_CAPTION("------ Full --------", 0xFF0AB9E6), MDEF_HANDLER("Backup eMMC RAW GPP", dump_emmc_rawnand), MDEF_HANDLER("Backup eMMC BOOT0/1", dump_emmc_boot), MDEF_CHGLINE(), - MDEF_CAPTION("-- GPP Partitions --", 0xFFE6B90A), + MDEF_CAPTION("-- GPP Partitions --", 0xFF0AB9E6), MDEF_HANDLER("Backup eMMC SYS", dump_emmc_system), MDEF_HANDLER("Backup eMMC USER", dump_emmc_user), MDEF_CHGLINE(), - MDEF_CAPTION("------ Misc -------", 0xFFE6B90A), + MDEF_CAPTION("------ Misc -------", 0xFF0AB9E6), MDEF_HANDLER("Dump package1", dump_package1), MDEF_HANDLER("Fix SD files attributes", fix_sd_attr), MDEF_CHGLINE(), - MDEF_CAPTION("---- Dangerous ----", 0xFF0000FF), + MDEF_CAPTION("---- Dangerous ----", 0xFFFF0000), MDEF_MENU("AutoRCM", &menu_autorcm), MDEF_END() }; diff --git a/ipl/pkg1.c b/ipl/pkg1.c index 7e4565e..8f7cf16 100755 --- a/ipl/pkg1.c +++ b/ipl/pkg1.c @@ -1,5 +1,7 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (c) 2018 st4rk +* Copyright (c) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/pkg2.c b/ipl/pkg2.c index 88a4bca..217b94d 100755 --- a/ipl/pkg2.c +++ b/ipl/pkg2.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/pkg2.h b/ipl/pkg2.h index 5adfd24..ec25ac5 100755 --- a/ipl/pkg2.h +++ b/ipl/pkg2.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/pmc.h b/ipl/pmc.h index 5bc3cf3..5c480bb 100755 --- a/ipl/pmc.h +++ b/ipl/pmc.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (c) 2018 st4rk * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/sd.h b/ipl/sd.h index ad3d0fe..8fc328b 100755 --- a/ipl/sd.h +++ b/ipl/sd.h @@ -2,6 +2,7 @@ * include/linux/mmc/sd.h * * Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved. +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/ipl/sdmmc.c b/ipl/sdmmc.c index c443962..30ec1fb 100755 --- a/ipl/sdmmc.c +++ b/ipl/sdmmc.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/sdmmc.h b/ipl/sdmmc.h index ef954d2..33e7ffa 100755 --- a/ipl/sdmmc.h +++ b/ipl/sdmmc.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/sdmmc_driver.c b/ipl/sdmmc_driver.c index 50aa0f6..4d08473 100755 --- a/ipl/sdmmc_driver.c +++ b/ipl/sdmmc_driver.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/sdram_lp0.c b/ipl/sdram_lp0.c index 8429ac0..1fe3fa1 100755 --- a/ipl/sdram_lp0.c +++ b/ipl/sdram_lp0.c @@ -1,6 +1,8 @@ /* * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved. * Copyright 2014 Google Inc. + * Copyright (C) 2018 naehrwert + * Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/sdram_param_t210_lp0.h b/ipl/sdram_param_t210_lp0.h index 525b17d..6eeaeac 100755 --- a/ipl/sdram_param_t210_lp0.h +++ b/ipl/sdram_param_t210_lp0.h @@ -1,6 +1,7 @@ /* * Copyright (c) 2013-2015, NVIDIA CORPORATION. All rights reserved. * Copyright 2014 Google Inc. + * Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/tui.c b/ipl/tui.c index d95e061..5819113 100755 --- a/ipl/tui.c +++ b/ipl/tui.c @@ -1,5 +1,6 @@ -/*{ +/* * Copyright (c) 2018 naehrwert +* Copyright (c) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -75,7 +76,7 @@ void *tui_do_menu(gfx_con_t *con, menu_t *menu) } prev_idx = idx; - //Draw the menu. + // Draw the menu. for (cnt = 0; menu->ents[cnt].type != MENT_END; cnt++) { if (cnt == idx) @@ -87,12 +88,13 @@ void *tui_do_menu(gfx_con_t *con, menu_t *menu) else if (menu->ents[cnt].type != MENT_CHGLINE) gfx_printf(con, " %s", menu->ents[cnt].caption); if(menu->ents[cnt].type == MENT_MENU) - gfx_printf(con, "%k...", 0xFFEE9900); + gfx_printf(con, "%k...", 0xFF0099EE); gfx_printf(con, " \n"); } gfx_con_setcol(con, 0xFFCCCCCC, 1, 0xFF1B1B1B); gfx_putc(con, '\n'); + // Wait for user command. u32 btn = btn_wait(); if (btn & BTN_VOL_DOWN && idx < (cnt - 1)) diff --git a/ipl/tui.h b/ipl/tui.h index 37a36fe..8b623d6 100755 --- a/ipl/tui.h +++ b/ipl/tui.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, diff --git a/ipl/util.c b/ipl/util.c index c060522..b0dbe93 100755 --- a/ipl/util.c +++ b/ipl/util.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2018 naehrwert +* Copyright (C) 2018 CTCaer * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License,