Print UUID
Cleanup print functions Reformat kernel arguments
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user