Aeon Emulator Blog

June 30, 2011

Aeon Version 0.64

Filed under: Aeon, New Version — Greg Divis @ 3:38 pm

Not too many changes in this release, except for a significant amount of optimization in instruction decoding. I’ve noticed the biggest impact on 64-bit systems – upwards of 40% in some applications in my informal testing, but much less substantial on 32-bit systems.

  • Optimized instruction decoding: emulation is much faster on x64 and a little faster on x86
  • Fixed CD-ROM bug where Aeon wasn’t detecting some of the content in directories with lots of files
  • Fixed bug where VGA VerticalEnd register was ignored

As always, the download is here.


April 20, 2011

Aeon Version 0.63

Filed under: Aeon, New Version — Greg Divis @ 9:31 pm

Finally a new build! I guess I should really stop saying I’m going to update this blog more often. I’d like to… Well, I’m sure you’ve heard all of the standard excuses already, so on to the change list:

  • Added game port emulation for joystick support
  • Fixed bug allowing an interrupt window after some pop ss instructions which caused random crashing
  • Fixed bug preventing SVGA from being detected in some programs
  • CD-ROM emulation is much more accurate when mounting a host drive or an iso
  • Host CD drive can now be captured
  • Minor performance improvements to a large number of instructions
  • Major performance increase for 4-plane video modes (EGA, Mode X)
  • Added support for launching commands with /c
  • Fixed memory corruption issue when too many files were opened at once
  • Added "Check for Updates" option to Help menu

I finally added joystick support! It’s not very configurable yet – just giving you access to two axes and the first 4 buttons on any standard gamepad/controller/joystick. A more sophisticated button/key mapper will be added in a future version.

As usual, the download is here. I’ve redone the website as well. Hopefully most will consider this an improvement :)

Update: There is a bug in the installer that will report the incorrect version when upgrading. You’ll have to uninstall the old version first, then the install will run correctly.

November 3, 2010

Aeon Version 0.62

Filed under: Aeon, New Version — Greg Divis @ 9:41 pm

This build mainly just has some improved compatibility and a few minor performance tweaks. Here is the change list:

  • Fixed long-standing issue with the InterruptEnable flag not always getting reset after a system call
  • Enabled UI elements for configuring emulated hardware
  • Fixed minor bug causing too many bytes to be loaded from exe files
  • DOS IOCTL Get Device Info function is more accurate and less of a hack
  • Fixed another bug with handling invalid DOS file names
  • Fixed bug preventing DOS FindFirstFile function from returning certain directory names
  • Fixed bug causing child DOS processes to sometimes inherit the wrong environment block
  • Fixed bug with some special DOS devices not being recognized (NUL, CON)
  • Improved VESA VBE 1.2 implementation
  • Partial VESA VBE 2.0 implementation
  • Added AAM instruction
  • Fixed improper Trap Gate emulation on interrupts
  • General Protection Faults are now properly raised when an invalid selector is loaded
  • Fixed stack alignment bug from an exception on a pop to segment register instruction

Download it here. I’ll have more information on what’s to come up on the blog in the near future.

July 7, 2010

Aeon Version 0.61

Filed under: Aeon, New Version — Greg Divis @ 8:10 pm

I figured it was finally time for a new build, so here’s what’s new:

  • Switched to .NET framework 4
  • Implemented x86 protected mode task switching support (Quake, CWSDPMI, C&C)
  • Fixed bug with 80-bit operand floating point instruction decoding (XCOM)
  • Added a few missing floating point instructions
  • Tweaked DOS emulation to get programs compiled with DJGPP working (Quake)
  • PIC now allows its base interrupt vector to be reprogrammed
  • Rewrote address decoder to improve emulation performance
  • Finally fixed issue preventing Borland’s RTM extender from working (Jazz Jackrabbit)
  • Improved Sound Blaster DSP audio, should hopefully eliminate most of the playback glitches
  • VGA LineCompare register is now properly emulated (Jazz Jackrabbit, Incredible Machine 2)
  • Implemented instruction tracing for CPU trap flag (Second Reality – at least the menu loads now)
  • Fixed bug in DOS EXE loader where maximum memory field was not respected
  • Added support for ADPCM compressed playback on Sound Blaster (Traffic Department 2192)

This is pretty much a compatibility and performance update with no new application features.  There’s still a lot of open issues I’m looking into, but this should be faster and more stable than 0.60.

Download here.

April 9, 2010

Aeon Version 0.60

Filed under: Aeon, New Version — Greg Divis @ 2:27 pm

I’ve fixed a couple long-standing bugs and added support for some features I’ve been wanting to get in here for a long time – SVGA and the PC speaker. Also new to this version is the ability to mount CD ISO files and virtual floppy disk image files directly thanks to the excellent DiscUtils library. This is also the last version of Aeon that will target .NET 3.5; with .NET 4 scheduled for release on April 12, all future builds will require that version.

  • Internal code refactoring
  • Fixed expanded memory page aliasing bug (Star Trek: 25th Anniversary)
  • Added PC speaker emulation (tones only, sampled playback won’t work)
  • Added support for changing the character set
  • Added support for 8×14 character resolutions in text modes
  • Support for mounting disk image files (vfd, iso)
  • Fixed a nasty bug in the PIT which caused random timing-related crashes
  • Partial VESA VBE 1.2 implementation – some SVGA games will work (Master of Orion II, Lords of the Realm II both tested)
  • Fixed a Sound Blaster detection bug

Download here.

March 15, 2010

Aeon Version 0.58

