76 lines
1.2 KiB
ArmAsm
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 $1000, %rcx # 4,000 bytes to clear = 2,000 words
|
|
mov $0x0700, %rax
|
|
|
|
rep stosw
|
|
|
|
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
|
|
|
|
3:
|
|
movw $0x7000, (%rdi) # black text on white background.
|
|
add $0x02, %rdi
|
|
inc %rsi
|
|
cmpb $0, (%rsi)
|
|
jne 3b
|
|
ret
|
|
|
|
|
|
.global start_64
|
|
.type start_64, @function
|
|
start_64:
|
|
call vga_clear
|
|
|
|
pop %rax
|
|
call print_kernel_identifier
|
|
|
|
call kernel_init
|
|
|
|
cli
|
|
hlt
|