* Copyright (c) 1992, 1991 Carnegie Mellon University
* Permission to use, copy, modify and distribute this software and its
* documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
* Carnegie Mellon requests users of this software to return to
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
* any improvements or extensions that they make and grant Carnegie Mellon
* the rights to redistribute these changes.
* from: Mach, Revision 2.2 92/04/04 11:35:57 rpd
* $Id: io.c,v 1.4 1994/06/15 18:15:17 adam Exp $
#include <i386/include/pio.h>
#define K_RDWR 0x60 /* keyboard data & cmds (read/write) */
#define K_STATUS 0x64 /* keyboard status */
#define K_CMD 0x64 /* keybd ctlr command (write-only) */
#define K_OBUF_FUL 0x01 /* output buffer full */
#define K_IBUF_FUL 0x02 /* input buffer full */
#define KC_CMD_WIN 0xd0 /* read output port */
#define KC_CMD_WOUT 0xd1 /* write output port */
#define KB_A20 0xdf /* enable A20,
enable output buffer full interrupt
* Gate A20 for high memory
unsigned char x_20
= KB_A20
;
while (inb(K_STATUS
) & K_IBUF_FUL
);
while (inb(K_STATUS
) & K_OBUF_FUL
)
outb(K_CMD
, KC_CMD_WOUT
);
while (inb(K_STATUS
) & K_IBUF_FUL
);
while (inb(K_STATUS
) & K_IBUF_FUL
);
/* printf - only handles %d as decimal, %c as char, %s as string */
char buf
[10], *ptr
= buf
;
int num
= *dataptr
++, dig
;
*ptr
++ = (dig
=(num
&0xf)) > 9?
case 'c': putchar((*dataptr
++)&0xff); break;
char *ptr
= (char *)*dataptr
++;
for (i
= BOOTWAIT
; i
>0; i
--)
switch(*ptr
= getchar() & 0xff) {
static char tw_chars
[] = "|/-\\";
putchar(tw_chars
[tw_pos
++]);
tw_pos
%= (sizeof(tw_chars
) - 1);