Rev 897 | Rev 996 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 897 | Rev 928 | ||
---|---|---|---|
Line 2... | Line 2... | ||
2 | #define IMAGE_BASE 0xE0100000 |
2 | #define IMAGE_BASE 0xE0100000 |
3 | #define LOAD_BASE 0x00100000 |
3 | #define LOAD_BASE 0x00100000 |
4 | 4 | ||
Line 5... | Line 5... | ||
5 | 5 | ||
Line -... | Line 6... | ||
- | 6 | #define page_tabs 0xDDC00000 |
|
- | 7 | ||
- | 8 | #define master_tab (page_tabs+(page_tabs>>10)) |
|
- | 9 | ||
- | 10 | #define sel_tss 0x08 |
|
- | 11 | ||
- | 12 | #define sel_os_stack 0x10 |
|
- | 13 | #define sel_os_code 0x18 |
|
- | 14 | ||
- | 15 | #define sel_app_code 0x23 |
|
- | 16 | #define sel_app_data 0x2B |
|
- | 17 | ||
Line 6... | Line 18... | ||
6 | #define page_tabs 0xDF800000 |
18 | #define sel_srv_code 0x31 |
Line 7... | Line 19... | ||
7 | 19 | #define sel_srv_stack 0x39 |
|
Line 51... | Line 63... | ||
51 | asm volatile ( |
63 | asm volatile ( |
52 | "pushfl\n\t" |
64 | "pushfl\n\t" |
53 | "popl %0\n\t" |
65 | "popl %0\n\t" |
54 | "cli\n" |
66 | "cli\n" |
55 | : "=r" (tmp) |
67 | : "=r" (tmp)); |
56 | ); |
68 | return tmp; |
57 | return tmp; |
- | |
58 | } |
69 | } |
59 | 70 | ||
Line 60... | Line 71... | ||
60 | static inline void safe_sti(eflags_t efl) |
71 | static inline void safe_sti(eflags_t efl) |
61 | { |
72 | { |
Line 68... | Line 79... | ||
68 | 79 | ||
Line 69... | Line 80... | ||
69 | static inline count_t fnzb(u32_t arg) |
80 | static inline count_t fnzb(u32_t arg) |
70 | { |
81 | { |
71 | count_t n; |
82 | count_t n; |
- | 83 | asm volatile ( |
|
72 | asm volatile ("xorl %0, %0 \n\t" |
84 | "xorl %0, %0 \n\t" |
73 | "bsr %1, %0" |
85 | "bsr %1, %0" |
74 | :"=&r" (n) |
- | |
75 | :"r"(arg) |
86 | :"=&r"(n) :"r"(arg) ); |
76 | ); |
- | |
77 | return n; |
87 | return n; |
78 | } |
88 | } |
Line 79... | Line 89... | ||
79 | 89 | ||
80 | static inline count_t _bsf(u32_t arg) |
90 | static inline count_t _bsf(u32_t arg) |
81 | { |
91 | { |
- | 92 | count_t n; |
|
82 | count_t n; |
93 | asm volatile ( |
83 | asm volatile ("xorl %0, %0 \n\t" |
94 | "xorl %0, %0 \n\t" |
84 | "bsf %1, %0" |
- | |
85 | :"=&r" (n) |
95 | "bsf %1, %0" |
86 | :"r"(arg) |
- | |
87 | ); |
96 | :"=&r" (n) :"r"(arg)); |
88 | return n; |
97 | return n; |
Line 89... | Line 98... | ||
89 | } |
98 | } |
90 | 99 | ||
91 | static inline void _bts(u32_t *data, count_t val) |
100 | static inline void _bts(u32_t *data, count_t val) |
92 | { |
101 | { |
93 | asm volatile ("bts %0, %1 \n\t" |
102 | asm volatile ( |
94 | : |
- | |
95 | :"g"(data), "r"(val) |
- | |
96 | :"cc" |
103 | "bts %0, %1 \n\t" |
Line 97... | Line 104... | ||
97 | ); |
104 | ::"g"(data), "r"(val):"cc"); |
98 | } |
105 | } |
99 | 106 | ||
100 | extern inline void _btr(u32_t *data, count_t val) |
107 | extern inline void _btr(u32_t *data, count_t val) |
101 | { |
108 | { |
102 | asm volatile ("btr %0, %1 \n\t" |
- | |
103 | : |
- | |
104 | :"g"(data), "r"(val) |
109 | asm volatile ( |
Line 105... | Line 110... | ||
105 | :"cc" |
110 | "btr %0, %1 \n\t" |
106 | ); |
111 | ::"g"(data), "r"(val):"cc"); |
107 | } |
112 | } |
Line 122... | Line 127... | ||
122 | return retval; |
127 | return retval; |
123 | }; |
128 | }; |
124 | 129 | ||
Line -... | Line 130... | ||
- | 130 | ||
- | 131 | /* reemain part |
|
- | 132 | saved_box BOX |
|
- | 133 | ipc_start dd ? |
|
- | 134 | ipc_size dd ? |
|
- | 135 | event_mask dd ? |
|
- | 136 | debugger_slot dd ? |
|
- | 137 | dd ? |
|
- | 138 | keyboard_mode db ? |
|
- | 139 | db 3 dup(?) |
|
- | 140 | dir_table dd ? |
|
- | 141 | dbg_event_mem dd ? |
|
- | 142 | dbg_regs: |
|
- | 143 | dbg_regs.dr0 dd ? |
|
- | 144 | dbg_regs.dr1 dd ? |
|
- | 145 | dbg_regs.dr2 dd ? |
|
- | 146 | dbg_regs.dr3 dd ? |
|
- | 147 | dbg_regs.dr7 dd ? |
|
- | 148 | wnd_caption dd ? |
|
- | 149 | wnd_clientbox BOX |
|
- | 150 | */ |
|
125 | 151 | ||
- | 152 | //extern __fastcall void* load_file(const char *path, size_t *size); |
|
- | 153 | ||
- | 154 | ||
- | 155 | typedef struct |
|
- | 156 | { |
|
- | 157 | u32_t edi; |
|
- | 158 | u32_t esi; |
|
- | 159 | u32_t ebp; |
|
- | 160 | u32_t tmp; // esp |
|
- | 161 | u32_t ebx; |
|
- | 162 | u32_t edx; |
|
- | 163 | u32_t ecx; |
|
- | 164 | u32_t eax; |
|
- | 165 | addr_t retaddr; |
|
- | 166 | addr_t eip; |
|
- | 167 | u32_t cs; |
|
- | 168 | u32_t eflags; |
|
- | 169 | addr_t esp; |
|
- | 170 | u32_t ss; // 14*4 |
|
- | 171 | ||
- | 172 | u32_t tid; // thread id |
|
- | 173 | u32_t slot; // thread slot |
|
- | 174 | ||
- | 175 | addr_t pdir; // |
|
- | 176 | ||
- | 177 | u32_t thr_flags; // process is runnable only if zero |
|
- | 178 | ||
- | 179 | int ticks_left; // number of scheduling ticks left */ |
|
- | 180 | int quantum_size; // quantum size in ticks */ |
|
- | 181 | ||
- | 182 | u32_t user_time; // user time in ticks |
|
- | 183 | u32_t sys_time; // sys time in ticks |
|
- | 184 | ||
- | 185 | }thr_t; |
|
- | 186 | ||
- | 187 | #define EFL_IF 0x0200 |
|
- | 188 | #define EFL_IOPL1 0x1000 |
|
- | 189 | #define EFL_IOPL2 0x2000 |