Filed under: Aeon, New Version — Greg Divis @ 8:20 pm

Hey, I’m still working on this! Who knew? Unfortunately, there’s not much improvement with overall compatibility in this release. I got sick of staring at and debugging disassembled programs, so I started adding things to the user interface and refactoring my code instead. The usual disclaimers apply: this hasn’t been tested much and may not work on your system at all. Use at your own risk.

  • Fixed memory leak when launching more than one program without restarting Aeon in between
  • Minor performance improvements
  • Lots of DOS process management fixes
  • Command interpreter is now less of a kludge and uses interrupt-driven I/O like everything else
  • Added configuration support and configuration editor – not complete yet
  • Can now change drive mountings while emulator is running (with sometimes disastrous results – use only for disk swapping!)
  • Integer divide-by-zero CPU exceptions now handled more efficiently
  • Added command prompt change current drive command
  • Added some primitive MSCDEX support – a _few_ CD-based programs may work now
  • Fixed bug in LMSW instruction
  • Fixed bug in DOS get file attributes function
  • Added support for launching DOS programs/configuration files via command line
  • Fixed intermittent crashing due to bug in mouse driver callback
  • Fixed some issues with how Aeon handles invalid MS-DOS file names
  • Lots of internal code cleanup and refactoring

Download here.

January 18, 2010

Aeon Version 0.56

Filed under: Aeon, New Version — Greg Divis @ 7:54 pm

I’ve fixed the issue causing 0.55 to fail on 32-bit systems. Hey, this is why I call it an unstable alpha – gives me an excuse to make stupid mistakes like this :)

That being said, it isn’t terribly difficult for me to run this on the 32-bit CLR, so I’ll make sure that gets done every time I post a new version from now on. Sorry about this.


January 17, 2010

Aeon Version 0.55

Filed under: Aeon, New Version — Greg Divis @ 10:03 pm

Finally time for a new build! I’ve made a pretty good amount of progress. Most of the floating-point instructions are working, and I’ve implemented some of the actual protection mechanisms in protected mode, along with paging. Most of the 32-bit DOS extenders I’ve tried work at least somewhat now, with one notable exception being Borland’s DPMI.000 extender (which, in my humble opinion, is the most evil piece of code ever written). Some of the more advanced 32-bit games don’t work yet either, though some do (Daggerfall, for example, if you’re willing to jump through a few hoops). Here’s the change list:

  • Implemented about 90% of x87 floating point unit
  • Partially implemented CPU protection levels
  • Added support for paging
  • Fixed a few DOS memory allocation bugs
  • Minor Sound Blaster fixes
  • Fixed some protected mode instruction bugs
  • Added keystroke to release captured input (CTRL+F12)
  • Implemented a few more missing instructions
  • Better support for TSR’s

In order to support paging, I had to change a lot of code – unfortunately, Aeon may run a little slower as a result, though I haven’t noticed any change on my test system. Also, it’s possible that I’ve broken compatibility with something that used to work. Again, I haven’t seen anything in my regression tests, but my tests don’t include running every game in the world…

Download here.

Update: It seems that some of the changes I’ve made may have broken Aeon on 32-bit versions of Windows. I’m going fix this and repost a new version, then set up a proper 32-bit test system so this doesn’t happen again.

December 13, 2009

Aeon Version 0.52

Filed under: Aeon, New Version — Greg Divis @ 4:30 pm

This build includes fixes to things that were broken in 0.51, and also a few other general improvements:

  • Fixed crash on startup due to the icon (!) embedded in Aeon.exe on some systems
  • Fixed bug in file system redirection that could sometimes cause a crash with the change directory command (Master of Magic setup)
  • Fixed mouse coordinate input bug where clicks would sometimes not register at the right position
  • DMA controller improvements
  • Sound Blaster 16 DSP improvements, digitized sound should work a lot better
  • Changed default Sound Blaster IRQ to 7
  • Added some protected-mode-related instructions
  • Redesigned and streamlined operand decoder in preparation for FPU instructions

Download here.

November 24, 2009

Aeon Version 0.51

Filed under: Aeon, New Version — Greg Divis @ 3:41 pm

It’s been a while since I’ve posted a new build. A lot has changed in the code, but the single biggest visible change is the addition of protected mode emulation. It’s very far from complete. Right now, I’ve only gotten two protected mode games to work: Doom and Rise of the Triad – even so, those only work correctly if you disable Sound Blaster sound effects. Why those two games? I just happened to have them on my hard drive. Here’s the complete change list:

  • 16/32-bit protected mode support added (no actual paging or protection works yet though)
  • Fixed consistency issues with 16 vs. 32 bit stack and instruction pointers
  • Fixed 32-bit addressing modes
  • Small Sound Blaster DSP fixes, still lots of playback issues though
  • Added support for a few FPU instructions
  • Added extended memory support (XMS)
  • Most instructions now work with 16 or 32-bit operand sizes
  • Fixed a few issues that caused hardware interrupts to get disabled when they shouldn’t
  • Eliminated generation of multiple identical operand decoders (reduces memory usage, may increase performance somewhat)
  • Fixed an issue with unchained 256-color (mode X) display modes sometimes getting rendered incorrectly

If you’re expecting your favorite 32-bit DOS game to work now, you’ll probably be disappointed (unless, of course, you wanted to play Doom with no sound). Also, performance is not all that great for 32-bit programs, as I haven’t really optimized it for speed yet. I’m going to focus on improving protected mode compatibility up through version 0.6; expect all of these things to gradually improve from here.

Download here.

Older Posts »

Blog at