Project Angel

Requirements:
 - xms=false (the demo will not start if HIMEM.SYS is present)
 - emm=false (the demo will not start if EMM386.EXE is present)
 - extended memory
 - realbig16=true (the demo apparently uses Flat Huge Real Mode i.e. jumping to real mode with B (big) set in code segment)
 - at least cycles count 12000
 - gus=true
 - machine=svga_s3 or machine=svga_et4000 (will not start with machine=vgaonly)
 - pit hack=project_angel_demo (this setting forces the PIT to fixed values that forces the demo to run and keep time properly)

Note that the comments below apply to the demo when run without the PIT hack. The PIT hack forces the timer to tick
at one of two time intervals in a way that forces the demo to run at the correct rate and helps prevent the demo
from hanging at startup. For whatever reason, the PIT hack also resolves issues with music skipping forward during
VGA mode changes, and eliminates the visible VGA tearline in the Mode-X parts.

Demo comments:
 - This demo is very picky about timing. In fact, when you run the
   demo, one of three things will happen.

   1) The demo will hang

   2) The demo animations and music will play at 1/2 speed

   3) The demo will actually run at normal speed

   If it does manage to run at full speed, there is a chance that
   the demo will lose timing and suddenly run slow, or stop entirely.

   To put it another way, the reason this demo is so hard to run
   (besides the Huge Flat Real Mode hack) is that it is very picky
   with the PIT 0 system timer. If DOSBox's debug messages are
   correct, the demo is *constantly* fiddling with the PIT timer
   and flitting rapidly between 18.2Hz and about 400-520Hz. It seems
   to auto-adjust, to what exactly I don't know.

   You can discern from the PIT timer what happened to the demo:

   1) The demo will hang

      If DOSBox debug messages are compiled in, you will see:

      976659850: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      976747898: PIT:PIT 0 Timer at 22095.9628 Hz mode 3

      976775657: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      977921776: PIT:PIT 0 Timer at 7747.9351 Hz mode 3

      977994511: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      978082575: PIT:PIT 0 Timer at 22095.9628 Hz mode 3

      978110385: PIT:PIT 0 Timer at 18.2065 Hz mode 3

   2) The demo animations and music will play at 1/2 speed

      Again, DOSBox debug messages will show:

      353328489: PIT:PIT 0 Timer at 284.0233 Hz mode 3

      355019387: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      355022154: PIT:PIT 0 Timer at 277.4197 Hz mode 3

      356752840: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      356752840: PIT:PIT 0 Timer at 284.0233 Hz mode 3

      358443738: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      358446505: PIT:PIT 0 Timer at 277.4197 Hz mode 3

   3) The demo will actually run at normal speed

      Again, DOSBox debug messages will show:

      98621248: PIT:PIT 0 Timer at 527.4898 Hz mode 3

      99683536: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      99771158: PIT:PIT 0 Timer at 551.8881 Hz mode 3

      100788381: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      101290855: PIT:PIT 0 Timer at 527.4898 Hz mode 3

      102353108: PIT:PIT 0 Timer at 18.2065 Hz mode 3

      102440734: PIT:PIT 0 Timer at 551.8881 Hz mode 3

      For some scenes, the demo will converge on 421Hz,
      and for other scenes, will rapidly alternate
      between 527.48Hz and 551.881Hz.

      It is possible at any time, if timing bugs happen
      to line up, for the demo to run normally, then suddenly
      lose control of the timer and slow to a crawl or
      stop.

      Also noteworthy is that compiling DOSBox in debug
      mode (C_DEBUG) increases the chances of the demo
      running normally. Non-debug builds are much more
      likely to fall into the 1/2-speed situation.

 - VGA mode-change glitches.

   I also noticed that the music will audibly skip or
   miss a beat when one scene transitions to another and
   a mode change is involved.

