public inbox for linux-msdos@vger.kernel.org
 help / color / mirror / Atom feed
From: Stas Sergeev <stssppnn@yahoo.com>
To: linux-msdos@vger.kernel.org
Subject: Re: Newbie with terminal video problems
Date: Sun, 01 Dec 2002 21:37:47 +0300	[thread overview]
Message-ID: <3DEA56FB.5030202@yahoo.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 412 bytes --]

Hello.

Mushroom wrote:
> Yes - the problem remains as it was. I'll try playing with some more 
> settings but it doesn't seem promising.
OK, try the attached patch.
This is a first pass of the POST-less
video init, which will be used for
the VESA driver in the future, if
someone will finally enlarge an IO
bitmap to 8K in the linux kernel.
If that fixes your problem - we'll
see. If not - you are out of luck.

[-- Attachment #2: post-less_video.diff --]
[-- Type: text/plain, Size: 3921 bytes --]

--- src/include/int.h	Mon Nov  4 02:25:59 2002
+++ src/include/int.h	Sun Dec  1 21:00:13 2002
@@ -15,6 +15,7 @@
 EXTERN void *interrupt_function[0x100];
 EXTERN unsigned int  check_date INIT(0);
 EXTERN time_t        start_time;
+EXTERN char video_ints[256];
 
 void do_int(int);
 void fake_int(int, int);
--- src/base/bios/bios.S	Mon Sep 16 04:14:05 2002
+++ src/base/bios/bios.S	Thu Oct 17 11:08:06 2002
@@ -507,16 +507,9 @@
 	.org	((INT10_SEG-BIOSSEG) << 4)+INT10_OFF
 /* ======================= Addr = F800:4200 (FC200) */
 	pushw	%ax
-	sti
-	movb	$DOS_HELPER_VIDEO_INIT,%al		/*  Start Video init */
-	int	$DOSHELPER_INT
-	.byte	0x9a   /* call far 0xc000:3  or call far 0xe000:3 */
-/* More general than just c000 or e000 ??? */	
-	.globl	CISH(bios_f000_int10ptr)
-CISH(bios_f000_int10ptr):
-	.long	0xc0000003
-	movb	$DOS_HELPER_VIDEO_INIT_DONE,%al		/* Finished video init */
-	int     $DOSHELPER_INT
+	cli
+	movw	$2,%ax
+	int	$0x10
 	popw	%ax
 	sti
 	lret
--- src/base/init/init.c	Sun Sep 29 23:45:30 2002
+++ src/base/init/init.c	Thu Oct 17 09:27:44 2002
@@ -227,6 +228,9 @@
 static inline void map_video_bios(void)
 {
   extern int load_file(char *name, int foffset, char *mstart, int msize);
+  __u32 int_area[256];
+  __u16 seg, off;
+  int i;
 
   v_printf("Mapping VBIOS = %d\n",config.mapped_bios);
 
@@ -252,6 +256,19 @@
 
     memcheck_addtype('V', "Video BIOS");
     memcheck_reserve('V', VBIOS_START, VBIOS_SIZE);
+    load_file("/dev/mem", 0, (char *)int_area, sizeof(int_area));
+    for (i = 0; i < 256; i++) {
+      seg = int_area[i] >> 16;
+      off = int_area[i] & 0xffff;
+      g_printf("int0x%x was 0x%04x:0x%04x\n", i, seg, off);
+      if (seg == VBIOS_START >> 4) {
+	v_printf("Setting int0x%x to 0x%04x:0x%04x\n", i, seg, off);
+	SETIVEC(i, seg, off);
+	video_ints[i] = 1;
+      } else video_ints[i] = 0;
+    }
+    v_printf("Now initialising 0x40:0-ff\n");
+    load_file("/dev/mem", 0x40 << 4, (char *)(0x40 << 4), 0x100);
   }
 }
 
--- src/base/async/int.c	Mon Sep 16 04:15:56 2002
+++ src/base/async/int.c	Wed Oct 23 17:40:24 2002
@@ -2120,7 +2134,7 @@
     interrupt_function[i] = default_interrupt;
 
     /* don't overwrite; these have been set during video init */
-    if(i == 0x1f || i == 0x43) continue;
+    if(video_ints[i]) continue;
 
     /* interrupts >= 0xc0 are scratch (BIOS stack), 
        unless defined by DOSEMU */	
--- src/env/video/vc.c	Sat Sep 21 07:27:17 2002
+++ src/env/video/vc.c	Wed Oct 16 16:49:11 2002
@@ -1139,57 +1139,5 @@
 void 
 install_int_10_handler (void)
 {
-  unsigned char *ptr;
-
-#if 0
-  if (!config.usesX)
-    {
-      /* Wrapper around call to video init c000:0003 */
-      ptr = (u_char *) INT10_ADD;
-
-      *ptr++ = 0x50;		/* push ax          */
-      *ptr++ = 0xfb;		/* start interrupts STI  */
-
-      *ptr++ = 0xb0;
-      *ptr++ = 0x08;		/* mov  al,08  ; Start Video init     */
-
-      *ptr++ = 0xcd;
-      *ptr++ = DOS_HELPER_INT;		/* int  e6          */
-
-      if (config.vbios_seg == 0xe000)
-	{
-	  *ptr++ = 0x9a;
-	  *ptr++ = 0x03;
-	  *ptr++ = 0x00;
-	  *ptr++ = 0x00;
-	  *ptr++ = 0xe0;	/* call e000:0003   */
-	}
-      else
-	{
-	  *ptr++ = 0x9a;
-	  *ptr++ = 0x03;
-	  *ptr++ = 0x00;
-	  *ptr++ = 0x00;
-	  *ptr++ = 0xc0;	/* call c000:0003   */
-	}
-      *ptr++ = 0xb0;
-      *ptr++ = 0x09;		/* move al,09   ; Finished video init    */
-
-      *ptr++ = 0xcd;
-      *ptr++ = DOS_HELPER_INT;		/* int  e6          */
-
-      *ptr++ = 0x58;		/* pop ax           */
-      *ptr++ = 0xfb;		/* start interrupts STI  */
-      *ptr++ = 0xcb;		/* retf             */
-    }
-#else
-  if (config.vbios_seg == 0xe000) {
-    extern void bios_f000_int10ptr();
-    ptr = (u_char *)((BIOSSEG << 4) + ((long)bios_f000_int10ptr - (long)bios_f000));
-    *((long *)ptr) = 0xe0000003;
-    v_printf("VID: new int10 handler at %p\n",ptr);
-  }
-  else
     v_printf("VID: install_int_10_handler: do nothing\n");
-#endif
 }

             reply	other threads:[~2002-12-01 18:37 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-01 18:37 Stas Sergeev [this message]
2002-12-01 23:47 ` Terminal Video Problem Solved (and sound too!) Mushroom
  -- strict thread matches above, loose matches on Subject: below --
2002-12-01 17:34 Newbie with terminal video problems Stas Sergeev
2002-12-01 12:33 Stas Sergeev
2002-12-01 16:59 ` Mushroom
2002-11-30 14:33 Stas Sergeev
2002-12-01  9:58 ` Mushroom
2002-11-30  3:55 Mushroom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3DEA56FB.5030202@yahoo.com \
    --to=stssppnn@yahoo.com \
    --cc=linux-msdos@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox