Print UUID

Cleanup print functions
Reformat kernel arguments
This commit is contained in:
Jeremy Soller
2017-09-30 16:13:10 -06:00
parent cccb19d19f
commit d48e8237f2
6 changed files with 90 additions and 72 deletions
+9 -9
View File
@@ -27,11 +27,11 @@ boot: ; dl comes with disk
call print_line
mov bx, (startup_start - boot) / 512
call print_num
call print_hex
call print_line
mov bx, startup_start
call print_num
call print_hex
call print_line
mov eax, (startup_start - boot) / 512
@@ -130,28 +130,28 @@ print_dapack:
call print_char
mov bx, [DAPACK.addr + 2]
call print_num
call print_hex
mov bx, [DAPACK.addr]
call print_num
call print_hex
mov al, '#'
call print_char
mov bx, [DAPACK.count]
call print_num
call print_hex
mov al, ' '
call print_char
mov bx, [DAPACK.seg]
call print_num
call print_hex
mov al, ':'
call print_char
mov bx, [DAPACK.buf]
call print_num
call print_hex
ret
@@ -160,7 +160,7 @@ error:
mov bh, 0
mov bl, ah
call print_num
call print_hex
mov al, ' '
call print_char
@@ -173,7 +173,7 @@ error:
hlt
jmp .halt
%include "print16.asm"
%include "print.asm"
name: db "Redox Loader - Stage One",0
errored: db "Could not read disk",0
+8 -5
View File
@@ -15,8 +15,9 @@ print_line:
; IN
; si: points at zero-terminated String
; CLOBBER
; ax
; si, ax
print:
pushf
cld
.loop:
lodsb
@@ -25,24 +26,26 @@ print:
call print_char
jmp .loop
.done:
popf
ret
; print a character
; IN
; al: character to print
; CLOBBER
; ah
print_char:
pusha
mov bx, 7
mov ah, 0x0e
int 0x10
popa
ret
; print a number in hex
; IN
; bx: the number
; CLOBBER
; cx, ax
print_num:
; al, cx
print_hex:
mov cx, 4
.lp:
mov al, bh
+36 -12
View File
@@ -92,7 +92,31 @@ redoxfs.open:
jl .ver
lea si, [redoxfs.header + Header.signature]
call printrm
call print
mov al, ' '
call print_char
xor si, si
.uuid:
cmp si, 4
je .dash
cmp si, 6
je .dash
cmp si, 8
je .dash
cmp si, 10
je .dash
jmp .no_dash
.dash:
mov al, '-'
call print_char
.no_dash:
mov bx, [redoxfs.header + Header.uuid + si]
rol bx, 8
call print_hex
add si, 2
cmp si, 16
jb .uuid
call print_line
xor ax, ax
@@ -104,20 +128,20 @@ redoxfs.open:
.sig_err:
mov si, .err_msg
call printrm
call print
mov si, .sig_err_msg
call printrm
call print
mov ax, 1
ret
.ver_err:
mov si, .err_msg
call printrm
call print
mov si, .ver_err_msg
call printrm
call print
mov ax, 1
ret
@@ -128,7 +152,7 @@ redoxfs.open:
redoxfs.root:
lea si, [redoxfs.dir + Node.name]
call printrm
call print
call print_line
.lp:
@@ -197,10 +221,10 @@ redoxfs.root:
.no_kernel:
mov si, .no_kernel_msg
call printrm
call print
mov si, .kernel_name
call printrm
call print
call print_line
@@ -212,10 +236,10 @@ redoxfs.root:
redoxfs.kernel:
lea si, [redoxfs.file + Node.name]
call printrm
call print
call print_line
mov edi, [kernel_base]
mov edi, [args.kernel_base]
.lp:
mov bx, 0
.ext:
@@ -264,8 +288,8 @@ redoxfs.kernel:
jmp .lp
.done:
sub edi, [kernel_base]
mov [kernel_size], edi
sub edi, [args.kernel_base]
mov [args.kernel_size], edi
xor eax, eax
ret
+10 -7
View File
@@ -1,8 +1,11 @@
SECTION .text
USE16
kernel_base dq 0x100000
kernel_size dq 0
args:
.kernel_base dq 0x100000
.kernel_size dq 0
.stack_base dq 0
.stack_size dq 0
startup:
; enable A20-Line via IO-Port 92, might not work on all motherboards
@@ -11,9 +14,9 @@ startup:
out 0x92, al
%ifdef KERNEL
mov edi, [kernel_base]
mov edi, [args.kernel_base]
mov ecx, (kernel_file.end - kernel_file)
mov [kernel_size], ecx
mov [args.kernel_size], ecx
mov eax, (kernel_file - boot)/512
add ecx, 511
@@ -31,15 +34,15 @@ startup:
call vesa
mov si, init_fpu_msg
call printrm
call print
call initialize.fpu
mov si, init_sse_msg
call printrm
call print
call initialize.sse
mov si, startup_arch_msg
call printrm
call print
jmp startup_arch
+9 -10
View File
@@ -122,23 +122,24 @@ long_mode:
mov gs, rax
mov ss, rax
; kernel_base
mov rdi, [kernel_base]
; kernel_size
mov rsi, [kernel_size]
; stack_base
mov rdx, 0xFFFFFF0000080000
mov [args.stack_base], rdx
; stack_size
mov rcx, 0x1F000
mov [args.stack_size], rcx
; set stack pointer
mov rsp, rdx
add rsp, rcx
sub rsp, 256
; set args
mov rdi, args
; entry point
mov rax, [rdi + 0x18]
jmp rax
mov rax, [args.kernel_base]
jmp [rax + 0x18]
long_mode_ap:
mov rax, gdt.kernel_data
@@ -148,13 +149,11 @@ long_mode_ap:
mov gs, rax
mov ss, rax
mov rdi, [trampoline.cpu_id]
mov rsi, [trampoline.page_table]
mov rdx, [trampoline.stack_start]
mov rcx, [trampoline.stack_end]
lea rsp, [rcx - 256]
mov rdi, trampoline.cpu_id
mov rax, [trampoline.code]
mov qword [trampoline.ready], 1
jmp rax
+18 -29
View File
@@ -69,26 +69,26 @@ vesa:
jb .searchmodes
.testgood:
mov al, 13
call charrm
call print_char
mov cx, [.currentmode]
mov [.goodmode], cx
push esi
; call decshowrm
; call print_dec
; mov al, ':'
; call charrm
; call print_char
mov cx, [VBEModeInfo.xresolution]
call decshowrm
call print_dec
mov al, 'x'
call charrm
call print_char
mov cx, [VBEModeInfo.yresolution]
call decshowrm
call print_dec
mov al, '@'
call charrm
call print_char
xor ch, ch
mov cl, [VBEModeInfo.bitsperpixel]
call decshowrm
call print_dec
mov si, .modeok
call printrm
call print
xor ax, ax
int 0x16
pop esi
@@ -128,7 +128,12 @@ vesa:
.currentmode dw 0
;useful functions
decshowrm:
; print a number in decimal
; IN
; cx: the number
; CLOBBER
; al, cx, si
print_dec:
mov si, .number
.clear:
mov al, "0"
@@ -137,7 +142,7 @@ decshowrm:
cmp si, .numberend
jb .clear
dec si
call convertrm
call convert_dec
mov si, .number
.lp:
lodsb
@@ -147,13 +152,13 @@ decshowrm:
jbe .lp
.end:
dec si
call printrm
call print
ret
.number times 7 db 0
.numberend db 0
convertrm:
convert_dec:
dec si
mov bx, si ;place to convert into must be in si, number to convert must be in cx
.cnvrt:
@@ -191,19 +196,3 @@ convertrm:
jmp .cnvrt
.return:
ret
printrm:
mov al, [si]
test al, al
jz .return
call charrm
inc si
jmp printrm
.return:
ret
charrm: ;char must be in al
mov bx, 7
mov ah, 0xE
int 10h
ret