etc/protocols - sync with NetBSD-8
[minix.git] / sys / arch / i386 / stand / lib / comio.S
blob4ac914968bac986b79340128e026673bec7c3c86
1 /*      $NetBSD: comio.S,v 1.4 2003/04/16 14:23:11 dsl Exp $    */
3 /* serial console handling
4   modelled after code in FreeBSD:sys/i386/boot/netboot/start2.S
5  */
7 #include <machine/asm.h>
9         .text
11 /**************************************************************************
12 INIT - Initialization (com number)
13 **************************************************************************/
14 ENTRY(cominit)
15         push    %ebp
16         mov     %esp,%ebp
17         push    %ebx
18         push    %edx
19         push    %esi
20         push    %edi
22         movl    8(%ebp), %edx
24         call    _C_LABEL(prot_to_real)  # enter real mode
25         .code16
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
33         calll   _C_LABEL(real_to_prot) # back to protected mode
34         .code32
36         xor     %eax,%eax
37         mov     %bx,%ax
39         pop     %edi
40         pop     %esi
41         pop     %edx
42         pop     %ebx
43         pop     %ebp
44         ret
46 /**************************************************************************
47 PUTC - Print a character (char, com number)
48 **************************************************************************/
49 ENTRY(computc)
50         push    %ebp
51         mov     %esp,%ebp
52         push    %ecx
53         push    %ebx
54         push    %edx
55         push    %esi
56         push    %edi
58         movb    8(%ebp),%cl
59         movl    12(%ebp),%edx
61         call    _C_LABEL(prot_to_real)  # enter real mode
62         .code16
64         movb    %cl,%al
65         movb    $0x01, %ah
66         int     $0x14
68         movb    %ah,%bl
70         calll   _C_LABEL(real_to_prot) # back to protected mode
71         .code32
73         xor     %eax,%eax
74         movb    %bl,%al
76         pop     %edi
77         pop     %esi
78         pop     %edx
79         pop     %ebx
80         pop     %ecx
81         pop     %ebp
82         ret
84 /**************************************************************************
85 GETC - Get a character (com number)
86 **************************************************************************/
87 ENTRY(comgetc)
88         push    %ebp
89         mov     %esp,%ebp
90         push    %ebx
91         push    %edx
92         push    %esi
93         push    %edi
95         movl    8(%ebp),%edx
97         call    _C_LABEL(prot_to_real)  # enter real mode
98         .code16
100         movb    $0x02, %ah
101         int     $0x14
102         mov     %ax, %bx
104         calll   _C_LABEL(real_to_prot) # back to protected mode
105         .code32
107         xor     %eax,%eax
108         mov     %bx,%ax
110         pop     %edi
111         pop     %esi
112         pop     %edx
113         pop     %ebx
114         pop     %ebp
115         ret
117 /**************************************************************************
118 ISKEY - Check for keyboard interrupt (com number)
119 **************************************************************************/
120 ENTRY(comstatus)
121         push    %ebp
122         mov     %esp,%ebp
123         push    %ebx
124         push    %edx
125         push    %esi
126         push    %edi
128         movl    8(%ebp),%edx
130         call    _C_LABEL(prot_to_real)  # enter real mode
131         .code16
133         movb    $0x03, %ah
134         int     $0x14
135         mov     %ax,%bx
137         calll   _C_LABEL(real_to_prot) # back to protected mode
138         .code32
140         xor     %eax,%eax
141         mov     %bx,%ax
143         pop     %edi
144         pop     %esi
145         pop     %edx
146         pop     %ebx
147         pop     %ebp
148         ret