Skip to content

Commit

Permalink
refactor(kernel): rewrite com probe
Browse files Browse the repository at this point in the history
  • Loading branch information
d0p1s4m4 committed Jul 22, 2024
1 parent 7834036 commit 40e16ca
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 42 deletions.
96 changes: 68 additions & 28 deletions kernel/dev/at/com.inc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ UART8250_IIR = 0x2
UART8250_FCR = 0x2
UART8250_LCR = 0x3
UART8250_MCR = 0x4
UART8250_MCR_OUT2 = 0x08
UART8250_LSR = 0x5
UART8250_LSR_THRE = 0x20
UART8250_MSR = 0x6
UART8250_SCR = 0x7

Expand All @@ -27,37 +29,47 @@ UART8250_DLL = 0x0
UART8250_DLH = 0x1

com_init:
mov ax, COM1
push ebx
xor cx, cx
.loop:
inc ch

; get io address
movzx eax, cl
shl eax, 1
add eax, aComPorts
mov bx, [eax]

mov ax, bx
push ecx
call com_probe
pop ecx
or eax, eax
jnz @f
mov esi, szMsgCom1Found
call klog
@@:
mov ax, COM2
call com_probe
or eax, eax
jnz @f
mov esi, szMsgCom2Found
call klog
@@:
mov ax, COM3
call com_probe
or eax, eax
jnz @f
mov esi, szMsgCom3Found
call klog
@@:
mov ax, COM4
call com_probe
or eax, eax
jnz @f
mov esi, szMsgCom4Found
; comX found yeah
movzx eax, ch
push ecx
push eax
mov esi, szMsgComFound
call klog
pop ecx

; mark comX as active
mov al, 1
shl al, cl
or byte [uComActive], al
@@:
inc cl
cmp cl, NCOM
jb .loop

pop ebx
ret

;; Function: com_probe
;;
;; In:
;; AX - IO port
com_probe:
mov dx, ax
add dx, UART8250_LCR
Expand All @@ -66,6 +78,8 @@ com_probe:
dec dx
out dx, al
xor ecx, ecx

;; wait a little
@@:
inc ecx
cmp ecx, 100
Expand All @@ -81,9 +95,29 @@ com_probe:
xor eax, eax
ret

;; Function: com_putc
;;
;; In:
;; AL - Char to print
;; DX - IO port
;;
com_putc:
add dx, UART8250_LSR
push eax
@@:
in al, dx
and al, UART8250_LSR_THRE
jnz @b
pop eax
sub dx, UART8250_LSR
out dx, al
ret
ret

com_irq1:
pusha

mov esi, szMsgComIRQ
call klog
popa
iret

Expand Down Expand Up @@ -122,10 +156,16 @@ com_reset:
uCom1Lock dd 0
uCom2Lock dd 0
uComActive db 0
szMsgCom1Found db "COM: com1 found", 0
szMsgCom2Found db "COM: com2 found", 0
szMsgCom3Found db "COM: com3 found", 0
szMsgCom4Found db "COM: com4 found", 0

szMsgComFound db "COM: com%u found", 0
szMsgComIRQ db "com irq", 0

aComPorts:
dw COM1
dw COM2
dw COM3
dw COM4
.end:

com_device:
db 'com', 0, 0, 0, 0, 0
Expand Down
79 changes: 65 additions & 14 deletions kernel/klog.inc
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,6 @@

COM1 = 0x3F8

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


;; Function: klog_print
;;
;; In:
Expand All @@ -34,6 +21,54 @@ klog_print:
@@:
ret

;; Function: klog_print_integer
;;
;; In:
;; EDI - number
;;
klog_print_integer:
test edi, edi
js .print_minus

.print_minus:
ret

;; Function: klog_print_unsigned
;;
;; In:
;; EDI - number
;;
klog_print_unsigned:
push edx
push ebx
xor ecx, ecx
mov eax, edi
mov ebx, 10
.loop_calc:
xor edx, edx
div ebx
push edx
inc ecx
or eax, eax
jnz .loop_calc
.loop_print:
pop eax
add al, '0'
mov dx, COM1
out dx, al
pusha
call cga_putc
popa

dec ecx

or cl, cl
jnz .loop_print
pop ebx
pop edx
ret

;; Function: klog_print_time
;;
klog_print_time:
Expand Down Expand Up @@ -158,12 +193,28 @@ klog:
jmp .next
.check_x:
cmp al, 'x'
jne .unknown_format
jne .check_d
pop eax
pop edi
push eax
call klog_print_hex
jmp .next
.check_d:
cmp al, 'd'
jne .check_u
pop eax
pop edi
push eax
call klog_print_integer
jmp .next
.check_u:
cmp al, 'u'
jne .unknown_format
pop eax
pop edi
push eax
call klog_print_unsigned
jmp .next
.unknown_format:
mov al, '?'
.putchar:
Expand Down

0 comments on commit 40e16ca

Please sign in to comment.