summaryrefslogtreecommitdiff
path: root/mm/src/code/z_nmi_buff.c
blob: 9476009c56b58b31e1795221c0bc2065923afec1 (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
#include "global.h"
#include "BenPort.h"

#define COLD_RESET 0
#define NMI 1

typedef struct {
    /* 0x00 */ u32 resetting;
    /* 0x04 */ u32 resetCount;
    /* 0x08 */ OSTime duration;
    /* 0x10 */ OSTime resetTime;
} NmiBuff; // size >= 0x18

NmiBuff* gNMIBuffer;

void Nmi_Init(void) {
    gNMIBuffer = (NmiBuff*)osAppNMIBuffer;
    gNMIBuffer->resetting = false;

    if (osResetType == COLD_RESET) {
        gNMIBuffer->resetCount = 0;
        gNMIBuffer->duration = 0;
    } else {
        gNMIBuffer->resetCount++;
        gNMIBuffer->duration += gNMIBuffer->resetTime;
    }

    gNMIBuffer->resetTime = 0;
}

void Nmi_SetPrenmiStart(void) {
    gNMIBuffer->resetting = true;
    gNMIBuffer->resetTime = osGetTime();
}

u32 Nmi_GetPrenmiHasStarted(void) {
    return gNMIBuffer->resetting;
}