summaryrefslogtreecommitdiff
path: root/src/bootloader/bios_functions
diff options
context:
space:
mode:
authorBrett Weiland <brett_weiland@bpcspace.com>2021-03-24 15:36:54 -0500
committerBrett Weiland <brett_weiland@bpcspace.com>2021-03-24 15:38:09 -0500
commit14b109ea24dc5cb1db948de57a2a44c80ef4622e (patch)
treee397997d9c8d9c1b50a5a5235d38c6b0e8f24b5b /src/bootloader/bios_functions
parent13000d6f44d66da795e92e4b2ddc37ce879bf275 (diff)
modified: README.md
modified: compiler/create_crosscompiler.sh deleted: notes modified: src/.gdb_history deleted: src/amd64_vol2.pdf modified: src/bootloader/bios_functions/bios_disk.asm modified: src/bootloader/bios_functions/print.asm modified: src/bootloader/bootloader.asm modified: src/bootloader/cpu_check.asm modified: src/bootloader/enter_kernel.asm deleted: src/bootloader/enter_kernel_backup modified: src/bootloader/gdt.asm deleted: src/bootloader/multicore.asm deleted: src/bootloader/notes new file: src/debug/gdbinit.gdb deleted: src/indigo_os modified: src/kernel/include/libc.h modified: src/kernel/include/paging.h modified: src/kernel/include/video.h modified: src/kernel/kernel.c modified: src/kernel/libs/acpi.c modified: src/kernel/libs/drivers/serial.c modified: src/kernel/libs/drivers/video.c modified: src/kernel/libs/libc.c modified: src/kernel/libs/page.c modified: src/link.ld modified: src/makefile new file: tools/README.md modified: tools/page/page.py
Diffstat (limited to 'src/bootloader/bios_functions')
-rw-r--r--src/bootloader/bios_functions/bios_disk.asm2
-rw-r--r--src/bootloader/bios_functions/print.asm29
2 files changed, 16 insertions, 15 deletions
diff --git a/src/bootloader/bios_functions/bios_disk.asm b/src/bootloader/bios_functions/bios_disk.asm
index 28fc74d..7957814 100644
--- a/src/bootloader/bios_functions/bios_disk.asm
+++ b/src/bootloader/bios_functions/bios_disk.asm
@@ -3,6 +3,8 @@ bios_disk:
pusha
mov es, dx
+; TODO when our kernel gets to big to fit in one track, we need to just switch over to LHS with extended bios functions.
+
mov ah, 0x02 ; read disc sectors
mov ch, 0x00 ; track 0
mov dh, 0x00 ; head 0
diff --git a/src/bootloader/bios_functions/print.asm b/src/bootloader/bios_functions/print.asm
index d071cd9..303fa8f 100644
--- a/src/bootloader/bios_functions/print.asm
+++ b/src/bootloader/bios_functions/print.asm
@@ -1,25 +1,24 @@
-;TODO fix null problem, allow direct passes
+;TODO fix null problem, allow passing value insted of pointer
bios_print:
-;push ax ; we need to use ax, so let's push it in case whoever called needs it
pusha
-mov ah, 0x0e ; tells bios we're in tty mode
+mov ah, 0x0e
.print_loop:
-mov al, [bx] ; al is the char MEANT TO BE CX
-cmp al, 0 ; compare the char we're about to print with null
-je .fini ; if it is null, we gonna scoot the fuck outta here
+mov al, [bx]
+cmp al, 0
+je .fini
test cx, cx ; if cx is zero, ascii, otherwise hex string
jne .print_hex
-int 0x10 ; bios call, actually prints the char
+int 0x10
.print_hex_ret:
-inc bx ; adds to the pointer
-jmp .print_loop ; goes back to loop start
+inc bx
+jmp .print_loop
.fini:
-mov al, 0xd ; \r
+mov al, 0xd
int 0x10
-mov al, 0xa ; \n
+mov al, 0xa
int 0x10
popa
ret
@@ -32,7 +31,7 @@ int 0x10
mov al, 'x'
int 0x10
-mov al, [bx] ; shift bits to get first nibble
+mov al, [bx]
shr al, 4
call .bios_print_nibble
@@ -47,13 +46,13 @@ jmp .print_hex_ret
.bios_print_nibble:
-cmp al, 9 ; see if letter worthy
+cmp al, 9
ja .print_hex_letter
-add al, 0x30 ;'1'
+add al, 0x30
int 0x10
ret
.print_hex_letter:
-add al, 0x57 ;'a'
+add al, 0x57
int 0x10
ret