1/* $NetBSD: conio.S,v 1.5 2005/12/11 12:17:48 christos Exp $ */ 2 3/* PC console handling 4 originally from: FreeBSD:sys/i386/boot/netboot/start2.S 5 */ 6 7#include <machine/asm.h> 8 9 .text 10 11/************************************************************************** 12PUTC - Print a character 13**************************************************************************/ 14ENTRY(conputc) 15 push %ebp 16 mov %esp,%ebp 17 push %ecx 18 push %ebx 19 push %esi 20 push %edi 21 22 movb 8(%ebp),%cl 23 24 call _C_LABEL(prot_to_real) # enter real mode 25 .code16 26 27 movb %cl,%al 28 movw $1,%bx 29 movb $0x0e,%ah 30 int $0x10 31 32 calll _C_LABEL(real_to_prot) # back to protected mode 33 .code32 34 35 pop %edi 36 pop %esi 37 pop %ebx 38 pop %ecx 39 pop %ebp 40 ret 41 42/************************************************************************** 43GETC - Get a character 44**************************************************************************/ 45ENTRY(congetc) 46 push %ebp 47 mov %esp,%ebp 48 push %ebx 49 push %esi 50 push %edi 51 52 call _C_LABEL(prot_to_real) # enter real mode 53 .code16 54 55 movb $0x0,%ah 56 int $0x16 57 movb %al,%bl 58 59 calll _C_LABEL(real_to_prot) # back to protected mode 60 .code32 61 62 xor %eax,%eax 63 movb %bl,%al 64 65 pop %edi 66 pop %esi 67 pop %ebx 68 pop %ebp 69 ret 70 71/************************************************************************** 72ISSHIFT - Check for keyboard interrupt; via shift key 73**************************************************************************/ 74ENTRY(conisshift) 75 push %ebp 76 mov %esp,%ebp 77 push %ebx 78 push %esi 79 push %edi 80 81 call _C_LABEL(prot_to_real) # enter real mode 82 .code16 83 84 xor %bx,%bx 85 movb $0x2,%ah 86 int $0x16 87 testb $3,%al 88 setnz %bl 89 90 calll _C_LABEL(real_to_prot) # back to protected mode 91 .code32 92 93 xor %eax,%eax 94 movb %bl,%al 95 96 pop %edi 97 pop %esi 98 pop %ebx 99 pop %ebp 100 ret 101 102/************************************************************************** 103ISKEY - Check for keyboard input 104**************************************************************************/ 105ENTRY(coniskey) 106 push %ebp 107 mov %esp,%ebp 108 push %ebx 109 push %esi 110 push %edi 111 112 call _C_LABEL(prot_to_real) # enter real mode 113 .code16 114 115 xor %bx,%bx 116 movb $0x1,%ah 117 int $0x16 118 setnz %bl 119 120 calll _C_LABEL(real_to_prot) # back to protected mode 121 .code32 122 123 xor %eax,%eax 124 movb %bl,%al 125 126 pop %edi 127 pop %esi 128 pop %ebx 129 pop %ebp 130 ret 131