1
0
mirror of https://github.com/ksherlock/iigs.git synced 2024-06-17 05:29:32 +00:00

Updated Merlin 16 REL Format (markdown)

ksherlock 2019-11-29 16:08:10 -05:00
parent 03ec9989c9
commit 2c83b435fb

@ -12,6 +12,17 @@ This is followed by 0 or more relation records, a 0 byte, 0 or more label entrie
Relocation records are 4 bytes long. The first bytes is a flag byte. This is followed by a 16-bit offset, and an 8-bit operand byte. For external references, the operand byte is the external symbol number. For local references, the operand byte is the low 8-bits of the assembled operand.
### Flag Byte
* bits 0-3 always populated (`$0f`)
* bit 4 (`$10`) indicates an external label
* bit 7 (`$80) indicates a 2-byte relocation
* bit 5 (`$20) indicates a 3-byte relocation
* `$ff` indicates a shift (see below)
This is followed by the 16-bit offset to patch.
For external symbols, the 4th bytes is the symbol number (which starts at 0). For local symbols, the 4th byte is the low byte of the operand at the offset.
### Shifting
@ -44,7 +55,7 @@ For local and EQU labels, this is the label address (based on the `$8000` origin
For external labels, this is the external label number + `$8000`.
## References
* Merlin 816 Macro Assembler Manual
* Merlin 8/16 User's Manual
* Merlin 16+ source code
* Quick Asm source code
* Empirical testing