diff options
| author | Tyler McGavran <tyler.taggerung@gmail.com> | 2022-08-15 01:47:11 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-14 22:47:11 -0700 |
| commit | 7d23fcc063bb0067e7e051d98d18622a134d0248 (patch) | |
| tree | 4f3e3e107d9fc8bffaf2f358cfbda68fa017c693 /src/kart_dma.c | |
| parent | 2fe6c6a2f9cf10478f4d7981040a5d858c899fa6 (diff) | |
Fix some of the memory allocation in framebuffers (#182)
* Fix some of the memory allocation in framebuffers
Also includes a the questionable change of undoing a previously
made match for func_80027A20. The changes made here remove an
AVOID_UB usage and (I would argue) is therefore more "correct",
but undoing a byte-for-byte match is admittedly bad.
Also adds in some header files and updates some not-quite-right
decomps to be slighly more accurate.
Signed-off-by: Taggerung <tyler.taggerung@gmail.com>
Diffstat (limited to 'src/kart_dma.c')
| -rw-r--r-- | src/kart_dma.c | 266 |
1 files changed, 39 insertions, 227 deletions
diff --git a/src/kart_dma.c b/src/kart_dma.c index 6761c9706..d4daa2ad6 100644 --- a/src/kart_dma.c +++ b/src/kart_dma.c @@ -1,189 +1,10 @@ #include <ultra64.h> #include <macros.h> +#include "main.h" +#include "variables.h" +#include "framebuffers.h" #include "common_structs.h" - -extern OSIoMesg gDmaIoMesg; -extern OSMesgQueue gDmaMesgQueue; -extern OSMesg gMainReceivedMesg; - -extern u8 _kart_texturesSegmentRomStart[]; -extern uintptr_t *gKartPalettes[]; - -// arrays? -extern u16 D_802F1F80[2][4][2048]; -extern u8 D_802DFB80[2][2][18688]; - -extern u16 D_800DDEB0[]; -/* -u16 D_800DDEB0[] = { // sizes - 0x06c0, 0x06e0, 0x06e0, 0x0680, 0x07c0, 0x0700, 0x0680, 0x0910 -}; -*/ -extern s32 gActiveScreenMode; - -extern uintptr_t *gKartTextureGroup18s[]; - -extern uintptr_t *gKartMarioGroup8[]; -extern uintptr_t *gKartMarioGroup7[]; -extern uintptr_t *gKartMarioGroup6[]; -extern uintptr_t *gKartMarioGroup5[]; -extern uintptr_t *gKartMarioGroup4[]; -extern uintptr_t *gKartMarioGroup3[]; -extern uintptr_t *gKartMarioGroup2[]; -extern uintptr_t *gKartMarioGroup1[]; -extern uintptr_t *gKartMarioGroup0[]; - -extern uintptr_t *gKartLuigiGroup8[]; -extern uintptr_t *gKartLuigiGroup7[]; -extern uintptr_t *gKartLuigiGroup6[]; -extern uintptr_t *gKartLuigiGroup5[]; -extern uintptr_t *gKartLuigiGroup4[]; -extern uintptr_t *gKartLuigiGroup3[]; -extern uintptr_t *gKartLuigiGroup2[]; -extern uintptr_t *gKartLuigiGroup1[]; -extern uintptr_t *gKartLuigiGroup0[]; - -extern uintptr_t *gKartYoshiGroup8[]; -extern uintptr_t *gKartYoshiGroup7[]; -extern uintptr_t *gKartYoshiGroup6[]; -extern uintptr_t *gKartYoshiGroup5[]; -extern uintptr_t *gKartYoshiGroup4[]; -extern uintptr_t *gKartYoshiGroup3[]; -extern uintptr_t *gKartYoshiGroup2[]; -extern uintptr_t *gKartYoshiGroup1[]; -extern uintptr_t *gKartYoshiGroup0[]; - -extern uintptr_t *gKartToadGroup8[]; -extern uintptr_t *gKartToadGroup7[]; -extern uintptr_t *gKartToadGroup6[]; -extern uintptr_t *gKartToadGroup5[]; -extern uintptr_t *gKartToadGroup4[]; -extern uintptr_t *gKartToadGroup3[]; -extern uintptr_t *gKartToadGroup2[]; -extern uintptr_t *gKartToadGroup1[]; -extern uintptr_t *gKartToadGroup0[]; - -extern uintptr_t *gKartDKGroup8[]; -extern uintptr_t *gKartDKGroup7[]; -extern uintptr_t *gKartDKGroup6[]; -extern uintptr_t *gKartDKGroup5[]; -extern uintptr_t *gKartDKGroup4[]; -extern uintptr_t *gKartDKGroup3[]; -extern uintptr_t *gKartDKGroup2[]; -extern uintptr_t *gKartDKGroup1[]; -extern uintptr_t *gKartDKGroup0[]; - -extern uintptr_t *gKartWarioGroup8[]; -extern uintptr_t *gKartWarioGroup7[]; -extern uintptr_t *gKartWarioGroup6[]; -extern uintptr_t *gKartWarioGroup5[]; -extern uintptr_t *gKartWarioGroup4[]; -extern uintptr_t *gKartWarioGroup3[]; -extern uintptr_t *gKartWarioGroup2[]; -extern uintptr_t *gKartWarioGroup1[]; -extern uintptr_t *gKartWarioGroup0[]; - -extern uintptr_t *gKartPeachGroup8[]; -extern uintptr_t *gKartPeachGroup7[]; -extern uintptr_t *gKartPeachGroup6[]; -extern uintptr_t *gKartPeachGroup5[]; -extern uintptr_t *gKartPeachGroup4[]; -extern uintptr_t *gKartPeachGroup3[]; -extern uintptr_t *gKartPeachGroup2[]; -extern uintptr_t *gKartPeachGroup1[]; -extern uintptr_t *gKartPeachGroup0[]; - -extern uintptr_t *gKartBowserGroup8[]; -extern uintptr_t *gKartBowserGroup7[]; -extern uintptr_t *gKartBowserGroup6[]; -extern uintptr_t *gKartBowserGroup5[]; -extern uintptr_t *gKartBowserGroup4[]; -extern uintptr_t *gKartBowserGroup3[]; -extern uintptr_t *gKartBowserGroup2[]; -extern uintptr_t *gKartBowserGroup1[]; -extern uintptr_t *gKartBowserGroup0[]; - -extern uintptr_t *gKartMarioGroup17[]; -extern uintptr_t *gKartMarioGroup16[]; -extern uintptr_t *gKartMarioGroup15[]; -extern uintptr_t *gKartMarioGroup14[]; -extern uintptr_t *gKartMarioGroup13[]; -extern uintptr_t *gKartMarioGroup12[]; -extern uintptr_t *gKartMarioGroup11[]; -extern uintptr_t *gKartMarioGroup10[]; -extern uintptr_t *gKartMarioGroup9[]; - -extern uintptr_t *gKartLuigiGroup17[]; -extern uintptr_t *gKartLuigiGroup16[]; -extern uintptr_t *gKartLuigiGroup15[]; -extern uintptr_t *gKartLuigiGroup14[]; -extern uintptr_t *gKartLuigiGroup13[]; -extern uintptr_t *gKartLuigiGroup12[]; -extern uintptr_t *gKartLuigiGroup11[]; -extern uintptr_t *gKartLuigiGroup10[]; -extern uintptr_t *gKartLuigiGroup9[]; - -extern uintptr_t *gKartYoshiGroup17[]; -extern uintptr_t *gKartYoshiGroup16[]; -extern uintptr_t *gKartYoshiGroup15[]; -extern uintptr_t *gKartYoshiGroup14[]; -extern uintptr_t *gKartYoshiGroup13[]; -extern uintptr_t *gKartYoshiGroup12[]; -extern uintptr_t *gKartYoshiGroup11[]; -extern uintptr_t *gKartYoshiGroup10[]; -extern uintptr_t *gKartYoshiGroup9[]; - -extern uintptr_t *gKartToadGroup17[]; -extern uintptr_t *gKartToadGroup16[]; -extern uintptr_t *gKartToadGroup15[]; -extern uintptr_t *gKartToadGroup14[]; -extern uintptr_t *gKartToadGroup13[]; -extern uintptr_t *gKartToadGroup12[]; -extern uintptr_t *gKartToadGroup11[]; -extern uintptr_t *gKartToadGroup10[]; -extern uintptr_t *gKartToadGroup9[]; - -extern uintptr_t *gKartDKGroup17[]; -extern uintptr_t *gKartDKGroup16[]; -extern uintptr_t *gKartDKGroup15[]; -extern uintptr_t *gKartDKGroup14[]; -extern uintptr_t *gKartDKGroup13[]; -extern uintptr_t *gKartDKGroup12[]; -extern uintptr_t *gKartDKGroup11[]; -extern uintptr_t *gKartDKGroup10[]; -extern uintptr_t *gKartDKGroup9[]; - -extern uintptr_t *gKartWarioGroup17[]; -extern uintptr_t *gKartWarioGroup16[]; -extern uintptr_t *gKartWarioGroup15[]; -extern uintptr_t *gKartWarioGroup14[]; -extern uintptr_t *gKartWarioGroup13[]; -extern uintptr_t *gKartWarioGroup12[]; -extern uintptr_t *gKartWarioGroup11[]; -extern uintptr_t *gKartWarioGroup10[]; -extern uintptr_t *gKartWarioGroup9[]; - -extern uintptr_t *gKartPeachGroup17[]; -extern uintptr_t *gKartPeachGroup16[]; -extern uintptr_t *gKartPeachGroup15[]; -extern uintptr_t *gKartPeachGroup14[]; -extern uintptr_t *gKartPeachGroup13[]; -extern uintptr_t *gKartPeachGroup12[]; -extern uintptr_t *gKartPeachGroup11[]; -extern uintptr_t *gKartPeachGroup10[]; -extern uintptr_t *gKartPeachGroup9[]; - -extern uintptr_t *gKartBowserGroup17[]; -extern uintptr_t *gKartBowserGroup16[]; -extern uintptr_t *gKartBowserGroup15[]; -extern uintptr_t *gKartBowserGroup14[]; -extern uintptr_t *gKartBowserGroup13[]; -extern uintptr_t *gKartBowserGroup12[]; -extern uintptr_t *gKartBowserGroup11[]; -extern uintptr_t *gKartBowserGroup10[]; -extern uintptr_t *gKartBowserGroup9[]; - - +#include "code_80027040.h" uintptr_t **gKartMarioTable0[] = { gKartMarioGroup8, gKartMarioGroup7, gKartMarioGroup6, @@ -303,31 +124,26 @@ uintptr_t ***gKartTextureTable1[] = { * @param arg4 First buffer index always zero. **/ void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { - - s32 temp; - if (((((((player->unk_0BC & 0x80) == 0x80) || ((player->unk_0BC & 0x40) == 0x40)) || ((player->unk_0BC & 0x80000) == 0x80000)) || - ((player->unk_0BC & 0x800000) == 0x800000)) || ((player->unk_0BC & 0x20000) == 0x20000)) || ((player->unk_044 & 0x800) != 0)) - { - + s32 temp = player->unk_0BC; + if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { if (player->unk_244[arg2] != 0) { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } - } else if (((((player->unk_0BC & 0x400) == 0x400) || ((player->unk_0BC & 0x1000000) == 0x1000000)) || - ((player->unk_0BC & 0x2000000) == 0x2000000)) || ((player->unk_0BC & 0x10000) == 0x10000)) - { - - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], 0x780U); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1 * 0x920], 0x900U, &gDmaMesgQueue); + } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780U); + // I think there's something off with the "player->unk_0A8 >> 8" + // I don't like that right-shift + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } } @@ -335,47 +151,43 @@ void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { s32 temp = player->unk_0BC; - if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || - ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) + if (((temp & 0x80) == 0x80) || ((temp & 0x40) == 0x40) || ((temp & 0x80000) == 0x80000) || ((temp & 0x800000) == 0x800000) || ((temp & 0x20000) == 0x20000) || ((player->unk_044 & 0x800) != 0)) { - if (player->unk_244[arg2] != 0) { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable1[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], 0x780); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1 * 0x920], 0x900, &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780); + // I think there's something off with the "player->unk_0A8 >> 8" + // I don't like that right-shift + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureGroup18s[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue); } else { - osInvalDCache(&D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId]); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1 * 0x920], D_800DDEB0[player->characterId], &gDmaMesgQueue); + osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTable0[player->characterId][player->unk_24C[arg2]][player->unk_244[arg2]])], &D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId], &gDmaMesgQueue); } } void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) { - // @bug: Undefined Behaviour UB - // untested fix. [arg1 << 8] may be a fake match. - #ifdef AVOID_UB - void *temp_s0 = &D_802F1F80[arg3][arg2][0]; - #else - void *temp_s0 = &D_802F1F80[arg3][arg2][arg1 << 8]; - #endif - + // Weird typecasting is being done here. We define D_802F1F80 as a 3-dimensional u32 array, + // but its better to understand it as a 3-dimensional struct_D_802F1F80 array. + struct_D_802F1F80 *temp_s0 = &D_802F1F80[arg3][arg2][arg1 << 7]; switch(gActiveScreenMode) { - case 0: case 1: + case 0: + case 1: case 2: - osInvalDCache(temp_s0, 0x200); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, 0x200, &gDmaMesgQueue); + osInvalDCache(temp_s0, sizeof(struct_D_802F1F80)); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, sizeof(struct_D_802F1F80), &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); break; case 3: - osInvalDCache(temp_s0, 0x200); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, 0x200, &gDmaMesgQueue); + osInvalDCache(temp_s0, sizeof(struct_D_802F1F80)); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartPalettes[player->characterId])], temp_s0, sizeof(struct_D_802F1F80), &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); break; } @@ -383,11 +195,11 @@ void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) { void func_80027BDC(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { osInvalDCache(vAddr, size); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } void func_80027C74(UNUSED Player *player, s32 arg1, void *vAddr, u16 size) { osInvalDCache(vAddr, size); - osPiStartDma(&gDmaIoMesg, 0, 0, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); + osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(arg1)], vAddr, size, &gDmaMesgQueue); } |
