Altirra 4.20 Beta VI (6) 05/03/2023
- Additions: Added PHLOAD.COM to trigger peripheral handler loads via type 4 polling.
- Debugger: bta (set tracepoint on access) can now supply a default trace message.
- Input: Pad input area can now be moved and resized via Configure HUD.
- System: Added 1400XL and 1450XLD emulation support (currently only minimal V:/T: support).
- AltirraOS: Fixed incorrect MEMLO adjustment when loading peripheral handlers through CIO via type 4 poll.
- CPU: 65C816 PLB and PLD instructions were not setting NZ flags.
- CPU: 65C816 PHP instruction could write bits 4/5 as zero after re-entering emulation mode from native mode with MX bits cleared.
- Debugger: Fixed Step Over command not working above bank 0.
- Devices: Fixed some stack wrapping bugs with Veronica's 65C816 CPU.
- Disk: Fixed XF551 full drive emulation sometimes not handling write protect state properly.
- Disk: Reinterleave command wasn't marking the disk as modified.
- 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.
First thing to say about 1400XL/1450XLD: voice and telecomm does not work currently. The handlers will initialize, but V: does not actually play any voice and T: cannot actually dial out. I tried hooking up V: to the system speech API, but that is not amenable to just-in-time phoneme delivery. T: requires more research into the 1400XL's audio circuits as there are some unusual control bits that affect the audio routing. There is one new handler ROM for the V: and T: devices that are automatically added in 1400XL mode.
The 1400XL OS is not needed to use the 1400XL/1450XLD. The 1400XL is essentially just an 800XL with memory mapped at $D600-D7FF and two built-in PBI devices (V:/T:), and the regular XL/XE OS is perfectly capable of driving all of the new devices; despite some of the 1400XL OS revisions having reference to separate internal device PBI registers, the known handler ROMs are designed to work with standard $D1FF access. The 1400XL OS is rather underwhelming. The initial version has almost no real differences from the XL/XE version 2 OS that it is chronologically closest to, but is incompatible with a lot of software because of small changes that shift almost all of the routines in the $Cxxx region by 2-6 bytes, and an SIO change that also shifts some of the routines in the main EF region. The silliest changes are due to the OS having been reassembled by a newer assembler that fixed some instructions being unnecessarily assembled with absolute addressing mode instead of zero page when accessing page zero locations, e.g. STA CRITIC changing from 8D 42 00 -> 85 42. Reverting back to the rev. 2 OS for the remaining products was very much the right move.
The parallel disk controller is more interesting. In order to use it, you need to manually add the 1450XLD controller device, of which there are three versions: standard 1450XLD with real handler but simulated controller, 1450XLD with real handler and real controller (full emulation), and 1450XLD "TONG" with real handler and real controller (full emulation). The PBI handler ROMs are cross-compatible but the TONG and non-TONG controller ROMs are not, the TONG firmware will not work on the non-TONG hardware or vice-versa. Furthermore, the TONG controller firmware that was posted on the Atari History Museum site is NOT compatible with the TONG schematic that was posted with it; I had to reverse engineer the changes to the circuits from the 8048 disassembly. When the 1450XLD device is active, the parallel disk controller will take over D1:. It also tries to shift the SIO drives, which will not currently work as in the emulator they will fight over the D1: disk interface.
The design of the parallel disk controller is odd. It is essentially the SIO protocol redirected over a PBI interface, with regular command frames and data frames. This includes a bit of silliness like the SIO checksums still being computed and sent. The daughterboard version of the disk controller is quite underwhelming -- despite having a double-density controller and 256 bytes of RAM, it only implements single and enhanced density and the basic 1050 command set. The data transfer protocol is slow for a parallel interface due to handshaking, but it's still a bit faster than SIO divisor 0. The sad part is that despite the disk controller being fast enough to read at least 5:1 high-speed interleaved disks, it doesn't support formatting with a high-speed skew. Since the controller also doesn't have enough memory to do track buffering, this means that in most cases it is no faster than a 1050. Also strange is that despite the 1050 being well-established when this was made, the density reporting is incompatible, with medium density being reported in bit 5 instead of bit 7. The PBI handler ROM is pretty buggy, with the earliest Revision E handler [CRC32 E8F9C8A7] being the one that boots most reliably with the commonly available 1450XLD controller. It will actually boot many copy protected disks, but compatibility is hindered by the handler not returning sector data on a read error. Holding the SELECT button on start tells the handler to slow down disk reads to closer to 810/1050 timing, if you happen to have a faster interleaved disk.
The "TONG" controller is more evolved. Despite the TONG schematic showing a compatible circuit to the daughterboard, the controller ROM that's been published for it does not work on it -- it requires different chip select bits for the FDC and RAM. The controller firmware is quite a bit improved, with support for double-sided double density, 1050-compatible density reporting, fixed density detection, sector number validation, faster format, faster transfers, and more reliable ATTN/BUSY protocol handling. Of the three handler ROMs that work with it, the "U6" ROM [CRC32 29359910] appears to be the latest. However, I haven't been able to get the controller to boot double density. There is, unfortunately, a major bug in the TONG controller that wasn't in the earlier version: it always returns the current type I FDC status from the Get Status command instead of the FDC status from the last read, which alone breaks the majority of protected disks. It also still doesn't support a high-speed skew format, which is a shame given a disk interface that could out-do any SIO high-speed disk drive.
The 1450XLD controller shares similarities with the XF551, which is also 8048 based. It actually has a faster CPU (10MHz vs. 8.3MHz) and more RAM (256b internal + 256b external vs. just 256b internal), and runs at 288 RPM instead of 300 RPM. However, the XF551 was definitely more polished, supporting the PERCOM block commands, being more compatible, and being much more tightly coded. The two also have incompatible DSDD formats. Both write to side 2 with reversed tracks, but the XF551 also reverses the sector order.
Altirra 4.20 Beta V (5) 22/02/2023
Starblade (1987, Activision)
- Debugger: Added explicit option in the disassembly window for whether the current D register state affects symbol lookup for direct page addressing modes.
- Display: Added support for main display pan and zoom.
- Input: Added support for Chalk Board PowerPad controller.
- Input: Mouse wheel can now be bound as an input.
- Input: Added an option to show pointer location when driving a tablet, pad, or light pen/gun with a non-mouse input.
- Debugger: Symbol lookup is now suppressed for (dp), (dp,X), and (dp),Y addressing modes with D != 0 like with other direct page addressing modes.
- 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.
The PowerPad controller is an interesting controller. It is natively a multi-touch controller, which poses challenges for emulating it with standard input methods. Micro Illustrator is particularly unusable without it as it requires a minimum of two touches to use, one to set the current position and another to activate. To support this, the emulator supports pre-setting a secondary touch and activating it via a second button. With the default mouse-mapped input map, this is done by setting the contact point and radius with the middle mouse button and then activating it with the right mouse button. With the default gamepad mapping, up to four multitouch points are supported, with those points changed when pressing the appropriate button with left trigger (LT) held. Right trigger (RT) is mapped the same as the primary touch button for convenience.
The timing of PowerPad reads is currently untuned and currently instant, as I have no information as to how long the matrix scans actually take. The delays that appear are in the software, to avoid running afoul of the impedance-related signal limits on the controller port. A quirk of the PowerPad is that reading the pad slows down as the contact areas grow bigger, since it takes longer for the scan to return every individual contact switch to the computer. Every point is currently returned to the computer, as there isn't a mention in the docs of point filtering/coalescing. This means that in Micro Illustrator, drawing will be more responsive as the touch point is shrunk (mouse wheel). The default radius is about a finger width.
There are a few additional changes that I'm considering that haven't made it in yet. One is altering the default pad area to be square and configurable. Currently it is always mapped to the window, which is often non-square -- thus the contact oval that you will see right now until the window is adjusted. Combined with the previous changes to allow the display to be arbitrarily positioned, this would allow for more natural arrangement of the pad area vs. the display. The other change is support for actual multi-touch input for those with touch screens. Altirra currently has multi-touch support, but it isn't plumbed all the way through to be usable for PowerPad emulation yet.
Altirra 4.20 Beta IV (4) 19/02/2023
- Debugger: PEI (dp) instruction no longer shows indirect data in disassembly.
- Another attempt to fix the downmix setting. It now also disables in mono.
- PEI (dp) no longer shows deref value.
Altirra 4.20 Beta III (3) 19/02/2023
- Display: Added support for main display pan and zoom.
- Audio: Fix downmix setting not saving.
- 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.
Display pan/zoom lets you pan and zoom the display to any desired placement. It's independent of the existing sizing settings, but lets you manually offset the screen or zoom in very close on a selected part. It can be accessed either from View > View Frame > Pan/Zoom Tool, or by Alt+MMB drag for pan and Alt+Wheel for zoom. The direct controls are on Alt to prevent accidental zoom, especially with a trackpad.
Altirra 4.20 Beta II (2) 5/02/2023
- Command Line: Switches are no longer allowed at the end of arguments, e.g. disk.atr/f or /f/nosi. Switches must now be separate arguments.
- Save States: R-Time 8, XEP80, Black Box, MIO, Ultimate1MB, SIDE/2/3, and MyIDE[-II] are now included in save states.
- VFS: Added support for reading from .zip files that use Enhanced Deflate compression.
- VFS: Add special:// protocol to access specific images.
- Devices: Fixed sporadic initial interrupt state issue with MIO.
- 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://basic.car 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.
Altirra 4.20 Beta I (1) 29/01/2023
- Cartridge: Added Williams 16K cartridge type.
- Cassette: Load Data as Audio option now supports raw FSK and PWM data blocks in .cas files.
- Debugger: Symbols escaped with '#' prefix can now include @ in their name.
- Debugger: .vbxe_traceblits command now has a compact mode.
- Debugger: .vbxe_bl command now has a compact mode and can dump a blit list at an arbitrary address.
- Save States: Devices can now opt-in to save state support.
- Save States: R-Time 8, XEP80, Black Box, Ultimate1MB, SIDE/2/3, and MyIDE[-II] are now included in save states.
- Save States: CPU mode, 65C816 high memory, and Axlon memory are now included in save states.
- UI: Added /registeruserfileassocs, /registersysfileassocs, and /unregisterfileassocs for silent registration/unregistration of file type associations.
- Cartridge: Phoenix and Blizzard cartridge types now also react to CCTL reads as well as writes.
- Debugger: Zero page symbols were not being loaded from CC65 symbols.
- Devices: R-Time 8 is now reset on a cold reset.
- Devices: SIDE 2 now returns floating bus data instead of $FF when reading from deselected CF card.
- Input: Fixed paddles not responding when driven in absolute mode from a digital input (regression since 4.10).
- Save States: Fixed POKEY having keys stuck down after loading a save state.
- Save States: Fixed last 64K of extended memory not being saved properly in 128K and 320K memory modes.
- 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.