Skip site navigation (1)Skip section navigation (2)
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>