#include <3ds.h>
+#define TICKS_PER_MSEC 268123.480
+
+typedef struct {
+ u64 date_time;
+ u64 update_tick;
+ //...
+} datetime_t;
+
+static volatile u32* __datetime_selector =
+ (u32*) 0x1FF81000;
+static volatile datetime_t* __datetime1 =
+ (datetime_t*) 0x1FF81020;
+static volatile datetime_t* __datetime2 =
+ (datetime_t*) 0x1FF81040;
+
+
u32 osConvertVirtToPhys(u32 vaddr)
{
if(vaddr >= 0x14000000 && vaddr < 0x1c000000)
return 0;
}
+// Returns number of milliseconds since 1st Jan 1900 00:00.
+u64 osGetTime() {
+ volatile datetime_t* dt;
+
+ switch(*__datetime_selector & 1) {
+ case 0:
+ dt = __datetime1;
+ case 1:
+ dt = __datetime2;
+ }
+
+ u64 offset = (svcGetSystemTick() - dt->update_tick) / TICKS_PER_MSEC;
+ return dt->date_time + offset;
+}
+
u32 osGetFirmVersion() {
return (*(u32*)0x1FF80000) & ~0xFF;
}