Altirra, an 8-bit Atari computer emulator
I had access to a number of 8-bit computers in my childhood, but my most favorite was the Atari 800, a 1.79MHz 6502-based computer with color graphics and a disk drive, and which as the predecessor to the Amiga, another favorite of mine. Over a decade later, I was struck by both nostalgia and ambition and started to write a new 8-bit Atari emulator from scratch. This is the result.
At this point, I've learned a lot more about the Atari and Altirra now emulates more than I ever had or did years ago, but I still work on it periodically. It also serves as a modularity test for the VirtualDub code base, from which Altirra shares some components. If you are struck by nostalgia too or have a desire to do some Atari development, perhaps it might be useful to you, too.
Note: Neither the author nor the software on this page is affiliated with Atari, and there is no code or software from Atari included in the downloads. All trademarks belong to their respective owners.
- Emulates the Atari 400/800, 1200XL, 600/800XL, 130XE, XEGS, and 5200 systems.
- Full, cycle-exact emulation of all documented hardware features.
- Best-in-class emulation accuracy of undocumented hardware behavior, including undocumented 6502 instructions, precise DMA timing, mid-screen register changes, hardware bugs, and cycle-precise timer IRQs.
- Support for most popular 8-bit image file formats: ATR, ATX, ATZ, DCM, XFD, PRO, ARC, BAS, ROM, BIN, A52, CAS, SAP.
- Contains reimplemented versions of OS, BASIC, and handler ROMs to run 8-bit software with high compatibility without needing Atari ROMs.
- Emulation of over three decades of hardware expansions, including memory expansions, cartridge expansions, Parallel Bus Interface (PBI) devices, modems, and 65C02/65C816 accelerators.
- Accurate emulation of multiple disk drive types with options for accelerated disk loads, realistic disk timing, drive sounds, and full drive CPU emulation.
- Flexible display with Direct3D 9/11 acceleration, aspect ratio options, easy resizing, and artifacting support.
- Audio and video recording, cheat trainer, DOS disk explorer with drag-and-drop, and text mode copy/paste.
- Powerful debugger with label decoding, source-level stepping, conditional breakpoints/tracepoints, watchpoints, execution history with loop/call/interrupt folding, and profiling.
- Native Windows UI with theme support, per-monitor high DPI support, file associations, drag and drop, copy/paste, and DirectInput/XInput controllers.
- 32-bit (x86), 64-bit (x64), and ARM64 versions available.
Before you begin
Altirra is designed with emulation quality in mind, sometimes over speed and polish. It's designed as a system emulator and debugger instead of a games machine, so there is some setup involved. There is a README file in the archive, but here are some quick tips:
First: Software. you need some actual 8-bit Atari (not Atari ST!) software to run. If you don't have any, it'll be a pretty boring experience. I can't give this to you for various reasons, but there are freely available demos, and if you have converted your Atari software to disk images for other emulators, those will work too. Specifically, disk images are supported in ATR, DCM, ATX, and PRO formats; some simple cartridge types are also supported, and you can directly load Atari executables as well (.obx/.xex).
Second: kernel ROMs. Altirra has an internal kernel that can be used to run Atari software, and thus you can run demos, games, and productivity software without needing any Atari ROM images. However, this kernel is reimplemented from scratch, and has some compatibility problems with software that depends on undocumented entry points or behavior. Therefore, you may want to consider hooking up real kernel ROM images, which will greatly increase Altirra's software compatibility. I'm afraid I can't offer these for download, but if you have downloaded ROM images from your Atari, Altirra uses the same format and filenames as most other popular Atari 8-bit system emulators.
Third: compatibility. Altirra is designed to emulate the actual Atari hardware as closely as possible. Its compatibility has been increasing over time, and at this point it should run most software correctly. However, there can still be problems, some of which may be emulation bugs, and some of which are related to hardware emulation settings. Tips:
- Disable BASIC (unless you're actually running a BASIC program).
- For older games, use 800 hardware and 48K RAM, and the OS-B kernel.
- For newer games, use XL hardware and 128K RAM (XE), and use the XL kernel.
- For demos and games written in Europe, use XL hardware/kernel, 320K RAM, and PAL.
- If you don't have kernel ROM images, use the built-in AltirraOS kernel instead.
- Use Input > Joystick to toggle the joystick, which uses the arrow keys and the left control key.
Altirra has relatively few system requirements:
- Windows 7, 8, 8.1, 10, 11 or later, either 32-bit (x86) or 64-bit (x64 or ARM64). (Windows RT not supported)
- Intel Pentium 4 or AMD Athlon 64 CPU or better (SSE2 required), or Qualcomm Snapdragon 835 or newer (ARM64 version).
- Graphics card supporting DirectX 9.0 with pixel shader 2.0 or later support recommended, but not required.
Still running Windows XP or Vista? Altirra 3.91 is the last version that will run on versions of Windows older than Windows 7.
Do you have a CPU that doesn't support SSE2? Altirra 2.90 is the last version that will run on non-SSE2 capable CPUs.
Altirra is licensed under the GNU General Public License (GPL), version 2.
Binaries, i.e. stuff you can run (all local downloads):
Starting with 3.10, both x86/x64 and ARM64 versions are provided. Almost all computers should use the x86/x64 package. The ARM64 package is a native ARM64 build for systems running Windows 10 on ARM on a Snapdragon 835 or higher and will run faster on those systems.
Version 4.x binaries (local download):
Altirra 4.01: [4.01 (x86/x64)] [4.01 (ARM64)]
Altirra 4.00: [4.00 (x86/x64)] [4.00 (ARM64)]
Version 3.x binaries (local download):
Altirra 3.91: [3.91 (x86/x64)] [3.91 (ARM64)]
Altirra 3.90: [3.90 (x86/x64)] [3.90 (ARM64)]
Altirra 3.20: [3.20 (x86/x64)] [3.20 (ARM64)]
Altirra 3.10: [3.10 (x86/x64)] [3.10 (ARM64)]
Altirra 3.00: [3.00 (x86/x64)]
Version 2.x binaries (local download): [2.90] [2.81] [2.80] [2.71] [2.70] [2.60] [2.50] [2.40] [2.30] [2.20] [2.10] [2.00]
Version 1.x binaries (local download): [1.9] [1.8] [1.7] [1.6] [1.5] [1.4] [1.3] [1.2]
Source code (i.e. stuff programmers can modify and compile). This includes the source code to AltirraOS, Altirra BASIC, and all of the utilities on the Additions disk.
Starting with 4.00, the source code archive is compressed using the 7-zip format (.7z).
Altirra 4.01 source code (local download)
Altirra 4.00 source code (local download)
Version 3.x source code (local download): [3.91] [3.90] [3.20] [3.10] [3.00]
Version 2.x source code (local download): [2.90] [2.81] [2.80] [2.71] [2.70] [2.60] [2.50] [2.40] [2.30] [2.20] [2.10] [2.00]
Version 1.x source code (local download): [1.9] [1.8] [1.7] [1.6] [1.5] [1.4] [1.3] [1.2]
Acid800 Test Suite
Acid800 is a test suite designed to stress 8-bit Atari emulators. It tests a wide variety of program-visible hardware behaviors and reports any deviations from actual hardware behavior, such as missing features or incorrect timing. Acid800 can be run either as a full suite or as standalone tests, with symbols and source included. Also included are the Acid5200 test suite for the 5200 SuperSystem and the AcidSAP suite for SAP players.
- Acid800 1.1 binaries and source (local download)
- Acid800 1.0 binaries and source (local download)
- 16K RAM support.
- New tests: PIA interrupts, ANTIC playfield start/stop timing, POKEY serial port.
- Fixes to CPU instruction and MMU banking tests.
- Acid800 0.9 binaries and source (local download)
- Added virtual DMA and VSCROL+DLI tests.
- Acid800 0.8 binaries and source (local download)
Hardware reference manual
This is a document describing all of the interesting behavior I've discovered in the Atari 8-bit hardware.
BASIC reference manual
This is the manual for Altirra BASIC, the BASIC interpreter embedded within the emulator.
Version 4.01: [February 2, 2022] [bugs fixed] * Additions: Fixed LOADEXE.XEX using old $FD device SIO code for the program loader instead of $7D. * AltirraOS: Fixed math pack compatibility issue with FDIV modifying FLPTR (fixes B-Graph pie chart routine). * AltirraOS: Fixed a cursor position checking bug with split screen Gr.0 (fixes the BASIC game House of Usher). * AltirraOS: Fixed compatibility issue with KEYDEL handling (fixes cursor movement in BrushupV40). * ATBasic: IOCB#7 is now automatically closed on I/O errors to avoid SAVE files being kept open for write. * Cassette: Fixed FLAC decoder crash with some block sizes. * Cassette: Fixed regression with FSK blocks in CAS files being read as turbo pulses instead of FSK pulses. * Disk: Retuned XF551 high-speed C/E to data frame delay. * Display: Workaround for D3D11 minimum precision crash on Intel Iris Xe 22.214.171.1249 driver. * Serial: Pad out 850 relocator to match length of original firmware relocator (fixes compatibility with loaders that hardcode the relocator length). * VFS: Fixed wrong file being accessed when using atfs:// paths to access files inside a DOS 2 disk image.
Version 4.00: [November 13, 2021] [changes] * Display: Dropped support for DirectDraw and OpenGL. * Input: Relative mouse binding and 5200 trak-ball speeds have been adjusted for better uniformity. Existing input maps may need to have their speeds adjusted. * Platform: Dropped support for Windows XP/Vista; Windows 7 or higher is now required. * UI: Keyboard shortcuts have been reset to default to fix a bug with them being stored in the wrong place and to only store changes from default shortcuts. * UI: Default shortcuts for toggling audio channels have been changed from Ctrl+Alt+[1-4] to Alt+Shift+[1-4] to fix a conflict with some AltGr+key bindings in the Spanish keyboard layout. [features added] * Additions: Replaced ALTXEP8F.SYS fast XEP80 driver with ultra-speed ALTXEP8U.SYS driver with symmetric 31Kbaud communication. * Additions: Added ALTXEP8P.SYS and ALTXEPUP.SYS variants with auto-switching to PAL (50Hz) on initialization. * Additions: Added XEPVHOLD.COM utility to improve XEP80 video timing compatibility with modern displays. * Cassette: Added support for KSO Turbo 2000. * Cassette: Added new level-based turbo decoding filter. * Cassette: Added FLAC decoding support. * Cassette: Added feature to hold data line across VBI to increase reliability of OS C: reads. * Custom Devices: Scripting support added for break, while, do/while, and forward declarations. * Custom Devices: Added support for creating alternate video outputs and PBI IRQs. * Debugger: On-screen watches can now update continuously as well as per-frame. * Debugger: Watch expression (wx) now has options for hex formatting. * Debugger: Extended cartridge bank debugging support to MaxFlash 1Mbit and SDX 64K/128K cartridge types. * Debugger: Memory window now supports scrolling, variable width, and graphics decoding. * Debugger: Improved speed of console output window. * Debugger: Added .fpaccel command to selectively toggle math pack acceleration routines. * Debugger: Effective addresses are now shown in history in 65C816 mode. * Debugger: Added .pagesums command. * Debugger: lft -u option enables logging with microsecond timestamps, and -r enables raw timestamps. * Debugger: "Auto-reload ROMs on cold reset" setting is now saved. * Debugger: Go frame (gf) command now has a quiet (-q) option. * Debugger: 65C816 M/X mode handling can now be configured in the disassembly window. * Debugger: .diskdumpsec now has invert (-i) option. * Debugger: Added debug link support to receive SDX symbol information from ATDEBUGX.SYS driver. * Debugger: Added 'dbx' command to evaluate an expression over a range. * Debugger: Added verifier options for detecting stack wrapping and stack in page zero. * Devices: Added Percom AT88-SPD emulation. * Devices: Percom AT-88 emulation now allows 1791/1795 FDC selection. * Devices: Added SIDE 3 emulation. * Devices: Added virtual hard disk device that translates a read-only host directory to a FAT16, FAT32, or SDFS partition image. * Devices: Added temporary write filter hard disk device. * Devices: Added preview SoundBoard 2.0 emulation. * Devices: Added 1090 80 Column Video Card and Bit 3 Full-View 80 emulation. * Devices: Added parallel port buses to all devices that support printer output and file writer device to sink printer output to a file. * Disk: Disk rotational positions are now randomized on periperal reset. * Disk: ATR loader now matches 77-track disk geometries for 8" disks. * Disk: Added support for Happy 810 Autospeed mod. * Disk: Percom RFD-40S1 double-clock mode is now implemented. * Disk: Added option in Disk Drives dialog to show location of mounted disk images in File Explorer. * Disk: Added full emulation for the Atari 815 disk drive (read only). * Disk: Added support for reading from and writing to Indus GT CP/M 2.2 filesystems. * Disk Explorer: Added options to import/export files with text (line ending) translation. * Display: New Palette Solver in Adjust Colors dialog to derive color parameters from a palette file or photograph of a palette image. * Display: Added white monochrome mode. * Display: Added option to constrain mouse pointer to active display in full-screen mode. * Display: Added high dynamic range (HDR) display support (requires Windows 10 / DXGI 1.6). * Firmware: Warn if ROM image being added is blank. * Firmware: Added autodetection of 1200XL rev. 11 OS and 1050 rev. H. * HDevice: Lifted 16MB file size limit for untranslated access (H1-H4:). * IDE: VHD differencing mode images can now be mounted. * Input: Added support for XInput 1.4. * Input: Added an option to use the Raw Input API (Configure System > Input). * Input: Added an option for immediate potentiometer updates to reduce paddle and 5200 controller latency. * Input: Mouse, trackball, and 5200 controllers now accept mouse delta bindings to Left/Right/Up/Down, and paddle controllers accept digital bindings to Left/Right. * Input: Added preset template generator for input maps to make it easier to set up less common controller setups. * Input: Ctrl/Shift are now optionally blocked from virtual key mappings when used by input maps with the 'share' option off. (They are still processed for character mappings due to OS limitations.) * PerfAnalyzer: Added trace channel for SIO command state. * Platform: Added option to poll virtual disk and H:/PCLink sources for systems that have broken file change notifications. * POKEY: Improved audio filters for better performance and aliasing rejection. * Simulator: Added centralized randomization control under boot options. * Simulator: Throttling code updated with waitable timers for better efficiency. * UI: Dark mode improved with reskinned buttons. * UI: Added option to auto-hide menu in windowed mode. * UI: Added advanced configuration dialog to expose hidden, unsupported parameters. * UI: Performance analyzer now supports dark mode. * UI: Added /reset to load last profile without the device tree. * UI: Right-clicking on a menu item now provides a direct path to open Keyboard Shortcuts to bind a key to that menu item. * UI: Added /tapepos to pre-seek tape to specified position. * XEP80: Improved accuracy of XEP80 bit and byte timing based on measurements on real hardware. * XEP80: Added NS405 FIFO timing emulation. [bugs fixed] * 5200: Rewrote noise implementation again to work around games with buggy joystick position filters (Galaxian) and to avoid drift for relative bindings. * Additions: BOOT850 no longer leaves CRITIC set on failure. * ANTIC: Fixed unstable horizontal scrolling in IR mode 3. * ANTIC: JVB instructions now have the correct replayed height when ending a vertical scroll region. * Audio: Changes to the default audio device are now tracked in WASAPI mode. * Audio: Improved aliasing rejection of output audio filter. * Cartridge: Fixed MegaCart 512K (3) banking disable behavior to only use bit 7. * Cassette: Fixed regression with proceed/interrupt turbo modes not working. * Cassette: Turbo decoding/filtering settings now apply to the "Analyze tape decoding" command. * Cassette: Motor and play/record/pause state is no longer reset when switching tapes. * Custom Devices: Fixed script compiler allowing async methods to be called from handler contexts that don't support async operations. * Debugger: The Find Source File dialog now strips subdirectories when populating the file filter. * Debugger: Fixed heat map not reflecting reads from some read-modify ALU instructions (e.g. ADC zp,X). * Debugger: Improved performance of tracepoints that check return values by suppressing UI updates on the hidden breakpoint. * Debugger: .disktrack command now works with geometries other than 18 sectors/track. * Debugger: .diskreadsec now always uses the virtual sector length for consistency with .diskwritesec. * Debugger: Fixed disassembler prescanner using the wrong instruction length for COP n instructions. * Debugger: Removed JSR (abs,X) and added RTL and BRL to list of opcodes that trigger a procedure separator. * Debugger: Fixed crash in 65C816 mode with access breakpoints with the same page address but different bank address. * Debugger: Step Over at disassembly level now handles JSR (abs,X), JSL, and MVN/MVP opcodes. * Debugger: Added .vbxe_pal command. * Debugger: Fixed disassembly window repeatedly trying to scroll near the top of address space. * Devices: Fixed a case where Rapidus could fail to cleanly switch from the 65C816 to the 6502. * Devices: Fixed bug where debug reads from SIDE/SIDE2 flash windows could trigger side effects during sector erase operations. * Devices: Rapidus fast RAM windows no longer have priority over ROM. * Devices: Fixed Rapidus main RAM speed override sometimes being reverted; main RAM is now always at slow speed and extended RAM is also slow speed. * Devices: Fixed R-Time 8 state being changed by debug reads in the debugger. * Disk: Fixed name mangling on virtual SDFS disks for files and directories with names starting with periods. * Disk: Fixed corrupted double-density ATRs being written in some cases from full disk drive emulators. * Disk: Fixed bug with final write from full drive emulators not always triggering auto-flush. * Disk: Fixed corruption of first byte sent by 810/1050 full drive emulators. * Disk: Recalibrated ACK-to-Complete delays for the standard disk emulator for Status and Read PERCOM Block commands based on firmware timings. * Disk: Virtual SDFS volumes now use creation timestamps for directories. * Disk: Added workaround for 1050 Turbo firmware not detecting density if the drive is powered up with a disk already inserted. * Disk: Fixed hang when loading ATX images with extra data pointing to out-of-range sectors. * Disk: Fixed XF551 formatting side 2 of disks with incorrect interleave. * Disk: Motor off timer adjusted for 1050 timing and to not count down during disk operations. * Disk: Accurate sector timing mode now waits for the full length of long sectors in 1050-based emulation modes. * Disk: Fixed broken audio output from Indus GT disk drives. * Disk: Generic disk emulation profile supports XF551 acceleration again. * Disk: Fixed several broken/missing instructions in Z80 emulation. * Display: Fixed chroma signal having reversed phase in NTSC high artifacting mode, causing chroma artifacts in mono mode to move in the wrong direction. * Display: D3D9 driver now allocates swap chain immediately to force a fallback with useless D3D drivers that report PS3.0 but only have 1MB of VRAM. * Display: Fixed intensity scale color setting not affecting saturation in NTSC high artifacting mode. * Display: Fixed issues in the high artifacting chroma filters causing some excessive banding. * HDevice: Fixed burst writes not returning error status correctly. * HLE: CRITIC is no longer zeroed from PBI-based SIO acceleration to fix key repeat issues with some versions of SpartaDOS X. * IDE: Fixed Rev. S not supporting some Rev. D registers and being detected as Rev. C. * Input: Fixed arrow keys getting stuck down in emulation when pressing Alt+arrow and then releasing Alt first, with arrow keys bound to a controller. * Input: Quick maps are now always cycled in sorted name order. * Input: Fixed controller triggers getting stuck down in some cases when detaching light gun controllers. * Input: Fixed flipped horizontal relative movements for tablets. * Input: Trigger targets are now collapsed properly so that multiple mappings to the same target cooperate, e.g. Left -> Numpad7, Up -> Numpad7, Up -> Numpad8, with both keys being pressed and released in any order. * Input: Direct keyboard layout had incorrect mappings for Ctrl/Shift+Space. * PCLink: Fixed reversed directory sort order. * PCLink: Now uses last write timestamp for files instead of creation timestamp. * PerfAnalyzer: Fixed painting bug with ANTIC DL event channel at some zoom levels and scroll positions. * PerfAnalyzer: Fixed timing error for bytes sent to the computer from a full disk drive emulator, which were shown starting at their actual end times. * POKEY: Channel mixing updated to use more representative per-channel non-linear steps. * POKEY: Fixed channels occasionally having their timing disrupted when toggling timer IRQs. * POKEY: Fixed extra audio pulse when timer 1/2 underflow coincides with two-tone timer reset. * POKEY: Fixed keys not being re-reported in raw non-full scan mode when enabling debounce with keyboard scan already enabled. * UI: Fixed mouse wheel scrolling when the system wheel scroll setting is set to pages instead of lines. * UI: Profile editor no longer allows parenting a profile to itself or its children. * UI: Settings load/save code now detects profile loops due to the profile editor bug and forces a reparent to the global profile so settings saving still works. * UI: ARM64 emulation dialog no longer allows saving "OK" response. * UI: Added 5 second timeout when notifying an existing instance in single instance mode to prevent processes piling up if the instance is hung. * UI: Full-screen file browser scrolls back to top when changing folders. * VBXE: Improved GTIA state syncing when toggling VBXE on the fly. * XEP80: Scrolling now always removes one physical line, not a logical line as E: does. * XEP80: Fixed an occasional issue with indeterminate state after cold reset. * XEP80: Printing a char at the right margin now only inserts a line when EOL is overwritten. * XEP80: Delete line can now slice a multi-line logical line like the real XEP80 does. * XEP80: Fill EOL ($1C6) command was using the wrong fill byte.
Version 3.91: [November 11, 2021] [bugs fixed] * AltirraOS: Adjusted internal variable usage of P: handler for better compatibility with programs that jump into it without opening P: (Monkey Wrench II). * AltirraOS: Fixed E: Put Byte routine sometimes returning Y=2 instead of Y=1. * AltirraOS: Implemented XL/XE NOCLIK variable. * AltirraOS: Fixed minor rounding error in ATN() constant from assembler. * AltirraOS: Fixed bugs with E: move left and delete char at column 0 with LMARGN=0. * AltirraOS: Added workaround to SIO for devices sending two ACKs instead of ACK+Complete (fixes Indus GT diagnostics zero adjust). * Display: Fixed failure to switch to exclusive full-screen mode in D3D9 with bloom enabled. * Display: Reduced banding in PAL high artifacting mode. * Input: Fixed Shift key interfering with controllers in 5200 mode. * SaveStates: Improved reliability of save states. * Serial: Fixed hang when dropping modem connection with unread data. * Serial: Fixed initial socket data sometimes not being read from modem until first byte is sent. * UI: Fixed a crash in dockable pane code with mixed DPI monitors.
Version 3.90: [June 14, 2020] [features added] * AltirraOS: The boot screen in the XL/XE version now continues boot on disk insertion rather than forcing a reboot. * AltirraOS: Extended memory scan limit for 800 version to $D000 to support 52K expanded configurations. * Audio: Individual channels on the secondary POKEY can now be muted. * Cartridge: Added JRC 64K + RAM cartridge type. * Cassette: Optimized cassette tape emulation routines. * Cassette: Added option for high-pass prefiltering before the turbo tape decoder. * Debugger: Improved loop detector in history view to more precisely capture loop. * Debugger: Added @tapepos pseudovariable. * Debugger: Specifying ? for a path argument now opens a file dialog to select the path. * Debugger: The disassembly window now has support for showing procedure dividers, previewing called procedures, and jumping to call targets. * Debugger: Disassembly and History views now save their disassembly settings. * Debugger: Added option to disable automatic system symbols. * Debugger: Alt+Shift+click on the display jumps to History at the corresponding beam position. * Debugger: Verifier supports detecting access to non-canonical hardware addresses. * Debugger: .caslogdata command superceded by updated CASDATA/CASDATA2 logging channels. * Devices: XEP80 can now be switched to different controller ports. * Disk: Added full emulation for 810 Turbo, Amdek AMDC-I/II, and Percom AT-88 disk drives. * Disk: A warning is now displayed when attempting to insert a disk into a drive that doesn't support it (e.g. double-density disk into an 810). * Disk: Detailed errors are displayed when a disk image write fails on the host and is remounted virtual read/write. * Disk Explorer: Added Import File and Export File commands so that drag and drop is not needed to copy files. * Display: Added option for frame blending in linear color space for better accuracy. * Display: Color settings can be saved and loaded from external files. * Display: Added new default preset for PAL. * Display: The Hue Start slider in color settings now has the same I-Q angle definition in PAL quirks mode and works in PAL high artifacting mode. * Firmware: Add Firmware now detects OS ROM images even if the specific image is not recognized. * Firmware: Added detection for more MIO firmware images and support for auto-trimming padded 16K images down to 8K. * Input: The keyboard layout editor now warns if the key mapping being added conflicts with a keyboard shortcut. * Recorder: Added options for pixel aspect ratio and frame scaling. * Recorder: Added support for recording to WMV and H.264 through Media Foundation on Windows 7 and later. * SaveStates: Save state format rewritten to v2 (*.atstate2), now based on JSON within a .zip file for better accessibility and versioning. * SaveStates: CPU state can now be saved mid-instruction. * Simulator: Reordered frame wait and device poll timing around VBLANK to reduce input and output latency. * UI: Added experimental dark theme support. * UI: Added /reset command-line switch to selectively reset settings. * UI: Audio monitor now shows modified frequencies for two-tone mode, indicators for two-tone mode and asynchronous receive mode, and better shows ultrasonic effects. * UI: Added audio scope for viewing raw POKEY output. * UI: Added options for controlling mouse pointer visibility. * UI: Audio monitor positioning can now be customized. * Video: Added PERITEL adapter and monochrome monitor emulation. [bugs fixed] * AltirraOS: Audio configuration is reset more often on tape reads to produce familiar sounds. * AltirraOS: Disk boot can now occur after cassette boot and right cartridge non-boot. * AltirraOS: OLDADR usage adjusted for compatibility with SDX QUICKED.SYS. * AltirraOS: SIO transmit operations can now be interrupted by User Break. * AltirraOS: The Display Handler now properly sets the default background color (COLOR4) to $06 when opening a GR.11 screen. * AltirraOS: KRPDEL is now set and keyboard repeat rates are NTSC/PAL adjusted on the XL/XE/XEGS version. * AltirraOS: Fixed an SIO issue with an out-of-spec short delay from asserting the command line to first command byte. * AltirraOS: Fixed disk boot issues if a PBI device or cartridge init routine issued an SIO request with DAUX2 > 0 before the disk boot. * AltirraOS: The boot screen now resets the Break key state properly after a boot is interrupted by the Break key. * AltirraOS: Improved native mode compatibility of 816 version. * ANTIC: RNMI (400/800 System Reset) is now always synchronized to VBI. * Audio: Fixed stereo mixing being twice as loud as mono mixing. * CPU: Fixed cycle timing for indexed illegal read-modify-write instructions and ARR #imm ($6B). * CPU: Fixed extra instruction being run occasionally for a DLI delayed by WSYNC. * CPU: 65C816 (dp,X) addressing mode now always wraps in emulation mode when accessing high byte regardless of DP. * CPU: 65C816 (dp) addressing mode properly wraps in emulation mode with DP aligned, except for PEI (dp). * CPU: 65C816 WDM instruction now properly fetches two bytes. * Debugger: .dumpdsm -s option now interprets 6809 instructions. * Debugger: Line number information is now updated properly when using cartridge bank mapping in MADS listings. * Debugger: Disassembly window now accepts cartridge bank addresses. * Debugger: Fixed broken option to auto-load kernel ROM symbols. * Debugger: Reduced frequency of stale memory in the disassembly window. * Debugger: Fixed incorrect call nesting in history window in Z80 mode. * Debugger: Fixed some disassembly errors in 6809 mode. * Debugger: Input byte (ib) now correctly issues read cycles with side effects in the main CPU address space. * Devices: Fixed crash on ANTIC reading from SoundBoard hardware registers. * Devices: 65C816 emulation fixes for Veronica. * Disk: Fixed some illegal indexed RMW instructions taking too few cycles for 6502 coprocessors in full disk emulators. * Disk: Full drive emulation FDC now allows Write Track commands to proceed immediately when the index signal is already active. * Disk: Improved accuracy of RIOT interval timer. * Disk: Corrected FDC head load and initial DRQ timings for Write Track command. * Disk: Implemented FDC Write Track quirk for back-to-back CRC ($F7) tokens. * Disk: Fixed some 6809 coprocessor emulation bugs. * Disk: Corrected side 2 sector mappings for ATR8000, Percom, and XF551 full drive emulators. * Disk: Fixed case where drive timing could be disrupted after hitting a drive coprocessor breakpoint. * Disk: Seek sounds no longer overlap when disk access is accelerated. * Disk: Fixed crash when ejecting disk at specific point during disk read command. * Disk: FD1771 FDC now properly times out in two revolutions instead of five in 810 full drive mode. * Disk: Fixed bogus FDC interrupts from Force Interrupt commands. * Disk: Indus GT ignores ready status to match hardware. * Disk Explorer: Fixed a filename validation bug with DOS 2 disks where duplicate files could be written if the original filename had extra characters after the extension. * Disk Explorer: Modifying a mounted disk image now forces a disk change to flush caches on emulated full drives that do track buffering. * Display: Fixed an issue with color profiles having the wrong color matching setting when initially established. * Display: Fixed crash when pasting into enhanced text display in CIO mode. * Display: Typing in enhanced text display (CIO mode) now clears the attract mode counter. * Firmware: Fall back to next available firmware if default firmware for a type is removed. * Input: Character mappings in custom keyboard layouts didn't work for non-ASCII extended characters. * Input: Changes to custom keyboard layouts didn't take effect immediately. * PerfAnalyzer: Joystick state (PIA port A) is now captured in traces. * POKEY: Improved accuracy of two-tone mode timing at 1.79MHz. * Recorder: Fixed SAP type R initial silence detector checking AUDFx registers instead of AUDCx registers. * SaveStates: POKEY serial input state is now saved. * SCSI: Fixed BSY being asserted in selection phase even for non-existent devices. * Simulator: Improved accuracy of power-up values for POKEY and GTIA registers. * Simulator: Display message via placeholder ROM if kernel ROM file could not be loaded. * VBXE: Fixed a crash when toggling shared memory option. * VBXE: Fixed double correction of display with gamma or color correction options enabled. * VFS: Fixed zip/gz paths with non-ASCII characters not being encoded properly and getting dropped on restart.