top of page
loading_reduced.jpg

4.30-test22 / 15-09-2024

Altirra

Accuracy

Performance

Features

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

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

--4.30-test22--

  • Implemented port translation setting for the generic Printer (P:) device when its printer port is connected.

  • Fixed bug where internal BASIC could be enabled on the 1200XL.

  • Fixed bug with ATX double density images where the DRQ bit would get left on sectors.

  • ATX double density support is now enabled by default.

  • PDF printer output is now optimized using custom TrueType fonts.



--4.30-test21--

  • Added 825 80-column printer emulation.

  • Added 850 printer port.

  • Added PDF export from graphical printer output.



--4.30-test20--

  • AltirraOS 3.42: P: device in XL/XE/XEGS build now supports different printer device units, and fixed invalid orientation values being passed to the printer.

  • ANTIC: Added emulation of DMACTL-based abnormal DMA condition.

  • ATBasic 1.59: Fixed AUX2 not being set up for print I/O, which also affects printer orientation.

  • Cassette: Fixed framing errors not being reported.

  • Input: Holding down Alt between pressing and releasing an input key no longer results in that input getting stuck on.

  • Printer: Printer outputs are now held separately from the printer pane.

  • Simulator: Added support for rewind recording.



--4.30-test19--

  • Fixed P/M graphics sometimes not rendering properly when loading a save state.

  • Debugger: DISKEMU and FDC channels are now disabled by default.

  • Fixed DCart keyhole access when flash is in autoselect mode.

  • Added adjustable PAL phase (high artifacting mode only).

  • Reworked bloom algorithm.



--4.30-test18--

  • Fixed J(Atari)Cart banking crash with <128K images.

  • Added banked debugging support for J(Atari)Cart.



--4.30-test17--

Adds support for J(atari)Cart and DCart cartridge types.


All of the new cartridge types of 128K or above are flashable. The flash configuration is not well defined for these types, so they have been mapped as follows:

  • J(atari)Cart 128K: 39SF010 on 256K board (6 bit banking)

  • J(atari)Cart 256K: 39SF020 on 256K board (6 bit banking)

  • J(atari)Cart 512K: 39SF040 + empty socket on 1MB board (8 bit banking)

  • J(atari)Cart 1MB: 2 x 39SF040 on 1MB board (8 bit banking)

  • DCart: 39SF040



--4.30-test16--

  • 32-in-1 fixed to properly check Select button and to work with the Esc use-current menu option.

  • Block broken drag-and-drop from Explorer 7z/rar archives.

  • SIO/CIO acceleration is now better at checking the Break key.

  • Rewrote enhanced CIO text mode support.



--4.30-test15--

  • Added sound samples for 1025 and 1029 printers.

  • Printer graphics window sends focus back to display on Esc and supports touch scrolling.

  • Added Remove and Settings to device tree context menu.

  • Added Turbo D turbo tape mode support.

  • Debugger: .diskdumpsec command now takes -I to display INTERNAL characters.

  • Fixed a crash when removing devices when an accelerated CIO operation is in progress.

1025 and 1029 now make some representative sounds, particularly the 1029, thanks to rather clean audio from the atarionline.pl video. 1025 has line feed sound, but not 1029 as I couldn't get a clean enough sample yet. The pin sound is still a bit quiet, but that might have to wait for the audio pipeline to be reconfigured, as all sound sample playback is currently behind the second high-pass filter.

Turbo D support is currently untested, I verified that the PORTA bit is responding, but don't have a loader to test it.



--4.30-test14--

  • Added 1029 printer standard emulation.

  • 820/1025/1029 standard printer emulations now support graphics output, accurate timing, and sound modes.

  • P: CIO patch acceleration can now be interrupted with the Break key.

  • Fixed a crash issue with the File Writer when attached to a printer output.



--4.30-test13--

  • Continuing the printer arc, adds Atari 1029 printer emulation.

  • I thought the 1029 would be easy to add, just staple a 1024x4 static RAM on the side of an 8048... ha ha, not. The 1029 uses a strange and borderline nutty "Unihammer" print mechanism that uses a single print hammer to print all 7 dots of a column, selected by a rapidly moving set of bumps on the platen -- fast enough for a platen bump to sweep down for each of the 5 columns of each character. This was a pain to figure out since the 1029 Service Manual is not readily available, so it had to be pieced together from clues from the CBM MPS-801 and Amstrad DMP1, which use mechanisms that are similar but not exactly the same. I have no idea how this mechanism works without sanding through the paper and causing a fire, but somehow it does.

  • Anyway, it does work now. The 1029 doesn't have as much resolution as the 1025 and is lacking some features, such as condensed mode. However, it has an underlining mode, which interestingly is done by re-printing the underline in a second pass on the same line. The most interesting feature, though, is the bitmapped graphics mode. The main reason the 1029 is able to do this is that it has an additional 1024 x 4-bit static memory to buffer 480 bytes. Two programs I found that supported the Atari 1029 are 10-Print, which lets you print regular an



