code to log message (in debug builds) whenever PIC_FullIndex() jumps
backwards. This jumping backwards needs to be fixed, I suspect it's the
source of some timing bugs in demos.
"The emulated floppy drive does not use DMA, but make it look like it
does when booting. Fixes CGA graphics in the Demon's Forge booter."
This change is not exactly what ripsaw posted, but was adapted to fit
the DOSBox-X boot design as best as possible.
between VGA mode changes that DOSBox normally does by default. Hopefully
now when I do DOS demoscene captures, I don't get junk frames anymore
whenever mode changes are involved. It is an option you want to enable
in some cases, like when running weird demos like DoWhackaDo.
Also added code to better addref/release disk images on disk/CD
swapping, which fixes the segfault I observed running Windows 95 with
two ISO images attached.
down to SDLMain(). Move DOS kernel shutdown and guest OS boot to
SDLMain(). The idea is to avoid having the DOS_Shell and AUTOEXEC
objects active in the call stack while running a guest OS.
time, only floppy emulation is supported. The idea is that, since you
can imgmount a floppy with -fs none, then "boot -l a" from it, the added
code allows you to boot El Torito CDs with floppy emulation like this:
imgmount d: some_cdrom.iso -t iso -fs none # mount CD-ROM to D:
imgmount 0 -el-torito d: -t floppy -fs none # mount El Torito floppy image on CD as drive A:
boot -l a # boot OS from emulated floppy
I'm proud to announce that the code as written now is sufficient to boot
from an old Windows 98 install CD I made years ago when CD burners had
just come out (floppy emulation).
Up next: adding the same El Torito code to the BOOT command so that the
user can also boot the emulated floppy directly like this:
imgmount d: some_cdrom.iso -t iso -fs none # mount CD-ROM to D:
boot -cdrom d # boot OS from CD-ROM (El Torito code will automatically infer floppy emulation)
And if I have time today, I will also add beta support for the "no
emulation" mode newer CDs tend to use so that Linux distros and
Windows XP can boot, along with the various INT 13h functions involved
with the El Torito support.
to NOT require a path if -el-torito is given. Code is complete only far
enough to scan the ISO 9660 volume descriptors and locate the El Torito
structure.
- EMM Expanded Memory Manager emulation
- XMS Extended Memory Manager emulation
- The DOS kernel object (INT 21h is not needed for guest OS)
- SBLASTER and GUS environment variables (destructors for
Autoexec objects were responsible for writing to memory and
triggering page faults from within 32-bit OSes on shutdown).
These changes appear to have resolved the issue of Instant Page Fault
BSODs with NT when you use DOSBox's kill switch.
Modified mouse movement API NOT to call INT10_SetCurMode() function unless
emulating INT 33h where it matters. The purpose apparently of the
INT10_SetCurMode() call is to help manage what MOUSE.COM would do to map
mouse coordinates to DOS screen coordinates. INT10_SetCurMode() uses
real_readb() which when running Windows NT instead causes a serious case
of recursive page faults and a bad system crash. Not calling
INT10_SetCurMode() in a guest OS ensures this crash no longer happens.
0x7C00 offset to variable that is set to 0x7C00. Add code to refuse
booting a guest OS if less than 32KB of RAM is being emulated (the IBM
PC boot process requires 32KB of RAM). added TODO where the user should
be able to override that lockout if they feel adventerous.
flag so that other parts of the program have a way to know the DOS
kernel is no longer in charge. Added code to Program::SetEnv() and other
environment block code to fail and print a BUG message if emulator code
attempts to modify the environment block if the DOS kernel is disabled,
since, once the guest OS boots, that environment block is probably long
gone by then and overwritten. This fixes a bug I found where if you set
the memory size to 246KB or less, boot PC-DOS 1.0, and then hit CTRL+F9
to terminate the emulator, the emulator will instead run through
thousands of "illegal memory read" messages as code within the emulator
does a string scan from what is obviously now unmapped or overwritten
memory.
longer used). added code to call PAGING_FlushTLB() to ensure that
changes to the memory map take effect. Prior to the fix, the code
changed the map to unmap the regions but the memory was still accessible
because of TLBs.
boot an operating system. Mainline DOSBox behavior is to leave it up
there, while DOSBox-X now defaults to unmapping the UMB (since the OS
will not know it's there and will probably confuse it with adapter ROM).