ref: 210a4a957aebd605d8f79e39d1e6e5079c8c5cc9
parent: 131ad9b315960d46cc5b0cb9d1c6f052de11f26a
author: ISSOtm <eldredhabert0@gmail.com>
date: Tue Sep 15 14:39:22 EDT 2020
Get rid of in-repo HTML documentation The online documentation is now managed by a CI hook
--- /dev/null
+++ b/.github/actions/doc_postproc.awk
@@ -1,0 +1,48 @@
+#!/usr/bin/awk -f
+
+/^\s+<td><b class="Sy">.+<\/b><\/td>$/ {
+ # Assuming that all cells whose contents are bold are heading cells,
+ # use the HTML tag for those
+ sub(/td><b class="Sy"/, "th");
+ sub(/b><\/td/, "th");
+}
+
+BEGIN {
+ in_synopsis = 0
+}
+/<table class="Nm">/ {
+ in_synopsis = 1
+}
+/<\/table>/ {
+ # Resets synopsis state even when already reset, but whatever
+ in_synopsis = 0
+}
+/<code class="Fl">-[a-zA-Z]/ {
+ # Add links to arg descr in synopsis section
+ if (in_synopsis) {
+ while (match($0, /<code class="Fl">-[a-zA-Z]+/)) {
+ # 123456789012345678 -> 18 chars
+ optchars = substr($0, RSTART + 18, RLENGTH - 18)
+ i = length(optchars)
+ while (i) {
+ end = RSTART + 18 + i
+ i -= 1
+ len = i ? 1 : 2
+ $0 = sprintf("%s<a href=\"#%s\">%s</a>%s",
+ substr($0, 0, end - len - 1),
+ substr($0, end - 1, 1),
+ substr($0, end - len, len),
+ substr($0, end))
+ }
+ }
+ }
+}
+
+{
+ # Make long opts (defined using `Fl Fl`) into a single tag
+ gsub(/<code class="Fl">-<\/code>\s*<code class="Fl">/, "<code class=\"Fl\">-")
+}
+
+{
+}
--- a/.github/actions/get-pages.sh
+++ b/.github/actions/get-pages.sh
@@ -77,7 +77,7 @@
if [ $stem = rgbasm.5 ]; then
options+=,toc
fi
- mandoc -Thtml -I os=Linux -O$options "${PAGES[$page]##*/}" | src/doc_postproc.awk >> "$1/$2/$page"
+ mandoc -Thtml -I os=Linux -O$options "${PAGES[$page]##*/}" | .github/actions/doc_postproc.awk >> "$1/$2/$page"
if [ $update_redirects -ne 0 ]; then
cat - >"$1/$page" <<EOF
---
--- a/Makefile
+++ b/Makefile
@@ -128,8 +128,7 @@
.c.o:
$Q${CC} ${REALCFLAGS} ${PNGCFLAGS} -c -o $@ $<
-# Target used to remove all files generated by other Makefile targets, except
-# for the html documentation.
+# Target used to remove all files generated by other Makefile targets
clean:
$Q${RM} rgbasm rgbasm.exe
@@ -140,15 +139,6 @@
$Q${RM} rgbshim.sh
$Q${RM} src/asm/asmy.c src/asm/asmy.h
-# Target used to remove all html files generated by the wwwman target
-
-cleanwwwman:
- $Q${RM} docs/rgbds.7.html docs/gbz80.7.html docs/rgbds.5.html
- $Q${RM} docs/rgbasm.1.html docs/rgbasm.5.html
- $Q${RM} docs/rgblink.1.html docs/rgblink.5.html
- $Q${RM} docs/rgbfix.1.html
- $Q${RM} docs/rgbgfx.1.html
-
# Target used to install the binaries and man pages.
install: all
@@ -191,22 +181,6 @@
git format-patch --stdout "$$commit~..$$commit" \
| ${CHECKPATCH} - || true; \
done
-
-# Target for the project maintainer to easily create web manuals.
-# It relies on mandoc: http://mdocml.bsd.lv
-
-MANDOC := -Thtml -Ios=General -Oman=%N.%S.html -Ostyle=mandoc.css
-
-wwwman:
- $Qmandoc ${MANDOC} src/rgbds.7 | src/doc_postproc.awk > docs/rgbds.7.html
- $Qmandoc ${MANDOC} src/gbz80.7 | src/doc_postproc.awk > docs/gbz80.7.html
- $Qmandoc ${MANDOC} src/rgbds.5 | src/doc_postproc.awk > docs/rgbds.5.html
- $Qmandoc ${MANDOC} src/asm/rgbasm.1 | src/doc_postproc.awk > docs/rgbasm.1.html
- $Qmandoc ${MANDOC} src/asm/rgbasm.5 | src/doc_postproc.awk > docs/rgbasm.5.html
- $Qmandoc ${MANDOC} src/fix/rgbfix.1 | src/doc_postproc.awk > docs/rgbfix.1.html
- $Qmandoc ${MANDOC} src/link/rgblink.1 | src/doc_postproc.awk > docs/rgblink.1.html
- $Qmandoc ${MANDOC} src/link/rgblink.5 | src/doc_postproc.awk > docs/rgblink.5.html
- $Qmandoc ${MANDOC} src/gfx/rgbgfx.1 | src/doc_postproc.awk > docs/rgbgfx.1.html
# This target is used during development in order to prevent adding new issues
# to the source code. All warnings are treated as errors in order to block the
--- a/docs/gbz80.7.html
+++ /dev/null
@@ -1,1670 +1,0 @@
-<!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 name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>GBZ80(7)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">GBZ80(7)</td>
- <td class="head-vol">Miscellaneous Information Manual</td>
- <td class="head-rtitle">GBZ80(7)</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">gbz80</code> —
-<span class="Nd">CPU opcode reference</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-This is the list of opcodes supported by <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, including
- a short description, the number of bytes needed to encode them and the number
- of CPU cycles at 1MHz (or 2MHz in GBC dual speed mode) needed to complete
- them.
-<p class="Pp">Note: All arithmetic/logic operations that use register
- <b class="Sy">A</b> as destination can omit the destination as it is assumed
- to be register <b class="Sy">A</b> by default. The following two lines have
- the same effect:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-OR A,B
-OR B
-</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="LEGEND"><a class="permalink" href="#LEGEND">LEGEND</a></h1>
-List of abbreviations used in this document.
-<dl class="Bl-tag">
- <dt><var class="Ar">r8</var></dt>
- <dd>Any of the 8-bit registers (<b class="Sy">A</b>, <b class="Sy">B</b>,
- <b class="Sy">C</b>, <b class="Sy">D</b>, <b class="Sy">E</b>,
- <b class="Sy">H</b>, <b class="Sy">L</b>).</dd>
- <dt><var class="Ar">r16</var></dt>
- <dd>Any of the general-purpose 16-bit registers (<b class="Sy">BC</b>,
- <b class="Sy">DE</b>, <b class="Sy">HL</b>).</dd>
- <dt><var class="Ar">n8</var></dt>
- <dd>8-bit integer constant.</dd>
- <dt><var class="Ar">n16</var></dt>
- <dd>16-bit integer constant.</dd>
- <dt><var class="Ar">e8</var></dt>
- <dd>8-bit offset (<b class="Sy">-128</b> to <b class="Sy">127</b>).</dd>
- <dt><var class="Ar">u3</var></dt>
- <dd>3-bit unsigned integer constant (<b class="Sy">0</b> to
- <b class="Sy">7</b>).</dd>
- <dt><var class="Ar">cc</var></dt>
- <dd>Condition codes:
- <dl class="Bl-tag Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Execute if Z is set.</dd>
- <dt><b class="Sy">NZ</b></dt>
- <dd>Execute if Z is not set.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Execute if C is set.</dd>
- <dt><b class="Sy">NC</b></dt>
- <dd>Execute if C is not set.</dd>
- </dl>
- </dd>
- <dt><var class="Ar">vec</var></dt>
- <dd>One of the <b class="Sy">RST</b> vectors (<b class="Sy">0x00</b>,
- <b class="Sy">0x08</b>, <b class="Sy">0x10</b>, <b class="Sy">0x18</b>,
- <b class="Sy">0x20</b>, <b class="Sy">0x28</b>, <b class="Sy">0x30</b> and
- <b class="Sy">0x38</b>).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="INSTRUCTION_OVERVIEW"><a class="permalink" href="#INSTRUCTION_OVERVIEW">INSTRUCTION
- OVERVIEW</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="8-bit_Arithmetic_and_Logic_Instructions"><a class="permalink" href="#8-bit_Arithmetic_and_Logic_Instructions">8-bit
- Arithmetic and Logic Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#ADC_A,r8">ADC A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#ADC_A,_HL_">ADC A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#ADC_A,n8">ADC A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#ADD_A,r8">ADD A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#ADD_A,_HL_">ADD A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#ADD_A,n8">ADD A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#AND_A,r8">AND A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#AND_A,_HL_">AND A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#AND_A,n8">AND A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#CP_A,r8">CP A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#CP_A,_HL_">CP A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#CP_A,n8">CP A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#DEC_r8">DEC r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#DEC__HL_">DEC [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#INC_r8">INC r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#INC__HL_">INC [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#OR_A,r8">OR A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#OR_A,_HL_">OR A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#OR_A,n8">OR A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SBC_A,r8">SBC A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SBC_A,_HL_">SBC A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SBC_A,n8">SBC A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SUB_A,r8">SUB A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SUB_A,_HL_">SUB A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SUB_A,n8">SUB A,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#XOR_A,r8">XOR A,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#XOR_A,_HL_">XOR A,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#XOR_A,n8">XOR A,n8</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="16-bit_Arithmetic_Instructions"><a class="permalink" href="#16-bit_Arithmetic_Instructions">16-bit
- Arithmetic Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#ADD_HL,r16">ADD HL,r16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#DEC_r16">DEC r16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#INC_r16">INC r16</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Bit_Operations_Instructions"><a class="permalink" href="#Bit_Operations_Instructions">Bit
- Operations Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#BIT_u3,r8">BIT u3,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#BIT_u3,_HL_">BIT u3,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RES_u3,r8">RES u3,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RES_u3,_HL_">RES u3,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SET_u3,r8">SET u3,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SET_u3,_HL_">SET u3,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SWAP_r8">SWAP r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SWAP__HL_">SWAP [HL]</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Bit_Shift_Instructions"><a class="permalink" href="#Bit_Shift_Instructions">Bit
- Shift Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#RL_r8">RL r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RL__HL_">RL [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RLA">RLA</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RLC_r8">RLC r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RLC__HL_">RLC [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RLCA">RLCA</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RR_r8">RR r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RR__HL_">RR [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RRA">RRA</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RRC_r8">RRC r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RRC__HL_">RRC [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RRCA">RRCA</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SLA_r8">SLA r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SLA__HL_">SLA [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SRA_r8">SRA r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SRA__HL_">SRA [HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SRL_r8">SRL r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SRL__HL_">SRL [HL]</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Load_Instructions"><a class="permalink" href="#Load_Instructions">Load
- Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#LD_r8,r8">LD r8,r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_r8,n8">LD r8,n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_r16,n16">LD r16,n16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__HL_,r8">LD [HL],r8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__HL_,n8">LD [HL],n8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_r8,_HL_">LD r8,[HL]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__r16_,A">LD [r16],A</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__n16_,A">LD [n16],A</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LDH__n16_,A">LDH [n16],A</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LDH__C_,A">LDH [C],A</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_A,_r16_">LD A,[r16]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_A,_n16_">LD A,[n16]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LDH_A,_n16_">LDH A,[n16]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LDH_A,_C_">LDH A,[C]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__HLI_,A">LD [HLI],A</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__HLD_,A">LD [HLD],A</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_A,_HLI_">LD A,[HLI]</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_A,_HLD_">LD A,[HLD]</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Jumps_and_Subroutines"><a class="permalink" href="#Jumps_and_Subroutines">Jumps
- and Subroutines</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#CALL_n16">CALL n16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#CALL_cc,n16">CALL cc,n16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#JP_HL">JP HL</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#JP_n16">JP n16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#JP_cc,n16">JP cc,n16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#JR_e8">JR e8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#JR_cc,e8">JR cc,e8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RET_cc">RET cc</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RET">RET</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RETI">RETI</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#RST_vec">RST vec</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Stack_Operations_Instructions"><a class="permalink" href="#Stack_Operations_Instructions">Stack
- Operations Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#ADD_HL,SP">ADD HL,SP</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#ADD_SP,e8">ADD SP,e8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#DEC_SP">DEC SP</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#INC_SP">INC SP</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_SP,n16">LD SP,n16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD__n16_,SP">LD [n16],SP</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_HL,SP+e8">LD HL,SP+e8</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#LD_SP,HL">LD SP,HL</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#POP_AF">POP AF</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#POP_r16">POP r16</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#PUSH_AF">PUSH AF</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#PUSH_r16">PUSH r16</a></dt>
- <dd></dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Miscellaneous_Instructions"><a class="permalink" href="#Miscellaneous_Instructions">Miscellaneous
- Instructions</a></h2>
-<dl class="Bl-inset Bl-compact">
- <dt><a class="Sx" href="#CCF">CCF</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#CPL">CPL</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#DAA">DAA</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#DI">DI</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#EI">EI</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#HALT">HALT</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#NOP">NOP</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#SCF">SCF</a></dt>
- <dd></dd>
- <dt><a class="Sx" href="#STOP">STOP</a></dt>
- <dd></dd>
-</dl>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="INSTRUCTION_REFERENCE"><a class="permalink" href="#INSTRUCTION_REFERENCE">INSTRUCTION
- REFERENCE</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="ADC_A,r8"><a class="permalink" href="#ADC_A,r8">ADC
- A,r8</a></h2>
-Add the value in <var class="Ar">r8</var> plus the carry flag to
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if overflow from bit 3.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if overflow from bit 7.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADC_A,_HL_"><a class="permalink" href="#ADC_A,_HL_">ADC
- A,[HL]</a></h2>
-Add the byte pointed to by <b class="Sy">HL</b> plus the carry flag to
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#ADC_A,r8">ADC A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADC_A,n8"><a class="permalink" href="#ADC_A,n8">ADC
- A,n8</a></h2>
-Add the value <var class="Ar">n8</var> plus the carry flag to
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#ADC_A,r8">ADC A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADD_A,r8"><a class="permalink" href="#ADD_A,r8">ADD
- A,r8</a></h2>
-Add the value in <var class="Ar">r8</var> to <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if overflow from bit 3.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if overflow from bit 7.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADD_A,_HL_"><a class="permalink" href="#ADD_A,_HL_">ADD
- A,[HL]</a></h2>
-Add the byte pointed to by <b class="Sy">HL</b> to <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#ADD_A,r8">ADD A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADD_A,n8"><a class="permalink" href="#ADD_A,n8">ADD
- A,n8</a></h2>
-Add the value <var class="Ar">n8</var> to <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#ADD_A,r8">ADD A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADD_HL,r16"><a class="permalink" href="#ADD_HL,r16">ADD
- HL,r16</a></h2>
-Add the value in <var class="Ar">r16</var> to <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if overflow from bit 11.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if overflow from bit 15.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADD_HL,SP"><a class="permalink" href="#ADD_HL,SP">ADD
- HL,SP</a></h2>
-Add the value in <b class="Sy">SP</b> to <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#ADD_HL,r16">ADD HL,r16</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="ADD_SP,e8"><a class="permalink" href="#ADD_SP,e8">ADD
- SP,e8</a></h2>
-Add the signed value <var class="Ar">e8</var> to <b class="Sy">SP</b>.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if overflow from bit 3.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if overflow from bit 7.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="AND_A,r8"><a class="permalink" href="#AND_A,r8">AND
- A,r8</a></h2>
-Bitwise AND between the value in <var class="Ar">r8</var> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>1</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>0</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="AND_A,_HL_"><a class="permalink" href="#AND_A,_HL_">AND
- A,[HL]</a></h2>
-Bitwise AND between the byte pointed to by <b class="Sy">HL</b> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#AND_A,r8">AND A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="AND_A,n8"><a class="permalink" href="#AND_A,n8">AND
- A,n8</a></h2>
-Bitwise AND between the value in <var class="Ar">n8</var> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#AND_A,r8">AND A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="BIT_u3,r8"><a class="permalink" href="#BIT_u3,r8">BIT
- u3,r8</a></h2>
-Test bit <var class="Ar">u3</var> in register <var class="Ar">r8</var>, set the
- zero flag if bit not set.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if the selected bit is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>1</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="BIT_u3,_HL_"><a class="permalink" href="#BIT_u3,_HL_">BIT
- u3,[HL]</a></h2>
-Test bit <var class="Ar">u3</var> in the byte pointed by <b class="Sy">HL</b>,
- set the zero flag if bit not set.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#BIT_u3,r8">BIT u3,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CALL_n16"><a class="permalink" href="#CALL_n16">CALL
- n16</a></h2>
-Call address <var class="Ar">n16</var>. This pushes the address of the
- instruction after the <b class="Sy">CALL</b> on the stack, such that
- <a class="Sx" href="#RET">RET</a> can pop it later; then, it executes an
- implicit <a class="Sx" href="#JP_n16">JP n16</a>.
-<p class="Pp">Cycles: 6</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CALL_cc,n16"><a class="permalink" href="#CALL_cc,n16">CALL
- cc,n16</a></h2>
-Call address <var class="Ar">n16</var> if condition <var class="Ar">cc</var> is
- met.
-<p class="Pp">Cycles: 6 taken / 3 untaken</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CCF"><a class="permalink" href="#CCF">CCF</a></h2>
-Complement Carry Flag.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Inverted.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CP_A,r8"><a class="permalink" href="#CP_A,r8">CP
- A,r8</a></h2>
-Subtract the value in <var class="Ar">r8</var> from <b class="Sy">A</b> and set
- flags accordingly, but don't store the result. This is useful for ComParing
- values.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>1</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if borrow from bit 4.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if borrow (i.e. if <var class="Ar">r8</var> >
- <b class="Sy">A</b>).</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CP_A,_HL_"><a class="permalink" href="#CP_A,_HL_">CP
- A,[HL]</a></h2>
-Subtract the byte pointed to by <b class="Sy">HL</b> from <b class="Sy">A</b>
- and set flags accordingly, but don't store the result.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#CP_A,r8">CP A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CP_A,n8"><a class="permalink" href="#CP_A,n8">CP
- A,n8</a></h2>
-Subtract the value <var class="Ar">n8</var> from <b class="Sy">A</b> and set
- flags accordingly, but don't store the result.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#CP_A,r8">CP A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="CPL"><a class="permalink" href="#CPL">CPL</a></h2>
-ComPLement accumulator (<b class="Sy">A</b> = <b class="Sy">~A</b>).
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">N</b></dt>
- <dd>1</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>1</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="DAA"><a class="permalink" href="#DAA">DAA</a></h2>
-Decimal Adjust Accumulator to get a correct BCD representation after an
- arithmetic instruction.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set or reset depending on the operation.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="DEC_r8"><a class="permalink" href="#DEC_r8">DEC r8</a></h2>
-Decrement value in register <var class="Ar">r8</var> by 1.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>1</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if borrow from bit 4.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="DEC__HL_"><a class="permalink" href="#DEC__HL_">DEC
- [HL]</a></h2>
-Decrement the byte pointed to by <b class="Sy">HL</b> by 1.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#DEC_r8">DEC r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="DEC_r16"><a class="permalink" href="#DEC_r16">DEC
- r16</a></h2>
-Decrement value in register <var class="Ar">r16</var> by 1.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="DEC_SP"><a class="permalink" href="#DEC_SP">DEC SP</a></h2>
-Decrement value in register <b class="Sy">SP</b> by 1.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="DI"><a class="permalink" href="#DI">DI</a></h2>
-Disable Interrupts by clearing the <b class="Sy">IME</b> flag.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="EI"><a class="permalink" href="#EI">EI</a></h2>
-Enable Interrupts by setting the <b class="Sy">IME</b> flag. The flag is only
- set <i class="Em">after</i> the instruction following <b class="Sy">EI</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="HALT"><a class="permalink" href="#HALT">HALT</a></h2>
-Enter CPU low-power consumption mode until an interrupt occurs. The exact
- behavior of this instruction depends on the state of the <b class="Sy">IME</b>
- flag.
-<dl class="Bl-tag">
- <dt><b class="Sy">IME</b> <span class="No">set</span></dt>
- <dd>The CPU enters low-power mode until <i class="Em">after</i> an interrupt
- is about to be serviced. The handler is executed normally, and the CPU
- resumes execution after the <code class="Ic">HALT</code> when that
- returns.</dd>
- <dt><b class="Sy">IME</b> <span class="No">not set</span></dt>
- <dd>The behavior depends on whether an interrupt is pending (i.e.
- ‘<code class="Li">[IE] & [IF]</code>’ is non-zero).
- <dl class="Bl-tag">
- <dt>None pending</dt>
- <dd>As soon as an interrupt becomes pending, the CPU resumes execution.
- This is like the above, except that the handler is
- <i class="Em">not</i> called.</dd>
- <dt>Some pending</dt>
- <dd>The CPU continues execution after the <code class="Ic">HALT</code>,
- but the byte after it is read twice in a row (<b class="Sy">PC</b> is
- not incremented, due to a hardware bug).</dd>
- </dl>
- </dd>
-</dl>
-<p class="Pp">Cycles: -</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="INC_r8"><a class="permalink" href="#INC_r8">INC r8</a></h2>
-Increment value in register <var class="Ar">r8</var> by 1.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if overflow from bit 3.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="INC__HL_"><a class="permalink" href="#INC__HL_">INC
- [HL]</a></h2>
-Increment the byte pointed to by <b class="Sy">HL</b> by 1.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#INC_r8">INC r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="INC_r16"><a class="permalink" href="#INC_r16">INC
- r16</a></h2>
-Increment value in register <var class="Ar">r16</var> by 1.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="INC_SP"><a class="permalink" href="#INC_SP">INC SP</a></h2>
-Increment value in register <b class="Sy">SP</b> by 1.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="JP_n16"><a class="permalink" href="#JP_n16">JP n16</a></h2>
-Jump to address <var class="Ar">n16</var>; effectively, store
- <var class="Ar">n16</var> into <b class="Sy">PC</b>.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="JP_cc,n16"><a class="permalink" href="#JP_cc,n16">JP
- cc,n16</a></h2>
-Jump to address <var class="Ar">n16</var> if condition <var class="Ar">cc</var>
- is met.
-<p class="Pp">Cycles: 4 taken / 3 untaken</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="JP_HL"><a class="permalink" href="#JP_HL">JP HL</a></h2>
-Jump to address in <b class="Sy">HL</b>; effectively, load <b class="Sy">PC</b>
- with value in register <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="JR_e8"><a class="permalink" href="#JR_e8">JR e8</a></h2>
-Relative Jump by adding <var class="Ar">e8</var> to the address of the
- instruction following the <b class="Sy">JR</b>. To clarify, an operand of 0 is
- equivalent to no jumping.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="JR_cc,e8"><a class="permalink" href="#JR_cc,e8">JR
- cc,e8</a></h2>
-Relative Jump by adding <var class="Ar">e8</var> to the current address if
- condition <var class="Ar">cc</var> is met.
-<p class="Pp">Cycles: 3 taken / 2 untaken</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_r8,r8"><a class="permalink" href="#LD_r8,r8">LD
- r8,r8</a></h2>
-Load (copy) value in register on the right into register on the left.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_r8,n8"><a class="permalink" href="#LD_r8,n8">LD
- r8,n8</a></h2>
-Load value <var class="Ar">n8</var> into register <var class="Ar">r8</var>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_r16,n16"><a class="permalink" href="#LD_r16,n16">LD
- r16,n16</a></h2>
-Load value <var class="Ar">n16</var> into register <var class="Ar">r16</var>.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__HL_,r8"><a class="permalink" href="#LD__HL_,r8">LD
- [HL],r8</a></h2>
-Store value in register <var class="Ar">r8</var> into byte pointed to by
- register <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__HL_,n8"><a class="permalink" href="#LD__HL_,n8">LD
- [HL],n8</a></h2>
-Store value <var class="Ar">n8</var> into byte pointed to by register
- <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_r8,_HL_"><a class="permalink" href="#LD_r8,_HL_">LD
- r8,[HL]</a></h2>
-Load value into register <var class="Ar">r8</var> from byte pointed to by
- register <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__r16_,A"><a class="permalink" href="#LD__r16_,A">LD
- [r16],A</a></h2>
-Store value in register <b class="Sy">A</b> into byte pointed to by register
- <var class="Ar">r16</var>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__n16_,A"><a class="permalink" href="#LD__n16_,A">LD
- [n16],A</a></h2>
-Store value in register <b class="Sy">A</b> into byte at address
- <var class="Ar">n16</var>.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LDH__n16_,A"><a class="permalink" href="#LDH__n16_,A">LDH
- [n16],A</a></h2>
-Store value in register <b class="Sy">A</b> into byte at address
- <var class="Ar">n16</var>, provided it is between
- <span class="Ad">$FF00</span> and <span class="Ad">$FFFF</span>.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-<p class="Pp">This is sometimes written as ‘<code class="Li">ldio [n16],
- a</code>’, or ‘<code class="Li">ld [$ff00+n8],
- a</code>’.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LDH__C_,A"><a class="permalink" href="#LDH__C_,A">LDH
- [C],A</a></h2>
-Store value in register <b class="Sy">A</b> into byte at address
- <span class="Ad">$FF00+C</span>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-<p class="Pp">This is sometimes written as ‘<code class="Li">ldio [c],
- a</code>’, or ‘<code class="Li">ld [$ff00+c],
- a</code>’.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_A,_r16_"><a class="permalink" href="#LD_A,_r16_">LD
- A,[r16]</a></h2>
-Load value in register <b class="Sy">A</b> from byte pointed to by register
- <var class="Ar">r16</var>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_A,_n16_"><a class="permalink" href="#LD_A,_n16_">LD
- A,[n16]</a></h2>
-Load value in register <b class="Sy">A</b> from byte at address
- <var class="Ar">n16</var>.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LDH_A,_n16_"><a class="permalink" href="#LDH_A,_n16_">LDH
- A,[n16]</a></h2>
-Load value in register <b class="Sy">A</b> from byte at address
- <var class="Ar">n16</var>, provided it is between
- <span class="Ad">$FF00</span> and <span class="Ad">$FFFF</span>.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-<p class="Pp">This is sometimes written as ‘<code class="Li">ldio a,
- [n16]</code>’, or ‘<code class="Li">ld a,
- [$ff00+n8]</code>’.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LDH_A,_C_"><a class="permalink" href="#LDH_A,_C_">LDH
- A,[C]</a></h2>
-Load value in register <b class="Sy">A</b> from byte at address
- <span class="Ad">$FF00+c</span>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-<p class="Pp">This is sometimes written as ‘<code class="Li">ldio a,
- [c]</code>’, or ‘<code class="Li">ld a,
- [$ff00+c]</code>’.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__HLI_,A"><a class="permalink" href="#LD__HLI_,A">LD
- [HLI],A</a></h2>
-Store value in register <b class="Sy">A</b> into byte pointed by
- <b class="Sy">HL</b> and increment <b class="Sy">HL</b> afterwards.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__HLD_,A"><a class="permalink" href="#LD__HLD_,A">LD
- [HLD],A</a></h2>
-Store value in register <b class="Sy">A</b> into byte pointed by
- <b class="Sy">HL</b> and decrement <b class="Sy">HL</b> afterwards.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_A,_HLD_"><a class="permalink" href="#LD_A,_HLD_">LD
- A,[HLD]</a></h2>
-Load value into register <b class="Sy">A</b> from byte pointed by
- <b class="Sy">HL</b> and decrement <b class="Sy">HL</b> afterwards.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_A,_HLI_"><a class="permalink" href="#LD_A,_HLI_">LD
- A,[HLI]</a></h2>
-Load value into register <b class="Sy">A</b> from byte pointed by
- <b class="Sy">HL</b> and increment <b class="Sy">HL</b> afterwards.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_SP,n16"><a class="permalink" href="#LD_SP,n16">LD
- SP,n16</a></h2>
-Load value <var class="Ar">n16</var> into register <b class="Sy">SP</b>.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD__n16_,SP"><a class="permalink" href="#LD__n16_,SP">LD
- [n16],SP</a></h2>
-Store <b class="Sy">SP & $FF</b> at address <var class="Ar">n16</var> and
- <b class="Sy">SP >> 8</b> at address <var class="Ar">n16</var> + 1.
-<p class="Pp">Cycles: 5</p>
-<p class="Pp">Bytes: 3</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_HL,SP+e8"><a class="permalink" href="#LD_HL,SP+e8">LD
- HL,SP+e8</a></h2>
-Add the signed value <var class="Ar">e8</var> to <b class="Sy">SP</b> and store
- the result in <b class="Sy">HL</b>.
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if overflow from bit 3.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if overflow from bit 7.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="LD_SP,HL"><a class="permalink" href="#LD_SP,HL">LD
- SP,HL</a></h2>
-Load register <b class="Sy">HL</b> into register <b class="Sy">SP</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="NOP"><a class="permalink" href="#NOP">NOP</a></h2>
-No OPeration.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="OR_A,r8"><a class="permalink" href="#OR_A,r8">OR
- A,r8</a></h2>
-Store into <b class="Sy">A</b> the bitwise OR of the value in
- <var class="Ar">r8</var> and <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>0</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="OR_A,_HL_"><a class="permalink" href="#OR_A,_HL_">OR
- A,[HL]</a></h2>
-Store into <b class="Sy">A</b> the bitwise OR of the byte pointed to by
- <b class="Sy">HL</b> and <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#OR_A,r8">OR A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="OR_A,n8"><a class="permalink" href="#OR_A,n8">OR
- A,n8</a></h2>
-Store into <b class="Sy">A</b> the bitwise OR of <var class="Ar">n8</var> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#OR_A,r8">OR A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="POP_AF"><a class="permalink" href="#POP_AF">POP AF</a></h2>
-Pop register <b class="Sy">AF</b> from the stack. This is roughly equivalent to
- the following <i class="Em">imaginary</i> instructions:
-<div class="Bd Pp Bd-indent">
-<pre>
-ld f, [sp] ; See below for individual flags
-inc sp
-ld a, [sp]
-inc sp
-</pre>
-</div>
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set from bit 7 of the popped low byte.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>Set from bit 6 of the popped low byte.</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set from bit 5 of the popped low byte.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set from bit 4 of the popped low byte.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="POP_r16"><a class="permalink" href="#POP_r16">POP
- r16</a></h2>
-Pop register <var class="Ar">r16</var> from the stack. This is roughly
- equivalent to the following <i class="Em">imaginary</i> instructions:
-<div class="Bd Pp Bd-indent">
-<pre>
-ld LOW(r16), [sp] ; C, E or L
-inc sp
-ld HIGH(r16), [sp] ; B, D or H
-inc sp
-</pre>
-</div>
-<p class="Pp">Cycles: 3</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="PUSH_AF"><a class="permalink" href="#PUSH_AF">PUSH
- AF</a></h2>
-Push register <b class="Sy">AF</b> into the stack. This is roughly equivalent to
- the following <i class="Em">imaginary</i> instructions:
-<div class="Bd Pp Bd-indent">
-<pre>
-dec sp
-ld [sp], a
-dec sp
-ld [sp], flag_Z << 7 | flag_N << 6 | flag_H << 5 | flag_C << 4
-</pre>
-</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="PUSH_r16"><a class="permalink" href="#PUSH_r16">PUSH
- r16</a></h2>
-Push register <var class="Ar">r16</var> into the stack. This is roughly
- equivalent to the following <i class="Em">imaginary</i> instructions:
-<div class="Bd Pp Bd-indent">
-<pre>
-dec sp
-ld [sp], HIGH(r16) ; B, D or H
-dec sp
-ld [sp], LOW(r16) ; C, E or L
-</pre>
-</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RES_u3,r8"><a class="permalink" href="#RES_u3,r8">RES
- u3,r8</a></h2>
-Set bit <var class="Ar">u3</var> in register <var class="Ar">r8</var> to 0. Bit
- 0 is the rightmost one, bit 7 the leftmost one.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RES_u3,_HL_"><a class="permalink" href="#RES_u3,_HL_">RES
- u3,[HL]</a></h2>
-Set bit <var class="Ar">u3</var> in the byte pointed by <b class="Sy">HL</b> to
- 0. Bit 0 is the rightmost one, bit 7 the leftmost one.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RET"><a class="permalink" href="#RET">RET</a></h2>
-Return from subroutine. This is basically a <b class="Sy">POP PC</b> (if such an
- instruction existed). See <a class="Sx" href="#POP_r16">POP r16</a> for an
- explanation of how <b class="Sy">POP</b> works.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RET_cc"><a class="permalink" href="#RET_cc">RET cc</a></h2>
-Return from subroutine if condition <var class="Ar">cc</var> is met.
-<p class="Pp">Cycles: 5 taken / 2 untaken</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RETI"><a class="permalink" href="#RETI">RETI</a></h2>
-Return from subroutine and enable interrupts. This is basically equivalent to
- executing <a class="Sx" href="#EI">EI</a> then
- <a class="Sx" href="#RET">RET</a>, meaning that <b class="Sy">IME</b> is set
- right after this instruction.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RL_r8"><a class="permalink" href="#RL_r8">RL r8</a></h2>
-Rotate bits in register <var class="Ar">r8</var> left through carry.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- C</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RL__HL_"><a class="permalink" href="#RL__HL_">RL
- [HL]</a></h2>
-Rotate byte pointed to by <b class="Sy">HL</b> left through carry.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- C</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#RL_r8">RL r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RLA"><a class="permalink" href="#RLA">RLA</a></h2>
-Rotate register <b class="Sy">A</b> left through carry.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- C</div>
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RLC_r8"><a class="permalink" href="#RLC_r8">RLC r8</a></h2>
-Rotate register <var class="Ar">r8</var> left.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- [7]</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RLC__HL_"><a class="permalink" href="#RLC__HL_">RLC
- [HL]</a></h2>
-Rotate byte pointed to by <b class="Sy">HL</b> left.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- [7]</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#RLC_r8">RLC r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RLCA"><a class="permalink" href="#RLCA">RLCA</a></h2>
-Rotate register <b class="Sy">A</b> left.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- [7]</div>
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RR_r8"><a class="permalink" href="#RR_r8">RR r8</a></h2>
-Rotate register <var class="Ar">r8</var> right through carry.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RR__HL_"><a class="permalink" href="#RR__HL_">RR
- [HL]</a></h2>
-Rotate byte pointed to by <b class="Sy">HL</b> right through carry.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#RR_r8">RR r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RRA"><a class="permalink" href="#RRA">RRA</a></h2>
-Rotate register <b class="Sy">A</b> right through carry.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RRC_r8"><a class="permalink" href="#RRC_r8">RRC r8</a></h2>
-Rotate register <var class="Ar">r8</var> right.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">[0] -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RRC__HL_"><a class="permalink" href="#RRC__HL_">RRC
- [HL]</a></h2>
-Rotate byte pointed to by <b class="Sy">HL</b> right.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">[0] -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#RRC_r8">RRC r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RRCA"><a class="permalink" href="#RRCA">RRCA</a></h2>
-Rotate register <b class="Sy">A</b> right.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">[0] -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RST_vec"><a class="permalink" href="#RST_vec">RST
- vec</a></h2>
-Call address <var class="Ar">vec</var>. This is a shorter and faster equivalent
- to <a class="Sx" href="#CALL">CALL</a> for suitable values of
- <var class="Ar">vec</var>.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SBC_A,r8"><a class="permalink" href="#SBC_A,r8">SBC
- A,r8</a></h2>
-Subtract the value in <var class="Ar">r8</var> and the carry flag from
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>1</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if borrow from bit 4.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if borrow (i.e. if (<var class="Ar">r8</var> + carry) >
- <b class="Sy">A</b>).</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SBC_A,_HL_"><a class="permalink" href="#SBC_A,_HL_">SBC
- A,[HL]</a></h2>
-Subtract the byte pointed to by <b class="Sy">HL</b> and the carry flag from
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SBC_A,r8">SBC A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SBC_A,n8"><a class="permalink" href="#SBC_A,n8">SBC
- A,n8</a></h2>
-Subtract the value <var class="Ar">n8</var> and the carry flag from
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SBC_A,r8">SBC A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SCF"><a class="permalink" href="#SCF">SCF</a></h2>
-Set Carry Flag.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>1</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SET_u3,r8"><a class="permalink" href="#SET_u3,r8">SET
- u3,r8</a></h2>
-Set bit <var class="Ar">u3</var> in register <var class="Ar">r8</var> to 1. Bit
- 0 is the rightmost one, bit 7 the leftmost one.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SET_u3,_HL_"><a class="permalink" href="#SET_u3,_HL_">SET
- u3,[HL]</a></h2>
-Set bit <var class="Ar">u3</var> in the byte pointed by <b class="Sy">HL</b> to
- 1. Bit 0 is the rightmost one, bit 7 the leftmost one.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SLA_r8"><a class="permalink" href="#SLA_r8">SLA r8</a></h2>
-Shift Left Arithmetic register <var class="Ar">r8</var>.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- 0</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SLA__HL_"><a class="permalink" href="#SLA__HL_">SLA
- [HL]</a></h2>
-Shift Left Arithmetic byte pointed to by <b class="Sy">HL</b>.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">C <- [7 <- 0] <- 0</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SLA_r8">SLA r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SRA_r8"><a class="permalink" href="#SRA_r8">SRA r8</a></h2>
-Shift Right Arithmetic register <var class="Ar">r8</var>.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">[7] -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SRA__HL_"><a class="permalink" href="#SRA__HL_">SRA
- [HL]</a></h2>
-Shift Right Arithmetic byte pointed to by <b class="Sy">HL</b>.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">[7] -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SRA_r8">SRA r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SRL_r8"><a class="permalink" href="#SRL_r8">SRL r8</a></h2>
-Shift Right Logic register <var class="Ar">r8</var>.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">0 -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set according to result.</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SRL__HL_"><a class="permalink" href="#SRL__HL_">SRL
- [HL]</a></h2>
-Shift Right Logic byte pointed to by <b class="Sy">HL</b>.
-<p class="Pp"></p>
-<div class="Bd Bd-indent">0 -> [7 -> 0] -> C</div>
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SRA_r8">SRA r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="STOP"><a class="permalink" href="#STOP">STOP</a></h2>
-Enter CPU very low power mode. Also used to switch between double and normal
- speed CPU modes in GBC.
-<p class="Pp">Cycles: -</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: None affected.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SUB_A,r8"><a class="permalink" href="#SUB_A,r8">SUB
- A,r8</a></h2>
-Subtract the value in <var class="Ar">r8</var> from <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>1</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>Set if borrow from bit 4.</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>Set if borrow (set if <var class="Ar">r8</var> >
- <b class="Sy">A</b>).</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SUB_A,_HL_"><a class="permalink" href="#SUB_A,_HL_">SUB
- A,[HL]</a></h2>
-Subtract the byte pointed to by <b class="Sy">HL</b> from <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SUB_A,r8">SUB A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SUB_A,n8"><a class="permalink" href="#SUB_A,n8">SUB
- A,n8</a></h2>
-Subtract the value <var class="Ar">n8</var> from <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SUB_A,r8">SUB A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SWAP_r8"><a class="permalink" href="#SWAP_r8">SWAP
- r8</a></h2>
-Swap upper 4 bits in register <var class="Ar">r8</var> and the lower 4 ones.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>0</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="SWAP__HL_"><a class="permalink" href="#SWAP__HL_">SWAP
- [HL]</a></h2>
-Swap upper 4 bits in the byte pointed by <b class="Sy">HL</b> and the lower 4
- ones.
-<p class="Pp">Cycles: 4</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#SWAP_r8">SWAP r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="XOR_A,r8"><a class="permalink" href="#XOR_A,r8">XOR
- A,r8</a></h2>
-Bitwise XOR between the value in <var class="Ar">r8</var> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 1</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags:</p>
-<dl class="Bl-hang Bl-compact">
- <dt><b class="Sy">Z</b></dt>
- <dd>Set if result is 0.</dd>
- <dt><b class="Sy">N</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">H</b></dt>
- <dd>0</dd>
- <dt><b class="Sy">C</b></dt>
- <dd>0</dd>
-</dl>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="XOR_A,_HL_"><a class="permalink" href="#XOR_A,_HL_">XOR
- A,[HL]</a></h2>
-Bitwise XOR between the byte pointed to by <b class="Sy">HL</b> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 1</p>
-<p class="Pp">Flags: See <a class="Sx" href="#XOR_A,r8">XOR A,r8</a></p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="XOR_A,n8"><a class="permalink" href="#XOR_A,n8">XOR
- A,n8</a></h2>
-Bitwise XOR between the value in <var class="Ar">n8</var> and
- <b class="Sy">A</b>.
-<p class="Pp">Cycles: 2</p>
-<p class="Pp">Bytes: 2</p>
-<p class="Pp">Flags: See <a class="Sx" href="#XOR_A,r8">XOR A,r8</a></p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgbds.7.html">rgbds(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">February 23, 2018</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/index.html
+++ /dev/null
@@ -1,36 +1,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8"/>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <title>General Information</title>
- <link rel="stylesheet" type="text/css" href="mandoc.css">
-</head>
-<body>
-<h1>RGBDS — Rednex Game Boy Development System</h1>
-<h2>Table of Contents</h2>
-<ol>
- <li>General information
- <ul>
- <li><a href="rgbds.7.html">RGBDS general information</a></li>
- <li><a href="rgbds.5.html">RGBDS object file format</a></li>
- </ul>
- <li>Language description
- <ul>
- <li><a href="rgbasm.5.html">RGBASM language description</a></li>
- <li><a href="rgblink.5.html">RGBLINK linkerscript language description</a></li>
- <li><a href="gbz80.7.html">GBZ80 CPU instruction set description</a></li>
- </ul>
- <li>Command line usage
- <ul>
- <li><a href="rgbasm.1.html">RGBASM command-line usage</a></li>
- <li><a href="rgblink.1.html">RGBLINK command-line usage</a></li>
- <li><a href="rgbfix.1.html">RGBFIX command-line usage</a></li>
- <li><a href="rgbgfx.1.html">RGBGFX command-line usage</a></li>
- </ul>
-</ol>
-<h2 id="GitHub Repository">GitHub Repository:</h2>
-<ul>
- <li><a href="https://github.com/rednex/rgbds">https://github.com/rednex/rgbds</a></li>
-</ul>
-</body>
--- a/docs/mandoc.css
+++ /dev/null
@@ -1,347 +1,0 @@
-/* $Id: mandoc.css,v 1.45 2019/03/01 10:57:18 schwarze Exp $ */
-/*
- * Standard style sheet for mandoc(1) -Thtml and man.cgi(8).
- *
- * Written by Ingo Schwarze <schwarze@openbsd.org>.
- * I place this file into the public domain.
- * Permission to use, copy, modify, and distribute it for any purpose
- * with or without fee is hereby granted, without any conditions.
- */
-
-/* Global defaults. */
-
-html { max-width: 65em; }
-body { font-family: Helvetica,Arial,sans-serif; }
-table { margin-top: 0em;
- margin-bottom: 0em;
- border-collapse: collapse; }
-/* Some browsers set border-color in a browser style for tbody,
- * but not for table, resulting in inconsistent border styling. */
-tbody { border-color: inherit; }
-tr { border-color: inherit; }
-td { vertical-align: top;
- padding-left: 0.2em;
- padding-right: 0.2em;
- border-color: inherit; }
-ul, ol, dl { margin-top: 0em;
- margin-bottom: 0em; }
-li, dt { margin-top: 1em; }
-
-.permalink { border-bottom: thin dotted;
- color: inherit;
- font: inherit;
- text-decoration: inherit; }
-* { clear: both }
-
-/* Search form and search results. */
-
-fieldset { border: thin solid silver;
- border-radius: 1em;
- text-align: center; }
-input[name=expr] {
- width: 25%; }
-
-table.results { margin-top: 1em;
- margin-left: 2em;
- font-size: smaller; }
-
-/* Header and footer lines. */
-
-table.head { width: 100%;
- border-bottom: 1px dotted #808080;
- margin-bottom: 1em;
- font-size: smaller; }
-td.head-vol { text-align: center; }
-td.head-rtitle {
- text-align: right; }
-
-table.foot { width: 100%;
- border-top: 1px dotted #808080;
- margin-top: 1em;
- font-size: smaller; }
-td.foot-os { text-align: right; }
-
-/* Sections and paragraphs. */
-
-.manual-text {
- margin-left: 3.8em; }
-.Nd { }
-section.Sh { }
-h1.Sh { margin-top: 1.2em;
- margin-bottom: 0.6em;
- margin-left: -3.2em;
- font-size: 110%; }
-section.Ss { }
-h2.Ss { margin-top: 1.2em;
- margin-bottom: 0.6em;
- margin-left: -1.2em;
- font-size: 105%; }
-.Pp { margin: 0.6em 0em; }
-.Sx { }
-.Xr { }
-
-/* Displays and lists. */
-
-.Bd { }
-.Bd-indent { margin-left: 3.8em; }
-
-.Bl-bullet { list-style-type: disc;
- padding-left: 1em; }
-.Bl-bullet > li { }
-.Bl-dash { list-style-type: none;
- padding-left: 0em; }
-.Bl-dash > li:before {
- content: "\2014 "; }
-.Bl-item { list-style-type: none;
- padding-left: 0em; }
-.Bl-item > li { }
-.Bl-compact > li {
- margin-top: 0em; }
-
-.Bl-enum { padding-left: 2em; }
-.Bl-enum > li { }
-.Bl-compact > li {
- margin-top: 0em; }
-
-.Bl-diag { }
-.Bl-diag > dt {
- font-style: normal;
- font-weight: bold; }
-.Bl-diag > dd {
- margin-left: 0em; }
-.Bl-hang { }
-.Bl-hang > dt { }
-.Bl-hang > dd {
- margin-left: 5.5em; }
-.Bl-inset { }
-.Bl-inset > dt { }
-.Bl-inset > dd {
- margin-left: 0em; }
-.Bl-ohang { }
-.Bl-ohang > dt { }
-.Bl-ohang > dd {
- margin-left: 0em; }
-.Bl-tag { margin-top: 0.6em;
- margin-left: 5.5em; }
-.Bl-tag > dt {
- float: left;
- margin-top: 0em;
- margin-left: -5.5em;
- padding-right: 0.5em;
- vertical-align: top; }
-.Bl-tag > dd {
- clear: right;
- width: 100%;
- margin-top: 0em;
- margin-left: 0em;
- margin-bottom: 0.6em;
- vertical-align: top;
- overflow: auto; }
-.Bl-compact { margin-top: 0em; }
-.Bl-compact > dd {
- margin-bottom: 0em; }
-.Bl-compact > dt {
- margin-top: 0em; }
-
-.Bl-column { }
-.Bl-column > tbody > tr { }
-.Bl-column > tbody > tr > td {
- margin-top: 1em; }
-.Bl-compact > tbody > tr > td {
- margin-top: 0em; }
-
-.Rs { font-style: normal;
- font-weight: normal; }
-.RsA { }
-.RsB { font-style: italic;
- font-weight: normal; }
-.RsC { }
-.RsD { }
-.RsI { font-style: italic;
- font-weight: normal; }
-.RsJ { font-style: italic;
- font-weight: normal; }
-.RsN { }
-.RsO { }
-.RsP { }
-.RsQ { }
-.RsR { }
-.RsT { text-decoration: underline; }
-.RsU { }
-.RsV { }
-
-.eqn { }
-.tbl td { vertical-align: middle; }
-
-.HP { margin-left: 3.8em;
- text-indent: -3.8em; }
-
-/* Semantic markup for command line utilities. */
-
-table.Nm { }
-code.Nm { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Fl { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Cm { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Ar { font-style: italic;
- font-weight: normal; }
-.Op { display: inline; }
-.Ic { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Ev { font-style: normal;
- font-weight: normal;
- font-family: monospace; }
-.Pa { font-style: italic;
- font-weight: normal; }
-
-/* Semantic markup for function libraries. */
-
-.Lb { }
-code.In { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-a.In { }
-.Fd { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Ft { font-style: italic;
- font-weight: normal; }
-.Fn { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Fa { font-style: italic;
- font-weight: normal; }
-.Vt { font-style: italic;
- font-weight: normal; }
-.Va { font-style: italic;
- font-weight: normal; }
-.Dv { font-style: normal;
- font-weight: normal;
- font-family: monospace; }
-.Er { font-style: normal;
- font-weight: normal;
- font-family: monospace; }
-
-/* Various semantic markup. */
-
-.An { }
-.Lk { }
-.Mt { }
-.Cd { font-style: normal;
- font-weight: bold;
- font-family: inherit; }
-.Ad { font-style: italic;
- font-weight: normal; }
-.Ms { font-style: normal;
- font-weight: bold; }
-.St { }
-.Ux { }
-
-/* Physical markup. */
-
-.Bf { display: inline; }
-.No { font-style: normal;
- font-weight: normal; }
-.Em { font-style: italic;
- font-weight: normal; }
-.Sy { font-style: normal;
- font-weight: bold; }
-.Li { font-style: normal;
- font-weight: normal;
- font-family: monospace; }
-
-/* Tooltip support. */
-
-h1.Sh, h2.Ss { position: relative; }
-.An, .Ar, .Cd, .Cm, .Dv, .Em, .Er, .Ev, .Fa, .Fd, .Fl, .Fn, .Ft,
-.Ic, code.In, .Lb, .Lk, .Ms, .Mt, .Nd, code.Nm, .Pa, .Rs,
-.St, .Sx, .Sy, .Va, .Vt, .Xr {
- display: inline-block;
- position: relative; }
-
-.An::before { content: "An"; }
-.Ar::before { content: "Ar"; }
-.Cd::before { content: "Cd"; }
-.Cm::before { content: "Cm"; }
-.Dv::before { content: "Dv"; }
-.Em::before { content: "Em"; }
-.Er::before { content: "Er"; }
-.Ev::before { content: "Ev"; }
-.Fa::before { content: "Fa"; }
-.Fd::before { content: "Fd"; }
-.Fl::before { content: "Fl"; }
-.Fn::before { content: "Fn"; }
-.Ft::before { content: "Ft"; }
-.Ic::before { content: "Ic"; }
-code.In::before { content: "In"; }
-.Lb::before { content: "Lb"; }
-.Lk::before { content: "Lk"; }
-.Ms::before { content: "Ms"; }
-.Mt::before { content: "Mt"; }
-.Nd::before { content: "Nd"; }
-code.Nm::before { content: "Nm"; }
-.Pa::before { content: "Pa"; }
-.Rs::before { content: "Rs"; }
-h1.Sh::before { content: "Sh"; }
-h2.Ss::before { content: "Ss"; }
-.St::before { content: "St"; }
-.Sx::before { content: "Sx"; }
-.Sy::before { content: "Sy"; }
-.Va::before { content: "Va"; }
-.Vt::before { content: "Vt"; }
-.Xr::before { content: "Xr"; }
-
-.An::before, .Ar::before, .Cd::before, .Cm::before,
-.Dv::before, .Em::before, .Er::before, .Ev::before,
-.Fa::before, .Fd::before, .Fl::before, .Fn::before, .Ft::before,
-.Ic::before, code.In::before, .Lb::before, .Lk::before,
-.Ms::before, .Mt::before, .Nd::before, code.Nm::before,
-.Pa::before, .Rs::before,
-h1.Sh::before, h2.Ss::before, .St::before, .Sx::before, .Sy::before,
-.Va::before, .Vt::before, .Xr::before {
- opacity: 0;
- transition: .15s ease opacity;
- pointer-events: none;
- position: absolute;
- bottom: 100%;
- box-shadow: 0 0 .35em #000;
- padding: .15em .25em;
- white-space: nowrap;
- font-family: Helvetica,Arial,sans-serif;
- font-style: normal;
- font-weight: bold;
- color: black;
- background: #fff; }
-.An:hover::before, .Ar:hover::before, .Cd:hover::before, .Cm:hover::before,
-.Dv:hover::before, .Em:hover::before, .Er:hover::before, .Ev:hover::before,
-.Fa:hover::before, .Fd:hover::before, .Fl:hover::before, .Fn:hover::before,
-.Ft:hover::before, .Ic:hover::before, code.In:hover::before,
-.Lb:hover::before, .Lk:hover::before, .Ms:hover::before, .Mt:hover::before,
-.Nd:hover::before, code.Nm:hover::before, .Pa:hover::before,
-.Rs:hover::before, h1.Sh:hover::before, h2.Ss:hover::before, .St:hover::before,
-.Sx:hover::before, .Sy:hover::before, .Va:hover::before, .Vt:hover::before,
-.Xr:hover::before {
- opacity: 1;
- pointer-events: inherit; }
-
-/* Overrides to avoid excessive margins on small devices. */
-
-@media (max-width: 37.5em) {
-.manual-text {
- margin-left: 0.5em; }
-h1.Sh, h2.Ss { margin-left: 0em; }
-.Bd-indent { margin-left: 2em; }
-.Bl-hang > dd {
- margin-left: 2em; }
-.Bl-tag { margin-left: 2em; }
-.Bl-tag > dt {
- margin-left: -2em; }
-.HP { margin-left: 2em;
- text-indent: -2em; }
-}
--- a/docs/rgbasm.1.html
+++ /dev/null
@@ -1,295 +1,0 @@
-<!DOCTYPE html>
-<html>
-<!-- This is an automatically generated file. Do not edit.
- This file is part of RGBDS.
-
- Copyright (c) 2010-2019, Anthony J. Bentley and RGBDS contributors.
-
- SPDX-License-Identifier: MIT
- -->
-<head>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBASM(1)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBASM(1)</td>
- <td class="head-vol">General Commands Manual</td>
- <td class="head-rtitle">RGBASM(1)</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">rgbasm</code> —
-<span class="Nd">Game Boy assembler</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<table class="Nm">
- <tr>
- <td><code class="Nm">rgbasm</code></td>
- <td>[<code class="Fl"><a href="#E">-E</a><a href="#h">h</a><a href="#L">L</a><a href="#V">V</a><a href="#v">v</a><a href="#w">w</a></code>] [<code class="Fl"><a href="#b">-b</a></code>
- <var class="Ar">chars</var>] [<code class="Fl"><a href="#D">-D</a></code>
- <var class="Ar">name</var>[=<var class="Ar">value</var>]]
- [<code class="Fl"><a href="#g">-g</a></code> <var class="Ar">chars</var>]
- [<code class="Fl"><a href="#i">-i</a></code> <var class="Ar">path</var>]
- [<code class="Fl"><a href="#M">-M</a></code> <var class="Ar">depend_file</var>]
- [<code class="Fl"><a href="#M">-M</a><a href="#G">G</a></code>] [<code class="Fl"><a href="#M">-M</a><a href="#P">P</a></code>]
- [<code class="Fl"><a href="#M">-M</a><a href="#T">T</a></code> <var class="Ar">target_file</var>]
- [<code class="Fl"><a href="#M">-M</a><a href="#Q">Q</a></code> <var class="Ar">target_file</var>]
- [<code class="Fl"><a href="#o">-o</a></code> <var class="Ar">out_file</var>]
- [<code class="Fl"><a href="#p">-p</a></code> <var class="Ar">pad_value</var>]
- [<code class="Fl"><a href="#r">-r</a></code> <var class="Ar">recursion_depth</var>]
- [<code class="Fl"><a href="#W">-W</a></code> <var class="Ar">warning</var>]
- <var class="Ar">file ...</var></td>
- </tr>
-</table>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-The <code class="Nm">rgbasm</code> program creates an RGB object file from an
- assembly source file. The input <var class="Ar">file</var> can be a file path,
- or <code class="Cm">-</code> denoting <code class="Cm">stdin</code>.
-<p class="Pp">Note that options can be abbreviated as long as the abbreviation
- is unambiguous: <code class="Fl">--verb</code> is
- <code class="Fl">--verbose</code>, but
- <code class="Fl">--ver</code> is invalid because it
- could also be <code class="Fl">--version</code>. The
- arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#b"><code class="Fl" id="b">-b</code></a>
- <var class="Ar">chars</var>,
- <code class="Fl">--binary-digits</code>
- <var class="Ar">chars</var></dt>
- <dd>Change the two characters used for binary constants. The defaults are
- 01.</dd>
- <dt><a class="permalink" href="#D"><code class="Fl" id="D">-D</code></a>
- <var class="Ar">name</var>[=<var class="Ar">value</var>],
- <code class="Fl">-</code> <code class="Fl">-define</code>
- <var class="Ar">name</var>[=<var class="Ar">value</var>]</dt>
- <dd>Add a string symbol to the compiled source code. This is equivalent to
- ‘<code class="Li"><var class="Ar">name</var> <code class="Ic">EQUS
- "</code><var class="Ar">value</var>"</code>’ in code, or
- ‘<code class="Li"><var class="Ar">name</var> <code class="Ic">EQUS
- "1"</code></code>’ if <var class="Ar">value</var> is not
- specified.</dd>
- <dt><a class="permalink" href="#E"><code class="Fl" id="E">-E</code></a>,
- <code class="Fl">--export-all</code></dt>
- <dd>Export all labels, including unreferenced and local labels.</dd>
- <dt><a class="permalink" href="#g"><code class="Fl" id="g">-g</code></a>
- <var class="Ar">chars</var>,
- <code class="Fl">--gfx-chars</code>
- <var class="Ar">chars</var></dt>
- <dd>Change the four characters used for gfx constants. The defaults are
- 0123.</dd>
- <dt><a class="permalink" href="#h"><code class="Fl" id="h">-h</code></a>,
- <code class="Fl">--halt-without-nop</code></dt>
- <dd>By default, <code class="Nm">rgbasm</code> inserts a
- <code class="Ic">nop</code> instruction immediately after any
- <code class="Ic">halt</code> instruction. The <code class="Fl">-h</code>
- option disables this behavior.</dd>
- <dt><a class="permalink" href="#i"><code class="Fl" id="i">-i</code></a>
- <var class="Ar">path</var>,
- <code class="Fl">--include</code>
- <var class="Ar">path</var></dt>
- <dd>Add an include path.</dd>
- <dt><a class="permalink" href="#L"><code class="Fl" id="L">-L</code></a>,
- <code class="Fl">--preserve-ld</code></dt>
- <dd>Disable the optimization that turns loads of the form <code class="Ic">LD
- [$FF00+n8],A</code> into the opcode <code class="Ic">LDH
- [$FF00+n8],A</code> in order to have full control of the result in the
- final ROM.</dd>
- <dt><a class="permalink" href="#M"><code class="Fl" id="M">-M</code></a>
- <var class="Ar">depend_file</var>,
- <code class="Fl">--dependfile</code>
- <var class="Ar">depend_file</var></dt>
- <dd>Print <a class="Xr">make(1)</a> dependencies to
- <var class="Ar">depend_file</var>.</dd>
- <dt><a class="permalink" href="#MG"><code class="Fl" id="MG">-MG</code></a></dt>
- <dd>To be used in conjunction with <code class="Fl">-M</code>. This makes
- <code class="Nm">rgbasm</code> assume that missing files are
- auto-generated: when <code class="Ic">INCLUDE</code> or
- <code class="Ic">INCBIN</code> is attempted on a non-existent file, it is
- added as a dependency, then <code class="Nm">rgbasm</code> exits normally
- instead of erroring out. This feature is used in automatic updating of
- makefiles.</dd>
- <dt><a class="permalink" href="#MP"><code class="Fl" id="MP">-MP</code></a></dt>
- <dd>When enabled, this causes a phony target to be added for each dependency
- other than the main file. This prevents <a class="Xr">make(1)</a> from
- erroring out when dependency files are deleted.</dd>
- <dt><a class="permalink" href="#MT"><code class="Fl" id="MT">-MT</code></a>
- <var class="Ar">target_file</var></dt>
- <dd>Add a target to the rules emitted by <code class="Fl">-M</code>. The exact
- string provided will be written, including spaces and special characters.
- <div class="Bd Bd-indent"><code class="Li"><code class="Fl">-MT</code>
- <code class="Fl">-fileA</code> <code class="Fl">-MT</code>
- <code class="Fl">-fileB</code></code></div>
- is equivalent to
- <div class="Bd Bd-indent"><code class="Li"><code class="Fl">-MT</code>
- <code class="Fl">-'fileA</code>
- <code class="Fl">-fileB'</code>.</code></div>
- If neither this nor <code class="Fl">-MQ</code> is specified, the output
- file name is used.</dd>
- <dt><a class="permalink" href="#MQ"><code class="Fl" id="MQ">-MQ</code></a>
- <var class="Ar">target_file</var></dt>
- <dd>Same as <code class="Fl">-MT</code>, but additionally escapes any special
- <a class="Xr">make(1)</a> characters, essentially ‘$’.</dd>
- <dt><a class="permalink" href="#o"><code class="Fl" id="o">-o</code></a>
- <var class="Ar">out_file</var>,
- <code class="Fl">--output</code>
- <var class="Ar">out_file</var></dt>
- <dd>Write an object file to the given filename.</dd>
- <dt><a class="permalink" href="#p"><code class="Fl" id="p">-p</code></a>
- <var class="Ar">pad_value</var>,
- <code class="Fl">--pad-value</code>
- <var class="Ar">pad_value</var></dt>
- <dd>When padding an image, pad with this value. The default is 0x00.</dd>
- <dt><a class="permalink" href="#r"><code class="Fl" id="r">-r</code></a>
- <var class="Ar">recursion_depth</var>,
- <code class="Fl">--recursion-depth</code>
- <var class="Ar">recursion_depth</var></dt>
- <dd>Specifies the recursion depth at which RGBASM will assume being in an
- infinite loop.</dd>
- <dt><a class="permalink" href="#V"><code class="Fl" id="V">-V</code></a>,
- <code class="Fl">--version</code></dt>
- <dd>Print the version of the program and exit.</dd>
- <dt><a class="permalink" href="#v"><code class="Fl" id="v">-v</code></a>,
- <code class="Fl">--verbose</code></dt>
- <dd>Be verbose.</dd>
- <dt><a class="permalink" href="#W"><code class="Fl" id="W">-W</code></a>
- <var class="Ar">warning</var>,
- <code class="Fl">--warning</code>
- <var class="Ar">warning</var></dt>
- <dd>Set warning flag <var class="Ar">warning</var>. A warning message will be
- printed if <var class="Ar">warning</var> is an unknown warning flag. See
- the <a class="Sx" href="#DIAGNOSTICS">DIAGNOSTICS</a> section for a list
- of warnings.</dd>
- <dt><a class="permalink" href="#w"><code class="Fl" id="w">-w</code></a></dt>
- <dd>Disable all warning output, even when turned into errors.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
-Warnings are diagnostic messages that indicate possibly erroneous behavior that
- does not necessarily compromise the assembling process. The following options
- alter the way warnings are processed.
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#Werror"><code class="Fl" id="Werror">-Werror</code></a></dt>
- <dd>Make all warnings into errors.</dd>
- <dt><a class="permalink" href="#Werror="><code class="Fl" id="Werror=">-Werror=</code></a></dt>
- <dd>Make the specified warning into an error. A warning's name is appended
- (example: <code class="Fl">-Werror=obsolete</code>), and this warning is
- implicitly enabled and turned into an error. This is an error if used with
- a meta warning, such as <code class="Fl">-Werror=all</code>.</dd>
-</dl>
-<p class="Pp">The following warnings are “meta” warnings, that
- enable a collection of other warnings. If a specific warning is toggled via
- a meta flag and a specific one, the more specific one takes priority. The
- position on the command-line acts as a tie breaker, the last one taking
- effect.</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#Wall"><code class="Fl" id="Wall">-Wall</code></a></dt>
- <dd>This enables warnings that are likely to indicate an error or undesired
- behavior, and that can easily be fixed.</dd>
- <dt><a class="permalink" href="#Wextra"><code class="Fl" id="Wextra">-Wextra</code></a></dt>
- <dd>This enables extra warnings that are less likely to pose a problem, but
- that may still be wanted.</dd>
- <dt><a class="permalink" href="#Weverything"><code class="Fl" id="Weverything">-Weverything</code></a></dt>
- <dd>Enables literally every warning.</dd>
-</dl>
-<p class="Pp">The following warnings are actual warning flags; with each
- description, the corresponding warning flag is included. Note that each of
- these flag also has a negation (for example,
- <code class="Fl">-Wempty-entry</code> enables the warning that
- <code class="Fl">-Wno-empty-entry</code> disables). Only the non-default
- flag is listed here. Ignoring the “no-” prefix, entries are
- listed alphabetically.</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#Wno-assert"><code class="Fl" id="Wno-assert">-Wno-assert</code></a></dt>
- <dd>Warns when <code class="Ic">WARN</code><span class="No">-type</span>
- assertions fail. (See “Aborting the assembly process” in
- <a class="Xr" href="rgbasm.5.html">rgbasm(5)</a> for <code class="Ic">ASSERT</code>).</dd>
- <dt><a class="permalink" href="#Wbuiltin-args"><code class="Fl" id="Wbuiltin-args">-Wbuiltin-args</code></a></dt>
- <dd>Warn about incorrect arguments to built-in functions, such as
- <code class="Fn">STRSUB</code>() with indexes outside of the string's
- bounds. This warning is enabled by <code class="Fl">-Wall</code>.</dd>
- <dt><a class="permalink" href="#Wdiv"><code class="Fl" id="Wdiv">-Wdiv</code></a></dt>
- <dd>Warn when dividing the smallest negative integer by -1, which yields
- itself due to integer overflow.</dd>
- <dt><a class="permalink" href="#Wempty-entry"><code class="Fl" id="Wempty-entry">-Wempty-entry</code></a></dt>
- <dd>Warn when an empty entry is encountered in a <code class="Ic">db</code>,
- <code class="Ic">dw</code>, <code class="Ic">dl</code> list. This warning
- is enabled by <code class="Fl">-Wextra</code>.</dd>
- <dt><a class="permalink" href="#Wlarge-constant"><code class="Fl" id="Wlarge-constant">-Wlarge-constant</code></a></dt>
- <dd>Warn when a constant too large to fit in a signed 32-bit integer is
- encountered. This warning is enabled by
- <code class="Fl">-Wall</code>.</dd>
- <dt><a class="permalink" href="#Wlong-string"><code class="Fl" id="Wlong-string">-Wlong-string</code></a></dt>
- <dd>Warn when a string too long to fit in internal buffers is encountered.
- This warning is enabled by <code class="Fl">-Wall</code>.</dd>
- <dt><a class="permalink" href="#Wno-obsolete"><code class="Fl" id="Wno-obsolete">-Wno-obsolete</code></a></dt>
- <dd>Warn when obsolete constructs such as the <code class="Ic">jp [hl]</code>
- instruction or <code class="Ic">HOME</code> section type are
- encountered.</dd>
- <dt><a class="permalink" href="#Wshift"><code class="Fl" id="Wshift">-Wshift</code></a></dt>
- <dd>Warn when shifting right a negative value. Use a division by 2^N
- instead.</dd>
- <dt><a class="permalink" href="#Wshift-amount"><code class="Fl" id="Wshift-amount">-Wshift-amount</code></a></dt>
- <dd>Warn when a shift's operand is negative or greater than 32.</dd>
- <dt><a class="permalink" href="#Wno-truncation"><code class="Fl" id="Wno-truncation">-Wno-truncation</code></a></dt>
- <dd>Warn when an implicit truncation (for example, <code class="Ic">db</code>)
- loses some bits.</dd>
- <dt><a class="permalink" href="#Wno-user"><code class="Fl" id="Wno-user">-Wno-user</code></a></dt>
- <dd>Warn when the <code class="Ic">WARN</code> built-in is executed. (See
- “Aborting the assembly process” in
- <a class="Xr" href="rgbasm.5.html">rgbasm(5)</a> for <code class="Ic">WARN</code>).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-You can assemble a source file in two ways.
-<p class="Pp">Straightforward way:</p>
-<div class="Bd Bd-indent"><code class="Li">$ rgbasm -o bar.o
- foo.asm</code></div>
-<p class="Pp">Pipes way:</p>
-<div class="Bd Bd-indent"><code class="Li">$ cat foo.asm | rgbasm -o bar.o
- -</code></div>
-<div class="Bd Bd-indent"><code class="Li">$ rgbasm -o bar.o - <
- foo.asm</code></div>
-<p class="Pp">The resulting object file is not yet a usable ROM image—it
- must first be run through <a class="Xr" href="rgblink.1.html">rgblink(1)</a> and then
- <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-Please report bugs on
- <a class="Lk" href="https://github.com/rednex/rgbds/issues">GitHub</a>.
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.5.html">rgbasm(5)</a>, <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>,
- <a class="Xr" href="rgblink.1.html">rgblink(1)</a>, <a class="Xr" href="rgbds.5.html">rgbds(5)</a>,
- <a class="Xr" href="rgbds.7.html">rgbds(7)</a>, <a class="Xr" href="gbz80.7.html">gbz80(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<code class="Nm">rgbasm</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">July 8, 2019</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgbasm.5.html
+++ /dev/null
@@ -1,1751 +1,0 @@
-<!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 name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBASM(5)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBASM(5)</td>
- <td class="head-vol">File Formats Manual</td>
- <td class="head-rtitle">RGBASM(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">rgbasm</code> —
-<span class="Nd">language documentation</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-This is the full description of the language used by
- <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>. The description of the instructions supported by
- the Game Boy CPU is in <a class="Xr" href="gbz80.7.html">gbz80(7)</a>.
-<p class="Pp">It is strongly recommended to have some familiarity with the Game
- Boy hardware before reading this document. RGBDS is specifically targeted at
- the Game Boy, and thus a lot of its features tie directly to its concepts.
- This document is not intended to be a Game Boy hardware reference.</p>
-<p class="Pp">Generally, “the linker” will refer to
- <a class="Xr" href="rgblink.1.html">rgblink(1)</a>, but any program that processes RGB object
- files (described in <a class="Xr" href="rgbds.5.html">rgbds(5)</a>) can be used in its
- place.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNTAX"><a class="permalink" href="#SYNTAX">SYNTAX</a></h1>
-The syntax is line‐based, just as in any other assembler, meaning that
- you do one instruction or pseudo‐op per line:
-<p class="Pp"></p>
-<div class="Bd Bd-indent"><code class="Li">[<var class="Ar">label</var>]
- [<var class="Ar">instruction</var>]
- [<var class="Ar">; comment</var>]</code></div>
-<p class="Pp">Example:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-John: ld a,87 ;Weee
-</pre>
-</div>
-<p class="Pp">All reserved keywords (pseudo‐ops, mnemonics, registers
- etc.) are case‐insensitive, all identifiers (symbol names) are
- case-sensitive.</p>
-<p class="Pp">Comments are used to give humans information about the code, such
- as explanations. The assembler <i class="Em">always</i> ignores comments and
- their contents.</p>
-<p class="Pp">There are two syntaxes for comments. The most common is that
- anything that follows a semicolon ‘<code class="Li">;</code>’
- not inside a string, is a comment until the end of the line. The other is
- that lines beginning with a ‘<code class="Li">*</code>’ (not
- even spaces before it) are ignored. This second syntax is deprecated (will
- be removed in a future version) and should be replaced with the first
- one.</p>
-<p class="Pp">Sometimes lines can be too long and it may be necessary to split
- them. To do so, put a backslash at the end of the line:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
- DB 1, 2, 3, \
- 4, 5, 6, \ ; Put it before any comments
- 7, 8, 9
-</pre>
-</div>
-<p class="Pp">This works anywhere in the code except inside of strings. To split
- strings it is needed to use <code class="Fn">STRCAT</code>() like this:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
- db STRCAT("Hello ", \
- "world!")
-</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXPRESSIONS"><a class="permalink" href="#EXPRESSIONS">EXPRESSIONS</a></h1>
-An expression can be composed of many things. Numerical expressions are always
- evaluated using signed 32-bit math. Zero is considered to be the only
- "false" number, all non-zero numbers (including negative) are
- "true".
-<p class="Pp">An expression is said to be "constant" if
- <code class="Nm">rgbasm</code> knows its value. This is generally always the
- case, unless a label is involved, as explained in the
- <a class="Sx" href="#SYMBOLS">SYMBOLS</a> section.</p>
-<p class="Pp">The instructions in the macro-language generally require constant
- expressions.</p>
-<section class="Ss">
-<h2 class="Ss" id="Numeric_Formats"><a class="permalink" href="#Numeric_Formats">Numeric
- Formats</a></h2>
-There are a number of numeric formats.
-<table class="Bl-column Bd-indent">
- <tr>
- <th>Format type</th>
- <th>Prefix</th>
- <th>Accepted characters</th>
- </tr>
- <tr>
- <td>Hexadecimal</td>
- <td>$</td>
- <td>0123456789ABCDEF</td>
- </tr>
- <tr>
- <td>Decimal</td>
- <td>none</td>
- <td>0123456789</td>
- </tr>
- <tr>
- <td>Octal</td>
- <td>&</td>
- <td>01234567</td>
- </tr>
- <tr>
- <td>Binary</td>
- <td>%</td>
- <td>01</td>
- </tr>
- <tr>
- <td>Fixed point (16.16)</td>
- <td>none</td>
- <td>01234.56789</td>
- </tr>
- <tr>
- <td>Character constant</td>
- <td>none</td>
- <td>"ABYZ"</td>
- </tr>
- <tr>
- <td>Gameboy graphics</td>
- <td>`</td>
- <td>0123</td>
- </tr>
-</table>
-<p class="Pp">The "character constant" form yields the value the
- character maps to in the current charmap. For example, by default (refer to
- <a class="Xr">ascii(7)</a>) ‘"A"’ yields 65. See
- <a class="Sx" href="#Character_maps">Character maps</a> for information on
- charmaps.</p>
-<p class="Pp">The last one, Gameboy graphics, is quite interesting and useful.
- After the backtick, 8 digits between 0 and 3 are expected, corresponding to
- pixel values. The resulting value is the two bytes of tile data that would
- produce that row of pixels. For example, ‘`01012323’ is
- equivalent to ‘$0F55’.</p>
-<p class="Pp">You can also use symbols, which are implicitly replaced with their
- value.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Operators"><a class="permalink" href="#Operators">Operators</a></h2>
-A great number of operators you can use in expressions are available (listed
- from highest to lowest precedence):
-<table class="Bl-column Bd-indent">
- <tr>
- <th>Operator</th>
- <th>Meaning</th>
- </tr>
- <tr>
- <td><a class="permalink" href="#(__&)"><code class="Li" id="(__&)">(
- )</code></a></td>
- <td>Precedence override</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#FUNC()"><code class="Li" id="FUNC()">FUNC()</code></a></td>
- <td>Built-in function call</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#~_+_-"><code class="Li" id="~_+_-">~ +
- -</code></a></td>
- <td>Unary complement/plus/minus</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#*_/__"><code class="Li" id="*_/__">* /
- %</code></a></td>
- <td>Multiply/divide/modulo</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#_____"><code class="Li" id="_____"><<
- >></code></a></td>
- <td>Shift left/right</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#&__&___"><code class="Li" id="&__&___">&
- | ^</code></a></td>
- <td>Binary and/or/xor</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#+_-"><code class="Li" id="+_-">+
- -</code></a></td>
- <td>Add/subtract</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#!=_==__=__=____"><code class="Li" id="!=_==__=__=____">!=
- == <= >= < ></code></a></td>
- <td>Comparison</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#&&___"><code class="Li" id="&&___">&&
- ||</code></a></td>
- <td>Boolean and/or</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#!"><code class="Li" id="!">!</code></a></td>
- <td>Unary not</td>
- </tr>
-</table>
-<p class="Pp"><code class="Ic">~</code> complements a value by inverting all its
- bits.</p>
-<p class="Pp"><code class="Ic">%</code> is used to get the remainder of the
- corresponding division. ‘5 % 2’ is 1.</p>
-<p class="Pp">Shifting works by shifting all bits in the left operand either
- left (‘<<’) or right (‘>>’) by the
- right operand's amount. When shifting left, all newly-inserted bits are
- reset; when shifting right, they are copies of the original most significant
- bit instead. This makes ‘a << b’ and ‘a >>
- b’ equivalent to multiplying and dividing by 2 to the power of b,
- respectively.</p>
-<p class="Pp">Comparison operators return 0 if the comparison is false, and 1
- otherwise.</p>
-<p class="Pp">Unlike in a lot of languages, and for technical reasons,
- <code class="Nm">rgbasm</code> still evaluates both operands of
- ‘&&’ and ‘||’.</p>
-<p class="Pp">! returns 1 if the operand was 0, and 0 otherwise.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Fixed__u2010_point_Expressions"><a class="permalink" href="#Fixed__u2010_point_Expressions">Fixed‐point
- Expressions</a></h2>
-Fixed-point numbers are basically normal (32-bit) integers, which count
- 65536th's instead of entire units, offering better precision than integers but
- limiting the range of values. The upper 16 bits are used for the integer part
- and the lower 16 bits are used for the fraction (65536ths). Since they are
- still akin to integers, you can use them in normal integer expressions, and
- some integer operators like ‘+’ and ‘-’ don't care
- whether the operands are integers or fixed-point. You can easily truncate a
- fixed-point number into an integer by shifting it right by 16 bits. It follows
- that you can convert an integer to a fixed-point number by shifting it left.
-<p class="Pp">The following functions are designed to operate with fixed-point
- numbers:</p>
-<table class="Bl-column Bd-indent">
- <tr>
- <th>Name</th>
- <th>Operation</th>
- </tr>
- <tr>
- <td><code class="Fn">DIV</code>(<var class="Fa">x</var>,
- <var class="Fa">y</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>x</mi><mo>÷</mo><mi>y</mi></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">MUL</code>(<var class="Fa">x</var>,
- <var class="Fa">y</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>x</mi><mo>×</mo><mi>y</mi></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">SIN</code>(<var class="Fa">x</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>sin</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">COS</code>(<var class="Fa">x</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>cos</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">TAN</code>(<var class="Fa">x</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>tan</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">ASIN</code>(<var class="Fa">x</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>asin</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">ACOS</code>(<var class="Fa">x</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>acos</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">ATAN</code>(<var class="Fa">x</var>)</td>
- <td>
- <math class="eqn">
- <mrow><mi>atan</mi><mo>(</mo><mi>x</mi><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
- <tr>
- <td><code class="Fn">ATAN2</code>(<var class="Fa">x</var>,
- <var class="Fa">y</var>)</td>
- <td>Angle between
- <math class="eqn">
- <mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow>
- </math>
- and
- <math class="eqn">
- <mrow><mo>(</mo><mn>1</mn><mo>,</mo><mn>0</mn><mo>)</mo></mrow>
- </math>
- </td>
- </tr>
-</table>
-<p class="Pp">These functions are useful for automatic generation of various
- tables. Example: assuming a circle has 65536.0 degrees, and sine values are
- in range [-1.0 ; 1.0]:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-; --
-; -- Generate a 256-byte sine table with values between 0 and 128
-; --
-ANGLE = 0.0
- REPT 256
- db MUL(64.0, SIN(ANGLE) + 1.0) >> 16
-ANGLE = ANGLE + 256.0 ; 256 = 65536 / table_len, with table_len = 256
- ENDR
-</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="String_Expressions"><a class="permalink" href="#String_Expressions">String
- Expressions</a></h2>
-The most basic string expression is any number of characters contained in double
- quotes (‘<code class="Li">"for instance"</code>’). The
- backslash character ‘<code class="Li">\</code>’ is special in
- that it causes the character following it to be “escaped”,
- meaning that it is treated differently from normal. There are a number of
- escape sequences you can use within a string:
-<table class="Bl-column Bd-indent">
- <tr>
- <th>String</th>
- <th>Meaning</th>
- </tr>
- <tr>
- <td>‘<code class="Li">\\</code>’</td>
- <td>Produces a backslash</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\"</code>’</td>
- <td>Produces a double quote without terminating</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\,</code>’</td>
- <td>Comma</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\{</code>’</td>
- <td>Curly bracket left</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\}</code>’</td>
- <td>Curly bracket right</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\n</code>’</td>
- <td>Newline ($0A)</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\r</code>’</td>
- <td>Carriage return ($0D)</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\t</code>’</td>
- <td>Tab ($09)</td>
- </tr>
- <tr>
- <td>“\1” – “\9”</td>
- <td>Macro argument (Only the body of a macro, see
- <a class="Sx" href="#Invoking_macros">Invoking macros</a>)</td>
- </tr>
- <tr>
- <td>‘<code class="Li">\@</code>’</td>
- <td>Label name suffix (Only in the body of macros and REPTs)</td>
- </tr>
-</table>
-(Note that some of those can be used outside of strings, when noted further in
- this document.)
-<p class="Pp">A funky feature is
- ‘<code class="Li">{symbol}</code>’ within a string, called
- “symbol interpolation”. This will paste
- <var class="Ar">symbol</var>'s contents as a string. If it's a string
- symbol, the string is simply inserted. If it's a numeric symbol, its value
- is converted to hexadecimal notation with a dollar sign ‘$’
- prepended.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-TOPIC equs "life, the universe, and everything"
-ANSWER = 42
-; Prints "The answer to life, the universe, and everything is $2A"
-PRINTT "The answer to {TOPIC} is {ANSWER}\n"
-</pre>
-</div>
-<p class="Pp">Symbol interpolations can be nested, too!</p>
-<p class="Pp">It's possible to change the way numeric symbols are converted by
- specifying a print type like so:
- ‘<code class="Li">{d:symbol}</code>’. Valid print types
- are:</p>
-<table class="Bl-column Bd-indent">
- <tr>
- <th>Print type</th>
- <th>Format</th>
- <th>Example</th>
- </tr>
- <tr>
- <td>‘<code class="Li">d</code>’</td>
- <td>Decimal</td>
- <td>42</td>
- </tr>
- <tr>
- <td>‘<code class="Li">x</code>’</td>
- <td>Lowercase hexadecimal</td>
- <td>2a</td>
- </tr>
- <tr>
- <td>‘<code class="Li">X</code>’</td>
- <td>Uppercase hexadecimal</td>
- <td>2A</td>
- </tr>
- <tr>
- <td>‘<code class="Li">b</code>’</td>
- <td>Binary</td>
- <td>101010</td>
- </tr>
-</table>
-<p class="Pp">Note that print types should only be used with numeric values, not
- strings.</p>
-<p class="Pp">HINT: The <code class="Ic">{symbol}</code> construct can also be
- used outside strings. The symbol's value is again inserted directly.</p>
-<p class="Pp">The following functions operate on string expressions. Most of
- them return a string, however some of these functions actually return an
- integer and can be used as part of an integer expression!</p>
-<table class="Bl-column">
- <tr>
- <th>Name</th>
- <th>Operation</th>
- </tr>
- <tr>
- <td><code class="Fn">STRLEN</code>(<var class="Fa">string</var>)</td>
- <td>Returns the number of characters in <var class="Ar">string</var>.</td>
- </tr>
- <tr>
- <td><code class="Fn">STRCAT</code>(<var class="Fa">str1</var>,
- <var class="Fa">str2</var>)</td>
- <td>Appends <var class="Ar">str2</var> <span class="No">to</span>
- <var class="Ar">str1</var>.</td>
- </tr>
- <tr>
- <td><code class="Fn">STRCMP</code>(<var class="Fa">str1</var>,
- <var class="Fa">str2</var>)</td>
- <td>Returns negative if <var class="Ar">str1</var> <span class="No">is
- alphabetically lower than</span> <var class="Ar">str2</var> ,
- <span class="No">zero if they match, positive if</span>
- <var class="Ar">str1</var> <span class="No">is greater than</span>
- <var class="Ar">str2</var>.</td>
- </tr>
- <tr>
- <td><code class="Fn">STRIN</code>(<var class="Fa">str1</var>,
- <var class="Fa">str2</var>)</td>
- <td>Returns the position of <var class="Ar">str2</var>
- <span class="No">in</span> <var class="Ar">str1</var> <span class="No">or
- zero if it's not present</span> (first character is position 1).</td>
- </tr>
- <tr>
- <td><code class="Fn">STRSUB</code>(<var class="Fa">str</var>,
- <var class="Fa">pos</var>, <var class="Fa">len</var>)</td>
- <td>Returns a substring from <var class="Ar">str</var>
- <span class="No">starting at</span> <var class="Ar">pos</var> (first
- character is position 1) and <var class="Ar">len</var>
- <span class="No">characters long.</span></td>
- </tr>
- <tr>
- <td><code class="Fn">STRUPR</code>(<var class="Fa">str</var>)</td>
- <td>Converts all characters in <var class="Ar">str</var> <span class="No">to
- capitals and returns the new string.</span></td>
- </tr>
- <tr>
- <td><code class="Fn">STRLWR</code>(<var class="Fa">str</var>)</td>
- <td>Converts all characters in <var class="Ar">str</var> <span class="No">to
- lower case and returns the new string.</span></td>
- </tr>
-</table>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Character_maps"><a class="permalink" href="#Character_maps">Character
- maps</a></h2>
-When writing text that is meant to be displayed in the Game Boy, the characters
- used in the source code may have a different encoding than the default of
- ASCII. For example, the tiles used for uppercase letters may be placed
- starting at tile index 128, which makes it difficult to add text strings to
- the ROM.
-<p class="Pp">Character maps allow mapping strings up to 16 characters long to
- an abitrary 8-bit value:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-CHARMAP "<LF>", 10
-CHARMAP "&iacute", 20
-CHARMAP "A", 128
-</pre>
-</div>
-By default, a character map contains ASCII encoding.
-<p class="Pp">It is possible to create multiple character maps and then switch
- between them as desired. This can be used to encode debug information in
- ASCII and use a different encoding for other purposes, for example.
- Initially, there is one character map called ‘main’ and it is
- automatically selected as the current character map from the beginning.
- There is also a character map stack that can be used to save and restore
- which character map is currently active.</p>
-<table class="Bl-column">
- <tr>
- <th>Command</th>
- <th>Meaning</th>
- </tr>
- <tr>
- <td><a class="permalink" href="#NEWCHARMAP"><code class="Ic" id="NEWCHARMAP">NEWCHARMAP</code></a>
- <var class="Ar">name</var></td>
- <td>Creates a new, empty character map called
- <var class="Ar">name</var>.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#NEWCHARMAP_2"><code class="Ic" id="NEWCHARMAP_2">NEWCHARMAP</code></a>
- <var class="Ar">name</var>, <var class="Ar">basename</var></td>
- <td>Creates a new character map called <var class="Ar">name</var>,
- <span class="No">copied from character map</span>
- <var class="Ar">basename</var>.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#SETCHARMAP"><code class="Ic" id="SETCHARMAP">SETCHARMAP</code></a>
- <var class="Ar">name</var></td>
- <td>Switch to character map <var class="Ar">name</var>.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#PUSHC"><code class="Ic" id="PUSHC">PUSHC</code></a></td>
- <td>Push the current character map onto the stack.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#POPC"><code class="Ic" id="POPC">POPC</code></a></td>
- <td>Pop a character map off the stack and switch to it.</td>
- </tr>
-</table>
-<p class="Pp"><b class="Sy">Note:</b> Character maps affect all strings in the
- file from the point in which they are defined, until switching to a
- different character map. This means that any string that the code may want
- to print as debug information will also be affected by it.</p>
-<p class="Pp"><b class="Sy">Note:</b> The output value of a mapping can be 0. If
- this happens, the assembler will treat this as the end of the string and the
- rest of it will be trimmed.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Other_functions"><a class="permalink" href="#Other_functions">Other
- functions</a></h2>
-There are a few other functions that do various useful things:
-<table class="Bl-column">
- <tr>
- <th>Name</th>
- <th>Operation</th>
- </tr>
- <tr>
- <td><code class="Fn">BANK</code>(<var class="Fa">arg</var>)</td>
- <td>Returns a bank number. If <var class="Ar">arg</var> is the symbol
- <code class="Ic">@</code>, this function returns the bank of the current
- section. If <var class="Ar">arg</var> is a string, it returns the bank of
- the section that has that name. If <var class="Ar">arg</var> is a label,
- it returns the bank number the label is in. The result may be constant if
- <code class="Nm">rgbasm</code> is able to compute it.</td>
- </tr>
- <tr>
- <td><code class="Fn">DEF</code>(<var class="Fa">label</var>)</td>
- <td>Returns TRUE (1) if <var class="Ar">label</var> has been defined, FALSE
- (0) otherwise. String symbols are not expanded within the
- parentheses.</td>
- </tr>
- <tr>
- <td><code class="Fn">HIGH</code>(<var class="Fa">arg</var>)</td>
- <td>Returns the top 8 bits of the operand if <var class="Ar">arg</var>
- <span class="No">is a label or constant, or the top 8-bit register if it
- is a 16-bit register.</span></td>
- </tr>
- <tr>
- <td><code class="Fn">LOW</code>(<var class="Fa">arg</var>)</td>
- <td>Returns the bottom 8 bits of the operand if <var class="Ar">arg</var>
- <span class="No">is a label or constant, or the bottom 8-bit register if
- it is a 16-bit register</span> (<code class="Cm">AF</code>
- <span class="No">isn't a valid register for this function</span>).</td>
- </tr>
- <tr>
- <td><code class="Fn">ISCONST</code>(<var class="Fa">arg</var>)</td>
- <td>Returns 1 if <var class="Ar">arg</var>'s value is known by RGBASM (e.g.
- if it can be an argument to <code class="Ic">IF</code>), or 0 if only
- RGBLINK can compute its value.</td>
- </tr>
-</table>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SECTIONS"><a class="permalink" href="#SECTIONS">SECTIONS</a></h1>
-Before you can start writing code, you must define a section. This tells the
- assembler what kind of information follows and, if it is code, where to put
- it.
-<p class="Pp"></p>
-<div class="Bd Bd-indent"><code class="Li">SECTION <var class="Ar">name</var>,
- <var class="Ar">type</var></code></div>
-<div class="Bd Bd-indent"><code class="Li">SECTION <var class="Ar">name</var>,
- <var class="Ar">type</var>, <var class="Ar">options</var></code></div>
-<div class="Bd Bd-indent"><code class="Li">SECTION <var class="Ar">name</var>,
- <var class="Ar">type</var>[<var class="Ar">addr</var>]</code></div>
-<div class="Bd Bd-indent"><code class="Li">SECTION <var class="Ar">name</var>,
- <var class="Ar">type</var>[<var class="Ar">addr</var>],
- <var class="Ar">options</var></code></div>
-<p class="Pp"><var class="Ar">name</var> is a string enclosed in double quotes,
- and can be a new name or the name of an existing section. If the type
- doesn't match, an error occurs. All other sections must have a unique name,
- even in different source files, or the linker will treat it as an error.</p>
-<p class="Pp">Possible section <var class="Ar">type</var>s are as follows:</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#ROM0"><code class="Ic" id="ROM0">ROM0</code></a></dt>
- <dd>A ROM section. <var class="Ar">addr</var> can range from
- <span class="Ad">$0000</span> to <span class="Ad">$3FFF</span>, or
- <span class="Ad">$0000</span> to <span class="Ad">$7FFF</span> if tiny ROM
- mode is enabled in the linker.</dd>
- <dt><a class="permalink" href="#ROMX"><code class="Ic" id="ROMX">ROMX</code></a></dt>
- <dd>A banked ROM section. <var class="Ar">addr</var> can range from
- <span class="Ad">$4000</span> to <span class="Ad">$7FFF</span>.
- <var class="Ar">bank</var> can range from 1 to 511. Becomes an alias for
- <code class="Ic">ROM0</code> if tiny ROM mode is enabled in the
- linker.</dd>
- <dt><a class="permalink" href="#VRAM"><code class="Ic" id="VRAM">VRAM</code></a></dt>
- <dd>A banked video RAM section. <var class="Ar">addr</var> can range from
- <span class="Ad">$8000</span> to <span class="Ad">$9FFF</span>.
- <var class="Ar">bank</var> can be 0 or 1, but bank 1 is unavailable if DMG
- mode is enabled in the linker.</dd>
- <dt><a class="permalink" href="#SRAM"><code class="Ic" id="SRAM">SRAM</code></a></dt>
- <dd>A banked external (save) RAM section. <var class="Ar">addr</var> can range
- from <span class="Ad">$A000</span> to <span class="Ad">$BFFF</span>.
- <var class="Ar">bank</var> can range from 0 to 15.</dd>
- <dt><a class="permalink" href="#WRAM0"><code class="Ic" id="WRAM0">WRAM0</code></a></dt>
- <dd>A general-purpose RAM section. <var class="Ar">addr</var> can range from
- <span class="Ad">$C000</span> to <span class="Ad">$CFFF</span>, or
- <span class="Ad">$C000</span> to <span class="Ad">$DFFF</span> if WRAM0
- mode is enabled in the linker.</dd>
- <dt><a class="permalink" href="#WRAMX"><code class="Ic" id="WRAMX">WRAMX</code></a></dt>
- <dd>A banked general-purpose RAM section. <var class="Ar">addr</var> can range
- from <span class="Ad">$D000</span> to <span class="Ad">$DFFF</span>.
- <var class="Ar">bank</var> can range from 1 to 7. Becomes an alias for
- <code class="Ic">WRAM0</code> if WRAM0 mode is enabled in the linker.</dd>
- <dt><a class="permalink" href="#OAM"><code class="Ic" id="OAM">OAM</code></a></dt>
- <dd>An object attribute RAM section. <var class="Ar">addr</var> can range from
- <span class="Ad">$FE00</span> to <span class="Ad">$FE9F</span>.</dd>
- <dt><a class="permalink" href="#HRAM"><code class="Ic" id="HRAM">HRAM</code></a></dt>
- <dd>A high RAM section. <var class="Ar">addr</var> can range from
- <span class="Ad">$FF80</span> to <span class="Ad">$FFFE</span>.
- <p class="Pp"><b class="Sy">Note</b>: While <code class="Nm">rgbasm</code>
- will automatically optimize <code class="Ic">ld</code> instructions to
- the smaller and faster <code class="Ic">ldh</code> (see
- <a class="Xr" href="gbz80.7.html">gbz80(7)</a>) whenever possible, it is generally unable to
- do so when a label is involved. Using the <code class="Ic">ldh</code>
- instruction directly is recommended. This forces the assembler to emit a
- <code class="Ic">ldh</code> instruction and the linker to check if the
- value is in the correct range.</p>
- </dd>
-</dl>
-<p class="Pp">Since RGBDS produces ROMs, code and data can only be placed in
- <code class="Ic">ROM0</code> and <code class="Ic">ROMX</code> sections. To
- put some in RAM, have it stored in ROM, and copy it to RAM.</p>
-<p class="Pp"><var class="Ar">option</var>s are comma-separated and may
- include:</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#BANK"><code class="Ic" id="BANK">BANK</code></a>[<var class="Ar">bank</var>]</dt>
- <dd>Specify which <var class="Ar">bank</var> for the linker to place the
- section in. See above for possible values for <var class="Ar">bank</var>,
- depending on <var class="Ar">type</var>.</dd>
- <dt><a class="permalink" href="#ALIGN"><code class="Ic" id="ALIGN">ALIGN</code></a>[<var class="Ar">align</var>,
- <var class="Ar">offset</var>]</dt>
- <dd>Place the section at an address whose <var class="Ar">align</var>
- least‐significant bits are equal to <var class="Ar">offset</var>.
- (Note that <code class="Ic">ALIGN</code>[<var class="Ar">align</var>] is a
- shorthand for <code class="Ic">ALIGN</code>[<var class="Ar">align</var>,
- <span class="No">0</span>]). This option can be used with
- [<var class="Ar">addr</var>], as long as they don't contradict eachother.
- It's also possible to request alignment in the middle of a section, see
- <a class="Sx" href="#Requesting_alignment">Requesting alignment</a>
- below.</dd>
-</dl>
-<p class="Pp">If [<var class="Ar">addr</var>] is not specified, the section is
- considered “floating”; the linker will automatically calculate
- an appropriate address for the section. Similarly, if
- <code class="Ic">BANK</code>[<var class="Ar">bank</var>] is not specified,
- the linker will automatically find a bank with enough space.</p>
-<p class="Pp">Sections can also be placed by using a linker script file. The
- format is described in <a class="Xr" href="rgblink.5.html">rgblink(5)</a>. They allow the user to
- place floating sections in the desired bank in the order specified in the
- script. This is useful if the sections can't be placed at an address
- manually because the size may change, but they have to be together.</p>
-<p class="Pp">Section examples:</p>
-<ul class="Bl-item">
- <li>
- <div class="Bd Pp Bd-indent">
- <pre>
-SECTION "Cool Stuff",ROMX
- </pre>
- </div>
- This switches to the section called “CoolStuff”, creating it
- if it doesn't already exist. It can end up in any ROM bank. Code and data
- may follow.</li>
- <li>If it is needed, the the base address of the section can be specified:
- <div class="Bd Pp Bd-indent">
- <pre>
-SECTION "Cool Stuff",ROMX[$4567]
- </pre>
- </div>
- </li>
- <li>An example with a fixed bank:
- <div class="Bd Pp Bd-indent">
- <pre>
-SECTION "Cool Stuff",ROMX[$4567],BANK[3]
- </pre>
- </div>
- </li>
- <li>And if you want to force only the section's bank, and not its position
- within the bank, that's also possible:
- <div class="Bd Pp Bd-indent">
- <pre>
-SECTION "Cool Stuff",ROMX,BANK[7]
- </pre>
- </div>
- </li>
- <li>Alignment examples: The first one could be useful for defining an OAM
- buffer to be DMA'd, since it must be aligned to 256 bytes. The second
- could also be appropriate for GBC HDMA, or for an optimized copy code that
- requires alignment.
- <div class="Bd Pp Bd-indent">
- <pre>
-SECTION "OAM Data",WRAM0,ALIGN[8] ; align to 256 bytes
-SECTION "VRAM Data",ROMX,BANK[2],ALIGN[4] ; align to 16 bytes
- </pre>
- </div>
- </li>
-</ul>
-<section class="Ss">
-<h2 class="Ss" id="Section_Stack"><a class="permalink" href="#Section_Stack">Section
- Stack</a></h2>
-<code class="Ic">POPS</code> and <code class="Ic">PUSHS</code> provide the
- interface to the section stack. The number of entries in the stack is limited
- only by the amount of memory in your machine.
-<p class="Pp"><code class="Ic">PUSHS</code> will push the current section
- context on the section stack. <code class="Ic">POPS</code> can then later be
- used to restore it. Useful for defining sections in included files when you
- don't want to override the section context at the point the file was
- included.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="RAM_Code"><a class="permalink" href="#RAM_Code">RAM
- Code</a></h2>
-Sometimes you want to have some code in RAM. But then you can't simply put it in
- a RAM section, you have to store it in ROM and copy it to RAM at some point.
-<p class="Pp">This means the code (or data) will not be stored in the place it
- gets executed. Luckily, <code class="Ic">LOAD</code> blocks are the perfect
- solution to that. Here's an example of how to use them:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-SECTION "LOAD example", ROMX
-CopyCode:
- ld de, RAMCode
- ld hl, RAMLocation
- ld c, RAMLocation.end - RAMLocation
-.loop
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .loop
- ret
-
-RAMCode:
- LOAD "RAM code", WRAM0
-RAMLocation:
- ld hl, .string
- ld de, $9864
-.copy
- ld a, [hli]
- ld [de], a
- inc de
- and a
- jr nz, .copy
- ret
-
-.string
- db "Hello World!", 0
-.end
- ENDL
-</pre>
-</div>
-<p class="Pp">A <code class="Ic">LOAD</code> block feels similar to a
- <code class="Ic">SECTION</code> declaration because it creates a new one.
- All data and code generated within such a block is placed in the current
- section like usual, but all labels are created as if they were placed in
- this newly-created section.</p>
-<p class="Pp">In the example above, all of the code and data will end up in the
- "LOAD example" section. You will notice the
- ‘RAMCode’ and ‘RAMLocation’ labels. The former
- is situated in ROM, where the code is stored, the latter in RAM, where the
- code will be loaded.</p>
-<p class="Pp">You cannot nest <code class="Ic">LOAD</code> blocks, nor can you
- change the current section within them.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Unionized_Sections"><a class="permalink" href="#Unionized_Sections">Unionized
- Sections</a></h2>
-When you're tight on RAM, you may want to define overlapping blocks of
- variables, as explained in the <a class="Sx" href="#Unions">Unions</a>
- section. However, the <code class="Ic">UNION</code> keyword only works within
- a single file, which prevents e.g. defining temporary variables on a single
- memory area across several files. Unionized sections solve this problem. To
- declare an unionized section, add a <code class="Ic">UNION</code> keyword
- after the <code class="Ic">SECTION</code> one; the declaration is otherwise
- not different. Unionized sections follow some different rules from normal
- sections:
-<ul class="Bl-bullet Bd-indent">
- <li>The same unionized section (= having the same name) can be declared
- several times per <code class="Nm">rgbasm</code> invocation, and across
- several invocations. Different declarations are treated and merged
- identically whether within the same invocation, or different ones.</li>
- <li>If one section has been declared as unionized, all sections with the same
- name must be declared unionized as well.</li>
- <li>All declarations must have the same type. For example, even if
- <a class="Xr" href="rgblink.1.html">rgblink(1)</a>'s <code class="Fl">-w</code> flag is used,
- <code class="Ic">WRAM0</code> and <code class="Ic">WRAMX</code> types are
- still considered different.</li>
- <li>Different constraints (alignment, bank, etc.) can be specified for each
- unionized section declaration, but they must all be compatible. For
- example, alignment must be compatible with any fixed address, all
- specified banks must be the same, etc.</li>
- <li>Unionized sections cannot have type <code class="Ic">ROM0</code> or
- <code class="Ic">ROMX</code>.</li>
-</ul>
-<p class="Pp">Different declarations of the same unionized section are not
- appended, but instead overlaid on top of eachother, just like
- <a class="Sx" href="#Unions">Unions</a>. Similarly, the size of an unionized
- section is the largest of all its declarations.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Section_Fragments"><a class="permalink" href="#Section_Fragments">Section
- Fragments</a></h2>
-Section fragments are sections with a small twist: when several of the same name
- are encountered, they are concatenated instead of producing an error. This
- works within the same file (paralleling the behavior "plain"
- sections has in previous versions), but also across object files. However,
- similarly to <a class="Sx" href="#Unionized_Sections">Unionized Sections</a>,
- some rules must be followed:
-<ul class="Bl-bullet Bd-indent">
- <li>If one section has been declared as fragment, all sections with the same
- name must be declared fragments as well.</li>
- <li>All declarations must have the same type. For example, even if
- <a class="Xr" href="rgblink.1.html">rgblink(1)</a>'s <code class="Fl">-w</code> flag is used,
- <code class="Ic">WRAM0</code> and <code class="Ic">WRAMX</code> types are
- still considered different.</li>
- <li>Different constraints (alignment, bank, etc.) can be specified for each
- unionized section declaration, but they must all be compatible. For
- example, alignment must be compatible with any fixed address, all
- specified banks must be the same, etc.</li>
- <li>A section fragment may not be unionized; after all, that wouldn't make
- much sense.</li>
-</ul>
-<p class="Pp">When RGBASM merges two fragments, the one encountered later is
- appended to the one encountered earlier.</p>
-<p class="Pp">When RGBLINK merges two fragments, the one whose file was
- specified last is appended to the one whose file was specified first. For
- example, assuming ‘<code class="Li">bar.o</code>’,
- ‘<code class="Li">baz.o</code>’, and
- ‘<code class="Li">foo.o</code>’ all contain a fragment with
- the same name, the command</p>
-<div class="Bd Bd-indent"><code class="Li">rgblink -o rom.gb baz.o foo.o
- bar.o</code></div>
-would produce the fragment from ‘<code class="Li">baz.o</code>’
- first, followed by the one from ‘<code class="Li">foo.o</code>’,
- and the one from ‘<code class="Li">bar.o</code>’ last.
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYMBOLS"><a class="permalink" href="#SYMBOLS">SYMBOLS</a></h1>
-RGBDS supports several types of symbols:
-<dl class="Bl-hang">
- <dt><b class="Sy">Label</b></dt>
- <dd>Numerical symbol designating a memory location. May or may not have a
- value known at assembly time.</dd>
- <dt><b class="Sy">Constant</b></dt>
- <dd>Numerical symbol whose value has to be known at assembly time.</dd>
- <dt><b class="Sy">Macro</b></dt>
- <dd>A block of <code class="Nm">rgbasm</code> code that can be invoked
- later.</dd>
- <dt><b class="Sy">String equate</b></dt>
- <dd>String symbol that can be evaluated, similarly to a macro.</dd>
-</dl>
-<p class="Pp">Symbol names can contain letters, numbers, underscores, hashes and
- ‘@’. However, they must begin with either a letter, a number,
- or an underscore. Periods are allowed exclusively for labels, as described
- below. A symbol cannot have the same name as a reserved keyword.
- <i class="Em">In the line where a symbol is defined there mustn't be any
- whitespace before it</i>, otherwise <code class="Nm">rgbasm</code> will
- treat it as a macro invocation.</p>
-<dl class="Bl-tag">
- <dt><b class="Sy">Label declaration</b></dt>
- <dd>One of the assembler's main tasks is to keep track of addresses for you,
- so you can work with meaningful names instead of "magic"
- numbers.
- <p class="Pp">This can be done in a number of ways:</p>
- <div class="Bd Pp Bd-indent">
- <pre>
-GlobalLabel ; This syntax is deprecated,
-AnotherGlobal: ; please use this instead
-.locallabel
-.yet_a_local:
-AnotherGlobal.with_another_local:
-ThisWillBeExported:: ; Note the two colons
-ThisWillBeExported.too::
- </pre>
- </div>
- <p class="Pp">Declaring a label (global or local) with
- ‘<code class="Li">::</code>’ does an
- <code class="Ic">EXPORT</code> at the same time. (See
- <a class="Sx" href="#Exporting_and_importing_symbols">Exporting and
- importing symbols</a> below).</p>
- <p class="Pp">Any label whose name does not contain a period is a global
- label, others are locals. Declaring a global label sets it as the
- current label scope until the next one; any local label whose first
- character is a period will have the global label's name implicitly
- prepended. Local labels can be declared as
- ‘<code class="Li">scope.local:</code>’ or simply as as
- ‘<code class="Li">.local:</code>’. If the former notation
- is used, then ‘<code class="Li">scope</code>’ must be the
- actual current scope.</p>
- <p class="Pp">Local labels may have whitespace before their declaration as
- the only exception to the rule.</p>
- <p class="Pp">A label's location (and thus value) is usually not determined
- until the linking stage, so labels usually cannot be used as constants.
- However, if the section in which the label is declared has a fixed base
- address, its value is known at assembly time.</p>
- <p class="Pp"><code class="Nm">rgbasm</code> is able to compute the
- subtraction of two labels either if both are constant as described
- above, or if both belong to the same section.</p>
- </dd>
- <dt><a class="permalink" href="#EQU"><code class="Ic" id="EQU">EQU</code></a></dt>
- <dd><a class="permalink" href="#EQU_2"><code class="Ic" id="EQU_2">EQU</code></a>
- allows defining constant symbols. Unlike <code class="Ic">SET</code>
- below, constants defined this way cannot be redefined. They can, for
- example, be used for things such as bit definitions of hardware registers.
- <div class="Bd Pp Bd-indent">
- <pre>
-SCREEN_WIDTH equ 160 ; In pixels
-SCREEN_HEIGHT equ 144
- </pre>
- </div>
- <p class="Pp">Note that colons ‘<code class="Li">:</code>’
- following the name are not allowed.</p>
- </dd>
- <dt><a class="permalink" href="#SET"><code class="Ic" id="SET">SET</code></a></dt>
- <dd><a class="permalink" href="#SET_2"><code class="Ic" id="SET_2">SET</code></a>,
- or its synonym <code class="Ic">=</code>, defines constant symbols like
- <code class="Ic">EQU</code>, but those constants can be re-defined. This
- is useful for variables in macros, for counters, etc.
- <div class="Bd Pp Bd-indent">
- <pre>
-ARRAY_SIZE EQU 4
-COUNT SET 2
-COUNT SET ARRAY_SIZE+COUNT
-; COUNT now has the value 6
-COUNT = COUNT + 1
- </pre>
- </div>
- <p class="Pp">Note that colons ‘<code class="Li">:</code>’
- following the name are not allowed.</p>
- </dd>
- <dt><a class="permalink" href="#RSSET"><code class="Ic" id="RSSET">RSSET</code></a>,
- <code class="Ic">RSRESET</code>, <code class="Ic">RB</code>,
- <code class="Ic">RW</code></dt>
- <dd>The RS group of commands is a handy way of defining structures:
- <div class="Bd Pp Bd-indent">
- <pre>
- RSRESET
-str_pStuff RW 1
-str_tData RB 256
-str_bCount RB 1
-str_SIZEOF RB 0
- </pre>
- </div>
- <p class="Pp">The example defines four constants as if by:</p>
- <div class="Bd Pp Bd-indent">
- <pre>
-str_pStuff EQU 0
-str_tData EQU 2
-str_bCount EQU 258
-str_SIZEOF EQU 259
- </pre>
- </div>
- <p class="Pp">There are five commands in the RS group of commands:</p>
- <table class="Bl-column">
- <tr>
- <th>Command</th>
- <th>Meaning</th>
- </tr>
- <tr>
- <td><a class="permalink" href="#RSRESET"><code class="Ic" id="RSRESET">RSRESET</code></a></td>
- <td>Equivalent to ‘<code class="Li">RSSET 0</code>’.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#RSSET_2"><code class="Ic" id="RSSET_2">RSSET</code></a>
- <var class="Ar">constexpr</var></td>
- <td>Sets the <code class="Ic">_RS</code> <span class="No">counter
- to</span> <var class="Ar">constexpr</var>.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#RB"><code class="Ic" id="RB">RB</code></a>
- <var class="Ar">constexpr</var></td>
- <td>Sets the preceding symbol to <code class="Ic">_RS</code>
- <span class="No">and adds</span> <var class="Ar">constexpr</var>
- <span class="No">to</span> <code class="Ic">_RS</code>.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#RW"><code class="Ic" id="RW">RW</code></a>
- <var class="Ar">constexpr</var></td>
- <td>Sets the preceding symbol to <code class="Ic">_RS</code>
- <span class="No">and adds</span> <var class="Ar">constexpr</var>
- <span class="No">* 2 to</span> <code class="Ic">_RS</code>.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#RL"><code class="Ic" id="RL">RL</code></a>
- <var class="Ar">constexpr</var></td>
- <td>Sets the preceding symbol to <code class="Ic">_RS</code>
- <span class="No">and adds</span> <var class="Ar">constexpr</var>
- <span class="No">* 4 to</span> <code class="Ic">_RS</code>. (In
- practice, this one cannot be used due to a bug).</td>
- </tr>
- </table>
- <p class="Pp">Note that colons ‘<code class="Li">:</code>’
- following the name are not allowed.</p>
- </dd>
- <dt><a class="permalink" href="#EQUS"><code class="Ic" id="EQUS">EQUS</code></a></dt>
- <dd><a class="permalink" href="#EQUS_2"><code class="Ic" id="EQUS_2">EQUS</code></a>
- is used to define string symbols. Wherever the assembler meets a string
- symbol its name is replaced with its value. If you are familiar with C you
- can think of it as similar to <code class="Fd">#define .</code>
- <div class="Bd Pp Bd-indent">
- <pre>
-COUNTREG EQUS "[hl+]"
- ld a,COUNTREG
-
-PLAYER_NAME EQUS "\"John\""
- db PLAYER_NAME
- </pre>
- </div>
- <p class="Pp">This will be interpreted as:</p>
- <div class="Bd Pp Bd-indent">
- <pre>
- ld a,[hl+]
- db "John"
- </pre>
- </div>
- <p class="Pp">String symbols can also be used to define small one-line
- macros:</p>
- <div class="Bd Pp Bd-indent">
- <pre>
-pusha EQUS "push af\npush bc\npush de\npush hl\n"
- </pre>
- </div>
- <p class="Pp">Note that colons ‘<code class="Li">:</code>’
- following the name are not allowed. String equates can't be exported or
- imported.</p>
- <p class="Pp"><b class="Sy">Important note</b>: An
- <code class="Ic">EQUS</code> can be expanded to a string that contains
- another <code class="Ic">EQUS</code> and it will be expanded as well. If
- this creates an infinite loop, <code class="Nm">rgbasm</code> will error
- out once a certain depth is reached. See the <code class="Fl">-r</code>
- command-line option in <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>. Also, a macro can
- contain an <code class="Ic">EQUS</code> which calls the same macro,
- which causes the same problem.</p>
- </dd>
- <dt><a class="permalink" href="#MACRO"><code class="Ic" id="MACRO">MACRO</code></a></dt>
- <dd>One of the best features of an assembler is the ability to write macros
- for it. Macros can be called with arguments, and can react depending on
- input using <code class="Ic">IF</code> constructs.
- <div class="Bd Pp Bd-indent">
- <pre>
-MyMacro: MACRO
- ld a,80
- call MyFunc
- ENDM
- </pre>
- </div>
- <p class="Pp">Note that a single colon
- ‘<code class="Li">:</code>’ following the macro's name is
- required. Macros can't be exported or imported.</p>
- </dd>
-</dl>
-<section class="Ss">
-<h2 class="Ss" id="Exporting_and_importing_symbols"><a class="permalink" href="#Exporting_and_importing_symbols">Exporting
- and importing symbols</a></h2>
-Importing and exporting of symbols is a feature that is very useful when your
- project spans many source files and, for example, you need to jump to a
- routine defined in another file.
-<p class="Pp">Exporting of symbols has to be done manually, importing is done
- automatically if <code class="Nm">rgbasm</code> finds a symbol it does not
- know about.</p>
-<p class="Pp">The following will cause <var class="Ar">symbol1</var>,
- <var class="Ar">symbol2</var> and so on to be accessible to other files
- during the link process:</p>
-<div class="Bd Bd-indent"><code class="Li"><code class="Ic">EXPORT</code>
- <var class="Ar">symbol1</var> [, <var class="Ar">symbol2</var>,
- <span class="No">...</span>]</code></div>
-<p class="Pp"><code class="Ic">GLOBAL</code> is a deprecated synonym for
- <code class="Ic">EXPORT</code>, do not use it.</p>
-<p class="Pp">Note also that only exported symbols will appear in symbol and map
- files produced by <a class="Xr" href="rgblink.1.html">rgblink(1)</a>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Purging_symbols"><a class="permalink" href="#Purging_symbols">Purging
- symbols</a></h2>
-<code class="Ic">PURGE</code> allows you to completely remove a symbol from the
- symbol table as if it had never existed. <i class="Em">USE WITH EXTREME
- CAUTION!!!</i> I can't stress this enough, <b class="Sy">you seriously need to
- know what you are doing</b>. DON'T purge a symbol that you use in expressions
- the linker needs to calculate. When not sure, it's probably not safe to purge
- anything other than string symbols, macros, and constants.
-<div class="Bd Pp Bd-indent">
-<pre>
-Kamikaze EQUS "I don't want to live anymore"
-AOLer EQUS "Me too"
- PURGE Kamikaze, AOLer
-</pre>
-</div>
-<p class="Pp">Note that, as an exception, string symbols in the argument list of
- a <code class="Ic">PURGE</code> command <i class="Em">will not be
- expanded</i>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Predeclared_Symbols"><a class="permalink" href="#Predeclared_Symbols">Predeclared
- Symbols</a></h2>
-The following symbols are defined by the assembler:
-<table class="Bl-column Bd-indent">
- <tr>
- <th>Type</th>
- <th>Name</th>
- <th>Contents</th>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_3"><code class="Ic" id="EQU_3">EQU</code></a></td>
- <td><a class="permalink" href="#@"><code class="Dv" id="@">@</code></a></td>
- <td>PC value</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_4"><code class="Ic" id="EQU_4">EQU</code></a></td>
- <td><a class="permalink" href="#_PI"><code class="Dv" id="_PI">_PI</code></a></td>
- <td>Fixed point π</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#SET_3"><code class="Ic" id="SET_3">SET</code></a></td>
- <td><a class="permalink" href="#_RS"><code class="Dv" id="_RS">_RS</code></a></td>
- <td>_RS Counter</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_5"><code class="Ic" id="EQU_5">EQU</code></a></td>
- <td><a class="permalink" href="#_NARG"><code class="Dv" id="_NARG">_NARG</code></a></td>
- <td>Number of arguments passed to macro</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_6"><code class="Ic" id="EQU_6">EQU</code></a></td>
- <td><a class="permalink" href="#__LINE__"><code class="Dv" id="__LINE__">__LINE__</code></a></td>
- <td>The current line number</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQUS_3"><code class="Ic" id="EQUS_3">EQUS</code></a></td>
- <td><a class="permalink" href="#__FILE__"><code class="Dv" id="__FILE__">__FILE__</code></a></td>
- <td>The current filename</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQUS_4"><code class="Ic" id="EQUS_4">EQUS</code></a></td>
- <td><a class="permalink" href="#__DATE__"><code class="Dv" id="__DATE__">__DATE__</code></a></td>
- <td>Today's date</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQUS_5"><code class="Ic" id="EQUS_5">EQUS</code></a></td>
- <td><a class="permalink" href="#__TIME__"><code class="Dv" id="__TIME__">__TIME__</code></a></td>
- <td>The current time</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQUS_6"><code class="Ic" id="EQUS_6">EQUS</code></a></td>
- <td><a class="permalink" href="#__ISO_8601_LOCAL__"><code class="Dv" id="__ISO_8601_LOCAL__">__ISO_8601_LOCAL__</code></a></td>
- <td>ISO 8601 timestamp (local)</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQUS_7"><code class="Ic" id="EQUS_7">EQUS</code></a></td>
- <td><a class="permalink" href="#__ISO_8601_UTC__"><code class="Dv" id="__ISO_8601_UTC__">__ISO_8601_UTC__</code></a></td>
- <td>ISO 8601 timestamp (UTC)</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_7"><code class="Ic" id="EQU_7">EQU</code></a></td>
- <td><a class="permalink" href="#__UTC_YEAR__"><code class="Dv" id="__UTC_YEAR__">__UTC_YEAR__</code></a></td>
- <td>Today's year</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_8"><code class="Ic" id="EQU_8">EQU</code></a></td>
- <td><a class="permalink" href="#__UTC_MONTH__"><code class="Dv" id="__UTC_MONTH__">__UTC_MONTH__</code></a></td>
- <td>Today's month number, 1–12</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_9"><code class="Ic" id="EQU_9">EQU</code></a></td>
- <td><a class="permalink" href="#__UTC_DAY__"><code class="Dv" id="__UTC_DAY__">__UTC_DAY__</code></a></td>
- <td>Today's day of the month, 1–31</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_10"><code class="Ic" id="EQU_10">EQU</code></a></td>
- <td><a class="permalink" href="#__UTC_HOUR__"><code class="Dv" id="__UTC_HOUR__">__UTC_HOUR__</code></a></td>
- <td>Current hour, 0–23</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_11"><code class="Ic" id="EQU_11">EQU</code></a></td>
- <td><a class="permalink" href="#__UTC_MINUTE__"><code class="Dv" id="__UTC_MINUTE__">__UTC_MINUTE__</code></a></td>
- <td>Current minute, 0–59</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_12"><code class="Ic" id="EQU_12">EQU</code></a></td>
- <td><a class="permalink" href="#__UTC_SECOND__"><code class="Dv" id="__UTC_SECOND__">__UTC_SECOND__</code></a></td>
- <td>Current second, 0–59</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_13"><code class="Ic" id="EQU_13">EQU</code></a></td>
- <td><a class="permalink" href="#__RGBDS_MAJOR__"><code class="Dv" id="__RGBDS_MAJOR__">__RGBDS_MAJOR__</code></a></td>
- <td>Major version number of RGBDS</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_14"><code class="Ic" id="EQU_14">EQU</code></a></td>
- <td><a class="permalink" href="#__RGBDS_MINOR__"><code class="Dv" id="__RGBDS_MINOR__">__RGBDS_MINOR__</code></a></td>
- <td>Minor version number of RGBDS</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#EQU_15"><code class="Ic" id="EQU_15">EQU</code></a></td>
- <td><a class="permalink" href="#__RGBDS_PATCH__"><code class="Dv" id="__RGBDS_PATCH__">__RGBDS_PATCH__</code></a></td>
- <td>Patch version number of RGBDS</td>
- </tr>
-</table>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DEFINING_DATA"><a class="permalink" href="#DEFINING_DATA">DEFINING
- DATA</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Declaring_variables_in_a_RAM_section"><a class="permalink" href="#Declaring_variables_in_a_RAM_section">Declaring
- variables in a RAM section</a></h2>
-<code class="Ic">DS</code> allocates a number of empty bytes. This is the
- preferred method of allocating space in a RAM section. You can also use
- <code class="Ic">DB</code>, <code class="Ic">DW</code> and
- <code class="Ic">DL</code> without any arguments instead (see
- <a class="Sx" href="#Defining_constant_data">Defining constant data</a>
- below).
-<div class="Bd Pp Bd-indent">
-<pre>
-DS 42 ; Allocates 42 bytes
-</pre>
-</div>
-<p class="Pp">Empty space in RAM sections will not be initialized. In ROM
- sections, it will be filled with the value passed to the
- <code class="Fl">-p</code> command-line option, except when using overlays
- with <code class="Fl">-O</code>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Defining_constant_data"><a class="permalink" href="#Defining_constant_data">Defining
- constant data</a></h2>
-<code class="Ic">DB</code> defines a list of bytes that will be stored in the
- final image. Ideal for tables and text. Note that strings are not
- zero-terminated!
-<div class="Bd Pp Bd-indent">
-<pre>
-DB 1,2,3,4,"This is a string"
-</pre>
-</div>
-<p class="Pp"><code class="Ic">DS</code> can also be used to fill a region of
- memory with some value. The following produces 42 times the byte $FF:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-DS 42, $FF
-</pre>
-</div>
-<p class="Pp">Alternatively, you can use <code class="Ic">DW</code> to store a
- list of words (16-bit) or <code class="Ic">DL</code> to store a list of
- double-words/longs (32-bit). Strings are not allowed as arguments to
- <code class="Ic">DW</code> and <code class="Ic">DL</code>.</p>
-<p class="Pp">You can also use <code class="Ic">DB</code>,
- <code class="Ic">DW</code> and <code class="Ic">DL</code> without arguments,
- or leaving empty elements at any point in the list. This works exactly like
- <code class="Ic">DS 1</code>, <code class="Ic">DS 2</code> and
- <code class="Ic">DS 4</code> respectively. Consequently, no-argument
- <code class="Ic">DB</code>, <code class="Ic">DW</code> and
- <code class="Ic">DL</code> can be used in a <code class="Ic">WRAM0</code> /
- <code class="Ic">WRAMX</code> / <code class="Ic">HRAM</code> /
- <code class="Ic">VRAM</code> / <code class="Ic">SRAM</code> section.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Including_binary_files"><a class="permalink" href="#Including_binary_files">Including
- binary files</a></h2>
-You probably have some graphics, level data, etc. you'd like to include. Use
- <code class="Ic">INCBIN</code> to include a raw binary file as it is. If the
- file isn't found in the current directory, the include-path list passed to
- <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a> (see the <code class="Fl">-i</code> option) on the
- command line will be searched.
-<div class="Bd Pp Bd-indent">
-<pre>
-INCBIN "titlepic.bin"
-INCBIN "sprites/hero.bin"
-</pre>
-</div>
-<p class="Pp">You can also include only part of a file with
- <code class="Ic">INCBIN</code>. The example below includes 256 bytes from
- data.bin, starting from byte 78.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-INCBIN "data.bin",78,256
-</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Unions"><a class="permalink" href="#Unions">Unions</a></h2>
-Unions allow multiple memory allocations to overlap, like unions in C. This does
- not increase the amount of memory available, but allows re-using the same
- memory region for different purposes.
-<p class="Pp">A union starts with a <code class="Ic">UNION</code> keyword, and
- ends at the corresponding <code class="Ic">ENDU</code> keyword.
- <code class="Ic">NEXTU</code> separates each block of allocations, and you
- may use it as many times within a union as necessary.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
- ; Let's say PC = $C0DE here
- UNION
- ; Here, PC = $C0DE
-Name: ds 8
- ; PC = $C0E6
-Nickname: ds 8
- ; PC = $C0EE
- NEXTU
- ; PC is back to $C0DE
-Health: dw
- ; PC = $C0E0
-Something: ds 6
- ; And so on
-Lives: db
- NEXTU
-VideoBuffer: ds 19
- ENDU
-</pre>
-</div>
-<p class="Pp">In the example above, ‘Name, Health, VideoBuffer’
- all have the same value, as do ‘Nickname’ and
- ‘Lives’. Thus, keep in mind that <code class="Ic">ld [Health],
- a</code> is identical to <code class="Ic">ld [Name], a</code>.</p>
-<p class="Pp">The size of this union is 19 bytes, as this is the size of the
- largest block (the last one, containing ‘VideoBuffer’).
- Nesting unions is possible, with each inner union's size being considered as
- described above.</p>
-<p class="Pp">Unions may be used in any section, but inside them may only be
- <code class="Ic">DS -</code> like commands (see
- <a class="Sx" href="#Declaring_variables_in_a_RAM_section">Declaring
- variables in a RAM section</a>).</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="THE_MACRO_LANGUAGE"><a class="permalink" href="#THE_MACRO_LANGUAGE">THE
- MACRO LANGUAGE</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Invoking_macros"><a class="permalink" href="#Invoking_macros">Invoking
- macros</a></h2>
-You execute the macro by inserting its name.
-<div class="Bd Pp Bd-indent">
-<pre>
- add a,b
- ld sp,hl
- MyMacro ; This will be expanded
- sub a,87
-</pre>
-</div>
-<p class="Pp">It's valid to call a macro from a macro (yes, even the same
- one).</p>
-<p class="Pp">When <code class="Nm">rgbasm</code> sees
- <code class="Ic">MyMacro</code> it will insert the macro definition (the
- code enclosed in <code class="Ic">MACRO</code> /
- <code class="Ic">ENDM</code>).</p>
-<p class="Pp">Suppose your macro contains a loop.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-LoopyMacro: MACRO
- xor a,a
-.loop ld [hl+],a
- dec c
- jr nz,.loop
-ENDM
-</pre>
-</div>
-<p class="Pp">This is fine, but only if you use the macro no more than once per
- scope. To get around this problem, there is the escape sequence
- <code class="Ic">\@</code> that expands to a unique string.</p>
-<p class="Pp"><code class="Ic">\@</code> also works in
- <code class="Ic">REPT</code> blocks.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-LoopyMacro: MACRO
- xor a,a
-.loop\@ ld [hl+],a
- dec c
- jr nz,.loop\@
-ENDM
-</pre>
-</div>
-<p class="Pp"><b class="Sy">Important note</b>: Since a macro can call itself
- (or a different macro that calls the first one), there can be circular
- dependency problems. If this creates an infinite loop,
- <code class="Nm">rgbasm</code> will error out once a certain depth is
- reached. See the <code class="Fl">-r</code> command-line option in
- <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>. Also, a macro can have inside an
- <b class="Sy">EQUS</b> which references the same macro, which has the same
- problem.</p>
-<p class="Pp">It's possible to pass arguments to macros as well! You retrieve
- the arguments by using the escape sequences <code class="Ic">\1</code>
- through <code class="Ic">\9</code>, <code class="Ic">\1</code> being the
- first argument specified on the macro invocation.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-LoopyMacro: MACRO
- ld hl,\1
- ld c,\2
- xor a,a
-.loop\@ ld [hl+],a
- dec c
- jr nz,.loop\@
- ENDM
-</pre>
-</div>
-<p class="Pp">Now I can call the macro specifying two arguments, the first being
- the address and the second being a byte count. The generated code will then
- reset all bytes in this range.</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-LoopyMacro MyVars,54
-</pre>
-</div>
-<p class="Pp">Arguments are passed as string equates, although there's no need
- to enclose them in quotes. Thus, an expression will not be evaluated first
- but kind of copy-pasted. This means that it's probably a very good idea to
- use brackets around <code class="Ic">\1</code> to <code class="Ic">\9</code>
- if you perform further calculations on them. For instance, consider the
- following:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-print_double: MACRO
- PRINTV \1 * 2
-ENDM
- print_double 1 + 2
-</pre>
-</div>
-<p class="Pp">The <code class="Ic">PRINTV</code> statement will expand to
- ‘<code class="Li">PRINTV 1 + 2 * 2</code>’, which will print 5
- and not 6 as you might have expected.</p>
-<p class="Pp">Line continuations work as usual inside macros or lists of macro
- arguments. However, some characters need to be escaped, as in the following
- example:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-PrintMacro: MACRO
- PRINTT \1
-ENDM
-
- PrintMacro STRCAT("Hello "\, \
- "world\\n")
-</pre>
-</div>
-<p class="Pp">The comma needs to be escaped to avoid it being treated as
- separating the macro's arguments. The backslash ‘\’ (from
- ‘\n’) also needs to be escaped because of the way
- <code class="Nm">rgbasm</code> processes macro arguments.</p>
-<p class="Pp">In reality, up to 256 arguments can be passed to a macro, but you
- can only use the first 9 like this. If you want to use the rest, you need to
- use the <code class="Ic">SHIFT</code> command.</p>
-<p class="Pp"><code class="Ic">SHIFT</code> is a special command only available
- in macros. Very useful in <code class="Ic">REPT</code> blocks. It will shift
- the arguments by one to the left. <code class="Ic">\1</code> will get the
- value of <code class="Ic">\2</code>, <code class="Ic">\2</code> will get the
- value of <code class="Ic">\3</code>, and so forth.</p>
-<p class="Pp">This is the only way of accessing the value of arguments from 10
- to 256.</p>
-<p class="Pp"><code class="Ic">SHIFT</code> can optionally be given an integer
- parameter, and will apply the above shifting that number of times.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Printing_things_during_assembly"><a class="permalink" href="#Printing_things_during_assembly">Printing
- things during assembly</a></h2>
-The next four commands print text and values to the standard output. Useful for
- debugging macros, or wherever you may feel the need to tell yourself some
- important information.
-<div class="Bd Pp Bd-indent">
-<pre>
-PRINTT "I'm the greatest programmer in the whole wide world\n"
-PRINTI (2 + 3) / 5
-PRINTV $FF00 + $F0
-PRINTF MUL(3.14, 3987.0)
-</pre>
-</div>
-<dl class="Bl-inset">
- <dt><a class="permalink" href="#PRINTT"><code class="Ic" id="PRINTT">PRINTT</code></a></dt>
- <dd>prints out a string. Be careful to add a line feed (“\n”) at
- the end, as it is not added automatically.</dd>
- <dt><a class="permalink" href="#PRINTV"><code class="Ic" id="PRINTV">PRINTV</code></a></dt>
- <dd>prints out an integer value in hexadecimal or, as in the example, the
- result of a calculation. Unsurprisingly, you can also print out a constant
- symbol's value.</dd>
- <dt><a class="permalink" href="#PRINTI"><code class="Ic" id="PRINTI">PRINTI</code></a></dt>
- <dd>prints out a signed integer value.</dd>
- <dt><a class="permalink" href="#PRINTF"><code class="Ic" id="PRINTF">PRINTF</code></a></dt>
- <dd>prints out a fixed point value.</dd>
-</dl>
-<p class="Pp">Be careful that none of those automatically print a line feed; if
- you need one, use <code class="Ic">PRINTT \n</code>.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Automatically_repeating_blocks_of_code"><a class="permalink" href="#Automatically_repeating_blocks_of_code">Automatically
- repeating blocks of code</a></h2>
-Suppose you want to unroll a time consuming loop without copy-pasting it.
- <code class="Ic">REPT</code> is here for that purpose. Everything between
- <code class="Ic">REPT</code> and the matching <code class="Ic">ENDR</code>
- will be repeated a number of times just as if you had done a copy/paste
- operation yourself. The following example will assemble
- ‘<code class="Li">add a,c</code>’ four times:
-<div class="Bd Pp Bd-indent">
-<pre>
-REPT 4
- add a,c
-ENDR
-</pre>
-</div>
-<p class="Pp">You can also use <code class="Ic">REPT</code> to generate tables
- on the fly:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-; --
-; -- Generate a 256 byte sine table with values between 0 and 128
-; --
-ANGLE = 0.0
- REPT 256
- db (MUL(64.0, SIN(ANGLE)) + 64.0) >> 16
-ANGLE = ANGLE+256.0
- ENDR
-</pre>
-</div>
-<p class="Pp">As in macros, you can also use the escape sequence
- <code class="Ic">\@</code>. <code class="Ic">REPT</code> blocks can be
- nested.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Aborting_the_assembly_process"><a class="permalink" href="#Aborting_the_assembly_process">Aborting
- the assembly process</a></h2>
-<code class="Ic">FAIL</code> and <code class="Ic">WARN</code> can be used to
- print errors and warnings respectively during the assembly process. This is
- especially useful for macros that get an invalid argument.
- <code class="Ic">FAIL</code> and <code class="Ic">WARN</code> take a string as
- the only argument and they will print this string out as a normal error with a
- line number.
-<p class="Pp"><code class="Ic">FAIL</code> stops assembling immediately while
- <code class="Ic">WARN</code> shows the message but continues afterwards.</p>
-<p class="Pp">If you need to ensure some assumption is correct when compiling,
- you can use <code class="Ic">ASSERT</code> and
- <code class="Ic">STATIC_ASSERT</code>. Syntax examples are given below:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-Function:
- xor a
-ASSERT LOW(Variable) == 0
- ld h, HIGH(Variable)
- ld l, a
- ld a, [hli]
- ; You can also indent this!
- ASSERT BANK(OtherFunction) == BANK(Function)
- call OtherFunction
-; Lowercase also works
-assert Variable + 1 == OtherVariable
- ld c, [hl]
- ret
-.end
- ; If you specify one, a message will be printed
- STATIC_ASSERT .end - Function < 256, "Function is too large!"
-</pre>
-</div>
-<p class="Pp">First, the difference between <code class="Ic">ASSERT</code> and
- <code class="Ic">STATIC_ASSERT</code> is that the former is evaluated by
- RGBASM if it can, otherwise by RGBLINK; but the latter is only ever
- evaluated by RGBASM. If RGBASM cannot compute the value of the argument to
- <code class="Ic">STATIC_ASSERT</code>, it will produce an error.</p>
-<p class="Pp">Second, as shown above, a string can be optionally added at the
- end, to give insight into what the assertion is checking.</p>
-<p class="Pp">Finally, you can add one of <code class="Ic">WARN</code>,
- <code class="Ic">FAIL</code> or <code class="Ic">FATAL</code> as the first
- optional argument to either <code class="Ic">ASSERT</code> or
- <code class="Ic">STATIC_ASSERT</code>. If the assertion fails,
- <code class="Ic">WARN</code> will cause a simple warning (controlled by
- <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a> flag <code class="Fl">-Wassert</code>) to be
- emitted; <code class="Ic">FAIL</code> (the default) will cause a non-fatal
- error; and <code class="Ic">FATAL</code> immediately aborts.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Including_other_source_files"><a class="permalink" href="#Including_other_source_files">Including
- other source files</a></h2>
-Use <code class="Ic">INCLUDE</code> to process another assembler file and then
- return to the current file when done. If the file isn't found in the current
- directory the include path list (see the <code class="Fl">-i</code> option in
- <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>) will be searched. You may nest
- <code class="Ic">INCLUDE</code> calls infinitely (or until you run out of
- memory, whichever comes first).
-<div class="Bd Pp Bd-indent">
-<pre>
- INCLUDE "irq.inc"
-</pre>
-</div>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Conditional_assembling"><a class="permalink" href="#Conditional_assembling">Conditional
- assembling</a></h2>
-The four commands <code class="Ic">IF</code>, <code class="Ic">ELIF</code>,
- <code class="Ic">ELSE</code>, and <code class="Ic">ENDC</code> let you have
- <code class="Nm">rgbasm</code> skip over parts of your code depending on a
- condition. This is a powerful feature commonly used in macros.
-<div class="Bd Pp Bd-indent">
-<pre>
-IF NUM < 0
- PRINTT "NUM < 0\n"
-ELIF NUM == 0
- PRINTT "NUM == 0\n"
-ELSE
- PRINTT "NUM > 0\n"
-ENDC
-</pre>
-</div>
-<p class="Pp">The <code class="Ic">ELIF</code> (standing for "else
- if") and <code class="Ic">ELSE</code> blocks are optional.
- <code class="Ic">IF</code> / <code class="Ic">ELIF</code> /
- <code class="Ic">ELSE</code> / <code class="Ic">ENDC</code> blocks can be
- nested.</p>
-<p class="Pp">Note that if an <code class="Ic">ELSE</code> block is found before
- an <code class="Ic">ELIF</code> block, the <code class="Ic">ELIF</code>
- block will be ignored. All <code class="Ic">ELIF</code> blocks must go
- before the <code class="Ic">ELSE</code> block. Also, if there is more than
- one <code class="Ic">ELSE</code> block, all of them but the first one are
- ignored.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MISCELLANEOUS"><a class="permalink" href="#MISCELLANEOUS">MISCELLANEOUS</a></h1>
-<section class="Ss">
-<h2 class="Ss" id="Changing_options_while_assembling"><a class="permalink" href="#Changing_options_while_assembling">Changing
- options while assembling</a></h2>
-<code class="Ic">OPT</code> can be used to change some of the options during
- assembling from within the source, instead of defining them on the
- command-line.
-<p class="Pp"><code class="Ic">OPT</code> takes a comma-separated list of
- options as its argument:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-PUSHO
-OPT g.oOX ;Set the GB graphics constants to use these characters
-DW `..ooOOXX
-POPO
-DW `00112233
-</pre>
-</div>
-<p class="Pp">The options that OPT can modify are currently:
- <code class="Cm">b</code>, <code class="Cm">g</code> and
- <code class="Cm">p</code>.</p>
-<p class="Pp"><code class="Ic">POPO</code> and <code class="Ic">PUSHO</code>
- provide the interface to the option stack. <code class="Ic">PUSHO</code>
- will push the current set of options on the option stack.
- <code class="Ic">POPO</code> can then later be used to restore them. Useful
- if you want to change some options in an include file and you don't want to
- destroy the options set by the program that included your file. The stack's
- number of entries is limited only by the amount of memory in your
- machine.</p>
-</section>
-<section class="Ss">
-<h2 class="Ss" id="Requesting_alignment"><a class="permalink" href="#Requesting_alignment">Requesting
- alignment</a></h2>
-While <code class="Ic">ALIGN</code> as presented in
- <a class="Sx" href="#SECTIONS">SECTIONS</a> is often useful as-is, sometimes
- you instead want a particular piece of data (or code) in the middle of the
- section to be aligned. This is made easier through the use of mid-section
- <code class="Ic">align</code> <var class="Ar">align</var>,
- <var class="Ar">offset</var>. It will alter the section's attributes to ensure
- that the location the <code class="Ic">align</code> directive is at, has its
- <var class="Ar">align</var> lower bits equal to <var class="Ar">offset</var>.
-<p class="Pp">If the constraint cannot be met (for example because the section
- is fixed at an incompatible address), and error is produced. Note that
- <code class="Ic">align</code> <var class="Ar">align</var> is a shorthand for
- <code class="Ic">align</code> <var class="Ar">align</var>,
- <span class="No">0</span>.</p>
-</section>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgblink.1.html">rgblink(1)</a>,
- <a class="Xr" href="rgblink.5.html">rgblink(5)</a>, <a class="Xr" href="rgbds.5.html">rgbds(5)</a>,
- <a class="Xr" href="rgbds.7.html">rgbds(7)</a>, <a class="Xr" href="gbz80.7.html">gbz80(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<code class="Nm">rgbasm</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">December 5, 2019</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgbds.5.html
+++ /dev/null
@@ -1,363 +1,0 @@
-<!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 name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.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> —
-<span class="Nd">object file format documentation</span>
-</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" href="rgbasm.1.html">rgbasm(1)</a>
- and <a class="Xr" href="rgblink.1.html">rgblink(1)</a>. <i class="Em">Please note that the
- specifications may change.</i> 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. <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] ; "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
-
-; 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.
- ; Bit 7 is independent from the above value, and
- ; encodes whether the section is unionized
-
- IF (Type & 0x7F) != 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.
-
- BYTE Align ; Alignment of this section, as N bits. 0 when not specified.
-
- LONG Ofs ; Offset relative to the alignment specified above.
- ; Must be below 1 << Align.
-
- 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.
-
- REPT NumberOfPatches
-
- STRING SourceFile ; Name of the source file (for printing error
- ; messages).
-
- LONG Offset ; Offset into the section where patch should
- ; be applied (in bytes).
-
- LONG PCSectionID ; Index within the file of the section in which
- ; PC is located.
- ; This is usually the same section that the
- ; patch should be applied into, except e.g.
- ; with LOAD blocks.
-
- LONG PCOffset ; PC's offset into the above section.
- ; Used because the section may be floating, so
- ; PC's value is not known to RGBASM.
-
- 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
-
-; Assertions
-
-LONG NumberOfAssertions
-
-REPT NumberOfAssertions
-
- STRING SourceFile ; Name of the source file (for printing the failure).
-
- LONG Offset ; Offset into the section where the assertion is located.
-
- LONG SectionID ; Index within the file of the section in which PC is
- ; located, or -1 if defined outside a section.
-
- LONG PCOffset ; PC's offset into the above section.
- ; Used because the section may be floating, so PC's value
- ; is not known to RGBASM.
-
- BYTE Type ; 0 = Prints the message but allows linking to continue
- ; 1 = Prints the message and evaluates other assertions,
- ; but linking fails afterwards
- ; 2 = Prints the message and immediately fails linking
-
- LONG RPNSize ; Size of the RPN expression's buffer.
-
- BYTE RPN[RPNSize] ; RPN expression, same as patches. Assert fails if == 0.
-
- STRING Message ; A message displayed when the assert fails. If set to
- ; the empty string, a generic message is printed instead.
-
-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 <var class="Ar">BYTE</var>s with some bytes
- being special prefixes for integers and symbols.
-<table class="Bl-column Bd-indent">
- <tr>
- <th>Value</th>
- <th>Meaning</th>
- </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>.
- Checks if the value is in HRAM, ANDs it with 0xFF.</td>
- </tr>
- <tr>
- <td><a class="permalink" href="#$61"><code class="Li" id="$61">$61</code></a></td>
- <td><a class="permalink" href="#RSTCheck"><code class="Li" id="RSTCheck">RSTCheck</code></a>.
- Checks if the value is a RST vector, ORs it with 0xC7.</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" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgblink.1.html">rgblink(1)</a>,
- <a class="Xr" href="rgbds.7.html">rgbds(7)</a>, <a class="Xr" href="gbz80.7.html">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">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgbds.7.html
+++ /dev/null
@@ -1,80 +1,0 @@
-<!DOCTYPE html>
-<html>
-<!-- This is an automatically generated file. Do not edit.
- This file is part of RGBDS.
-
- Copyright (c) 2010-2018, Anthony J. Bentley and RGBDS contributors.
-
- SPDX-License-Identifier: MIT
- -->
-<head>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBDS(7)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBDS(7)</td>
- <td class="head-vol">Miscellaneous Information Manual</td>
- <td class="head-rtitle">RGBDS(7)</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> —
-<span class="Nd">Rednex Game Boy Development System</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-To get a working ROM image from a single assembly source file:
-<div class="Bd Pp Bd-indent">
-<pre>
-$ rgbasm -o bar.o foo.asm
-$ rgblink -o baz.gb bar.o
-$ rgbfix -v -p 0 baz.gb
-</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>,
- <a class="Xr" href="rgblink.1.html">rgblink(1)</a>, <a class="Xr" href="rgbds.5.html">rgbds(5)</a>,
- <a class="Xr" href="gbz80.7.html">gbz80(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<dl class="Bl-ohang">
- <dt></dt>
- <dd>1997, Carsten Sørensen (AKA SurfSmurf) writes ASMotor as a
- general-purpose assembler/linker system for DOS/Win32.</dd>
- <dt></dt>
- <dd>1999, Justin Lloyd (AKA Otaku no Zoku) adapts ASMotor to read and produce
- GBZ80 assembly/machine code, and releases this version as RGBDS.</dd>
- <dt></dt>
- <dd>2009, Vegard Nossum adapts the code to be more UNIX-like and releases this
- version as rgbds-linux on GitHub.</dd>
- <dt></dt>
- <dd>2010, Anthony J. Bentley forks that repository. The fork becomes the
- reference implementation of rgbds.</dd>
- <dt></dt>
- <dd>2017, Bentley's repository is moved to a neutral name. 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>.</dd>
- <dt></dt>
- <dd>2018, codebase relicensed under the MIT license.</dd>
-</dl>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">March 7, 2018</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgbds.css
+++ /dev/null
@@ -1,63 +1,0 @@
-/* Overrides to default mandoc styling for HTML renders of RGBDS man pages */
-
-html {
- /* Reduce contrast */
- background-color: #f8f8f8;
- color: #222;
-
- /* Override `mandoc.css`'s sowe can put it on <body> instead */
- max-width: none;
-}
-
-body {
- /* Center body horizontally (requires <html> to span full width) */
- margin: 0 auto;
- /* `mandoc.css`'s default, but it's applied to <html> there */
- max-width: 65em;
-
- /* Improve readability */
- font-size: 16px;
- line-height: 1.4;
- text-align: justify;
-
- /* Prevent text from bumping sides on mobile devices */
- padding: 10px 20px 10px 10px;
-}
-@media print {
- body {
- /* Max width doesn't make sense for print */
- max-width: none;
- /* Make font slightly smaller for printing */
- font-size: 14px;
- }
-}
-
-code, pre {
- font-size: smaller;
-}
-
-pre {
- /* Avoid horizontal page scrolling on mobile */
- overflow: auto;
-}
-
-/* Separate lines in tables */
-table.Bl-column {
- border-collapse: collapse;
-}
-table.Bl-column tr:not(:first-child) > td,
-table.Bl-column tr:not(:first-child) > th {
- border-top: 1px solid #aaa;
-}
-
-table.Bl-column th {
- /* Apply `.Sy` style to table headers */
- font-style: normal;
- font-weight: bold;
-}
-
-table.Bl-column td,
-table.Bl-column th {
- /* Add horizontal spacing between columns */
- padding: 2px 7px 0;
-}
--- a/docs/rgbfix.1.html
+++ /dev/null
@@ -1,220 +1,0 @@
-<!DOCTYPE html>
-<html>
-<!-- This is an automatically generated file. Do not edit.
- This file is part of RGBDS.
-
- Copyright (c) 2010-2017, Anthony J. Bentley and RGBDS contributors.
-
- SPDX-License-Identifier: MIT
- -->
-<head>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBFIX(1)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBFIX(1)</td>
- <td class="head-vol">General Commands Manual</td>
- <td class="head-rtitle">RGBFIX(1)</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">rgbfix</code> —
-<span class="Nd">Game Boy header utility and checksum fixer</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<table class="Nm">
- <tr>
- <td><code class="Nm">rgbfix</code></td>
- <td>[<code class="Fl"><a href="#j">-j</a><a href="#s">s</a><a href="#V">V</a><a href="#v">v</a></code>] [<code class="Fl"><a href="#C">-C</a></code> |
- <code class="Fl"><a href="#c">-c</a></code>] [<code class="Fl"><a href="#f">-f</a></code>
- <var class="Ar">fix_spec</var>] [<code class="Fl"><a href="#i">-i</a></code>
- <var class="Ar">game_id</var>] [<code class="Fl"><a href="#k">-k</a></code>
- <var class="Ar">licensee_str</var>] [<code class="Fl"><a href="#l">-l</a></code>
- <var class="Ar">licensee_id</var>] [<code class="Fl"><a href="#m">-m</a></code>
- <var class="Ar">mbc_type</var>] [<code class="Fl"><a href="#n">-n</a></code>
- <var class="Ar">rom_version</var>] [<code class="Fl"><a href="#p">-p</a></code>
- <var class="Ar">pad_value</var>] [<code class="Fl"><a href="#r">-r</a></code>
- <var class="Ar">ram_size</var>] [<code class="Fl"><a href="#t">-t</a></code>
- <var class="Ar">title_str</var>] <var class="Ar">file</var></td>
- </tr>
-</table>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-The <code class="Nm">rgbfix</code> program changes headers of Game Boy ROM
- images. It also performs other correctness operations, such as padding.
-<p class="Pp">Note that options can be abbreviated as long as the abbreviation
- is unambiguous: <code class="Fl">--verb</code> is
- <code class="Fl">--verbose</code>, but
- <code class="Fl">--ver</code> is invalid because it
- could also be <code class="Fl">--version</code>. The
- arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#C"><code class="Fl" id="C">-C</code></a>,
- <code class="Fl">--color-only</code></dt>
- <dd>Set the Game Boy Color–only flag: <span class="Ad">0x143</span> =
- 0xC0. If both this and the <code class="Fl">-c</code> flag are set, this
- takes precedence.</dd>
- <dt><a class="permalink" href="#c"><code class="Fl" id="c">-c</code></a>,
- <code class="Fl">--color-compatible</code></dt>
- <dd>Set the Game Boy Color–compatible flag:
- <span class="Ad">0x143</span> = 0x80. If both this and the
- <code class="Fl">-C</code> flag are set, <code class="Fl">-C</code> takes
- precedence.</dd>
- <dt><a class="permalink" href="#f"><code class="Fl" id="f">-f</code></a>
- <var class="Ar">fix_spec</var>,
- <code class="Fl">--fix-spec</code>
- <var class="Ar">fix_spec</var></dt>
- <dd>Fix certain header values that the Game Boy checks for correctness.
- Alternatively, intentionally trash these values by writing their binary
- inverse instead. <var class="Ar">fix_spec</var> is a string containing any
- combination of the following characters:
- <p class="Pp"></p>
- <dl class="Bl-tag Bl-compact">
- <dt><a class="permalink" href="#l"><code class="Cm" id="l">l</code></a></dt>
- <dd>Fix the Nintendo logo
- (<span class="Ad">0x104</span>–<span class="Ad">0x133</span>).</dd>
- <dt><a class="permalink" href="#L"><code class="Cm" id="L">L</code></a></dt>
- <dd>Trash the Nintendo logo.</dd>
- <dt><a class="permalink" href="#h"><code class="Cm" id="h">h</code></a></dt>
- <dd>Fix the header checksum (<span class="Ad">0x14D</span>).</dd>
- <dt><a class="permalink" href="#H"><code class="Cm" id="H">H</code></a></dt>
- <dd>Trash the header checksum.</dd>
- <dt><a class="permalink" href="#g"><code class="Cm" id="g">g</code></a></dt>
- <dd>Fix the global checksum
- (<span class="Ad">0x14E</span>–<span class="Ad">0x14F</span>).</dd>
- <dt><a class="permalink" href="#G"><code class="Cm" id="G">G</code></a></dt>
- <dd>Trash the global checksum.</dd>
- </dl>
- </dd>
- <dt><a class="permalink" href="#i"><code class="Fl" id="i">-i</code></a>
- <var class="Ar">game_id</var>,
- <code class="Fl">--game-id</code>
- <var class="Ar">game_id</var></dt>
- <dd>Set the game ID string
- (<span class="Ad">0x13F</span>–<span class="Ad">0x142</span>) to a
- given string of exactly 4 characters. If both this and the title are set,
- the game ID will overwrite the overlapping portion of the title.</dd>
- <dt><a class="permalink" href="#j"><code class="Fl" id="j">-j</code></a>,
- <code class="Fl">--non-japanese</code></dt>
- <dd>Set the non-Japanese region flag: <span class="Ad">0x14A</span> = 1.</dd>
- <dt><a class="permalink" href="#k"><code class="Fl" id="k">-k</code></a>
- <var class="Ar">licensee_str</var>,
- <code class="Fl">--new-licensee</code>
- <var class="Ar">licensee_str</var></dt>
- <dd>Set the new licensee string
- (<span class="Ad">0x144</span>–<span class="Ad">0x145</span>) to a
- given string, truncated to at most two characters.</dd>
- <dt><a class="permalink" href="#l_2"><code class="Fl" id="l_2">-l</code></a>
- <var class="Ar">licensee_id</var>,
- <code class="Fl">--old-licensee</code>
- <var class="Ar">licensee_id</var></dt>
- <dd>Set the old licensee code, <span class="Ad">0x14B</span>, to a given value
- from 0 to 0xFF. This value is deprecated and should be set to 0x33 in all
- new software.</dd>
- <dt><a class="permalink" href="#m"><code class="Fl" id="m">-m</code></a>
- <var class="Ar">mbc_type</var>,
- <code class="Fl">--mbc-type</code>
- <var class="Ar">mbc_type</var></dt>
- <dd>Set the MBC type, <span class="Ad">0x147</span>, to a given value from 0
- to 0xFF.</dd>
- <dt><a class="permalink" href="#n"><code class="Fl" id="n">-n</code></a>
- <var class="Ar">rom_version</var>,
- <code class="Fl">--rom-version</code>
- <var class="Ar">rom_version</var></dt>
- <dd>Set the ROM version, <span class="Ad">0x14C</span>, to a given value from
- 0 to 0xFF.</dd>
- <dt><a class="permalink" href="#p"><code class="Fl" id="p">-p</code></a>
- <var class="Ar">pad_value</var>,
- <code class="Fl">--pad-value</code>
- <var class="Ar">pad_value</var></dt>
- <dd>Pad the image to a valid size with a given pad value from 0 to 0xFF.
- <code class="Nm">rgbfix</code> will automatically pick a size from 32 KiB,
- 64 KiB, 128 KiB, ..., 8192 KiB. The cartridge size byte
- (<span class="Ad">0x148</span>) will be changed to reflect this new
- size.</dd>
- <dt><a class="permalink" href="#r"><code class="Fl" id="r">-r</code></a>
- <var class="Ar">ram_size</var>,
- <code class="Fl">--ram-size</code>
- <var class="Ar">ram_size</var></dt>
- <dd>Set the RAM size, <span class="Ad">0x149</span>, to a given value from 0
- to 0xFF.</dd>
- <dt><a class="permalink" href="#s"><code class="Fl" id="s">-s</code></a>,
- <code class="Fl">--sgb-compatible</code></dt>
- <dd>Set the SGB flag: <span class="Ad">0x146</span> = 3. This flag will be
- ignored by the SGB unless the old licensee code is 0x33!</dd>
- <dt><a class="permalink" href="#t"><code class="Fl" id="t">-t</code></a>
- <var class="Ar">title</var>,
- <code class="Fl">--title</code>
- <var class="Ar">title</var></dt>
- <dd>Set the title string
- (<span class="Ad">0x134</span>–<span class="Ad">0x143</span>) to a
- given string, truncated to at most 16 characters. It is recommended to use
- 15 characters instead, to avoid clashing with the CGB flag
- (<code class="Fl">-c</code> or <code class="Fl">-C</code>). If both this
- and the game ID are set, the game ID will overwrite the overlapping
- portion of the title.</dd>
- <dt><a class="permalink" href="#V"><code class="Fl" id="V">-V</code></a>,
- <code class="Fl">--version</code></dt>
- <dd>Print the version of the program and exit.</dd>
- <dt><a class="permalink" href="#v"><code class="Fl" id="v">-v</code></a>,
- <code class="Fl">--validate</code></dt>
- <dd>Equivalent to <code class="Fl">-f</code> <code class="Cm">lhg</code>.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-Most values in the ROM header are only cosmetic. The bare minimum requirements
- for a workable program are the header checksum, the Nintendo logo, and (if
- needed) the CGB/SGB flags. It is a good idea to pad the image to a valid size
- as well (“valid” meaning a power of 2, times 32 KiB).
-<p class="Pp">The following will make a plain, non-color Game Boy game without
- checking for a valid size:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbfix -v foo.gb</div>
-<p class="Pp">The following will make a SGB-enabled, color-enabled game with a
- title of “foobar”, and pad it to a valid size. (The Game Boy
- itself does not use the title, but some emulators or ROM managers do.)</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbfix -vcs -l 0x33 -p 255 -t foobar baz.gb</div>
-<p class="Pp">The following will duplicate the header (sans global checksum) of
- the game “Survival Kids”:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbfix -cjsv -k A4 -l 0x33 -m 0x1B -p 0xFF -r 3 -t
- SURVIVALKIDAVKE SurvivalKids.gbc</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-Please report bugs on
- <a class="Lk" href="https://github.com/rednex/rgbds/issues">GitHub</a>.
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgblink.1.html">rgblink(1)</a>,
- <a class="Xr" href="rgbds.7.html">rgbds(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<code class="Nm">rgbfix</code> was originally released by Carsten
- Sørensen as a standalone program called gbfix, 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">December 5, 2019</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgbgfx.1.html
+++ /dev/null
@@ -1,220 +1,0 @@
-<!DOCTYPE html>
-<html>
-<!-- This is an automatically generated file. Do not edit.
- This file is part of RGBDS.
-
- Copyright (c) 2013-2018, stag019 and RGBDS contributors.
-
- SPDX-License-Identifier: MIT
- -->
-<head>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBGFX(1)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBGFX(1)</td>
- <td class="head-vol">General Commands Manual</td>
- <td class="head-rtitle">RGBGFX(1)</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">rgbgfx</code> —
-<span class="Nd">Game Boy graphics converter</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<table class="Nm">
- <tr>
- <td><code class="Nm">rgbgfx</code></td>
- <td>[<code class="Fl"><a href="#C">-C</a><a href="#D">D</a><a href="#h">h</a><a href="#m">m</a><a href="#u">u</a><a href="#V">V</a><a href="#v">v</a></code>] [<code class="Fl"><a href="#f">-f</a></code> |
- <code class="Fl"><a href="#F">-F</a></code>] [<code class="Fl"><a href="#a">-a</a></code>
- <var class="Ar">attrmap</var> | <code class="Fl"><a href="#A">-A</a></code>]
- [<code class="Fl"><a href="#d">-d</a></code> <var class="Ar">depth</var>]
- [<code class="Fl"><a href="#o">-o</a></code> <var class="Ar">out_file</var>]
- [<code class="Fl"><a href="#p">-p</a></code> <var class="Ar">pal_file</var> |
- <code class="Fl"><a href="#P">-P</a></code>] [<code class="Fl"><a href="#t">-t</a></code>
- <var class="Ar">tilemap</var> | <code class="Fl"><a href="#T">-T</a></code>]
- [<code class="Fl"><a href="#x">-x</a></code> <var class="Ar">tiles</var>]
- <var class="Ar">file</var></td>
- </tr>
-</table>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-The <code class="Nm">rgbgfx</code> program converts PNG images into the Nintendo
- Game Boy's planar tile format.
-<p class="Pp">The resulting colors and their palette indices are determined
- differently depending on the input PNG file:</p>
-<ul class="Bl-dash">
- <li>If the file has an embedded palette, that palette's color and order are
- used.</li>
- <li>If not, and the image only contains shades of gray, rgbgfx maps them to
- the indices appropriate for each shade. Any undetermined indices are set
- to respective default shades of gray. For example: if the bit depth is 2
- and the image contains light gray and black, they become the second and
- fourth colors, and the first and third colors get set to default white and
- dark gray. If the image has multiple shades that map to the same index,
- the palette is instead determined as if the image had color.</li>
- <li>If the image has color (or the grayscale method failed), the colors are
- sorted from lightest to darkest.</li>
-</ul>
-<p class="Pp">The input image may not contain more colors than the selected bit
- depth allows. Transparent pixels are set to palette index 0.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ARGUMENTS"><a class="permalink" href="#ARGUMENTS">ARGUMENTS</a></h1>
-Note that options can be abbreviated as long as the abbreviation is unambiguous:
- <code class="Fl">--verb</code> is
- <code class="Fl">-</code> <code class="Fl">-verbose</code>, but
- <code class="Fl">--ver</code> is invalid because it
- could also be <code class="Fl">--version</code>. The
- arguments are as follows:
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#a"><code class="Fl" id="a">-a</code></a>
- <var class="Ar">attrmap,</var>
- <code class="Fl">--attr-map</code>
- <var class="Ar">attrmap</var></dt>
- <dd>Generate a file of tile mirroring attributes for OAM or (CGB-only)
- background tiles. For each tile in the input file, a byte is written
- representing the dimensions that the associated tile in the output file
- should be mirrored. Useful in combination with <code class="Fl">-m</code>
- to keep track the mirror direction of mirrored duplicate tiles.</dd>
- <dt><a class="permalink" href="#A"><code class="Fl" id="A">-A</code></a>,
- <code class="Fl">--output-attr-map</code></dt>
- <dd>Same as <code class="Fl">-a</code>, but the attrmap file output name is
- made by taking the input filename, removing the file extension, and
- appending <span class="Pa">.attrmap</span>.</dd>
- <dt><a class="permalink" href="#C"><code class="Fl" id="C">-C</code></a>,
- <code class="Fl">--color-curve</code></dt>
- <dd>Use the color curve of the Game Boy Color when generating palettes.</dd>
- <dt><a class="permalink" href="#D"><code class="Fl" id="D">-D</code></a>,
- <code class="Fl">--debug</code></dt>
- <dd>Debug features are enabled.</dd>
- <dt><a class="permalink" href="#d"><code class="Fl" id="d">-d</code></a>
- <var class="Ar">depth</var>,
- <code class="Fl">--depth</code>
- <var class="Ar">depth</var></dt>
- <dd>The bit depth of the output image (either 1 or 2). By default, the bit
- depth is 2 (two bits per pixel).</dd>
- <dt><a class="permalink" href="#f"><code class="Fl" id="f">-f</code></a>,
- <code class="Fl">--fix</code></dt>
- <dd>Fix the input PNG file to be a correctly indexed image.</dd>
- <dt><a class="permalink" href="#F"><code class="Fl" id="F">-F</code></a>,
- <code class="Fl">--fix-and-save</code></dt>
- <dd>Same as <code class="Fl">-f</code>, but additionally, the supplied command
- line parameters are saved within the PNG and will be loaded and
- automatically used next time.</dd>
- <dt><a class="permalink" href="#h"><code class="Fl" id="h">-h</code></a>,
- <code class="Fl">--horizontal</code></dt>
- <dd>Lay out tiles horizontally rather than vertically.</dd>
- <dt><a class="permalink" href="#m"><code class="Fl" id="m">-m</code></a>,
- <code class="Fl">--mirror-tiles</code></dt>
- <dd>Truncate tiles by checking for tiles that are mirrored versions of others
- and omitting these from the output file. Useful with tilemaps and attrmaps
- together to keep track of the duplicated tiles and the dimension mirrored.
- Tiles are checked for horizontal, vertical, and horizontal-vertical
- mirroring. Implies <code class="Fl">-u</code>.</dd>
- <dt><a class="permalink" href="#o"><code class="Fl" id="o">-o</code></a>
- <var class="Ar">out_file</var>,
- <code class="Fl">--output</code>
- <var class="Ar">out_file</var></dt>
- <dd>The name of the output file.</dd>
- <dt><a class="permalink" href="#p"><code class="Fl" id="p">-p</code></a>
- <var class="Ar">pal_file</var>,
- <code class="Fl">--palette</code>
- <var class="Ar">pal_file</var></dt>
- <dd>Output the image's palette in standard GBC palette format: bytes (8 bytes
- for two bits per pixel, 4 bytes for one bit per pixel) containing the
- RGB15 values in little-endian byte order. If the palette contains too few
- colors, the remaining entries are set to black.</dd>
- <dt><a class="permalink" href="#P"><code class="Fl" id="P">-P</code></a>,
- <code class="Fl">--output-palette</code></dt>
- <dd>Same as <code class="Fl">-p</code>, but the palette file output name is
- made by taking the input PNG file's filename, removing the file extension,
- and appending <span class="Pa">.pal</span>.</dd>
- <dt><a class="permalink" href="#t"><code class="Fl" id="t">-t</code></a>
- <var class="Ar">tilemap</var>,
- <code class="Fl">--tilemap</code>
- <var class="Ar">tilemap</var></dt>
- <dd>Generate a file of tile indices. For each tile in the input file, a byte
- is written representing the index of the associated tile in the output
- file. Useful in combination with <code class="Fl">-u</code> or
- <code class="Fl">-m</code> to keep track of duplicate tiles.</dd>
- <dt><a class="permalink" href="#T"><code class="Fl" id="T">-T</code></a>,
- <code class="Fl">--output-tilemap</code></dt>
- <dd>Same as <code class="Fl">-t</code>, but the tilemap file output name is
- made by taking the input filename, removing the file extension, and
- appending <span class="Pa">.tilemap</span>.</dd>
- <dt><a class="permalink" href="#u"><code class="Fl" id="u">-u</code></a>,
- <code class="Fl">--unique-tiles</code></dt>
- <dd>Truncate tiles by checking for tiles that are exact duplicates of others
- and omitting these from the output file. Useful with tilemaps to keep
- track of the duplicated tiles.</dd>
- <dt><a class="permalink" href="#V"><code class="Fl" id="V">-V</code></a>,
- <code class="Fl">--version</code></dt>
- <dd>Print the version of the program and exit.</dd>
- <dt><a class="permalink" href="#v"><code class="Fl" id="v">-v</code></a>,
- <code class="Fl">--verbose</code></dt>
- <dd>Verbose. Print errors when the command line parameters and the parameters
- in the PNG file don't match.</dd>
- <dt><a class="permalink" href="#x"><code class="Fl" id="x">-x</code></a>
- <var class="Ar">tiles</var>,
- <code class="Fl">--trim-end</code>
- <var class="Ar">tiles</var></dt>
- <dd>Trim the end of the output file by this many tiles.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-The following will take a PNG file with a bit depth of 1, 2, or 8, and output
- planar 2bpp data:
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbgfx -o out.2bpp in.png</div>
-<p class="Pp">The following creates a planar 2bpp file with only unique tiles,
- and its tilemap <span class="Pa">out.tilemap</span>:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbgfx -T -u -o out.2bpp in.png</div>
-<p class="Pp">The following creates a planar 2bpp file with only unique tiles
- <span class="Pa">accounting for tile mirroring</span> and its associated
- tilemap <span class="Pa">out.tilemap</span> and attrmap
- <span class="Pa">out.attrmap</span>:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbgfx -A -T -m -o out.2bpp in.png</div>
-<p class="Pp">The following will do nothing:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgbgfx in.png</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-Please report bugs on
- <a class="Lk" href="https://github.com/rednex/rgbds/issues">GitHub</a>.
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbds.7.html">rgbds(7)</a>, <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>,
- <a class="Xr" href="rgblink.1.html">rgblink(1)</a>, <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>,
- <a class="Xr" href="gbz80.7.html">gbz80(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<code class="Nm">rgbgfx</code> was created by <span class="An">stag019</span> to
- be included in RGBDS. 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">December 5, 2019</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgblink.1.html
+++ /dev/null
@@ -1,192 +1,0 @@
-<!DOCTYPE html>
-<html>
-<!-- This is an automatically generated file. Do not edit.
- This file is part of RGBDS.
-
- Copyright (c) 2010-2019, Anthony J. Bentley and RGBDS contributors.
-
- SPDX-License-Identifier: MIT
- -->
-<head>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBLINK(1)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBLINK(1)</td>
- <td class="head-vol">General Commands Manual</td>
- <td class="head-rtitle">RGBLINK(1)</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">rgblink</code> —
-<span class="Nd">Game Boy linker</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<table class="Nm">
- <tr>
- <td><code class="Nm">rgblink</code></td>
- <td>[<code class="Fl"><a href="#d">-d</a><a href="#t">t</a><a href="#V">V</a><a href="#v">v</a><a href="#w">w</a><a href="#x">x</a></code>] [<code class="Fl"><a href="#l">-l</a></code>
- <var class="Ar">linker_script</var>] [<code class="Fl"><a href="#m">-m</a></code>
- <var class="Ar">map_file</var>] [<code class="Fl"><a href="#n">-n</a></code>
- <var class="Ar">sym_file</var>] [<code class="Fl"><a href="#O">-O</a></code>
- <var class="Ar">overlay_file</var>] [<code class="Fl"><a href="#o">-o</a></code>
- <var class="Ar">out_file</var>] [<code class="Fl"><a href="#p">-p</a></code>
- <var class="Ar">pad_value</var>] [<code class="Fl"><a href="#s">-s</a></code>
- <var class="Ar">symbol</var>] <var class="Ar">file ...</var></td>
- </tr>
-</table>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-The <code class="Nm">rgblink</code> program links RGB object files, typically
- created by <a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, into a single Game Boy ROM file. The
- format is documented in <a class="Xr" href="rgbds.5.html">rgbds(5)</a>.
-<p class="Pp">ROM0 sections are placed in the first 16 KiB of the output ROM,
- and ROMX sections are placed in any 16 KiB “bank” except the
- first. If your ROM will only be 32 KiB, you can use the
- <code class="Fl">-t</code> option to change this.</p>
-<p class="Pp">Similarly, WRAM0 sections are placed in the first 4 KiB of WRAM
- (“bank 0”), and WRAMX sections are placed in any bank of the
- last 4 KiB. If your ROM doesn't use banked WRAM, you can use the
- <code class="Fl">-w</code> option to change this.</p>
-<p class="Pp">Also, if your ROM is designed for a monochrome Game Boy, you can
- make sure that you don't use any incompatible section by using the
- <code class="Fl">-d</code> option, which implies <code class="Fl">-w</code>
- but also prohibits the use of banked VRAM.</p>
-<p class="Pp">Note that options can be abbreviated as long as the abbreviation
- is unambiguous: <code class="Fl">--verb</code> is
- <code class="Fl">--verbose</code>, but
- <code class="Fl">--ver</code> is invalid because it
- could also be <code class="Fl">--version</code>. The
- arguments are as follows:</p>
-<dl class="Bl-tag">
- <dt><a class="permalink" href="#d"><code class="Fl" id="d">-d</code></a>,
- <code class="Fl">--dmg</code></dt>
- <dd>Enable DMG mode. Prohibit the use of sections that doesn't exist on a DMG,
- such as VRAM bank 1. This option automatically enables
- <code class="Fl">-w</code>.</dd>
- <dt><a class="permalink" href="#l"><code class="Fl" id="l">-l</code></a>
- <var class="Ar">linker_script,</var>
- <code class="Fl">--linkerscript</code>
- <var class="Ar">linker_script</var></dt>
- <dd>Specify a linker script file that tells the linker how sections must be
- placed in the ROM. The attributes assigned in the linker script must be
- consistent with any assigned in the code. See <a class="Xr" href="rgblink.5.html">rgblink(5)</a>
- for more information about the linker script format.</dd>
- <dt><a class="permalink" href="#m"><code class="Fl" id="m">-m</code></a>
- <var class="Ar">map_file</var>,
- <code class="Fl">--map</code>
- <var class="Ar">map_file</var></dt>
- <dd>Write a map file to the given filename, listing how sections and symbols
- were assigned.</dd>
- <dt><a class="permalink" href="#n"><code class="Fl" id="n">-n</code></a>
- <var class="Ar">sym_file</var>,
- <code class="Fl">--sym</code>
- <var class="Ar">sym_file</var></dt>
- <dd>Write a symbol file to the given filename, listing the address of all
- exported symbols. Several external programs can use this information, for
- example to help debugging ROMs.</dd>
- <dt><a class="permalink" href="#O"><code class="Fl" id="O">-O</code></a>
- <var class="Ar">overlay_file</var>,
- <code class="Fl">--overlay</code>
- <var class="Ar">overlay_file</var></dt>
- <dd>If specified, sections will be overlaid "on top" of the provided
- ROM image. In that case, all sections must be fixed. This may be used to
- patch an existing binary.</dd>
- <dt><a class="permalink" href="#o"><code class="Fl" id="o">-o</code></a>
- <var class="Ar">out_file</var>,
- <code class="Fl">--output</code>
- <var class="Ar">out_file</var></dt>
- <dd>Write the ROM image to the given file.</dd>
- <dt><a class="permalink" href="#p"><code class="Fl" id="p">-p</code></a>
- <var class="Ar">pad_value</var>,
- <code class="Fl">--pad</code>
- <var class="Ar">pad_value</var></dt>
- <dd>When inserting padding between sections, pad with this value. Has no
- effect if <code class="Fl">-O</code> is specified. The default is 0.</dd>
- <dt><a class="permalink" href="#s"><code class="Fl" id="s">-s</code></a>
- <var class="Ar">symbol</var>,
- <code class="Fl">--smart</code>
- <var class="Ar">symbol</var></dt>
- <dd>This option is ignored. It was supposed to perform smart linking but fell
- into disrepair, and so has been removed. It will be reimplemented at some
- point.</dd>
- <dt><a class="permalink" href="#t"><code class="Fl" id="t">-t</code></a>,
- <code class="Fl">--tiny</code></dt>
- <dd>Expand the ROM0 section size from 16 KiB to the full 32 KiB assigned to
- ROM. ROMX sections that are fixed to a bank other than 1 become errors,
- other ROMX sections are treated as ROM0. Useful for ROMs that fit in 32
- KiB.</dd>
- <dt><a class="permalink" href="#V"><code class="Fl" id="V">-V</code></a>,
- <code class="Fl">--version</code></dt>
- <dd>Print the version of the program and exit.</dd>
- <dt><a class="permalink" href="#v"><code class="Fl" id="v">-v</code></a>,
- <code class="Fl">--verbose</code></dt>
- <dd>Verbose: enable printing more information to standard error.</dd>
- <dt><a class="permalink" href="#w"><code class="Fl" id="w">-w</code></a>,
- <code class="Fl">--wramx</code></dt>
- <dd>Expand the WRAM0 section size from 4 KiB to the full 8 KiB assigned to
- WRAM. WRAMX sections that are fixed to a bank other than 1 become errors,
- other WRAMX sections are treated as WRAM0.</dd>
- <dt><a class="permalink" href="#x"><code class="Fl" id="x">-x</code></a>,
- <code class="Fl">--nopad</code></dt>
- <dd>Disables padding the end of the final file. This option automatically
- enables <code class="Fl">-t</code>. You can use this when not not making a
- ROM. When making a ROM, be careful that not using this is not a
- replacement for <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>'s <code class="Fl">-p</code>
- option!</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-All you need for a basic ROM is an object file, which can be made into a ROM
- image like so:
-<p class="Pp"></p>
-<div class="Bd Bd-indent">$ rgblink -o bar.gb foo.o</div>
-<p class="Pp">The resulting <var class="Ar">bar.gb</var> will not have correct
- checksums (unless you put them in the assembly source). You should use
- <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a> to fix these so that the program will actually
- run in a Game Boy:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent"><code class="Li">$ rgbfix -v bar.gb</code></div>
-<p class="Pp">Here is a more complete example:</p>
-<p class="Pp"></p>
-<div class="Bd Bd-indent"><code class="Li">$ rgblink -o bin/game.gb -n
- bin/game.sym -p 0xFF obj/title.o obj/engine.o</code></div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-Please report bugs on
- <a class="Lk" href="https://github.com/rednex/rgbds/issues">GitHub</a>.
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgblink.5.html">rgblink(5)</a>,
- <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>, <a class="Xr" href="rgbds.5.html">rgbds(5)</a>,
- <a class="Xr" href="rgbds.7.html">rgbds(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<code class="Nm">rgblink</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">November 26, 2019</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/docs/rgblink.5.html
+++ /dev/null
@@ -1,111 +1,0 @@
-<!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 name="viewport" content="width=device-width, initial-scale=1">
- <meta charset="utf-8"/>
- <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
- <link rel="stylesheet" href="rgbds.css" type="text/css" media="all"/>
- <title>RGBLINK(5)</title>
-</head>
-<body>
-<table class="head">
- <tr>
- <td class="head-ltitle">RGBLINK(5)</td>
- <td class="head-vol">File Formats Manual</td>
- <td class="head-rtitle">RGBLINK(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">rgblink</code> —
-<span class="Nd">linker script file format</span>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-The linker script is an external file that allows the user to specify the order
- of sections at link time and in a centralized manner.
-<p class="Pp">A linker script consists on a series of banks followed by a list
- of sections and, optionally, commands. They can be lowercase or uppercase,
- it is ignored. Any line can contain a comment starting with
- ‘<code class="Li">;</code>’ that ends at the end of the
- line:</p>
-<div class="Bd Pp Bd-indent">
-<pre>
-ROMX $F ; This is a comment
- "Functions to read array"
- ALIGN 8
- "Array aligned to 256 bytes"
-
-WRAMX 2
- "Some variables"
-</pre>
-</div>
-<p class="Pp">Numbers can be in decimal or hexadecimal format (the prefix is
- ‘<code class="Li">$</code>’). It is an error if any section
- name or command is found before setting a bank.</p>
-<p class="Pp">Files can be included by using the <code class="Ic">INCLUDE</code>
- keyword, followed by a string with the path of the file that has to be
- included.</p>
-<p class="Pp">The possible bank types are: <code class="Cm">ROM0</code>,
- <code class="Cm">ROMX</code>, <code class="Cm">VRAM</code>,
- <code class="Cm">SRAM</code>, <code class="Cm">WRAM0</code>,
- <code class="Cm">WRAMX</code>, <code class="Cm">OAM</code> and
- <code class="Cm">HRAM</code>. Unless there is a single bank, which can occur
- with types <code class="Cm">ROMX</code>, <code class="Cm">VRAM</code>,
- <code class="Cm">SRAM</code> and <code class="Cm">WRAMX</code>, it is needed
- to specify a bank number after the type.</p>
-<p class="Pp">When a new bank statement is found, sections found after it will
- be placed right from the beginning of that bank. If the linker script
- switches to a different bank and then comes back to a previous one, it will
- continue from the last address that was used.</p>
-<p class="Pp">The only two commands are <code class="Ic">ORG</code> and
- <code class="Ic">ALIGN</code>:</p>
-<ul class="Bl-bullet">
- <li><a class="permalink" href="#ORG"><code class="Ic" id="ORG">ORG</code></a>
- sets the address in which new sections will be placed. It can not be lower
- than the current address.</li>
- <li><a class="permalink" href="#ALIGN"><code class="Ic" id="ALIGN">ALIGN</code></a>
- will increase the address until it is aligned to the specified boundary
- (it tries to set to 0 the number of bits specified after the command:
- ‘<code class="Li">ALIGN 8</code>’ will align to $100).</li>
-</ul>
-<p class="Pp"><b class="Sy">Note:</b> The bank, alignment, address and type of
- sections can be specified both in the source code and in the linker script.
- For a section to be able to be placed with the linker script, the bank,
- address and alignment must be left unassigned in the source code or be
- compatible with what is specified in the linker script. For example,
- ‘<code class="Li">ALIGN[8]</code>’ in the source code is
- compatible with ‘<code class="Li">ORG $F00</code>’ in the
- linker script.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<a class="Xr" href="rgbasm.1.html">rgbasm(1)</a>, <a class="Xr" href="rgblink.1.html">rgblink(1)</a>,
- <a class="Xr" href="rgbfix.1.html">rgbfix(1)</a>, <a class="Xr" href="rgbds.5.html">rgbds(5)</a>,
- <a class="Xr" href="rgbds.7.html">rgbds(7)</a>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<code class="Nm">rgblink</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">November 26, 2019</td>
- <td class="foot-os">General</td>
- </tr>
-</table>
-</body>
-</html>
--- a/src/doc_postproc.awk
+++ /dev/null
@@ -1,48 +1,0 @@
-#!/usr/bin/awk -f
-
-/^\s+<td><b class="Sy">.+<\/b><\/td>$/ {
- # Assuming that all cells whose contents are bold are heading cells,
- # use the HTML tag for those
- sub(/td><b class="Sy"/, "th");
- sub(/b><\/td/, "th");
-}
-
-BEGIN {
- in_synopsis = 0
-}
-/<table class="Nm">/ {
- in_synopsis = 1
-}
-/<\/table>/ {
- # Resets synopsis state even when already reset, but whatever
- in_synopsis = 0
-}
-/<code class="Fl">-[a-zA-Z]/ {
- # Add links to arg descr in synopsis section
- if (in_synopsis) {
- while (match($0, /<code class="Fl">-[a-zA-Z]+/)) {
- # 123456789012345678 -> 18 chars
- optchars = substr($0, RSTART + 18, RLENGTH - 18)
- i = length(optchars)
- while (i) {
- end = RSTART + 18 + i
- i -= 1
- len = i ? 1 : 2
- $0 = sprintf("%s<a href=\"#%s\">%s</a>%s",
- substr($0, 0, end - len - 1),
- substr($0, end - 1, 1),
- substr($0, end - len, len),
- substr($0, end))
- }
- }
- }
-}
-
-{
- # Make long opts (defined using `Fl Fl`) into a single tag
- gsub(/<code class="Fl">-<\/code>\s*<code class="Fl">/, "<code class=\"Fl\">-")
-}
-
-{
-}