-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathqubic.cpp
73 lines (62 loc) · 1.99 KB
/
qubic.cpp
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
70
71
72
73
#include "uefi.h"
static EFI_SYSTEM_TABLE* st;
static EFI_RUNTIME_SERVICES* rs;
static EFI_BOOT_SERVICES* bs;
VOID appendText(CHAR16* dst, CONST CHAR16* src)
{
UINT16 dstIndex = 0;
while (dst[dstIndex] != 0)
{
dstIndex++;
}
UINT16 srcIndex = 0;
while ((dst[dstIndex++] = src[srcIndex++]) != 0)
{
}
}
VOID log(CONST CHAR16* message)
{
CHAR16 timestampedMessage[256];
EFI_TIME time;
rs->GetTime(&time, NULL);
timestampedMessage[0] = time.Year / 1000 + '0';
timestampedMessage[1] = (time.Year %= 1000) / 100 + '0';
timestampedMessage[2] = (time.Year %= 100) / 10 + '0';
timestampedMessage[3] = time.Year % 10 + '0';
timestampedMessage[4] = '-';
timestampedMessage[5] = time.Month / 10 + '0';
timestampedMessage[6] = time.Month % 10 + '0';
timestampedMessage[7] = '-';
timestampedMessage[8] = time.Day / 10 + '0';
timestampedMessage[9] = time.Day % 10 + '0';
timestampedMessage[10] = ' ';
timestampedMessage[11] = time.Hour / 10 + '0';
timestampedMessage[12] = time.Hour % 10 + '0';
timestampedMessage[13] = ':';
timestampedMessage[14] = time.Minute / 10 + '0';
timestampedMessage[15] = time.Minute % 10 + '0';
timestampedMessage[16] = ':';
timestampedMessage[17] = time.Second / 10 + '0';
timestampedMessage[18] = time.Second % 10 + '0';
timestampedMessage[19] = ' ';
timestampedMessage[20] = '|';
timestampedMessage[21] = ' ';
timestampedMessage[22] = 0;
appendText(timestampedMessage, message);
appendText(timestampedMessage, L"\r\n");
st->ConOut->OutputString(st->ConOut, timestampedMessage);
}
EFI_STATUS efi_main(EFI_HANDLE imageHandle, EFI_SYSTEM_TABLE* systemTable)
{
st = systemTable;
rs = st->RuntimeServices;
bs = st->BootServices;
bs->SetWatchdogTimer(0, 0, 0, NULL);
st->ConOut->ClearScreen(st->ConOut);
log(L"Qubic 0.0.0 is launched.");
bs->Stall(1000000);
st->ConIn->Reset(st->ConIn, FALSE);
UINTN eventIndex;
bs->WaitForEvent(1, &st->ConIn->WaitForKey, &eventIndex);
return EFI_SUCCESS;
}