⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys32.inc

📁 Menuet 操作系统源代码。 非常难得的东西
💻 INC
📖 第 1 页 / 共 5 页
字号:
        imul   eax,0x20
        mov    eax,[0x3000+4+eax]
        call   writehex
   
        mov    [write_error_to],process_error+43
        mov    eax,[error_interrupt]
        call   writehex

        mov    eax,[0x3000]
        imul   eax,128
        mov    eax,[eax+0x40000+l.eip-tss_sceleton]
        mov    [write_error_to],process_eip+43
        call   writehex

        mov    esi,process_error
        call   sys_msg_board_str

        mov    esi,process_pid
        call   sys_msg_board_str

        mov    esi,process_eip
        call   sys_msg_board_str

        ret

irq1:
   
        call   restore_caller

        mov    [8*0x100000+600*3],dword 0xffffffff
   
        xor    eax,eax
        mov    dx,0x60
        in     al,dx
   
        cmp   al,29             ; CTRL
        jne   noctrlon
        mov   [ctrl],byte 1
        jmp   nokey
      noctrlon:
   
        cmp   al,29+128
        jne   noctrloff
        mov   [ctrl],byte 0
        jmp   nokey
      noctrloff:
   
        cmp   al,56             ; ALT
        jnz   noalton1
        mov   [alt],byte 1
        jmp   nokey
      noalton1:
   
        cmp   al,184
        jnz   noaltoff1
        mov   [alt],byte 0
        jmp   nokey
      noaltoff1:
   
        cmp   al,42             ; SHIFT
        jnz   noshifton1
        mov   [shift],byte 1
        jmp   nokey
      noshifton1:
        cmp   al,54
        jnz   noshifton2
        mov   [shift],byte 1
        jmp   nokey
      noshifton2:
   
        cmp   al,42+128
        jnz   noshiftoff1
        mov   [shift],byte 0
        jmp   nokey
      noshiftoff1:
        cmp   al,54+128
        jnz   noshiftoff2
        mov   [shift],byte 0
        jmp   nokey
      noshiftoff2:
   
        cmp   al,byte 128
        jb    yeskey
        jmp   nokey
   
      yeskey:
   
        mov   ecx,eax              ; plain key
        add   ecx,keymap
        mov   bl,[ecx]
   
        cmp   [ctrl],byte 1        ; ctrl on ?
        jne   nco
        sub   bl,96
      nco:
   
        cmp   [shift],byte 1       ; shift on ?
        jnz   nso
        mov   ecx,eax
        add   ecx,keymap_shift
        mov   bl,[ecx]
      nso:
   
        cmp   [alt],byte 1         ; alt on ?
        jz    yao
        jmp   nao
      yao:
        mov   ecx,eax
        add   ecx,keymap_alt
        mov   bl,[ecx]
   
        ; alt mouse ?
   
        xor   edx,edx
        cmp   bl,178
        jnz   noaltup
        mov   edx,5*65536
        mov   bl,255
      noaltup:
        cmp   bl,177
        jnz   noaltdown
        mov   edx,251*65536
        mov   bl,255
      noaltdown:
        cmp   bl,176
        jnz   noaltleft
        mov   edx,251*256
        mov   bl,255
      noaltleft:
        cmp   bl,179
        jnz   noaltright
        mov   edx,5*256
        mov   bl,255
      noaltright:
        cmp   bl,' '
        jnz   noaltmbd
        mov   bl,[altmouseb]
        add   bl,1
        and   bl,1
        mov   [altmouseb],bl
        mov   bl,255
      noaltmbd:
        cmp   bl,255
        jnz   nao
        mov   [0xF604],byte 1 ; ps2 data
        mov   [0xfb00],byte 0 ; ps2 chunk count
        mov   [0x2E0000+4096*12],word 3 ; mouse data count
        movzx ebx,byte [altmouseb]
        or    edx,ebx
        mov   [0x2E0000+4096*12+0x10],edx
        mov   bl,0
      nao:
   
        cmp   bl,0
        jz    nokey
        mov   [0xf401],bl
        mov   [0xf400],byte 1
   
      nokey:
        
        mov   [check_idle_semaphore],5

        mov   al,0x20                   ; ready for next irq
        mov   dx,0x20
        out   dx,al
   
        call  return_to_caller

        jmp   irq1
   
   
