My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
os.c
Go to the documentation of this file.
1 #include <3ds.h>
2 
3 #define TICKS_PER_MSEC 268123.480
4 
5 typedef struct {
8  //...
9 } datetime_t;
10 
11 static volatile u32* __datetime_selector =
12  (u32*) 0x1FF81000;
13 static volatile datetime_t* __datetime1 =
14  (datetime_t*) 0x1FF81020;
15 static volatile datetime_t* __datetime2 =
16  (datetime_t*) 0x1FF81040;
17 
18 
20 {
21  if(vaddr >= 0x14000000 && vaddr < 0x1c000000)
22  return vaddr + 0x0c000000; // LINEAR heap
23  if(vaddr >= 0x1F000000 && vaddr < 0x1F600000)
24  return vaddr - 0x07000000; // VRAM
25  if(vaddr >= 0x1FF00000 && vaddr < 0x1FF80000)
26  return vaddr + 0x00000000; // DSP memory
27  if(vaddr >= 0x30000000 && vaddr < 0x40000000)
28  return vaddr - 0x10000000; // Only available under FIRM v8+ for certain processes.
29  return 0;
30 }
31 
33 {
34  if(vaddr >= 0x30000000 && vaddr < 0x40000000)return vaddr;
35  if(vaddr >= 0x14000000 && vaddr < 0x1c000000)return vaddr+=0x1c000000;
36  return 0;
37 }
38 
39 // Returns number of milliseconds since 1st Jan 1900 00:00.
41  volatile datetime_t* dt;
42 
43  switch(*__datetime_selector & 1) {
44  case 0:
45  dt = __datetime1;
46  break;
47  case 1:
48  dt = __datetime2;
49  break;
50  }
51 
52  u64 offset = (svcGetSystemTick() - dt->update_tick) / TICKS_PER_MSEC;
53  return dt->date_time + offset;
54 }
55 
57  return (*(u32*)0x1FF80000) & ~0xFF;
58 }
59 
61  return (*(u32*)0x1FF80060) & ~0xFF;
62 }
63 
64 const char* osStrError(u32 error) {
65  switch((error>>26) & 0x3F) {
66  case 0:
67  return "Success.";
68  case 1:
69  return "Nothing happened.";
70  case 2:
71  return "Would block.";
72  case 3:
73  return "Not enough resources.";
74  case 4:
75  return "Not found.";
76  case 5:
77  return "Invalid state.";
78  case 6:
79  return "Unsupported.";
80  case 7:
81  return "Invalid argument.";
82  case 8:
83  return "Wrong argument.";
84  case 9:
85  return "Interrupted.";
86  case 10:
87  return "Internal error.";
88  default:
89  return "Unknown.";
90  }
91 }
u64 osGetTime()
Definition: os.c:40
u32 osConvertVirtToPhys(u32 vaddr)
Definition: os.c:19
const char * osStrError(u32 error)
Definition: os.c:64
uint64_t u64
Definition: types.h:24
u64 svcGetSystemTick()
uint32_t u32
Definition: types.h:23
#define TICKS_PER_MSEC
Definition: os.c:3
u32 osConvertOldLINEARMemToNew(u32 vaddr)
Definition: os.c:32
u64 update_tick
Definition: os.c:7
Definition: os.c:5
u64 date_time
Definition: os.c:6
u32 osGetKernelVersion()
Definition: os.c:60
u32 osGetFirmVersion()
Definition: os.c:56