Subversion Repositories Kolibri OS

Rev

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