Issue with length of loader.bin, and can't load kernel for now
This commit is contained in:
parent
f3f9489167
commit
b952d9d900
BIN
bin/disk.img
BIN
bin/disk.img
Binary file not shown.
BIN
bin/loader.bin
BIN
bin/loader.bin
Binary file not shown.
BIN
bin/mbr.bin
BIN
bin/mbr.bin
Binary file not shown.
Binary file not shown.
BIN
obj/boot/mbr.bin
BIN
obj/boot/mbr.bin
Binary file not shown.
|
@ -33,6 +33,15 @@
|
||||||
%define volumeLabel bp+0x2b ; Volume Label
|
%define volumeLabel bp+0x2b ; Volume Label
|
||||||
%define fatTypeLabel bp+0x36 ; File system type
|
%define fatTypeLabel bp+0x36 ; File system type
|
||||||
|
|
||||||
|
;; DISK BUFFER "SEGMENT"
|
||||||
|
%define BUFFER_SEG 0x07c0 ; (BUFFER_SEG << 4) + BUFFER_OFF = 0x07C00
|
||||||
|
%define BUFFER_OFF 0x0000
|
||||||
|
|
||||||
|
;; SECOND STAGE LOADER "SEGMENT"
|
||||||
|
%define LOAD_SEG LONG_SELECTOR-GDT64 ; (LOAD_SEG << 4) + LOAD_OFF = 0x070000
|
||||||
|
%define LOAD_OFF Kernel
|
||||||
|
|
||||||
|
|
||||||
[BITS 16]
|
[BITS 16]
|
||||||
[ORG 0x1000]
|
[ORG 0x1000]
|
||||||
|
|
||||||
|
@ -41,14 +50,9 @@ mov ds, ax ; hm... And ds too
|
||||||
mov es, ax ; And es because it is jealous
|
mov es, ax ; And es because it is jealous
|
||||||
|
|
||||||
mov [Bootdrv], dl
|
mov [Bootdrv], dl
|
||||||
|
xor dl, dl
|
||||||
jmp 0x0000:main
|
jmp 0x0000:main
|
||||||
|
|
||||||
;; DATA
|
|
||||||
|
|
||||||
Bootdrv db 0
|
|
||||||
VGA_HEIGHT dq 0
|
|
||||||
VIDEO_MODE dw 0
|
|
||||||
|
|
||||||
;; GDT WITH DOC
|
;; GDT WITH DOC
|
||||||
GDT64:
|
GDT64:
|
||||||
NULL_SELECTOR: ;; null selector within 64 bits
|
NULL_SELECTOR: ;; null selector within 64 bits
|
||||||
|
@ -128,7 +132,9 @@ GDT64:
|
||||||
%include "boot/loader16.inc"
|
%include "boot/loader16.inc"
|
||||||
|
|
||||||
main:
|
main:
|
||||||
|
|
||||||
;; compatibility check
|
;; compatibility check
|
||||||
|
push si
|
||||||
mov si, Init
|
mov si, Init
|
||||||
call PrintB
|
call PrintB
|
||||||
pop si
|
pop si
|
||||||
|
@ -137,8 +143,10 @@ main:
|
||||||
push si
|
push si
|
||||||
mov si, Pass
|
mov si, Pass
|
||||||
call PrintB
|
call PrintB
|
||||||
|
pop si
|
||||||
|
|
||||||
;; Enabling A20
|
;; Enabling A20
|
||||||
|
push si
|
||||||
mov si, EnA20
|
mov si, EnA20
|
||||||
call PrintB
|
call PrintB
|
||||||
pop si
|
pop si
|
||||||
|
@ -148,11 +156,12 @@ main:
|
||||||
push si
|
push si
|
||||||
mov si, Pass
|
mov si, Pass
|
||||||
call PrintB
|
call PrintB
|
||||||
|
pop si
|
||||||
|
|
||||||
;; DISABLING CURSOR BLINKING AND GETTING INFOS
|
;; DISABLING CURSOR BLINKING AND GETTING INFOS
|
||||||
call get_dimensions
|
call get_dimensions
|
||||||
call disable_cursor
|
call disable_cursor
|
||||||
|
|
||||||
;;GO GDT64
|
;;GO GDT64
|
||||||
cli ; disable interrupts
|
cli ; disable interrupts
|
||||||
lgdt [GDT64]
|
lgdt [GDT64]
|
||||||
|
@ -171,11 +180,16 @@ main:
|
||||||
push dword [VIDEO_MODE]
|
push dword [VIDEO_MODE]
|
||||||
push dword [VGA_HEIGHT]
|
push dword [VGA_HEIGHT]
|
||||||
jmp (CODE_SELECTOR-GDT64):main32
|
jmp (CODE_SELECTOR-GDT64):main32
|
||||||
|
|
||||||
|
ErrorNo64:
|
||||||
|
mov si, NoLongMode
|
||||||
|
call PrintB
|
||||||
|
Die:
|
||||||
|
cli
|
||||||
|
hlt ; die nooooow
|
||||||
|
jmp 0xF000:0xFFF0
|
||||||
|
|
||||||
[BITS 32]
|
[BITS 32]
|
||||||
VIDEO_MODE32 dw 0
|
|
||||||
VGA_HEIGHT32 dw 0
|
|
||||||
|
|
||||||
main32:
|
main32:
|
||||||
pop dword [VGA_HEIGHT32]
|
pop dword [VGA_HEIGHT32]
|
||||||
pop dword [VIDEO_MODE32]
|
pop dword [VIDEO_MODE32]
|
||||||
|
@ -238,18 +252,31 @@ main32:
|
||||||
%include "boot/loader64.inc"
|
%include "boot/loader64.inc"
|
||||||
|
|
||||||
;; DATA
|
;; DATA
|
||||||
txt db 0x09, " Switching to Long Mode... ", 0
|
|
||||||
Init db "Booting OS/K !", 0x0D, 0x0A, 0x0D, 0x0A, 0x09, " Checking CPUID...",0
|
Init db "Booting OS/K !", 0x0D, 0x0A, 0x0D, 0x0A, 0x09, " Checking CPUID...",0
|
||||||
Reinit db "Booting OS/K !", 0x0D, 0x0A, 0x0D, 0x0A, 0
|
|
||||||
CPUIDD db 0x09, " Checking CPUID...", 0
|
CPUIDD db 0x09, " Checking CPUID...", 0
|
||||||
EnA20 db 0x09, " Enabling A20 line...", 0
|
EnA20 db 0x09, " Enabling A20 line...", 0
|
||||||
NoLongMode db 0x0A, 0x0D, "ERROR : Your computer is not designed for x64 OS", 0
|
KernSearch db 0x09, " Loading the Kernel in RAM...", 0
|
||||||
|
txt db 0x09, " Switching to Long Mode... ", 0
|
||||||
|
Reinit db "Booting OS/K !", 0x0D, 0x0A, 0x0D, 0x0A, 0
|
||||||
Pass db " OK", 0x0A, 0x0D, 0
|
Pass db " OK", 0x0A, 0x0D, 0
|
||||||
|
msg db "The system is now in x64 mode. Is this not beautiful ?", 0x0A, 0x0D, 0
|
||||||
|
|
||||||
|
NoLongMode db 0x0A, 0x0D, "ERROR : Your computer is not designed for x64 OS", 0
|
||||||
|
FileNotFound db "Second Stage Error : The Kernel was not found.", 0x0A, 0x0D, 0
|
||||||
|
DiskError db "Second Stage Error : The Disk has crashed.", 0x0A, 0x0D, 0
|
||||||
|
|
||||||
|
filename db "KERNEL BIN"
|
||||||
|
|
||||||
|
Bootdrv db 0
|
||||||
|
UserData dw 0
|
||||||
|
VGA_HEIGHT dq 0
|
||||||
|
VIDEO_MODE dw 0
|
||||||
|
VIDEO_MODE32 dw 0
|
||||||
|
VGA_HEIGHT32 dw 0
|
||||||
NextTRAM dq 0x0B8000 ; Last position of cursor
|
NextTRAM dq 0x0B8000 ; Last position of cursor
|
||||||
VIDEO_MODE64 dq 0
|
VIDEO_MODE64 dq 0
|
||||||
VGA_HEIGHT64 dq 0
|
VGA_HEIGHT64 dq 0
|
||||||
VGA_X dq 0x0
|
VGA_X dq 0
|
||||||
msg db "The system is now in x64 mode. Is this not beautiful ?", 0x0A, 0x0D, 0
|
|
||||||
|
|
||||||
main64:
|
main64:
|
||||||
pop qword [VGA_HEIGHT64]
|
pop qword [VGA_HEIGHT64]
|
||||||
|
@ -276,6 +303,14 @@ main64:
|
||||||
mov esi, EnA20
|
mov esi, EnA20
|
||||||
call write
|
call write
|
||||||
|
|
||||||
|
mov bl, 0x0A
|
||||||
|
mov esi, Pass
|
||||||
|
call write
|
||||||
|
|
||||||
|
mov bl, 0x0F
|
||||||
|
mov esi, KernSearch
|
||||||
|
call write
|
||||||
|
|
||||||
mov bl, 0x0A
|
mov bl, 0x0A
|
||||||
mov esi, Pass
|
mov esi, Pass
|
||||||
call write
|
call write
|
||||||
|
@ -291,14 +326,9 @@ main64:
|
||||||
mov bl, 0x0D
|
mov bl, 0x0D
|
||||||
mov esi, msg
|
mov esi, msg
|
||||||
call write
|
call write
|
||||||
|
|
||||||
jmp Die
|
jmp Die
|
||||||
|
|
||||||
[BITS 16]
|
; times 1024 nop
|
||||||
ErrorNo64:
|
; XXX ;
|
||||||
mov si, NoLongMode
|
; It seems impossible to have an executable > 2.0 kB...
|
||||||
call PrintB
|
|
||||||
Die:
|
|
||||||
cli
|
|
||||||
hlt ; die nooooow
|
|
||||||
jmp 0xF000:0xFFF0
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
; Desc: Kernel (second stage) Loader for OS/K INCLUDED FUNCTIONS ;
|
; Desc: Kernel (second stage) Loader for OS/K INCLUDED FUNCTIONS ;
|
||||||
; (x86_64 architecture only) ;
|
; (x86_64 architecture only) ;
|
||||||
;=----------------------------------------------------------------------------=;
|
;=----------------------------------------------------------------------------=;
|
||||||
|
|
||||||
[BITS 16]
|
[BITS 16]
|
||||||
|
|
||||||
disable_cursor:
|
disable_cursor:
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
; Desc: Bootsector for OS/K INCLUDED FUNCTIONS ;
|
; Desc: Bootsector for OS/K INCLUDED FUNCTIONS ;
|
||||||
; (x86_64 architecture only) ;
|
; (x86_64 architecture only) ;
|
||||||
;=----------------------------------------------------------------------------=;
|
;=----------------------------------------------------------------------------=;
|
||||||
|
[BITS 16]
|
||||||
|
|
||||||
read_clusters:
|
read_clusters:
|
||||||
;---------------------------------------------------;
|
;---------------------------------------------------;
|
||||||
|
@ -100,7 +101,7 @@ read_sectors:
|
||||||
shl ah, 1
|
shl ah, 1
|
||||||
or cl, ah ; Now cx is set with respective track and sector numbers
|
or cl, ah ; Now cx is set with respective track and sector numbers
|
||||||
mov dl, byte [Bootdrv] ; Set correct Bootdrv for int 13h
|
mov dl, byte [Bootdrv] ; Set correct Bootdrv for int 13h
|
||||||
mov di, 5 ; Try five times to read the sector because i love 5
|
mov di, 21 ; Try five times to read the sector because i love 21
|
||||||
.attempt_read:
|
.attempt_read:
|
||||||
mov ax, 0x0201 ; Read Sectors func of int 13h, read one sector
|
mov ax, 0x0201 ; Read Sectors func of int 13h, read one sector
|
||||||
int 0x13 ; Call int 13h (BIOS disk I/O)
|
int 0x13 ; Call int 13h (BIOS disk I/O)
|
||||||
|
|
Loading…
Reference in New Issue