shift      db  0x0
ctrl       db  0x0
alt        db  0x0
altgr      db  0x0
altmouseb  db  0x0
   
irq5:   
   
     call   restore_caller

     mov    dx,word [sb16]
     add    dx,0xe
     in     al,dx

;     mov    byte [SB16_Status],0
   
     mov    [check_idle_semaphore],5

     mov    al,0x20
     out    0x20,al
   
     call  return_to_caller
   
     jmp   irq5
   
irqD:
   
     call   restore_caller

     mov   dx,0xf0
     mov   al,0
     out   dx,al
   
     mov   dx,0xa0
     mov   al,0x20
     out   dx,al
     mov   dx,0x20
     out   dx,al
   
     mov   ds,cx
     mov   es,cx
     mov   fs,cx
   
     call  return_to_caller

     jmp   irqD

p_irq2:

     call  restore_caller
     
     mov   edi,2               ; 1
     call  irqhandler          ; 2/5

     call  return_to_caller
   
     jmp   p_irq2

p_irq3:
     
     call  restore_caller
     
     mov   edi,3
     call  irqhandler
     
     call  return_to_caller
     
     jmp   p_irq3
   
p_irq4:
     
     call  restore_caller

     mov   edi,4
     call  irqhandler

     call  return_to_caller
     
     jmp   p_irq4
   
p_irq5:
     
     call  restore_caller

     mov   edi,5
     call  irqhandler

     call  return_to_caller

     jmp   p_irq5
   
p_irq6:
     
     call  restore_caller

     mov   edi,6
     call  irqhandler

     call  return_to_caller
     
     jmp   p_irq6
   
p_irq7:
     
     call  restore_caller

     mov   edi,7
     call  irqhandler

     call  return_to_caller
     
     jmp   p_irq7
   
p_irq8:
     
     call  restore_caller

     mov   edi,8
     call  irqhandler

     call  return_to_caller

     jmp   p_irq8

p_irq9:
     
     call  restore_caller

     mov   edi,9
     call  irqhandler

     call  return_to_caller

     jmp   p_irq9
   
p_irq10:
     
     call  restore_caller

     mov   edi,10
     call  irqhandler
     
     call  return_to_caller

     jmp   p_irq10
   
p_irq11:

     call  restore_caller

     mov   edi,11
     call  irqhandler

     call  return_to_caller

     jmp   p_irq11

p_irq12:

      call  restore_caller
        
      mov   edi,12
      call  irqhandler

      call  return_to_caller

      jmp   p_irq12

p_irq13:

     call  restore_caller

     mov   edi,13
     call  irqhandler

     call  return_to_caller
   
     jmp   p_irq13

p_irq14:
     
     call  restore_caller

     mov   edi,14
     call  irqhandler
     
     call  return_to_caller

     jmp   p_irq14
   
p_irq15:

     call  restore_caller

     mov   edi,15
     call  irqhandler
     
     call  return_to_caller
   
     jmp   p_irq15


