Subversion Repositories Kolibri OS

Rev

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