Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [BITS 32]
- [ORG 0x10000] ; offset ajouté à chaque adresse dans le code
- CALL clear
- MOV ESI,mess1
- CALL print
- LIDT [idtptr] ; Chargement de la table d'interruption
- MOV ESI,mess2
- CALL print
- ;
- ; Initialisation du pic
- ;
- MOV AL,0x11 ; 00010001 (icw4 utile)
- OUT 0x20,AL ; dans icw1
- OUT 0xA0,AL ; de l'esclave aussi
- MOV AL,32 ; IRQ 0 en 32, ...
- OUT 0x21,AL ; dans icw2
- MOV AL,40 ; IRQ 8 en 40...
- OUT 0xA1,AL ; de l'esclave aussi
- MOV AL,0x4 ; patte 4
- OUT 0x21,AL ; dans icw3
- MOV AL,0x2 ; patte 4
- OUT 0xA1,AL ; de l'esclave aussi
- MOV AL,0x1 ; 00000001 (défaut)
- OUT 0x21,AL ; dans icw4
- OUT 0xA1,AL ; de l'esclave aussi
- MOV AL,0x0 ; aucun masque
- OUT 0x21,AL
- OUT 0xA1,AL ; pour l'esclave aussi
- MOV ESI,mess3
- CALL print
- ;
- ; Creation de la directory (table des pages de niveau 1) en 0x20000
- ;
- directory:
- MOV EAX,0x21003 ; 0x21000 = addr TP | 3 (bits RW+P)
- MOV EDI,0x20000 ; 0x20000 = addr directory
- MOV [EDI],EAX
- MOV ECX,1023 ; 1023 autres
- MOV EAX,0 ; entrées
- .autre: ADD EDI,4 ; sont
- MOV [EDI],EAX ; a zero
- LOOP .autre ; et absentes
- ;
- ; creation de la table des pages de niveau 2 en 0x21000
- ;
- TP:
- MOV ECX,1024 ; Toutes les
- MOV EAX,3 ; entrées i
- MOV EDI,0x21000
- .entree:MOV [EDI],EAX ; sont completees
- ADD EAX,0x1000 ; avec page i
- ADD EDI,4 ; | 3 (bits RW+P)
- LOOP .entree
- MOV ESI,mess4
- CALL print
- ;
- ; activation de la pagination
- ;
- MOV EAX,0x20000 ; adresse de la directory (20+000)
- MOV CR3,EAX ; dans le registre CR3
- MOV EAX,CR0 ; mise à 1
- OR EAX,0x80000000 ; du bit 31
- MOV CR0,EAX ; dans CR0 (pagination activee)
- ;
- ; Rétablissement des interruptions
- ;
- STI
- ;-------------------------------------------------
- ; Affichage de mess5 à l'aide de l'appel système
- ; sur stdout
- ;-------------------------------------------------
- MOV EAX, 4
- MOV EBX, 1
- MOV ECX, mess5
- MOV EDX, mess5_size
- INT 0x80
- ;-------------------------------------------------
- ; Affichage de mess6 à l'aide de l'appel système
- ; sur stdout
- ;-------------------------------------------------
- MOV EAX, 4
- MOV EBX, 1
- MOV ECX, mess6
- MOV EDX, mess6_size
- INT 0x80
- ;--------------------------------------------------
- ; copie de la page 0x10 dans la page 0x22 en RAM
- ;--------------------------------------------------
- MOV ESI,0x10000
- MOV EDI,0x22000
- MOV ECX,0x1000
- REP MOVSB
- ;-----------------------------------------------------------------------
- ; modification de la table des pages : la page 0x10 est en 0x22 en RAM
- ;-----------------------------------------------------------------------
- MOV dword [0x21000+4*0x10],0x22003
- ;-----------------
- ; Boucle infinie
- ;-----------------
- jmp $ ; boucle infinie
- ;--------------------------
- ; routines d'interruption
- ;--------------------------
- defaut: MOV ESI,IntD
- CALL print
- MOV AL,0x20
- OUT 0X20,AL ; fin d'interrupt pour le PIC
- IRET
- gp: MOV ESI,IntG
- CALL print
- MOV AL,0x20
- OUT 0X20,AL ; fin d'interrupt pour le PIC
- IRET
- pf: MOV ESI,IntP
- CALL print
- MOV AL,0x20
- OUT 0X20,AL ; fin d'interrupt pour le PIC
- IRET
- horlog: MOV DL,'.'
- CALL putchar
- MOV AL,0x20
- OUT 0X20,AL ; fin d'interrupt pour le PIC
- IRET
- clavier:
- CALL kbd_interrupt
- .hide
- MOV AL,0x20
- OUT 0X20,AL ; fin d'interrupt pour le PIC
- IRET
- ;----------------------------------------------------
- ; Inclusion des Routines d'appels systèmes INT 0x80
- ;----------------------------------------------------
- %include "syscalls.asm"
- ;----------------------------------------------------------------------------------------------
- ; table idt ext addr routine sur 16 bits, CS de cette routine, INTGATE,adresse routine 16 bits
- ; 0..31 : exceptions, 32..47 : IRQ, 48..255 : Utilisateur (INT)
- ;----------------------------------------------------------------------------------------------
- idt: dw defaut,0x0008,0x8E00,0x1 ;0 division par zéro
- dw defaut,0x0008,0x8E00,0x1 ;1 debug exception
- dw defaut,0x0008,0x8E00,0x1 ;2 NMI
- dw defaut,0x0008,0x8E00,0x1 ;3 Break point
- dw defaut,0x0008,0x8E00,0x1 ;4 INTO
- dw defaut,0x0008,0x8E00,0x1 ;5 Bound
- dw defaut,0x0008,0x8E00,0x1 ;6 invalid opcode
- dw defaut,0x0008,0x8E00,0x1 ;7 Device not available
- dw defaut,0x0008,0x8E00,0x1 ;8 Double fault
- dw defaut,0x0008,0x8E00,0x1 ;9 Copro segment overrun
- dw defaut,0x0008,0x8E00,0x1 ;10 Invalid task state segment
- dw defaut,0x0008,0x8E00,0x1 ;11 segment not present
- dw defaut,0x0008,0x8E00,0x1 ;12 stack segment fault
- dw gp,0x0008,0x8E00,0x1 ;13 general protection
- dw pf,0x0008,0x8E00,0x1 ;14 page fault
- dw defaut,0x0008,0x8E00,0x1 ;15 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;16 Floating point error
- dw defaut,0x0008,0x8E00,0x1 ;17 Alignement check
- dw defaut,0x0008,0x8E00,0x1 ;18 machine check
- dw defaut,0x0008,0x8E00,0x1 ;19 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;20 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;21 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;22 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;23 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;24 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;25 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;26 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;27 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;28 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;29 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;30 Reserved Intel
- dw defaut,0x0008,0x8E00,0x1 ;31 Reserved Intel
- dw horlog,0x0008,0x8E00,0x1 ;32 Timer ------------
- dw clavier,0x0008,0x8E00,0x1 ;33 Clavier
- dw defaut,0x0008,0x8E00,0x1 ;34 Controleur esclave
- dw defaut,0x0008,0x8E00,0x1 ;35 série 2
- dw defaut,0x0008,0x8E00,0x1 ;36 série 1
- dw defaut,0x0008,0x8E00,0x1 ;37 // 2
- dw defaut,0x0008,0x8E00,0x1 ;38 diskette
- dw defaut,0x0008,0x8E00,0x1 ;39 // 1
- dw defaut,0x0008,0x8E00,0x1 ;40 Reserved IRQ
- dw defaut,0x0008,0x8E00,0x1 ;41 Reserved IRQ
- dw defaut,0x0008,0x8E00,0x1 ;42 Reserved IRQ
- dw defaut,0x0008,0x8E00,0x1 ;43 Reserved IRQ
- dw defaut,0x0008,0x8E00,0x1 ;44 Reserved IRQ
- dw defaut,0x0008,0x8E00,0x1 ;45 Copro
- dw defaut,0x0008,0x8E00,0x1 ;46 disk
- dw defaut,0x0008,0x8E00,0x1 ;47 Reserved IRQ------
- dw defaut,0x0008,0x8E00,0x1 ;48
- dw defaut,0x0008,0x8E00,0x1 ;49
- dw defaut,0x0008,0x8E00,0x1 ;50
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw defaut,0x0008,0x8E00,0x1
- dw interr,0x0008,0x8E00,0x1 ;80 Appels système
- idtend:
- idtptr:
- dw idtend - idt ; limite
- dd idt ; base
- %include "screen.asm" ; procédures de gestion d'écran
- %include "keyb.asm" ; procédure de gestion de clavier
- ;===========================
- ; Gestion du buffer clavier
- ;===========================
- ; Besoin de variables buffer
- mess1 DB 'Chargement du kernel : OK.',10,0
- mess1_size DB $-mess1
- mess2 DB 'Chargement de la table des interruptions : OK.',10,0
- mess2_size DB $-mess2
- mess3 DB 'Initialisation du pic : OK.',10,0
- mess3_size DB $-mess3
- mess4 DB 'Creation des tables de pages : OK.',10,0
- mess4_size DB $-mess4
- mess5 DB 'Message affiche via syscall 4 : OK.',10,0
- mess5_size DB $-mess5
- mess6 DB 'Test Appel Read stdin : ',10,0
- mess6_size DB $-mess6
- IntP DB 10,'Interruption défaut de page',10,0
- IntD DB 10,'Interruption non gérée',10,0
- IntG DB 10,'Interruption global protection',10,0
Advertisement
Add Comment
Please, Sign In to add comment