Skip to content

Commit ca4d4c2

Browse files
author
Ian Seyler
committed
Add serial output
1 parent ceddbe8 commit ca4d4c2

File tree

8 files changed

+80
-9
lines changed

8 files changed

+80
-9
lines changed

src/drivers/serial.asm

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ serial_init:
1111
; Pure64 has already initialized the serial port
1212

1313
; Check if Serial is present via ACPI IAPC_BOOT_ARCH
14-
mov ax, [os_boot_arch]
15-
bt ax, 0 ; LEGACY_DEVICES
16-
jnc serial_init_error
14+
; mov ax, [os_boot_arch]
15+
; bt ax, 0 ; LEGACY_DEVICES
16+
; jnc serial_init_error
1717

1818
; Set flag that Serial was enabled
1919
or qword [os_SysConfEn], 1 << 2
@@ -35,6 +35,9 @@ serial_init:
3535
out dx, al
3636
%endif
3737

38+
mov rax, b_output_serial
39+
mov [0x100018], rax ; Set kernel b_output to the serial port
40+
3841
serial_init_error:
3942
ret
4043
; -----------------------------------------------------------------------------

src/init/64.asm

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,18 @@ make_interrupt_gate_stubs:
105105
mov rax, 0x200000 ; Stacks start at 2MiB
106106
mov [os_StackBase], rax
107107

108+
; Configure the serial port (if present)
109+
call serial_init
110+
111+
; Output progress via serial
112+
mov rsi, msg_baremetal
113+
call os_debug_string
114+
mov rsi, msg_64
115+
call os_debug_string
116+
108117
; Initialize text output
109118
%ifndef NO_LFB
110119
call lfb_init ; Initialize LFB for text output
111-
%else
112-
mov rax, b_output_serial
113-
mov [0x100018], rax ; Set kernel b_output to the serial port
114120
%endif
115121

116122
; Initialize the APIC
@@ -144,13 +150,14 @@ skip_ap:
144150
jmp next_ap
145151
no_more_aps:
146152

147-
; Configure the serial port
148-
call serial_init
149-
150153
; Output block to screen (2/8)
151154
mov ebx, 2
152155
call os_debug_block
153156

157+
; Output progress via serial
158+
mov rsi, msg_ok
159+
call os_debug_string
160+
154161
ret
155162
; -----------------------------------------------------------------------------
156163

src/init/bus.asm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@
2828

2929
; -----------------------------------------------------------------------------
3030
init_bus:
31+
; Output progress via serial
32+
mov rsi, msg_bus
33+
call os_debug_string
34+
3135
mov rdi, bus_table ; Address of Bus Table in memory
3236
xor edx, edx ; Register 0 for Device ID/Vendor ID
3337

@@ -156,6 +160,10 @@ init_bus_usb_not_found:
156160
mov ebx, 6
157161
call os_debug_block
158162

163+
; Output progress via serial
164+
mov rsi, msg_ok
165+
call os_debug_string
166+
159167
ret
160168
; -----------------------------------------------------------------------------
161169

src/init/net.asm

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
; -----------------------------------------------------------------------------
1010
; init_net -- Configure the first network device it finds
1111
init_net:
12+
; Output progress via serial
13+
mov rsi, msg_net
14+
call os_debug_string
15+
1216
mov ax, [NIC_DeviceVendor_ID] ; Check for NIC driver definitions
1317
cmp ax, 0x0000
1418
je init_net_end ; If none exist then bail out
@@ -114,6 +118,11 @@ init_net_end:
114118
; Output block to screen (6/8)
115119
mov ebx, 10
116120
call os_debug_block
121+
122+
; Output progress via serial
123+
mov rsi, msg_ok
124+
call os_debug_string
125+
117126
ret
118127
; -----------------------------------------------------------------------------
119128

src/init/nvs.asm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
; -----------------------------------------------------------------------------
1010
; init_nvs -- Configure the first non-volatile storage device it finds
1111
init_nvs:
12+
; Output progress via serial
13+
mov rsi, msg_nvs
14+
call os_debug_string
15+
1216
%ifndef NO_NVME
1317
; Check Bus Table for NVMe
1418
mov rsi, bus_table ; Load Bus Table address to RSI
@@ -85,6 +89,10 @@ init_nvs_done:
8589
mov ebx, 8
8690
call os_debug_block
8791

92+
; Output progress via serial
93+
mov rsi, msg_ok
94+
call os_debug_string
95+
8896
ret
8997
; -----------------------------------------------------------------------------
9098

src/init/sys.asm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ init_sys_done:
2424
mov ebx, 14
2525
call os_debug_block
2626

27+
; Output progress via serial
28+
mov rsi, msg_ready
29+
call os_debug_string
30+
2731
ret
2832
; -----------------------------------------------------------------------------
2933

src/syscalls/debug.asm

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,31 @@ os_debug_space:
155155
; -----------------------------------------------------------------------------
156156

157157

158+
; -----------------------------------------------------------------------------
159+
; os_debug_string - Dump a string to output
160+
; IN: RSI = String Address (null terminated)
161+
os_debug_string:
162+
push rdi
163+
push rcx
164+
push rax
165+
166+
xor ecx, ecx
167+
xor eax, eax
168+
mov rdi, rsi
169+
not rcx
170+
repne scasb ; compare byte at RDI to value in AL
171+
not rcx
172+
dec rcx
173+
174+
call b_output
175+
176+
pop rax
177+
pop rcx
178+
pop rdi
179+
ret
180+
; -----------------------------------------------------------------------------
181+
182+
158183
; -----------------------------------------------------------------------------
159184
; os_debug_block - Create a block (8x8 pixels) of colour on the screen
160185
; IN: EBX = Index #

src/sysvar.asm

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
newline: db 13, 10, 0
1111
space: db ' ', 0
1212
system_status_header: db 'BareMetal v1.0.0', 0
13+
msg_baremetal: db 13, 10, '[ BareMetal ]', 0
14+
msg_64: db 13, 10, '64', 0
15+
msg_bus: db 13, 10, 'bus', 0
16+
msg_nvs: db 13, 10, 'nvs', 0
17+
msg_net: db 13, 10, 'net', 0
18+
msg_ok: db ' ok', 0
19+
msg_ready: db 13, 10, 'system ready', 13, 10, 13, 10, 0
1320

1421
; Memory addresses
1522

0 commit comments

Comments
 (0)