aboutsummaryrefslogtreecommitdiff
path: root/boot.s
diff options
context:
space:
mode:
Diffstat (limited to 'boot.s')
-rw-r--r--boot.s76
1 files changed, 76 insertions, 0 deletions
diff --git a/boot.s b/boot.s
new file mode 100644
index 0000000..3f3457a
--- /dev/null
+++ b/boot.s
@@ -0,0 +1,76 @@
+bits 64
+
+section .text
+ org 0x0
+
+_start:
+ ; EFI System Table magic
+ mov rax, 0x5453595320494249
+ cmp rax, [rdx]
+
+ mov rdi, 0x1
+ jne fail ; Invalid magic
+
+; mov r8, rax
+; add r8, 0x1c
+; mov word [rax+0x10], 0xfff
+; mov qword [rax+0x12], r8
+;
+; xor rcx, rcx
+;zero:
+; mov qword [r8+rcx], 0x0
+; add rcx, 0x8
+; cmp rcx, 0xfff
+; jle zero
+;
+; lea r8, [rel int]
+; mov word [rax+0x1c], r8w ; offset_1
+; shr r8, 16
+; mov word [rax+0x1e], 0 ; selector
+; mov byte [rax+0x20], 0 ; ist
+; mov byte [rax+0x21], 0xff ; type_attr
+; mov word [rax+0x22], r8w ; offset_2
+; shr r8, 16
+; mov dword [rax+0x24], r8d ; offset_3
+; mov dword [rax+0x28], 0 ; reserved, SBZ
+;
+; cli
+; lidt [rax+16]
+; sti
+
+ ;int 0x0
+
+ push rbp
+ mov rbp, rsp
+ sub rsp, 0x30
+
+ mov rbx, rdx
+
+hello:
+ mov rcx, qword [rdx+0x40] ; arg0=ConOut
+ lea rdx, [rel msg] ; arg1=msg
+ call qword [rcx+0x8] ; OutputString
+
+ mov rdi, 0x0 ; EFI_SUCCESS
+
+fail: ; error in rdi
+ mov rax, rdi
+ mov rsp, rbp
+ pop rbp
+ retn
+
+msg: db __utf16__ 'Hello, World',0xd,0,0xa,0,0,0
+
+; int:
+; lea rax, [rel end]
+; mov rdx, qword [rax+8]
+;
+; mov rcx, qword [rdx+0x40] ; arg0=ConOut
+; lea rdx, [rel err] ; arg1=err
+; call qword [rcx+0x8] ; OutputString
+;
+; iretq
+
+align 0x20
+
+end: