summaryrefslogtreecommitdiff
path: root/xxx/boot2/print_string_16.asm
diff options
context:
space:
mode:
Diffstat (limited to 'xxx/boot2/print_string_16.asm')
-rw-r--r--xxx/boot2/print_string_16.asm115
1 files changed, 115 insertions, 0 deletions
diff --git a/xxx/boot2/print_string_16.asm b/xxx/boot2/print_string_16.asm
new file mode 100644
index 0000000..9f81a87
--- /dev/null
+++ b/xxx/boot2/print_string_16.asm
@@ -0,0 +1,115 @@
+[bits 16]
+
+BLANK:
+ db 0x12
+
+SPACE:
+ db " ",0
+
+;print_string routine ([bx])
+;this routine will print a null terminated string at [bx] to the screen.
+print_string:
+
+ pusha ;push all registers
+ mov ah,0x0e
+
+ print_string_loop:
+
+ ;check if value at [bx] is "\0" (end of string)
+ mov cl,[bx]
+ cmp cl,0
+ je print_string_finish
+
+ ;otherwise instruct BIOS to print the current char
+ mov al,cl
+ int 0x10
+
+ ;proceed with next char
+ inc bx
+ jmp print_string_loop
+
+ print_string_finish:
+
+ popa ;pop all registers
+ ret ;return to caller
+
+print_clear:
+
+pusha
+ mov ah,0x6 ;func
+ mov al,0 ;scroll one line
+ mov bh,[BLANK] ;blank char
+
+ mov ch,0 ;upper left corner
+ mov cl,0
+ mov dh,20 ;lower right corner
+ mov dl,40
+ int 0x10
+
+ mov ah,0x2
+ mov bh,0
+ mov dl,0
+ mov dh,20
+ int 0x10
+popa
+
+print_nextline:
+
+ pusha
+
+ mov ah,0x6 ;func
+ mov al,1 ;scroll one line
+ mov bh,[BLANK] ;blank char
+
+ mov ch,0 ;upper left corner
+ mov cl,0
+ mov dh,20 ;lower right corner
+ mov dl,40
+ int 0x10
+
+
+ mov ah,0x3
+ mov bh,0
+ int 0x10
+
+
+ mov ah,0x2
+ mov dl,0
+ int 0x10
+
+ mov bx,SPACE
+ call print_string
+
+ popa
+ ret
+
+
+;print byte from al to screen
+ print_hex_byte:
+
+ pusha
+
+ mov [.temp],al
+ shr al,4
+ cmp al,10
+ sbb al,69h
+ das
+
+ mov ah,0Eh
+ int 10h
+
+ mov al,[.temp]
+ ror al,4
+ shr al,4
+ cmp al,10
+ sbb al,69h
+ das
+
+ mov ah,0Eh
+ int 10h
+
+popa
+
+ ret
+
+ .temp db 0