Skip to content

Release 3.0.0

Compare
Choose a tag to compare
@TollyH TollyH released this 08 Jan 23:17
· 312 commits to main since this release
ddaa47d

.NET 8 install required for the included executable

Additions:

  • C# interoperation: An extension set for calling external .NET methods has been introduced. External methods have read and write access to AssEmbly memory and registers.
  • Memory allocation: A build-in, optional memory allocator has been added. You do not need to use it to read/write to memory.
    • It supports the allocation, re-allocation, and freeing of memory regions with a given size.
    • Regions are guaranteed to never overlap, can persist for the entire lifetime of the program, and can be used to ensure that there is enough free memory for an operation.
    • Stack collision detection has been added in combination with memory allocation to detect situations where the stack has grown too large and collided with allocated heap memory. It can be disabled with the --unmapped-stack command line parameter.
  • Executable compression: Assembled executables can now be compressed with gzip by using the --compress command line parameter.
  • The debugger now has a new heap command, which displays current memory statistics as well as a diagram of allocated memory.
  • Numerous improvements to the debugger map command:
    • The colour key is now shown at both at the beginning and the end of the table.
    • There is now support for multi-coloured cells if multiple of the three registers point to the same address.
    • Unmapped memory is now highlighted in grey.
  • A label reference can now be used as the operand to the NUM assembler directive in order to insert the literal resolved address of a label into memory.
  • A new code suggestion has been added that discourages the use of AND when a move instruction can be used instead.
  • Additional cases have been added for the "Operation has no effect" suggestion.
  • The next instruction to execute is now printed after extra debug information in the debugger.
  • The default memory size has been increased to 8KB.

Fixes:

  • ADI files now correctly show the pre- and post-resolution paths for imported files.

Example program changes:

  • New example programs that demonstrate C# interoperation have been included.
  • The QOI example program has been modified to utilise the new memory allocation extension set.
  • Included solutions for some days of 2023's Advent of Code.
  • The solution to Day 1 of 2022's Advent of Code has been slightly simplified.
  • Comments that are no longer necessary due to the increased default memory size have been removed.

Internal changes:

  • The published executable is no longer built as self-contained.
  • The project has been upgraded to .NET 8.
  • Warnings are now treated as errors when publishing the application.
  • Most struct definitions have been moved to a separate file, along with a new Range struct designed for use with memory region tracking.
  • The Processor class now contains methods for memory region management (allocation, re-allocation, and freeing).
  • The test folder has been renamed from AssEmbly.Test to just Test.
  • The reference manual is now also compiled into a PDF.
  • The strict grammar definitions have been removed.

Documentation Errors

  • The first code example in the "Address" subsection of the "Operand Types" section should use MVB, not MVQ.