#include <machine/asm.h>
.text
ENTRY(cominit)
push %ebp
mov %esp,%ebp
push %ebx
push %edx
push %esi
push %edi
movl 8(%ebp), %edx
call _C_LABEL(prot_to_real) # enter real mode
.code16
movb $0xe3, %al
movb $0, %ah
int $0x14
mov %ax,%bx
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
xor %eax,%eax
mov %bx,%ax
pop %edi
pop %esi
pop %edx
pop %ebx
pop %ebp
ret
ENTRY(computc)
push %ebp
mov %esp,%ebp
push %ecx
push %ebx
push %edx
push %esi
push %edi
movb 8(%ebp),%cl
movl 12(%ebp),%edx
call _C_LABEL(prot_to_real) # enter real mode
.code16
movb %cl,%al
movb $0x01, %ah
int $0x14
movb %ah,%bl
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
xor %eax,%eax
movb %bl,%al
pop %edi
pop %esi
pop %edx
pop %ebx
pop %ecx
pop %ebp
ret
ENTRY(comgetc)
push %ebp
mov %esp,%ebp
push %ebx
push %edx
push %esi
push %edi
movl 8(%ebp),%edx
call _C_LABEL(prot_to_real) # enter real mode
.code16
movb $0x02, %ah
int $0x14
mov %ax, %bx
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
xor %eax,%eax
mov %bx,%ax
pop %edi
pop %esi
pop %edx
pop %ebx
pop %ebp
ret
ENTRY(comstatus)
push %ebp
mov %esp,%ebp
push %ebx
push %edx
push %esi
push %edi
movl 8(%ebp),%edx
call _C_LABEL(prot_to_real) # enter real mode
.code16
movb $0x03, %ah
int $0x14
mov %ax,%bx
calll _C_LABEL(real_to_prot) # back to protected mode
.code32
xor %eax,%eax
mov %bx,%ax
pop %edi
pop %esi
pop %edx
pop %ebx
pop %ebp
ret