TASEmulators / TASEmulators/BizHawk

RetroAchievements MSX memory mapping is incorrect

Open
#4,323 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Core: MSXHawk help wanted re: RetroAchievements Repro: Affects 2.9.1
Dominant language
C#
Stars
2.8k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

Summary

Memory addresses for MSX games in BizHawk's MSXHawk core are incorrectly mapped compared to BlueMSX, causing RetroAchievements to not work. Addresses appear to be offset by 0xC000+ compared to the expected memory map.

Repro
  1. Load any MSX ROM in BizHawk using the MSXHawk core (tested with "Kick It!" from RetroAchievements set: https://retroachievements.org/game/32486)
  2. Try to use memory addresses documented in RetroAchievements (which work correctly in BlueMSX/RaLib)
  3. Observe that memory addresses are offset by approximately 0xC000 (e.g., lives are at 0xD007 instead of the expected 0x1007)
Output

No error messages, but memory mapping is incorrect causing:

  • RetroAchievements not to trigger
  • Memory addresses from code notes don't align with actual values
  • Changing region settings does not resolve the issue

For example:

  • Address 0x1007 (lives) in BlueMSX/RetroAchievements → 0xD007 in MSXHawk
  • Similar offsets observed for all other memory locations
Host env.
  • BizHawk 2.9.1
  • Windows 11
  • Tested against RALibRetro/BlueMSX which works correctly with the same ROM
Additional Notes

According to @CasualPokePlayer's analysis:

  • rcheevos memory map expects 512KiB of RAM, although MSXHawk only has 64KiB.
  • RAM in MSXHawk appears to be offset by 0xC000+ compared to BlueMSX.
  • The issue likely involves how RAM is paged in the address space (each 0x4000 byte section of the address space is swappable between RAM and ROM).
  • The 0xC000 offset suggests BlueMSX is exposing RAM that is normally paged into 0xC000-0xFFFF first within its raw RAM.
  • This is likely fixable by adjusting the RAM map in BizHawk to match BlueMSX's implementation.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in the MSXHawk core's memory-mapping implementation and trace how paged RAM is exposed, using the reported Kick It! reproduction and the BlueMSX/RALibRetro behavior as references. Done means the documented RetroAchievements addresses, including 0x1007, resolve to the expected values and triggers work without region changes.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.