This commit is contained in:
zengming
2019-05-12 22:18:56 +08:00
parent c16f174c64
commit 7b2c2b8960
15 changed files with 586 additions and 0 deletions

BIN
Mrp解压.7z Normal file

Binary file not shown.

BIN
mrp解压.zip Normal file

Binary file not shown.

BIN
mrp解压渐变版.zip Normal file

Binary file not shown.

BIN
screen_buf.rar Normal file

Binary file not shown.

84
screenshot.c Normal file
View File

@@ -0,0 +1,84 @@
//<2F><><EFBFBD><EFBFBD> space - <20><>
//<2F><>Դ<EFBFBD><EFBFBD><EBB9AB><EFBFBD><EFBFBD><EFBFBD>κθ<CEBA><CEB8>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<EFBFBD><CDBE>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http://ourmrp.ys168.com
//<2F><><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTK<54>ֻ<EFBFBD><D6BB><EFBFBD>SPR<50>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
// space <20><> 2011-9-9
#include "mrc_base.h"
#define BMP_HEAD "\x42\x4D\x42\xC8\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x38\x00\x00\x00\xA0\x00\x00\x00\xA0\x00\x00\x00\x01\x00\x10\x00\x03\x00\x00\x00\x00\xC8\x00\x00\xA0\x0F\x00\x00\xA0\x0F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" //54<35>ֽ<EFBFBD>
#define BMP_HEAD_MTK "\x00\xF8\x00\x00\xE0\x07\x00\x00\x1F\x00\x00\x00\x00\x00\x00\x00" //16<31>ֽ<EFBFBD>
#define BMP_HEAD_SPR "\xF8\x00\x00\x00\x07\xE0\x00\x00\x00\x1F\x00\x00\x00\x00\x00\x00"
int32 picShot(char *pBmp,char *SaveDir,int16 x,int16 y,int16 w,int16 h,int16 max_w,int8 isSPR)
{
mr_datetime datetime;
char saveShotPath[24]={0};
int32 dirlen=mrc_strlen(SaveDir);
int8 elseNum=w%2;
char *pTempBmp=NULL;
int32 fileH=0,i=0;
mrc_getDatetime(&datetime);
mrc_sprintf(saveShotPath,"%s%02d%02d_%02d%02d_%02d.bmp",SaveDir,datetime.month ,datetime.day ,datetime.hour ,datetime.minute ,i);
for (i=1;i<100;i++)
{
if(MR_IS_FILE==mrc_fileState(saveShotPath))
{
mrc_sprintf(saveShotPath+dirlen+10,"%02d.bmp",i);
}else
{
break;
}
}
fileH=mrc_open(saveShotPath,MR_FILE_RDWR|MR_FILE_CREATE);
if(fileH)
{
int32 fileLen=(w+elseNum)*h*2+54+16+2;
int32 addPos=0;
pTempBmp=mrc_malloc(fileLen);
mrc_memset(pTempBmp,0,fileLen);
mrc_memcpy(pTempBmp,BMP_HEAD,54);
if (isSPR==TRUE)
{
for (i=0;i<4;i++)
{
mrc_memcpy(pTempBmp+2+i,(char*)&fileLen+3-i,1);
}
for (i=0;i<4;i++)
{
mrc_memcpy(pTempBmp+18+i,(char*)&w+3-i,1);
}
for (i=0;i<4;i++)
{
mrc_memcpy(pTempBmp+22+i,(char*)&h+3-i,1);
}
mrc_memcpy(pTempBmp+54,BMP_HEAD_SPR,16);
//mrc_write(fileH,BMP_HEAD_SPR,16);
}else
{
mrc_memcpy(pTempBmp+2,&fileLen,4);
mrc_memcpy(pTempBmp+18,&w,4);
mrc_memcpy(pTempBmp+22,&h,4);
mrc_memcpy(pTempBmp+54,BMP_HEAD_MTK,16);
//mrc_write(fileH,BMP_HEAD_MTK,16);
}
addPos=54+16;
for (i=h+y -1;i>=y;i--)
{
mrc_memcpy(pTempBmp+addPos,pBmp+(x+i*max_w )*2,w*2);
addPos+=(w+elseNum)*2;
//mrc_write(fileH,(uint8 *)pBmp+x*2 +i*max_w *2,w*2 );
//mrc_write(fileH,"\00\00",2*elseNum);
}
mrc_seek(fileH,0,MR_SEEK_SET);
mrc_write(fileH,pTempBmp,fileLen);
mrc_close(fileH);
fileH=0;
mrc_free(pTempBmp),pTempBmp=NULL;
return MR_SUCCESS;
}else
{
return MR_FAILED;
}
}

