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:

Terminology

This section concerns the usage of certain words in certain context.

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 "+"

Last updated