Rev 6 | Rev 9 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6 | Rev 8 | ||
---|---|---|---|
Line 33... | Line 33... | ||
33 | dw 0x0000 |
33 | dw 0x0000 |
34 | db 0x00 |
34 | db 0x00 |
35 | dw 11011111b *256 +10010010b |
35 | dw 11011111b *256 +10010010b |
36 | db 0x00 |
36 | db 0x00 |
Line 37... | Line -... | ||
37 | - | ||
38 | graph_data_l: |
- | |
39 | - | ||
40 | dw 0x3ff |
- | |
41 | dw 0x0000 |
- | |
42 | db 0x00 |
- | |
43 | dw 11010000b *256 +11110010b |
- | |
44 | db 0x00 |
- | |
45 | - | ||
46 | tss0_l: |
- | |
47 | times (max_processes+10) dd 0,0 |
- | |
48 | - | ||
49 | tss0i_l: |
- | |
50 | times 0x41 dq 0 ;(256+10) dd 0,0 |
- | |
51 | 37 | ||
52 | app_code_l: |
38 | app_code_l: |
53 | dw ((0x80000000-std_application_base_address) shr 12) and 0xffff |
39 | dw ((0x80000000-std_application_base_address) shr 12) and 0xffff |
54 | dw 0 |
40 | dw 0 |
55 | db 0 |
41 | db 0 |
Line 61... | Line 47... | ||
61 | dw 0 |
47 | dw 0 |
62 | db 0 |
48 | db 0 |
63 | dw 11010000b*256+11110010b+256*((0x80000000-std_application_base_address) shr 28) |
49 | dw 11010000b*256+11110010b+256*((0x80000000-std_application_base_address) shr 28) |
64 | db std_application_base_address shr 24 |
50 | db std_application_base_address shr 24 |
Line -... | Line 51... | ||
- | 51 | ||
- | 52 | graph_data_l: |
|
- | 53 | ||
- | 54 | dw 0x3ff |
|
- | 55 | dw 0x0000 |
|
- | 56 | db 0x00 |
|
- | 57 | dw 11010000b *256 +11110010b |
|
- | 58 | db 0x00 |
|
- | 59 | ||
- | 60 | tss0_l: |
|
Line 65... | Line 61... | ||
65 | 61 | times (max_processes+10) dd 0,0 |
|
Line 66... | Line 62... | ||
66 | 62 | ||
67 | gdte: |
63 | gdte: |
68 | 64 | ||
69 | - | ||
70 | 65 | ||
71 | idtreg: |
- | |
Line -... | Line 66... | ||
- | 66 | ||
- | 67 | idtreg: |
|
- | 68 | dw 8*0x41-1 |
|
- | 69 | dd idts+8 |
|
- | 70 | label idts at 0xB100-8 |
|
- | 71 | ||
- | 72 | ||
- | 73 | ||
- | 74 | uglobal |
|
- | 75 | tss_sceleton: |
|
- | 76 | l.back dw 0,0 |
|
- | 77 | l.esp0 dd 0 |
|
- | 78 | l.ss0 dw 0,0 |
|
- | 79 | l.esp1 dd 0 |
|
- | 80 | l.ss1 dw 0,0 |
|
- | 81 | l.esp2 dd 0 |
|
- | 82 | l.ss2 dw 0,0 |
|
- | 83 | l.cr3 dd 0 |
|
- | 84 | l.eip dd 0 |
|
- | 85 | l.eflags dd 0 |
|
- | 86 | l.eax dd 0 |
|
- | 87 | l.ecx dd 0 |
|
- | 88 | l.edx dd 0 |
|
- | 89 | l.ebx dd 0 |
|
- | 90 | l.esp dd 0 |
|
- | 91 | l.ebp dd 0 |
|
- | 92 | l.esi dd 0 |
|
- | 93 | l.edi dd 0 |
|
- | 94 | l.es dw 0,0 |
|
- | 95 | l.cs dw 0,0 |
|
- | 96 | l.ss dw 0,0 |
|
- | 97 | l.ds dw 0,0 |
|
72 | dw 8*0x41-1 |
98 | l.fs dw 0,0 |
Line 73... | Line 99... | ||
73 | dd idts+8 |
99 | l.gs dw 0,0 |
74 | 100 | l.ldt dw 0,0 |
|
75 | label idts at 0xB100-8 |
101 | l.trap dw 0 |
Line 97... | Line 123... | ||
97 | ret |
123 | ret |
Line 98... | Line 124... | ||
98 | 124 | ||
Line 99... | Line -... | ||
99 | - | ||
100 | build_interrupt_table: |
- | |
101 | - | ||
102 | mov [l.eflags],dword 0x11002 |
- | |
103 | mov [l.ss0], int_data |
- | |
104 | ;mov [l.ss1], ring1_data |
- | |
105 | ;mov [l.ss2], ring2_data |
- | |
106 | mov [l.esp0], 0x52000 |
- | |
107 | mov [l.esp1], 0x53000 |
- | |
108 | mov [l.esp2], 0x54000 |
- | |
109 | - | ||
110 | mov eax,cr3 |
- | |
111 | mov [l.cr3],eax |
- | |
112 | mov [l.cs],int_code |
- | |
113 | mov [l.ss],int_data |
- | |
114 | mov [l.ds],int_data |
- | |
115 | mov [l.es],int_data |
- | |
116 | mov [l.fs],int_data |
- | |
117 | mov [l.gs],int_data |
- | |
118 | - | ||
119 | mov eax,sys_int |
- | |
120 | mov [l.esp],0x720000 |
- | |
121 | mov edi,0x290000 |
- | |
122 | - | ||
123 | newint: |
- | |
124 | push edi |
- | |
125 | mov ebx,[eax] |
- | |
126 | mov [l.eip],ebx |
- | |
127 | mov esi,tss_sceleton |
- | |
128 | mov ecx,120/4 |
- | |
129 | cld |
- | |
130 | rep movsd |
- | |
131 | pop edi |
- | |
132 | - | ||
133 | add edi,128 |
- | |
134 | add [l.esp],1024 |
- | |
135 | add eax,4 |
- | |
136 | - | ||
137 | cmp eax,sys_int+4*0x40 ;0x60 |
- | |
138 | jbe newint ;jb |
- | |
139 | - | ||
140 | ;; |
- | |
141 | - | ||
142 | mov esi,boot_sched_3_2 |
- | |
143 | call boot_log |
- | |
144 | - | ||
145 | mov ecx,0x290000 |
- | |
146 | mov edi,0 |
- | |
147 | setgdtl2i: |
- | |
148 | mov [edi+gdts+ tss0i +0], word 128 |
- | |
149 | mov [edi+gdts+ tss0i +2], cx |
- | |
150 | mov eax,ecx |
- | |
151 | shr eax,16 |
- | |
152 | mov [edi+gdts+ tss0i +4], al |
- | |
153 | mov [edi+gdts+ tss0i +7], ah |
- | |
154 | mov [edi+gdts+ tss0i +5], word 01010000b *256 +11101001b |
- | |
155 | add ecx,128 |
- | |
156 | add edi,8 |
- | |
157 | cmp edi,8*0x40 ;0x60 |
- | |
158 | jbe setgdtl2i |
- | |
159 | - | ||
160 | ;; |
- | |
161 | - | ||
162 | mov esi,boot_sched_3_3 |
- | |
163 | call boot_log |
- | |
164 | - | ||
165 | mov edi,0 |
- | |
166 | mov edx,tss0i |
- | |
167 | @@: |
- | |
168 | mov [edi+idts+ 8 +0], word 0 |
- | |
169 | mov [edi+idts+ 8 +2], dx |
- | |
170 | mov [edi+idts+ 8 +4], word 10000101b*256 ; task gate DPL=0 |
- | |
171 | mov [edi+idts+ 8 +6], word 0 |
- | |
172 | add edx,8 |
- | |
173 | add edi,8 |
- | |
174 | - | ||
175 | cmp edi,8*0x40 |
- | |
176 | jb @b |
125 | |
177 | 126 | build_interrupt_table: |
|
178 | ; Exceptions |
127 | |
179 | mov edi, idts+8 |
128 | mov edi, idts+8 |
180 | mov esi, sys_int |
129 | mov esi, sys_int |
181 | mov ecx, 32 |
130 | mov ecx, 0x40 |
182 | @@: |
131 | @@: |
183 | mov eax, [esi] |
132 | mov eax, [esi] |
Line 189... | Line 138... | ||
189 | add esi, 4 |
138 | add esi, 4 |
190 | add edi, 8 |
139 | add edi, 8 |
191 | dec ecx |
140 | dec ecx |
192 | jnz @b |
141 | jnz @b |
Line 193... | Line -... | ||
193 | - | ||
194 | ret |
- | |
195 | - | ||
196 | build_syscall_interrupt_table: |
- | |
197 | - | ||
198 | ;mov dx,tss0sys |
142 | |
199 | mov edi,8*0x40+idts+8 |
143 | ;mov edi,8*0x40+idts+8 |
200 | mov [edi + 0], word (i40 and ((1 shl 16)-1)) |
144 | mov [edi + 0], word (i40 and ((1 shl 16)-1)) |
201 | mov [edi + 2], word os_code |
145 | mov [edi + 2], word os_code |
202 | mov [edi + 4], word 11101110b*256 |
146 | mov [edi + 4], word 11101110b*256 |
Line 206... | Line 150... | ||
206 | 150 | ||
207 | 151 | ||
208 | 152 | ||
209 | iglobal |
- | |
210 | sys_int: |
- | |
211 | dd s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc,sd,se,sf |
153 | iglobal |
212 | - | ||
213 | dd s10 ,s11 ; ,i_unknown12,i_unknown13 |
- | |
214 | ; dd i_unknown14,i_unknown15,i_unknown16,i_unknown17 |
154 | sys_int: |
Line 215... | Line 155... | ||
215 | ; dd i_unknown18,i_unknown19,i_unknown1a,i_unknown1b |
155 | dd e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15 |
216 | ; dd i_unknown1c,i_unknown1d,i_unknown1e,i_unknown1f |
156 | dd e16,e17 |
Line 217... | Line -... | ||
217 | times 14 dd unknown_interrupt |
- | |
218 | - | ||
219 | dd irq0 ,irq1 ,p_irq2 ,p_irq3 ,p_irq4 ,p_irq5,p_irq6 ,p_irq7 |
- | |
220 | dd p_irq8,p_irq9,p_irq10,p_irq11,p_irq12,irqD ,p_irq14,p_irq15 |
- | |
221 | 157 | times 14 dd unknown_interrupt |
|
Line 222... | Line 158... | ||
222 | ;dd i_unknown30,i_unknown31,i_unknown32,i_unknown33 |
158 | |
223 | ;dd i_unknown34,i_unknown35,i_unknown36,i_unknown37 |
159 | dd irq0 ,irq1 ,p_irq2 ,p_irq3 ,p_irq4 ,p_irq5,p_irq6 ,p_irq7 |
Line 224... | Line -... | ||
224 | ;dd i_unknown38,i_unknown39,i_unknown3a,i_unknown3b |
- | |
225 | ;dd i_unknown3c,i_unknown3d,i_unknown3e,i_unknown3f |
- | |
226 | times 16 dd unknown_interrupt |
- | |
227 | - | ||
228 | dd i40 |
- | |
229 | endg |
- | |
230 | - | ||
231 | uglobal |
- | |
232 | tss_sceleton: |
- | |
233 | l.back dw 0,0 |
- | |
234 | l.esp0 dd 0 |
- | |
235 | l.ss0 dw 0,0 |
- | |
236 | l.esp1 dd 0 |
- | |
237 | l.ss1 dw 0,0 |
- | |
238 | l.esp2 dd 0 |
- | |
239 | l.ss2 dw 0,0 |
- | |
240 | l.cr3 dd 0 |
- | |
241 | l.eip dd 0 |
- | |
242 | l.eflags dd 0 |
- | |
243 | l.eax dd 0 |
- | |
244 | l.ecx dd 0 |
- | |
245 | l.edx dd 0 |
- | |
246 | l.ebx dd 0 |
- | |
247 | l.esp dd 0 |
- | |
248 | l.ebp dd 0 |
- | |
249 | l.esi dd 0 |
- | |
250 | l.edi dd 0 |
- | |
251 | l.es dw 0,0 |
- | |
252 | l.cs dw 0,0 |
- | |
253 | l.ss dw 0,0 |
- | |
254 | l.ds dw 0,0 |
- | |
255 | l.fs dw 0,0 |
- | |
256 | l.gs dw 0,0 |
- | |
257 | l.ldt dw 0,0 |
- | |
258 | l.trap dw 0 |
- | |
259 | l.io dw 0 |
- | |
260 | endg |
- | |
261 | - | ||
262 | s0: |
- | |
263 | mov ax, os_data |
- | |
264 | mov ds, ax |
- | |
265 | mov es, ax |
- | |
266 | - | ||
267 | mov [error_interrupt],0x0 |
- | |
268 | mov [error_interrupt_entry],dword s0 |
- | |
269 | - | ||
270 | call show_error_parameters |
- | |
271 | - | ||
272 | mov edx,[0x3010] |
- | |
273 | mov [edx+0xa],byte 4 |
- | |
274 | - | ||
275 | jmp change_task |
- | |
276 | - | ||
277 | - | ||
278 | s1: |
- | |
279 | mov ax, os_data |
- | |
280 | mov ds, ax |
- | |
281 | mov es, ax |
- | |
282 | - | ||
283 | mov [error_interrupt],0x1 |
- | |
284 | mov [error_interrupt_entry],dword s1 |
- | |
285 | - | ||
286 | call show_error_parameters |
- | |
287 | - | ||
288 | mov edx,[0x3010] |
- | |
289 | mov [edx+0xa],byte 4 |
- | |
290 | - | ||
291 | jmp change_task |
- | |
292 | - | ||
293 | s2: |
- | |
294 | mov ax, os_data |
- | |
295 | mov ds, ax |
- | |
296 | mov es, ax |
- | |
297 | - | ||
298 | mov [error_interrupt],0x2 |
- | |
299 | mov [error_interrupt_entry],dword s2 |
- | |
300 | - | ||
301 | call show_error_parameters |
- | |
302 | - | ||
303 | mov edx,[0x3010] |
- | |
304 | mov [edx+0xa],byte 4 |
- | |
305 | - | ||
306 | jmp change_task |
- | |
307 | 160 | dd p_irq8,p_irq9,p_irq10,p_irq11,p_irq12,irqD ,p_irq14,p_irq15 |
|
308 | s3: |
- | |
309 | mov ax, os_data |
- | |
310 | mov ds, ax |
- | |
311 | mov es, ax |
- | |
312 | - | ||
313 | mov [error_interrupt],0x3 |
- | |
314 | mov [error_interrupt_entry],dword s3 |
- | |
315 | - | ||
316 | call show_error_parameters |
- | |
317 | - | ||
318 | mov edx,[0x3010] |
- | |
319 | mov [edx+0xa],byte 4 |
- | |
320 | - | ||
321 | jmp change_task |
161 | |
322 | - | ||
323 | s4: |
- | |
324 | mov ax, os_data |
- | |
325 | mov ds, ax |
- | |
326 | mov es, ax |
- | |
327 | - | ||
328 | mov [error_interrupt],0x4 |
- | |
329 | mov [error_interrupt_entry],dword s4 |
- | |
330 | - | ||
331 | call show_error_parameters |
- | |
332 | - | ||
333 | mov edx,[0x3010] |
- | |
334 | mov [edx+0xa],byte 4 |
162 | times 16 dd unknown_interrupt |
335 | - | ||
336 | jmp change_task |
- | |
337 | - | ||
338 | s5: |
- | |
339 | mov ax, os_data |
- | |
340 | mov ds, ax |
- | |
341 | mov es, ax |
- | |
342 | - | ||
Line -... | Line 163... | ||
- | 163 | ||
- | 164 | dd i40 |
|
- | 165 | endg |
|
- | 166 | ||
- | 167 | ; simply return control to interrupted process |
|
343 | mov [error_interrupt],0x5 |
168 | unknown_interrupt: |
- | 169 | iret |
|
Line -... | Line 170... | ||
- | 170 | ||
344 | mov [error_interrupt_entry],dword s5 |
171 | macro exceptions [num] |
345 | 172 | { |
|
346 | call show_error_parameters |
173 | forward |
347 | 174 | e#num : |
|
Line 348... | Line 175... | ||
348 | mov edx,[0x3010] |
175 | mov bl, num |
349 | mov [edx+0xa],byte 4 |
176 | jmp exc_c |
350 | - | ||
351 | jmp change_task |
177 | } |
Line 352... | Line 178... | ||
352 | 178 | ||
353 | s6: |
179 | exceptions 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 |
Line 354... | Line 180... | ||
354 | mov ax, os_data |
180 | exc_c: |
Line 355... | Line 181... | ||
355 | mov ds, ax |
181 | mov ax, os_data |
356 | mov es, ax |
182 | mov ds, ax |
357 | 183 | mov es, ax |
|
Line 358... | Line 184... | ||
358 | mov [error_interrupt],0x6 |
184 | |
359 | mov [error_interrupt_entry],dword s6 |
185 | movzx eax, bl |
360 | 186 | mov [error_interrupt], eax |
|
Line 361... | Line 187... | ||
361 | call show_error_parameters |
187 | call show_error_parameters |
362 | 188 | ||
Line 404... | Line 230... | ||
404 | iglobal |
230 | iglobal |
405 | prev_user_of_fpu dd 1 |
231 | prev_user_of_fpu dd 1 |
406 | endg |
232 | endg |
Line 407... | Line -... | ||
407 | - | ||
408 | - | ||
409 | s8: |
- | |
410 | add esp, 4 ; zero on the stack! |
- | |
411 | mov ax, os_data |
- | |
412 | mov ds, ax |
- | |
413 | mov es, ax |
- | |
414 | - | ||
415 | mov [error_interrupt],0x8 |
- | |
416 | mov [error_interrupt_entry],dword s8 |
- | |
417 | - | ||
418 | call show_error_parameters |
- | |
419 | - | ||
420 | mov edx,[0x3010] |
- | |
421 | mov [edx+0xa],byte 4 |
- | |
422 | - | ||
423 | jmp change_task |
- | |
424 | - | ||
425 | s9: |
- | |
426 | mov ax, os_data |
- | |
427 | mov ds, ax |
- | |
428 | mov es, ax |
- | |
429 | - | ||
430 | mov [error_interrupt],0x9 |
- | |
431 | mov [error_interrupt_entry],dword s9 |
- | |
432 | - | ||
433 | call show_error_parameters |
- | |
434 | - | ||
435 | mov edx,[0x3010] |
- | |
436 | mov [edx+0xa],byte 4 |
- | |
437 | - | ||
438 | jmp change_task |
- | |
439 | - | ||
440 | ; Invalid TSS |
- | |
441 | sa: |
- | |
442 | add esp, 4 ; error code |
- | |
443 | mov ax, os_data |
- | |
444 | mov ds, ax |
- | |
445 | mov es, ax |
- | |
446 | - | ||
447 | mov [error_interrupt],0xa |
- | |
448 | mov [error_interrupt_entry],dword sa |
- | |
449 | - | ||
450 | call show_error_parameters |
- | |
451 | - | ||
452 | mov edx,[0x3010] |
- | |
453 | mov [edx+0xa],byte 4 |
- | |
454 | - | ||
455 | jmp change_task |
- | |
456 | - | ||
457 | ; Segment not present |
- | |
458 | sb: |
- | |
459 | add esp, 4 |
- | |
460 | mov ax, os_data |
- | |
461 | mov ds, ax |
- | |
462 | mov es, ax |
- | |
463 | - | ||
464 | mov [error_interrupt],0xb |
- | |
465 | mov [error_interrupt_entry],dword sb |
- | |
466 | - | ||
467 | call show_error_parameters |
- | |
468 | - | ||
469 | mov edx,[0x3010] |
- | |
470 | mov [edx+0xa],byte 4 |
- | |
471 | - | ||
472 | jmp change_task |
- | |
473 | - | ||
474 | ; Stack fault exception |
- | |
475 | sc: |
- | |
476 | add esp, 4 |
- | |
477 | mov ax, os_data |
- | |
478 | mov ds, ax |
- | |
479 | mov es, ax |
- | |
480 | - | ||
481 | mov [error_interrupt],0xc |
- | |
482 | mov [error_interrupt_entry],dword sc |
- | |
483 | - | ||
484 | call show_error_parameters |
- | |
485 | - | ||
486 | mov edx,[0x3010] |
- | |
487 | mov [edx+0xa],byte 4 |
- | |
488 | - | ||
489 | jmp change_task |
- | |
490 | - | ||
491 | ; General Protection Fault |
- | |
492 | sd: |
- | |
493 | add esp, 4 |
- | |
494 | mov ax, os_data |
- | |
495 | mov ds, ax |
- | |
496 | mov es, ax |
- | |
497 | - | ||
498 | mov [error_interrupt],0xd |
- | |
499 | mov [error_interrupt_entry],dword sd |
- | |
500 | - | ||
501 | call show_error_parameters |
- | |
502 | - | ||
503 | mov edx,[0x3010] |
- | |
504 | mov [edx+0xa],byte 4 |
- | |
505 | - | ||
506 | jmp change_task |
- | |
507 | - | ||
508 | ; Page-Fault Exception |
- | |
509 | se: |
- | |
510 | add esp, 4 |
- | |
511 | mov ax, os_data |
- | |
512 | mov ds, ax |
- | |
513 | mov es, ax |
- | |
514 | - | ||
515 | mov [error_interrupt],0xe |
- | |
516 | mov [error_interrupt_entry],dword se |
- | |
517 | - | ||
518 | call show_error_parameters |
- | |
519 | - | ||
520 | mov edx,[0x3010] |
- | |
521 | mov [edx+0xa],byte 4 |
- | |
522 | - | ||
523 | jmp change_task |
- | |
524 | - | ||
525 | ; ?? |
- | |
526 | sf: |
- | |
527 | mov ax, os_data |
- | |
528 | mov ds, ax |
- | |
529 | mov es, ax |
- | |
530 | - | ||
531 | mov [error_interrupt],0xf |
- | |
532 | mov [error_interrupt_entry],dword sf |
- | |
533 | - | ||
534 | call show_error_parameters |
- | |
535 | - | ||
536 | mov edx,[0x3010] |
- | |
537 | mov [edx+0xa],byte 4 |
- | |
538 | - | ||
539 | jmp change_task |
- | |
540 | - | ||
541 | ; x87 FPU Floating-Point Error |
- | |
542 | s10: |
- | |
543 | mov ax, os_data |
- | |
544 | mov ds, ax |
- | |
545 | mov es, ax |
- | |
546 | - | ||
547 | mov [error_interrupt],0x10 |
- | |
548 | mov [error_interrupt_entry],dword s10 |
- | |
549 | - | ||
550 | call show_error_parameters |
- | |
551 | - | ||
552 | mov edx,[0x3010] |
- | |
553 | mov [edx+0xa],byte 4 |
- | |
554 | - | ||
555 | jmp change_task |
- | |
556 | - | ||
557 | ; Alignment Check Exception |
- | |
558 | s11: |
- | |
559 | add esp, 4 |
- | |
560 | mov ax, os_data |
- | |
561 | mov ds, ax |
- | |
562 | mov es, ax |
- | |
563 | - | ||
564 | mov [error_interrupt],0x11 |
- | |
565 | mov [error_interrupt_entry],dword s11 |
- | |
566 | - | ||
567 | call show_error_parameters |
- | |
568 | - | ||
569 | mov edx,[0x3010] |
- | |
570 | mov [edx+0xa],byte 4 |
- | |
571 | - | ||
Line 572... | Line 233... | ||
572 | jmp change_task |
233 | |
573 | - | ||
574 | 234 | ||
Line 575... | Line -... | ||
575 | - | ||
576 | 235 | ||
577 | writehex: |
- | |
578 | - | ||
579 | pusha |
- | |
580 | - | ||
581 | mov ecx,eax |
236 | |
582 | mov ax,word [printerrorat] |
- | |
583 | shl eax,16 |
237 | |
584 | mov ax,[esp+32+4] |
238 | writehex: |
585 | sub ax,60 |
239 | pusha |
586 | mov edx,1 |
- | |
587 | mov esi,8 |
- | |
Line 588... | Line 240... | ||
588 | mov ebx,0xffffff |
240 | |
589 | whl1: |
- | |
590 | push ecx |
241 | mov edi, [write_error_to] |
591 | and ecx,0xf |
242 | mov esi, 8 |
Line 592... | Line -... | ||
592 | add ecx,hexletters |
- | |
593 | mov edi,1 |
243 | @@: |
594 | - | ||
595 | mov cl,[ecx] |
244 | mov ecx, eax |
596 | mov edi,[write_error_to] |
245 | and ecx, 0xf |
Line 597... | Line 246... | ||
597 | mov [edi],cl |
246 | |
598 | dec [write_error_to] |
247 | mov cl,[ecx+hexletters] |
Line 599... | Line 248... | ||
599 | 248 | mov [edi],cl |
|
600 | pop ecx |
249 | dec edi |
Line 601... | Line 250... | ||
601 | shr ecx,4 |
250 | |
602 | sub eax,6*65536 |
- | |
603 | dec esi |
- | |
604 | jnz whl1 |
- | |
Line 605... | Line 251... | ||
605 | 251 | shr eax,4 |
|
606 | popa |
252 | dec esi |
607 | ret |
253 | jnz @b |
608 | 254 | ||
Line 636... | Line 282... | ||
636 | mov eax,[error_interrupt] |
282 | mov eax,[error_interrupt] |
637 | call writehex |
283 | call writehex |
Line 638... | Line 284... | ||
638 | 284 | ||
639 | mov eax,[0x3000] |
285 | mov eax,[0x3000] |
640 | shl eax,8 |
286 | shl eax,8 |
641 | cmp [0x80000+eax+0xB0],dword 0 |
287 | cmp [0x80000+eax+0xB0],byte 0 |
Line 642... | Line 288... | ||
642 | jnz .system_error |
288 | jnz .system_error |
643 | 289 | ||
644 | mov eax,[0x3000] |
290 | mov eax,[0x3000] |
Line 670... | Line 316... | ||
670 | 316 | ||
Line 671... | Line -... | ||
671 | - | ||
Line -... | Line 317... | ||
- | 317 | ||
- | 318 | ||
- | 319 | ; irq1 -> hid/keyboard.inc |
|
- | 320 | ||
- | 321 | ||
- | 322 | macro irqhh [num] |
|
672 | 323 | { |
|
- | 324 | forward |
|
Line 673... | Line 325... | ||
673 | ; irq1 -> hid/keyboard.inc |
325 | p_irq#num : |
674 | - | ||
675 | p_irq2: |
- | |
676 | - | ||
677 | call restore_caller |
- | |
678 | - | ||
679 | mov edi,2 ; 1 |
- | |
680 | call irqhandler ; 2/5 |
- | |
681 | - | ||
682 | call return_to_caller |
- | |
683 | - | ||
684 | jmp p_irq2 |
- | |
685 | - | ||
Line 686... | Line -... | ||
686 | p_irq3: |
- | |
687 | - | ||
688 | call restore_caller |
- | |
689 | - | ||
690 | mov edi,3 |
- | |
691 | call irqhandler |
- | |
692 | - | ||
693 | call return_to_caller |
- | |
694 | - | ||
695 | jmp p_irq3 |
- | |
696 | - | ||
697 | p_irq4: |
- | |
698 | - | ||
699 | call restore_caller |
- | |
700 | - | ||
701 | mov edi,4 |
- | |
702 | call irqhandler |
- | |
703 | - | ||
704 | call return_to_caller |
- | |
705 | - | ||
706 | jmp p_irq4 |
- | |
707 | - | ||
708 | p_irq5: |
- | |
709 | - | ||
710 | call restore_caller |
- | |
711 | - | ||
712 | mov edi,5 |
- | |
713 | call irqhandler |
- | |
714 | - | ||
715 | call return_to_caller |
- | |
716 | - | ||
717 | jmp p_irq5 |
- | |
718 | - | ||
719 | p_irq6: |
- | |
720 | - | ||
721 | call restore_caller |
- | |
722 | - | ||
723 | call fdc_irq |
- | |
724 | - | ||
725 | mov edi,6 |
- | |
726 | call irqhandler |
- | |
727 | - | ||
728 | call return_to_caller |
- | |
729 | - | ||
730 | jmp p_irq6 |
- | |
731 | - | ||
732 | p_irq7: |
- | |
733 | - | ||
734 | call restore_caller |
- | |
735 | - | ||
736 | mov edi,7 |
326 | pushad |
737 | call irqhandler |
- | |
738 | - | ||
739 | call return_to_caller |
- | |
740 | 327 | mov edi, num |
|
741 | jmp p_irq7 |
- | |
742 | - | ||
743 | p_irq8: |
- | |
744 | - | ||
745 | call restore_caller |
- | |
746 | - | ||
747 | mov edi,8 |
- | |
748 | call irqhandler |
- | |
749 | - | ||
750 | call return_to_caller |
- | |
751 | 328 | jmp irq_c |
|
752 | jmp p_irq8 |
- | |
753 | - | ||
754 | p_irq9: |
- | |
755 | - | ||
756 | call restore_caller |
- | |
757 | - | ||
758 | mov edi,9 |
- | |
759 | call irqhandler |
- | |
760 | - | ||
761 | call return_to_caller |
- | |
762 | 329 | } |
|
763 | jmp p_irq9 |
- | |
764 | - | ||
765 | p_irq10: |
- | |
766 | - | ||
767 | call restore_caller |
- | |
768 | - | ||
769 | mov edi,10 |
- | |
770 | call irqhandler |
- | |
771 | - | ||
772 | call return_to_caller |
- | |
773 | 330 | ||
774 | jmp p_irq10 |
- | |
775 | - | ||
776 | p_irq11: |
- | |
777 | - | ||
778 | call restore_caller |
- | |
779 | - | ||
780 | mov edi,11 |
- | |
781 | call irqhandler |
- | |
782 | - | ||
783 | call return_to_caller |
- | |
784 | - | ||
785 | jmp p_irq11 |
331 | irqhh 2,3,4,5,6,7,8,9,10,11,12,14,15 |
786 | - | ||
787 | p_irq12: |
332 | |
788 | 333 | irq_c: |
|
789 | call restore_caller |
334 | push ds es |
Line 790... | Line 335... | ||
790 | 335 | mov ax, os_data |
|
- | 336 | mov ds, ax |
|
- | 337 | mov es, ax |
|
791 | mov edi,12 |
338 | call irqhandler |
- | 339 | pop es ds |
|
- | 340 | popad |
|
Line 792... | Line 341... | ||
792 | call irqhandler |
341 | iret |
793 | 342 | ||
794 | call return_to_caller |
343 | irqD: |
Line 806... | Line 355... | ||
806 | mov al,0x20 |
355 | mov al,0x20 |
807 | out dx,al |
356 | out dx,al |
808 | mov dx,0x20 |
357 | mov dx,0x20 |
809 | out dx,al |
358 | out dx,al |
Line 810... | Line -... | ||
810 | - | ||
811 | call return_to_caller |
- | |
812 | - | ||
813 | jmp irqD |
- | |
814 | - | ||
815 | - | ||
816 | p_irq14: |
- | |
817 | - | ||
818 | call restore_caller |
- | |
819 | 359 | ||
820 | mov edi,14 |
- | |
821 | call irqhandler |
- | |
822 | - | ||
823 | call return_to_caller |
- | |
824 | - | ||
825 | jmp p_irq14 |
- | |
826 | - | ||
827 | p_irq15: |
- | |
828 | - | ||
829 | call restore_caller |
- | |
830 | 360 | pop es ds |
|
831 | mov edi,15 |
- | |
832 | call irqhandler |
- | |
833 | - | ||
834 | call return_to_caller |
- | |
835 | - | ||
836 | jmp p_irq15 |
- | |
837 | - | ||
838 | - | ||
839 | - | ||
840 | align 4 |
- | |
841 | restore_caller: |
- | |
842 | - | ||
843 | mov edi,[0x3000] |
- | |
844 | shl edi, 3 |
- | |
845 | mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b |
- | |
846 | 361 | popad |
|
847 | ret |
- | |
848 | - | ||
849 | align 4 |
- | |
Line 850... | Line -... | ||
850 | return_to_caller: |
- | |
851 | - | ||
852 | mov ebx,[0x3000] |
- | |
853 | shl bx,3 |
- | |
854 | add bx,tss0;t |
- | |
855 | mov [tss_irq12],bx |
- | |
856 | - | ||
857 | db 0xea |
- | |
Line 858... | Line -... | ||
858 | dd 0 |
- | |
Line 859... | Line 362... | ||
859 | tss_irq12 dw tss0;t |
362 | iret |
860 | 363 | ||
861 | ret |
364 | |
Line 934... | Line 437... | ||
934 | noa0: |
437 | noa0: |
Line 935... | Line 438... | ||
935 | 438 | ||
Line 936... | Line -... | ||
936 | ret |
- | |
937 | - | ||
938 | - | ||
939 | ; simply return control to interrupted process |
- | |
940 | unknown_interrupt: |
- | |
941 | iret |
- | |
Line 942... | Line 439... | ||
942 | 439 | ret |
|
943 | 440 | ||
Line 944... | Line 441... | ||
944 | 441 | ||
945 | - | ||
946 | set_application_table_status: |
442 | |
947 | push eax |
443 | set_application_table_status: |
948 | 444 | push eax |
|
Line 949... | Line 445... | ||
949 | mov eax,[0x3000] |
445 | |
Line 961... | Line 457... | ||
961 | 457 | ||
962 | clear_application_table_status: |
458 | clear_application_table_status: |
Line 963... | Line 459... | ||
963 | push eax |
459 | push eax |
964 | - | ||
965 | mov eax,[0x3000] |
460 | |
966 | ;imul eax,32 |
461 | mov eax,[0x3000] |
967 | shl eax, 5 |
462 | shl eax, 5 |
Line 968... | Line 463... | ||
968 | add eax,0x3000+4 |
463 | add eax,0x3000+4 |
Line 1354... | Line 849... | ||
1354 | ;draw_present db 0 |
849 | ;draw_present db 0 |
1355 | ;* end code - fix error redraw for terminate (2) - Mario79 |
850 | ;* end code - fix error redraw for terminate (2) - Mario79 |
Line 1356... | Line 851... | ||
1356 | 851 | ||
1357 | iglobal |
852 | iglobal |
1358 | boot_sched_1 db 'Building gdt tss pointer',0 |
853 | boot_sched_1 db 'Building gdt tss pointer',0 |
1359 | ;boot_sched_2 db 'Building gdt gate pointer',0 |
- | |
1360 | boot_sched_3 db 'Building interrupt table - TSS',0 |
- | |
1361 | boot_sched_3_2 db 'Building interrupt table - GDT',0 |
- | |
1362 | boot_sched_3_3 db 'Building interrupt table - IDT',0 |
- | |
1363 | boot_sched_4 db 'Building syscall interrupt table',0 |
854 | boot_sched_2 db 'Building IDT table',0 |
Line 1364... | Line 855... | ||
1364 | endg |
855 | endg |
Line 1365... | Line 856... | ||
1365 | 856 | ||
1366 | 857 | ||
1367 | build_scheduler: |
858 | build_scheduler: |
Line 1368... | Line 859... | ||
1368 | 859 | ||
1369 | mov esi,boot_sched_1 |
- | |
1370 | call boot_log |
- | |
1371 | call build_process_gdt_tss_pointer |
- | |
1372 | - | ||
1373 | ; mov esi,boot_sched_2 |
860 | mov esi,boot_sched_1 |
1374 | ; call boot_log |
861 | call boot_log |
Line 1375... | Line -... | ||
1375 | ; call build_process_gdt_gate_pointer |
- | |
1376 | - | ||
1377 | mov esi,boot_sched_3 |
- | |
1378 | call boot_log |
- | |
1379 | call build_interrupt_table |
862 | call build_process_gdt_tss_pointer |