b6c999753f
2. Linker script for kernel. 2. Updated mkiso script to link C with nasm and build a runable multiboot1 iso.
131 lines
2.2 KiB
NASM
131 lines
2.2 KiB
NASM
org 0x01000000
|
|
;void HkSystemInit(PMULTIBOOT_INFO info)
|
|
GRUB_LOADED_FLAG equ 0x36d76289
|
|
GRUB_MAGIC_NUMBER equ 0xE85250D6
|
|
GRUB_ARCHITECTURE equ 0x0
|
|
GRUB_CHECK_SUM equ - (GRUB_MAGIC_NUMBER + GRUB_ARCHITECTURE + GRUB_HEADER_LENGTH)
|
|
GRUB_HEADER_LENGTH equ (GRUB_HEADER_END - GRUB_HEADER_START)
|
|
GRUB_HEADER_START:
|
|
dd GRUB_MAGIC_NUMBER
|
|
dd GRUB_ARCHITECTURE
|
|
dd GRUB_HEADER_LENGTH
|
|
dd GRUB_CHECK_SUM
|
|
;===================
|
|
;Address_tag
|
|
GRUB_LOAD_BASE equ 0x01000000 ;1MB
|
|
GRUB_ADDRESS_TAG_SIZE equ GRUB_ADDRESS_TAG_END - GRUB_ADDRESS_TAG_START
|
|
GRUB_ADDRESS_TAG_START:
|
|
dw 0x2 ;type=2
|
|
dw 0x0 ;flag=0
|
|
dd GRUB_ADDRESS_TAG_SIZE; size
|
|
dd GRUB_HEADER_START; Since at the beginning of the file
|
|
dd GRUB_ENTRY
|
|
dd 0 ;load end
|
|
dd 0 ;bss
|
|
GRUB_ADDRESS_TAG_END:
|
|
;====================
|
|
;Entry_tag
|
|
GRUB_ENTRY_TAG_SIZE equ GRUB_ENTRY_TAG_END - GRUB_ENTRY_TAG_START
|
|
GRUB_ENTRY_TAG_START:
|
|
dw 0x3; type=3
|
|
dw 0x0; flag=0
|
|
dd GRUB_ENTRY_TAG_SIZE
|
|
dd GRUB_ENTRY
|
|
GRUB_ENTRY_TAG_END:
|
|
;====================
|
|
;End_tag
|
|
dw 0x0
|
|
dw 0x0
|
|
dd 8
|
|
;====================
|
|
GRUB_HEADER_END:
|
|
|
|
%include "pm.inc"
|
|
|
|
;GDT to load
|
|
GDT_DUMMY:
|
|
;GDT
|
|
DESC_VOID: Descriptor 0,0,0
|
|
DESC_GRAPH: Descriptor 0b8000h,0xffff,DA_DRW | DA_DPL3
|
|
DESC_FLAT_C: Descriptor 0,0xfffff,DA_CR | DA_32 | DA_LIMIT_4K
|
|
DESC_FLAT_RW: Descriptor 0,0xfffff,DA_DRW | DA_32 | DA_LIMIT_4K
|
|
GDT_END:
|
|
|
|
GDT_LENGTH equ GDT_END - GDT_DUMMY - 1
|
|
;GDT PTR
|
|
GDT_PTR:
|
|
dw GDT_LENGTH
|
|
dd GDT_DUMMY
|
|
|
|
;SELECTORS
|
|
SLCT_CODE_0 equ DESC_FLAT_C - DESC_VOID
|
|
SLCT_GRAPH_0 equ DESC_GRAPH - DESC_VOID
|
|
SLCT_DATA_0 equ DESC_FLAT_RW - DESC_VOID
|
|
|
|
DUMMY_MSG:
|
|
db 'Loaded by multiboot2!',0
|
|
|
|
;stack
|
|
times 1024 db 0
|
|
_KERNEL_STACK:
|
|
|
|
GRUB_ENTRY:
|
|
[BITS 32]
|
|
cli
|
|
|
|
cmp eax,GRUB_LOADED_FLAG
|
|
je LOADED_BY_GRUB
|
|
hlt
|
|
LOADED_BY_GRUB:
|
|
|
|
mov eax,_KERNEL_STACK
|
|
mov esp,eax
|
|
|
|
push dword 0
|
|
popfd
|
|
|
|
lgdt [GDT_PTR]
|
|
jmp SLCT_CODE_0:Reload_CS
|
|
Reload_CS:
|
|
mov ax,cs
|
|
mov ax,SLCT_DATA_0
|
|
mov ss,ax
|
|
mov ds,ax
|
|
mov es,ax
|
|
mov fs,ax
|
|
mov ax,SLCT_GRAPH_0
|
|
mov gs,ax
|
|
|
|
push DUMMY_MSG
|
|
call _printf
|
|
add esp,4
|
|
|
|
_printf:
|
|
;void printf(char* str)
|
|
;EAX,ECX,EDX
|
|
push ebp
|
|
mov ebp,esp
|
|
push edi
|
|
push esi
|
|
|
|
mov edi,dword [ss:ebp+8]
|
|
xor esi,esi
|
|
xor ecx,ecx
|
|
|
|
.begin:
|
|
mov al,byte [ds:edi]
|
|
cmp al,0 ;0 ended
|
|
je .end
|
|
mov byte [gs:esi],al
|
|
inc esi
|
|
mov byte [gs:esi],0xFF
|
|
inc edi
|
|
inc esi
|
|
jmp .begin
|
|
.end:
|
|
pop esi
|
|
pop edi
|
|
mov esp,ebp
|
|
pop ebp
|
|
|