mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-28 05:47:48 +00:00
Implement compact file stacks in object files
Gets rid of `open_memstream`, enabling Windows compatibility again Also fixes #491 as a nice bonus!
This commit is contained in:
83
src/rgbds.5
83
src/rgbds.5
@@ -16,7 +16,7 @@ This is the description of the object files used by
|
||||
.Xr rgbasm 1
|
||||
and
|
||||
.Xr rgblink 1 .
|
||||
.Em Please note that the specifications may change.
|
||||
.Em Please note that the specifications may change .
|
||||
This toolchain is in development and new features may require adding more information to the current format, or modifying some fields, which would break compatibility with older versions.
|
||||
.Pp
|
||||
.Sh FILE STRUCTURE
|
||||
@@ -34,34 +34,67 @@ is a 0‐terminated string of
|
||||
; Header
|
||||
|
||||
BYTE ID[4] ; "RGB9"
|
||||
LONG RevisionNumber ; The format's revision number this file uses
|
||||
LONG NumberOfSymbols ; The number of symbols used in this file
|
||||
LONG NumberOfSections ; The number of sections used in this file
|
||||
LONG RevisionNumber ; The format's revision number this file uses.
|
||||
LONG NumberOfSymbols ; The number of symbols used in this file.
|
||||
LONG NumberOfSections ; The number of sections used in this file.
|
||||
|
||||
; File info
|
||||
|
||||
LONG NumberOfNodes ; The number of nodes contained in this file.
|
||||
|
||||
REPT NumberOfNodes ; IMPORTANT NOTE: the nodes are actually written in
|
||||
; **reverse** order, meaningthe node with ID 0 is
|
||||
; the last one in the file!
|
||||
|
||||
LONG ParentID ; ID of the parent node, -1 means this is the root.
|
||||
|
||||
LONG ParentLineNo ; Line at which the parent context was exited.
|
||||
; Meaningless on the root node.
|
||||
|
||||
BYTE Type ; 0 = REPT node
|
||||
; 1 = File node
|
||||
; 2 = Macro node
|
||||
|
||||
IF Type != 0 ; If the node is not a REPT...
|
||||
|
||||
STRING Name ; The node's name: either a file name, or macro name
|
||||
; prefixed by its definition file name.
|
||||
|
||||
ELSE ; If the node is a REPT, it also contains the iter
|
||||
; counts of all the parent REPTs.
|
||||
|
||||
LONG Depth ; Size of the array below.
|
||||
|
||||
LONG Iter[Depth] ; The number of REPT iterations by increasing depth.
|
||||
|
||||
ENDC
|
||||
|
||||
ENDR
|
||||
|
||||
; Symbols
|
||||
|
||||
REPT NumberOfSymbols ; Number of symbols defined in this object file.
|
||||
REPT NumberOfSymbols ; Number of symbols defined in this object file.
|
||||
|
||||
STRING Name ; The name of this symbol. Local symbols are stored
|
||||
; as "Scope.Symbol".
|
||||
STRING Name ; The name of this symbol. Local symbols are stored
|
||||
; as "Scope.Symbol".
|
||||
|
||||
BYTE Type ; 0 = LOCAL symbol only used in this file.
|
||||
; 1 = IMPORT this symbol from elsewhere
|
||||
; 2 = EXPORT this symbol to other objects.
|
||||
BYTE Type ; 0 = LOCAL symbol only used in this file.
|
||||
; 1 = IMPORT this symbol from elsewhere
|
||||
; 2 = EXPORT this symbol to other objects.
|
||||
|
||||
IF (Type & 0x7F) != 1 ; If symbol is defined in this object file.
|
||||
IF (Type & 0x7F) != 1 ; If symbol is defined in this object file.
|
||||
|
||||
STRING FileName ; File where the symbol is defined.
|
||||
LONG SourceFile ; File where the symbol is defined.
|
||||
|
||||
LONG LineNum ; Line number in the file where the symbol is defined.
|
||||
LONG LineNum ; Line number in the file where the symbol is defined.
|
||||
|
||||
LONG SectionID ; The section number (of this object file) in which
|
||||
; this symbol is defined. If it doesn't belong to any
|
||||
; specific section (like a constant), this field has
|
||||
; the value -1.
|
||||
LONG SectionID ; The section number (of this object file) in which
|
||||
; this symbol is defined. If it doesn't belong to any
|
||||
; specific section (like a constant), this field has
|
||||
; the value -1.
|
||||
|
||||
LONG Value ; The symbols value. It's the offset into that
|
||||
; symbol's section.
|
||||
LONG Value ; The symbols value. It's the offset into that
|
||||
; symbol's section.
|
||||
|
||||
ENDC
|
||||
|
||||
@@ -107,8 +140,10 @@ REPT NumberOfSections
|
||||
|
||||
REPT NumberOfPatches
|
||||
|
||||
STRING SourceFile ; Name of the source file (for printing error
|
||||
; messages).
|
||||
LONG SourceFile ; ID of the source file node (for printing
|
||||
; error messages).
|
||||
|
||||
LONG LineNo ; Line at which the patch was created.
|
||||
|
||||
LONG Offset ; Offset into the section where patch should
|
||||
; be applied (in bytes).
|
||||
@@ -145,7 +180,9 @@ LONG NumberOfAssertions
|
||||
|
||||
REPT NumberOfAssertions
|
||||
|
||||
STRING SourceFile ; Name of the source file (for printing the failure).
|
||||
LONG SourceFile ; ID of the source file node (for printing the failure).
|
||||
|
||||
LONG LineNo ; Line at which the assertion was created.
|
||||
|
||||
LONG Offset ; Offset into the section where the assertion is located.
|
||||
|
||||
@@ -209,7 +246,7 @@ with some bytes being special prefixes for integers and symbols.
|
||||
.It Li $50 Ta Li BANK(symbol) ,
|
||||
a
|
||||
.Ar LONG
|
||||
Symbol ID follows.
|
||||
Symbol ID follows, where -1 means PC
|
||||
.It Li $51 Ta Li BANK(section_name) ,
|
||||
a null-terminated string follows.
|
||||
.It Li $52 Ta Li Current BANK()
|
||||
|
||||
Reference in New Issue
Block a user