*BSD News Article 25420


Return to BSD News archive

Newsgroups: comp.os.386bsd.questions
Path: sserve!newshost.anu.edu.au!munnari.oz.au!spool.mu.edu!howland.reston.ans.net!usenet.ins.cwru.edu!news.uakron.edu!news.csuohio.edu!stever
From: stever@csuohio.edu (Steve Ratliff)
Subject: Re: Hacking boot block assm for 50 display lines. (netbsd)
Message-ID: <1993Dec29.221502.612@news.csuohio.edu>
Sender: news@news.csuohio.edu (USENET News System)
Organization: Cleveland State University
X-Newsreader: Tin 1.1 PL5
References: <CIoD8p.4Fp@cnsnews.Colorado.EDU>
Date: Wed, 29 Dec 1993 22:15:02 GMT
Lines: 54

[deleted] 
: I'm trying to do two things upon boot.
: 1. Set the display to 50 lines or what is known as "Extended VGA mode 80x50"
: 2. set the repeat rate as high as it'll go (32 chars a sec I believe)
[deleted]
	The fairly recently posted (four or five weeks) Syscons (
(ver. 1.2 ) supports 50 line VGA and has a user level util also named
syscons that allows changing back and forth between 25 and 50 lines and
also changing the repeat rate to slow | medium | fast |(user supplied).
It also allows up to 12 virtual consoles and came with patches for use
with NetBSD.
	If you do not want to switch to a different console driver,  I
believe that you will find it easier to make your changes by hacking
them into the existing console driver pccons.c instead of doing it
through the bootblocks.  I have included a relevant code fragment that
was hacked/slashed and otherwise munged out of syscons.c.  It is taken
out of context and has been slightly modified and many non-contiguous
lines have been deleted.  Use it for reference only, see original source
for details, UAYOR, no money back ;).


/* From isa.h 
#define IO_VGA		0x3C0		 
E/VGA Ports */

/* misc defines */
#define TEXT80x25	1
#define TEXT80x50	2

/* defines related to hardware addresses */
#define	COLOR_BASE	0x3D4			/* crt controller base color */
#define TSIDX		IO_VGA+0x04		/* timing sequencer idx */
#define TSREG		IO_VGA+0x05		/* timing sequencer data */

static	u_int		crtc_addr = COLOR_BASE;
static  u_char 		byte;

	/* setup video hardware for the given mode */
	s = splhigh();
	switch(scp->mode) {
	case TEXT80x25:
		outb(crtc_addr, 9); byte = inb(crtc_addr+1);
		outb(crtc_addr, 9); outb(crtc_addr+1, byte | 0x0F);
    		outb(TSIDX, 0x03); outb(TSREG, 0x00);	/* select font 0 */
		break;
	case TEXT80x50:
		outb(crtc_addr, 9); byte = inb(crtc_addr+1);
		outb(crtc_addr, 9); outb(crtc_addr+1, (byte & 0xF0) | 0x07);
    		outb(TSIDX, 0x03); outb(TSREG, 0x05);	/* select font 1 */
		break;
	default:
		break;
	}
	splx(s);