?? irq_handlers.asm
字號:
;-------------------------------------------------------------------------------IRQ_Dummy_M: push ax mov al, END_OF_INTERR out MASTER_PIC, al pop ax sti iretIRQ_Dummy_S: push ax mov al, END_OF_INTERR out MASTER_PIC, al out SLAVE_PIC, al pop ax sti iret;-------------------------------------------------------------------------------;;;; TimerIRQ_0: cli push ax push ds mov ax, kernel_data - _GDT mov ds, ax inc DWORD [globalTime] mov eax, [taskRunningTime] dec eax mov [taskRunningTime], eax jz IRQ_0_Switch pop ds pop ax jmp IRQ_Dummy_MIRQ_0_Switch: mov al, END_OF_INTERR out MASTER_PIC, al pop ds pop ax GDT_Adjustment ;;;; mov [task_ebp], ebp mov ebp, [currentTaskP] mov [ds:ebp + s_task.r_eax], eax mov [ds:ebp + s_task.r_ebx], ebx mov [ds:ebp + s_task.r_ecx], ecx mov [ds:ebp + s_task.r_edx], edx mov [ds:ebp + s_task.r_esi], esi mov [ds:ebp + s_task.r_edi], edi mov eax, [task_ebp] mov [ds:ebp + s_task.r_ebp], eax ;;;; pop eax mov [ds:ebp + s_task.r_eip], eax ;;;; pop eax ; task_cs ;;;; pop eax mov [ds:ebp + s_task.r_eflags], eax ;;;; mov [ds:ebp + s_task.r_esp], esp ;;;; mov ax,kernel_data - _GDT mov ss,ax mov esp, [kernel_esp] ; switch to next task jmp Schedule;-------------------------------------------------------------------------------;;;; KeyboardIRQ_1: cli push ax push ds mov ax, kernel_data - _GDT mov ds, ax mov al, [irq_1_extscan] and al, al jz IRQ_1_Normal cmp al, 0xE1 ; check for 'Pause' key jz IRQ_1_Pause in al, KBD_PORT_A cmp al, 0x2A ; Prefix jz IRQ_1_Clr cmp al, 0xAA ; event.keyup jz IRQ_1_ClrIRQ_1_ExtPut: mov ah, [irq_1_extscan]IRQ_1_Put: mov [globalKey], ax or [globalKeySet], BYTE 1 jmp short IRQ_1_ClrIRQ_1_Pause: in al, KBD_PORT_A cmp al, 0xC5 ; 'Pause' key jz IRQ_1_ExtPut cmp al, 0x45 ; ? jz IRQ_1_ExtPut jmp short IRQ_1_ExitIRQ_1_Normal: in al, KBD_PORT_A cmp al, 0xFE ; Ignore it jz IRQ_1_Exit cmp al, 0xE1 ; Extended scan code jz IRQ_1_ExtKey cmp al, 0xE0 ; Extended scan code jz IRQ_1_ExtKey xor ah, ah jmp short IRQ_1_PutIRQ_1_ExtKey: mov [irq_1_extscan], alIRQ_1_Exit: in al, KBD_PORT_B mov ah, al or al, 0x80 out KBD_PORT_B, al mov al, ah out KBD_PORT_B, al pop ds pop ax jmp IRQ_Dummy_SIRQ_1_Clr: xor al, al mov [irq_1_extscan], al jmp short IRQ_1_Exitirq_1_extscan db 0;-------------------------------------------------------------------------------IRQ_2: cli jmp IRQ_Dummy_MIRQ_3: cli jmp IRQ_Dummy_MIRQ_4: cli jmp IRQ_Dummy_MIRQ_5: cli jmp IRQ_Dummy_MIRQ_6: cli jmp IRQ_Dummy_MIRQ_7: cli jmp IRQ_Dummy_MIRQ_8: cli jmp IRQ_Dummy_SIRQ_9: cli jmp IRQ_Dummy_SIRQ_10: cli jmp IRQ_Dummy_SIRQ_11: cli jmp IRQ_Dummy_SIRQ_12: cli jmp IRQ_Dummy_SIRQ_13: cli jmp IRQ_Dummy_SIRQ_14: cli jmp IRQ_Dummy_SIRQ_15: cli jmp IRQ_Dummy_S
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -