diff -dpr elks.orig/Documentation/Configure.help elks-0.0.74/Documentation/Configure.help *** elks.orig/Documentation/Configure.help Thu Nov 19 17:01:08 1998 --- elks-0.0.74/Documentation/Configure.help Tue Jan 26 13:46:42 1999 *************** CONFIG_CONSOLE_DIRECT *** 66,71 **** --- 66,76 ---- A direct console driver. This is currently the only console driver available for ELKS. + Get 2 consoles on strange hercules cards + CONFIG_STRANGE_HERCULES + Get two consoles instead of one on a strange hercules (i think) card + i have (it has a smd chip labeled M3000A). + Direct console VT52 emulation CONFIG_DCON_VT52 Saying no removes some of the intelligent features from the console diff -dpr elks.orig/arch/i86/drivers/char/Config.in elks-0.0.74/arch/i86/drivers/char/Config.in *** elks.orig/arch/i86/drivers/char/Config.in Wed Nov 18 21:44:46 1998 --- elks-0.0.74/arch/i86/drivers/char/Config.in Tue Jan 26 13:29:55 1999 *************** comment 'Character device drivers' *** 8,13 **** --- 8,16 ---- comment 'Select a console driver' bool 'Direct console writes' CONFIG_CONSOLE_DIRECT if [ "$CONFIG_CONSOLE_DIRECT" = "y" ]; then + + bool 'Get two consoles on strange hercules cards' CONFIG_STRANGE_HERCULES + bool 'Direct console VT52 emulation' CONFIG_DCON_VT52 if [ "$CONFIG_DCON_VT52" = "y" ]; then bool 'Direct console ANSI emulation' CONFIG_DCON_ANSI diff -dpr elks.orig/arch/i86/drivers/char/dircon.c elks-0.0.74/arch/i86/drivers/char/dircon.c *** elks.orig/arch/i86/drivers/char/dircon.c Wed Nov 11 14:30:07 1998 --- elks-0.0.74/arch/i86/drivers/char/dircon.c Tue Jan 26 13:27:21 1999 *************** *** 3,8 **** --- 3,10 ---- * Saku Airila 1996 * **************************************/ + /* 26.01.1998 CONFIG_STRANGE_HERCULES added (sq5bpf) */ + #include #include #include *************** register Console * C; *** 264,270 **** --- 266,276 ---- int Pos; if( C != Visible ) return; + #ifdef CONFIG_STRANGE_HERCULES + Pos = C->cx + Width * C->cy + (C->Ord * PageSize); + #else Pos = C->cx + Width * C->cy + (C->Ord * PageSize >> 1); + #endif outb( 14, CCBase ); outb( ( unsigned char )( ( Pos >> 8 ) & 0xFF ), CCBase + 1 ); outb( 15, CCBase ); *************** int N; *** 504,510 **** --- 510,520 ---- VideoSeg, 0, ( Width * Height ) << 1 ); #endif + #ifdef CONFIG_STRANGE_HERCULES + offset=N*PageSize; + #else offset=N*PageSize>>1; + #endif outw((offset & 0xff00) | 0x0c, CCBase); outw(((offset & 0xff) << 8) | 0x0d, CCBase); PositionCursor( Visible ); *************** void init_console() *** 591,597 **** --- 601,612 ---- PageSize = peekw( 0x40, 0x4C ); if( peekb( 0x40, 0x49 ) == 7 ) { VideoSeg = 0xB000; + #ifdef CONFIG_STRANGE_HERCULES + outb(inb(0x3bf)|3,0x3bf); + NumConsoles = 2; + #else NumConsoles = 1; + #endif }else VideoSeg = 0xb800; *************** void init_console() *** 605,611 **** --- 620,630 ---- #else Conp->cx = Conp->cy = 0; #endif + #ifdef CONFIG_STRANGE_HERCULES + Conp->Seg = VideoSeg + ( PageSize >> 3 ) * i; + #else Conp->Seg = VideoSeg + ( PageSize >> 4 ) * i; + #endif Conp->Ord = i; /* Con[ i ].InUse = 0; */ if (i != 0) { *************** void init_console() *** 629,634 **** --- 648,656 ---- Width, Height, NumConsoles ); + #endif + #ifdef CONFIG_STRANGE_HERCULES + printk("Console: CONFIG_STRANGE_HERCULES option enabled.\n"); #endif } .. .