diff --git a/src/include/bss.h b/src/include/bss.h index 90a90b987..9d12b8b99 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -68,7 +68,7 @@ extern OSMesgQueue __osPiAccessQueue; extern OSPifRam __osContPifRam; extern u8 __osContLastCmd; extern u8 __osMaxControllers; -extern u32 __osEepromTimer; +extern OSTimer __osEepromTimer; extern OSMesgQueue __osEepromTimerQ; extern OSMesg __osEepromTimerMsg; extern OSPifRam __osEepPifRam; diff --git a/src/lib/ultra/io/conteeplongwrite.c b/src/lib/ultra/io/conteeplongwrite.c index 1dd17d258..65367509d 100644 --- a/src/lib/ultra/io/conteeplongwrite.c +++ b/src/lib/ultra/io/conteeplongwrite.c @@ -1,75 +1,20 @@ #include +#include "bss.h" #include "data.h" -GLOBAL_ASM( -glabel osEepromLongWrite -/* 6440: 27bdffb8 */ addiu $sp,$sp,-72 -/* 6444: afb70040 */ sw $s7,0x40($sp) -/* 6448: afb6003c */ sw $s6,0x3c($sp) -/* 644c: afb2002c */ sw $s2,0x2c($sp) -/* 6450: afb10028 */ sw $s1,0x28($sp) -/* 6454: afb00024 */ sw $s0,0x24($sp) -/* 6458: 00e08025 */ or $s0,$a3,$zero -/* 645c: 30b100ff */ andi $s1,$a1,0xff -/* 6460: 00c09025 */ or $s2,$a2,$zero -/* 6464: 0080b825 */ or $s7,$a0,$zero -/* 6468: afbf0044 */ sw $ra,0x44($sp) -/* 646c: afb50038 */ sw $s5,0x38($sp) -/* 6470: afb40034 */ sw $s4,0x34($sp) -/* 6474: afb30030 */ sw $s3,0x30($sp) -/* 6478: afa5004c */ sw $a1,0x4c($sp) -/* 647c: 18e00025 */ blez $a3,.L00006514 -/* 6480: 0000b025 */ or $s6,$zero,$zero -/* 6484: 3c15800a */ lui $s5,%hi(__osEepromTimerMsg) -/* 6488: 3c14800a */ lui $s4,%hi(__osEepromTimer) -/* 648c: 3c13800a */ lui $s3,%hi(__osEepromTimerQ) -/* 6490: 2673c848 */ addiu $s3,$s3,%lo(__osEepromTimerQ) -/* 6494: 2694c828 */ addiu $s4,$s4,%lo(__osEepromTimer) -/* 6498: 26b5c860 */ addiu $s5,$s5,%lo(__osEepromTimerMsg) -/* 649c: 02e02025 */ or $a0,$s7,$zero -.L000064a0: -/* 64a0: 322500ff */ andi $a1,$s1,0xff -/* 64a4: 0c012f30 */ jal osEepromWrite -/* 64a8: 02403025 */ or $a2,$s2,$zero -/* 64ac: 10400003 */ beqz $v0,.L000064bc -/* 64b0: 0040b025 */ or $s6,$v0,$zero -/* 64b4: 10000019 */ b .L0000651c -/* 64b8: 8fbf0044 */ lw $ra,0x44($sp) -.L000064bc: -/* 64bc: 26310001 */ addiu $s1,$s1,0x1 -/* 64c0: 322e00ff */ andi $t6,$s1,0xff -/* 64c4: 3c070008 */ lui $a3,0x8 -/* 64c8: 24180000 */ addiu $t8,$zero,0x0 -/* 64cc: 24190000 */ addiu $t9,$zero,0x0 -/* 64d0: 2610fff8 */ addiu $s0,$s0,-8 -/* 64d4: 01c08825 */ or $s1,$t6,$zero -/* 64d8: 26520008 */ addiu $s2,$s2,0x8 -/* 64dc: afb90014 */ sw $t9,0x14($sp) -/* 64e0: afb80010 */ sw $t8,0x10($sp) -/* 64e4: 34e79544 */ ori $a3,$a3,0x9544 -/* 64e8: 02802025 */ or $a0,$s4,$zero -/* 64ec: 24060000 */ addiu $a2,$zero,0x0 -/* 64f0: afb30018 */ sw $s3,0x18($sp) -/* 64f4: 0c0122c8 */ jal osSetTimer -/* 64f8: afb5001c */ sw $s5,0x1c($sp) -/* 64fc: 02602025 */ or $a0,$s3,$zero -/* 6500: 00002825 */ or $a1,$zero,$zero -/* 6504: 0c0121bc */ jal osRecvMesg -/* 6508: 24060001 */ addiu $a2,$zero,0x1 -/* 650c: 5e00ffe4 */ bgtzl $s0,.L000064a0 -/* 6510: 02e02025 */ or $a0,$s7,$zero -.L00006514: -/* 6514: 02c01025 */ or $v0,$s6,$zero -/* 6518: 8fbf0044 */ lw $ra,0x44($sp) -.L0000651c: -/* 651c: 8fb00024 */ lw $s0,0x24($sp) -/* 6520: 8fb10028 */ lw $s1,0x28($sp) -/* 6524: 8fb2002c */ lw $s2,0x2c($sp) -/* 6528: 8fb30030 */ lw $s3,0x30($sp) -/* 652c: 8fb40034 */ lw $s4,0x34($sp) -/* 6530: 8fb50038 */ lw $s5,0x38($sp) -/* 6534: 8fb6003c */ lw $s6,0x3c($sp) -/* 6538: 8fb70040 */ lw $s7,0x40($sp) -/* 653c: 03e00008 */ jr $ra -/* 6540: 27bd0048 */ addiu $sp,$sp,0x48 -); +s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int length) +{ + s32 ret; + ret = 0; + + while (length > 0) { + ERRCK(osEepromWrite(mq, address, buffer)); + length -= EEPROM_BLOCK_SIZE; + address++; + buffer += EEPROM_BLOCK_SIZE; + osSetTimer(&__osEepromTimer, 562500, 0, &__osEepromTimerQ, &__osEepromTimerMsg); + osRecvMesg(&__osEepromTimerQ, NULL, OS_MESG_BLOCK); + } + + return ret; +}