restore_caller:
   
      mov    edi,[0x3000] 
      imul   edi,8
      mov    [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b

      ret
     
return_to_caller:

      mov   ebx,[0x3000]
      shl   bx,3
      add   bx,tss0t
      mov   [tss_irq12],bx

           db    0xea                      
           dd    0                         
tss_irq12  dw    tss0t                     

           ret

irqh dd 0x0

irqhandler:

     push   edi

     mov    esi,edi          ; 1
     shl    esi,6            ; 1
     add    esi,irq00read    ; 1
     shl    edi,12           ; 1
     add    edi,0x2E0000

     mov    [check_idle_semaphore],5

   irqnewread:
   
     mov    dx,[esi]         ; 2+
   
     cmp    dx,0             ; 1
     jz     irqover
     cmp    [esi+3],byte 1   ; 2     ; byte read
     jne    noirqbyte        ; 4-11
   
     in     al,dx
   
     mov    edx,[edi]
     cmp    edx,4000
     je     irqfull
     mov    ebx,edi
     add    ebx,0x10
     add    ebx,edx
     mov    [ebx],al
     add    edx,1
     mov    [edi],edx
   
     add    esi,4
     jmp    irqnewread
   
   noirqbyte:
   
   
     cmp    [esi+3],byte 2     ; word read
     jne    noirqword
   
     in     ax,dx
   
     mov    edx,[edi]
     cmp    edx,4000
     je     irqfull
     mov    ebx,edi
     add    ebx,0x10
     add    ebx,edx
     mov    [ebx],ax
     add    edx,2
     mov    [edi],edx
     add    esi,4
     jmp    irqnewread
   
   noirqword:
   irqfull:
   irqover:
   
     mov    al,0x20            ; ready for next irq
     out    0x20,al
   
     pop    ebx
     cmp    ebx,7
     jbe    noa0
     out    0xa0,al
   noa0:

     ret
   
i_unknown10:
        push  dword $
        jmp   i_u_errorhandle
i_unknown11:
        push  dword $
        jmp   i_u_errorhandle
i_unknown12:
        push  dword $
        jmp   i_u_errorhandle
i_unknown13:
        push  dword $
        jmp   i_u_errorhandle
i_unknown14:
        push  dword $
        jmp   i_u_errorhandle
i_unknown15:
        push  dword $
        jmp   i_u_errorhandle
i_unknown16:
        push  dword $
        jmp   i_u_errorhandle
i_unknown17:
        push  dword $
        jmp   i_u_errorhandle
i_unknown18:
        push  dword $
        jmp   i_u_errorhandle
i_unknown19:
        push  dword $
        jmp   i_u_errorhandle
i_unknown1a:
        push  dword $
        jmp   i_u_errorhandle
i_unknown1b:
        push  dword $
        jmp   i_u_errorhandle
i_unknown1c:
        push  dword $
        jmp   i_u_errorhandle
i_unknown1d:
        push  dword $
        jmp   i_u_errorhandle
i_unknown1e:
        push  dword $
        jmp   i_u_errorhandle
i_unknown1f:
        push  dword $
        jmp   i_u_errorhandle
   
   
i_unknown20:
        push  dword $
        jmp   i_u_errorhandle
i_unknown21:
        push  dword $
        jmp   i_u_errorhandle
i_unknown22:
        push  dword $
        jmp   i_u_errorhandle
i_unknown23:
        push  dword $
        jmp   i_u_errorhandle
i_unknown24:
        push  dword $
        jmp   i_u_errorhandle
i_unknown25:
        push  dword $
        jmp   i_u_errorhandle
i_unknown26:
        push  dword $
        jmp   i_u_errorhandle
i_unknown27:
        push  dword $
        jmp   i_u_errorhandle
i_unknown28:
        push  dword $
        jmp   i_u_errorhandle
i_unknown29:
        push  dword $
        jmp   i_u_errorhandle
i_unknown2a:
        push  dword $
        jmp   i_u_errorhandle
i_unknown2b:
        push  dword $
        jmp   i_u_errorhandle
i_unknown2c:
        push  dword $
        jmp   i_u_errorhandle
i_unknown2d:
        push  dword $
        jmp   i_u_errorhandle
i_unknown2e:
        push  dword $
        jmp   i_u_errorhandle
i_unknown2f:
        push  dword $
        jmp   i_u_errorhandle
   
   
i_unknown30:
        push  dword $
        jmp   i_u_errorhandle
i_unknown31:
        push  dword $
        jmp   i_u_errorhandle
i_unknown32:
        push  dword $
        jmp   i_u_errorhandle
i_unknown33:
        push  dword $
        jmp   i_u_errorhandle
i_unknown34:
        push  dword $
        jmp   i_u_errorhandle
i_unknown35:
        push  dword $
        jmp   i_u_errorhandle
i_unknown36:
        push  dword $

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -