top of page

4.20-test27 / 15-09-2023





average rating is 4.1 out of 5
average rating is 4.1 out of 5
average rating is 4.6 out of 5

Altirra is a full cycle-exact emulation of all documented hardware features for the Atari 400/800, 1200XL, 600/800XL, 130XE, XEGS, and 5200 systems and is particularly notable for having a very well equipped debugger tool.


Windows: XP SP3+ for x86/x64

                     Qualcomm Snapdragon 835+ for ARM64


  • AltirraOS 3.40: Fix for FASC overwriting FR0.

  • Added 835 HLE emulation.

  • 1030 HLE emulation now supports analog loopback, more accurate behavior of dialing and the P command, and when SIO commands can be issued.

  • 1030 full emulation timing improved by removing a one byte transmission delay.

  • Additions/built-in T: now tracks on/off hook state, handles carrier detect timeout, waits for ACK after commands, and has better touch dial timing.


  • Added screen reader support for reading out foreground/background colors (Windows+F or NVDA+F).

  • Added 835 modem full emulation.

  • Performance Analyzer can now load monitor execution traces from Atari800WinPLus 4.0 (TRON/TROFF).


  • Fixed debugger crash when opening source windows after having closed one, and tweaked the lookup algorithm.

  • Fixed debugger windows that did not implement context menus properly when activated from the keyboard.

  • Added context menu options to the source window to open the file in Explorer or the default editor.

  • 1030 relay sound is now played instead of generic sound when going on-hook.

  • 1030 full emulator now supports analog loopback.


  • Add full 1030 modem emulation.

  • Fixed 8048 ADDC A,@Rn and JTF instructions.

  • Fixed a bug with some 1030 device options being sticky, particularly the answer setting.

  • Improved debugger source file resolution -- the debugger now attempts to resolve source file references against the module path and the paths of any open source windows.


  • Fixed standard emulator not filtering on FM/MFM tracks; fixes booting disks that deliberately use this to cause missing sector errors.

  • Improved behavior of manual FM/MFM mode switching via the format command.

  • Added /diskemu switch to set disk emulation mode.


  • Fixed bug with the standard disk emulator using 810 post-read timings for single density even with the 1050 profiles. This fixes a couple of disks that were very sensitive to read timings and previously only booted with the 1050 full emulator.

  • Slightly improved timing accuracy of the full drive emulators.

  • Added sector-under-head tracing.

  • Fixed a bug where acceleration timing compensation was not working properly for disk burst I/O. This allows some disks to boot with burst I/O enabled that would previously fail timing checks.

  • Fixed a bug in the standard disk emulator where the disk rotational position was being updated for motor-off time.


  • Fixed 810, 1050, and XF551 full drive emulators forcing write protect off on reset.

  • Standardized disk emulation behavior for sectors that have the RNF bit set for missing data fields. These are now uniformly treated as missing sectors that go the full 2/5 rotations for reads and are ignored for writes (since the FDC rewrites the entire data field in that case).

  • Fixed writes to sectors that have missing data fields. This now forces reallocation of the data field if necessary, where previously it would sometimes drop the data if no space was allocated in the original disk image.

  • Fixed handling of address CRC errors for writes in the standard disk emulator and for reads/writes in the full drive emulators.

  • The Check for Updates dialog now allows switching between the release and test channels, which previously were hardcoded based on the type of release.

  • Added emulation of U1MB CASINH behavior so that U1MB extended memory windows override VBXE MEMAC windows.

  • Added extended device command to refresh the directory listing of a virtual FAT16/FAT32 device.

  • Fixed horizontal offset in PAL high artifacting.


