Aira Force 0.8 released


Aira Force 0.8 brings source level debugging, improved emulation and many UI improvements.

Add Pointer Dialogue

Previously pointers could only be added on code lines. Now they can be added in data too.

Add labels at any address

An address input widget has been added to the Add Label popup. This allows labels to be added at any address. For example, a label can be added at an unreferenced data address.


Internal disassembler options

The internal instruction disassembler can be configured in the options.


Equivalent options are available when exporting disassembly. File > Export Disassembly...

Crash logs

If an internal error is encountered (assert or fatal error), a crash log file is written: AiraForceLog.txt

Please look at the last entry in this log when reporting errors. For example:

Version: 0.8.0
ASSERT:   lineNumber >= 1 
Message:  Line numbers are 1-indexed by convention
Function: SourceCodeWindow::GotoFileAndLineNumber 
File:     C:\dev\howprice\iragui\src\IraGui\Windows\SourceCodeWindow\SourceCodeWindow.cpp(536)

Separated debugger from analyser

The debugger has been split out of the analyser. Programs can now be debugged with analysis disabled, or enabled.


Source Level Debugging

For programs built with vasm or vlink, the debugger can load debug data to associate symbols and source code with the program addresses. Source level debugging is available for 68000 binaries built in 4 different ways:

  1. Assembled load module (vasm only)
  2. Assembled raw binary (vasm only)
  3. Linked load module
  4. Linked raw binary

Debug information is parsed from several sources: 

  • HUNK_DEBUG blocks
  • vasm list files
  • vlink map files
  • vlink line offsets files

Many thanks to Frank/phx for adding lineoffsets output to vlink, which allows debugging of linked raw binaries.

This video demonstrates the process:

68000 emulation improvements

The 68000 emulation in version 0.7 was designed to be just good enough to traverse the program flow. As a mid-term goal, I would like the tool to be able to actually start running programs. The first step was to improve the 68000 instruction emulation.

I have used the excellent 680x0 SingleStepTests by Tom Harte to test each instruction. This is a huge data set of before and after states for the CPU to test each instruction behaves as expected. The emulator is not currently cycle exact, so the tests did not make use of the timing data. This also means that the PC in the stack frame on address error can be incorrect.

but it's reasurring now to know that the 68000 emulator is much more trustworthy.

I was horrified by how many instruction bugs I had to fix. I had made silly mistakes in many common instruction such as multiply and shift. The tests run on each push to the main branch on GitHub.

Very basic Amiga hardware emulation

Chip, Fast and Slow RAM and ROM are now available and mapped.


With improved 68000 emulation I thought it might be nice to try to visualise the results. I implemented the bare minimum subset of Amiga hardware registers to generate a video display buffer at the end of the frame.

Full Changelog

  • Add: Add Pointer dialogue
  • Add: Crash log file AiraForceLog.txt written on internal error
  • Add: Syntax highlighting works with internally generated disassembly
  • Add: Source-level debugging of Amiga load modules
  • Add: Source-level debugging of raw binaries
  • Add: Source Code windows, with basic navigation features and Ctrl+G popup
  • Add: Debug Symbols window
  • Add: Debugger can be used independently of Analyser
  • Add: RAM reset behaviours: Leave, clear, randomise
  • Add: 68000 execption generation and processing
  • Add: 68000 interrupt support (not hooked up to Amiga yet sorry)
  • Add: Load Amiga ROM
  • Add: Amiga ROM overlay (OVL)
  • Add: Fast RAM, Slow RAM and ROM address ranges
  • Add: Very basic Amiga playfield hardware (DIWSTRT/STOP, BPLCON0, BPLxPT, COLORxx)
  • Add: End-of-frame Amiga video image generation
  • Add: Emulator video window displaying end-of-frame generated video image
  • Add: Latest vasm and vlink executables for all platforms
  • Add: "Select config TEXT area" to disassembly window context menu
  • Add: Amiga window link to hardware register docs
  • Improve: Labels can be added at any address
  • Improve: Disassembly export options (lowercase, formatting, export from RAM)
  • Improve: Status window displays binary diff count
  • Improve: Expose ira -compat=b and -compat=i options
  • Improve: Serialise find options
  • Improve: Analyser code region detection
  • Improve: 68000 instruction emulation (passes all 680x0 SingleStepTests)
  • Improve: 68000 emulator fetches directly from memory
  • Improve: Memory window shows all regions
  • Improve: Internal 68000/010 instruction disassembly
  • Improve: CPU Window UI improvements
  • Improve: Find searches source code
  • Improve: Logging of access to unimplemented hardware registers
  • Improve: Inform user when HUNK_OVERLAY encountered (not supported)
  • Fix: Pointers can be defined in data and immediate operands
  • Fix: Slowdown when there are many potential data actions
  • Fix: Disassembly Window scrolling crash
  • Fix: Offset jump tables when relocating ira config
  • Fix: Workaround label name generator crash caused by duplicate ira labels
  • Fix: Instruction Window branch destination calculation bug
  • Fix: Default window docking for windows with dynamic names
  • Fix: Amiga modules are debugged in user mode by default

Files

aira-force-win64.zip 3.1 MB
Version 0.8.0 77 days ago
aira-force-mac.dmg 3.8 MB
Version 0.8.0 77 days ago
aira-force-linux.tar.gz 3.1 MB
Version 0.8.0 77 days ago
aira-force-linux.deb 3.1 MB
Version 0.8.0 77 days ago
aira-force-raspberrypi.tar.gz 2.9 MB
Version 0.8.0 77 days ago
aira-force-win32.zip 2.7 MB
Version 0.8.0 77 days ago

Get Aira Force

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.