Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / i386 / stand / lib / conio.S
blob111b899a8fe170a2587404dbf1d1cdc83465877e
1 /*      $NetBSD: conio.S,v 1.5 2005/12/11 12:17:48 christos Exp $       */
3 /* PC console handling
4   originally from: FreeBSD:sys/i386/boot/netboot/start2.S
5  */
7 #include <machine/asm.h>
9         .text
11 /**************************************************************************
12 CLR - Clear screen
13 **************************************************************************/
14 ENTRY(conclr)
15         push    %ebp
16         mov     %esp,%ebp
17         push    %ecx
18         push    %ebx
19         push    %esi
20         push    %edi
22         movb    8(%ebp),%cl
24         call    _C_LABEL(prot_to_real)  # enter real mode
25         .code16
27         /* Clear screen. */
28         movw    $0x0600, %ax
29         movw    $0x0700, %bx
30         xorw    %cx, %cx
31         movw    $0x184f, %dx    /* 80x25 */
32         int     $0x10
34         /* Home cursor. */
35         movb    $0x02, %ah
36         xorw    %bx, %bx
37         xorw    %dx, %dx
38         int     $0x10
40         calll   _C_LABEL(real_to_prot) # back to protected mode
41         .code32
43         pop     %edi
44         pop     %esi
45         pop     %ebx
46         pop     %ecx
47         pop     %ebp
48         ret
50 /**************************************************************************
51 PUTC - Print a character
52 **************************************************************************/
53 ENTRY(conputc)
54         push    %ebp
55         mov     %esp,%ebp
56         push    %ecx
57         push    %ebx
58         push    %esi
59         push    %edi
61         movb    8(%ebp),%cl
63         call    _C_LABEL(prot_to_real)  # enter real mode
64         .code16
66         movb    %cl,%al
67         movw    $1,%bx
68         movb    $0x0e,%ah
69         int     $0x10
71         calll   _C_LABEL(real_to_prot) # back to protected mode
72         .code32
74         pop     %edi
75         pop     %esi
76         pop     %ebx
77         pop     %ecx
78         pop     %ebp
79         ret
81 /**************************************************************************
82 GETC - Get a character
83 **************************************************************************/
84 ENTRY(congetc)
85         push    %ebp
86         mov     %esp,%ebp
87         push    %ebx
88         push    %esi
89         push    %edi
91         call    _C_LABEL(prot_to_real)  # enter real mode
92         .code16
94         movb    $0x0,%ah
95         int     $0x16
96         movb    %al,%bl
98         calll   _C_LABEL(real_to_prot) # back to protected mode
99         .code32
101         xor     %eax,%eax
102         movb    %bl,%al
104         pop     %edi
105         pop     %esi
106         pop     %ebx
107         pop     %ebp
108         ret
110 /**************************************************************************
111 ISSHIFT - Check for keyboard interrupt; via shift key
112 **************************************************************************/
113 ENTRY(conisshift)
114         push    %ebp
115         mov     %esp,%ebp
116         push    %ebx
117         push    %esi
118         push    %edi
120         call    _C_LABEL(prot_to_real)  # enter real mode
121         .code16
123         xor     %bx,%bx
124         movb    $0x2,%ah
125         int     $0x16
126         testb   $3,%al
127         setnz   %bl
129         calll   _C_LABEL(real_to_prot) # back to protected mode
130         .code32
132         xor     %eax,%eax
133         movb    %bl,%al
135         pop     %edi
136         pop     %esi
137         pop     %ebx
138         pop     %ebp
139         ret
141 /**************************************************************************
142 ISKEY - Check for keyboard input
143 **************************************************************************/
144 ENTRY(coniskey)
145         push    %ebp
146         mov     %esp,%ebp
147         push    %ebx
148         push    %esi
149         push    %edi
151         call    _C_LABEL(prot_to_real)  # enter real mode
152         .code16
154         xor     %bx,%bx
155         movb    $0x1,%ah
156         int     $0x16
157         setnz   %bl
159         calll   _C_LABEL(real_to_prot) # back to protected mode
160         .code32
162         xor     %eax,%eax
163         movb    %bl,%al
165         pop     %edi
166         pop     %esi
167         pop     %ebx
168         pop     %ebp
169         ret