chore: remove old klog.inc
and rename klog.new.inc
This commit is contained in:
parent
567a9388d8
commit
dbf5dd9a91
4 changed files with 179 additions and 399 deletions
|
@ -118,7 +118,7 @@ kmain:
|
|||
call klog
|
||||
jmp .halt
|
||||
|
||||
include 'klog.new.inc'
|
||||
include 'klog.inc'
|
||||
include 'dev/console.inc'
|
||||
include 'dev/dev.inc'
|
||||
include 'mm/bootstrap.inc'
|
||||
|
|
276
kernel/klog.inc
276
kernel/klog.inc
|
@ -1,59 +1,81 @@
|
|||
;; File: klog.inc
|
||||
;; Kernel logging utilities
|
||||
;;
|
||||
|
||||
COM1 = 0x3F8
|
||||
|
||||
;; Function: klog_print
|
||||
;; Function: _klog_print_str
|
||||
;;
|
||||
;; In:
|
||||
;; ESI - Null-terminated string to print
|
||||
klog_print:
|
||||
;; In: EAX - Null-terminated string to print
|
||||
_klog_print_str:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push esi
|
||||
mov dx, COM1
|
||||
mov esi, eax
|
||||
@@:
|
||||
lodsb
|
||||
or al, al
|
||||
jz @f
|
||||
out dx, al
|
||||
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
|
||||
jmp @b
|
||||
@@:
|
||||
pop esi
|
||||
leave
|
||||
ret
|
||||
|
||||
;; Function: klog_print_integer
|
||||
;; Function: _klog_print_int
|
||||
;;
|
||||
;; In:
|
||||
;; EDI - number
|
||||
;;
|
||||
klog_print_integer:
|
||||
test edi, edi
|
||||
js .print_minus
|
||||
;; EAX - number
|
||||
_klog_print_int:
|
||||
test eax, eax
|
||||
jns @f
|
||||
; TODO print '-'
|
||||
mov ecx, eax
|
||||
mov dx, COM1
|
||||
mov al, '-'
|
||||
out dx, al
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
mov eax, ecx
|
||||
@@:
|
||||
mov ecx, eax
|
||||
sar ecx, 31
|
||||
xor ecx, eax
|
||||
sub ecx, eax
|
||||
|
||||
mov ecx, eax
|
||||
call _klog_print_unsigned
|
||||
|
||||
.print_minus:
|
||||
ret
|
||||
|
||||
;; Function: klog_print_unsigned
|
||||
;; Function: _klog_print_unsigned
|
||||
;;
|
||||
;; In:
|
||||
;; EDI - number
|
||||
;;
|
||||
klog_print_unsigned:
|
||||
push edx
|
||||
;; EAX - number
|
||||
_klog_print_unsigned:
|
||||
push ebx
|
||||
xor ecx, ecx
|
||||
mov eax, edi
|
||||
mov ebx, 10
|
||||
.loop_calc:
|
||||
xor ecx, ecx
|
||||
@@:
|
||||
xor edx, edx
|
||||
div ebx
|
||||
push edx
|
||||
inc ecx
|
||||
or eax, eax
|
||||
jnz .loop_calc
|
||||
.loop_print:
|
||||
jnz @b
|
||||
|
||||
@@:
|
||||
pop eax
|
||||
add al, '0'
|
||||
add al, 0
|
||||
mov dx, COM1
|
||||
out dx, al
|
||||
pusha
|
||||
|
@ -61,17 +83,65 @@ klog_print_unsigned:
|
|||
popa
|
||||
|
||||
dec ecx
|
||||
|
||||
or cl, cl
|
||||
jnz .loop_print
|
||||
jnz @b
|
||||
|
||||
pop ebx
|
||||
pop edx
|
||||
|
||||
ret
|
||||
|
||||
;; Function: klog_print_time
|
||||
;; Function: _klog_print_hex
|
||||
;;
|
||||
klog_print_time:
|
||||
;; In:
|
||||
;; EAX - number
|
||||
_klog_print_hex:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push edi
|
||||
mov edi, eax
|
||||
|
||||
mov eax, szHexPrefix
|
||||
call _klog_print_str
|
||||
|
||||
or edi, edi
|
||||
jz .print_zero
|
||||
|
||||
xor cl, cl
|
||||
.begin:
|
||||
cmp cl, 8
|
||||
je .print_number
|
||||
rol edi, 4
|
||||
mov eax, edi
|
||||
and eax, 0xF
|
||||
mov al, byte [sDigit + eax]
|
||||
mov [szKlogBuffer + ecx], al
|
||||
inc cl
|
||||
jmp .begin
|
||||
|
||||
.print_zero:
|
||||
mov al, '0'
|
||||
mov dx, COM1
|
||||
out dx, al
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
jmp .end
|
||||
|
||||
.print_number:
|
||||
mov [szKlogBuffer + ecx], byte 0
|
||||
mov eax, szKlogBuffer
|
||||
call _klog_print_str
|
||||
|
||||
.end:
|
||||
pop edi
|
||||
leave
|
||||
ret
|
||||
|
||||
;; Function: _klog_print_time
|
||||
;;
|
||||
_klog_print_time:
|
||||
; wait CMOS ready
|
||||
@@:
|
||||
mov al, 0x0A
|
||||
out CMOS_COMMAND, al
|
||||
|
@ -118,116 +188,118 @@ klog_print_time:
|
|||
|
||||
add ah, 0x30
|
||||
add al, 0x30
|
||||
|
||||
mov [szTime + 7], ah
|
||||
mov [szTime + 8], al
|
||||
|
||||
mov eax, szTime
|
||||
call _klog_print_str
|
||||
|
||||
push esi
|
||||
mov esi, szTime
|
||||
call klog_print
|
||||
pop esi
|
||||
|
||||
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
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
jmp .end
|
||||
.print_number:
|
||||
mov [esi], byte 0
|
||||
mov esi, szKlogBuffer
|
||||
call klog_print
|
||||
pop esi
|
||||
.end:
|
||||
ret
|
||||
|
||||
;; Function: klog
|
||||
;;
|
||||
;; Output kernel log
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - null-terminated string
|
||||
;; STACK[X] - var_arg
|
||||
klog:
|
||||
call klog_print_time
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
.loop:
|
||||
push esi
|
||||
mov esi, eax
|
||||
|
||||
; display log time
|
||||
call _klog_print_time
|
||||
|
||||
mov ecx, 4
|
||||
.begin:
|
||||
mov al, [esi]
|
||||
or al, al
|
||||
jz .end
|
||||
; search for formating
|
||||
cmp al, '%'
|
||||
jne .putchar
|
||||
; read next char
|
||||
inc esi
|
||||
mov al, [esi]
|
||||
|
||||
; check if another '%'
|
||||
cmp al, '%'
|
||||
je .putchar
|
||||
|
||||
; check if string format
|
||||
cmp al, 's'
|
||||
jne .check_x
|
||||
mov edi, esi
|
||||
pop eax
|
||||
pop esi
|
||||
push eax
|
||||
call klog_print
|
||||
mov esi, edi
|
||||
jne @f
|
||||
; print string
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_str
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
.check_x:
|
||||
|
||||
; check if hex format
|
||||
@@:
|
||||
cmp al, 'x'
|
||||
jne .check_d
|
||||
pop eax
|
||||
pop edi
|
||||
push eax
|
||||
call klog_print_hex
|
||||
jne @f
|
||||
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_hex
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
.check_d:
|
||||
|
||||
; check if int format
|
||||
@@:
|
||||
cmp al, 'd'
|
||||
jne .check_u
|
||||
pop eax
|
||||
pop edi
|
||||
push eax
|
||||
call klog_print_integer
|
||||
jne @f
|
||||
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_int
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
.check_u:
|
||||
|
||||
; check if unsigned
|
||||
@@:
|
||||
cmp al, 'u'
|
||||
jne .unknown_format
|
||||
pop eax
|
||||
pop edi
|
||||
push eax
|
||||
call klog_print_unsigned
|
||||
jne @f
|
||||
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_unsigned
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
.unknown_format:
|
||||
|
||||
; unknown format
|
||||
@@:
|
||||
mov al, '?'
|
||||
.putchar:
|
||||
|
||||
.putchar: ; XXX: fix this mess
|
||||
mov dx, COM1
|
||||
out dx, al
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
|
||||
.next:
|
||||
inc esi
|
||||
jmp .loop
|
||||
jmp .begin
|
||||
|
||||
.end:
|
||||
mov esi, szCRLF
|
||||
call klog_print
|
||||
mov eax, szCRLF
|
||||
call _klog_print_str
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
szTime db '[00:00:00] ', 0
|
||||
|
|
|
@ -1,292 +0,0 @@
|
|||
;; File: klog.inc
|
||||
;; Kernel logging utilities
|
||||
;;
|
||||
|
||||
COM1 = 0x3F8
|
||||
|
||||
;; Function: _klog_print
|
||||
;;
|
||||
;; In: EAX - Null-terminated string to print
|
||||
_klog_print_str:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push esi
|
||||
mov dx, COM1
|
||||
mov esi, eax
|
||||
@@:
|
||||
lodsb
|
||||
or al, al
|
||||
jz @f
|
||||
out dx, al
|
||||
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
|
||||
jmp @b
|
||||
@@:
|
||||
pop esi
|
||||
leave
|
||||
ret
|
||||
|
||||
;; Function: _klog_print_int
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - number
|
||||
_klog_print_int:
|
||||
test eax, eax
|
||||
js .print_minus
|
||||
.print_minus:
|
||||
ret
|
||||
|
||||
;; Function: _klog_print_unsigned
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - number
|
||||
_klog_print_unsigned:
|
||||
push ebx
|
||||
mov ebx, 10
|
||||
xor ecx, ecx
|
||||
@@:
|
||||
xor edx, edx
|
||||
div ebx
|
||||
push edx
|
||||
inc ecx
|
||||
or eax, eax
|
||||
jnz @b
|
||||
|
||||
@@:
|
||||
pop eax
|
||||
add al, 0
|
||||
mov dx, COM1
|
||||
out dx, al
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
|
||||
dec ecx
|
||||
or cl, cl
|
||||
jnz @b
|
||||
|
||||
pop ebx
|
||||
|
||||
ret
|
||||
|
||||
;; Function: _klog_print_hex
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - number
|
||||
_klog_print_hex:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push edi
|
||||
mov edi, eax
|
||||
|
||||
mov eax, szHexPrefix
|
||||
call _klog_print_str
|
||||
|
||||
or edi, edi
|
||||
jz .print_zero
|
||||
|
||||
xor cl, cl
|
||||
.begin:
|
||||
cmp cl, 8
|
||||
je .print_number
|
||||
rol edi, 4
|
||||
mov eax, edi
|
||||
and eax, 0xF
|
||||
mov al, byte [sDigit + eax]
|
||||
mov [szKlogBuffer + ecx], al
|
||||
inc cl
|
||||
jmp .begin
|
||||
|
||||
.print_zero:
|
||||
mov al, '0'
|
||||
mov dx, COM1
|
||||
out dx, al
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
jmp .end
|
||||
|
||||
.print_number:
|
||||
mov [szKlogBuffer + ecx], byte 0
|
||||
mov eax, szKlogBuffer
|
||||
call _klog_print_str
|
||||
|
||||
.end:
|
||||
pop edi
|
||||
leave
|
||||
ret
|
||||
|
||||
;; Function: _klog_print_time
|
||||
;;
|
||||
_klog_print_time:
|
||||
; wait CMOS ready
|
||||
@@:
|
||||
mov al, 0x0A
|
||||
out CMOS_COMMAND, al
|
||||
in al, CMOS_DATA
|
||||
and al, 0x80
|
||||
jnz @b
|
||||
|
||||
mov al, CMOS_REG_HOUR
|
||||
out CMOS_COMMAND, al
|
||||
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
|
||||
out CMOS_COMMAND, al
|
||||
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
|
||||
out CMOS_COMMAND, al
|
||||
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
|
||||
|
||||
mov eax, szTime
|
||||
call _klog_print_str
|
||||
|
||||
ret
|
||||
|
||||
;; Function: klog
|
||||
;;
|
||||
;; Output kernel log
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - null-terminated string
|
||||
;; STACK[X] - var_arg
|
||||
klog:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push esi
|
||||
mov esi, eax
|
||||
|
||||
; display log time
|
||||
call _klog_print_time
|
||||
|
||||
mov ecx, 4
|
||||
.begin:
|
||||
mov al, [esi]
|
||||
or al, al
|
||||
jz .end
|
||||
; search for formating
|
||||
cmp al, '%'
|
||||
jne .putchar
|
||||
; read next char
|
||||
inc esi
|
||||
mov al, [esi]
|
||||
|
||||
; check if another '%'
|
||||
cmp al, '%'
|
||||
je .putchar
|
||||
|
||||
; check if string format
|
||||
cmp al, 's'
|
||||
jne @f
|
||||
; print string
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_str
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
|
||||
; check if hex format
|
||||
@@:
|
||||
cmp al, 'x'
|
||||
jne @f
|
||||
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_hex
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
|
||||
; check if int format
|
||||
@@:
|
||||
cmp al, 'd'
|
||||
jne @f
|
||||
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_int
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
|
||||
; check if unsigned
|
||||
@@:
|
||||
cmp al, 'u'
|
||||
jne @f
|
||||
|
||||
mov eax, [ebp + ecx]
|
||||
push ecx
|
||||
call _klog_print_unsigned
|
||||
pop ecx
|
||||
add ecx, 4
|
||||
|
||||
jmp .next
|
||||
|
||||
; unknown format
|
||||
@@:
|
||||
mov al, '?'
|
||||
|
||||
.putchar: ; XXX: fix this mess
|
||||
mov dx, COM1
|
||||
out dx, al
|
||||
pusha
|
||||
call cga_putc
|
||||
popa
|
||||
|
||||
.next:
|
||||
inc esi
|
||||
jmp .begin
|
||||
|
||||
.end:
|
||||
mov eax, szCRLF
|
||||
call _klog_print_str
|
||||
|
||||
leave
|
||||
ret
|
||||
|
||||
szTime db '[00:00:00] ', 0
|
||||
szCRLF db CR, LF, 0
|
||||
sDigit db '0123456789ABCDEF'
|
||||
szHexPrefix db '0x', 0
|
||||
szKlogBuffer db '00000000', 0
|
|
@ -98,7 +98,7 @@ pmm_free:
|
|||
;; Out:
|
||||
;; EAX - return -1 on error
|
||||
pmm_init:
|
||||
mov esi, szMsgMmInit
|
||||
mov eax, szMsgMmInit
|
||||
call klog
|
||||
|
||||
mov eax, kend
|
||||
|
|
Loading…
Reference in a new issue