Something a little different -- this build adds some basic accessibility support:

  • The Display pane now supports reading out text for screen readers, such as Windows Narrator. This reads out the text using a similar mechanism to Copy Text, except that it will also identify and bracket inverse text. This works at the emulated hardware level where the cursor is not visible, so currently screen readers can't tell where the cursor is and scanning the text is necessary. Support for this needs to be enabled in Configure System > Accessibility currently, as the UIAutomation API is pretty fragile and for some reason the On Screen Keyboard likes to activate it too. XEP80 displays are not yet supported.

  • Restructured windows a bit to fix a focus issue that would trap the focus when trying to navigate between panes with Narrator+Left/Right, and added Previous/Next Pane commands to explicitly cycle between the panes.

  • Fixed a bug with hidden minimize/maximize controls being present on docked window frames, which showed up in Narrator navigation.

  • Added some invisible window captions so that splitters can be distinguished from panes.

  • Ctrl+C now works to copy out the contents from Altirra's fancy message boxes.


  • Fixes the tape auto-BASIC boot: fixed detection to allow for BASIC programs that have the rev. B padding bug, and added support for booting tapes that require RUN "C" to boot.

  • ATX disk image loader now allows null dwords at the end of the file.

  • Fixed VBXE P/M priority bugs on right side when emulating 1.26 core, due to not clearing the full priority buffer on lines with no P/M graphics.

  • Fixed a crash in the tape code after recording a performance analyzer trace with a tape mounted.

  • Fixed performance analyzer reporting an error when saving a trace if the history window had been moved to view a later part of the trace.

  • Revised trace save format: removed unnecessary complicated multi-stripe system, optimized codec/decoder, and compacted cycle counters. This is a hard format break.


  • Added support for saving and loading traces in the Performance Analyzer.

  • Added menu commands for selecting all text on screen and deselecting.


  • Fixed a crash in the FLAC decoder on some CPUs.

  • Fixed audio output with two-tone mode enabled not reflecting stop bits.

  • Fixed a bug with MDDOS cartridge banking.

  • Added command-line switches: /[no]casautobasicboot, /kernelref, and /basicref.

  • Fixed input diagrams sometimes appearing blank in Input Setup dialog.

  • Added Help > Export Debug Help command.

  • Added @hwwritereg(...) debugger function to read back write-only hardware registers. For instance, @hwwritereg(irqen) can be used to read back the IRQEN state.

  • Fixed up some omissions from the debugger help, such as the linear cart: address space type.

The exported debug help produces an HTML page that is inspired by some ones that others have generated; it works by dumping the dbghelp.txt into an HTML template and parsing with JavaScript. I wanted to just drop in the dbghelp.txt file raw, but needed to escape characters since HTML doesn't support CDATA. You can, however, easily substitute in an escaped version of dbghelp.txt from any other version.


  • Revised recently added MDDOS and JRC cartridge types, and added reset button to JRC carts.

  • Fixed all cartridges having a cartridge switch instead of just the COS32K type.

  • Fixed inverted field polarity detection in interlace mode and improved auto-flipping behavior when no explicit interlacing is detected.

  • AltirraOS 3.39: Fixed S: to ignore the no-clear bit in mode 0.

  • Fixed virtual FAT32 device limiting the image to 64K clusters, which only applies to FAT16.

  • Added compare memory (c) command to debugger.


  • Added build workaround for modules/PCH bug in VS2022 16.6/7preview.

  • Added a configvar for the directory length limit in virtual SDFS disks, which is no longer hardcoded at 256 entries.

  • Emulation network DHCP server no longer advertises a gateway if the networking mode is set to Host Only.

  • Emulation network gateway now responds to ICMP pings.

  • Emulation network gateway now has a different local MAC address to reduce the chances of conflicts when bridging to a LAN.

  • Fixed VXLAN code sending two extra bytes in Ethernet frames.

  • Fixed problem with emulation network HTTP server not shutting down connections properly.

  • Emulation network tracing now decodes IPv6 frames.

  • Improved emulation TCP stack handling of RST packets.

  • AltirraOS 3.38: Fixed vertical bar not being invertible, Ctrl+3 can now be remapped through XL/XE KEYDEF, caught the 65C816 version up on Display Handler fixes, and fixed SETVBV timing issue.

  • Accuracy fix for CPU execution timing around writes to WSYNC that cross an NMI, specifically whether the next instruction is executed or not prior to the NMI sequence starting.

  • Fixed crash in debugger when clearing directive breakpoints loaded from symbols.


  • AltirraOS 3.37: Improved NOCLIK compatibility, fixed Ctrl/Shift flags in HELPFG, and fixed KEYREP/KEYDEL not being implemented in '816 version.

  • Fixed IDE+2 1.9 BIOS not detecting CF card.

  • Fixed keyboard shortcuts not working in history window in the performance analyzer.

  • Ctrl+F in history view selects search field.

  • Fixed emulated TCP not properly handling graceful shutdowns from the remote side.


  • AltirraOS: Updated to 3.36 with compatibility fix: CIO now returns C=1 for programs that assume the C flag state on run.Custom devices: Fixed broken R-Verter sample custom device.

  • Cartridge: Added support for CAR types 76, 78-93, and 160, which were already supported but no longer require advanced config overrides. (Credit to Jindroush for driving the cross-emulator coordination work.)

  • Custom devices: Custom device system retargeted onto new socket framework.

  • Devices: Fixed devices dialog sometimes not updating in real-time for device status changes.

  • Devices: Added support for copy/paste of devices as text.

  • Debugger: Memory window now accepts general address expressions.

  • Disk: Improved accuracy of Happy 1050 hardware memory map.

  • Host device: Directory reads no longer return EOF Y=$03 code.

  • POKEY: Added emulation of altered results with truncated/restarted pot scans.

  • UI: Undocked windows are now moved on-screen if completely off screen on layout restore.

  • UI: Added workaround for Windows UWP touch keyboard sending the wrong key encodings for special keys.


  • MidiMate device now exposes a serial port that can be connected to serial devices.

  • Parallel port file writer generalized so it can also attach to and log data from serial ports.

  • Added networked serial port device that connects to a serial port and transfers data over TCP/IP.

  • Added serial port splitter to allow two different serial port devices to independently handle the input and output halves of a serial connection.


  • Fixed the "use long path names" setting not saving on the H: device.

  • Added devices: SIDE 3.1, SuperSALT test assembly.

  • Added cartridge types: JRC 64K with non-interleaved (linear) layout, MDDOS, COS 32K, and Pronto.

  • Fixed a couple of recently introduced crashes related to device changes.

  • Fixed an issue with MidiMate's clock being too fast when used for synchronous receive.

  • MidiMate MIDI output is now reset on cold reset.

  • Improved .pia command output in the debugger, fixed duplicate 'wx' help entry, and fixed silly "Play" for Record in the perf analyzer.

