NoahJosephHall icon

s2.notes.txt

NoahJosephHall | PRO | 02/13/17 11:44:40 AM UTC | 0 ⭐ | 7861 👁️ | Never ⏰ | []
M68000 Assembler |

0 B

|

None

|

0 👍

/

0 👎

; ---------------------------------------------------------------------------
; STYLE:
;
; Code is indented by one tab stop, which on my editor is 8 spaces. Most labels
; appear on separate lines, with the exception of nameless temporary labels
; which always appear next to the relevant instruction. Blank lines are inserted
; after reverse branches, to help make loops clearer; they may also be inserted
; before the start of the loop if it is simple enough. If code execution cannot
; continue linerally because of an unconditional jump, branch, or a return
; instruction, a series of dashed or double-dashed lines is inserted at the
; point where PC is altered. (Double dashes indicate possibly more significant
; boundaries than single dashes, but there is no hard rule behind the choice.)
; These dashes have been removed when breached by nameless temporary variables.
; 
; Variables and structures have underscore-seperated names (eg Decomp_Buffer,
; Camera_X_Pos), while subroutine labels lack underscores for the most part.
; The exception here is templated names, where each part of the template is
; separated from the rest of the label by underscores. It's easy to figure
; out what a templated name refers to, because the template makes it obvious.
; For example, Obj##_ always refers to code, because the concept of "object" as
; it applies to Genesis Sonic games only makes sense when applied to executable
; code.
; Variables and labels that are relative to the start of z80 RAM begin with
; a lowercase "z" character. The Z80 sound driver code is in s2.sounddriver.asm.
 
; I kept as many old and alternate label names around in the comments as I could,
; for your convenience in case you search for something by those label names.
; However, I renamed prefixes of address-containing labels as I saw fit,
; so for example you should search for "EC000:" instead of "loc_EC000:"
;
; I removed the colon after certain labels; this is because they ended with
; the names of other more important labels and would otherwise make searching
; for those other labels more difficult. In those cases, the colon is replaced
; with a space, so there is still something to add to your search if you
; want to find the definition of one of these conflicting less-important labels.
; This only applies to labels starting with "JmpTo_" or "BranchTo_".
;
; As comments on lines that change a subroutine counter, I use "=>" to mean
; "this changes the state such that this subroutine will get called:"
; On lines that change a subtype or data loading param, I use "<==" to mean
; "this changes the state such that this data will get loaded:"
;
; In case you want to change the object status table offset values:
; Many of these aren't completely safe to change because
; some code implicitly assumes the existing order when setting multiple variables,
; but swapping x with y, mappings with a position variable,
; or variables above $19 with each other should be safe, if you know what you're doing.
;
; The rest of this document is somewhat out of date.
 
; ---------------------------------------------------------------------------
; TEMPLATES:
;
; Obj$(NAME_OF_OBJECT)
;   Start of object code.
; Obj_$(OBJECT_REF_NUM)_subtbl
;   Jump table of subroutine pointers. May be appended with '2' if this is a
;   secondary jump table (i.e. it goes with the secondary routine counter).
; Obj_$(OBJECT_REF_NUM)_sub_$(SUBROUTINE_VALUE)
;   Start of an object subroutine.
; MapUnc_$(OBJECT_REF_NUM)
;   Sprite table for $(OBJECT_REF_NUM). If an object has more than one, each is
;   appended by _primary, _scndary, _trnary, etc. If a single table is used
;   by multiple objects, the reference number of each is listed.
 
; Blocks marked (!) require further investigation.
; ---------------------------------------------------------------------------
; MAIN MEMORY MAP - NORMAL PLAY
 
; $0000 - $7FFF     Metablock table
; $8000 - $8FFF     Level layout
; $9000 - $A9FF     Block table
; $AA00 - $A?FF     Decompression buffer
; $AC00 - $AFFF     Intermediate sprite attribute table buffer
; $B000 - $D5FF     Object attribute table
; $D600 - $D8FF     Primary collision index
; $D900 - $DBFF     Secondary collision index
; $DC00 - $DFFF     Queued VDP command buffer
; $E000 - $E3FF     H scroll table buffer
; $E400 - $E4FF     Unknown data
; $E500 - $E5FF     Unknown data
; $E600 - $E6FF     Unknown data
; $E700 - $E7FF     Empty space?
; $E800 - $EDFF     Ring position table
; $EE00 - $EFFF     Variables
; $F000 - $F07F     Unknown palette
; $F080 - $F0FF     Underwater palette
; $F100 - $F67F     Variables
; $F680 - $F6FF     Pattern load queue
; $F700 - $F7FF     Variables
; $F800 - $F93F     Sprite attribute table buffer
; $F940 - $FAFF     Variables
; $FB00 - $FBF7     Above water palette
; $FB80 - $FBFF     Unknown palette
; $FC00 - $FCFF     Object respawn table
; $FD00 - $FFFF     Variables
 
; Special stages have a completely different memory layout, but I don't know
; enough about it to fill out a releaseable map.
 
; ---------------------------------------------------------------------------
; VRAM MAP - NORMAL PLAY
 
; $0000 - $BFFF     Main patterns *
; $C000 - $CFFF     Plane A pattern name table
; $D000 - $DFFF     Patterns for text, powerups, and rings
; $E000 - $E7FF     Plane B pattern name table
; $F000 - $F7FF     Sonic and Tails (both are always loaded)
; $F800 - $FA7F     Sprite attribute table
; $FA80 - $FBFF     Life counter
; $FC00 - $FFFF     Horizontal scroll table
 
; Pattern name tables are 64x32 cells; display is 40x28 cells. The extra space
; is used as a scroll buffer.
 
; VRAM MAP - SPECIAL STAGE
 
; $0000 - $7FFF     Main patterns *
; $8000 - $9FFF     Plane A pattern name table 1
; $A000 - $BFFF     Plane B pattern name table
; $C000 - $DFFF     Plane A pattern name table 2
; $E000 - $F7FF     Background tiles
; $F800 - $FA7F     Sprite attribute table
; $FA80 - $FBFF     Life counter (not used in special stage)
; $FC00 - $FFFF     Horizontal scroll table
 
; Pattern name tables are 128x32 cells, display is 32x28 cells. This means
; that fully four display screens can be represented by the pattern name
; tables. This extra room is probably used for animation.
 
; Plane W (the window) is disabled.
 
; * The upper part of this area contains sprite patterns, while the lower part
;   contains patterns for the scrolling layers (i.e. the fore and background).
;   Where the division lies seems to depend on the particular Zone. Oil Ocean
;   Zone, for example, doesn't have a very complex background, and so can free
;   up some more space for sprites by repeatedly referencing the same blocks
;   in Scroll B's pattern name table.

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