]> git.dujemihanovic.xyz Git - nameless-os.git/blob - boot/x86/stage3/print.s
FAT32 bootloader boots the kernel
[nameless-os.git] / boot / x86 / stage3 / print.s
1 ; Routines for printing
2
3 print_str:
4 push ax
5 push bx
6 push si
7 mov ah, 0xe
8 xor bh, bh
9 mov bl, 0xf
10 .loop:
11 lodsb
12 cmp al, 0
13 je .done
14 int 0x10
15 jmp .loop
16 .done:
17 pop si
18 pop bx
19 pop ax
20 ret
21
22 ; AL - nibble to print
23 ; CF - clear prints low nibble, set prints high nibble
24 print_nibble:
25 print hex_delm
26 .no_delm:
27 pushf
28 push ax
29 push bx
30 pushf
31 xor bh, bh
32 mov bl, 0xf
33 mov ah, 0xe
34 popf
35 jnc .no_shift
36 shr al, 4
37 .no_shift:
38 and al, 0xf
39 cmp al, 0xa
40 jge .letter
41 .numeric:
42 add al, '0'
43 int 0x10
44 jmp .done
45 .letter:
46 add al, 'a'-10
47 int 0x10
48 .done:
49 pop bx
50 pop ax
51 popf
52 ret
53
54 ; AL - byte to print
55 print_byte:
56 print hex_delm
57 .no_delm:
58 pushf
59 stc
60 call print_nibble.no_delm
61 clc
62 call print_nibble.no_delm
63 popf
64 ret
65
66 print_word:
67 print hex_delm
68 .no_delm:
69 ror ax, 8
70 call print_byte.no_delm
71 ror ax, 8
72 call print_byte.no_delm
73 ret
74
75 print_dword:
76 print hex_delm
77 .no_delm:
78 ror eax, 16
79 call print_word.no_delm
80 ror eax, 16
81 call print_word.no_delm
82 ret
83
84 ; Do a dump of all general purpose regs
85 critical_error:
86 print crit_err
87 print eax_s
88 call print_dword
89 print space
90 print ebx_s
91 mov eax, ebx
92 call print_dword
93 print space
94 print ecx_s
95 mov eax, ecx
96 call print_dword
97 print space
98 print edx_s
99 mov eax, edx
100 call print_dword
101 print newline
102 print esi_s
103 mov eax, esi
104 call print_dword
105 print space
106 print edi_s
107 mov eax, edi
108 call print_dword
109 print newline
110 print cs_s
111 mov ax, cs
112 call print_word
113 print space
114 print ds_s
115 mov ax, ds
116 call print_word
117 print space
118 print es_s
119 mov ax, es
120 call print_word
121 print space
122 print ss_s
123 mov ax, ss
124 call print_word
125 hlt
126 jmp $-1