Rev 1161 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1161 | Rev 1198 | ||
---|---|---|---|
Line 201... | Line 201... | ||
201 | ; mov ecx, ebx |
201 | ; mov ecx, ebx |
202 | ; and ecx, 0xFFF |
202 | ; and ecx, 0xFFF |
203 | ; add edx, ecx |
203 | ; add edx, ecx |
204 | ; cmp dword [edx], 0 ; free block? |
204 | ; cmp dword [edx], 0 ; free block? |
205 | ; jnz .n |
205 | ; jnz .n |
206 | ; cmp dword [edx+4], |
206 | ; cmp dword [edx+4], |
207 | ; and [esi+V86_machine.mutex], 0 |
207 | ; and [esi+V86_machine.mutex], 0 |
208 | ; pop edi edx ecx ebx |
208 | ; pop edi edx ecx ebx |
209 | ; ret |
209 | ; ret |
Line 210... | Line 210... | ||
210 | 210 | ||
Line 349... | Line 349... | ||
349 | 349 | ||
350 | ; It is only possible to leave virtual-8086 mode by faulting to |
350 | ; It is only possible to leave virtual-8086 mode by faulting to |
351 | ; a protected-mode interrupt handler (typically the general-protection |
351 | ; a protected-mode interrupt handler (typically the general-protection |
Line 352... | Line -... | ||
352 | ; exception handler, which in turn calls the virtual 8086-mode monitor). |
- | |
353 | - | ||
354 | v86_debug_exc: |
- | |
355 | pushad |
- | |
356 | xor eax, eax |
- | |
357 | mov dr6, eax |
- | |
358 | mov bl, 1 |
- | |
359 | jmp v86_exc_c |
- | |
360 | - | ||
361 | v86_page_fault: |
- | |
362 | add esp, 4 |
- | |
363 | pushad |
- | |
364 | mov bl, 14 |
- | |
365 | jmp v86_exc_c |
- | |
366 | - | ||
367 | v86_except_16: |
- | |
368 | pushad |
- | |
369 | mov bl, 16 |
- | |
370 | jmp v86_exc_c |
- | |
371 | v86_except_19: |
- | |
372 | pushad |
- | |
373 | mov bl, 19 |
352 | ; exception handler, which in turn calls the virtual 8086-mode monitor). |
374 | 353 | ||
375 | iglobal |
354 | iglobal |
376 | v86_exc_str1 db 'V86 : unexpected exception ',0 |
355 | v86_exc_str1 db 'V86 : unexpected exception ',0 |
377 | v86_exc_str2 db ' at ',0 |
356 | v86_exc_str2 db ' at ',0 |
378 | v86_exc_str3 db ':',0 |
357 | v86_exc_str3 db ':',0 |
379 | v86_exc_str4 db 13,10,'V86 : faulted code:',0 |
358 | v86_exc_str4 db 13,10,'V86 : faulted code:',0 |
380 | v86_exc_str5 db ' (unavailable)',0 |
359 | v86_exc_str5 db ' (unavailable)',0 |
381 | v86_newline db 13,10,0 |
360 | v86_newline db 13,10,0 |
382 | v86_io_str1 db 'V86 : access to disabled i/o port ',0 |
361 | v86_io_str1 db 'V86 : access to disabled i/o port ',0 |
383 | v86_io_byte db ' (byte)',13,10,0 |
362 | v86_io_byte db ' (byte)',13,10,0 |
384 | v86_io_word db ' (word)',13,10,0 |
363 | v86_io_word db ' (word)',13,10,0 |
385 | v86_io_dword db ' (dword)',13,10,0 |
364 | v86_io_dword db ' (dword)',13,10,0 |
Line 386... | Line 365... | ||
386 | v86_irqerr db 'V86 : IRQ already hooked',13,10,0 |
365 | v86_irqerr db 'V86 : IRQ already hooked',13,10,0 |
387 | endg |
- | |
388 | - | ||
389 | v86_exc_c: |
- | |
390 | mov ax, app_data |
366 | endg |
- | 367 | ||
- | 368 | v86_exc_c: |
|
- | 369 | ; Did we all that we have wanted to do? |
|
- | 370 | cmp bl,1 |
|
391 | mov ds, ax |
371 | jne @f |
392 | mov es, ax |
372 | xor eax, eax |
393 | ; Did we all that we have wanted to do? |
373 | mov dr6, eax |
394 | mov eax, [esp+v86_regs.size+10h+18h] |
374 | @@: mov eax, [esp+v86_regs.size+10h+18h] |
395 | cmp word [esp+v86_regs.eip], ax |
375 | cmp word [esp+v86_regs.eip], ax |
396 | jnz @f |
376 | jnz @f |
Line 943... | Line 923... | ||
943 | mov cx, [eax*4] |
923 | mov cx, [eax*4] |
944 | mov word [esi-v86_regs.size+v86_regs.eip], cx |
924 | mov word [esi-v86_regs.size+v86_regs.eip], cx |
945 | mov cx, [eax*4+2] |
925 | mov cx, [eax*4+2] |
946 | mov word [esi-v86_regs.size+v86_regs.cs], cx |
926 | mov word [esi-v86_regs.size+v86_regs.cs], cx |
947 | and byte [esi-v86_regs.size+v86_regs.eflags+1], not 3 |
927 | and byte [esi-v86_regs.size+v86_regs.eflags+1], not 3 |
948 | push ebx |
- | |
949 | call update_counters |
928 | call update_counters |
950 | pop ebx |
929 | lea edi, [ebx + 0x100000000 - SLOT_BASE] |
951 | sub ebx, SLOT_BASE |
930 | shr edi, 3 |
952 | shr ebx, 8 |
931 | add edi, TASK_DATA |
953 | mov esi, [CURRENT_TASK] |
932 | call find_next_task.found |
954 | call do_change_task |
933 | call do_change_task |
955 | popad |
934 | popad |
956 | iretd |
935 | iretd |