From dbf5dd9a91e399dc945548511f5c96044b3fb61b Mon Sep 17 00:00:00 2001 From: d0p1 Date: Fri, 3 Jan 2025 14:58:43 +0100 Subject: [PATCH] chore: remove old `klog.inc` and rename `klog.new.inc` --- kernel/kernel.asm | 2 +- kernel/klog.inc | 282 ++++++++++++++++++++++++++---------------- kernel/klog.new.inc | 292 -------------------------------------------- kernel/mm/pmm.inc | 2 +- 4 files changed, 179 insertions(+), 399 deletions(-) delete mode 100644 kernel/klog.new.inc diff --git a/kernel/kernel.asm b/kernel/kernel.asm index b9bce71..824fb53 100644 --- a/kernel/kernel.asm +++ b/kernel/kernel.asm @@ -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' diff --git a/kernel/klog.inc b/kernel/klog.inc index b626109..f6067dc 100644 --- a/kernel/klog.inc +++ b/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,120 +188,122 @@ 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 -szCRLF db CR, LF, 0 +szCRLF db CR, LF, 0 sDigit db '0123456789ABCDEF' -szHexPrefix db '0x', 0 +szHexPrefix db '0x', 0 szKlogBuffer db '00000000', 0 diff --git a/kernel/klog.new.inc b/kernel/klog.new.inc deleted file mode 100644 index e76ea7e..0000000 --- a/kernel/klog.new.inc +++ /dev/null @@ -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 diff --git a/kernel/mm/pmm.inc b/kernel/mm/pmm.inc index 3ef20d2..0d61cf9 100644 --- a/kernel/mm/pmm.inc +++ b/kernel/mm/pmm.inc @@ -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