From owner-freebsd-current@FreeBSD.ORG Thu Jun 3 08:52:37 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 04BEE16A4CE for ; Thu, 3 Jun 2004 08:52:37 -0700 (PDT) Received: from critter.freebsd.dk (critter.freebsd.dk [212.242.86.163]) by mx1.FreeBSD.org (Postfix) with ESMTP id 039DE43D3F for ; Thu, 3 Jun 2004 08:52:36 -0700 (PDT) (envelope-from phk@phk.freebsd.dk) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.12.11/8.12.11) with ESMTP id i53FqXMC010364 for ; Thu, 3 Jun 2004 17:52:34 +0200 (CEST) (envelope-from phk@phk.freebsd.dk) To: current@freebsd.org From: Poul-Henning Kamp Date: Thu, 03 Jun 2004 17:52:33 +0200 Message-ID: <10363.1086277953@critter.freebsd.dk> Subject: [REVIEW/TEST] boot0 changes X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Jun 2004 15:52:37 -0000 Ok, now that the dust has settled, I try again. Can people please test/review these changes to boot0. They merge closer the SIO and video versions of boot0. Thanks in advance. Index: boot0.S =================================================================== RCS file: /home/ncvs/src/sys/boot/i386/boot0/boot0.S,v retrieving revision 1.8 diff -u -r1.8 boot0.S --- boot0.S 14 May 2004 20:28:31 -0000 1.8 +++ boot0.S 3 Jun 2004 15:48:22 -0000 @@ -95,14 +95,10 @@ #ifdef SIO /* * Initialize the serial port. - * Must save DX (contains drive number) */ - pushw %dx # Save - xorw %dx,%dx # Port: COM1 movb COMSPEED,%al # defined by Makefile movb $0x00,%ah # BIOS: Set COM Port - int $0x14 # Parameters - popw %dx # Restore + call bioscom #endif /* SIO */ /* * Check what flags were loaded with us, specifically, Use a predefined Drive. @@ -199,23 +195,21 @@ callw putx # item /* * Now that we've printed the drive (if we needed to), display a prompt. - * Get ready for the input by noting the time. */ main.7: movw $prompt,%si # Display callw putstr # prompt movb _OPT(%bp),%dl # Display decw %si # default callw putkey # key -main.7_1: +/* + * Start of input loop. Beep and take note of time + */ +main.10: movb $ASCII_BEL,%al # Signal + callw putchr # beep! xorb %ah,%ah # BIOS: Get int $0x1a # system time -#ifndef SIO movw %dx,%di # Ticks when - addw _TICKS(%bp),%di # timeout -#else /* SIO */ - movw %dx,%si # Ticks when - addw _TICKS(%bp),%si # timeout -#endif /* SIO */ + addw _TICKS(%bp),%di # timeout /* * Busy loop, looking for keystrokes but * keeping one eye on the time. @@ -226,19 +220,14 @@ int $0x16 # for keypress jnz main.11 # Have one #else /* SIO */ - xorw %dx,%dx # Use COM1 movb $0x03,%ah # BIOS: Read COM - int $0x14 # Status + call bioscom testb $0x01,%ah # Check line status jnz main.11 # (bit 1 indicates input) #endif /* SIO */ xorb %ah,%ah # BIOS: Get int $0x1a # system time -#ifndef SIO cmpw %di,%dx # Timeout? -#else /* SIO */ - cmpw %si,%dx # Timeout? -#endif /* SIO */ jb main.8 # No /* * If timed out or defaulting, come here. @@ -246,18 +235,6 @@ main.9: movb _OPT(%bp),%al # Load default jmp main.12 # Join common code /* - * User's last try was bad, beep in displeasure. - * Since nothing was printed, just continue on as if the user - * hadn't done anything. This gives the effect of the user getting a beep - * for all bad keystrokes but no action until either the timeout - * occurs or the user hits a good key. - */ -main.10: movb $ASCII_BEL,%al # Signal - callw putchr # error -#ifdef SIO - jmp main.7_1 # Go back -#endif /* SIO */ -/* * Get the keystroke. */ main.11: @@ -267,7 +244,7 @@ movb %ah,%al # Scan code #else /* SIO */ movb $0x02,%ah # BIOS: Receive - int $0x14 # COM Byte + call bioscom #endif /* SIO */ /* * If it's CR act as if timed out. @@ -384,22 +361,25 @@ jmp putstr # Continue putstr.2: andb $~0x80,%al # Clear MSB -putchr: #ifndef SIO +putchr: pushw %bx # Save movw $0x7,%bx # Page:attribute movb $0xe,%ah # BIOS: Display int $0x10 # character popw %bx # Restore + retw # To caller #else /* SIO */ +putchr: + movb $0x01,%ah # BIOS: Send + xorw %cx,%cx # No timeout +bioscom: pushw %dx # Save xorw %dx,%dx # Use COM1 - xorw %cx,%cx # No timeout - movb $0x01,%ah # BIOS: Send int $0x14 # Character popw %dx # Restore -#endif /* SIO */ retw # To caller +#endif /* SIO */ /* One-sector disk I/O routine */ @@ -426,13 +406,8 @@ /* Menu strings */ -#ifndef SIO item: .ascii " "; .byte ' '|0x80 prompt: .ascii "\nDefault:"; .byte ' '|0x80 -#else /* SIO */ -item: .ascii " "; .byte ' '|0x80 -prompt: .ascii "\nDef:"; .byte ' '|0x80 -#endif /* SIO */ crlf: .ascii "\r"; .byte '\n'|0x80 /* Partition type tables */ -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence.