BITS 16
ORG 0x7C00
SECTION .text
JMP SHORT Main
;-----------------------------------------------------------------------------;
; MAIN -- Devinez ce que ça fait ^^' ;
;-----------------------------------------------------------------------------;
Main:
MOV AL, 00010001b
OUT 0x20, AL
OUT 0xA0, AL
MOV AL, 0x18
OUT 0x21, AL
MOV AL, 0x20
OUT 0xA1, AL
MOV AL, 00000100b
OUT 0x21, AL
MOV AL, 0x02
OUT 0xA1, AL
MOV AL, 00000001b
OUT 0x21, AL
OUT 0xA1, AL
MOV AL, 11111110b
OUT 0x21, AL
MOV AL, 11111111b
OUT 0xA1, AL
MOV WORD [0x60], Isr_Pit
MOV WORD [0x62], 0x0000
M_il:
HLT
JMP M_il
;-----------------------------------------------------------------------------;
; ISR_PIT -- Gère les interruptions du PIT de façon originale ;
;-----------------------------------------------------------------------------;
Isr_Pit:
CLI
MOV SI, FirstString
CALL Print_String
MOV SI, SecondString
CALL Print_String
MOV AL, 0x20
OUT 0x20, AL
STI
IRET
;-----------------------------------------------------------------------------;
; PRINT_STRING (DS:SI String) -- Imprime une châine de caractère à l'écran ;
;-----------------------------------------------------------------------------;
Print_String:
PUSH AX
PUSH BX
PUSH SI
MOV AH, 0x0e
MOV BH, 0x00
MOV BL, 0x07
MOV AL, [BYTE SI]
CMP AL, 0x00
JE PS_end
PS_loop:
INT 0x10
ADD SI, 0x01
MOV AL, [BYTE SI]
CMP AL, 0x00
JNE PS_loop
PS_end:
POP SI
POP BX
POP AX
RET
SECTION .data
FirstString:
db 'I caught an interruption from the PIT !!!', 0
SecondString:
db ' ', 0