Date: Fri, 26 Feb 1999 09:46:16 -0800 From: Mike Smith <mike@smith.net.au> To: "Donn Miller" <dmm125@bellatlantic.net> Cc: hackers@freebsd.org Subject: Re: Accessing the BIOS... Message-ID: <199902261746.JAA08392@dingo.cdrom.com> In-Reply-To: Your message of "Fri, 26 Feb 1999 03:33:18 EST." <000701be6162$b52458e0$02000003@dmm125>
next in thread | previous in thread | raw e-mail | index | archive | help
Please format your messages so that they can be replied to. > I need to find out some information about how to write apps that > access the BIOS in FreeBSD. Obviously, since we are dealing with > proteced mode, we can't use INT 10h. My understanding is this (help me > out here if I'm wrong): You don't access the BIOS from applications under FreeBSD. > (*) FreeBSD makes a copy of the Bios image, which is what, 32kB in > length? We need to find a pointer to the start of the Bios image, also > known as the protected mode entry point. It doesn't, it isn't, no you don't, and it's not. > (*) FreeBSD also makes a copy of the first 0x600 bytes of > conventional memory, which may or may not be stored within the already > existing BIOS image. It doesn't. > Obviously, a far pointer is required to access > this if it is outside the range of the 32kB BIOS image. FWIU, DOS uses > address locations 0x000-0x600 for some BIOS services, such as writing to > the VGA display. It does this by passing arguments in the various > registers (such as AX or EAX) and calling INT 10. In 16-bit or 32-bit > protected mode, I don't know which, you can't pass arguments in AX and > call int10. You don't use the BIOS for text output under FreeBSD. > You have to get a pointer to the protected mode entry > point. Again, no you don't. > (*) Does FBSD use 16 or 32 bit protected-mode BIOS calls? If they > are 16-bit, I think you use a selector:offest in the format 16:16. > 32-bit protected-mode calls have a selector:offset format of 16:32. I > know this must involve using some arithmetic with DS or ES registers, > but I'm not sure. The kernel can (and does) make real-mode, 16- and 32-bit protected mode BIOS calls. Applications make none of the above. > (*) When FreeBSD makes a copy of the 32kB of BIOS, does it put it in > the same location every time? Also, I imagine Linux is very similar in > its handling of protected-mode BIOS calls, but it probably puts the > image in a different place, etc. AFAIK, Linux only uses the 32-bit PCI BIOS entrypoints. Neither FreeBSD nor Linux make copies of the BIOS. > It seems like BIOS calls are pretty complicated in protected mode. Why > aren't we allowed to use INT 0x10, and use the registers (AX, etc.) in > protected mode, but real mode allows this? Because interrupts are handled by the OS supervisor, and this is typically not the BIOS. > I know other platforms, such as Macs, Sun SPARCS, and Alpha Stations > don't have an explicit BIOS, but they do have some equivalent, like some > kind of firmware. Is programming the "BIOS" in non-intel platforms as > difficult as programming the BIOS on PC's? It's rarely as badly broken, but typically restricted to bootstrapping only. > I think a good source of info would be Ralph's interrupt list. ;-) I would suggest you forget everything you think you know about programming under DOS, and learn to program under FreeBSD from scratch. -- \\ Sometimes you're ahead, \\ Mike Smith \\ sometimes you're behind. \\ mike@smith.net.au \\ The race is long, and in the \\ msmith@freebsd.org \\ end it's only with yourself. \\ msmith@cdrom.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199902261746.JAA08392>