29
screenshot.h Normal file
View File

@@ -0,0 +1,29 @@
#ifndef _SCREENSHOT_H_
#define _SCREENSHOT_H_
//mrperʹ<72>õĽ<C3B5>16λbmpͼ<70><CDBC><EFBFBD><EFBFBD>
/*ע<><D7A2> ֻ<>ʺ<EFBFBD><CABA><EFBFBD>16bit<69><74>Ļ
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
pBmp <09><>ͼ<EFBFBD><CDBC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>char * ָ<><D6B8>
SaveDir <09><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>(<28><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SaveDir+4λ<34><CEBB><EFBFBD><EFBFBD>+4λʱ<CEBB><CAB1>+2λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.bmp)
x,y,w,h <09>ǽ<EFBFBD>ͼλ<CDBC><CEBB>
max_h <09><><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
isSPR <09><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>SPRչѶƽ̨,ȡֵ0/1 <20><>Ӧ MTK/SPR
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
MR_SUCCESS <09><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
MR_FAILED <09><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MTK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>
picShot( (char *)w_getScreenBuffer,0,0,240,320,240,0);
*/
int32 picShot(char *pBmp,char *SaveDir,int16 x,int16 y,int16 w,int16 h,int16 max_w,int8 isSPR);
#endif

BIN
vnes.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

85
屏幕旋转.c Normal file
View File

@@ -0,0 +1,85 @@
#include "mrc_base.h"
#include "mrc_bmp.h"
#include "debug.h"
uint16 *OldScreen;//<2F><>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
uint16 *NewScreen;//<2F><>̨<EFBFBD><CCA8>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
int32 Scr_w,Scr_h;//<2F><>Ļ<EFBFBD><C4BB>Ϣ
/******** <20>һ<E1B9A9><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ĺ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD> ********/
/* void RotateScreen(void) */
/* <20><><EFBFBD><EFBFBD> RotateRefresh ʹ<><CAB9> */
/******** <20>һ<E1B9A9><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ĺ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD> ********/
void RotateScreen(void)
{
mrc_getScreenSize(&Scr_w,&Scr_h);//<2F><>ȡ<EFBFBD><C8A1>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
NewScreen=mrc_malloc(Scr_w*Scr_h*2);//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>1<EFBFBD><31>
mrc_memset(NewScreen,0,Scr_w*Scr_h*2);
w_setScreenBuffer(NewScreen);//<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
mrc_setScreenSize(Scr_h,Scr_w);//<2F>˴<EFBFBD>ʵ<EFBFBD>ֿ<EFBFBD><D6BF>ߵ<EFBFBD>ת
}
/******** <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB>ˢ<EFBFBD><CBA2> ********/
/* void RotateRefresh(void) */
/* <20><><EFBFBD><EFBFBD> RotateScreen ʹ<><CAB9> */
/******** <20><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB>ˢ<EFBFBD><CBA2> ********/
void RotateRefresh(void)
{
w_setScreenBuffer(OldScreen); //<2F>˴<EFBFBD><CBB4><EFBFBD>ԭ<EFBFBD><D4AD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
mrc_setScreenSize(Scr_w,Scr_h);//<2F>˴<EFBFBD><CBB4><EFBFBD>ԭ<EFBFBD><D4AD>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
mrc_bitmapShowFlip(NewScreen,0,0,(int16)Scr_h,(int16)Scr_h,(int16)Scr_w,BM_COPY|TRANS_ROT90,0,0,0);//<2F>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת90<39>Ⱥ<EFBFBD>,<2C><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ʼ<EFBFBD><CABC>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
mrc_refreshScreen(0,0,(int16)Scr_w,(int16)Scr_h);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>µ<EFBFBD><C2B5><EFBFBD>Ļ
mrc_free(&NewScreen);//<2F>ͷź<CDB7>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>Ƶ<EFBFBD><C6B5>,<2C><><EFBFBD><EFBFBD><E9B5BD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ͷ<EFBFBD>
NewScreen=NULL;
}
void HorizontalScreenTest()
{
int32 f;
OldScreen = w_getScreenBuffer();//<2F><>ȡ<EFBFBD><C8A1>ʵ<EFBFBD><CAB5>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
RotateScreen();//<2F><><EFBFBD><EFBFBD>RotateRefreshʹ<68><CAB9>
mrc_bitmapNew(0, 41, 26);
mrc_bitmapLoad(0, "plane.bmp", 0, 0, 41, 26,41);
mrc_bitmapShow(0, 240,50,BM_COPY,0, 0, 41, 26);
mrc_drawText("ԭʼͼ",0,0,255,0,0,0,1);
mrc_drawLine(0,0,320,0,255,0,0);
mrc_refreshScreen(0,0,240,320);
f=mrc_open("data.bmp",12);
mrc_write(f,NewScreen,Scr_w*Scr_h*2);
mrc_close(f);
// return;
RotateRefresh();//<2F><><EFBFBD><EFBFBD>RotateScreenʹ<6E><CAB9>
}
int32 MRC_EXT_INIT(void)
{
HorizontalScreenTest();
return MR_SUCCESS;
}
int32 MRC_EXT_EXIT(void)
{
return MR_SUCCESS;
}
int32 mrc_appEvent(int32 code, int32 param0, int32 param1)
{
return MR_SUCCESS;
}
int32 mrc_appPause()
{
return MR_SUCCESS;
}
int32 mrc_appResume()
{
return MR_SUCCESS;
}

BIN
掌上阅读.zip Normal file

Binary file not shown.

388
整理的ext重要函数.c Normal file
View File

@@ -0,0 +1,388 @@
typedef struct _mrc_extChunk_st mrc_extChunk_st;
typedef struct _mr_c_function_st // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>RW<52><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uint8* start_of_ER_RW; // RW<52><57>ָ<EFBFBD><D6B8>
uint32 ER_RW_Length; // RW<52><57><EFBFBD><EFBFBD>
int32 ext_type; // ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>Ϊ1ʱ<31><CAB1>ʾext<78><74><EFBFBD><EFBFBD>
mrc_extChunk_st * mrc_extChunk; // extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD>
int32 stack; //stack shell 2008-2-28
} mr_c_function_st;
typedef struct _mrc_extChunk_st // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
int32 check; //0x7FD854EB <20><>־
MR_LOAD_C_FUNCTION init_func; // mr_c_function_load<61><64><EFBFBD>ڵ<EFBFBD>
MR_C_FUNCTION event; // <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪
uint8* code_buf; // extģ<74><C4A3><EFBFBD><EFBFBD>ַ
int32 code_len; // extģ<74><EFBFBD><E9B3A4>
uint8* var_buf; // ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>RW<52>ε<EFBFBD>ַ
int32 var_len; // RW<52><57><EFBFBD><EFBFBD>
mr_c_function_st* global_p_buf; // RW<52><57><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD>
int32 global_p_len; // <20><><EFBFBD><EFBFBD>
int32 timer; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mrc_extLoad<61><64><EFBFBD><EFBFBD>mrc_timerCreate<74><65><EFBFBD><EFBFBD>
mrc_extMainSendAppMsg_t sendAppEvent; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ext<78><74>Ϣ<EFBFBD><CFA2><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>ָ<EFBFBD><D6B8>
mr_table *extMrTable; // mr_table<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef MRC_PLUGIN // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>û<EFBFBD><C3BB>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x30<33><30>С<EFBFBD><D0A1><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9>
MR_C_FUNCTION_EX eventEx;
#endif
int32 isPause;/*1: pause ״̬0:<3A><><EFBFBD><EFBFBD>״̬*/
#ifdef SDK_MOD
mrc_init_t init_f;
mrc_event_t event_f;
mrc_pause_t pause_f;
mrc_resume_t resume_f;
mrc_exitApp_t exitApp_f;
#endif
} mrc_extChunk_st;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
uint32* pMrTable = *(uint32**)(mr_c_function_load - 8);
/************************************
mrc_extLoad
չʾ<D5B9><CABE>ext<78><74><EFBFBD>ص<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
************************************/
int32 mrc_extLoad (int32* extAddr, int32 len)
{
mr_table* ext_table; // <20><>ext<78><74>MrTable
mr_extChunk_st* ext_handle; // <20><>extģ<74><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mr_c_function_st* pSt; // RW<52><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(mrc_extInitMainModule() != MR_SUCCESS )
return -1;//ʧ<><CAA7>
// Ϊ<>µ<EFBFBD>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
ext_table = mrc_malloc(0x248); //mr_table<6C><65>
if(ext_table == NULL)
return -1;
mrc_memcpy(ext_table, pTable, 0x248);//<2F><><EFBFBD><EFBFBD>mr_table
ext_table[25] = mrc_extFunction_new; //<2F>ñ<EFBFBD><C3B1>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
ext_handle = mrc_malloc(0x30); // <20><><EFBFBD>䡰ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if(ext_handle == NULL)
{
mrc_free(ext_table);
return -1;
}
mrc_memset(ext_handle, 0, 30);
// <20><><EFBFBD><EFBFBD>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ext_handle->extMrTable = ext_table; //<2F><><EFBFBD>ñ<EFBFBD>
ext_handle->check = 0x7FD854EB; // EXT<58><54>־
ext_handle->timer = mrc_timerCreate();
ext_handle->sendAppEvent = mrc_extMainSendAppEventShell;
//<2F><><EFBFBD><EFBFBD>RW<52><EFBFBD><E1B9B9>
ext_handle->global_p_buf = pSt = mrc_malloc(20);
if(pSt == NULL)
{
mrc_free(ext_table);
mrc_free(ext_handle);
return -1;//ʧ<><CAA7>
}
mrc_memset(pSt, 0, 20);
//
ext_handle->global_p_len = 20; //<2F><EFBFBD><E1B9B9><EFBFBD><EFBFBD>С
ext_handle->init_func = extAddr + 8;//<2F><><EFBFBD>ڣ<EFBFBD>mr_c_function_load
ext_handle->code_buf = extAddr;// <20>׵<EFBFBD>ַ
ext_handle->code_len = len; //ext<78><74>С
//<2F><><EFBFBD><EFBFBD>extͷ
extAddr[0] = ext_table; //<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>
extAddr[1] = pSt; // <20><><EFBFBD><EFBFBD>RW<52><EFBFBD><E1B9B9>
pSt->mrc_extChunk = ext_handle; //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mrc_event(5001, )
_mr_testCom1(0, 9, extAddr, len); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><E3BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪
mr_c_function_load(1); //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>mr_c_function_load<61><64><EFBFBD><EFBFBD>RW<52>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD>
// <20>ٶ<EFBFBD><RW><3E><>RW<52>λ<EFBFBD>ַ<EFBFBD><D6B7>
ext_handle->event = *(<RW> + 0x14);
ext_handle->var_buf = pSt->pRW;
ext_handle->var_len = pSt->len;
(ext_handle->event)(pSt, 6, 0, *(<RW>+0xC), 0, 0);//δ֪
(ext_handle->event)(pSt, 8, *(<RW>+0x10), 0, 0, 0);
return ext_handle; // <20><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
}
/******************************
<09><> EXT<58>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20><>
mr_c_function_load
<09><><EFBFBD>𲿷ֳ<F0B2BFB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************/
int32 mr_c_function_load (int32 code)
{
mr_c_function_st* pSt = *((uint32)mr_c_function_load - 0x4); // ȡRW<52><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>ָ<EFBFBD><D6B8>
void* p; int32 len;
typedef int (*PFUNC_2) (void*,int);
if( code == 1 ) // ext<78><74><EFBFBD><EFBFBD>
{
int32 a = _mr_c_function_new(mrc_extHelper, 20); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
if( a == -2 ) return -1;
pSt->ext_type = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊext<78><74><EFBFBD><EFBFBD>
pMrTable->g_mr_timerStart = mrc_extTimerStart; // mr_table -> g_mr_timerStart
pMrTable->g_mr_timerStop = mrc_extTimerStop; // mr_table -> g_mr_timerStop
}
else // <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
{
int32 a = _mr_c_function_new(mr_helper, 20); // <20><>ֲ<EFBFBD><EFBFBD><E3BAAF>
if( a == -2 ) return -1; //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
pSt->ext_type = 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = mr_helper_get_rw_len(); //ȡ<><C8A1>RW<52><57><EFBFBD>ȣ<EFBFBD>ext<78>ڲ<EFBFBD><DAB2>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ext<78><74>ͬ
pSt->ER_RW_Length = len;
p = mrc_malloc( len );
pST->Start_of_ER_RW = p;
if( p == NULL ) return -1;
mrc_memset( p, 0, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>0x38<33><38><EFBFBD><EFBFBD>memset<65><74>
return 0; //<2F>ɹ<EFBFBD>
}
/**************************************
<09><>EXT<58>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mr_helper
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
***************************************/
/**
* (void* P, int32 code, uint8* input, int32 input_len, uint8** output, int32* output_len);
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* input<75><74>Ϊһint32<33><32><EFBFBD><EFBFBD><E9A3AC><EFBFBD>ڴ<EFBFBD><DAB4>ݲ<EFBFBD><DDB2><EFBFBD>
* input_len<65><6E>input<75>ֽ<EFBFBD><D6BD><EFBFBD>
* p<><70>global_p_buf ָ<><D6B8>
* code <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
* 0<><30>mrc_init input null
* 1<><31>mrc_event input<75><74><EFBFBD><EFBFBD>ǰ3<C7B0><33>Ϊmrc_event<6E><74><EFBFBD><EFBFBD> input_len=20
* <09><><EFBFBD><EFBFBD> input[0] == 8 ʱΪext<78>˳<EFBFBD><CBB3><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mrc_exitApp
* 4<><34>mrc_pause input=null input_len=0
* 5<><35>mrc_resume input=null input_len=0
*/
int32 mr_helper (void** pRW, int32 msg, int32 c[], int32 d)
{
uint32* RWAddr = *(uint32*)pRW + 4; // ȡRW<52><57>
int32 ret = 0; //<2F><><EFBFBD><EFBFBD>ֵ
if(msg >= 9) return 0;
switch(msg) //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
{
case 0: // mrc_init
_mr_init_c_helper_function(); // <20><>ʼ<EFBFBD><CABC>RW<52><57>
ret = mrc_init();
mrc_refreshScreenReal();
pMrTable->mr_internal_table->mr_timer_p = "dealtimer";
break;
case 1: // mrc_event
ret = mrc_event(c[0], c[1], c[2]);
if(c[0] == 0x8) // 0x8 <20><>ƽ̨<C6BD>˳<EFBFBD><CBB3><EFBFBD>Ϣ
ret = mrc_exitApp();
mrc_refreshScreenReal();
break;
case 2:
mrc_timerTimeout(); //δ֪
mrc_refreshScreenReal();
break;
case 4:
mrc_pause();
mrc_refreshScreenReal();
break;
case 5:
mrc_resume();
mrc_refreshScreenReal();
break;
case 6:
*(RWAddr + 0xC) = d; // λ<><CEBB>RW
break;
case 8:
*(RWAddr + 0x10) = c; // λ<><CEBB>RW
break;
case 9:
typedef int (*PFUNC_6) (int,int,int,int,int,int);
{
PFUNC_6* pfunc = (PFUNC) c[0];
if(pfunc)
ret = (*pfunc)(c[1],c[2],c[3],c[4],c[5],c[6]);
}
break;
default:
return 0;
}
return ret;
}
int __cdecl _mr_intra_start(char *Str1, char *Source)
{
char v3; // [sp+Ch] [bp-4Ch]@1
int v4; // [sp+4Ch] [bp-Ch]@2
int v5; // [sp+50h] [bp-8h]@15
int i; // [sp+54h] [bp-4h]@10
memset(&v3, -858993460, 0x4Cu);
getAppInfo();
Origin_LG_mem_len = _mr_getMetaMemLimit();
if ( !_mr_mem_init_ex(*((_DWORD *)&mrc_appInfo_st + 3)) )
{
mr_event_function = 0;
mr_timer_function = 0;
mr_stop_function = 0;
mr_pauseApp_function = 0;
mr_resumeApp_function = 0;
mr_ram_file = 0;
mr_c_function_P = 0;
mr_c_function_P_len = 0;
mr_c_function_fix_p = 0;
mr_exception_str = 0;
mr_printf("Total memory:%d", LG_mem_len);
v4 = 0;
mr_screenBuf = 0;
if ( !mr_platEx(1001, 0, 0, &mr_screenBuf, &v4, 0) )
{
if ( mr_screenBuf && v4 >= 2 * mr_screen_h * mr_screen_w )
{
dword_18D0 = 1;
dword_18CC = v4;
}
else
{
if ( mr_screenBuf )
{
mr_platEx(1002, mr_screenBuf, v4, 0, 0, 0);
mr_screenBuf = 0;
}
}
}
if ( !mr_screenBuf )
{
mr_screenBuf = mr_malloc(2 * mr_screen_h * mr_screen_w);
dword_18D0 = 0;
dword_18CC = 2 * mr_screen_h * mr_screen_w;
}
dword_18D4 = mr_screenBuf;
word_18CA = mr_screen_h;
word_18C8 = mr_screen_w;
vm_state = 0;
mr_timer_state = 0;
mr_timer_run_without_pause = 0;
bi &= 2u;
memset(&mr_bitmap, 0, 0x1E0u);
memset(&mr_sound, 0, 0x3Cu);
memset(&mr_sprite, 0, 0x14u);
memset(&mr_tile, 0, 0x3Cu);
memset(&mr_map, 0, 0xCu);
for ( i = 0; i < 3; ++i )
{
word_1610[10 * i] = 0;
word_1612[10 * i] = 0;
word_1614[10 * i] = mr_screen_w;
word_1616[10 * i] = mr_screen_h;
}
if ( !Source )
Source = "_dsm";
mr_strncpy(mr_entry, Source, 0x7Fu);
mr_printf("Used by VM(include screen buffer):%d bytes", LG_mem_len - LG_mem_left);
mr_state = 1;
v5 = mr_doExt(Str1);
if ( v5 )
{
mr_state = 5;
mr_stop();
mr_printf("init failed");
mr_connectWAP("http://wap.skmeg.com/dsmWap/error.jsp");
}
}
return _chkesp();
}
int __cdecl mr_timer()
{
char v1; // [sp+Ch] [bp-44h]@1
int v2; // [sp+4Ch] [bp-4h]@11
memset(&v1, -858993460, 0x44u);
if ( mr_timer_state == 1 )
{
mr_timer_state = 0;
if ( mr_state == 1 || mr_timer_run_without_pause && mr_state == 2 )
{
if ( !mr_timer_function || (mr_timer_function(), v2 = _chkesp(), v2 == 1) )
_mr_TestComC(801, 0, 1, 2);
}
else
{
if ( mr_state == 3 )
{
mr_stop();
_mr_intra_start(start_filename, &_pad__1__mr_md5_finish__9_9);
}
}
}
else
{
mr_printf("warning:mr_timer event unexpected!");
}
return _chkesp();
}
int __cdecl mr_start_dsm(char *Source)
{
char v2; // [sp+Ch] [bp-4Ch]@1
int v3; // [sp+4Ch] [bp-Ch]@1
int v4; // [sp+50h] [bp-8h]@2
int v5; // [sp+54h] [bp-4h]@2
memset(&v2, -858993460, 0x4Cu);
if ( !mr_getScreenInfo(&v3) )
{
mr_screen_w = v3;
mr_screen_h = v4;
mr_screen_bit = v5;
memset(&pack_filename, 0, 0x80u);
if ( Source && *Source == 42 )
{
strcpy(&pack_filename, Source);
}
else
{
if ( Source && *Source == 37 )
{
strcpy(&pack_filename, Source + 1);
}
else
{
if ( Source && *Source == 35 && Source[1] == 60 )
strcpy(&pack_filename, Source + 2);
else
strcpy(&pack_filename, "*A");
}
}
mr_printf(&pack_filename);
memset(old_pack_filename, 0, 0x80u);
memset(old_start_filename, 0, 0x80u);
memset(start_fileparameter, 0, 0x80u);
*((_DWORD *)&mrc_appInfo_st + 3) = 0;
_mr_intra_start("cfunction.ext", Source);
}
return _chkesp();
}

BIN
文件下载.zip Normal file

Binary file not shown.