Atari++ Changelog

What's new in Atari++ 1.81

Sep 29, 2017
  • Fixed a bug in SIO that prevented correct emulation with the SIO patch enabled.
  • Fixed a timing issue in the SIO emulation that sometimes returned a command acknowledge too early for the ROM codes to react.
  • Fixed a minor bug in the Pokey SIO sound emulation of SIO.
  • Fixed the command handling of the USDoubler disk drive emulation.
  • Updated Os++, the build-in operating system. A bug in the screen-handler prevented that the screen goes back to the editor in case an already established text window is closed by a screen-open command.
  • Minor cleanup in the command line of the built-in Dos of Os++.
  • Updated Basic++ to the latest version 1.06.

New in Atari++ 1.80 (Nov 10, 2015)

  • Atari++ has now a built-in Basic interpreter, namely Basic++. It is a mildly extended Atari Basic dialect, which is quite a bit faster, plus one additional command, "DIR". See the Basic++ distribution for additional modifications.
  • The Basic settings have been improved, the preferences allow now up to three Basic images to be defined, typically corresponding to revisions A,B and C of the language.
  • The CPU emulation fixed the cycle count for some rarely used instructions.
  • Added a profiler to the monitor. PROF.S starts the profiler. PROF.L lists the profile counts collected so far, PROF.C lists the cumulative cycle counts of subroutines.
  • Tape emulation has been largely extended and simplified. Entering a non- existing tape will now create an error immediately. The tape emulation also allows now WAV files, i.e. digitized real tapes, and will decode them on demand.
  • Output to .WAV files (audio-encoding) is now also possible. This integrates the wav2cas and cas2wav programs of the same author into the emulator. SIO sound emulation has been extended. The SIO sound now also emulates the tape sound on input, and improves on the authenticity of the disk drive sound.
  • The X11 front end improves the handling of mouse clicks. Mouse clicks that do not go into the window but into an overlapping window are now ignored. Audio outut can now be recorded into a SAP Record-Type R file for playback.
  • Disk drive emulation has been largely improved. Several drive types are now emulated, including their serial transfer characteristics, such as disk drive speed. Note that the original 1050 drive emulation no longer takes disks that are double density or have more sectors than those of the original disk formats. To play such extended disks, select one of the more advanced drive types.
  • SIO emulation has been reworked to some degree to allow the extended drive types, control the serial speed and allow for proper tape emulation.
  • Binary disk images now also create a valid disk structure containing the load file as AUTORUN.SYS so it can be loaded from DOS, too.
  • The math pack patch has been revised and its precision has been inproved by changing the rounding policy slighty. The floating point to ASCII conversion now also follows the convention of the original math pack.
  • Detection of .BAS (Basic) files as disk images is now handled more carefully, and the emulator will no longer confuse some xfd disk images with basic files.
  • The built-in monitor supports now symbolic labels. Such label information can be read from a CA65 debug file output, i.e. use --dbgfile on the ca65 command line.
  • The debug file is then read with the new ENVI.S command of the monitor.
  • The math pack in the built-in Os ROM had a bug in the BCD to ASCII conversion which could not print signed zeros and some denormalized numbers correctly. This got fixed.
  • The math pack could not handle signed zeros in the BCD to integer conversion, fixed.
  • The BCD to integer conversion was pretty slow. The new release replaces the algorithm completely, making it a lot faster.

New in Atari++ 1.73 (Nov 10, 2015)

  • Added emulation support for the tape drive, and .CAS files loaded into the tape. Raw audio files in the .WAV format are not supported by the emulator directly, but two external programs "wav2cas" and "cas2wav" can convert between them.
  • A complete manual of Os++, including a memory map, is now available as download.
  • Included the Os++ system disk, including disk-based utilities around Os++ including a Dos overlay manager that relocates Dos buffers behind the cartridge, an RS232 handler, an updated version of DISKIO, a disk-based tape handler, a menu based DUP and a lot of tools.

New in Atari++ 1.72 (Nov 10, 2015)

  • The binary file loader automatically generated when inserting a COM or EXE into the disk drive and booting from it is now much shorter and requires a lot less RAM. It requires now, however, an additional ESCape code and hence emulator support. This will now also load binary files that require RAM from 0x800 and up.
  • This release adds support for ATX files and includes an emulation of the disk drive timing, handling of bad and duplicate sectors and a more precise emulation of the SIO timing.
  • An additional type of watch point was added: The default watch point now only reacts on memory writes, whereas the new watch point continues to react on reads and writes.
  • Experimented a lot with the timing of the GTIA Prior writing and found that the currently implemented logic is actually very close to the real system, additional delay cycles make results only worse, not better. Thus, leaving it as it is right now.
  • The SDL StringGadget now reacts on Ctrl+Backspace and Ctrl+Delete and erases its contents on this keyboard command.
  • Added emulation for "stuck" Player/Missile shift registers when switching from 4x or 2x expansion to the size register "2" value, which is almost, but not quite 1x expansion.
  • The built-in Os blocks NMIs now early in the reset cycle and by that tries to work around bad display lists left over by buggy programs.
  • Minor modification in the built-in FMS (Dos 2.++): CONFIG.SYS can now change the position of the FMS buffers by poking into DiskBufferBase $710,$711 and relocate them.
  • Minor modification of the short VBI: GPrior, ColBK and Col1 are now only reloaded if the graphics mode really requires it. This applies to fine scrolling text modes, and the text window modes with the GTIA modes (modes 9+64,10+64 and 11+64). This fixes compatibility issues with Atari Tennis and some Lucasfilms intros.
  • Minor modifications in the FMS: Rename with wildcard was broken, and the FMS no longer tries to load non-valid VTOCs.
  • The DUP COPY command avoids now trying to overwrite BASIC program memory or other user memory protected correctly by setting APPMEMHI. Some cartridges do not set this Os pointer correctly, though. Mac/65 does not. The new DUP command NEW will erase user memory and make it available for COPY.
  • Fixed a long standing bug of all Dos 2.XX compatible FMS'es: Directory reading mode did not cooperate with any other operations that would access the directory, and would invalidate the directory access channel. This is no longer the case now. Additionally, reading the directory sets now the EOF warning flag (Y = 3) correctly right before the EOF.
  • The STATUS command, as specified by DOS 2.0S and DOS 2.5, was actually quite unuseful as it required a file specification which was never supplied by BASIC. The new implementation returns the status of the last CIO command on the same channel if the channel is open, allowing BASIC for example to access the near-EOF warning return code.

