ref: 48ad3973a96ab54df73a52207ec8d47e8bf5bd25
dir: /docs/rgbds.5.html/
<!DOCTYPE html> <html> <!-- This is an automatically generated file. Do not edit. This file is part of RGBDS. Copyright (c) 2017-2018, Antonio Nino Diaz and RGBDS contributors. SPDX-License-Identifier: MIT --> <head> <meta charset="utf-8"/> <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/> <title>RGBDS(5)</title> </head> <body> <table class="head"> <tr> <td class="head-ltitle">RGBDS(5)</td> <td class="head-vol">File Formats Manual</td> <td class="head-rtitle">RGBDS(5)</td> </tr> </table> <div class="manual-text"> <section class="Sh"> <h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> <code class="Nm">rgbds</code> — <div class="Nd">object file format documentation</div> </section> <section class="Sh"> <h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> This is the description of the object files used by <a class="Xr">rgbasm(1)</a> and <a class="Xr">rgblink(1)</a>. 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. </section> <section class="Sh"> <h1 class="Sh" id="FILE_STRUCTURE"><a class="permalink" href="#FILE_STRUCTURE">FILE STRUCTURE</a></h1> The following types are used: <p class="Pp"><var class="Ar">LONG</var> is a 32‐bit integer stored in little‐endian format (Intel). <var class="Ar">BYTE</var> is an 8‐bit integer. <var class="Ar">STRING</var> is a 0‐terminated string of <var class="Ar">BYTE</var>.</p> <div class="Bd Pp"> <pre> ; Header BYTE ID[4] ; "RGB6" LONG NumberOfSymbols ; The number of symbols used in this file LONG NumberOfSections ; The number of sections used in this file ; Symbols REPT NumberOfSymbols ; Number of symbols defined in this object file. 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. IF Type != 1 ; If symbol is defined in this object file. STRING FileName ; 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 Value ; The symbols value. It's the offset into that ; symbol's section. ENDC ENDR ; Sections REPT NumberOfSections STRING Name ; Name of the section LONG Size ; Size in bytes of this section BYTE Type ; 0 = WRAM0 ; 1 = VRAM ; 2 = ROMX ; 3 = ROM0 ; 4 = HRAM ; 5 = WRAMX ; 6 = SRAM ; 7 = OAM LONG Org ; Address to fix this section at. -1 if the linker should ; decide (floating address). LONG Bank ; Bank to load this section into. -1 if the linker should ; decide (floating bank). This field is only valid for ROMX, ; VRAM, WRAMX and SRAM sections. LONG Align ; Alignment of this section (expressed as number of low bits ; to leave as 0). -1 if not defined. IF (Type == ROMX) || (Type == ROM0) ; Sections that can contain data. BYTE Data[Size] ; Raw data of the section. LONG NumberOfPatches ; Number of patches to apply. ; These types of sections may have patches REPT NumberOfPatches STRING SourceFile ; Name of the source file (for printing error ; messages). LONG Line ; The line of the source file. LONG Offset ; Offset into the section where patch should ; be applied (in bytes). BYTE Type ; 0 = BYTE patch. ; 1 = little endian WORD patch. ; 2 = little endian LONG patch. ; 3 = JR offset value BYTE patch. LONG RPNSize ; Size of the buffer with the RPN. ; expression. BYTE RPN[RPNSize] ; RPN expression. Definition below. ENDR ENDC ENDR </pre> </div> <section class="Ss"> <h2 class="Ss" id="RPN_DATA"><a class="permalink" href="#RPN_DATA">RPN DATA</a></h2> Expressions in the object file are stored as RPN. This is an expression of the form “2 5 +”. This will first push the value “2” to the stack. Then “5”. The “+” operator pops two arguments from the stack, adds them, and then pushes the result on the stack, effectively replacing the two top arguments with their sum. In the RGB format, RPN expressions are stored as BYTEs with some bytes being special prefixes for integers and symbols. <table class="Bl-column Bd-indent"> <tr> <td><b class="Sy">Value</b></td> <td><b class="Sy">Meaning</b></td> </tr> <tr> <td><a class="permalink" href="#$00"><code class="Li" id="$00">$00</code></a></td> <td><a class="permalink" href="#+_operator"><code class="Li" id="+_operator">+ operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$01"><code class="Li" id="$01">$01</code></a></td> <td><a class="permalink" href="#-_operator"><code class="Li" id="-_operator">- operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$02"><code class="Li" id="$02">$02</code></a></td> <td><a class="permalink" href="#*_operator"><code class="Li" id="*_operator">* operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$03"><code class="Li" id="$03">$03</code></a></td> <td><a class="permalink" href="#/_operator"><code class="Li" id="/_operator">/ operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$04"><code class="Li" id="$04">$04</code></a></td> <td><a class="permalink" href="#__operator"><code class="Li" id="__operator">% operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$05"><code class="Li" id="$05">$05</code></a></td> <td><a class="permalink" href="#unary_-"><code class="Li" id="unary_-">unary -</code></a></td> </tr> <tr> <td><a class="permalink" href="#$10"><code class="Li" id="$10">$10</code></a></td> <td>| <a class="permalink" href="#operator"><code class="Li" id="operator">operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$11"><code class="Li" id="$11">$11</code></a></td> <td><a class="permalink" href="#&_operator"><code class="Li" id="&_operator">& operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$12"><code class="Li" id="$12">$12</code></a></td> <td><a class="permalink" href="#__operator_2"><code class="Li" id="__operator_2">^ operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$13"><code class="Li" id="$13">$13</code></a></td> <td><a class="permalink" href="#unary_~"><code class="Li" id="unary_~">unary ~</code></a></td> </tr> <tr> <td><a class="permalink" href="#$21"><code class="Li" id="$21">$21</code></a></td> <td><a class="permalink" href="#&&_comparison"><code class="Li" id="&&_comparison">&& comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$22"><code class="Li" id="$22">$22</code></a></td> <td><a class="permalink" href="#___comparison"><code class="Li" id="___comparison">|| comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$23"><code class="Li" id="$23">$23</code></a></td> <td><a class="permalink" href="#unary"><code class="Li" id="unary">unary</code></a>!</td> </tr> <tr> <td><a class="permalink" href="#$30"><code class="Li" id="$30">$30</code></a></td> <td><a class="permalink" href="#==_comparison"><code class="Li" id="==_comparison">== comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$31"><code class="Li" id="$31">$31</code></a></td> <td><a class="permalink" href="#!=_comparison"><code class="Li" id="!=_comparison">!= comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$32"><code class="Li" id="$32">$32</code></a></td> <td><a class="permalink" href="#__comparison"><code class="Li" id="__comparison">> comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$33"><code class="Li" id="$33">$33</code></a></td> <td><a class="permalink" href="#__comparison_2"><code class="Li" id="__comparison_2">< comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$34"><code class="Li" id="$34">$34</code></a></td> <td><a class="permalink" href="#_=_comparison"><code class="Li" id="_=_comparison">>= comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$35"><code class="Li" id="$35">$35</code></a></td> <td><a class="permalink" href="#_=_comparison_2"><code class="Li" id="_=_comparison_2"><= comparison</code></a></td> </tr> <tr> <td><a class="permalink" href="#$40"><code class="Li" id="$40">$40</code></a></td> <td><a class="permalink" href="#___operator"><code class="Li" id="___operator"><< operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$41"><code class="Li" id="$41">$41</code></a></td> <td><a class="permalink" href="#___operator_2"><code class="Li" id="___operator_2">>> operator</code></a></td> </tr> <tr> <td><a class="permalink" href="#$50"><code class="Li" id="$50">$50</code></a></td> <td><a class="permalink" href="#BANK(symbol),"><code class="Li" id="BANK(symbol),">BANK(symbol),</code></a> a <var class="Ar">LONG</var> Symbol ID follows.</td> </tr> <tr> <td><a class="permalink" href="#$51"><code class="Li" id="$51">$51</code></a></td> <td><a class="permalink" href="#BANK(section_name),"><code class="Li" id="BANK(section_name),">BANK(section_name),</code></a> a null-terminated string follows.</td> </tr> <tr> <td><a class="permalink" href="#$52"><code class="Li" id="$52">$52</code></a></td> <td><a class="permalink" href="#Current_BANK()"><code class="Li" id="Current_BANK()">Current BANK()</code></a>.</td> </tr> <tr> <td><a class="permalink" href="#$60"><code class="Li" id="$60">$60</code></a></td> <td><a class="permalink" href="#HRAMCheck."><code class="Li" id="HRAMCheck.">HRAMCheck.</code></a> Check if the value is in HRAM, AND it with 0xFF.</td> </tr> <tr> <td><a class="permalink" href="#$80"><code class="Li" id="$80">$80</code></a></td> <td><var class="Ar">LONG</var> integer follows.</td> </tr> <tr> <td><a class="permalink" href="#$81"><code class="Li" id="$81">$81</code></a></td> <td><var class="Ar">LONG</var> Symbol ID follows.</td> </tr> </table> </section> </section> <section class="Sh"> <h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE ALSO</a></h1> <a class="Xr">rgbasm(1)</a>, <a class="Xr">rgblink(1)</a>, <a class="Xr">rgbds(7)</a>, <a class="Xr">gbz80(7)</a> </section> <section class="Sh"> <h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> <code class="Nm">rgbds</code> was originally written by Carsten Sørensen as part of the ASMotor package, and was later packaged in RGBDS by Justin Lloyd. It is now maintained by a number of contributors at <a class="Lk" href="https://github.com/rednex/rgbds">https://github.com/rednex/rgbds</a>. </section> </div> <table class="foot"> <tr> <td class="foot-date">January 26, 2018</td> <td class="foot-os">RGBDS Manual</td> </tr> </table> </body> </html>