Hi folks,
a new release of Atari++ is available for download at:
http://www.xl-project.com/
First of all, I want to thank pps for a complete re-design of the web-page, so there's more to see than just a new emulator. You can also grab old sources and binaries on this page.
Second, I also want to thank phaeron for answering many questions I had, and for the acid test helping to find emulator bugs.
So, what's new:
The release how 1.70 should have been, but wasn't due to time constraints.
Lots of fixes left over from 1.70 are now integrated, and regressions have
been fixed:
- The ANTIC logic to roll over an instruction to the next scan was partially
broken and also rolled a "Jump on Vertical Blank" over, breaking some games
that played tricks with the DMA control register.
- The new CPU logic to fetch the wrong interrupt vector (NMI instead of IRQ)
was partially broken and forgot to fetch the right high-bit, potentially
breaking code.
- The 65C02 BRK instruction was emulated incorrectly. The NMOS version
worked fine, and continues to work fine.
- 1.70 had, as indicated, a regression for late writes on Antic CHARCTL that
broke at least one game ("Summer Games"). The corresponding logic has been
re-done in a much cleaner way and is now part of 1.71.
- Pokey lo-byte timer registers in a 16-bit timer pair did not underrun to
255 correctly. In fact, the timer emulation was partially re-done and should
now do correctly, including the relative offset of low and high-timer on
a STIMER resynchronization.
- GTIA priority logic for player 4 on top of playfield 0/1 was broken in
one priority selection, which got fixed now.
- Player/missile retriggering was partially incorrect. This has been fixed now.
- Player/missile resizing was, as stated, experimental in 1.70 and is now
implemented correctly.
- On-line player/missile shape changes are now experimentally supported.
- The ANTIC/CPU WSYNC logic was partially broken as it does not block writes,
only reads - the mechanism is a different one. Note that this only holds for
the NMOS version. The CMOS version works correctly. This is also emulated.
- The NMI/IRQ reaction times were short by one cycle. They are now 7 cycles
as indicated.
- GTIA mode 80 on top of a low-res screen created a wrong color for the
PF3:BK pixel combination. This got fixed.
- GTIA VDelay support was partially broken. Actually, the P/M DMA engine
was redesigned for this release and should now work correctly.
- Alsa sound support was broken on some hardware. For some Alsa drivers,
audio hardware reacts allergic when trying to fill more samples into the
available buffer, stalling the main program. The updated Alsa sound support
rounds the samples written to the Alsa buffer to entire fragment sizes avoiding
this problem. The SDL or Oss/HQOss drivers were not affected, though in
general Alsa is preferably.
Anti-News: (or, what does not yet work):
- P/M shape changes are currently supported experimentally until I get hands
on real hardware.
- P/M shift-register disable tricks with PSIZE=2 are currently not supported.
- Writes to GTIA color or priority registers are not delayed and happen
immediately. The same goes to many other registers in Pokey, Antic and PIA.
- Antic DMACtrl in-line adjustment tricks are not supported, neither any
HScroll adjustments to disable the DMA-stop.
- Bus noise picked up by GTIA if GRACTL is enabled but DMACTL is disabled is
currently not emulated correctly.
- Bus noise picked up by ANTIC on the right side of wide playfield screens is
currently not emulated at all (and neither visible if it would).
- The POKEY soft-reset cylce is currently not emulated completely.
- Bit-banging serial output is currently not emulated at all.
Before anyone asks: If you want to run the acid test, make sure that you configure the emulator properly.
- You need to get a BASIC image and load it, otherwise Basic cannot be mapped in (for obvious reasons).
- You need to enable the "cycle precise Pokey emulation", which is off by default because it costs quite
some performance on slower machines.
- You need to set the "long start bit" in the Pokey configuration. I'm at this point unclear why this is necessary, it seems to be related to some timing/cycle issue I do not yet fully understand.
- You need to load the original Os. Os++ that comes with the emulator handles NMIs in one way a little bit different: If Os++ is unable to obtain the source of an NMI because the bits in Antic NMIStat are all reset, then it ignores the interrupt. The original Os run the VBI handler - even though I believe that this is a bad design choice (how do you know that you missed a VBI if the information on the interrupt source is no longer there?)
See also the "Anti News" on what is not there. Some parts are planned for the future, some features aren't even tested by the acid test or aren't even test-able because they don't have an observable effect, and some I consider too exotic to be implemented at this time.
a new release of Atari++ is available for download at:
http://www.xl-project.com/
First of all, I want to thank pps for a complete re-design of the web-page, so there's more to see than just a new emulator. You can also grab old sources and binaries on this page.
Second, I also want to thank phaeron for answering many questions I had, and for the acid test helping to find emulator bugs.
So, what's new:
The release how 1.70 should have been, but wasn't due to time constraints.
Lots of fixes left over from 1.70 are now integrated, and regressions have
been fixed:
- The ANTIC logic to roll over an instruction to the next scan was partially
broken and also rolled a "Jump on Vertical Blank" over, breaking some games
that played tricks with the DMA control register.
- The new CPU logic to fetch the wrong interrupt vector (NMI instead of IRQ)
was partially broken and forgot to fetch the right high-bit, potentially
breaking code.
- The 65C02 BRK instruction was emulated incorrectly. The NMOS version
worked fine, and continues to work fine.
- 1.70 had, as indicated, a regression for late writes on Antic CHARCTL that
broke at least one game ("Summer Games"). The corresponding logic has been
re-done in a much cleaner way and is now part of 1.71.
- Pokey lo-byte timer registers in a 16-bit timer pair did not underrun to
255 correctly. In fact, the timer emulation was partially re-done and should
now do correctly, including the relative offset of low and high-timer on
a STIMER resynchronization.
- GTIA priority logic for player 4 on top of playfield 0/1 was broken in
one priority selection, which got fixed now.
- Player/missile retriggering was partially incorrect. This has been fixed now.
- Player/missile resizing was, as stated, experimental in 1.70 and is now
implemented correctly.
- On-line player/missile shape changes are now experimentally supported.
- The ANTIC/CPU WSYNC logic was partially broken as it does not block writes,
only reads - the mechanism is a different one. Note that this only holds for
the NMOS version. The CMOS version works correctly. This is also emulated.
- The NMI/IRQ reaction times were short by one cycle. They are now 7 cycles
as indicated.
- GTIA mode 80 on top of a low-res screen created a wrong color for the
PF3:BK pixel combination. This got fixed.
- GTIA VDelay support was partially broken. Actually, the P/M DMA engine
was redesigned for this release and should now work correctly.
- Alsa sound support was broken on some hardware. For some Alsa drivers,
audio hardware reacts allergic when trying to fill more samples into the
available buffer, stalling the main program. The updated Alsa sound support
rounds the samples written to the Alsa buffer to entire fragment sizes avoiding
this problem. The SDL or Oss/HQOss drivers were not affected, though in
general Alsa is preferably.
Anti-News: (or, what does not yet work):
- P/M shape changes are currently supported experimentally until I get hands
on real hardware.
- P/M shift-register disable tricks with PSIZE=2 are currently not supported.
- Writes to GTIA color or priority registers are not delayed and happen
immediately. The same goes to many other registers in Pokey, Antic and PIA.
- Antic DMACtrl in-line adjustment tricks are not supported, neither any
HScroll adjustments to disable the DMA-stop.
- Bus noise picked up by GTIA if GRACTL is enabled but DMACTL is disabled is
currently not emulated correctly.
- Bus noise picked up by ANTIC on the right side of wide playfield screens is
currently not emulated at all (and neither visible if it would).
- The POKEY soft-reset cylce is currently not emulated completely.
- Bit-banging serial output is currently not emulated at all.
Before anyone asks: If you want to run the acid test, make sure that you configure the emulator properly.
- You need to get a BASIC image and load it, otherwise Basic cannot be mapped in (for obvious reasons).
- You need to enable the "cycle precise Pokey emulation", which is off by default because it costs quite
some performance on slower machines.
- You need to set the "long start bit" in the Pokey configuration. I'm at this point unclear why this is necessary, it seems to be related to some timing/cycle issue I do not yet fully understand.
- You need to load the original Os. Os++ that comes with the emulator handles NMIs in one way a little bit different: If Os++ is unable to obtain the source of an NMI because the bits in Antic NMIStat are all reset, then it ignores the interrupt. The original Os run the VBI handler - even though I believe that this is a bad design choice (how do you know that you missed a VBI if the information on the interrupt source is no longer there?)
See also the "Anti News" on what is not there. Some parts are planned for the future, some features aren't even tested by the acid test or aren't even test-able because they don't have an observable effect, and some I consider too exotic to be implemented at this time.