1/* $NetBSD: comio.S,v 1.3 2003/02/01 14:48:18 dsl Exp $ */ 2 3/* serial console handling 4 modelled after code in FreeBSD:sys/i386/boot/netboot/start2.S 5 */ 6 7#include <machine/asm.h> 8 9 .text 10 11/************************************************************************** 12INIT - Initialization (com number) 13**************************************************************************/ 14ENTRY(cominit) 15 push %ebp 16 mov %esp,%ebp 17 push %ebx 18 push %edx 19 push %esi 20 push %edi 21 22 movl 8(%ebp), %edx 23 24 call _C_LABEL(prot_to_real) # enter real mode 25 .code16 26 27 # Initialize the serial port (dl) to 9600 baud, 8N1. 28 movb $0xe3, %al 29 movb $0, %ah 30 int $0x14 31 mov %ax,%bx 32 33 calll _C_LABEL(real_to_prot) # back to protected mode 34 .code32 35 36 xor %eax,%eax 37 mov %bx,%ax 38 39 pop %edi 40 pop %esi 41 pop %edx 42 pop %ebx 43 pop %ebp 44 ret 45 46/************************************************************************** 47PUTC - Print a character (char, com number) 48**************************************************************************/ 49ENTRY(computc) 50 push %ebp 51 mov %esp,%ebp 52 push %ecx 53 push %ebx 54 push %edx 55 push %esi 56 push %edi 57 58 movb 8(%ebp),%cl 59 movl 12(%ebp),%edx 60 61 call _C_LABEL(prot_to_real) # enter real mode 62 .code16 63 64 movb %cl,%al 65 movb $0x01, %ah 66 int $0x14 67 68 movb %ah,%bl 69 70 calll _C_LABEL(real_to_prot) # back to protected mode 71 .code32 72 73 xor %eax,%eax 74 movb %bl,%al 75 76 pop %edi 77 pop %esi 78 pop %edx 79 pop %ebx 80 pop %ecx 81 pop %ebp 82 ret 83 84/************************************************************************** 85GETC - Get a character (com number) 86**************************************************************************/ 87ENTRY(comgetc) 88 push %ebp 89 mov %esp,%ebp 90 push %ebx 91 push %edx 92 push %esi 93 push %edi 94 95 movl 8(%ebp),%edx 96 97 call _C_LABEL(prot_to_real) # enter real mode 98 .code16 99 100 movb $0x02, %ah 101 int $0x14 102 mov %ax, %bx 103 104 calll _C_LABEL(real_to_prot) # back to protected mode 105 .code32 106 107 xor %eax,%eax 108 mov %bx,%ax 109 110 pop %edi 111 pop %esi 112 pop %edx 113 pop %ebx 114 pop %ebp 115 ret 116 117/************************************************************************** 118ISKEY - Check for keyboard interrupt (com number) 119**************************************************************************/ 120ENTRY(comstatus) 121 push %ebp 122 mov %esp,%ebp 123 push %ebx 124 push %edx 125 push %esi 126 push %edi 127 128 movl 8(%ebp),%edx 129 130 call _C_LABEL(prot_to_real) # enter real mode 131 .code16 132 133 movb $0x03, %ah 134 int $0x14 135 mov %ax,%bx 136 137 calll _C_LABEL(real_to_prot) # back to protected mode 138 .code32 139 140 xor %eax,%eax 141 mov %bx,%ax 142 143 pop %edi 144 pop %esi 145 pop %edx 146 pop %ebx 147 pop %ebp 148 ret 149