Files
mango/arch/x86_64/start_64.S

76 lines
1.2 KiB
ArmAsm

.code64
.extern kernel_init # defined in core/main.c
.section .boot.rodata, "a", @progbits
/*******
ERROR MESSAGE STRINGS
*******/
kernel_identifier:
.asciz " Socks kernel version " BUILD_ID " "
.section .boot.text, "ax", @progbits
vga_clear:
mov $0xb8000, %rdi # VGA buffer
mov $500, %rcx # 4,000 bytes to clear = 500 quadwords
mov $0x0, %rax
rep stosq
ret
# prints a block message showing the kernel name and version number
# starting at cell 2x1 on the VGA display
print_kernel_identifier:
/* line 1: empty padding line */
mov $kernel_identifier, %rsi
mov $0xb80a4, %rdi
1:
movw $0x7000, (%rdi) # black text on white background.
add $0x02, %rdi
inc %rsi
cmpb $0, (%rsi)
jne 1b
/* line 2: kernel identiifer */
mov $kernel_identifier, %rsi
mov $0xb8144, %rdi
2:
movsb
movb $0x70, (%rdi) # black text on white background
inc %rdi
cmpb $0, (%rsi)
jne 2b
/* line 3: empty padding line */
mov $kernel_identifier, %rsi
mov $0xb81e4, %rdi
1:
movw $0x7000, (%rdi) # black text on white background.
add $0x02, %rdi
inc %rsi
cmpb $0, (%rsi)
jne 1b
ret
.global start_64
.type start_64, @function
start_64:
call vga_clear
pop %rax
call print_kernel_identifier
call kernel_init
cli
hlt