Advertisement
Guest User

Untitled

a guest
May 29th, 2017
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. [bits 16]
  2. [org 0x7c00]
  3.  
  4. bootld_start:
  5.     KERNEL_OFFSET equ 0x2000
  6.  
  7.     xor ax, ax      ; Explicitly set ES = DS = 0
  8.     mov ds, ax
  9.     mov es, ax
  10.     mov bx, 0x8C00  ; Set SS:SP to 0x8C00:0x0000 . The stack will exist
  11.                     ;     between 0x8C00:0x0000 and 0x8C00:0xFFFF
  12.     mov ss, bx
  13.     mov sp, ax
  14.  
  15.     mov [BOOT_DRIVE], dl
  16.  
  17.     mov bx, boot_msg
  18.     call print_string
  19.  
  20.     mov dl, [BOOT_DRIVE]
  21.     call disk_load
  22.  
  23.     jmp pm_setup
  24.  
  25.     jmp $
  26.  
  27. BOOT_DRIVE:
  28.     db 0
  29.  
  30. disk_load:
  31.     mov si, dap
  32.     mov ah, 0x42
  33.  
  34.     int 0x13
  35.  
  36.     ;cmp al, 4
  37.     ;jne disk_error_132
  38.  
  39.     ret
  40.  
  41. dap:
  42.     db 0x10             ; Size of DAP
  43.     db 0
  44.     ; You can only read 46 sectors into memory between 0x2000 and
  45.     ; 0x7C00. Don't read anymore or we overwrite the bootloader we are
  46.     ; executing from. (0x7c00-0x2000)/512 = 46
  47.     dw 46               ; Number of sectors to read
  48.     dw KERNEL_OFFSET    ; Offset
  49.     dw 0                ; Segment
  50.     dd 1
  51.     dd 0
  52.  
  53. disk_error_132:
  54.     mov bx, disk_error_132_msg
  55.     call print_string
  56.  
  57.     jmp $
  58.  
  59. disk_error_132_msg:
  60.     db 'Error! Error! Something is VERY wrong! (0x132)', 0
  61.  
  62. gdt_start:
  63.  
  64. gdt_null:
  65.     dd 0x0
  66.     dd 0x0
  67.  
  68. gdt_code:
  69.     dw 0xffff
  70.     dw 0x0
  71.     db 0x0
  72.     db 10011010b
  73.     db 11001111b
  74.     db 0x0
  75.  
  76. gdt_data:
  77.     dw 0xffff
  78.     dw 0x0
  79.     db 0x0
  80.     db 10010010b
  81.     db 11001111b
  82.     db 0x0
  83.  
  84. gdt_end:
  85.  
  86. gdt_descriptor:
  87.     dw gdt_end - gdt_start
  88.     dd gdt_start
  89.  
  90. CODE_SEG equ gdt_code - gdt_start
  91. DATA_SEG equ gdt_data - gdt_start
  92.  
  93. boot_msg:
  94.     db 'OS is booting files... ', 0
  95.  
  96. done_msg:
  97.     db 'Done! ', 0
  98.  
  99. %include "boot/print_string.asm"
  100.  
  101. pm_setup:
  102.     mov bx, done_msg
  103.     call print_string
  104.  
  105.     mov ax, 0
  106.     mov ss, ax
  107.     mov sp, 0xFFFC
  108.  
  109.     mov ax, 0
  110.     mov ds, ax
  111.     mov es, ax
  112.     mov fs, ax
  113.     mov gs, ax
  114.  
  115.     cli
  116.     lgdt[gdt_descriptor]
  117.     mov eax, cr0
  118.     or eax, 0x1
  119.     mov cr0, eax
  120.     jmp CODE_SEG:b32
  121.  
  122.     [bits 32]
  123.  
  124.     VIDEO_MEMORY equ 0xb8000
  125.     WHITE_ON_BLACK equ 0x0f
  126.  
  127.     print32:
  128.         pusha
  129.         mov edx, VIDEO_MEMORY
  130.     .loop:
  131.         mov al, [ebx]
  132.         mov ah, WHITE_ON_BLACK
  133.         cmp al, 0
  134.         je .done
  135.         mov [edx], ax
  136.         add ebx, 1
  137.         add edx, 2
  138.         jmp .loop
  139.     .done:
  140.         popa
  141.         ret
  142.  
  143.     b32:
  144.         mov ax, DATA_SEG
  145.         mov ds, ax
  146.         mov es, ax
  147.         mov fs, ax
  148.         mov gs, ax
  149.         mov ss, ax
  150.  
  151.         ; Place stack below EBDA in lower memory
  152.         mov ebp, 0x9c000
  153.         mov esp, ebp
  154.  
  155.         mov ebx, pmode_msg
  156.         call print32
  157.  
  158.         call KERNEL_OFFSET
  159.  
  160.         jmp $
  161.  
  162.     pmode_msg:
  163.         db 'Protected mode enabled!', 0
  164.  
  165. kernel:
  166.     mov ebx, pmode_msg
  167.     call print32
  168.     jmp $
  169.  
  170. pmode_tst:
  171.     db 'Testing...'
  172.  
  173. times 510-($-$$) db 0
  174. db 0x55
  175. db 0xAA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement