Cool......

Drew Northup, N1XIM


> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]On Behalf
> Of Bart Oldeman
> Sent: Sunday, December 03, 2000 1:52 PM
> To: [EMAIL PROTECTED]
> Subject: [plex86] Plex86/Bochs/DOSEMU and planar vga modes.
>
>
> Hi all,
>
> about 6 months ago we (Dosemu team and some others) added planar vga mode
> support (such as the old 16-color EGA/VGA modes) to dosemu running in a
> window under x (xdos). This is all in 1.0.1 and later versions.
>
> This was initially by taking some code from Bochs: reading and writing a
> byte in VGA video memory. This is not straightforward, as the byte you
> write is not actually what ends up in video memory, but is manipulated by
> various registers and the latch, a 32 bit register holding the contents of
> the 4 planes at the last byte that is read.
>
> The initial way was to read/write protect virtual video memory, and act
> upon a page fault whenever a byte was read or written. This was painfully
> slow. So we implemented partial cpu emulation to avoid the page fault
> handling overhead. We quit the cpu emulation after COUNT (presently set at
> 150) instructions without VGA memory access or at a non-emulated
> instruction or when dosemu signals to do its main loop.
>
> Now Alberto Vignani has written a new JIT cpu emulator, successor of the
> Willows code and we are (also) going to replace the partial emulator with
> this one. Maybe this emulator sometime will gives us a method to run
> Win9x/Linux/whatever OS in dosemu as well. See
> www.dosemu.org/~alberto/index.htm
>
> Anyway the vga memory read and write instructions are in plex86 in
> plex86/user/plugins/bochs/iodev/vga.cc
> bx_vga_c::mem_read and
> bx_vga_c::mem_write
> I've optimised these in dosemu: directly using 32 bits instead of using
> two nested for loops for each plane (4 of these) and bit (8 of these) and
> would like to contribute these back if there's interest;
> in dosemu they are in src/env/video/vgaemu.c,
> unsigned char Logical_VGA_read(unsigned offset) and
> void Logical_VGA_write(unsigned offset, unsigned char value)
> and helper functions.
>
> I think that's fair; there is a GPL (dosemu) vs. LGPL (plex86) issue but
> these specific optimisations are by me so I can do what I want with them.
>
> I'm not very familiar with plex86: how does it deal with this kind of
> stuff: not at all, page faults or some very smart method?
>
> Bart
>
>


Reply via email to