mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-26 13:42:47 +00:00
Various source code improvements
This commit is contained in:
parent
4a89682cae
commit
ed77cde373
4
Makefile
4
Makefile
@ -20,14 +20,14 @@ export TARGET := GodMode9
|
|||||||
BUILD := build
|
BUILD := build
|
||||||
SOURCES := source source/fatfs source/nand source/abstraction
|
SOURCES := source source/fatfs source/nand source/abstraction
|
||||||
DATA := data
|
DATA := data
|
||||||
INCLUDES := include source source/fatfs source/nand
|
INCLUDES := source source/fatfs source/nand
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
ARCH := -mthumb -mthumb-interwork -flto
|
ARCH := -mthumb -mthumb-interwork -flto
|
||||||
|
|
||||||
CFLAGS := -g -Wall -O2 -flto\
|
CFLAGS := -g -Wall -Wextra -Wpedantic -pedantic -O2\
|
||||||
-march=armv5te -mtune=arm946e-s -fomit-frame-pointer\
|
-march=armv5te -mtune=arm946e-s -fomit-frame-pointer\
|
||||||
-ffast-math -std=c99\
|
-ffast-math -std=c99\
|
||||||
$(ARCH)
|
$(ARCH)
|
||||||
|
@ -19,13 +19,9 @@
|
|||||||
#define vu64 volatile u64
|
#define vu64 volatile u64
|
||||||
|
|
||||||
#define max(a,b) \
|
#define max(a,b) \
|
||||||
({ __typeof__ (a) _a = (a); \
|
(((a) > (b)) ? (a) : (b))
|
||||||
__typeof__ (b) _b = (b); \
|
|
||||||
_a > _b ? _a : _b; })
|
|
||||||
#define min(a,b) \
|
#define min(a,b) \
|
||||||
({ __typeof__ (a) _a = (a); \
|
(((a) < (b)) ? (a) : (b))
|
||||||
__typeof__ (b) _b = (b); \
|
|
||||||
_a < _b ? _a : _b; })
|
|
||||||
#define getbe16(d) \
|
#define getbe16(d) \
|
||||||
(((d)[0]<<8) | (d)[1])
|
(((d)[0]<<8) | (d)[1])
|
||||||
#define getbe32(d) \
|
#define getbe32(d) \
|
||||||
|
@ -14,7 +14,7 @@ int ReadImageSectors(u8* buffer, u32 sector, u32 count) {
|
|||||||
f_lseek(&mount_file, sector * 0x200);
|
f_lseek(&mount_file, sector * 0x200);
|
||||||
}
|
}
|
||||||
ret = f_read(&mount_file, buffer, count * 0x200, &bytes_read);
|
ret = f_read(&mount_file, buffer, count * 0x200, &bytes_read);
|
||||||
return (ret != 0) ? ret : (bytes_read != count * 0x200) ? -1 : 0;
|
return (ret != 0) ? (int) ret : (bytes_read != count * 0x200) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int WriteImageSectors(const u8* buffer, u32 sector, u32 count) {
|
int WriteImageSectors(const u8* buffer, u32 sector, u32 count) {
|
||||||
@ -25,7 +25,7 @@ int WriteImageSectors(const u8* buffer, u32 sector, u32 count) {
|
|||||||
if (f_tell(&mount_file) != sector * 0x200)
|
if (f_tell(&mount_file) != sector * 0x200)
|
||||||
f_lseek(&mount_file, sector * 0x200);
|
f_lseek(&mount_file, sector * 0x200);
|
||||||
ret = f_write(&mount_file, buffer, count * 0x200, &bytes_written);
|
ret = f_write(&mount_file, buffer, count * 0x200, &bytes_written);
|
||||||
return (ret != 0) ? ret : (bytes_written != count * 0x200) ? -1 : 0;
|
return (ret != 0) ? (int) ret : (bytes_written != count * 0x200) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SyncImage(void) {
|
int SyncImage(void) {
|
||||||
|
16
source/i2c.c
16
source/i2c.c
@ -10,35 +10,35 @@ static const struct { u8 bus_id, reg_addr; } dev_data[] = {
|
|||||||
{2, 0xA4}, {2, 0x9A}, {2, 0xA0},
|
{2, 0xA4}, {2, 0x9A}, {2, 0xA0},
|
||||||
};
|
};
|
||||||
|
|
||||||
const inline u8 i2cGetDeviceBusId(u8 device_id) {
|
inline u8 i2cGetDeviceBusId(u8 device_id) {
|
||||||
return dev_data[device_id].bus_id;
|
return dev_data[device_id].bus_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
const inline u8 i2cGetDeviceRegAddr(u8 device_id) {
|
inline u8 i2cGetDeviceRegAddr(u8 device_id) {
|
||||||
return dev_data[device_id].reg_addr;
|
return dev_data[device_id].reg_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static vu8* const reg_data_addrs[] = {
|
static vu8* reg_data_addrs[] = {
|
||||||
(vu8*)(I2C1_REG_OFF + I2C_REG_DATA),
|
(vu8*)(I2C1_REG_OFF + I2C_REG_DATA),
|
||||||
(vu8*)(I2C2_REG_OFF + I2C_REG_DATA),
|
(vu8*)(I2C2_REG_OFF + I2C_REG_DATA),
|
||||||
(vu8*)(I2C3_REG_OFF + I2C_REG_DATA),
|
(vu8*)(I2C3_REG_OFF + I2C_REG_DATA),
|
||||||
};
|
};
|
||||||
|
|
||||||
inline vu8* const i2cGetDataReg(u8 bus_id) {
|
inline vu8* i2cGetDataReg(u8 bus_id) {
|
||||||
return reg_data_addrs[bus_id];
|
return reg_data_addrs[bus_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static vu8* const reg_cnt_addrs[] = {
|
static vu8* reg_cnt_addrs[] = {
|
||||||
(vu8*)(I2C1_REG_OFF + I2C_REG_CNT),
|
(vu8*)(I2C1_REG_OFF + I2C_REG_CNT),
|
||||||
(vu8*)(I2C2_REG_OFF + I2C_REG_CNT),
|
(vu8*)(I2C2_REG_OFF + I2C_REG_CNT),
|
||||||
(vu8*)(I2C3_REG_OFF + I2C_REG_CNT),
|
(vu8*)(I2C3_REG_OFF + I2C_REG_CNT),
|
||||||
};
|
};
|
||||||
|
|
||||||
inline vu8* const i2cGetCntReg(u8 bus_id) {
|
inline vu8* i2cGetCntReg(u8 bus_id) {
|
||||||
return reg_cnt_addrs[bus_id];
|
return reg_cnt_addrs[bus_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ bool i2cReadRegisterBuffer(unsigned int dev_id, int reg, u8* buffer, size_t buf_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (buf_size != 1) {
|
if (buf_size != 1) {
|
||||||
for (int i = 0; i < buf_size - 1; i++) {
|
for (size_t i = 0; i < buf_size - 1; i++) {
|
||||||
i2cWaitBusy(bus_id);
|
i2cWaitBusy(bus_id);
|
||||||
*i2cGetCntReg(bus_id) = 0xF0;
|
*i2cGetCntReg(bus_id) = 0xF0;
|
||||||
i2cWaitBusy(bus_id);
|
i2cWaitBusy(bus_id);
|
||||||
@ -146,4 +146,4 @@ bool i2cWriteRegister(u8 dev_id, u8 reg, u8 data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
10
source/i2c.h
10
source/i2c.h
@ -15,11 +15,11 @@
|
|||||||
#define I2C_DEV_GYRO 10
|
#define I2C_DEV_GYRO 10
|
||||||
#define I2C_DEV_IR 13
|
#define I2C_DEV_IR 13
|
||||||
|
|
||||||
const u8 i2cGetDeviceBusId(u8 device_id);
|
u8 i2cGetDeviceBusId(u8 device_id);
|
||||||
const u8 i2cGetDeviceRegAddr(u8 device_id);
|
u8 i2cGetDeviceRegAddr(u8 device_id);
|
||||||
|
|
||||||
vu8* const i2cGetDataReg(u8 bus_id);
|
vu8* i2cGetDataReg(u8 bus_id);
|
||||||
vu8* const i2cGetCntReg(u8 bus_id);
|
vu8* i2cGetCntReg(u8 bus_id);
|
||||||
|
|
||||||
void i2cWaitBusy(u8 bus_id);
|
void i2cWaitBusy(u8 bus_id);
|
||||||
bool i2cGetResult(u8 bus_id);
|
bool i2cGetResult(u8 bus_id);
|
||||||
@ -32,4 +32,4 @@ bool i2cSelectRegister(u8 bus_id, u8 reg);
|
|||||||
u8 i2cReadRegister(u8 dev_id, u8 reg);
|
u8 i2cReadRegister(u8 dev_id, u8 reg);
|
||||||
bool i2cWriteRegister(u8 dev_id, u8 reg, u8 data);
|
bool i2cWriteRegister(u8 dev_id, u8 reg, u8 data);
|
||||||
|
|
||||||
bool i2cReadRegisterBuffer(unsigned int dev_id, int reg, u8* buffer, size_t buf_size);
|
bool i2cReadRegisterBuffer(unsigned int dev_id, int reg, u8* buffer, size_t buf_size);
|
||||||
|
@ -141,7 +141,7 @@ void aes_fifos(void* inbuf, void* outbuf, size_t blocks)
|
|||||||
{
|
{
|
||||||
while (aescnt_checkwrite());
|
while (aescnt_checkwrite());
|
||||||
|
|
||||||
int ii = 0;
|
u32 ii = 0;
|
||||||
for (ii = in; ii != in + AES_BLOCK_SIZE; ii += 4)
|
for (ii = in; ii != in + AES_BLOCK_SIZE; ii += 4)
|
||||||
{
|
{
|
||||||
set_aeswrfifo( *(u32*)(ii) );
|
set_aeswrfifo( *(u32*)(ii) );
|
||||||
|
@ -172,7 +172,7 @@ bool InitNandCrypto(void)
|
|||||||
use_aeskey(0x15);
|
use_aeskey(0x15);
|
||||||
for (u32 i = 0x0; i < 0x200; i += 0x10) {
|
for (u32 i = 0x0; i < 0x200; i += 0x10) {
|
||||||
set_ctr(ctr);
|
set_ctr(ctr);
|
||||||
aes_decrypt((void*) buffer + i, (void*) buffer + i, 1, AES_CNT_CTRNAND_MODE);
|
aes_decrypt(buffer + i, buffer + i, 1, AES_CNT_CTRNAND_MODE);
|
||||||
add_ctr(ctr, 0x1);
|
add_ctr(ctr, 0x1);
|
||||||
}
|
}
|
||||||
memcpy(slot0x05KeyY, buffer + 0x14, 16);
|
memcpy(slot0x05KeyY, buffer + 0x14, 16);
|
||||||
|
@ -30,3 +30,9 @@ void sha_get(void* res) {
|
|||||||
while(*REG_SHACNT & 1);
|
while(*REG_SHACNT & 1);
|
||||||
memcpy(res, (void*)REG_SHAHASH, (256 / 8));
|
memcpy(res, (void*)REG_SHAHASH, (256 / 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sha_quick(void* res, const void* src, u32 size, u32 mode) {
|
||||||
|
sha_init(mode);
|
||||||
|
sha_update(src, size);
|
||||||
|
sha_get(res);
|
||||||
|
}
|
||||||
|
@ -25,3 +25,4 @@
|
|||||||
void sha_init(u32 mode);
|
void sha_init(u32 mode);
|
||||||
void sha_update(const void* src, u32 size);
|
void sha_update(const void* src, u32 size);
|
||||||
void sha_get(void* res);
|
void sha_get(void* res);
|
||||||
|
void sha_quick(void* res, const void* src, u32 size, u32 mode);
|
||||||
|
22
source/ui.c
22
source/ui.c
@ -84,13 +84,13 @@ void DrawCharacter(u8* screen, int character, int x, int y, int color, int bgcol
|
|||||||
|
|
||||||
void DrawString(u8* screen, const char *str, int x, int y, int color, int bgcolor)
|
void DrawString(u8* screen, const char *str, int x, int y, int color, int bgcolor)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < strlen(str); i++)
|
for (size_t i = 0; i < strlen(str); i++)
|
||||||
DrawCharacter(screen, str[i], x + i * 8, y, color, bgcolor);
|
DrawCharacter(screen, str[i], x + i * 8, y, color, bgcolor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawStringF(bool use_top, int x, int y, int color, int bgcolor, const char *format, ...)
|
void DrawStringF(bool use_top, int x, int y, int color, int bgcolor, const char *format, ...)
|
||||||
{
|
{
|
||||||
char str[512] = {}; // 512 should be more than enough
|
char str[512] = { 0 }; // 512 should be more than enough
|
||||||
va_list va;
|
va_list va;
|
||||||
|
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
@ -120,10 +120,10 @@ u32 GetDrawStringWidth(char* str) {
|
|||||||
char* old_lf = str;
|
char* old_lf = str;
|
||||||
char* str_end = str + strnlen(str, 512);
|
char* str_end = str + strnlen(str, 512);
|
||||||
for (char* lf = strchr(str, '\n'); lf != NULL; lf = strchr(lf + 1, '\n')) {
|
for (char* lf = strchr(str, '\n'); lf != NULL; lf = strchr(lf + 1, '\n')) {
|
||||||
if ((lf - old_lf) > width) width = lf - old_lf;
|
if ((u32) (lf - old_lf) > width) width = lf - old_lf;
|
||||||
old_lf = lf;
|
old_lf = lf;
|
||||||
}
|
}
|
||||||
if (str_end - old_lf > width)
|
if ((u32) (str_end - old_lf) > width)
|
||||||
width = str_end - old_lf;
|
width = str_end - old_lf;
|
||||||
width *= 8;
|
width *= 8;
|
||||||
return width;
|
return width;
|
||||||
@ -183,7 +183,7 @@ bool ShowPrompt(bool ask, const char *format, ...)
|
|||||||
u32 x, y;
|
u32 x, y;
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
|
|
||||||
char str[512] = {}; // 512 should be more than enough
|
char str[512] = { 0 }; // 512 should be more than enough
|
||||||
va_list va;
|
va_list va;
|
||||||
|
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
@ -215,7 +215,7 @@ bool ShowPrompt(bool ask, const char *format, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ShowUnlockSequence(u32 seqlvl, const char *format, ...) {
|
bool ShowUnlockSequence(u32 seqlvl, const char *format, ...) {
|
||||||
const u32 seqcolors[4] = { COLOR_STD_FONT, COLOR_GREEN, COLOR_YELLOW, COLOR_RED };
|
const int seqcolors[4] = { COLOR_STD_FONT, COLOR_GREEN, COLOR_YELLOW, COLOR_RED };
|
||||||
const u32 sequences[4][5] = {
|
const u32 sequences[4][5] = {
|
||||||
{ BUTTON_RIGHT, BUTTON_DOWN, BUTTON_RIGHT, BUTTON_DOWN, BUTTON_A },
|
{ BUTTON_RIGHT, BUTTON_DOWN, BUTTON_RIGHT, BUTTON_DOWN, BUTTON_A },
|
||||||
{ BUTTON_LEFT, BUTTON_DOWN, BUTTON_RIGHT, BUTTON_UP, BUTTON_A },
|
{ BUTTON_LEFT, BUTTON_DOWN, BUTTON_RIGHT, BUTTON_UP, BUTTON_A },
|
||||||
@ -234,7 +234,7 @@ bool ShowUnlockSequence(u32 seqlvl, const char *format, ...) {
|
|||||||
u32 str_width, str_height;
|
u32 str_width, str_height;
|
||||||
u32 x, y;
|
u32 x, y;
|
||||||
|
|
||||||
char str[512] = {}; // 512 should be more than enough
|
char str[512] = { 0 }; // 512 should be more than enough
|
||||||
va_list va;
|
va_list va;
|
||||||
|
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
@ -279,7 +279,7 @@ u32 ShowSelectPrompt(u32 n, const char** options, const char *format, ...) {
|
|||||||
u32 x, y, yopt;
|
u32 x, y, yopt;
|
||||||
u32 sel = 0;
|
u32 sel = 0;
|
||||||
|
|
||||||
char str[512] = {}; // 512 should be more than enough
|
char str[512] = { 0 }; // 512 should be more than enough
|
||||||
va_list va;
|
va_list va;
|
||||||
|
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
@ -328,7 +328,7 @@ bool ShowInputPrompt(char* inputstr, u32 max_size, const char *format, ...) {
|
|||||||
u32 str_width, str_height;
|
u32 str_width, str_height;
|
||||||
u32 x, y;
|
u32 x, y;
|
||||||
|
|
||||||
char str[512] = {}; // 512 should be more than enough
|
char str[512] = { 0 }; // 512 should be more than enough
|
||||||
va_list va;
|
va_list va;
|
||||||
|
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
@ -349,9 +349,9 @@ bool ShowInputPrompt(char* inputstr, u32 max_size, const char *format, ...) {
|
|||||||
DrawStringF(true, x, y, COLOR_STD_FONT, COLOR_STD_BG, str);
|
DrawStringF(true, x, y, COLOR_STD_FONT, COLOR_STD_BG, str);
|
||||||
DrawStringF(true, x + 8, y + str_height - 38, COLOR_STD_FONT, COLOR_STD_BG, "R - (\x18\x19) fast scroll\nL - clear string\nX - remove char\nY - insert char");
|
DrawStringF(true, x + 8, y + str_height - 38, COLOR_STD_FONT, COLOR_STD_BG, "R - (\x18\x19) fast scroll\nL - clear string\nX - remove char\nY - insert char");
|
||||||
|
|
||||||
int cursor_s = 0;
|
|
||||||
int cursor_a = -1;
|
int cursor_a = -1;
|
||||||
int scroll = 0;
|
u32 cursor_s = 0;
|
||||||
|
u32 scroll = 0;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user