Date: Tue, 12 Aug 1997 19:50:34 -0500 From: Jonathan Lemon <jlemon@americantv.com> To: =?iso-8859-1?Q?S=F8ren_Schmidt?= <sos@sos.freebsd.dk> Cc: j_mini@efn.org, karpen@ocean.campus.luth.se, hfwirth@ping.at, emulation@FreeBSD.ORG Subject: Re: Fun with DOSCMD (was Re: modifying boot mgrs FROM FREEBSD) Message-ID: <19970812195034.31150@right.PCS> In-Reply-To: =?iso-8859-1?Q?=3C199708112025=2EWAA03492=40sos=2Efreebsd=2Edk=3E=3B_fro?= =?iso-8859-1?Q?m_S=F8ren_Schmidt_on_Aug_08=2C_1997_at_10=3A25=3A18PM_%2B02?= =?iso-8859-1?Q?00?= References: <19970811114903.20861@micron.efn.org> <199708112025.WAA03492@sos.freebsd.dk>
next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 08, 1997 at 10:25:18PM +0200, Søren Schmidt wrote: > > Hehe. I am working on it, however, you won't get realmode, just something > > similar -- a v86 thread with the mappings of real mode. It should be close > > enough :) > > As long as it lets me call a 16bit realmode subrutine in the (S)VGA BIOS > I'll be OK :) Amazingly enough, I've been working on something similar too. At this point, I think I need a little bit of feedback. How would a vm86() interface be used? I don't think that just passing in the i386 registers and an interrupt number to call would be enough; I think that some of the INT calls want to pass data back and forth via low-memory areas. If that is the case, then the address space has to exist before and after the call; probably the easiest way would be for the calling process to create the address space and then pass it to the vm86 thread. Otherwise, the thread could just attach to kernel area around 'atdevbase' Also, where would this be called from? kernel code only? user code? If both, then there should also be a parameter that specifies what I/O the process is permitted to do. This way, when when calling some arbitrary piece of BIOS code which may touch I/O space, we can fail if the call was from user mode. Side note here: the vm86 changes do permit controlled access to the full I/O space from user-mode, assuming that the process is running as root. My current thinking (for the kernel) is: - create a 'vm86daemon', which maps in the lower physical 1M into it's address space. - submit requests to this thread, which puts the caller to sleep until the request completes. Another possibility would be to create a new thread for every call, but that seems to have too much overhead. Am I on the right track here, or am I totally off base? -- Jonathan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19970812195034.31150>