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

📄 sys32.inc

📁 MenuetOS是一个用汇编开发的32/64位PC操作系统
💻 INC
📖 第 1 页 / 共 5 页
字号:
process_pid    db 'Kernel : Process - Forced terminate PID: 00000000',13,10,0
process_eip    db 'Kernel : Process - Forced terminate EIP: 00000000',13,10,0

write_error_to  dd  0x0

show_error_parameters:

        mov    [write_error_to],process_pid+48
        mov    eax,[0x3000]
        imul   eax,0x20
        mov    eax,[0x3000+4+eax]
        call   writehex

        mov    [write_error_to],process_error+48
        mov    eax,[error_interrupt]
        call   writehex

        mov    eax,[0x3000]
        imul   eax,tss_step
        mov    eax,[eax+tss_data+l.eip-tss_sceleton]
        mov    [write_error_to],process_eip+48
        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

keyboard_mode db 0
keyboard_data db 0

irq1:

        call  restore_caller

        xor   eax,eax
        mov   dx,0x60
        in    al,dx

        mov   [keyboard_data],al

        movzx edi,word [0x3004]  ; top window process
        shl   edi,1
        add   edi,0xc400
        movzx edi,word [edi]
        imul  edi,256
        add   edi,0x800B4
        mov   edx,[edi]

        mov   [keyboard_mode],dl

        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
        or    byte [shift],byte 1
        jmp   nokey
      noshifton1:
        cmp   al,54
        jnz   noshifton2
        or    byte [shift],byte 2
        jmp   nokey
      noshifton2:

        cmp   al,42+128
        jnz   noshiftoff1
        and   byte [shift],byte 2
        jmp   nokey
      noshiftoff1:
        cmp   al,54+128
        jnz   noshiftoff2
        and   byte [shift],byte 1
        jmp   nokey
      noshiftoff2:

        cmp   al,byte 128
        jb    yeskey
        jmp   nokey

      yeskey:

        mov   ecx,eax              ; plain key
        add   ecx,keymap
        mov   bl,[ecx]

        cmp   [alt],1             ; ctrl alt del
        jne   noctrlaltdel
        cmp   [ctrl],1
        jne   noctrlaltdel
        cmp   bl,134+48
        jne   noctrlaltdel
        mov   [ctrl_alt_del],1
        jmp   nokey

      ctrl_alt_del db 0

      noctrlaltdel:

        cmp   [ctrl],byte 1        ; ctrl on ?
        jne   nco
        sub   bl,96
      nco:

        cmp   [shift],byte 0       ; shift on ?
        je    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   [keyboard_mode],0  ; return from keymap
        jne   nokey

        cmp   bl,0
        jz    nokey

        movzx edx,byte [0xf400]
        cmp   edx,120
        jge   nokey
        inc   edx
        mov   [0xf400],dl
        mov   [0xf400+edx],bl

      nokey:

        cmp   [keyboard_mode],1  ; return scancode
        jne   no_scancode

        movzx edx,byte [0xf400]
        cmp   edx,120
        jge   no_scancode

        inc   edx
        mov   [0xf400],dl

        mov   al,[keyboard_data]
        mov   [0xf400+edx],al

      no_scancode:


        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

     call  fdc_irq

     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 $

⌨️ 快捷键说明

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