cleanup and debug
This commit is contained in:
parent
142e42dbe2
commit
74b156efb1
|
@ -1,30 +0,0 @@
|
|||
|
||||
#include "BTKOM.h"
|
||||
|
||||
Bluetooth bluetooth;
|
||||
|
||||
void listen(){
|
||||
//bluetooth.receptMessage();
|
||||
}
|
||||
|
||||
|
||||
int main(){
|
||||
unsigned int key;
|
||||
int timer;
|
||||
int err = 156;
|
||||
char buffer[255] = {"lolilol"};
|
||||
Message toSend;
|
||||
err = bluetooth.listen(2000, 0, listen, 1);
|
||||
toSend.setType("REQ");
|
||||
toSend.setMessage(buffer);
|
||||
bluetooth.sendMessage(&toSend);
|
||||
ML_display_vram();
|
||||
while(1){
|
||||
GetKey(&key);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
1289
SRC/MonochromeLib.c
1289
SRC/MonochromeLib.c
File diff suppressed because it is too large
Load Diff
|
@ -1,285 +0,0 @@
|
|||
#include "bluetooth.h"
|
||||
|
||||
#define RETURN Timer_Start(this->timer);return;
|
||||
|
||||
/* --------------------------------------------------- */
|
||||
/* --------------------------------------------------- */
|
||||
/* ----------------- CLASS BLUETOOTH ----------------- */
|
||||
/* --------------------------------------------------- */
|
||||
/* --------------------------------------------------- */
|
||||
|
||||
Bluetooth::Bluetooth(){
|
||||
this->sentPacketsTotalSize = 0;
|
||||
this->receivedPacketsTotalSize = 0;
|
||||
this->unread = 0;
|
||||
this->allowReception = 1;
|
||||
this->ID = 0;
|
||||
this->secondTry = 0;
|
||||
memcpy(this->sender, "HC-06\0", 6);
|
||||
}
|
||||
|
||||
int Bluetooth::listen(int maxSize, int timer, void(*func)(void), int time){
|
||||
unsigned char conf[6] = {0, 5, 0, 0, 0, 0};
|
||||
max = maxSize;
|
||||
this->ptr = (char*)malloc(maxSize);
|
||||
this->ptr1ko = (char*)malloc(1000);
|
||||
if(this->ptr == NULL || this->ptr1ko == NULL) return NOT_ENOUGH_RAM;
|
||||
this->timer = Timer_Install(timer, func, time);
|
||||
if(Serial_Open(conf) == 3) return SERIAL_ALREADY_OPEN;
|
||||
|
||||
Timer_Start(this->timer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Bluetooth::setSender(char *senderName){
|
||||
if(strlen(senderName)+1 <= 10){
|
||||
if(strlen(senderName) >= 0){
|
||||
memcpy(this->sender, senderName, strlen(senderName)+1);
|
||||
}else{
|
||||
return SENDER_EMPTY;
|
||||
}
|
||||
}else{
|
||||
return SENDER_TOO_BIG;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Bluetooth::sendMessage(Message *message){
|
||||
int split, RTCTime, temp;
|
||||
char *ptr2;
|
||||
unsigned char dateEx[] = "YYYY-MM-DD-HH-MM-SS";
|
||||
split = (int)((message->getLength())/208) + (message->getLength()%208) == 0 ? 0:1;
|
||||
if((ptr2 = (char*)malloc(256)) == NULL) return NOT_ENOUGH_RAM;
|
||||
this->ID++;
|
||||
PrintMini(1,1,(const unsigned char*)itoa(split),MINI_OR);
|
||||
for(int i=0; i<split; i++){
|
||||
memcpy(ptr2,dateEx, 19);
|
||||
|
||||
if(message->getType() == NULL){
|
||||
memcpy(ptr2+19,"RQT",3);
|
||||
}else{
|
||||
memcpy(ptr2+19, message->getType(), 3);
|
||||
}
|
||||
if(message->isHeader){
|
||||
memcpy(ptr+22, message->msg+22, sizeof(int));
|
||||
memcpy(ptr+26, message->msg+26, 10);
|
||||
}else{
|
||||
memcpy(ptr+22, (int*)this->ID, sizeof(int));
|
||||
memcpy(ptr+26, this->sender, 10);
|
||||
}
|
||||
memcpy(ptr2+36, (int*)message->getLength(), sizeof(int));
|
||||
memcpy(ptr2+40, (int*)(((i+1)*208 > message->getLength()) ? (message->getLength() - i*208) : 208), sizeof(int));
|
||||
memcpy(ptr2+44, (unsigned short*)(i+1), sizeof(unsigned short));
|
||||
memcpy(ptr2+46, (unsigned short*)split, sizeof(unsigned short));
|
||||
memcpy(ptr2+48, (int*)(message->getMessage()+i*208, ((i+1)*208 > message->getLength()) ? (message->getLength() - i*208) : 208), sizeof(int));
|
||||
|
||||
Serial_WriteBytes((unsigned char*)ptr2,50);
|
||||
|
||||
RTCTime = RTC_GetTicks();
|
||||
while(Serial_GetTxBufferFreeCapacity() != 0){
|
||||
if((RTC_GetTicks() - RTCTime)/RTC > 300){
|
||||
free(ptr2);
|
||||
this->ID--;
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(ptr2);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
Message& Bluetooth::getLastMessage(){
|
||||
return msg;
|
||||
}
|
||||
|
||||
void Bluetooth::receptMessage(){
|
||||
int size, errorID;
|
||||
int RTCTime;
|
||||
int messageLength = 48;
|
||||
int typeCase;
|
||||
char buffer[50];
|
||||
int lengthPackets[2];
|
||||
unsigned short partsNumber[2] = {(unsigned short)0,(unsigned short)1};
|
||||
const char type[7][4] = {"RQT","ASW","ACK","MIS","FUL","ERR","END"};
|
||||
const char err[1][4] = {"ERR"};
|
||||
char ptr2[3];
|
||||
unsigned int messageID;
|
||||
Message sendBack;
|
||||
if((this->secondTry = Serial_GetRxBufferSize()) == 1000 || this->secondTry==Serial_GetRxBufferSize()){
|
||||
// if allowReception. else, send back a FUL packet to the device
|
||||
if(this->allowReception){
|
||||
Serial_ReadBytes((unsigned char*)this->ptr1ko, 1000,(short*)&size);
|
||||
memcpy(ptr2, this->ptr1ko+19, 3);
|
||||
typeCase = tabcmp((const char**)type, 7, ptr2);
|
||||
switch(typeCase){
|
||||
case RQT:
|
||||
case END:
|
||||
case ASW:
|
||||
memcpy(&this->ID, (unsigned int*)this->ptr1ko+22, sizeof(unsigned int));
|
||||
if(size < 48){
|
||||
sendBack.init("HED", this->ID, this->sender, "");
|
||||
sendMessage(&sendBack);
|
||||
RETURN
|
||||
}
|
||||
memcpy(this->sender, this->ptr1ko+26, 10);
|
||||
for(unsigned short i=0; i<partsNumber[1]; i++){
|
||||
memcpy(&messageID, (unsigned int*)this->ptr1ko+22, sizeof(unsigned int));
|
||||
if(messageID != this->ID){
|
||||
sendBack.init("ERR", messageID, this->sender, "INCORRECT ID");
|
||||
sendMessage(&sendBack);
|
||||
RETURN }
|
||||
memcpy(lengthPackets, this->ptr1ko+36, sizeof(lengthPackets));
|
||||
sprintf(buffer,"%d", i+1);
|
||||
if(partsNumber[0] != i+1){
|
||||
if(partsNumber[0] > i+1){
|
||||
sendBack.init("MIS", messageID, this->sender, buffer);
|
||||
sendMessage(&sendBack);
|
||||
}else{
|
||||
sendBack.init("ACK", messageID, this->sender, buffer);
|
||||
sendMessage(&sendBack);
|
||||
}
|
||||
}else if(lengthPackets[1] != size-48){
|
||||
sendBack.init("ERR", messageID, this->sender, "INCOMPLETE PACKET SIZE");
|
||||
sendMessage(&sendBack);
|
||||
RETURN
|
||||
}else{
|
||||
messageLength+=size-48;
|
||||
memcpy(this->ptr+48+i*952, this->ptr1ko+48, 952);
|
||||
sendBack.init("ACK", messageID, this->sender, buffer);
|
||||
sendMessage(&sendBack);
|
||||
if(messageLength-48 == lengthPackets[0] && partsNumber[0] == partsNumber[1]){
|
||||
if(!(errorID = msg.setTotalMessage(this->ptr))){
|
||||
this->unread = 1;
|
||||
this->allowReception = 0;
|
||||
this->ID++;
|
||||
RETURN
|
||||
}else{
|
||||
sendBack.init("ERR", messageID, this->sender, (char*)&err[errorID]);
|
||||
sendMessage(&sendBack);
|
||||
RETURN
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
RTCTime = RTC_GetTicks();
|
||||
while(Serial_GetRxBufferSize() != (lengthPackets[0]-messageLength-48>1000 ? 1000 : lengthPackets[0]-messageLength-48)){
|
||||
if((RTC_GetTicks() - RTCTime)/RTC > 300){
|
||||
RETURN
|
||||
}
|
||||
}
|
||||
memcpy(partsNumber, this->ptr1ko+44, sizeof(partsNumber));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
sendBack.init("FUL", this->ID, this->sender, "");
|
||||
sendMessage(&sendBack);
|
||||
RETURN
|
||||
}
|
||||
}else if(Serial_GetRxBufferSize()>0){
|
||||
this->secondTry = Serial_GetRxBufferSize();
|
||||
RETURN
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* --------------------------------------------------- */
|
||||
/* --------------------------------------------------- */
|
||||
/* ------------------ CLASS MESSAGE ------------------ */
|
||||
/* --------------------------------------------------- */
|
||||
/* --------------------------------------------------- */
|
||||
|
||||
Message::Message(){
|
||||
this->isHeader = 0;
|
||||
this->isType = 0;
|
||||
this->msg = (char*)NULL;
|
||||
}
|
||||
|
||||
int Message::init(const char* type, int ID, char* sender,const char* message){
|
||||
if(setType(type)) return INVALID_TYPE;
|
||||
if(setMessage(message)) return NOT_ENOUGH_RAM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Message::setType(const char *typeH){
|
||||
memcpy(this->type, typeH, 3);
|
||||
this->isType = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Message::setMessage(const char *message){
|
||||
int length;
|
||||
length = strlen(message) + 49;
|
||||
this->msg = (char*)realloc(this->msg, length);
|
||||
if(this->msg == NULL) return NOT_ENOUGH_RAM;
|
||||
memcpy(this->msg+48, message, length-48);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Message::setTotalMessage(char *message){
|
||||
this->msg = message;
|
||||
this->isHeader = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* Message::getTime(){
|
||||
if(this->isHeader){
|
||||
return this->msg;
|
||||
}else{
|
||||
return (char*)NULL;
|
||||
}
|
||||
}
|
||||
|
||||
char* Message::getType(){
|
||||
if(this->isHeader || this->isType){
|
||||
return this->msg+19;
|
||||
}else{
|
||||
return (char*)NULL;
|
||||
}
|
||||
}
|
||||
|
||||
char* Message::getSender(){
|
||||
if(this->isHeader){
|
||||
return this->msg+26;
|
||||
}else{
|
||||
return (char*)NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int Message::getLength(){
|
||||
if(this->msg == NULL) return -1;
|
||||
return strlen(this->msg+48)+1;
|
||||
}
|
||||
|
||||
unsigned char* Message::getMessage(){
|
||||
return (unsigned char*)this->msg+48;
|
||||
}
|
||||
|
||||
int tabcmp(const char *tab[4], int size, char* string){
|
||||
for(int i=0; i<size; i++){
|
||||
if(!strncmp(tab[i], string, 4)) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *itoa(int i){
|
||||
static char buf[21];
|
||||
char *p = buf + 20;
|
||||
if (i >= 0) {
|
||||
do{
|
||||
*--p = '0' + (i % 10);
|
||||
i /= 10;
|
||||
}while (i != 0);
|
||||
return p;
|
||||
}else {
|
||||
do {
|
||||
*--p = '0' - (i % 10);
|
||||
i /= 10;
|
||||
}while (i != 0);
|
||||
*--p = '-';
|
||||
}
|
||||
return p;
|
||||
}
|
106
SRC/syscall.s
106
SRC/syscall.s
|
@ -1,106 +0,0 @@
|
|||
.global _Serial_ReadByte
|
||||
_Serial_Readbyte:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x40C
|
||||
|
||||
.global _Serial_ReadBytes
|
||||
_Serial_ReadBytes:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x40D
|
||||
|
||||
.global _Serial_WriteByte
|
||||
_Serial_WriteByte:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x40E
|
||||
|
||||
.global _Serial_WriteBytes
|
||||
_Serial_WriteBytes:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x40F
|
||||
|
||||
.global _Serial_WriteByteFIFO
|
||||
_Serial_WriteByteFIFO:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x410
|
||||
|
||||
.global _Serial_GetRxBufferSize
|
||||
_Serial_GetRxBufferSize:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x411
|
||||
|
||||
.global _Serial_GetTxBufferFreeCapacity
|
||||
_Serial_GetTxBufferFreeCapacity:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x412
|
||||
|
||||
.global _Serial_Open
|
||||
_Serial_Open:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x418
|
||||
|
||||
.global _Serial_IsOpen
|
||||
_Serial_IsOpen:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x425
|
||||
|
||||
.global _Timer_Install
|
||||
_Timer_Install:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x118
|
||||
|
||||
.global _Timer_Start
|
||||
_Timer_Start:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x11A
|
||||
|
||||
.global _Timer_Stop
|
||||
_Timer_Stop:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x11B
|
||||
|
||||
.global _RTC_GetTicks
|
||||
_RTC_GetTicks:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x03B
|
||||
|
||||
sc_addr: .long 0x80010070
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
.SECTION P,CODE,ALIGN=4
|
||||
|
||||
.MACRO SYSCALL FUNO, SYSCALLNAME, TAIL=nop
|
||||
.export \SYSCALLNAME'
|
||||
\SYSCALLNAME'
|
||||
mov.l #h'\FUNO, r0
|
||||
mov.l #H'80010070, r2
|
||||
jmp @r2
|
||||
\TAIL'
|
||||
.ENDM
|
||||
|
||||
SYSCALL 040C, _Serial_ReadByte
|
||||
SYSCALL 040D, _Serial_ReadBytes
|
||||
SYSCALL 040E, _Serial_WriteByte
|
||||
SYSCALL 040F, _Serial_WriteBytes
|
||||
SYSCALL 0410, _Serial_WriteByteFIFO
|
||||
SYSCALL 0411, _Serial_GetRxBufferSize
|
||||
SYSCALL 0412, _Serial_GetTxBufferFreeCapacity
|
||||
SYSCALL 0413, _Serial_ClearReceiveBuffer
|
||||
SYSCALL 0414, _Serial_ClearTransmitBuffer
|
||||
SYSCALL 0418, _Serial_Open
|
||||
SYSCALL 0419, _Serial_Close
|
||||
SYSCALL 0422, _Serial_Peek
|
||||
SYSCALL 0425, _Serial_IsOpen
|
||||
SYSCALL 0118, _Timer_Install
|
||||
SYSCALL 011A, _Timer_Start
|
||||
SYSCALL 011B, _Timer_Stop
|
||||
SYSCALL 003B, _RTC_GetTicks();
|
||||
.end
|
172
crt0.s
172
crt0.s
|
@ -1,172 +0,0 @@
|
|||
.section .pretext
|
||||
.global initialize
|
||||
initialize:
|
||||
sts.l pr, @-r15
|
||||
|
||||
! set up TLB
|
||||
mov.l Hmem_SetMMU, r3
|
||||
mov.l address_one, r4 ! 0x8102000
|
||||
mov.l address_two, r5 ! 0x8801E000
|
||||
jsr @r3 ! _Hmem_SetMMU
|
||||
mov #108, r6
|
||||
|
||||
! clear the BSS
|
||||
mov.l bbss, r4 ! start
|
||||
mov.l ebss, r5 ! end
|
||||
bra L_check_bss
|
||||
mov #0, r6
|
||||
L_zero_bss:
|
||||
mov.l r6, @r4 ! zero and advance
|
||||
add #4, r4
|
||||
L_check_bss:
|
||||
cmp/hs r5, r4
|
||||
bf L_zero_bss
|
||||
|
||||
! Copy the .data
|
||||
mov.l bdata, r4 ! dest
|
||||
mov.l edata, r5 ! dest limit
|
||||
mov.l romdata, r6 ! source
|
||||
bra L_check_data
|
||||
nop
|
||||
L_copy_data:
|
||||
mov.l @r6+, r3
|
||||
mov.l r3, @r4
|
||||
add #4, r4
|
||||
L_check_data:
|
||||
cmp/hs r5, r4
|
||||
bf L_copy_data
|
||||
|
||||
mov.l bbss, r4
|
||||
mov.l edata, r5
|
||||
sub r4, r5 ! size of .bss and .data sections
|
||||
add #4, r5
|
||||
mov.l bssdatasize, r4
|
||||
mov.l r5, @r4
|
||||
|
||||
mov.l GLibAddinAplExecutionCheck, r2
|
||||
mov #0, r4
|
||||
mov #1, r5
|
||||
jsr @r2 ! _GLibAddinAplExecutionCheck(0,1,1);
|
||||
mov r5, r6
|
||||
|
||||
mov.l CallbackAtQuitMainFunction, r3
|
||||
mov.l exit_handler, r4
|
||||
jsr @r3 ! _CallbackAtQuitMainFunction(&exit_handler)
|
||||
nop
|
||||
mov.l main, r3
|
||||
jmp @r3 ! _main()
|
||||
lds.l @r15+, pr
|
||||
|
||||
_exit_handler:
|
||||
mov.l r14, @-r15
|
||||
mov.l r13, @-r15
|
||||
mov.l r12, @-r15
|
||||
sts.l pr, @-r15
|
||||
|
||||
mov.l Bdel_cychdr, r14
|
||||
jsr @r14 ! _Bdel_cychdr
|
||||
mov #6, r4
|
||||
jsr @r14 ! _Bdel_cychdr
|
||||
mov #7, r4
|
||||
jsr @r14 ! _Bdel_cychdr
|
||||
mov #8, r4
|
||||
jsr @r14 ! _Bdel_cychdr
|
||||
mov #9, r4
|
||||
jsr @r14 ! _Bdel_cychdr
|
||||
mov #10, r4
|
||||
|
||||
mov.l BfileFLS_CloseFile, r12
|
||||
mov #4, r14
|
||||
mov #0, r13
|
||||
L_close_files:
|
||||
jsr @r12 ! _BfileFLS_CloseFile
|
||||
mov r13, r4
|
||||
add #1, r13
|
||||
cmp/ge r14, r13
|
||||
bf L_close_files
|
||||
|
||||
mov.l flsFindClose, r12
|
||||
mov #0, r13
|
||||
L_close_finds:
|
||||
jsr @r12 ! _flsFindClose
|
||||
mov r13, r4
|
||||
add #1, r13
|
||||
cmp/ge r14, r13
|
||||
bf L_close_finds
|
||||
|
||||
lds.l @r15+, pr
|
||||
mov.l @r15+, r12
|
||||
mov.l @r15+, r13
|
||||
mov.l Bkey_Set_RepeatTime_Default, r2
|
||||
jmp @r2 ! _Bkey_Set_RepeatTime_Default
|
||||
mov.l @r15+, r14
|
||||
|
||||
.align 4
|
||||
address_two: .long 0x8801E000
|
||||
address_one: .long 0x8102000
|
||||
Hmem_SetMMU: .long _Hmem_SetMMU
|
||||
GLibAddinAplExecutionCheck: .long _GLibAddinAplExecutionCheck
|
||||
CallbackAtQuitMainFunction: .long _CallbackAtQuitMainFunction
|
||||
Bdel_cychdr: .long _Bdel_cychdr
|
||||
BfileFLS_CloseFile: .long _BfileFLS_CloseFile
|
||||
flsFindClose: .long _flsFindClose
|
||||
Bkey_Set_RepeatTime_Default: .long _Bkey_Set_RepeatTime_Default
|
||||
bbss: .long _bbss
|
||||
ebss: .long _ebss
|
||||
edata: .long _edata
|
||||
bdata: .long _bdata
|
||||
romdata: .long _romdata
|
||||
bssdatasize: .long _bssdatasize
|
||||
|
||||
exit_handler: .long _exit_handler
|
||||
main: .long _main
|
||||
|
||||
_Hmem_SetMMU:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x3FA
|
||||
|
||||
_Bdel_cychdr:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x119
|
||||
|
||||
_BfileFLS_CloseFile:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x1E7
|
||||
|
||||
_Bkey_Set_RepeatTime_Default:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x244
|
||||
|
||||
_CallbackAtQuitMainFunction:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x494
|
||||
|
||||
_flsFindClose:
|
||||
mov.l sc_addr, r2
|
||||
mov.l 1f, r0
|
||||
jmp @r2
|
||||
nop
|
||||
1: .long 0x218
|
||||
|
||||
_GLibAddinAplExecutionCheck:
|
||||
mov.l sc_addr, r2
|
||||
mov #0x13, r0
|
||||
jmp @r2
|
||||
nop
|
||||
sc_addr: .long 0x80010070
|
||||
.end
|
BIN
libmonochrome.a
BIN
libmonochrome.a
Binary file not shown.
Loading…
Reference in New Issue