etc/protocols - sync with NetBSD-8
[minix.git] / sys / arch / i386 / stand / lib / conio.S
blob7b8ea82b591387670f0ad9a9eefd1372d108ee90
1 /*      $NetBSD: conio.S,v 1.7 2011/06/16 13:27:59 joerg 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         pusha
17         call    _C_LABEL(prot_to_real)  # enter real mode
18         .code16
20         /* Clear screen. */
21         movw    $0x0600, %ax
22         movw    $0x0700, %bx
23         xorw    %cx, %cx
24         movw    $0x184f, %dx    /* 80x25 */
25         int     $0x10
27         /* Home cursor. */
28         movb    $0x02, %ah
29         xorw    %bx, %bx
30         xorw    %dx, %dx
31         int     $0x10
33         calll   _C_LABEL(real_to_prot) # back to protected mode
34         .code32
36         popa
37         ret
39 /**************************************************************************
40 PUTC - Print a character
41 **************************************************************************/
42 ENTRY(conputc)
43         pusha
45         call    _C_LABEL(prot_to_real)  # enter real mode
46         .code16
48 #if defined(__minix)
49         cmp     $0x08, %al      # backspace?
50         jne     print_char
52         # Multiline backspace support.
53         push    %ax
54         movb    $0x3, %ah       # get cursor position
55         xorw    %bx, %bx
56         int     $0x10
57         pop     %ax
58         testb   %dl, %dl        # cursor on first column?
59         jnz     print_char
60         testb   %dh, %dh        # cursor not on first row?
61         jz      print_char
62         decb    %dh             # move up one row
63         movb    $0x4f, %dl      # move to last column
64         xorw    %bx, %bx
65         movb    $0x02, %ah      # set cursor position
66         jmp     do_int
68 print_char:
69 #endif /* defined(__minix) */
70         movw    $1,%bx
71         movb    $0x0e,%ah
72         movb    %al, %cl
73 #if defined(__minix)
74 do_int:
75 #endif /* defined(__minix) */
76         int     $0x10
78         calll   _C_LABEL(real_to_prot) # back to protected mode
79         .code32
81         popa
82         ret
84 /**************************************************************************
85 GETC - Get a character
86 **************************************************************************/
87 ENTRY(congetc)
88         xorl    %eax, %eax
89         pusha
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         movb    %bl, 28(%esp)
103         popa
104         ret
106 /**************************************************************************
107 ISSHIFT - Check for keyboard interrupt; via shift key
108 **************************************************************************/
109 ENTRY(conisshift)
110         xorl    %eax, %eax
111         pusha
113         call    _C_LABEL(prot_to_real)  # enter real mode
114         .code16
116         xor     %bx,%bx
117         movb    $0x2,%ah
118         int     $0x16
119         testb   $3,%al
120         setnz   %bl
122         calll   _C_LABEL(real_to_prot) # back to protected mode
123         .code32
125         movb    %bl, 28(%esp)
127         popa
128         ret
130 /**************************************************************************
131 ISKEY - Check for keyboard input
132 **************************************************************************/
133 ENTRY(coniskey)
134         xorl    %eax, %eax
135         pusha
137         call    _C_LABEL(prot_to_real)  # enter real mode
138         .code16
140         xor     %bx,%bx
141         movb    $0x1,%ah
142         int     $0x16
143         setnz   %bl
145         calll   _C_LABEL(real_to_prot) # back to protected mode
146         .code32
148         movb    %bl, 28(%esp)
150         popa
151         ret