58 lines
606 B
NASM
58 lines
606 B
NASM
bits 64
|
|
|
|
global serial_init
|
|
global serial_putchar
|
|
|
|
section .text
|
|
|
|
serial_init:
|
|
|
|
xor al, al
|
|
mov dx, 0x03f9
|
|
out dx, al
|
|
|
|
mov al, 0x80
|
|
mov dx, 0x03fb
|
|
out dx, al
|
|
|
|
mov al, 0x03
|
|
mov dx, 0x03f8
|
|
out dx, al
|
|
|
|
xor al, al
|
|
mov dx, 0x03f9
|
|
out dx, al
|
|
|
|
mov al, 0x03
|
|
mov dx, 0x03fb
|
|
out dx, al
|
|
|
|
mov al, 0xc7
|
|
mov dx, 0x03fa
|
|
out dx, al
|
|
|
|
ret
|
|
|
|
serial_putchar:
|
|
|
|
cmp dil, 0x0a
|
|
je .do_cr
|
|
.cr_ret:
|
|
|
|
mov dx, 0x03fd
|
|
|
|
.loop:
|
|
in al, dx
|
|
test al, 0x20
|
|
jz .loop
|
|
|
|
mov al, dil
|
|
mov dx, 0x03f8
|
|
out dx, al
|
|
ret
|
|
|
|
.do_cr:
|
|
mov dil, 0x0d
|
|
call serial_putchar
|
|
mov dil, 0x0a
|
|
jmp .cr_ret
|