4.30-test7 / 19-02-2024
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
Fixed an crosstalk issue between input ports 1/2 and 3/4.
Fixed registration of file types for the current user only and added support for more direct entry to the default settings page for the program (Windows 11 only).
Tweaked the inactive selection colors in dark theme.
Super Archiver full emulation now supports slow disk speed.
Added initial BitWriter emulation.
The BitWriter emulation is currently a bit fragile, it relies on the emulator to render the track and this is difficult with some of the ways that protections interleave sectors. There are some problems with the way that the BitWriter software works that makes it a bit unreliable even for plain unprotected disks, and I haven't figured out how to improve it yet. The BitWriter itself is fairly simple, it consists of a 6520/6821 PIA, 8K static RAM, a shift register, an up/down address counter, and a 4us clock divider.
Writing is relatively simple. The BitWriter, when enabled, bypasses the FDC and shifts raw bits out from RAM to the drive. It can only do FM (single density) as its clock divider is hardcoded to a 4us bit cell and it doesn't have enough RAM to buffer a raw MFM track. The hardware automatically drives the shift register from the RAM, so all the firmware needs to do is upload to the RAM and trigger the write. The BitWriter RAM is not directly accessible, however, and can only be accessed through the PIA and by clearing, incrementing, or decrementing the counter. The way that the entire 8K RAM has to be accessed is goofy, it requires the firmware to manually toggle the counter clock 16 times, which is very slow. Software must also encode data into FM before writing, and this also requires a bit reversal since for some reason the hardware shifts LSB first. The BitWriter software does this on the computer, so about 6.5KB must be transferred over the SIO bus per track written, which is also not fast. But otherwise, the BitWriter can basically write any flux pattern with a fixed clock.
Reading is where it gets ugly. The BitWriter has no support at all for reading, so this is done through the FDC's Read Track command, with the BitWriter only being used for track buffer RAM. The Read Track command has a number of known problems due to the inability to identify address marks, which are simply returned in-band with other plain data bytes. This means that the software has to guess where the address marks are, and its heuristics for doing this are very weak. This means that it commonly identifies bogus address marks and writes tracks with bogus IDAMs in the middle of sectors. This is mostly harmless, but it's a mystery why it doesn't do basic validation like checking if the track and sector number are remotely valid. It also seems to have trouble with identify the wrap point for the track and will occasionally drop a sector -- from what I can tell it simply checks for about 140 bytes to match, which isn't enough with a blank sector in the vicinity.
As part of this work, the Read Track command is now implemented in the FDC for all full drive emulators. The track rendering routine is an improved version of the one that was originally put in for the 815 and can deal with some quirks, but can fail when sectors overlap. I've found that some ATX images also have coarse and inaccurate sector timings, so the track renderer will attempt to vary gap III and shift sectors to fix this.
Debugger: Fixed font updates on undocked panes.
Debugger: Memory window now highlights location in both sections.
IDE: Fixed Read Verify command.
Fixed incorrect 5200 floating bus and XEGS internal BASIC settings.
Added a cvar to apply a one-line vertical offset to the VBXE XDL in NTSC: devices.vbxe.ntsc_vertical_offset. It delays the XDL start from line 8 to line 9. This is disabled by default for now until we get more confirmation in the other thread.
Fixed LDA (zp) instruction in 65C02 mode only.
VBXE no longer resets overlay and attribute map addressing on vertical blank.
Debugger: Added .vbxe_xdlhistory command.
Debugger: Expanded Ctrl+Alt+click information. It now shows exact byte address at point, current value of that address (best effort), and also shows XDL and attribute map information for VBXE.
Fix for BRK flags push in 65C816 native mode (attempt 2).
Debugger register (r) command can now set full 16-bit S register in native mode.
Fixed STA (zp) instruction being broken only in 65C02 mode.
Added video deinterlacing option.
Workaround for empty label in Windows 11 taskbar (which is broken AF).
Fixed a crash when loading some raw audio tapes.
Tweaked ATX density detection to prevent false 1050 Duplicator DD detection with ED disks that have only boot sectors on track 0.
The deinterlacer is just a very simple auto-switch between bob and weave for areas of the screen based on a motion mask, no fancy ELA or mocomp. The effect is similar to what you see from some TVs that don't have true support for noninterlaced video and force-interlace the Atari's output.
Fixed crash with some error dialogs.
Added support for forcing the program to performance or efficiency cores.
Added tool in the keyboard customization and shortcut dialogs to scan for global hotkeys.
The performance/efficiency core selection will only work if you have a CPU with hybrid CPU cores. YMMV; it has some serious stuttering problems on my x64 device but no issues on the ARM64. It is the same as forcing CPU affinity, as the CPU sets API turned out to be ineffective (as in, it did absolutely nothing).
Rant about global hotkeys: It seems that almost any program these days feels entitled to commandeer random global keyboard shortcuts without warning, messing up other programs. The hall of shame includes: Macrium Reflect (Ctrl+Alt+M), Alienware Command Center (Ctrl+Shift+Y), and the winner, Intel Arc Control Panel with the ridiculous and unchangeable Alt+I and Alt+O keys. Some of these programs also fail to unregister global hotkeys even if you've disabled them in the UI, which leaves the corresponding key shortcuts simply inexplicably broken. There is also no way built into Windows to tell that this is happening. So now Altirra can tell you if another program is doing this.
CPU: Fixed BRK instruction pushing flags to wrong page in 65C816 mode with relocated stack.
Devices: Added Microbits MPP-1000E modem.
UI: Improved Unicode support in error messages.
UI: Generic dialogs can now be closed by Esc key even when there is no Cancel button.
UI: Added word boundary support to screen reader provider.
UI: Improved screen reader output for generic dialogs.
Cassette: Added Ogg Vorbis decoding support.
Cassette: Added support for paired .data.cas+.audio.ogg files for more compact tape storage.
Debugger: Added keyboard shortcuts to memory window.
Printer: ATASCII special characters are now converted to Unicode equivalents.
Tape Editor: Added Select All (Ctrl+A) and Deselect (Ctrl+Shift+A).
VFS: Improved handling of Unicode filenames within .zip archives.
New test version; old stuff uneeded...