git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@61 7061adef-622a-194b-ae81-725974e89856

This commit is contained in:
miya 2008-12-05 01:50:34 +00:00
parent 11916ef19c
commit a147d8503b
15 changed files with 461 additions and 75 deletions

View File

@ -29,7 +29,7 @@
#include <twl.h> #include <twl.h>
#include "font.h" #include "font.h"
const u32 d_CharData[0xe0 * 8] = { const u32 d_CharData[0x80 * 8] = {
0x00000000,0x00000000,0x00000000,0x00000000, //0000 0x00000000,0x00000000,0x00000000,0x00000000, //0000
0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,
0x11111111,0x11111111,0x11111111,0x11111111, //0001 0x11111111,0x11111111,0x11111111,0x11111111, //0001
@ -287,9 +287,7 @@ const u32 d_CharData[0xe0 * 8] = {
0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000, //007F 0x00000000,0x00000000,0x00000000,0x00000000, //007F
0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,
#if 0 /* miya */
// 0x00000000,0x00000000,0x00000000,0x00000000, //0080
// 0x00000000,0x00000000,0x00000000,0x00000000,
0x11111111,0x11111111,0x11111111,0x11111111, //0080 0x11111111,0x11111111,0x11111111,0x11111111, //0080
0x11111111,0x11111111,0x11111111,0x11111111, 0x11111111,0x11111111,0x11111111,0x11111111,
0x00000000,0x00000000,0x00000000,0x00000000, //0081 0x00000000,0x00000000,0x00000000,0x00000000, //0081
@ -484,6 +482,7 @@ const u32 d_CharData[0xe0 * 8] = {
0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,
0x00001110,0x00001010,0x00001110,0x00000000, //00DF <09>K 0x00001110,0x00001010,0x00001110,0x00000000, //00DF <09>K
0x00000000,0x00000000,0x00000000,0x00000000, 0x00000000,0x00000000,0x00000000,0x00000000,
#endif
}; };
#if 0 #if 0
@ -510,8 +509,8 @@ const u32 d_PaletteData[8 * 16] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue 0x7fe00000, 0x001f03e0, 0x7c0003ff, 0x7c1f0000, // light blue
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7fe0000f, 0x01e03c00, 0x01ff0000, 0x00ef3dff,
0x000f0000, 0x00000000, 0x00000000, 0x00000000, // dark red 0x000f0000, 0x00000000, 0x00000000, 0x00000000, // dark red
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x01e00000, 0x00000000, 0x00000000, 0x00000000, // dark green 0x01e00000, 0x00000000, 0x00000000, 0x00000000, // dark green

View File

@ -1,7 +1,8 @@
#ifndef _FONT_H_ #ifndef _FONT_H_
#define _FONT_H_ #define _FONT_H_
extern const u32 d_CharData[0xe0 * 8]; //extern const u32 d_CharData[0xe0 * 8];
extern const u32 d_CharData[0x80 * 8];
extern const u32 d_PaletteData[8*16]; extern const u32 d_PaletteData[8*16];
extern const u32 d_IconCharData[0x80 * 8]; extern const u32 d_IconCharData[0x80 * 8];
extern const u16 d_IconPaletteData[16 * 4]; extern const u16 d_IconPaletteData[16 * 4];

View File

@ -9,20 +9,6 @@
#define DPR_HEIGHT_MAX 24 #define DPR_HEIGHT_MAX 24
#define DPR_WIDTH_MAX 32 #define DPR_WIDTH_MAX 32
static u16 sDPRScrnBuffer[DPR_HEIGHT_MAX * DPR_WIDTH_MAX] ATTRIBUTE_ALIGN(32);
void Gfx_Set_BG1_Color(u16 col)
{
int i,j;
for( i = 0 ; i < DPR_HEIGHT_MAX ; i++ ) {
for( j = 0 ; j < DPR_WIDTH_MAX ; j++ ) {
sDPRScrnBuffer[i*DPR_WIDTH_MAX + j] = (u16)( ((col & 0xf) << 12) | ((u16)0x80) );
}
}
DC_FlushRange( (void *)&(sDPRScrnBuffer),sizeof(sDPRScrnBuffer));
}
@ -44,6 +30,32 @@ static void VBlankIntr( void );
static u32 v_blank_intr_counter = 0; static u32 v_blank_intr_counter = 0;
static u32 g_screen[MAX_VRAM_NUM][VRAM_SIZE/sizeof(u32)] ATTRIBUTE_ALIGN(32); static u32 g_screen[MAX_VRAM_NUM][VRAM_SIZE/sizeof(u32)] ATTRIBUTE_ALIGN(32);
static u16 g_screen_bg1[MAX_VRAM_NUM][DPR_HEIGHT_MAX * DPR_WIDTH_MAX] ATTRIBUTE_ALIGN(32);
void Gfx_Set_BG1_line_Color(int vram_num, int num_of_line, u16 col)
{
int i,j;
for( i = 0 ; (i < num_of_line) && (i < DPR_HEIGHT_MAX); i++ ) {
for( j = 0 ; j < DPR_WIDTH_MAX ; j++ ) {
g_screen_bg1[vram_num][i*DPR_WIDTH_MAX + j] = (u16)( ((col & 0xf) << 12) | ((u16)0x01) );
}
}
DC_FlushRange( (void *)(g_screen_bg1[vram_num]),(sizeof(u16)*DPR_HEIGHT_MAX * DPR_WIDTH_MAX));
}
void Gfx_Set_BG1_Color(u16 col)
{
int i,j,k;
for( k = 0 ; k < NUM_OF_SCREEN ; k++ ) {
for( i = 0 ; i < DPR_HEIGHT_MAX ; i++ ) {
for( j = 0 ; j < DPR_WIDTH_MAX ; j++ ) {
g_screen_bg1[k][i*DPR_WIDTH_MAX + j] = (u16)( ((col & 0xf) << 12) | ((u16)0x01) );
}
}
DC_FlushRange( (void *)(g_screen_bg1[k]),(sizeof(u16)*DPR_HEIGHT_MAX * DPR_WIDTH_MAX));
}
}
void Gfx_Init(void) void Gfx_Init(void)
@ -63,7 +75,7 @@ void Gfx_Init(void)
// OS_TPrintf("Init start 1\n"); // OS_TPrintf("Init start 1\n");
for( i = 0 ; i < NUM_OF_SCREEN ; i++) { for( i = 0 ; i < NUM_OF_SCREEN ; i++) {
tc[i] = &(textctrl[i]); tc[i] = &(textctrl[i]);
init_text(tc[i], (u16 *)&(g_screen[i]), palette_no); init_text(tc[i], (u16 *)&(g_screen[i]), (u16 *)&(g_screen_bg1[i]), palette_no);
} }
Gfx_Set_BG1_Color(0); Gfx_Set_BG1_Color(0);
@ -186,8 +198,8 @@ static void VBlankIntr(void)
GXS_LoadBG0Scr( (void *)&(g_screen[vram_num_sub]) , 0 , VRAM_SIZE ); GXS_LoadBG0Scr( (void *)&(g_screen[vram_num_sub]) , 0 , VRAM_SIZE );
GX_LoadBG1Scr(sDPRScrnBuffer, 0, sizeof(sDPRScrnBuffer)); GX_LoadBG1Scr( &(g_screen_bg1[vram_num_main]),0,(sizeof(u16)*DPR_HEIGHT_MAX * DPR_WIDTH_MAX));
GXS_LoadBG1Scr(sDPRScrnBuffer, 0, sizeof(sDPRScrnBuffer)); GXS_LoadBG1Scr( &(g_screen_bg1[vram_num_sub]),0,(sizeof(u16)*DPR_HEIGHT_MAX * DPR_WIDTH_MAX));
// 仮想OAMをVRAMに反映 // 仮想OAMをVRAMに反映

View File

@ -9,6 +9,7 @@ extern "C" {
void Gfx_Init(void); void Gfx_Init(void);
void Gfx_Render(int main_no, int sub_no); void Gfx_Render(int main_no, int sub_no);
void Gfx_Set_BG1_Color(u16 col); void Gfx_Set_BG1_Color(u16 col);
void Gfx_Set_BG1_line_Color(int vram_num, int num_of_line, u16 col);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -4,18 +4,49 @@
static u16 old_keydata = 0; static u16 old_keydata = 0;
#define REPEAT_ON 1 #define REPEAT_ON 1
#define REPEAT_COUNT 20 #define REPEAT_COUNT 20
#define ONLY_PLUS_KEY 1
static int repeat_counter[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static int repeat_counter[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
#ifdef ONLY_PLUS_KEY
static u16 plus_key[4] = {
PAD_KEY_DOWN,
PAD_KEY_UP,
PAD_KEY_LEFT,
PAD_KEY_RIGHT
};
#endif
u16 m_get_key_trigger(void) u16 m_get_key_trigger(void)
{ {
u16 keydata; u16 keydata;
u16 trigger; u16 trigger;
int i; int i;
#ifndef ONLY_PLUS_KEY
u16 r; u16 r;
#endif
keydata = (u16)PAD_Read(); keydata = (u16)PAD_Read();
trigger = (u16)(keydata & (keydata ^ old_keydata)); trigger = (u16)(keydata & (keydata ^ old_keydata));
#ifdef ONLY_PLUS_KEY
#if REPEAT_ON
/* r = 1; */
/* 十字ボタンだけリピートする。 */
for( i = 0 ; i < 4 ; i++ ) {
if( plus_key[i] & old_keydata & keydata ) {
repeat_counter[i]++;
if( repeat_counter[i] > REPEAT_COUNT ) {
trigger |= (plus_key[i]);
}
}
else {
repeat_counter[i] = 0;
}
}
#endif
#else
#if REPEAT_ON #if REPEAT_ON
r = 1; r = 1;
for( i = 0 ; i < 15 ; i++ ) { for( i = 0 ; i < 15 ; i++ ) {
@ -30,6 +61,7 @@ u16 m_get_key_trigger(void)
} }
r <<= 1; r <<= 1;
} }
#endif
#endif #endif
old_keydata = keydata; old_keydata = keydata;

View File

@ -9,9 +9,10 @@
#define ATTRIBUTE_BACK 1 #define ATTRIBUTE_BACK 1
/* このフラグどこかまずい!!!*/
#define COPY_FILE_ENCRYPTION 1 #define COPY_FILE_ENCRYPTION 1
#define LIMIT_BUF 1
#define LIMIT_BUF_ALLOC 1
static BOOL miya_debug_flag = FALSE; static BOOL miya_debug_flag = FALSE;
static int miya_debug_counter = 0; static int miya_debug_counter = 0;
@ -108,8 +109,6 @@ typedef struct FSPathInfo
*/ */
static const u32 BUF_SIZE = 256;
typedef struct { typedef struct {
FSResult result; FSResult result;
char string[32]; char string[32];
@ -282,7 +281,7 @@ s32 my_fs_crypto_write(FSFile *f, void *ptr, s32 size)
return writtenSize; return writtenSize;
} }
#if 0
static BOOL LoadFile(const char* path, char **alloc_ptr, int *alloc_size, FSFile *log_fd) static BOOL LoadFile(const char* path, char **alloc_ptr, int *alloc_size, FSFile *log_fd)
{ {
FSFile f; FSFile f;
@ -399,40 +398,201 @@ static BOOL SaveFile(const char* path, void* pData, u32 size, FSFile *log_fd)
return TRUE; return TRUE;
} }
#endif
#ifdef LIMIT_BUF
//#define BUF_SIZE (16*1024)
//#define BUF_SIZE (512*1024)
#define BUF_SIZE (1*1024*1024)
#ifdef LIMIT_BUF_ALLOC
static char *pBuffer = NULL;
static char *pBuffer_crypto = NULL;
#else
static char pBuffer[BUF_SIZE];
static char pBuffer_crypto[BUF_SIZE];
#endif /* LIMIT_BUF_ALLOC */
#endif
BOOL CopyFile(const char *dst_path, const char *src_path, FSFile *log_fd ) BOOL CopyFile(const char *dst_path, const char *src_path, FSFile *log_fd )
{ {
char *alloc_ptr = NULL; BOOL ret_flag = TRUE;
#ifdef LIMIT_BUF
FSFile f_src;
FSFile f_dst;
u32 restSize;
u32 tempSize;
u32 fileSize;
s32 readSize = 0;
FSResult fsResult;
s32 writtenSize;
FS_InitFile(&f_src);
if( FALSE == FS_OpenFileEx(&f_src, src_path, FS_FILEMODE_R) ) {
miya_log_fprintf(log_fd, "%s Failed Open File\n",__FUNCTION__);
miya_log_fprintf(log_fd, " path=%s\n", src_path );
miya_log_fprintf(log_fd, " res=%s\n", my_fs_util_get_fs_result_word( FS_GetArchiveResultCode(src_path) ));
return FALSE;
}
fileSize = FS_GetFileLength(&f_src);
FS_InitFile(&f_dst);
if( FALSE == FS_OpenFileEx(&f_dst, dst_path, FS_FILEMODE_W) ) {
FSResult res = FS_GetArchiveResultCode(dst_path);
if( res == FS_RESULT_NO_ENTRY ) {
/* 本来ここで問題なし */
}
else {
miya_log_fprintf(log_fd, "%s Failed open file %d:\n", __FUNCTION__,__LINE__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(res) );
}
}
else {
FS_CloseFile(&f_dst);
/* backup バックアップを取っておくべき?? */
FS_DeleteFile(dst_path);
}
FS_CreateFile(dst_path, (FS_PERMIT_R|FS_PERMIT_W));
if( FALSE == FS_OpenFileEx(&f_dst, dst_path, FS_FILEMODE_W) ) {
miya_log_fprintf(log_fd, "%s Failed open file %d:\n", __FUNCTION__,__LINE__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(FS_GetArchiveResultCode(dst_path)) );
ret_flag = FALSE;
goto exit_label;
}
else {
fsResult = FS_SetFileLength(&f_dst, 0);
if( fsResult != FS_RESULT_SUCCESS ) {
miya_log_fprintf(log_fd, "%s Error: Set file len\n", __FUNCTION__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(fsResult) );
ret_flag = FALSE;
goto exit_label;
}
}
#ifdef LIMIT_BUF_ALLOC
if( pBuffer == NULL ) {
pBuffer = (char*)OS_Alloc( BUF_SIZE );
if( pBuffer == NULL ) {
miya_log_fprintf(log_fd, "%s Mem alloc error: line %d size %d\n", __FUNCTION__, __LINE__,BUF_SIZE);
ret_flag = FALSE;
goto exit_label;
}
else {
// OS_TPrintf("pBuf addr = 0x%p\n",pBuffer);
}
}
if( pBuffer_crypto == NULL ) {
pBuffer_crypto = (char*)OS_Alloc( BUF_SIZE );
if( pBuffer_crypto == NULL ) {
miya_log_fprintf(log_fd, "%s Mem alloc error: line %d size %d\n", __FUNCTION__, __LINE__,BUF_SIZE);
ret_flag = FALSE;
goto exit_label;
}
else {
// OS_TPrintf("pBufCrypt addr = 0x%p\n",pBuffer_crypto);
}
}
#endif
restSize = fileSize;
while( 1 ) {
if( restSize == 0 ) {
FS_FlushFile(&f_dst);
ret_flag = TRUE;
break;
}
else if( restSize > BUF_SIZE ) {
tempSize = BUF_SIZE;
}
else {
tempSize = restSize;
}
restSize -= tempSize;
readSize = FS_ReadFile(&f_src, pBuffer, (s32)tempSize);
if( readSize != tempSize ) {
miya_log_fprintf(log_fd, "%s Failed Read File:%s\n",__FUNCTION__ , src_path );
miya_log_fprintf(log_fd, " request size=%d read size=%d rest size %d\n", tempSize, readSize,restSize);
ret_flag = FALSE;
break;
}
else {
/* ここからWrite */
writtenSize = FS_WriteFile(&f_dst, pBuffer, readSize);
if( writtenSize != readSize ) {
miya_log_fprintf(log_fd, "%s Failed write file %d:\n", __FUNCTION__,__LINE__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(FS_GetArchiveResultCode(dst_path)) );
ret_flag = FALSE;
break;
}
}
}
exit_label:
if( FALSE == FS_CloseFile(&f_src) ) {
miya_log_fprintf(log_fd, "%s Failed Close File\n", __FUNCTION__ );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word( FS_GetArchiveResultCode(src_path)));
}
if( FALSE == FS_CloseFile(&f_dst) ) {
miya_log_fprintf(log_fd, "%s Failed Close File\n", __FUNCTION__ );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word( FS_GetArchiveResultCode(dst_path)));
}
#else
int alloc_size = 0; int alloc_size = 0;
char *alloc_ptr = NULL;
if( TRUE == LoadFile(src_path, &alloc_ptr, &alloc_size, log_fd) ) { if( TRUE == LoadFile(src_path, &alloc_ptr, &alloc_size, log_fd) ) {
if( TRUE == SaveFile(dst_path, alloc_ptr, (u32)alloc_size, log_fd) ) { if( TRUE == SaveFile(dst_path, alloc_ptr, (u32)alloc_size, log_fd) ) {
if( alloc_ptr ) {
OS_Free(alloc_ptr);
}
return TRUE;
} }
if( alloc_ptr ) { else {
OS_Free(alloc_ptr); ret_flag = FALSE;
} }
return FALSE;
} }
return FALSE; else {
ret_flag = FALSE;
}
if( alloc_ptr ) {
OS_Free(alloc_ptr);
}
#endif
return ret_flag;
} }
#ifdef COPY_FILE_ENCRYPTION #ifdef COPY_FILE_ENCRYPTION
static BOOL CopyFileCrypto(const char *dst_path, const char *src_path, FSFile *log_fd ) static BOOL CopyFileCrypto(const char *dst_path, const char *src_path, FSFile *log_fd )
{ {
FSFile f_src; FSFile f_src;
FSFile f_dst; FSFile f_dst;
#ifdef LIMIT_BUF
u32 restSize;
u32 tempSize;
#else
char* pBuffer; char* pBuffer;
char* pBuffer_crypto;
#endif
u32 fileSize; u32 fileSize;
s32 readSize = 0; s32 readSize = 0;
FSResult fsResult; FSResult fsResult;
s32 writtenSize; s32 writtenSize;
CRYPTORC4FastContext context; CRYPTORC4FastContext context;
char* pBuffer_crypto;
BOOL ret_flag = FALSE; BOOL ret_flag = FALSE;
if( miya_debug_flag ) { if( miya_debug_flag ) {
@ -454,6 +614,116 @@ static BOOL CopyFileCrypto(const char *dst_path, const char *src_path, FSFile *l
fileSize = FS_GetFileLength(&f_src); fileSize = FS_GetFileLength(&f_src);
#ifdef LIMIT_BUF
FS_InitFile(&f_dst);
if( FALSE == FS_OpenFileEx(&f_dst, dst_path, FS_FILEMODE_W) ) {
FSResult res = FS_GetArchiveResultCode(dst_path);
if( res == FS_RESULT_NO_ENTRY ) {
/* 本来ここで問題なし */
}
else {
miya_log_fprintf(log_fd, "%s Failed open file %d:\n", __FUNCTION__,__LINE__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(res) );
}
}
else {
FS_CloseFile(&f_dst);
/* backup バックアップを取っておくべき?? */
FS_DeleteFile(dst_path);
}
FS_CreateFile(dst_path, (FS_PERMIT_R|FS_PERMIT_W));
if( FALSE == FS_OpenFileEx(&f_dst, dst_path, FS_FILEMODE_W) ) {
miya_log_fprintf(log_fd, "%s Failed open file %d:\n", __FUNCTION__,__LINE__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(FS_GetArchiveResultCode(dst_path)) );
ret_flag = FALSE;
goto exit_label;
}
else {
fsResult = FS_SetFileLength(&f_dst, 0);
if( fsResult != FS_RESULT_SUCCESS ) {
miya_log_fprintf(log_fd, "%s Error: Set file len\n", __FUNCTION__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(fsResult) );
ret_flag = FALSE;
goto exit_label;
}
}
#ifdef LIMIT_BUF_ALLOC
if( pBuffer == NULL ) {
pBuffer = (char*)OS_Alloc( BUF_SIZE );
if( pBuffer == NULL ) {
miya_log_fprintf(log_fd, "%s Mem alloc error: line %d size %d\n", __FUNCTION__, __LINE__,BUF_SIZE);
ret_flag = FALSE;
goto exit_label;
}
else {
// OS_TPrintf("pBuf addr = 0x%p\n",pBuffer);
}
}
if( pBuffer_crypto == NULL ) {
pBuffer_crypto = (char*)OS_Alloc( BUF_SIZE );
if( pBuffer_crypto == NULL ) {
miya_log_fprintf(log_fd, "%s Mem alloc error: line %d size %d\n", __FUNCTION__, __LINE__,BUF_SIZE);
ret_flag = FALSE;
goto exit_label;
}
else {
// OS_TPrintf("pBufCrypt addr = 0x%p\n",pBuffer_crypto);
}
}
#endif
CRYPTO_RC4FastInit(&context, my_fs_key, my_fs_GetStringLength(my_fs_key));
restSize = fileSize;
while( 1 ) {
if( restSize == 0 ) {
FS_FlushFile(&f_dst);
ret_flag = TRUE;
break;
}
else if( restSize > BUF_SIZE ) {
tempSize = BUF_SIZE;
}
else {
tempSize = restSize;
}
restSize -= tempSize;
readSize = FS_ReadFile(&f_src, pBuffer, (s32)tempSize);
if( readSize != tempSize ) {
miya_log_fprintf(log_fd, "%s Failed Read File:%s\n",__FUNCTION__ , src_path );
miya_log_fprintf(log_fd, " request size=%d read size=%d rest size %d\n", tempSize, readSize,restSize);
ret_flag = FALSE;
break;
}
else {
/* ここからWrite */
CRYPTO_RC4FastEncrypt(&context, pBuffer, (u32)readSize, pBuffer_crypto);
writtenSize = FS_WriteFile(&f_dst, pBuffer_crypto, readSize);
if( writtenSize != readSize ) {
miya_log_fprintf(log_fd, "%s Failed write file %d:\n", __FUNCTION__,__LINE__);
miya_log_fprintf(log_fd, " %s\n", dst_path );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word(FS_GetArchiveResultCode(dst_path)) );
ret_flag = FALSE;
break;
}
}
}
#else /* LIMIT_BUF */
pBuffer = (char*)OS_Alloc( fileSize ); pBuffer = (char*)OS_Alloc( fileSize );
if( pBuffer == NULL ) { if( pBuffer == NULL ) {
miya_log_fprintf(log_fd, "%s Mem alloc error: %d\n", __FUNCTION__, fileSize); miya_log_fprintf(log_fd, "%s Mem alloc error: %d\n", __FUNCTION__, fileSize);
@ -534,7 +804,8 @@ static BOOL CopyFileCrypto(const char *dst_path, const char *src_path, FSFile *l
if( pBuffer_crypto != NULL ) { if( pBuffer_crypto != NULL ) {
OS_Free(pBuffer_crypto); OS_Free(pBuffer_crypto);
} }
#endif /* LIMIT_BUF */
exit_label:
if( FALSE == FS_CloseFile(&f_src) ) { if( FALSE == FS_CloseFile(&f_src) ) {
miya_log_fprintf(log_fd, "%s Failed Close File\n", __FUNCTION__ ); miya_log_fprintf(log_fd, "%s Failed Close File\n", __FUNCTION__ );
miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word( FS_GetArchiveResultCode(src_path))); miya_log_fprintf(log_fd, " %s\n", my_fs_util_get_fs_result_word( FS_GetArchiveResultCode(src_path)));

View File

@ -3,7 +3,7 @@
#define MY_DATA_VERSION_MAJOR 1 #define MY_DATA_VERSION_MAJOR 1
#define MY_DATA_VERSION_MINOR 0 #define MY_DATA_VERSION_MINOR 1
typedef struct { typedef struct {
u8 version_major; u8 version_major;

View File

@ -95,10 +95,24 @@ typedef struct
#endif #endif
static u32 endian_conv(u32 addr)
{
u32 temp = 0;
temp = ( addr >> 24 ) & 0xff;
temp |= ((( addr >> 16 ) & 0xff) << 8 );
temp |= ((( addr >> 8 ) & 0xff) << 16 );
temp |= (( addr & 0xff) << 24 );
return temp;
}
static int ncStartWiFi(void) static int ncStartWiFi(void)
{ {
int result; int result;
int timeout_counter; int timeout_counter;
SOCInAddr dns1;
SOCInAddr dns2;
if (previousAddr != 0) if (previousAddr != 0)
{ {
@ -134,9 +148,10 @@ static int ncStartWiFi(void)
socl_config.host_ip.my_ip = GetIPAddr(); socl_config.host_ip.my_ip = GetIPAddr();
socl_config.host_ip.dns_ip[0] = GetDNS1(); socl_config.host_ip.dns_ip[0] = GetDNS1();
socl_config.host_ip.dns_ip[1] = GetDNS2(); socl_config.host_ip.dns_ip[1] = GetDNS2();
OS_TPrintf("DNS1 0x%08x\n",GetDNS1());
OS_TPrintf("DNS2 0x%08x\n",GetDNS2());
OS_TPrintf("SOCL_Startup....\n"); OS_TPrintf("SOCL_Startup1....\n");
result = SOCL_Startup(&socl_config); result = SOCL_Startup(&socl_config);
} }
else else
@ -149,7 +164,7 @@ static int ncStartWiFi(void)
soc_config.mtu = 0; soc_config.mtu = 0;
soc_config.rwin = 0; soc_config.rwin = 0;
OS_TPrintf("SOC_Startup....\n"); OS_TPrintf("SOC_Startup2....\n");
result = SOC_Startup(&soc_config); result = SOC_Startup(&soc_config);
} }
if (result < 0) if (result < 0)
@ -184,11 +199,20 @@ static int ncStartWiFi(void)
} }
} }
// int SOC_SetResolver(const SOCInAddr* dns1, const SOCInAddr* dns2)
if( GetDNS1() || GetDNS2()) {
dns1.addr = endian_conv(GetDNS1());
dns2.addr = endian_conv(GetDNS2());
(void)SOC_SetResolver(&dns1, &dns2);
}
OS_TPrintf("IP addr = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSMyIp)); OS_TPrintf("IP addr = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSMyIp));
OS_TPrintf("NetMask = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSNetMask)); OS_TPrintf("NetMask = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSNetMask));
OS_TPrintf("GW addr = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSGatewayIp)); OS_TPrintf("GW addr = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSGatewayIp));
OS_TPrintf("DNS[0] = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSDnsIp[0])); OS_TPrintf("DNS[0] = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSDnsIp[0]));
OS_TPrintf("DNS[1] = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSDnsIp[1])); OS_TPrintf("DNS[1] = %3d.%3d.%3d.%3d\n", CPS_CV_IPv4(CPSDnsIp[1]));
return 0; return 0;
} }

View File

@ -19,7 +19,6 @@
#include <nitroWiFi.h> #include <nitroWiFi.h>
#include "sitedefs.h" #include "sitedefs.h"
/* /*
c:/twlsdk/include/nitro/env/env_system.h c:/twlsdk/include/nitro/env/env_system.h
*/ */

View File

@ -134,9 +134,10 @@ static void init_text_buf(TEXT_BUF *tb)
} }
void init_text(TEXT_CTRL *tc, u16 *screen, u16 palette) void init_text(TEXT_CTRL *tc, u16 *screen, u16 *screen_bg1, u16 palette)
{ {
tc->screen = screen; tc->screen = screen;
tc->screen_bg1 = screen_bg1;
tc->x_line = 0; tc->x_line = 0;
tc->y_line = 0; tc->y_line = 0;
tc->palette = palette; tc->palette = palette;

View File

@ -60,6 +60,7 @@ typedef struct {
typedef struct { typedef struct {
TEXT_BUF text_buf; TEXT_BUF text_buf;
u16 *screen; u16 *screen;
u16 *screen_bg1;
u16 x_line; u16 x_line;
u16 y_line; u16 y_line;
u16 palette; u16 palette;
@ -78,7 +79,7 @@ int init_text_buf_sys(void *heap_start, void *heap_end);
void m_putchar(TEXT_CTRL *tc, int c); void m_putchar(TEXT_CTRL *tc, int c);
void m_set_palette(TEXT_CTRL *tc, u16 num); void m_set_palette(TEXT_CTRL *tc, u16 num);
u16 m_get_palette(TEXT_CTRL *tc); u16 m_get_palette(TEXT_CTRL *tc);
void init_text(TEXT_CTRL *tc, u16 *screen, u16 palette); void init_text(TEXT_CTRL *tc, u16 *screen, u16 *screen_bg1, u16 palette);
void m_set_display_offset_y(TEXT_CTRL *tc, int offset); void m_set_display_offset_y(TEXT_CTRL *tc, int offset);
int m_get_display_offset_y(TEXT_CTRL *tc); int m_get_display_offset_y(TEXT_CTRL *tc);
void m_set_display_offset_x(TEXT_CTRL *tc, int offset); void m_set_display_offset_x(TEXT_CTRL *tc, int offset);

View File

@ -633,7 +633,7 @@ static int a_to_int(char c)
return -1; return -1;
} }
static BOOL Tid_To_GameCode(u64 tid, char *gcode) BOOL Tid_To_GameCode(u64 tid, char *gcode)
{ {
u32 code; u32 code;
char *str; char *str;

View File

@ -27,7 +27,7 @@ void DeleteECDirectory(void);
void SetupTitlesDataFile(const NAMTitleId* pTitleIds, u32 numTitleIds); void SetupTitlesDataFile(const NAMTitleId* pTitleIds, u32 numTitleIds);
FSFile *hatamotolib_log_start(char *log_file_name ); FSFile *hatamotolib_log_start(char *log_file_name );
void hatamotolib_log_end(void); void hatamotolib_log_end(void);
BOOL Tid_To_GameCode(u64 tid, char *gcode);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -83,7 +83,8 @@ static volatile BOOL reboot_flag;
static int miya_debug_level = 0; static int miya_debug_level = 0;
static OSHeapHandle hHeap;
static u32 allocator_total_size = 0;
static u8 WorkForNA[NA_VERSION_DATA_WORK_SIZE]; static u8 WorkForNA[NA_VERSION_DATA_WORK_SIZE];
@ -201,71 +202,73 @@ static BOOL LoadWlanConfig(void)
int i; /* ユーザーデータ書き込みモード */ int i; /* ユーザーデータ書き込みモード */
if( TRUE == LoadWlanConfigFile("sdmc:/wlan_cfg.txt") ) { if( TRUE == LoadWlanConfigFile("sdmc:/wlan_cfg.txt") ) {
OS_TPrintf("SSID = %s\n", GetWlanSSID()); OS_TPrintf("SSID = %s\n", GetWlanSSID());
mfprintf(tc[3],"SSID = %s\n", GetWlanSSID());
OS_TPrintf("MODE = "); OS_TPrintf("MODE = ");
#if 0
mfprintf(tc[3],"SSID = %s\n", GetWlanSSID());
mfprintf(tc[3],"MODE = "); mfprintf(tc[3],"MODE = ");
#endif
switch( GetWlanMode() ) { switch( GetWlanMode() ) {
case WCM_WEPMODE_NONE: case WCM_WEPMODE_NONE:
OS_TPrintf("NONE\n"); OS_TPrintf("NONE\n");
mfprintf(tc[3],"NONE\n"); // mfprintf(tc[3],"NONE\n");
break; break;
case WM_WEPMODE_40BIT: case WM_WEPMODE_40BIT:
OS_TPrintf("WEP128\n"); OS_TPrintf("WEP40\n");
mfprintf(tc[3],"WEP128\n"); // mfprintf(tc[3],"WEP128\n");
break; break;
case WM_WEPMODE_104BIT: case WM_WEPMODE_104BIT:
OS_TPrintf("WEP128\n"); OS_TPrintf("WEP104\n");
mfprintf(tc[3],"WEP128\n"); // mfprintf(tc[3],"WEP128\n");
break; break;
case WM_WEPMODE_128BIT: case WM_WEPMODE_128BIT:
OS_TPrintf("WEP128\n"); OS_TPrintf("WEP128\n");
mfprintf(tc[3],"WEP128\n"); // mfprintf(tc[3],"WEP128\n");
break; break;
case WCM_WEPMODE_WPA_TKIP: case WCM_WEPMODE_WPA_TKIP:
OS_TPrintf("WPA-TKIP\n"); OS_TPrintf("WPA-TKIP\n");
mfprintf(tc[3],"WPA-TKIP\n"); // mfprintf(tc[3],"WPA-TKIP\n");
break; break;
case WCM_WEPMODE_WPA2_TKIP: case WCM_WEPMODE_WPA2_TKIP:
OS_TPrintf("WPA2-TKIP\n"); OS_TPrintf("WPA2-TKIP\n");
mfprintf(tc[3],"WPA2-TKIP\n"); // mfprintf(tc[3],"WPA2-TKIP\n");
break; break;
case WCM_WEPMODE_WPA_AES: case WCM_WEPMODE_WPA_AES:
OS_TPrintf("WPA-AES\n"); OS_TPrintf("WPA-AES\n");
mfprintf(tc[3],"WPA-AES\n"); // mfprintf(tc[3],"WPA-AES\n");
break; break;
case WCM_WEPMODE_WPA2_AES : case WCM_WEPMODE_WPA2_AES :
OS_TPrintf("WPA2-AES\n"); OS_TPrintf("WPA2-AES\n");
mfprintf(tc[3],"WPA2-AES\n"); // mfprintf(tc[3],"WPA2-AES\n");
break; break;
defalut: defalut:
OS_TPrintf("Unknow mode..\n"); OS_TPrintf("Unknow mode..\n");
mfprintf(tc[3],"Unknow mode..\n"); // mfprintf(tc[3],"Unknow mode..\n");
break; break;
} }
if( TRUE == GetKeyModeStr() ) { if( TRUE == GetKeyModeStr() ) {
OS_TPrintf("KEY STR = %s\n", GetWlanKEYSTR()); OS_TPrintf("KEY STR = %s\n", GetWlanKEYSTR());
mfprintf(tc[3],"KEY STR = %s\n", GetWlanKEYSTR()); // mfprintf(tc[3],"KEY STR = %s\n", GetWlanKEYSTR());
} }
else { else {
len = GetWlanKEYBIN(buf); len = GetWlanKEYBIN(buf);
if( len ) { if( len ) {
OS_TPrintf("KEY BIN = 0x"); OS_TPrintf("KEY BIN = 0x");
mfprintf(tc[3],"KEY BIN = 0x"); // mfprintf(tc[3],"KEY BIN = 0x");
for( i = 0 ; i < len ; i++ ) { for( i = 0 ; i < len ; i++ ) {
OS_TPrintf("%02X",buf[i]); OS_TPrintf("%02X",buf[i]);
mfprintf(tc[3],"%02X",buf[i]); // mfprintf(tc[3],"%02X",buf[i]);
} }
OS_TPrintf("\n"); OS_TPrintf("\n");
mfprintf(tc[3],"\n"); // mfprintf(tc[3],"\n");
} }
} }
mfprintf(tc[3],"\n"); // mfprintf(tc[3],"\n");
if( TRUE == GetDhcpMODE() ) { if( TRUE == GetDhcpMODE() ) {
mfprintf(tc[3],"DHCP client\n"); // mfprintf(tc[3],"DHCP client\n");
} }
#if 0
else { else {
u32 addr_temp; u32 addr_temp;
addr_temp = GetIPAddr(); addr_temp = GetIPAddr();
@ -289,12 +292,12 @@ static BOOL LoadWlanConfig(void)
(u32)((addr_temp >> 8) & 0xff),(u32)(addr_temp & 0xff) ); (u32)((addr_temp >> 8) & 0xff),(u32)(addr_temp & 0xff) );
} }
mfprintf(tc[3],"\n"); mfprintf(tc[3],"\n");
#endif
} }
else { else {
OS_TPrintf("Invalid wlan cfg file\n"); OS_TPrintf("Invalid wlan cfg file\n");
mfprintf(tc[3],"Invalid wlan cfg file\n"); // mfprintf(tc[3],"Invalid wlan cfg file\n");
mprintf("Invalid wlan cfg file\n"); mprintf("Invalid wlan cfg file\n");
return FALSE; return FALSE;
} }
@ -506,6 +509,7 @@ static BOOL RestoreFromSDCard7(void)
BOOL ret_flag = TRUE; BOOL ret_flag = TRUE;
FSFile *log_fd; FSFile *log_fd;
int ec_download_ret; int ec_download_ret;
char game_code_buf[5];
title_id_buf_ptr = NULL; title_id_buf_ptr = NULL;
title_id_count = 0; title_id_count = 0;
@ -540,8 +544,10 @@ static BOOL RestoreFromSDCard7(void)
m_set_palette(tc[0], M_TEXT_COLOR_WHITE ); m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
for( i = 0; i < title_id_count ; i++ ) { for( i = 0; i < title_id_count ; i++ ) {
u64 tid = *(title_id_buf_ptr + i ); u64 tid = *(title_id_buf_ptr + i );
mprintf(" id %02d %08X %08X\n", i,(u32)(tid >> 32), (u32)tid); (void)Tid_To_GameCode(tid, game_code_buf);
miya_log_fprintf(log_fd," id %02d %08X %08X\n", i,(u32)(tid >> 32), (u32)tid); game_code_buf[4] = '\0';
mprintf(" id %08X %08X [%s]\n", (u32)(tid >> 32), (u32)tid, game_code_buf);
miya_log_fprintf(log_fd," id %08X %08X [%s]\n", (u32)(tid >> 32), (u32)tid, game_code_buf);
} }
} }
else { else {
@ -804,6 +810,8 @@ static void MyThreadProc(void *arg)
BOOL twl_card_validation_flag; BOOL twl_card_validation_flag;
u32 command; u32 command;
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
while( 1 ) { while( 1 ) {
(void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK); (void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK);
(void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK); (void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK);
@ -813,10 +821,20 @@ static void MyThreadProc(void *arg)
command = (u32)message; command = (u32)message;
switch( command ) { switch( command ) {
case THREAD_COMMAND_FULL_FUNCTION: case THREAD_COMMAND_FULL_FUNCTION:
if( miya_debug_level == 1 ) {
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
mprintf("Free mem size %d bytes\n", OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap));
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
for( function_counter = 0 ; function_counter < function_table_max ; function_counter++ ) { for( function_counter = 0 ; function_counter < function_table_max ; function_counter++ ) {
if( FALSE == (function_table[function_counter])() ) { if( FALSE == (function_table[function_counter])() ) {
flag = FALSE; flag = FALSE;
} }
if( miya_debug_level == 1 ) {
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
mprintf("Free mem size %d bytes\n", OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap));
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
} }
break; break;
case THREAD_COMMAND_WIFI_FUNCTION: case THREAD_COMMAND_WIFI_FUNCTION:
@ -923,6 +941,8 @@ static void MyThreadProcNuc(void *arg)
FSFile *log_fd; FSFile *log_fd;
BOOL ret_flag; BOOL ret_flag;
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
while( 1 ) { while( 1 ) {
(void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK); (void)OS_SendMessage(&MyMesgQueue_response, (OSMessage)0, OS_MESSAGE_NOBLOCK);
(void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK); (void)OS_ReceiveMessage(&MyMesgQueue_request, &message, OS_MESSAGE_BLOCK);
@ -939,7 +959,6 @@ static void MyThreadProcNuc(void *arg)
continue; continue;
} }
mprintf("-Wireless AP conf. load "); mprintf("-Wireless AP conf. load ");
if( TRUE == LoadWlanConfig() ) { if( TRUE == LoadWlanConfig() ) {
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */ m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
@ -1061,7 +1080,6 @@ static BOOL myTWLCardCallback( void )
void TwlMain(void) void TwlMain(void)
{ {
void* newArenaLo; void* newArenaLo;
OSHeapHandle hHeap;
u16 keyData; u16 keyData;
int loop_counter = 0; int loop_counter = 0;
int save_dir_info = 0; int save_dir_info = 0;
@ -1121,6 +1139,9 @@ void TwlMain(void)
hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap); OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
allocator_total_size = OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap);
Gfx_Init(); Gfx_Init();
RTC_Init(); RTC_Init();
@ -1344,6 +1365,9 @@ void TwlMain(void)
} }
loop_start: loop_start:
Gfx_Set_BG1_line_Color(1, 2, (u16)M_TEXT_COLOR_ORANGE);
while( 1 ) { while( 1 ) {
Gfx_Render( vram_num_main , vram_num_sub ); Gfx_Render( vram_num_main , vram_num_sub );
OS_WaitVBlankIntr(); OS_WaitVBlankIntr();
@ -1568,6 +1592,8 @@ void TwlMain(void)
} }
#endif #endif
else if ( keyData & PAD_BUTTON_SELECT ) { else if ( keyData & PAD_BUTTON_SELECT ) {
miya_debug_level ^= 1;
mprintf("debug level %d\n", miya_debug_level );
} }
else if ( keyData & PAD_BUTTON_X ) { else if ( keyData & PAD_BUTTON_X ) {
if( TRUE == reboot_flag ) { if( TRUE == reboot_flag ) {

View File

@ -50,6 +50,8 @@ static BOOL development_console_flag = FALSE;
//static int miya_debug_level = 0; //static int miya_debug_level = 0;
static u32 allocator_total_size = 0;
static OSHeapHandle hHeap;
static void SDEvents(void *userdata, FSEvent event, void *arg) static void SDEvents(void *userdata, FSEvent event, void *arg)
{ {
@ -527,6 +529,12 @@ static void MyThreadProc(void *arg)
(void)CleanSDCardFiles(NULL); (void)CleanSDCardFiles(NULL);
mprintf("done.\n"); mprintf("done.\n");
} }
else {
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
mprintf("Free mem size %d bytes\n", OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap));
// OS_GetTotalAllocSize(OSArenaId id, OSHeapHandle heap)
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
flag = TRUE; flag = TRUE;
twl_card_validation_flag = TRUE; twl_card_validation_flag = TRUE;
@ -543,6 +551,12 @@ static void MyThreadProc(void *arg)
if( FALSE == (function_table[function_counter])() ) { if( FALSE == (function_table[function_counter])() ) {
flag = FALSE; flag = FALSE;
} }
if( no_sd_clean_flag == TRUE ) {
m_set_palette(tc[0], M_TEXT_COLOR_PINK );
mprintf("Free mem size %d bytes\n", OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap));
// OS_GetTotalAllocSize(OSArenaId id, OSHeapHandle heap)
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
}
} }
mprintf("\n"); mprintf("\n");
if( flag == TRUE ) { if( flag == TRUE ) {
@ -605,7 +619,6 @@ static BOOL myTWLCardCallback( void )
void TwlMain(void) void TwlMain(void)
{ {
void* newArenaLo; void* newArenaLo;
OSHeapHandle hHeap;
u16 keyData; u16 keyData;
int loop_counter = 0; int loop_counter = 0;
int save_dir_info = 0; int save_dir_info = 0;
@ -650,6 +663,9 @@ void TwlMain(void)
hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap); OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap);
allocator_total_size = OS_GetTotalFreeSize(OS_ARENA_MAIN, hHeap);
Gfx_Init(); Gfx_Init();
RTC_Init(); RTC_Init();
@ -701,6 +717,7 @@ void TwlMain(void)
} }
// •s—v<E28094>FNAM Ì<E2809A>‰Šú‰» // •s—v<E28094>FNAM Ì<E2809A>‰Šú‰»
// NAM_Init(&AllocForNAM, &FreeForNAM); // NAM_Init(&AllocForNAM, &FreeForNAM);
@ -849,6 +866,8 @@ void TwlMain(void)
stream_play0(); /* cursor.aiff */ stream_play0(); /* cursor.aiff */
} }
Gfx_Set_BG1_line_Color(1, 2, (u16)M_TEXT_COLOR_PURPLE);
while( 1 ) { while( 1 ) {
OS_WaitVBlankIntr(); OS_WaitVBlankIntr();
Gfx_Render( vram_num_main , vram_num_sub ); Gfx_Render( vram_num_main , vram_num_sub );