Guest User

kern.asm

a guest
Nov 7th, 2011
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. [BITS 32]
  2. [ORG 0x10000]   ; offset ajouté à chaque adresse dans le code
  3.  
  4.     CALL    clear
  5.     MOV     ESI,mess1
  6.     CALL    print
  7.     LIDT    [idtptr] ; Chargement de la table d'interruption
  8.     MOV     ESI,mess2
  9.     CALL    print
  10. ;
  11. ; Initialisation du pic
  12. ;
  13.     MOV     AL,0x11 ; 00010001 (icw4 utile)
  14.     OUT     0x20,AL ; dans icw1
  15.     OUT     0xA0,AL ; de l'esclave aussi
  16.  
  17.     MOV     AL,32   ; IRQ 0 en 32, ...
  18.     OUT     0x21,AL ; dans icw2
  19.     MOV     AL,40   ; IRQ 8 en 40...
  20.     OUT     0xA1,AL ; de l'esclave aussi
  21.  
  22.     MOV     AL,0x4  ; patte 4
  23.     OUT     0x21,AL ; dans icw3
  24.     MOV     AL,0x2  ; patte 4
  25.     OUT     0xA1,AL ; de l'esclave aussi
  26.  
  27.     MOV     AL,0x1  ; 00000001 (défaut)
  28.     OUT     0x21,AL ; dans icw4
  29.     OUT     0xA1,AL ; de l'esclave aussi
  30.  
  31.     MOV     AL,0x0  ; aucun masque
  32.     OUT     0x21,AL
  33.     OUT     0xA1,AL ; pour l'esclave aussi
  34.  
  35.     MOV     ESI,mess3
  36.     CALL    print
  37. ;
  38. ; Creation de la directory (table des pages de niveau 1) en 0x20000
  39. ;
  40. directory:
  41.     MOV     EAX,0x21003     ; 0x21000 = addr TP | 3 (bits RW+P)
  42.     MOV     EDI,0x20000     ; 0x20000 = addr directory
  43.     MOV     [EDI],EAX  
  44.  
  45.     MOV     ECX,1023        ; 1023 autres
  46.     MOV     EAX,0       ; entrées
  47. .autre: ADD     EDI,4       ; sont
  48.     MOV     [EDI],EAX       ; a zero
  49.     LOOP    .autre      ; et absentes
  50. ;
  51. ; creation de la table des pages de niveau 2 en 0x21000
  52. ;
  53. TP:
  54.     MOV     ECX,1024        ; Toutes les
  55.     MOV     EAX,3       ; entrées i
  56.     MOV     EDI,0x21000    
  57. .entree:MOV     [EDI],EAX       ; sont completees
  58.     ADD     EAX,0x1000      ; avec page i
  59.     ADD     EDI,4       ; | 3 (bits RW+P)
  60.     LOOP    .entree
  61.  
  62.     MOV     ESI,mess4
  63.     CALL    print
  64. ;
  65. ; activation de la pagination
  66. ;
  67.     MOV     EAX,0x20000 ; adresse de la directory (20+000)
  68.     MOV     CR3,EAX     ; dans le registre CR3
  69.     MOV     EAX,CR0     ; mise à 1
  70.     OR      EAX,0x80000000  ; du bit 31
  71.     MOV     CR0,EAX     ; dans CR0 (pagination activee)
  72.  
  73. ;
  74. ; Rétablissement des interruptions
  75. ;
  76.     STI
  77.  
  78. ;-------------------------------------------------
  79. ; Affichage de mess5 à l'aide de l'appel système
  80. ; sur stdout
  81. ;-------------------------------------------------
  82.     MOV EAX, 4
  83.     MOV EBX, 1
  84.     MOV ECX, mess5
  85.     MOV EDX, mess5_size
  86.     INT 0x80
  87.  
  88. ;-------------------------------------------------
  89. ; Affichage de mess6 à l'aide de l'appel système
  90. ; sur stdout
  91. ;-------------------------------------------------
  92.     MOV EAX, 4
  93.     MOV EBX, 1
  94.     MOV ECX, mess6
  95.     MOV EDX, mess6_size
  96.     INT 0x80
  97.  
  98. ;--------------------------------------------------
  99. ; copie de la page 0x10 dans la page 0x22 en RAM
  100. ;--------------------------------------------------
  101.     MOV     ESI,0x10000
  102.     MOV     EDI,0x22000
  103.     MOV     ECX,0x1000
  104.     REP     MOVSB
  105.  
  106. ;-----------------------------------------------------------------------
  107. ; modification de la table des pages : la page 0x10 est en 0x22 en RAM
  108. ;-----------------------------------------------------------------------
  109.     MOV     dword [0x21000+4*0x10],0x22003
  110.  
  111. ;-----------------
  112. ; Boucle infinie
  113. ;-----------------
  114.     jmp     $   ; boucle infinie
  115.  
  116. ;--------------------------
  117. ; routines d'interruption
  118. ;--------------------------
  119. defaut: MOV     ESI,IntD
  120.     CALL    print
  121.     MOV     AL,0x20
  122.     OUT     0X20,AL ; fin d'interrupt pour le PIC
  123.     IRET
  124.  
  125. gp: MOV     ESI,IntG
  126.     CALL    print
  127.     MOV     AL,0x20
  128.     OUT     0X20,AL ; fin d'interrupt pour le PIC
  129.     IRET
  130.  
  131. pf: MOV     ESI,IntP
  132.     CALL    print
  133.     MOV     AL,0x20
  134.     OUT     0X20,AL ; fin d'interrupt pour le PIC
  135.     IRET
  136.  
  137. horlog: MOV     DL,'.'
  138.     CALL    putchar
  139.     MOV     AL,0x20
  140.     OUT     0X20,AL ; fin d'interrupt pour le PIC
  141.     IRET
  142.  
  143. clavier:
  144.     CALL    kbd_interrupt
  145. .hide
  146.     MOV     AL,0x20
  147.     OUT     0X20,AL ; fin d'interrupt pour le PIC
  148.  
  149.     IRET
  150.  
  151. ;----------------------------------------------------
  152. ; Inclusion des Routines d'appels systèmes INT 0x80
  153. ;----------------------------------------------------
  154. %include "syscalls.asm"
  155.  
  156. ;----------------------------------------------------------------------------------------------
  157. ; table idt ext addr routine sur 16 bits, CS de cette routine, INTGATE,adresse routine 16 bits
  158. ; 0..31 : exceptions, 32..47 : IRQ, 48..255 : Utilisateur (INT)
  159. ;----------------------------------------------------------------------------------------------
  160. idt:    dw  defaut,0x0008,0x8E00,0x1    ;0 division par zéro
  161.     dw  defaut,0x0008,0x8E00,0x1    ;1 debug exception
  162.     dw  defaut,0x0008,0x8E00,0x1    ;2 NMI
  163.     dw  defaut,0x0008,0x8E00,0x1    ;3 Break point
  164.     dw  defaut,0x0008,0x8E00,0x1    ;4 INTO
  165.     dw  defaut,0x0008,0x8E00,0x1    ;5 Bound
  166.     dw  defaut,0x0008,0x8E00,0x1    ;6 invalid opcode
  167.     dw  defaut,0x0008,0x8E00,0x1    ;7 Device not available
  168.     dw  defaut,0x0008,0x8E00,0x1    ;8 Double fault
  169.     dw  defaut,0x0008,0x8E00,0x1    ;9 Copro segment overrun
  170.     dw  defaut,0x0008,0x8E00,0x1    ;10 Invalid task state segment
  171.     dw  defaut,0x0008,0x8E00,0x1    ;11 segment not present
  172.     dw  defaut,0x0008,0x8E00,0x1    ;12 stack segment fault
  173.     dw  gp,0x0008,0x8E00,0x1        ;13 general protection
  174.     dw  pf,0x0008,0x8E00,0x1        ;14 page fault
  175.     dw  defaut,0x0008,0x8E00,0x1    ;15 Reserved Intel
  176.     dw  defaut,0x0008,0x8E00,0x1    ;16 Floating point error
  177.     dw  defaut,0x0008,0x8E00,0x1    ;17 Alignement check
  178.     dw  defaut,0x0008,0x8E00,0x1    ;18 machine check
  179.     dw  defaut,0x0008,0x8E00,0x1    ;19 Reserved Intel
  180.     dw  defaut,0x0008,0x8E00,0x1    ;20 Reserved Intel
  181.     dw  defaut,0x0008,0x8E00,0x1    ;21 Reserved Intel
  182.     dw  defaut,0x0008,0x8E00,0x1    ;22 Reserved Intel
  183.     dw  defaut,0x0008,0x8E00,0x1    ;23 Reserved Intel
  184.     dw  defaut,0x0008,0x8E00,0x1    ;24 Reserved Intel
  185.     dw  defaut,0x0008,0x8E00,0x1    ;25 Reserved Intel
  186.     dw  defaut,0x0008,0x8E00,0x1    ;26 Reserved Intel
  187.     dw  defaut,0x0008,0x8E00,0x1    ;27 Reserved Intel
  188.     dw  defaut,0x0008,0x8E00,0x1    ;28 Reserved Intel
  189.     dw  defaut,0x0008,0x8E00,0x1    ;29 Reserved Intel
  190.     dw  defaut,0x0008,0x8E00,0x1    ;30 Reserved Intel
  191.     dw  defaut,0x0008,0x8E00,0x1    ;31  Reserved Intel
  192.     dw  horlog,0x0008,0x8E00,0x1    ;32 Timer   ------------
  193.     dw  clavier,0x0008,0x8E00,0x1   ;33 Clavier
  194.     dw  defaut,0x0008,0x8E00,0x1    ;34 Controleur esclave
  195.     dw  defaut,0x0008,0x8E00,0x1    ;35 série 2
  196.     dw  defaut,0x0008,0x8E00,0x1    ;36 série 1
  197.     dw  defaut,0x0008,0x8E00,0x1    ;37 // 2
  198.     dw  defaut,0x0008,0x8E00,0x1    ;38 diskette
  199.     dw  defaut,0x0008,0x8E00,0x1    ;39 // 1
  200.     dw  defaut,0x0008,0x8E00,0x1    ;40 Reserved IRQ
  201.     dw  defaut,0x0008,0x8E00,0x1    ;41 Reserved IRQ
  202.     dw  defaut,0x0008,0x8E00,0x1    ;42 Reserved IRQ
  203.     dw  defaut,0x0008,0x8E00,0x1    ;43 Reserved IRQ
  204.     dw  defaut,0x0008,0x8E00,0x1    ;44 Reserved IRQ
  205.     dw  defaut,0x0008,0x8E00,0x1    ;45 Copro
  206.     dw  defaut,0x0008,0x8E00,0x1    ;46 disk
  207.     dw  defaut,0x0008,0x8E00,0x1    ;47 Reserved IRQ------
  208.     dw  defaut,0x0008,0x8E00,0x1    ;48
  209.     dw  defaut,0x0008,0x8E00,0x1    ;49
  210.     dw  defaut,0x0008,0x8E00,0x1    ;50
  211.     dw  defaut,0x0008,0x8E00,0x1
  212.     dw  defaut,0x0008,0x8E00,0x1
  213.     dw  defaut,0x0008,0x8E00,0x1
  214.     dw  defaut,0x0008,0x8E00,0x1
  215.     dw  defaut,0x0008,0x8E00,0x1
  216.     dw  defaut,0x0008,0x8E00,0x1
  217.     dw  defaut,0x0008,0x8E00,0x1
  218.     dw  defaut,0x0008,0x8E00,0x1
  219.     dw  defaut,0x0008,0x8E00,0x1
  220.     dw  defaut,0x0008,0x8E00,0x1
  221.     dw  defaut,0x0008,0x8E00,0x1       
  222.     dw  defaut,0x0008,0x8E00,0x1       
  223.     dw  defaut,0x0008,0x8E00,0x1    
  224.     dw  defaut,0x0008,0x8E00,0x1
  225.     dw  defaut,0x0008,0x8E00,0x1    
  226.     dw  defaut,0x0008,0x8E00,0x1
  227.     dw  defaut,0x0008,0x8E00,0x1   
  228.     dw  defaut,0x0008,0x8E00,0x1   
  229.     dw  defaut,0x0008,0x8E00,0x1    
  230.     dw  defaut,0x0008,0x8E00,0x1    
  231.     dw  defaut,0x0008,0x8E00,0x1    
  232.     dw  defaut,0x0008,0x8E00,0x1    
  233.     dw  defaut,0x0008,0x8E00,0x1    
  234.     dw  defaut,0x0008,0x8E00,0x1    
  235.     dw  defaut,0x0008,0x8E00,0x1    
  236.     dw  defaut,0x0008,0x8E00,0x1
  237.     dw  defaut,0x0008,0x8E00,0x1
  238.     dw  defaut,0x0008,0x8E00,0x1
  239.     dw  defaut,0x0008,0x8E00,0x1
  240.     dw  defaut,0x0008,0x8E00,0x1
  241.     dw  defaut,0x0008,0x8E00,0x1
  242.     dw  defaut,0x0008,0x8E00,0x1
  243.     dw  defaut,0x0008,0x8E00,0x1
  244.     dw  defaut,0x0008,0x8E00,0x1
  245.     dw  defaut,0x0008,0x8E00,0x1
  246.     dw  defaut,0x0008,0x8E00,0x1
  247.     dw  defaut,0x0008,0x8E00,0x1       
  248.     dw  defaut,0x0008,0x8E00,0x1       
  249.     dw  defaut,0x0008,0x8E00,0x1    
  250.     dw  defaut,0x0008,0x8E00,0x1
  251.     dw  defaut,0x0008,0x8E00,0x1    
  252.     dw  defaut,0x0008,0x8E00,0x1
  253.     dw  defaut,0x0008,0x8E00,0x1   
  254.     dw  defaut,0x0008,0x8E00,0x1   
  255.     dw  defaut,0x0008,0x8E00,0x1    
  256.     dw  defaut,0x0008,0x8E00,0x1    
  257.     dw  defaut,0x0008,0x8E00,0x1    
  258.     dw  defaut,0x0008,0x8E00,0x1    
  259.     dw  defaut,0x0008,0x8E00,0x1    
  260.     dw  defaut,0x0008,0x8E00,0x1    
  261.     dw  defaut,0x0008,0x8E00,0x1    
  262.     dw  defaut,0x0008,0x8E00,0x1
  263.     dw  defaut,0x0008,0x8E00,0x1
  264.     dw  defaut,0x0008,0x8E00,0x1
  265.     dw  defaut,0x0008,0x8E00,0x1
  266.     dw  defaut,0x0008,0x8E00,0x1
  267.     dw  defaut,0x0008,0x8E00,0x1
  268.     dw  defaut,0x0008,0x8E00,0x1
  269.     dw  defaut,0x0008,0x8E00,0x1
  270.     dw  defaut,0x0008,0x8E00,0x1
  271.     dw  defaut,0x0008,0x8E00,0x1
  272.     dw  defaut,0x0008,0x8E00,0x1
  273.     dw  defaut,0x0008,0x8E00,0x1       
  274.     dw  defaut,0x0008,0x8E00,0x1       
  275.     dw  defaut,0x0008,0x8E00,0x1    
  276.     dw  defaut,0x0008,0x8E00,0x1
  277.     dw  defaut,0x0008,0x8E00,0x1    
  278.     dw  defaut,0x0008,0x8E00,0x1
  279.     dw  defaut,0x0008,0x8E00,0x1   
  280.     dw  defaut,0x0008,0x8E00,0x1   
  281.     dw  defaut,0x0008,0x8E00,0x1    
  282.     dw  defaut,0x0008,0x8E00,0x1    
  283.     dw  defaut,0x0008,0x8E00,0x1    
  284.     dw  defaut,0x0008,0x8E00,0x1    
  285.     dw  defaut,0x0008,0x8E00,0x1    
  286.     dw  defaut,0x0008,0x8E00,0x1    
  287.     dw  defaut,0x0008,0x8E00,0x1    
  288.     dw  interr,0x0008,0x8E00,0x1    ;80 Appels système
  289.    
  290. idtend:
  291. idtptr:
  292.     dw  idtend - idt        ; limite
  293.     dd  idt         ; base
  294.  
  295. %include "screen.asm" ; procédures de gestion d'écran
  296. %include "keyb.asm" ; procédure de gestion de clavier
  297.  
  298. ;===========================
  299. ; Gestion du buffer clavier
  300. ;===========================
  301. ; Besoin de variables buffer
  302.  
  303. mess1   DB  'Chargement du kernel : OK.',10,0
  304. mess1_size DB $-mess1
  305. mess2   DB  'Chargement de la table des interruptions : OK.',10,0
  306. mess2_size DB $-mess2
  307. mess3   DB  'Initialisation du pic : OK.',10,0
  308. mess3_size DB $-mess3
  309. mess4   DB  'Creation des tables de pages : OK.',10,0
  310. mess4_size DB $-mess4
  311. mess5   DB  'Message affiche via syscall 4 : OK.',10,0
  312. mess5_size DB $-mess5
  313. mess6   DB  'Test Appel Read stdin : ',10,0
  314. mess6_size DB $-mess6
  315.  
  316. IntP    DB  10,'Interruption défaut de page',10,0
  317. IntD    DB  10,'Interruption non gérée',10,0
  318. IntG    DB  10,'Interruption global protection',10,0
  319.  
  320.  
Advertisement
Add Comment
Please, Sign In to add comment