Altirra v2.70 test 20 [25.07.2015]
- XEP80: Fixed UART register emulation.
- XEP80: Attributes, split-screen, and vertical scrolling are now supported in pixel graphics mode.
The folks at ABBUC were kind enough to send me an XEP80 free of charge, and I've been spending time checking behaviors on it. Thanks to this, I've been able to verify that ALTXEP80.SYS from the Additions disk works on real hardware, as well as do a bunch of testing. Changes:
- Attributes are now supported in pixel graphics mode. This took me a couple of days to track down as I couldn't figure out why pixel graphics data was getting corrupted. If you've mucked around with the attribute latches, they need to be reset back to $FF before switching to graphics mode, or else you'll get stuff like double width and blink screwing up your graphics.
- Fixed UART reprogramming. It is possible to reprogram the XEP80's UART to receive at 31.5Kbaud instead of 15.7Kbaud, which speeds up communications a bit. (The xmit direction can also be set to 31.5KHz, but receiving this on the 6502 side is much more difficult.) Attached is a version of the ALTXEP80.SYS handler that reprograms the XEP80 to receive at 31.5Kbaud. Sadly, while 31.5Kbaud operation works on real hardware, I have not been able to get 63Kbaud operation to work. Not sure if this is a software problem or if the signal out the joystick port is just not clean enough for this high of a speed.
- Vertical scrolling and split-screen in pixel graphics mode are now supported -- the emulator now allows the HOME, BEGD, ENDD, and SROW registers to be reprogrammed.
- Added emulation for a couple of odd bugs, one being the row increment occurring mid-screen when using pixel graphics mode with the ATASCII character ROMs enabled, and another being an apparent bug with split-screen repeating the first row after the split.
- Some cursor behavior bugs have been fixed. In particular, the cursor now sweeps properly on screen when you hit ENTER and the line is read in.
The XEP80 is an awkward design, but it's a shame that the stock firmware and handler software underutilize the hardware capabilities. Also attached is a demo program that uses 31.5Kbaud communication, vertical scrolling and split-screen in pixel graphics mode to do a simple River Raid-like scrolling display. Sadly, this takes so much CPU time that actually putting sprites on screen is likely non-viable, so actually making a game with soft-sprites will be left as an exercise for the reader.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 40
Altirra v2.70 test 40 [01.12.2015]
- UI: Portable mode now stores relative paths for paths above the program directory on the same drive root.
- 65C816: Fixed WAI releasing execution too early on IRQs in high speed mode.
Another attempted fix for runtime stack issue in ATBasic, and fix for one color clock glitch with mid-screen GTIA mode 10 switch that affected Fractalus.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 36
Altirra v2.70 test 36 [22.11.2015]
Finished up this round of work on the profiler. It now has some documentation in the help file, fixed a bug that caused instruction counts to be wrong in multi-frame profiles, and expanded the PC triggering modes. You can now set an end PC address as well as a start PC address, or just have the profiler end the frame when the current function exits. For instance, you can profile the VBI handler by using a start PC address expression of "dw vvblki" and stopping after the function. Frames can also be triggered via .profile_start/endframe commands in the debugger.
The help file also has documentation on how to set up networking for DragonCart emulation. I've attached the page in case any Linux gurus could chime in about the VXLAN tunnel setup instructions, or just have a laugh at how bad the instructions are. There's still a lot of devices undocumented, but documentation is so much work....
ATBasic has been updated to 1.47. I added a guard patch in case AFP decides to return a bogus number (yay), and moved the point where the runtime stack is fixed/pinned from start of execution to first NEXT/RETURN. This should fix the case that StefanD hit where immediate mode statements couldn't be run because the interpreter kept throwing GOSUB-gone errors.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 35
Altirra v2.70 test 35 [18.11.2015]
- Profiler: Instruction-level data is now recorded even in function mode.
- Profiler: Frame triggers can now be set to record multiple frames.
Couple of additions to the profiler. It now handles high DPI better, and has support for setting triggers for denoting frame or main loop tick boundaries. This makes it easier to profile closely around temporary slowdowns and hitches. The frames are shown in a graph that allows selecting single frames or a range of frames by dragging.
Function mode now also collects instruction data so that the detailed view shows instruction samples instead of function samples. At some point the plan is to merge function and instruction modes and just have different views for the same run.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 34
Altirra v2.70 test 34 [04.11.2015]
- Debugger: Added @frame, @clk, and @cclk expression psuedovariables.
- Debugger: Fixed assembler not accepting TXA instruction.
- Debugger: Assembler no longer uses the debugger's numeric base setting and always assumes decimal unless $ is prefixed before a number.
- UI: Fixed firmware options not refreshing consistently in dialog.
- TXA assembler bug is now fixed.
- Firmware options refreshing bug is now fixed.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 33
Altirra v2.70 test 33 [24.10.2015]
- Debugger: Added %S format to .printf for high byte terminated strings.
- Profiler: Added Basic block profiling mode.
- Profiler: Added performance counter support.
- AltirraOS: Caps Lock now toggles in XL/XE mode.
- Cartridge: Fixed random crash with Atrax SDX cartridge types.
- Found an issue in the Atrax SDX cartridge handling that could cause a crash.
- AltirraOS XL/XE now implements Caps toggle.
- .printf now supports %S for high byte terminated strings.
- Added basic block and performance counter modes to profiler. Basic block mode groups instructions between branches and is a bit more granular than function mode. Performance counters can identify branches that should be reversed or instructions that cross pages frequently.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 32
Altirra v2.70 test 32 [10.10.2015]
- Simulator: Emulation is no longer paused while menus are open.
- Fix for the stuck key problem -- was due to a WM_KEYDOWN/WM_CHAR ordering problem that only showed up on some system configurations. Thanks to flashjazzcat for the in-depth testing. The raw key mode has also been changed so that only the last key registered continues the repeat instead of any key.
- SAP type D playback is now supported. Matching NTSC files to NTSC systems or PAL-to-PAL is recommended, but the player will attempt to play mismatched files at the correct rate via a DLI hack. This may or may not work depending on whether the player uses VCOUNT and the PLAYER hook.
- The SAP type R player now displays volume bars per channel.
- There is now an option on the Tools menu to convert SAP files to Atari executables. The emulator does this internally when you boot a SAP file; this just lets you get at the executable directly. Bit of a warning: the executables require a MEMLO of $0800, so you'll need to boot them from a game DOS or similarly capable loader (e.g. AtariMax cartridge). The players autodetect NTSC/PAL ANTIC.
- Added a hack to keep the emulation running while menus are displayed. We'll see how this works.
One gotcha on SAP files -- I am starting to find bugs in some of the SAP players. The Pitfall II player, for instance, reads uninitialized memory. Unfortunately, the byte it reads is SAVMSC+1, and it crashes because this byte is >= $0A when booting from the OS. This is due to the difference between the minimal Atari-like environment used by SAP players and the full environment when booting on real hardware.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 31
Altirra v2.70 test 31 [04.10.2015]
- HLE: Added player for some SAP type B/C/R files.
- Recorder: Added support for recording SAP type D files.
- Simulation: Added emulation of floating I/O memory bus on 800 hardware.
- test 31: Fixes a couple of crash bugs in the floating I/O bus feature, adds SAP type R recording support, and SAP type B/C/R playback. Too lazy to do type D at the moment as it requires turning off the OS ROM. This also prevents some type B/C files from loading when they try loading on top of where the player or OS lies, but many work.
- test 30: Removes the non-functional green/blue parameters in the colors dialog and adds support for emulating the floating bus condition on the second I/O memory bus on the Atari 800. This is necessary to run the original version of WarGames on 800 hardware due to a rather nasty hardware check. Thanks to Farb for the test case. Emulating this is rather expensive, so it is opt-in via System > Memory Config > Floating I/O Bus. This also makes PEEK(49152) read the correct values in BASIC.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 29
Altirra v2.70 test 29 [30.09.2015]
- Audio: Sound output is auto-switched to 48KHz to reduce CPU usage if Windows is mixing at that rate.
- Debugger: Execution history now shows high level emulation events.
- Debugger: Added sw (search words), sa (search ATASCII), and si (search INTERNAL).
- Input: Keyboard mapping is now customizable.
- ANTIC: Fix incorrect internal state after warm reset during WSYNC wait.
- AltirraOS: XL/XE version now supports KEYREP.
- ATBasic: Fixed bug with terminating EOLs being left in code if a warm reset happened during a filename-based I/O statement.
- ATBasic: Fixed CLOAD/CSAVE not setting IRG mode consistently.
- Debugger: Fixed length (Lxxx) arguments not accepting 10000 for $10000 bytes.
- Debugger: Fixed crash with malformed read/write access range checks in breakpoint conditional expressions.
- Disk: Improved accurate sector timing values for enhanced density disks.
- Disk Explorer: Empty filenames are no longer allowed.
- POKEY: Full keyboard scan emulation is now supported, including phantom key and debounce-off effects.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 23
Altirra v2.70 test 23 [28.08.2015]
- Problem: I tested today 2.70-test22 with new CONTIKI and got an Altirra crash.
→ NOWSZY [ATARI] Altirra x86 i x64 2.70 test 22
Altirra v2.70 test 22 [25.08.2015]
- Input: Because some broken axis mappings have been corrected, hand-edited input maps may need to be fixed up.
- Input: Dead zones and curves are now adjustable for game controllers.
- Debugger: Up/down keys now work better in History when navigating search results.
- Debugger: Fixed time wrapping bug in .pokey deferred timer reporting.
- Input: Fixed inconsistent mappings between analog/digital interpretations of axes and between DirectInput and XInput.
- Network: Fixed protocol handling bugs in emulated ARP and DHCP layers.
- Network: Add support for tunneling over the VXLAN protocol.
Well, I sat down to play a bit of Kaboom!, and found that it was basically unplayable with an Xbox 360 controller... so some tweaks to the input code were required. After some work, I still suck at Kaboom!, but the controller input mappings are now straightened out and more tunable.
There is now a menu item Input > Input Setup that brings up a dialog where game controller input can be tuned. The dead zones for the 2D and 1D axes can be set, and more importantly, the dead zones can be set differently for analog input vs. digital input. This is useful because dead zones usually need to be bigger when mapping a stick to 4-way or 8-way D-pad input vs. using it for analog input. For analog mappings, there is now a "stiffness" option that allows a power curve to be applied, which can make fine control easier. For digital mappings, the conversion now uses an octant mapping, which allows a better hit zone for cardinal directions and directly going to diagonals.
There is no help for the dialog yet, so here's a cheat sheet:
The four input windows displayed are: left stick (axes 1-2), left trigger (axis 3), right stick (axes 4-5), right trigger (axis 6).
The black crosshair or line is the raw position.
The small dot is the adjusted position used for analog mappings, e.g. paddles. The analog dead zone is displayed as a gray disc. Adjust this to a reasonably low level that doesn't cause the game control to drift annoyingly when the stick is in the center. You'll notice that the dot is a bit off from the crosshair when the dead zone is non-zero -- this is intentional so that input ramps up smoothly from zero at the edge of the dead zone.
The red arrows are the directions triggered for digital mappings, e.g. joysticks. The digital dead zone (threshold) is the red circle. Adjust this up if the digital input is too sensitive or drifts at center; adjust it down if it is not responsive enough.
A few bugs in the mappings were also corrected -- IIRC, DirectInput had analog mappings upside down from digital mappings for analog sticks, and XInput had the triggers on different axis numbers for digital and analog mappings. This became pretty obvious with the visualization. You may need to adjust your input maps as a result. If you run into problems, let me know the mappings you're having problems with, i.e. Joystick, Up -> Left Stick Up, and whether you're using the XInput (Xbox 360) controller or not.
Other changes in this version:
Debugger: Improved keyboard navigation in the History pane when browsing search results.
DragonCart: Added support for a forwarded incoming UDP/TCP port pair from the host to the emulation network, fixed bugs in DHCP and ARP handling (Contiki IPCONFIG now works), fixed a number of bugs in the TCP stack, and added support for VXLAN tunneling. VXLAN tunneling allows the emulator to connect its internal emulation net to other systems that support the VXLAN protocol, which is essentially Ethernet over UDP. Linux and *BSD systems can connect to the emulation network this way if you futz with their firewall configurations, which allows the emulation to communicate with a real TCP/IP stack, and also allows the emulation network to be monitored with Wireshark.