On this page
  1. Super Mario World
  2. Related
  3. Games
  4. References
  5. Sources

Mode 7 trades the Super NES’s layers for one transformable one: a 128 by 128 tile map, 1,024 pixels square, that the PPU maps to the screen through a matrix of four 8.8 fixed-point values about a center point1. A game that writes a rotation into the matrix turns the whole layer.

  • Rotate and scaleSuper Mario World (1990). An angle and two scales turned into the matrix with a sine table; Reznor's wheel turns once in 512 frames.2,3

#Super Mario World

The game keeps an angle and two scales, with angle $200 = 360°, scale $20 = 1.02, and builds the matrix from a quarter-wave sine table; the second row is the first turned by 90 degrees. In the Reznor fight the angle steps once a frame, so the wheel turns once every 512 frames3.

The boss rooms still have a status bar. Each frame starts in Mode 1 for the bar, and an interrupt at the bar’s last line switches to Mode 7 for the room4.

Games

GameYearHowNote
Super Mario World1990Rotate and scalean angle and two scales turned into the matrix with a sine table; Reznor's wheel turns once in 512 frames
Every claim about this mechanic, by game (3)

References

  1. ^Mode 7 has a single background layer, a 128 by 128 tile map of 256 8 by 8 tiles (1,024 by 1,024 pixels) that the PPU transforms by a 2 by 2 matrix, M7A to M7D ($211B-$211E, 8.8 fixed point), about a center set by M7X and M7Y.WikiSNESdev Wiki, “Backgrounds” · SNESdev Wiki, “PPU registers”
    How we know
    Mode 7 ignores most of the layer configuration options, and instead always occupies the entire first half of VRAM with a 128x128 tilemap, and 256 available 8x8 tiles. … This provides a single background layer that has a unique transformation property.
    Mode 7 · archived copy ↗
    Mode 7 matrix A (8.8 fixed point)
    M7A - Mode 7 matrix A and Multiplication factor 1 ($211B write twice) · archived copy ↗
    Mode 7 matrix n (8.8 fixed point)
    M7n - Mode 7 matrix C-D ($211D-211E write twice) · archived copy ↗
    Mode 7 center X (signed)
    M7X - Mode 7 center X ($211F write twice) · archived copy ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

  2. ^ abThe game keeps a Mode 7 angle, 0 to $1FF for a full turn, and an X and a Y scale, $20 for 1.0, and turns them into the matrix with a quarter-wave sine table of 129 entries; D copies A and C is −B, a rotation scaled per axis.CodeSMWDisX
    How we know
    1303CalculateMode7Values:                         ; Subroutine to convert mode 7 X/Y Scale and angle into A/B/C/D Matrix values.
    ⋮
    1311    LDA.B Mode7ParamA                         ;\ D <- A
    1312    STA.B Mode7ParamD                         ;| C <- -B
    
    bank_00.asm lines 1303–1318 at 30643c7 · upstream ↗
    1319    LDA.B Mode7Angle                          ; A value of $0200 here equals 360 degrees.
    
    bank_00.asm line 1319 at 30643c7 · upstream ↗
    1371    LSR #5                                    ; Scale of $20 = 1.0
    ⋮
    1374M7SineWave:                                   ; Sine LUT, from 0->pi/2 rad, 129 entries
    
    bank_00.asm lines 1371–1374 at 30643c7 · upstream ↗
    379Mode7Lagging:                                 ; Transfer various RAM mirrors to the registers
    ⋮
    396    LDA.B Mode7ParamA
    397    STA.W HW_M7A
    ⋮
    399    STA.W HW_M7A
    ⋮
    408    LDA.B Mode7ParamD
    409    STA.W HW_M7D
    410    LDA.B Mode7ParamD+1
    411    STA.W HW_M7D
    
    bank_00.asm lines 379–412 at 30643c7 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

  3. ^ abIn the Reznor fight the Reznor in sprite slot 7 sets the Mode 7 center to $80 and adds 1 to the angle each frame, wrapping at $1FF, so the Mode 7 wheel the four Reznors ride (the "Reznor sign" in the comments) turns once every 512 frames.CodeSMWDisX
    How we know
    3194Reznor:
    3195    INC.W ReznorOAMIndex
    3196    LDA.B SpriteLock
    3197    BEQ +
    3198    JMP DrawReznor
    ⋮
    3200  + CPX.B #$07
    3201    BNE CODE_039910
    ⋮
    3204    LDA.B #$80                                ; \ Set radius for Reznor sign rotation
    
    bank_03.asm lines 3194–3206 at 30643c7 · upstream ↗
    3219    LDA.B Mode7Angle                          ; \ Rotate 1 frame around the circle (clockwise)
    3220    CLC                                       ; | $37,36 = 0 to 1FF, denotes circle position
    3221    ADC.W #$0001                              ; |
    3222    AND.W #$01FF                              ; |
    3223    STA.B Mode7Angle                          ; /
    
    bank_03.asm lines 3219–3223 at 30643c7 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

  4. ^In the Mode 7 boss rooms other than Bowser's, the NMI sets Mode 1 for the status bar at the top of the frame, and an interrupt at the line where the bar ends switches to Mode 7 and writes the Mode 7 layer's scroll; the bar ends at line 36, or 45 in Morton's and Roy's rooms. Bowser's room skips the status bar interrupt and goes straight to Mode 7.CodeSMWDisXrevised
    How we know
    379Mode7Lagging:                                 ; Transfer various RAM mirrors to the registers
    380    LDA.B #!HW_BG_BG3Pri|!HW_BG_Mode1
    381    STA.W HW_BGMODE
    
    bank_00.asm lines 379–381 at 30643c7 · upstream ↗
    413    LDA.W IRQNMICommand                       ;\ 
    414    LSR A                                     ;| Branch if not in Bowser's room.
    415    BCC +                                     ;/
    ⋮
    420    LDA.B #!HW_TIMEN_NMI|!HW_TIMEN_JoyRead    ;\ Skip the status bar IRQ and immediately prepare the registers after.
    421    JMP CODE_0083F3                           ;/
    
    bank_00.asm lines 413–421 at 30643c7 · upstream ↗
    432    LDY.B #!StatusBarHeight+9                 ;/ Scanline the status bar ends at in Morton/Roy's rooms.
    433  + JMP CODE_008294                           ; Prepare IRQ, and set up a couple more registers.
    
    bank_00.asm lines 423–433 at 30643c7 · upstream ↗
    505CODE_0083F3:                                  ; IRQ done; wait for H-blank, then update registers.
    ⋮
    510    LDA.B #!HW_BG_Mode7
    511    STA.W HW_BGMODE
    512    LDA.B Mode7XPos
    513    STA.W HW_BG1HOFS
    ⋮
    515    STA.W HW_BG1HOFS
    ⋮
    517    STA.W HW_BG1VOFS
    ⋮
    519    STA.W HW_BG1VOFS
    
    bank_00.asm lines 505–519 at 30643c7 · upstream ↗
    57!StatusBarHeight = 36
    
    constants.asm line 57 at 30643c7 · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Revised after a check by a second AI model, 2026-10-21.

    In the claim ledger

Sources

Code

Secondary