summaryrefslogtreecommitdiff
path: root/src/TRK_MINNOW_DOLPHIN/Portable/nubinit.c
blob: b3099f90dae7c2a0c7c11b28f917b290fcfb9c62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/nubinit.h"
#include "TRK_MINNOW_DOLPHIN/MetroTRK/Portable/serpoll.h"
#include "TRK_MINNOW_DOLPHIN/utils/common/MWTrace.h"

BOOL gTRKBigEndian;

DSError TRKInitializeNub(void) {
    DSError ret;
    DSError uartErr;

    ret = TRKInitializeEndian();

    if (ret == DS_NoError) {
        usr_put_initialize();
    }
    if (ret == DS_NoError) {
        ret = TRKInitializeEventQueue();
    }
    if (ret == DS_NoError) {
        ret = TRKInitializeMessageBuffers();
    }
    if (ret == DS_NoError) {
        ret = TRKInitializeDispatcher();
    }
    if (ret == DS_NoError) {
        uartErr = TRKInitializeIntDrivenUART(0x0000e100, 1, 0, &gTRKInputPendingPtr);
        TRKTargetSetInputPendingPtr(gTRKInputPendingPtr);
        if (uartErr != DS_NoError) {
            ret = uartErr;
        }
    }
    if (ret == DS_NoError) {
        ret = TRKInitializeSerialHandler();
    }
    if (ret == DS_NoError) {
        ret = TRKInitializeTarget();
    }
    return ret;
}

DSError TRKTerminateNub(void) {
    TRKTerminateSerialHandler();
    return DS_NoError;
}

void TRKNubWelcome(void) {
    TRK_board_display("MetroTRK for GAMECUBE v0.10");
    return;
}

BOOL TRKInitializeEndian(void) {
    u8 bendian[4];
    BOOL result = FALSE;
    gTRKBigEndian = TRUE;

    bendian[0] = 0x12;
    bendian[1] = 0x34;
    bendian[2] = 0x56;
    bendian[3] = 0x78;

    if (*(u32*)bendian == 0x12345678) {
        gTRKBigEndian = TRUE;
    } else if (*(u32*)bendian == 0x78563412) {
        gTRKBigEndian = FALSE;
    } else {
        result = TRUE;
    }
    return result;
}