-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtools.h
99 lines (58 loc) · 1.67 KB
/
tools.h
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#pragma once
#include <stdint.h>
#ifndef _TOOLS_H
#define _TOOLS_H
//low lvl functions
void halt_core(){
__asm("hlt");
}
static inline uint32_t io_read32(uint32_t addr){
volatile uint32_t *ad =(volatile uint32_t*)addr;
return *ad;
}
static inline uint8_t io_read8(uint32_t addr){
volatile uint8_t *ad =(volatile uint8_t*)((void*)addr);
return *ad;
}
static inline uint16_t io_read16(uint32_t addr){
volatile uint16_t *ad =(volatile uint16_t*)((void*)addr);
return *ad;
}
static inline void io_write32(uint32_t addr,uint32_t val){
volatile uint32_t *ad =( volatile uint32_t*)((void*)addr);
*ad = val;
}
static inline void io_write16(uint32_t addr,uint16_t val){
volatile uint16_t *ad =(volatile uint16_t*)((void*)addr);
*ad = val;
}
static inline void io_write8(uint32_t addr,uint8_t val){
volatile uint8_t *ad =(volatile uint8_t*)((void*)addr);
*ad = val;
}
void _memset(void *addr, uint8_t val, int len ){
unsigned char* x = (unsigned char*)((void*)addr);
for(int i = 0 ;i < len;i++){
x[i] = val;
}
}
void* _memcpy(void *restrict dst, const void *restrict src, int len ){
unsigned char* d = (unsigned char*)((void*)dst);
unsigned char* sr = (unsigned char*)((void*)src);
for(int i = 0 ;i < len;i++){
d[i] = sr[i];
}
return d;
}
static inline uint32_t stream2int(const uint8_t *stream) {
return (((uint32_t) stream[0]) << 24 |
((uint32_t) stream[1]) << 16 |
((uint32_t) stream[2]) << 8 |
((uint32_t) stream[3]) << 0);
}
void critical_assert(uint8_t expression){
if(!expression){
halt_core();
}
}
#endif