Topics

UTTORI ASM ยท IN DEVELOPMENT

SNES compatibility

Use snes compatibility in SNES projects, with syntax and behavior notes.

On this page

The SNES plugin targets practical Asar and ca65 compatibility, including 65816, SPC700/inline SPC, Super FX, mapper and checksum behavior, freespace/RATS allocation, and selected compatibility no-ops. Not every Asar feature is implemented. Check the distinctions below before moving an existing project.

SNES behavior

Implemented families

  • 65C816 instructions, size suffixes, M/X immediate tracking, branches, and major addressing modes.
  • SPC700 instructions, explicit NSPC blocks, raw SPC output, and inline SPC compatibility.
  • Super FX instructions and explicit hardware-versus-Asar short-address policy.
  • LoROM, HiROM, ExLoROM, ExHiROM, Super FX ROM, SA-1, full SA-1, and flat norom translation.
  • org, base, address stacks, mapper-aware PC stepping, and bank-cross checks.
  • Labels, local/relative/macro labels, namespaces, structs, defines, macros, functions, conditionals, and loops.
  • Data directives, strings, character tables, include guards, binary ranges, fill, pad, selected read helpers, and diagnostics.
  • Deterministic RATS allocation and prot records.
  • Mapper-aware checksum finalization and non-power-of-two Asar checksum behavior.

Accepted Compatibility no-ops

Keyword What acceptance means today
fastrom Does not alter mapping, speed, or header bytes
dpbase Does not change direct-page calculation
warnings Does not push, pull, enable, or disable warning state
print Produces no output
warn Produces no warning
autoclean, autoclear Do not locate or erase old freespace
includefrom Does not validate the include parent
asar Does not enforce a version
reset Does not reset assembler or mapper state
{, } Visual grouping only

Unknown commands report an error. An accepted no-op does not reproduce the corresponding Asar behavior.

Known Unsupported or Partial Families

Major unsupported or partial areas include:

  • full autoclean lifecycle, repeated cleanup, freespace shrinking, alignment, and large multi-block allocation.
  • segment, freespace_settings, SA-1/Super FX specialized freespace, and prot edge cases.
  • custom spcblock macros, SPC opcode synonyms, and db directly in raw/alternate SPC compatibility modes not covered by the supported aliases.
  • pseudo-opcodes and optimizer/warning behavior beyond optimize dp.
  • standard include/define discovery (std, built-in defines) and table-file variants beyond the documented table loader.
  • complete Asar warning controls, warning immediates, warning catalogs, and compatibility error wording.
  • xkas emulation, protection directives, and several malformed variadic/macro edge cases.