--4.30-test12--

  • Adds support for Atari 1025 80-Column Printer full emulation.

  • Amusingly, just about every printer that Atari made at the time seemed to use a different microcontroller, probably because of so many of the designs being licensed. The 1025 is based on an 8051, which is a refined version of the 8048 architecture. It's got its own oddities, but you can definitely see where they improved on the deficiencies of MCS-48. Emulating that didn't take much more than a bit of elbow grease to knock out the CPU core and disassembler.

  • What took a while to figure out was the bizarre spacing on the printing output. It was a mistake to treat the space (head) motor like a stepper motor -- couldn't figure out why the printer kept trying to print multiple dot patterns at the same steps and the output looked really bad. Turns out the space motor is very much not a stepper motor and the 1025 relies on the motor speed being smooth enough to interpolate positions by timing the print head actuation between phases. At 5/10 CPI, the firmware runs the motor in 4 steps, turning on adjacent phases at a time and printing in between phases. At 16.5 CPI, it alternates between single phase and double phase to get slower operation, and takes the uneven force into account when timing head activation. Altirra emulates ideal speeds based on firmware timing, but if you look at some sample real printouts like in the Service Manual, you can see slight unevenness between even/odd columns due to this effect.

  • The other oddity of the 1025, which also took a while to figure out, is why the ESCape codes at the end of the manual only stick if you OPEN the P: device instead of doing an LPRINT to it in BASIC. The manual doesn't mention that the 1025 resets its internal state whenever the P: device is reopened, by detecting the Status command that the P: handler issues. As a result, any changes to DPI, width, line spacing, character set, etc. all get reverted at the end of the line if you use LPRINT. I've never seen an SIO device before that had a side effect to the Status command, but here you go. This undocumented behavior is now also implemented in the standard 1025 emulation.

  • Finally, when European characters are disabled, the 1025 blanks international characters in the printable range, but drops control characters. This is also now implemented in the standard emulation.

  • The 1025 is not a very fast printer, and since it prints unidirectionally, takes a while to bring the head from the end of the line back to home position. This is hard to tell in the emulator since no head movement sound is played; I'll have to see if I can find one to sample or come up with something reasonable.



--4.30-test11--

  • Adds emulation support for the 820 and 1025 printers. Previously, there was only a single HLE printer device, which supported a general feature set interpreting incoming characters at ATASCII. The 820 and 1025 devices emulate the specific character sets supported by those printers, which in the case of 820 is a subset of ASCII and the 1025 is the international ATASCII character set. The Printer Output pane now maps the special characters to Unicode. The unique Sideways mode of the 820 is also supported, though not being able to actually rotate the characters, it at least renders them backwards as the 820 does. 1025 control codes are supported, though some of them like line spacing are ignored.

  • Also added is low-level emulation of the 820, running the actual 6507-based firmware. This includes rasterization of the actual dot matrix output:



--4.30-test10--

  • Added 65C816 23x multiplier option (41.16MHz).

  • VBXE NTSC vertical offset is now enabled by default.

  • Fixed 8048 timer handling bug that was preventing 1450XLD parallel disk controller from turning off drive motor.



--4.30-test9--

  • Added PAL Pole Position colors to colors dialog.

  • Reworked monochrome color palette to generate brighter colors through gamut clipping.

  • Added support for monochrome monitor persistence.

  • Added parallel to serial adapter device.



--4.30-test8--

  • Debugger: Added SIOREPLY logging channel.

  • Devices: Added support for external audio test in the SuperSALT test assembly.

  • ANTIC: Fixed virtual DMA cycle data when overlapping refresh on a system with data bus pull-ups.

  • UI: Window caption is less spastic in turbo.

  • Display: Added color correction modes for targeting displays that use pure 2.2/2.4 gamma instead of sRGB.

  • Display: Fixed incorrect gamma in some cases with HDR or Adobe RGB.

  • Disk: The "Show disk image file" option now works with images mounted from within .zip files.

  • PerfAnalyzer: Can now import monitor traces from Atari800 5.2.0.



--4.30-test7--

  • 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.



--4.30-test6--

  • 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.



--4.30-test5--

  • 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.



--4.30-test4--

  • 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.



--4.30-test3--

  • 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.



--4.30-test2--

  • 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.



--4.30-test1--

  • 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.


Show Previous Changes


New test version; old stuff uneeded... 

bottom of page