2 ; Copyright
(C
) 2007 Tomas
'ZeXx86' Jedrzejek
(zexx86@gmail.com
)
4 ; This program is free software
: you can redistribute it
and/or modify
5 ; it under the terms of the GNU General Public License as published by
6 ; the Free Software Foundation
, either version
3 of the License
, or
7 ;
(at your option
) any later version.
9 ; This program is distributed in the hope that it will
be useful
,
10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ; MERCHANTABILITY
or FITNESS FOR
A PARTICULAR PURPOSE. See the
12 ; GNU General Public License for more details.
14 ; You should have received
a copy of the GNU General Public License
15 ; along with this program. If
not, see
<http
://www.gnu.org
/licenses
/>.
18 ; This is the kernel
's entry point. We could either call main here,
19 ; or we can use this to setup the stack or other nice stuff, like
20 ; perhaps setting up the GDT and segments. Please note that interrupts
21 ; are disabled at this point: More on interrupts later!
41 mov esp, _sys_stack ; This points the stack to our new stack area
44 ; This part MUST be 4byte aligned, so we solve that issue using 'ALIGN
4'
47 ; Multiboot macros to make a few lines later more readable
48 MULTIBOOT_PAGE_ALIGN equ 1<<0
49 MULTIBOOT_MEMORY_INFO equ 1<<1
50 MULTIBOOT_AOUT_KLUDGE equ 1<<16
51 MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
52 MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE
53 MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
56 ; This is the GRUB Multiboot header. A boot signature
57 dd MULTIBOOT_HEADER_MAGIC
58 dd MULTIBOOT_HEADER_FLAGS
61 ; AOUT kludge - must be physical addresses. Make a note of these:
62 ; The linker script fills in the data for these ones!
69 ; This is an endless loop here. Make a note of this: Later on, we
70 ; will insert an 'extern _main
', followed by 'call _main
', right
76 push ebx ; Get to main function data from bootloader
82 ; Here is the definition of our BSS section. Right now, we'll use
83 ; it just to store the stack. Remember that
a stack actually grows
84 ; downwards
, so we declare the size of the data before declaring
85 ; the identifier
'_sys_stack'
87 resb
8192 ; This reserves
8KBytes of memory here