StupidOS/kernel/klog.inc

194 lines
2.4 KiB
PHP
Raw Normal View History

2024-07-07 13:48:22 +00:00
;; File: klog.inc
;; Kernel logging utilities
2024-07-14 16:48:36 +00:00
CMOS_COMMAND = 0x70
2024-07-05 12:23:58 +00:00
CMOS_DATA = 0x71
CMOS_REG_SECOND = 0x00
CMOS_REG_MINUTE = 0x02
CMOS_REG_HOUR = 0x04
COM1 = 0x3F8
2024-07-13 08:17:36 +00:00
klog_kputc:
mov dx, COM1 + 5
push eax
@@:
in al, dx
and al, 0x20
jnz @b
pop eax
mov dx, COM1
out dx, al
ret
2024-07-12 06:58:25 +00:00
2024-07-07 13:48:22 +00:00
;; Function: klog_print
;;
;; In:
;; ESI - Null-terminated string to print
2024-07-05 12:23:58 +00:00
klog_print:
mov dx, COM1
@@:
lodsb
or al, al
jz @f
out dx, al
2024-07-15 06:32:59 +00:00
pusha
call cga_putc
popa
2024-07-05 12:23:58 +00:00
jmp @b
@@:
ret
2024-07-07 13:48:22 +00:00
;; Function: klog_print_time
;;
klog_print_time:
2024-07-05 12:23:58 +00:00
@@:
mov al, 0x0A
2024-07-14 16:48:36 +00:00
out CMOS_COMMAND, al
2024-07-05 12:23:58 +00:00
in al, CMOS_DATA
and al, 0x80
jnz @b
mov al, CMOS_REG_HOUR
2024-07-14 16:48:36 +00:00
out CMOS_COMMAND, al
2024-07-05 12:23:58 +00:00
in al, CMOS_DATA
mov ah, al
shr ah, 4
and ah, 0xF
and al, 0xF
add ah, 0x30
add al, 0x30
mov [szTime + 1], ah
mov [szTime + 2], al
mov al, CMOS_REG_MINUTE
2024-07-14 16:48:36 +00:00
out CMOS_COMMAND, al
2024-07-05 12:23:58 +00:00
in al, CMOS_DATA
mov ah, al
shr ah, 4
and ah, 0xF
and al, 0xF
add ah, 0x30
add al, 0x30
mov [szTime + 4], ah
mov [szTime + 5], al
mov al, CMOS_REG_SECOND
2024-07-14 16:48:36 +00:00
out CMOS_COMMAND, al
2024-07-05 12:23:58 +00:00
in al, CMOS_DATA
mov ah, al
shr ah, 4
and ah, 0xF
and al, 0xF
add ah, 0x30
add al, 0x30
mov [szTime + 7], ah
mov [szTime + 8], al
push esi
mov esi, szTime
call klog_print
pop esi
2024-07-05 09:10:26 +00:00
ret
klog_print_hex:
push esi
mov esi, szHexPrefix
call klog_print
pop esi
or edi, edi
jz .print_zero
push esi
mov esi, szKlogBuffer
xor cl, cl
.loop:
cmp cl, 8
je .print_number
rol edi, 4
mov eax, edi
and eax, 0xF
mov al, byte [sDigit + eax]
mov [esi], al
inc esi
inc cl
jmp .loop
.print_zero:
mov al, '0'
out dx, al
2024-07-15 06:32:59 +00:00
pusha
call cga_putc
popa
jmp .end
.print_number:
mov [esi], byte 0
mov esi, szKlogBuffer
call klog_print
pop esi
.end:
ret
2024-07-05 12:23:58 +00:00
;; Function: klog
;; Output kernel log
klog:
2024-07-07 13:48:22 +00:00
call klog_print_time
2024-07-05 12:23:58 +00:00
.loop:
mov al, [esi]
or al, al
jz .end
cmp al, '%'
jne .putchar
inc esi
mov al, [esi]
cmp al, '%'
je .putchar
cmp al, 's'
jne .check_x
mov edi, esi
pop eax
pop esi
push eax
2024-07-05 12:23:58 +00:00
call klog_print
mov esi, edi
jmp .next
.check_x:
cmp al, 'x'
jne .unknown_format
pop eax
pop edi
push eax
call klog_print_hex
jmp .next
.unknown_format:
mov al, '?'
.putchar:
out dx, al
2024-07-15 06:32:59 +00:00
pusha
call cga_putc
popa
.next:
inc esi
jmp .loop
.end:
2024-07-05 12:23:58 +00:00
mov esi, szCRLF
call klog_print
ret
2024-05-02 11:34:27 +00:00
szTime db '[00:00:00] ', 0
szCRLF db CR, LF, 0
sDigit db '0123456789ABCDEF'
szHexPrefix db '0x', 0
szKlogBuffer db '00000000', 0