Skip to content

Latest commit

 

History

History
134 lines (122 loc) · 6.96 KB

CHANGELOG.md

File metadata and controls

134 lines (122 loc) · 6.96 KB

Changelog

0.13.1

  • Adjusted the assembly runtime code to resolve a bug that occurred on real hardware but not in emulation. The change was to use the System mode stack instead of the IRQ mode stack when calling the user code's assembly handler. Exactly why this previously caused a problem with actual hardware is unknown, but it did, and now we've got a fix.

0.13.0

  • Breaking: Removes all #[naked] functions from the crate (because this is a Nightly feature with no clear timeline to stabilization).
  • The crate's assembly runtime, which is what is used before calling into main, and what handles the interrupt calls from the BIOS, had been replaced with global_asm!.
  • The AEABI memory copy and set functions have been removed. In their place there are functions that are more custom tailored to the three primary actual uses of the memory functions on the GBA: reading/writing SRAM, copying ROM into VRAM, and clearing VRAM.
  • The AEABI division functions have been removed.
  • The compiler-builtins crate still provides the general memory operation and division functions, so those tasks can still be performed when necessary. However, if you're using memory ops or division ops so often that they're a program bottleneck, usually you want to look carefully at your implementation of those functions and try to design them to serve your own common case as best as possible.
  • Safe abstractions have been added on top of the new memory functions so that all the example/ files can do their thing without using any unsafe. This includes adding new types for Video3Bitmap and Video4Indexmap, so that static image data can be included into your program in a well-checked way.

0.12.0

  • Adds an optional dependency on the fixed crate.
  • The i16fx8, i16fx14, and i32fx8 type aliases will alias either the gba crate's internal fixed point type (feature off) or they will alias the appropriate type from the fixed (feature on). The two type are bit compatible, though the version in the fixed crate is more complete in the methods provided.
  • Breaking: The gba crate's internal fixed type had some conversion methods renamed so that they would match the appropriate methods for the same operation in the fixed crate.

Older

  • 0.11.6:

    • on_gba feature (default: enabled) that signals if the crate is running on a GBA. Limited portions of the crate can be used even when not on the GBA (such as in a build script).
    • track_caller added for fixed point math operations
  • 0.11.5:

    • Fixed the random number generator next method (#192).
    • Added optional support for the critical-section crate (#191)
    • Put new guidance on effective build-std settings in the README (#187)
    • The mmio module now publicly re-exports the necessary definitions used from other crates (#173)
  • 0.11.3:

    • Soundness: Fixed the definition of VIDEO3_VRAM, now it's the correct type and it will correctly stay in bounds.
  • 0.11.1:

    • Fixed incorrect timer 1/2/3 addresses (classic copy-paste error).
    • Fixed missing argument ordering swap in memset between the libc version and aeabi version.
    • Fixed incorrect handling of unaligned pointers in memset.
    • Added .shstrtab entry to the linker script so that it works with the new rust-lld used in Nightly 2023-01-01 (See rust-lang/rust#109721)
    • Marked the linker script file (mono_boot.ld) as simply being CC0. The reason being that it's the one file that often needs to be manually copied out of this repo and into the repo of a project using the crate (since libraries can't provide the linker script to binaries, petition the cargo folks if you want this). Accordingly, I'm giving it the most permissive license that I know of, to make things as simple as possible for everyone. The rest of the content in this repository still falls under the license entry specified in Cargo.toml.
  • 0.11.0:

    • Breaking: Once again the video memory interface has been updated. It should be simpler to follow now, because video memory consistently uses VolGrid2dStrided, rather than using special types for every screenblock style.
  • 0.10.0:

    • Breaking: Cleaned up the screenblock interface. Because they're in VRAM, they can't use u8 access like they were defined to use before. Now the types use u8x2, similar to the Mode 4 bitmap.
    • Fixed the MMIO definition for the OBJ palette, so the OBJ palette should work now.
  • 0.9.3:

    • Added as_u32_slice and as_u16_slice to Align4.
    • Removed the requirement for inputs to include_aligned_bytes! to be a multiple of 4 bytes.
    • Added as_usize to all the screeblock address types.
  • 0.9.2:

    • Adds support for more BIOS functions, though not all functions are as clearly documented as I'd like.
    • Made much more of the Fixed type const friendly. Most ops now have an inherent method that is const fn as well as implementing the core::ops trait (the trait fn just calls the inherent fn). This means that you can't do x + y in a const context, but you can do x.add(y). This is not the best system, but until const trait impls are stable this is the best middle ground.
  • 0.9.1:

    • Adds some randomization support directly into the crate.
    • Added more methods to the Fixed type.
    • Adds an include_aligned_bytes! macro to pull in compile time data that's aligned to 4.
  • 0.9.0:

    • MSRV: The crate now requires compiler_builtins-0.1.81 to build. You will need a Nightly from 2022-10-15 or later.
    • Break: Quite a bit of the video interface has been replaced, but it should be much easier to use now.
    • Break: The timer interface has been updated so that fields more closely match the mGBA names, for ease of debugging.
  • 0.8.0:

    • Break: Removed the macros for GbaCell access in favor of just methods. I had at first thought that they'd assign registers and then inline, but it turns out that the inline phase happens way before the register assignment phase, so the macros were unnecessary (and clunky).
    • Break: The IrqFn type is changed to pass the function an IrqBits instead of a bare u16.
    • Adds functions to pick a screenblock location (one for each screenblock type).
    • Add BitUnPack BIOS function.
    • Add the CGA_8X8_THICK art data.
    • Greatly improved documentation.
  • 0.7.4: Adds mGBA logging support.

  • 0.7.3: Fixes "multiple definition" errors with the AEABI division functions. Filed a PR to fix this soon: rust-lang/compiler-builtins#495

  • 0.7.2: First version that configures docs.rs properly!