Advertisement
Guest User

Untitled

a guest
Jan 5th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bits 16
  2. org 0x7e00                  ; loaded at phys addr 0x7e00
  3.                             ; control must be transferred with jmp 0:0x7e00
  4.  
  5.     xor ax, ax
  6.     mov ds, ax              ; update data segment
  7.  
  8.     cli                     ; clear interrupts
  9.  
  10.     lgdt [gdtr]             ; load GDT from GDTR (see gdt_32.inc)
  11.  
  12.     call OpenA20Gate        ; open the A20 gate
  13.  
  14.     call EnablePMode        ; jumps to ProtectedMode
  15.  
  16. ;******************
  17. ;* Opens A20 Gate *
  18. ;******************
  19. OpenA20Gate:
  20.     in al, 0x93         ; switch A20 gate via fast A20 port 92
  21.  
  22.     or al, 2            ; set A20 Gate bit 1
  23.     and al, ~1          ; clear INIT_NOW bit
  24.     out 0x92, al
  25.  
  26.     ret
  27.  
  28. ;**************************
  29. ;* Enables Protected Mode *
  30. ;**************************
  31. EnablePMode:
  32.     mov eax, cr0
  33.     or eax, 1
  34.     mov cr0, eax
  35.  
  36.     jmp (CODE_DESC - NULL_DESC) : ProtectedMode
  37.  
  38. ;***************
  39. ;* data fields *
  40. ;*  &includes  *
  41. ;***************
  42. ;%include "gdt_32.inc"
  43. ;*********************************
  44. ;* Global Descriptor Table (GDT) *
  45. ;*********************************
  46. NULL_DESC:
  47.     dd 0            ; null descriptor
  48.     dd 0
  49.  
  50. CODE_DESC:
  51.     dw 0xFFFF       ; limit low
  52.     dw 0            ; base low
  53.     db 0            ; base middle
  54.     db 10011010b    ; access
  55.     db 11001111b    ; granularity
  56.     db 0            ; base high
  57.  
  58. DATA_DESC:
  59.     dw 0xFFFF       ; limit low
  60.     dw 0            ; base low
  61.     db 0            ; base middle
  62.     db 10010010b    ; access
  63.     db 11001111b    ; granularity
  64.     db 0            ; base high
  65.  
  66. gdtr:
  67.     Limit dw gdtr - NULL_DESC - 1 ; length of GDT
  68.     Base dd NULL_DESC   ; base of GDT
  69.  
  70. ;******************
  71. ;* Protected Mode *
  72. ;******************
  73. bits 32
  74.  
  75. ProtectedMode:
  76.     mov     ax, DATA_DESC - NULL_DESC
  77.     mov     ds, ax ; update data segment
  78.  
  79.     .halt:
  80.         hlt
  81.         jmp .halt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement