xref: /minix3/sys/arch/i386/stand/lib/message32.S (revision 58a2b0008e28f606a7f7f5faaeaba4faac57a1ea)
1/*	$NetBSD: message32.S,v 1.1 2009/11/19 22:13:17 dsl Exp $	*/
2
3/*-
4 * Copyright (c) 2003 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by David Laight.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include <machine/asm.h>
33
34/*
35 * Output messages directly to serial port from 32bit mode.
36 * Useful for debugging when the real-prot is suspect.
37 *
38 * %ds:dump_eax_buff must be somewhere it is safe to write 12 bytes.
39 */
40
41#ifndef COM_PORT_VAL
42#define COM_PORT_VAL $0x3f8	/* Standard address COM1 (dty0) */
43#endif
44
45	.globl	message32
46	.code32
47message32:
48	pusha
49message32_1:
50	lodsb
512:
52	mov     COM_PORT_VAL, %dx
53	outb    %al, %dx
54	add     $5, %dl
553:      inb     %dx
56	test    $0x40, %al
57	jz      3b
58
59	lodsb
60	test    %al, %al
61	jnz     2b
62	popa
63	ret
64
65	.globl	dump_eax32
66dump_eax32:
67	pusha
68	movl	$dump_eax_buff, %esi
69	mov	%esi, %edi
70	push	$8
71	pop	%ecx
721:	roll	$4, %eax
73	push	%eax
74	andb	$0x0f, %al
75	addb	$0x30, %al			/* 30..3f - clear AF */
76#if 1 /* 5 bytes to generate real hex... */
77	daa					/* 30..39, 40..45 */
78	addb	$0xc0, %al			/* f0..f9, 00..05 */
79	adcb	$0x40, %al			/* 30..39, 41..46 */
80#endif
81	movb	%al,(%edi)
82	inc	%edi
83	pop	%eax
84	loop	1b
85	push	$0x20				/* space + 3 NULs */
86	pop	(%edi)
87	jmp	message32_1
88