On Fri, 31 Dec 2004, Michael Devore wrote:

> At 01:22 AM 12/31/2004 -0800, 16BIT wrote:
>
> >Grub for DOS prints the following error message if I try and run it with
> >FreeDOS:
> >
> >-------------
> >
> >Sorry! Currently supported DOS versions are: MS-DOS 3.30 and later;
> >FreeDOS kernel build 2029 and, hopefully, 2032 and later.
> >
> >-------------
> >
> >A rather interesting error message don't you think?
>
> What do you bet that it's looking for the original FreeDOS versioning which
> was recently changed to work around the Borland RTM bug?

$100000000000000 ;-)
The GRUB code doesn't use int21/ah=30 at all.

An extract from the patch in grub013.zip is below. It's far nastier. Very
nasty. It's code that assumes that the binary code of FD-kernel's IRQ
stack handling never changes, noone uses STACKS=0, and MS HIMEM may be
loaded (int15 hooked by himem.exe not considered apparently). Note the use
of the magic 0x3086 number... Your dog may eat this code for lunch.

It seems to need this dirty technique to try to restore the BIOS
IRQ vectors to their original values. Booting with STACKS=0 without HIMEM
could avoid this hackery.

(another note: remember that AT&T syntax reverses wrt Intel syntax for
assembly).

+       /* check for FreeDOS (build 2029+) */
+
+       /*
+        * MS himem.sys takes over int 15, so check for the case.
+        */
+
+       xorw    %ax, %ax
+       movw    %ax, %es
+       movw    %ax, %ds
+       movw    $0x0054, %di
+       movl    (%di), %eax             /* int 15 vector in table */
+       cmpl    $0xc0000000, %eax       /* is it a valid BIOS vector? */
+       jnb     1f                      /* yes, do nothing */
+       movw    $0x3086, %si            /* no, take one from himem */
+       movl    (%si), %eax
+       cmpl    $0xe0000000, %eax       /* is it a system BIOS vector? */
+       jb      failed_check_freedos    /* no, do not continue */
+1:                                     /* yes, continue */
+       xorw    %ax, %ax
+       movw    %ax, %ds
+       movw    $0x0020, %si    /* DS:SI points to int 08 */
+       lodsl
+       movl    %eax, %ebx
+       movl    %eax, %edx
+       movw    $7, %cx
+1:
+       lodsl
+       addw    $6, %bx
+       jc      failed_check_freedos
(snip)

Bart


-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
Freedos-user mailing list
Freedos-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-user

Reply via email to