816bb96145
little hacking by me. This isn't strictly identical to his 920312 release -- I've hacked it a bit -- but since we are taking over change control it doesn't matter much.
103 lines
1.7 KiB
ArmAsm
103 lines
1.7 KiB
ArmAsm
/* $NetBSD: conio.S,v 1.1.1.1 1997/03/14 02:40:32 perry Exp $ */
|
|
|
|
/* PC console handling
|
|
originally from: FreeBSD:sys/i386/boot/netboot/start2.S
|
|
*/
|
|
|
|
#include <machine/asm.h>
|
|
|
|
#define data32 .byte 0x66
|
|
|
|
.text
|
|
|
|
/**************************************************************************
|
|
PUTC - Print a character
|
|
**************************************************************************/
|
|
ENTRY(conputc)
|
|
push %ebp
|
|
mov %esp,%ebp
|
|
push %ecx
|
|
push %ebx
|
|
push %esi
|
|
push %edi
|
|
|
|
movb 8(%ebp),%cl
|
|
|
|
call _C_LABEL(prot_to_real) # enter real mode
|
|
|
|
movb %cl,%al
|
|
data32
|
|
mov $1,%ebx
|
|
movb $0x0e,%ah
|
|
int $0x10
|
|
|
|
data32
|
|
call _C_LABEL(real_to_prot) # back to protected mode
|
|
|
|
pop %edi
|
|
pop %esi
|
|
pop %ebx
|
|
pop %ecx
|
|
pop %ebp
|
|
ret
|
|
|
|
/**************************************************************************
|
|
GETC - Get a character
|
|
**************************************************************************/
|
|
ENTRY(congetc)
|
|
push %ebp
|
|
mov %esp,%ebp
|
|
push %ebx
|
|
push %esi
|
|
push %edi
|
|
|
|
call _C_LABEL(prot_to_real) # enter real mode
|
|
|
|
movb $0x0,%ah
|
|
int $0x16
|
|
movb %al,%bl
|
|
|
|
data32
|
|
call _C_LABEL(real_to_prot) # back to protected mode
|
|
|
|
xor %eax,%eax
|
|
movb %bl,%al
|
|
|
|
pop %edi
|
|
pop %esi
|
|
pop %ebx
|
|
pop %ebp
|
|
ret
|
|
|
|
/**************************************************************************
|
|
ISKEY - Check for keyboard interrupt
|
|
**************************************************************************/
|
|
ENTRY(coniskey)
|
|
push %ebp
|
|
mov %esp,%ebp
|
|
push %ebx
|
|
push %esi
|
|
push %edi
|
|
|
|
call _C_LABEL(prot_to_real) # enter real mode
|
|
|
|
xor %ebx,%ebx
|
|
movb $0x1,%ah
|
|
int $0x16
|
|
data32
|
|
jz 1f
|
|
movb %al,%bl
|
|
1:
|
|
|
|
data32
|
|
call _C_LABEL(real_to_prot) # back to protected mode
|
|
|
|
xor %eax,%eax
|
|
movb %bl,%al
|
|
|
|
pop %edi
|
|
pop %esi
|
|
pop %ebx
|
|
pop %ebp
|
|
ret
|