Links

Contributing

This chapter concerns the writers of this tutorial. When writing, there are a few standards to follow in order to maximize consistency throughout the tutorial.

Address explanations

This section concerns the way addresses are written, as to avoid confusion.

Direct page

  • For the sake of simplicity and explanation, all direct page addresses ("$xx") shall use address $7E0000 as its base. This shall be emphasized in code block comments, as well as explanations.
Example:
LDA #$42
STA $08 ; Store the value $42 into address $7E0008

Absolute addressing

  • All absolute addresses ("$xxxx") use address $7E0000 as its base, if the address is between $0000-$7FFF inclusive. For addresses between $8000-$FFFF, address $000000 shall be used as its base instead. This shall be emphasized in code block comments, as well as explanations.
Example:
LDA $8002 ; Load the value at address $008002 into A
STA $1008 ; Store that value into address $7E1008

Styling

This section concern the styling of the document.

Inline code

  • All opcodes and instructions shall be surrounded by the markdown backtick (`), regardless of the context.
Example: The opcode LDA is used to load values into the A register. Thus, LDA #$49 loads the value $49 into A. This then can be increased to the value $4A by using INC A.

Markdown tables

  • Sentences and phrases within table cells generally shouldn't end with a period.
  • Tables introducing opcodes should have the opcodes in bold and have at least the three columns in below example:
Opcode
Full name
Explanation
LDA
Load into accumulator
Load a value into A

Terminology

This section concerns the usage of certain words in certain context.
Rule
Example
When referring to the Ricoh 5A22 processor, use the SNES instead
The SNES is capable of entering 8-bit or 16-bit mode
When referring to a specific area in the SNES memory, always prepend address to it, preferably with the memory area (i.e. RAM)
(The) RAM address $7E0000 contains [...]
When referring to the accumulator (A) or the index registers (X and Y), just use A, X or Y
A is now in 8-bit mode. X is used to index addresses
When referring to values, always prepend value to it
A contains the value $00

Example codes

  • Code shall use indentation when there are labels, sublabels or plus/minus labels on the same line as an instruction. The amount of indentation equals the length of the longest aforementioned type of label in the code block, including colon (":"), plus two additional spaces.
    • Code shall use whitespace for indentation, not tabs.
  • Opcodes are written entirely in uppercase (e.g.: LDA).
  • Labels are written in PascalCase (e.g.: Label1:).
  • Sublabels are written entirely in lower, underscore-case and the name should semantically suit the parent label, without redundancy (e.g.: .return).
  • Defines are written in PascalCase (e.g.: !SomeDefine).
  • Direct data (db, dw, dl, dd), indexers (,x, ,y, ,s) and opcode length specifiers (.b, .w, .l) are written entirely in lowercase.
  • Comment indicators (i.e. ;) shall start on column 20, and left-padded by whitespace, not tabs.
    • If there's no space for a comment on column 20, it should start on the same line anyway.
  • In fact, never use tabs.
  • Comment indicators shall be followed by a whitespace, before the comment itself.
  • There will be an extra new line after the opcodes RTS, RTL, RTI, JMP, JML, BRA, BRL.
  • These are guidelines which are to be followed as strictly as possible, but there may be exceptional cases. Use your best judgment.
Examples:
SomeLabel: ; This label is on its own line
LDA.b #$42
STA $00 ; This is a comment
RTS
.table:
db $01,$02,$03,$04 ; Another comment
.second_table:
db $01,$02,$03,$04,$01,$02,$03,$04 ; An exceptional comment
TestLabel: LDA #$02 ; This label is on the same line as an instruction
STA $01
BNE +
NOP
+ RTS ; The code is indented according to "TestLabel", not "+"