New in Atari++ 1.71 (Nov 10, 2015)

  • 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

New in Atari++ 1.70 (Nov 10, 2015)

  • Probably too many things changed, most of them related to the quality of the
  • emulation.
  • Priority engine for the "fifth player" generated by missles was redesigned and should now reproduce all possible cases, including the priority conflicts correctly.
  • Color mixing of the fifth player on top of GTIA modes C0 and 40 should now work correctly.
  • Timing of the GTIA "strange mode" where PF0 to PF3 are used for a HIRES generated playfield was made more precise.
  • Color lookup for GTIA modes C0 and 40 on top of non-HIRES ANTIC modes was fixed.
  • Player-playfield color mixing for GTIA mode 80 was fixed.
  • Experimental support for on-line player and missile resizing was added.
  • ANTIC display generation was re-designed yet again and was rewritten.
  • ANTIC DLI and NMI timing was made a lot more precise and should now work to the cycle.
  • ANTIC VSCROLL support should now work to the cycle.
  • ANTIC DMA cycle allocation should now be finally correct for all modes.
  • Added emulation for ANTIC forgetting the sync signal if the last line on the screen is HIRES.
  • Added emulation of carrying the DLI and VSCROLL information across vertical blanks from the last displayed scan-line.
  • The jump on vertical blank ANTIC instruction did not generate a DLI on each line if DLI was enabled. Fixed
  • The rather ugly re-generation of ANTIC modelines for character-based modes was removed. This simplified the design, but might impact the emulation quality in some corner cases. A new ANTIC design would be required to fix this. More careful timing in display build-up should make this unnecessary anyhow.
  • DMA border computation is now much more canonical and cleaned up.
  • Since a lot of the internal timing should now work "on the cycle", there is no longer a need to configure some of the ANTIC variables, thus parts of the ANTIC preferences have been removed.
  • CPU emulation includes now parts of the unstable opcode family xB opcodes whose lower nibble is B).
  • The CPU emulation includes now the emulation of most (if not all) 6502
  • bugs: Forgetting conflicting NMIs, IRQs and BRKs (!).
  • Wait-cycle allocation was partially wrong and created conflicts between memory-refresh cycle allocation and WSYNC requests. This was fixed.
  • As a side effect, the special "double WSYNC" check was no longer necessary and was removed. The emulation is correct anyhow.
  • Some CPU preferences were removed because the emulation is considered to be precise anyhow.
  • PIA DDR register reads were not emulated correctly.
  • PIA emulation includes now flank-detection on CA2 and CB2 plus interrupt generation, and thus should be complete.
  • POKEY 9 and 17 bit random generators are now emulated precisely, and the generated "random" numbers should be now identical to those on the real hardware.
  • POKEY two-tone mode should now be emulated correctly, including the cycle timing for the linked channels.
  • Some race conditions for the serial control mode should now be emulated correctly.
  • POKEY direct serial input should now work fine with the SIO emulation, though direct serial output does not yet work.
  • Handling of the POKEY keyboard generation was wrong and should now work correctly.
  • The SIO patch resets now also the audio registers and the IRQ control of POKEY to work around some software bugs.
  • Os++ did not check properly for the RESET bit in the Antic NMI register and could have triggered false resets under some race conditions.
  • The legacy return value for the write-byte bus access was removed as it was no longer required since a long time.

New in Atari++ 1.6 (Mar 15, 2012)

  • Redesigned parts of the pokey emulation. The new version offers the option to be cycle-precise, i.e. pokey interrupts (POTs and timers) arrive now at the cycle. This improves the audio output for the "Electronic Speach Systems of Berkeley" considerably. (Kennedy Approach and others)
  • Redesigned parts of the audio interfaces. The smarter audio output count now clock cycles and generate output for exactly the number of clocks passed
  • The output frequency still requires dynamic adjustment since the CPU load of the host system is never precisely in sync with the emulated clock
  • The control mechanism to bring the emulated clock and the system clock in sync has been improved, it is now a PID type of control loop that gets faster in sync than the previous versions
  • The improved audio output is available currently only for the ALSA and DirectX audio output chains. Oss/OssHQ and SDL remain unaltered. There is, however little reason to fall back to the less precise chains. Prefer ALSA on Linux and DirectX on Windows
  • The parser for the keypad stick emulation was still buggy (oh bummer!) and was finally fixed. "Space" and " " can now both be used
  • The windows emulation of the readdir() primtives still had a bug and could crash the emulator on accessing a network volume. Fixed