There is a known issue where attempting to run CPS SuperSALT with the test assembly in 800 mode will result in one test failure on POKEY from the I/O test. This is due to some weird behavior in the test that I can't figure out. The issue is that the test assembly hardwires controller ports 1 and 3 together and one of the joystick lines to joystick 1 trigger input, and it sets PORTB to output mode pulling all lines up while checking the joystick trigger, which is pulled up when it expects it to be low. This gets flagged as paddle A input stuck at +5V since the test assembly also hardwires paddle A input to the same joystick line, but the code in question is special-cased to test only trigger 0 and flag just that one paddle line. The other strange thing is that this part of the test code also leaves the SIO command line floating as an input when it is normally used as an output to enable the ADC output on the joystick lines, but that should be getting pulled up on the computer side.


  • Fixed crash when converting disk with unknown or unsupported filesystem.

  • Fixed crash when opening Calibrate screen with hardware acceleration disabled or unavailable.

  • Added support for the Stack Lightpen.

  • Input mapping dialog is now resizable.


  • Added cartridge auto-detection for Blizzard 32K type.

  • Fixed light pens/guns not working in port 4.

  • Fixed pulse dialing detection of 0 and increased interdigit pulse dialing time.

  • 1030: Implemented actual dial detection, fixed bogus echoing, and fixed on/off hook status flag in handler mode.

  • Debugger: Fixed .diskdumpsec command not working with virtual disks.

  • Fixed 1400XL internal device not saving settings.


  • 1400XL internal device is now visible and configurable for modem settings.

  • Added pulse and tone dialing detection so the emulator can now tell when a number is being dialed. This is only implemented for the 1400XL right now, but will be extended to the 1030.

  • 1400XL internal audio control is now implemented.

  • Fixed BRL instruction using the wrong bank for symbol lookup.


  • Math pack symbols can be unloaded separately in the debugger to avoid conflicting with PBI firmware.

  • Added static trace PBI (stp) command.

  • Fixed basic block detection when disassembling 8048 code.

  • Fixed a bug with bogus $01 banks showing up in 8048 mode.

  • Fixed data bank showing up with PEI (dp) indirection preview.

  • Added option to reinterleave floppy disks at 2:1.

  • Added firmware detection for the two known versions of the 1400XL V:/T: firmware.

  • Added support for drive/side selection on 1450XLD drive, and workaround for boot sector encoding issue


  • Initial 1400XL/1450XLD emulation.

  • Pad input area for tablet/powerpad can now be moved and resized in Configure HUD.

  • 65C816 fixes for PLB/PLD flag handling, PHP bits 4/5 after returning to emulation mode, incorrect stepping outside of bank 0, and some stack wrapping bugs specific to the Veronica '816.

  • Fixed XF551 write protect handling and improved FDC read/write timing.

  • The Reinterleave option in the Disk Drive dialog now marks the disk as modified.

  • AltirraOS updated to 3.35 with a bug fix for incorrect MEMLO handling when loading CIO handlers via type 4 polls.

  • Added PHLOAD.COM to Additions disk to trigger type 4 polling and peripheral handler loads.

  • Debugger: 'bta' command can now be used without a trace string; a default one is provided.


  • Debugger: (dp), (dp,X), and (dp),Y addressing modes now also suppress symbol lookup for non-zero D register, and there is now an option in the Disassembly window to control this behavior.

  • Horizontal and vertical mouse scrolling can now be bound in input maps. In particular, this allows two-finger panning on Precision Touchpads for uses like paddles.

  • Corrected the input map generator not binding mouse inputs for some light pen/gun types.

  • Added an option to draw touch points for pad/gun controls. In particular, this allows seeing the current touch point when driving such a control with a non-mouse input or when multi-touch input is involved.

  • Added emulation support for the Chalk Board PowerPad controller.


  • Another attempt to fix the downmix setting. It now also disables in mono.

  • PEI (dp) no longer shows deref value.


  • Display pan/zoom capability added.

  • Fixed some bugs in the D3D11 display path with GPUs that require power of two sized textures.

  • Fixed stereo-as-mono setting not saving.


  • VBXE blit logging uses beam tagged logging again.

  • Command line parsing changed for better consistency: switches now must be separate arguments and are no longer allowed combined with other switches or arguments, e.g. "test.atr/s/f" must now be "test.atr /s /f".

  • Added special:// protocol to access some internal images, including special:// to bind to current default BASIC cartridge.

  • Added support for enhanced Deflate (a.k.a. Deflate64(tm)) in .zip files.

  • The currently selected output is saved in save states when multiple outputs are active (i.e. XEP80).

  • Added MIO save state support.

  • Fixed an MIO issue with initial interrupt state that could cause a hang at boot.


  • Save state rework:Added Covox, R-Time 8, U1MB, VBXE, and XEP80 save state support.
    Added partial SIDE 1/2, SIDE 3, MyIDE, and BlackBox save state support. Save states will not work if saved during a disk transfer; there is now a warning if a save state is attempted during one.
    Axlon and 65C816 high (linear) memory are now saved.
    Fixed a bug with SKSTAT not being saved properly, which caused stuck keys.
    Fixed some extended memory not saving properly in 128K and 320K modes.
    Fixed DP register not being saved in 65C816 mode.
    Added thumbnails to save state files. They are not used in the emulator yet, however.

  • Updated file association registration:The placeholder app registration created by Explorer is removed on registration to get rid of the duplicate app entry.
    Fixed an issue where the Windows shell might not be updated immediately after changing file type registrations.
    There are now command-line switches to have the emulator register or unregister file types in silent mode.
    Added a dialog explaining how to navigate the brain-dead Windows 10/11 Default Apps settings UI.

  • Debugger: It is now possible to escape a symbol name that starts with @, e.g. #@current.

  • Debugger: VBXE blit logging/dumping now has a compact display mode, and the .vbxe_bl command can now dump a blit list at any local address.

  • Debugger: Zero page addresses are now loaded from CC65 debug info.

  • Cassette: Added data-as-audio playback support for raw FSK and PWM blocks in .cas files. There are some harmonics from turbo tapes when doing this due to jitter from the 10KHz resolution in raw .cas blocks which appears hard to filter out; Altirra's internal tape precision is 31KHz but a pulse adjustment pass would be needed to take advantage of that.

  • Input: Fixed POT lines being grounded improperly when binding a digital (binary) input to the analog paddle knob.

  • Cartridge: Fixed the Phoenix and Blizzard cartridge types to also disable the cart on CCTL reads.

  • Cartridge: Added support for the Williams 16K cartridge type.

Show Previous Changes

Nothing Additional to add...

bottom of page