Skip to navigation

Elite on the BBC Micro and NES

Bank 3 (Part 1 of 2)

[NES version]

NES ELITE GAME SOURCE (BANK 3) NES Elite was written by Ian Bell and David Braben and is copyright D. Braben and I. Bell 1991/1992 The code on this site has been reconstructed from a disassembly of the version released on Ian Bell's personal website at http://www.elitehomepage.org/ The commentary is copyright Mark Moxon, and any misunderstandings or mistakes in the documentation are entirely my fault The terminology and notations used in this commentary are explained at https://www.bbcelite.com/terminology The deep dive articles referred to in this commentary can be found at https://www.bbcelite.com/deep_dives
This source file produces the following binary file: * bank3.bin
ELITE BANK 1 Produces the binary file bank1.bin.
ORG CODE%
Name: ResetMMC1_b3 [Show more] Type: Subroutine Category: Start and end Summary: The MMC1 mapper reset routine at the start of the ROM bank Deep dive: Splitting NES Elite across multiple ROM banks
Context: See this subroutine on its own page References: This subroutine is called as follows: * Vectors_b3 calls ResetMMC1_b3

When the NES is switched on, it is hardwired to perform a JMP ($FFFC). At this point, there is no guarantee as to which ROM banks are mapped to $8000 and $C000, so to ensure that the game starts up correctly, we put the same code in each ROM at the following locations: * We put $C000 in address $FFFC in every ROM bank, so the NES always jumps to $C000 when it starts up via the JMP ($FFFC), irrespective of which ROM bank is mapped to $C000. * We put the same reset routine (this routine, ResetMMC1) at the start of every ROM bank, so the same routine gets run, whichever ROM bank is mapped to $C000. This ResetMMC1 routine is therefore called when the NES starts up, whatever the bank configuration ends up being. It then switches ROM bank 7 to $C000 and jumps into bank 7 at the game's entry point BEGIN, which starts the game.
.ResetMMC1_b3 SEI ; Disable interrupts INC $C006 ; Reset the MMC1 mapper, which we can do by writing a ; value with bit 7 set into any address in ROM space ; (i.e. any address from $8000 to $FFFF) ; ; The INC instruction does this in a more efficient ; manner than an LDA/STA pair, as it: ; ; * Fetches the contents of address $C006, which ; contains the high byte of the JMP destination ; below, i.e. the high byte of BEGIN, which is $C0 ; ; * Adds 1, to give $C1 ; ; * Writes the value $C1 back to address $C006 ; ; $C006 is in the ROM space and $C1 has bit 7 set, so ; the INC does all that is required to reset the mapper, ; in fewer cycles and bytes than an LDA/STA pair ; ; Resetting MMC1 maps bank 7 to $C000 and enables the ; bank at $8000 to be switched, so this instruction ; ensures that bank 7 is present JMP BEGIN ; Jump to BEGIN in bank 7 to start the game
Name: Interrupts_b3 [Show more] Type: Subroutine Category: Start and end Summary: The IRQ and NMI handler while the MMC1 mapper reset routine is still running
Context: See this subroutine on its own page References: This subroutine is called as follows: * Vectors_b3 calls Interrupts_b3
.Interrupts_b3 IF _NTSC RTI ; Return from the IRQ interrupt without doing anything ; ; This ensures that while the system is starting up and ; the ROM banks are in an unknown configuration, any IRQ ; interrupts that go via the vector at $FFFE and any NMI ; interrupts that go via the vector at $FFFA will end up ; here and be dealt with ; ; Once bank 7 is switched into $C000 by the ResetMMC1 ; routine, the vector is overwritten with the last two ; bytes of bank 7, which point to the IRQ routine ENDIF
Name: versionNumber_b3 [Show more] Type: Variable Category: Text Summary: The game's version number in bank 3
Context: See this variable on its own page References: No direct references to this variable in this source file
IF _NTSC EQUS " 5.0" ELIF _PAL EQUS "<2.8>" ENDIF
Name: Copyright and version message [Show more] Type: Variable Category: Text Summary: A copyright and version message buried in the code
Context: See this variable on its own page References: No direct references to this variable in this source file
IF _NTSC EQUS " NES ELITE IMAGE 5.2" EQUS " - " EQUS " 24 APR 1992" EQUS " (C) D.Braben & I.Bell 1991/92" EQUS " " ELIF _PAL EQUS " NES ELITE IMAGE 2.8" EQUS " - " EQUS " 04 MAR 1992" EQUS " (C) D.Braben & I.Bell 1991/92" EQUS " " ENDIF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $FF, $FF, $FF, $FF, $FF
Name: iconBarImage0 [Show more] Type: Variable Category: Icon bar Summary: Image data for icon bar 0 (Docked)
Context: See this variable on its own page References: This variable is used as follows: * ChooseLanguage uses iconBarImage0 * SetupSprite0 uses iconBarImage0 * ShowIconBar uses iconBarImage0

You can view the tiles that make up the Docked icon bar here: https://www.bbcelite.com/images/source/nes/iconBarImage0_ppu.png and you can see what the Docked icon bar looks like on-screen here: https://www.bbcelite.com/images/nes/general/data_on_lave.png
.iconBarImage0 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BB, $BB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $03, $03, $03, $03, $03, $03, $07, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $C0, $C0, $C0, $C0, $C0, $C0, $E0, $E0 EQUB $00, $00, $00, $00, $02, $06, $0E, $06 EQUB $0F, $1F, $1C, $DC, $DA, $B6, $AE, $B6 EQUB $00, $00, $00, $84, $20, $50, $88, $50 EQUB $FE, $FF, $01, $29, $55, $A9, $05, $A9 EQUB $00, $00, $00, $00, $00, $00, $00, $01 EQUB $FF, $F7, $61, $57, $41, $75, $43, $77 EQUB $00, $00, $00, $00, $00, $40, $A0, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $0D, $00, $07, $00, $00, $00 EQUB $0F, $1F, $12, $DF, $D8, $BF, $A5, $AD EQUB $00, $00, $6A, $00, $58, $00, $00, $00 EQUB $FE, $FF, $95, $FF, $A7, $FF, $A0, $B5 EQUB $00, $00, $1C, $63, $41, $80, $80, $80 EQUB $FF, $FF, $FF, $FF, $FF, $F7, $E3, $F7 EQUB $00, $00, $00, $40, $00, $80, $90, $80 EQUB $E0, $F0, $F0, $B7, $F7, $FB, $EB, $FB EQUB $00, $00, $00, $00, $00, $00, $07, $00 EQUB $0F, $1F, $1F, $DF, $DF, $B0, $B7, $B0 EQUB $00, $00, $00, $00, $1C, $20, $E0, $20 EQUB $FE, $FF, $FF, $E3, $DD, $21, $EF, $21 EQUB $00, $00, $0F, $00, $3F, $01, $7D, $44 EQUB $FF, $F0, $E0, $E0, $FF, $01, $01, $00 EQUB $00, $00, $80, $40, $40, $40, $40, $40 EQUB $E0, $10, $10, $17, $17, $1B, $1B, $1B EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $0F, $1F, $1F, $D1, $D5, $B1, $B5, $B5 EQUB $00, $00, $00, $0E, $0A, $0E, $0A, $0A EQUB $FE, $FF, $FF, $11, $55, $11, $55, $55 EQUB $00, $00, $00, $6C, $00, $5D, $00, $EC EQUB $FF, $FF, $FF, $92, $FE, $A3, $FE, $12 EQUB $00, $00, $00, $00, $C0, $E0, $C0, $00 EQUB $E0, $F0, $F0, $17, $D7, $FB, $DB, $1B EQUB $00, $00, $00, $01, $02, $02, $02, $02 EQUB $0F, $1F, $1C, $D9, $DA, $BA, $BA, $BA EQUB $00, $00, $C0, $E0, $D0, $10, $D0, $D0 EQUB $FE, $3F, $CF, $E7, $C7, $07, $07, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $82, $01, $10, $92, $10 EQUB $93, $93, $93, $11, $92, $00, $45, $44 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $00, $00, $00, $01, $0B EQUB $0F, $0F, $1F, $1F, $3F, $3F, $7E, $74 EQUB $00, $00, $00, $00, $00, $00, $80, $D0 EQUB $F0, $F0, $F8, $F8, $FC, $FC, $7E, $2E EQUB $02, $00, $00, $20, $1F, $00, $20, $00 EQUB $3A, $3C, $3C, $1F, $20, $00, $5F, $40 EQUB $20, $00, $00, $00, $FF, $00, $00, $00 EQUB $55, $AD, $01, $FF, $00, $00, $FF, $00 EQUB $22, $54, $08, $00, $FF, $00, $00, $00 EQUB $7F, $7F, $08, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $19, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $25, $2D, $24, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $B4, $B5, $B4, $FF, $00, $00, $FF, $00 EQUB $41, $63, $1C, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $20, $00, $08, $F0, $01, $09, $01 EQUB $F9, $D9, $F9, $F1, $09, $00, $F4, $04 EQUB $1C, $00, $00, $00, $FF, $00, $00, $00 EQUB $DD, $E3, $FF, $FF, $00, $00, $FF, $00 EQUB $7D, $01, $1F, $00, $FF, $00, $00, $00 EQUB $00, $00, $C0, $C0, $00, $00, $FF, $00 EQUB $40, $40, $00, $08, $F0, $01, $09, $01 EQUB $19, $19, $39, $71, $09, $00, $F4, $04 EQUB $00, $0E, $00, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $DD, $00, $00, $FF, $00, $00, $00 EQUB $FF, $22, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $A0, $00, $08, $F0, $01, $09, $01 EQUB $F9, $59, $F9, $F1, $09, $00, $F4, $04 EQUB $02, $02, $00, $20, $1F, $00, $20, $00 EQUB $3A, $3A, $3C, $1F, $20, $00, $5F, $40 EQUB $D0, $D0, $C0, $00, $FF, $00, $00, $00 EQUB $07, $07, $0F, $3F, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00
Name: iconBarImage1 [Show more] Type: Variable Category: Icon bar Summary: Image data for icon bar 1 (Flight)
Context: See this variable on its own page References: No direct references to this variable in this source file

You can view the tiles that make up the Flight icon bar here: https://www.bbcelite.com/images/source/nes/iconBarImage0_ppu.png and you can see what the Flight icon bar looks like on-screen here: https://www.bbcelite.com/images/nes/general/station.png
.iconBarImage1 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BB, $BB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $03, $03, $03, $03, $03, $03, $07, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $C0, $C0, $C0, $C0, $C0, $C0, $E0, $E0 EQUB $00, $00, $00, $01, $05, $06, $07, $06 EQUB $0F, $1F, $1C, $D0, $D4, $B6, $B7, $B6 EQUB $00, $00, $00, $84, $20, $50, $08, $50 EQUB $FE, $FF, $01, $29, $55, $A9, $05, $A9 EQUB $00, $00, $00, $00, $00, $00, $00, $01 EQUB $FF, $F7, $61, $57, $41, $75, $43, $77 EQUB $00, $00, $00, $00, $00, $40, $A0, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $0D, $00, $07, $00, $00, $00 EQUB $0F, $1F, $12, $DF, $D8, $BF, $A5, $AD EQUB $00, $00, $6A, $00, $58, $00, $00, $00 EQUB $FE, $FF, $95, $FF, $A7, $FF, $A0, $B5 EQUB $00, $00, $1C, $63, $41, $80, $80, $80 EQUB $FF, $FF, $FF, $FF, $FF, $F7, $E3, $F7 EQUB $00, $00, $00, $40, $00, $80, $90, $80 EQUB $E0, $F0, $F0, $B7, $F7, $FB, $EB, $FB EQUB $00, $00, $02, $00, $00, $04, $00, $01 EQUB $0F, $1F, $1D, $DF, $DF, $BA, $BF, $BF EQUB $00, $00, $00, $04, $00, $00, $A0, $10 EQUB $FE, $FF, $FF, $BB, $BF, $4F, $BF, $BF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BA, $BB EQUB $00, $00, $00, $03, $27, $6F, $EF, $6F EQUB $FF, $FF, $FC, $D0, $A6, $6B, $E3, $65 EQUB $00, $00, $00, $80, $C0, $E0, $E0, $E0 EQUB $E0, $F0, $70, $97, $57, $EB, $2B, $2B EQUB $00, $00, $00, $02, $05, $08, $02, $01 EQUB $0F, $1F, $1F, $DD, $D8, $B2, $B5, $BC EQUB $00, $00, $10, $28, $42, $84, $28, $52 EQUB $FE, $FF, $EF, $C7, $95, $39, $53, $85 EQUB $00, $00, $00, $00, $00, $00, $00, $01 EQUB $00, $01, $01, $7D, $7D, $BB, $BB, $BA EQUB $00, $00, $02, $04, $08, $10, $E0, $C0 EQUB $FF, $FF, $FC, $F8, $F1, $E3, $06, $0E EQUB $00, $00, $00, $00, $00, $03, $07, $02 EQUB $0F, $1F, $1F, $DF, $DF, $BC, $B8, $B8 EQUB $00, $08, $10, $20, $40, $80, $00, $40 EQUB $FE, $F3, $E3, $C7, $8F, $1F, $3F, $3F EQUB $00, $00, $24, $1F, $1F, $7F, $1F, $1F EQUB $FF, $BB, $FB, $E0, $E0, $40, $E0, $E0 EQUB $00, $00, $80, $00, $00, $C0, $00, $00 EQUB $E0, $B0, $F0, $F7, $F7, $5B, $FB, $FB EQUB $00, $00, $00, $00, $01, $00, $00, $00 EQUB $0F, $1F, $1F, $DE, $DD, $BC, $BF, $BC EQUB $00, $00, $40, $E0, $F0, $00, $00, $00 EQUB $FE, $BF, $5F, $EF, $F7, $07, $FF, $07 EQUB $00, $00, $00, $21, $31, $39, $31, $21 EQUB $FF, $FF, $9C, $AD, $B5, $B9, $B5, $AD EQUB $00, $00, $00, $00, $80, $C0, $80, $00 EQUB $E0, $F0, $F0, $77, $B7, $DB, $BB, $7B EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $82, $01, $10, $92, $10 EQUB $93, $93, $93, $11, $92, $00, $45, $44 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $00, $00, $00, $01, $0B EQUB $0F, $0F, $1F, $1F, $3F, $3F, $7E, $74 EQUB $00, $00, $00, $00, $00, $00, $80, $D0 EQUB $F0, $F0, $F8, $F8, $FC, $FC, $7E, $2E EQUB $04, $01, $00, $20, $1F, $00, $20, $00 EQUB $35, $30, $3C, $1F, $20, $00, $5F, $40 EQUB $20, $00, $00, $00, $FF, $00, $00, $00 EQUB $55, $AD, $01, $FF, $00, $00, $FF, $00 EQUB $22, $54, $08, $00, $FF, $00, $00, $00 EQUB $7F, $7F, $08, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $19, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $25, $2D, $24, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $B4, $B5, $B4, $FF, $00, $00, $FF, $00 EQUB $41, $63, $1C, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $20, $00, $08, $F0, $01, $09, $01 EQUB $F9, $D9, $F9, $F1, $09, $00, $F4, $04 EQUB $06, $1C, $08, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $0C, $47, $02, $00, $FF, $00, $00, $00 EQUB $FF, $BF, $FF, $FF, $00, $00, $FF, $00 EQUB $27, $03, $00, $00, $FF, $00, $00, $00 EQUB $A7, $D2, $FC, $FF, $00, $00, $FF, $00 EQUB $C0, $80, $00, $08, $F0, $01, $09, $01 EQUB $59, $99, $79, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3E, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $80, $00, $00, $00, $FF, $00, $00, $00 EQUB $2D, $7F, $FF, $FF, $00, $00, $FF, $00 EQUB $90, $30, $20, $00, $FF, $00, $00, $00 EQUB $09, $8E, $DE, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $39, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $04, $06, $00, $20, $1F, $00, $20, $00 EQUB $34, $36, $31, $1F, $20, $00, $5F, $40 EQUB $C0, $80, $00, $00, $FF, $00, $00, $00 EQUB $3F, $7F, $FF, $FF, $00, $00, $FF, $00 EQUB $24, $00, $00, $00, $FF, $00, $00, $00 EQUB $FB, $BB, $FF, $FF, $00, $00, $FF, $00 EQUB $80, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $B9, $F9, $F1, $09, $00, $F4, $04 EQUB $01, $00, $00, $20, $1F, $00, $20, $00 EQUB $3D, $3C, $3F, $1F, $20, $00, $5F, $40 EQUB $F0, $00, $00, $00, $FF, $00, $00, $00 EQUB $F7, $07, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $9C, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00
Name: iconBarImage2 [Show more] Type: Variable Category: Icon bar Summary: Image data for icon bar 2 (Charts)
Context: See this variable on its own page References: No direct references to this variable in this source file

You can view the tiles that make up the Charts icon bar here: https://www.bbcelite.com/images/source/nes/iconBarImage2_ppu.png and you can see what the Charts icon bar looks like on-screen here: https://www.bbcelite.com/images/nes/general/short_range_chart.png
.iconBarImage2 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BB, $BB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $03, $03, $03, $03, $03, $03, $07, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $C0, $C0, $C0, $C0, $C0, $C0, $E0, $E0 EQUB $00, $00, $00, $00, $02, $06, $0E, $06 EQUB $0F, $1F, $1C, $DC, $DA, $B6, $AE, $B6 EQUB $00, $00, $00, $84, $20, $50, $88, $50 EQUB $FE, $FF, $01, $29, $55, $A9, $05, $A9 EQUB $00, $00, $00, $00, $00, $00, $00, $01 EQUB $FF, $F7, $61, $57, $41, $75, $43, $77 EQUB $00, $00, $00, $00, $00, $40, $A0, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $01, $06, $04, $08, $08, $08 EQUB $0F, $1F, $1F, $DF, $DF, $BF, $BE, $BF EQUB $00, $00, $C0, $34, $10, $08, $09, $08 EQUB $FE, $FF, $FF, $FB, $FF, $7F, $3E, $7F EQUB $00, $00, $00, $6C, $00, $5D, $00, $EC EQUB $FF, $FF, $FF, $92, $FE, $A3, $FE, $12 EQUB $00, $00, $00, $00, $C0, $E0, $C0, $00 EQUB $E0, $F0, $F0, $17, $D7, $FB, $DB, $1B EQUB $00, $00, $02, $00, $00, $04, $00, $01 EQUB $0F, $1F, $1D, $DF, $DF, $BA, $BF, $BF EQUB $00, $00, $00, $04, $00, $00, $A0, $10 EQUB $FE, $FF, $FF, $BB, $BF, $4F, $BF, $BF EQUB $00, $00, $04, $04, $04, $04, $7B, $04 EQUB $FF, $FF, $FB, $C0, $DB, $DB, $84, $DB EQUB $00, $00, $00, $00, $00, $00, $C0, $00 EQUB $E0, $F0, $F0, $77, $77, $7B, $3B, $7B EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $0F, $1F, $1E, $DC, $DF, $BF, $BF, $BF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $0F, $E7, $C7, $8F, $9F, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BA, $BB EQUB $00, $00, $00, $03, $27, $6F, $EF, $6F EQUB $FF, $FF, $FC, $D0, $A6, $6B, $E3, $65 EQUB $00, $00, $00, $80, $C0, $E0, $E0, $E0 EQUB $E0, $F0, $70, $97, $57, $EB, $2B, $2B EQUB $00, $00, $00, $00, $02, $06, $0E, $06 EQUB $0F, $1F, $1F, $DD, $DA, $B6, $AE, $B6 EQUB $00, $00, $00, $00, $10, $30, $38, $38 EQUB $FE, $FF, $FF, $C3, $A9, $46, $43, $85 EQUB $00, $00, $01, $22, $54, $88, $22, $15 EQUB $FF, $FF, $FE, $DC, $89, $23, $55, $C8 EQUB $00, $00, $00, $80, $20, $40, $80, $20 EQUB $E0, $F0, $F0, $77, $57, $9B, $3B, $5B EQUB $00, $00, $00, $00, $01, $00, $00, $00 EQUB $0F, $1F, $1F, $DE, $DD, $BC, $BF, $BC EQUB $00, $00, $40, $E0, $F0, $00, $00, $00 EQUB $FE, $BF, $5F, $EF, $F7, $07, $FF, $07 EQUB $00, $00, $00, $21, $31, $39, $31, $21 EQUB $FF, $FF, $9C, $AD, $B5, $B9, $B5, $AD EQUB $00, $00, $00, $00, $80, $C0, $80, $00 EQUB $E0, $F0, $F0, $77, $B7, $DB, $BB, $7B EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $82, $01, $10, $92, $10 EQUB $93, $93, $93, $11, $92, $00, $45, $44 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $00, $00, $00, $01, $0B EQUB $0F, $0F, $1F, $1F, $3F, $3F, $7E, $74 EQUB $00, $00, $00, $00, $00, $00, $80, $D0 EQUB $F0, $F0, $F8, $F8, $FC, $FC, $7E, $2E EQUB $02, $00, $00, $20, $1F, $00, $20, $00 EQUB $3A, $3C, $3C, $1F, $20, $00, $5F, $40 EQUB $20, $00, $00, $00, $FF, $00, $00, $00 EQUB $55, $AD, $01, $FF, $00, $00, $FF, $00 EQUB $22, $54, $08, $00, $FF, $00, $00, $00 EQUB $7F, $7F, $08, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $19, $F1, $09, $00, $F4, $04 EQUB $04, $06, $01, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $10, $32, $C0, $00, $FF, $00, $00, $00 EQUB $FF, $FD, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $DD, $00, $00, $FF, $00, $00, $00 EQUB $FF, $22, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $A0, $00, $08, $F0, $01, $09, $01 EQUB $F9, $59, $F9, $F1, $09, $00, $F4, $04 EQUB $06, $1C, $08, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $0C, $47, $02, $00, $FF, $00, $00, $00 EQUB $FF, $BF, $FF, $FF, $00, $00, $FF, $00 EQUB $04, $04, $04, $00, $FF, $00, $00, $00 EQUB $DB, $C0, $FB, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $79, $79, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $9F, $9F, $FF, $FF, $00, $00, $FF, $00 EQUB $27, $03, $00, $00, $FF, $00, $00, $00 EQUB $A7, $D2, $FC, $FF, $00, $00, $FF, $00 EQUB $C0, $80, $00, $08, $F0, $01, $09, $01 EQUB $59, $99, $79, $F1, $09, $00, $F4, $04 EQUB $02, $00, $00, $20, $1F, $00, $20, $00 EQUB $3A, $3D, $3F, $1F, $20, $00, $5F, $40 EQUB $18, $10, $00, $00, $FF, $00, $00, $00 EQUB $C5, $2B, $87, $FF, $00, $00, $FF, $00 EQUB $08, $00, $00, $00, $FF, $00, $00, $00 EQUB $E2, $F7, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $D9, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $01, $00, $00, $20, $1F, $00, $20, $00 EQUB $3D, $3C, $3F, $1F, $20, $00, $5F, $40 EQUB $F0, $00, $00, $00, $FF, $00, $00, $00 EQUB $F7, $07, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $9C, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00
Name: iconBarImage3 [Show more] Type: Variable Category: Icon bar Summary: Image data for icon bar 3 (Pause)
Context: See this variable on its own page References: This variable is used as follows: * ChooseLanguage uses iconBarImage3

You can view the tiles that make up the Pause icon bar here: https://www.bbcelite.com/images/source/nes/iconBarImage3_ppu.png and you can see what the Pause icon bar looks like on-screen here: https://www.bbcelite.com/images/nes/general/pause_icon_bar.png
.iconBarImage3 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BB, $BB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $03, $03, $03, $03, $03, $03, $07, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $C0, $C0, $C0, $C0, $C0, $C0, $E0, $E0 EQUB $00, $00, $01, $00, $00, $00, $00, $00 EQUB $0F, $1C, $1D, $DE, $DF, $BF, $BF, $BF EQUB $00, $00, $F0, $E0, $40, $00, $00, $00 EQUB $FE, $07, $F7, $EF, $5F, $BF, $FF, $BF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BA, $BA EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $E0, $9F, $7F, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $37, $DB, $EB, $EB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $0F, $1F, $1E, $DE, $DE, $BE, $BE, $B8 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $03, $03, $FB, $FB, $FB, $E3 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FE, $FC, $C8, $C8, $C8, $C8 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $0F, $1F, $1C, $D8, $D8, $BC, $B8, $B8 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $FF, $7F, $67, $C3, $43, $67 EQUB $00, $00, $1F, $31, $3F, $28, $3F, $25 EQUB $FF, $FF, $E0, $C0, $C0, $C0, $C0, $C0 EQUB $00, $00, $00, $80, $80, $80, $80, $80 EQUB $E0, $F0, $70, $77, $37, $3B, $3B, $3B EQUB $00, $00, $00, $00, $01, $00, $00, $00 EQUB $0F, $1F, $1F, $DE, $DD, $BC, $BF, $BC EQUB $00, $00, $40, $E0, $F0, $00, $00, $00 EQUB $FE, $BF, $5F, $EF, $F7, $07, $FF, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $EA, $9F, $7F, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $B7, $FB, $FB, $FB EQUB $00, $00, $04, $02, $01, $00, $00, $00 EQUB $0F, $1F, $1A, $DC, $DE, $BE, $BE, $B8 EQUB $00, $00, $04, $08, $10, $A0, $40, $A0 EQUB $FE, $FF, $03, $03, $EB, $5B, $BB, $43 EQUB $00, $00, $40, $20, $11, $0A, $04, $0A EQUB $FF, $FF, $BE, $DC, $C8, $C0, $C8, $C0 EQUB $00, $00, $40, $80, $00, $00, $00, $00 EQUB $E0, $F0, $B0, $77, $F7, $FB, $FB, $FB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $0F, $1F, $1F, $DE, $DE, $BE, $BF, $BE EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $1F, $0F, $0F, $0F, $1F, $0F EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $82, $01, $10, $92, $10 EQUB $93, $93, $93, $11, $92, $00, $45, $44 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $00, $00, $00, $01, $0B EQUB $0F, $0F, $1F, $1F, $3F, $3F, $7E, $74 EQUB $00, $00, $00, $00, $00, $00, $80, $D0 EQUB $F0, $F0, $F8, $F8, $FC, $FC, $7E, $2E EQUB $00, $00, $01, $20, $1F, $00, $20, $00 EQUB $3F, $3E, $3D, $1C, $20, $00, $5F, $40 EQUB $40, $E0, $F0, $00, $FF, $00, $00, $00 EQUB $5F, $EF, $F7, $07, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $7F, $9F, $E0, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $00 EQUB $D9, $39, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $30, $30, $39, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $C3, $C3, $E7, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $C8, $FC, $FE, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $C3, $C3, $FF, $FF, $00, $00, $FF, $00 EQUB $3F, $7F, $7F, $00, $FF, $00, $00, $00 EQUB $C0, $E4, $FF, $FF, $00, $00, $FF, $00 EQUB $80, $A0, $E0, $08, $F0, $01, $09, $01 EQUB $39, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $01, $00, $00, $20, $1F, $00, $20, $00 EQUB $3D, $3E, $3F, $1F, $20, $00, $5F, $40 EQUB $F0, $E0, $40, $00, $FF, $00, $00, $00 EQUB $F7, $EF, $5F, $BF, $00, $00, $FF, $00 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $D9, $39, $F9, $F1, $09, $00, $F4, $04 EQUB $01, $02, $04, $20, $1F, $00, $20, $00 EQUB $30, $30, $39, $1F, $20, $00, $5F, $40 EQUB $10, $08, $04, $00, $FF, $00, $00, $00 EQUB $C3, $C3, $E3, $FF, $00, $00, $FF, $00 EQUB $11, $20, $40, $00, $FF, $00, $00, $00 EQUB $C8, $DC, $BE, $FF, $00, $00, $FF, $00 EQUB $00, $80, $40, $08, $F0, $01, $09, $01 EQUB $F9, $79, $B9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3C, $3C, $3F, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $07, $07, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00
Name: iconBarImage4 [Show more] Type: Variable Category: Icon bar Summary: Image data for icon bar 4 (Title screen copyright message)
Context: See this variable on its own page References: No direct references to this variable in this source file

You can view the tiles that make up the copyright message here: https://www.bbcelite.com/images/source/nes/iconBarImage4_ppu.png and you can see what the copyright message looks like on-screen here: https://www.bbcelite.com/images/nes/general/title.png
.iconBarImage4 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $0F, $1F, $1F, $DF, $DF, $BF, $BF, $BF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $01, $01, $7D, $7D, $BB, $BB, $BB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $E0, $F0, $F0, $F7, $F7, $FB, $FB, $FB EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $03, $03, $03, $03, $03, $03, $07, $07 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $C0, $C0, $C0, $C0, $C0, $C0, $E0, $E0 EQUB $00, $00, $00, $00, $00, $F8, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $07, $FF EQUB $00, $00, $FB, $C3, $C3, $C3, $C3, $C3 EQUB $FF, $FF, $FF, $C7, $FF, $FF, $FF, $FF EQUB $00, $00, $EF, $6D, $6D, $6D, $6F, $6C EQUB $FF, $FF, $FF, $7D, $FF, $FF, $FF, $FC EQUB $00, $00, $B6, $B6, $B6, $B6, $9E, $06 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $DF, $67 EQUB $00, $00, $FB, $DB, $DB, $F3, $DB, $DB EQUB $FF, $FF, $FF, $DF, $FF, $F7, $DF, $FF EQUB $00, $00, $7D, $61, $61, $6D, $6D, $6D EQUB $FF, $FF, $FF, $E3, $FF, $FF, $FF, $FF EQUB $00, $00, $B7, $B3, $B3, $F3, $B3, $B3 EQUB $FF, $FF, $FF, $FB, $FF, $FF, $BF, $FF EQUB $00, $00, $81, $00, $00, $00, $00, $00 EQUB $FF, $FF, $FF, $7E, $FF, $FF, $FF, $FF EQUB $00, $00, $DF, $DB, $DB, $DB, $DF, $C3 EQUB $FF, $FF, $FF, $FB, $FF, $FF, $FF, $E3 EQUB $00, $00, $7D, $6C, $6C, $6C, $7C, $0C EQUB $FF, $FF, $FF, $EE, $FF, $FF, $FF, $8F EQUB $00, $00, $C0, $C0, $C0, $C0, $C0, $D8 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $F0, $D8, $D8, $D8, $D8, $DB EQUB $FF, $FF, $FF, $DF, $FF, $FF, $FF, $FF EQUB $00, $00, $7D, $6D, $6D, $79, $6D, $6D EQUB $FF, $FF, $FF, $EF, $FF, $FB, $EF, $EF EQUB $00, $00, $F7, $B6, $B6, $E7, $B6, $B6 EQUB $FF, $FF, $FF, $BE, $FF, $EF, $BE, $FF EQUB $00, $00, $DF, $DB, $DB, $DE, $DB, $DB EQUB $FF, $FF, $FF, $FB, $FF, $FE, $FB, $FF EQUB $00, $00, $7D, $61, $61, $79, $61, $61 EQUB $FF, $FF, $FF, $E3, $FF, $FF, $E7, $FF EQUB $00, $00, $F0, $B0, $B0, $B0, $B0, $B0 EQUB $FF, $FF, $FF, $BF, $FF, $FF, $FF, $FF EQUB $00, $00, $3E, $36, $36, $3E, $36, $36 EQUB $FF, $FF, $FF, $F7, $FF, $FF, $F7, $FF EQUB $00, $00, $FB, $DB, $DB, $DB, $DB, $DB EQUB $FF, $FF, $FF, $DF, $FF, $FF, $FF, $FF EQUB $00, $00, $C0, $60, $60, $60, $60, $60 EQUB $FF, $FF, $FF, $7F, $FF, $FF, $FF, $FF EQUB $00, $00, $78, $30, $30, $30, $30, $33 EQUB $FF, $FF, $FF, $B7, $FF, $FF, $FF, $FF EQUB $00, $00, $7D, $6D, $6D, $79, $6D, $6D EQUB $FF, $FF, $FF, $EF, $FF, $FB, $EF, $FF EQUB $00, $00, $F6, $86, $86, $E6, $86, $86 EQUB $FF, $FF, $FF, $8F, $FF, $FF, $9F, $FF EQUB $00, $00, $18, $18, $18, $18, $18, $18 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF EQUB $00, $00, $00, $00, $00, $1F, $00, $00 EQUB $FF, $FF, $FF, $FF, $FF, $FF, $E0, $FF EQUB $00, $00, $00, $20, $1F, $00, $20, $00 EQUB $3F, $3F, $3F, $1F, $20, $00, $5F, $40 EQUB $00, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $FF, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $82, $01, $10, $92, $10 EQUB $93, $93, $93, $11, $92, $00, $45, $44 EQUB $00, $00, $00, $08, $F0, $01, $09, $01 EQUB $F9, $F9, $F9, $F1, $09, $00, $F4, $04 EQUB $00, $00, $00, $00, $00, $00, $01, $0B EQUB $0F, $0F, $1F, $1F, $3F, $3F, $7E, $74 EQUB $00, $00, $00, $00, $00, $00, $80, $D0 EQUB $F0, $F0, $F8, $F8, $FC, $FC, $7E, $2E EQUB $FB, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $04, $FF, $FF, $00, $00, $FF, $00 EQUB $EC, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $13, $FF, $FF, $00, $00, $FF, $00 EQUB $0C, $00, $00, $00, $FF, $00, $00, $00 EQUB $FD, $F3, $FF, $FF, $00, $00, $FF, $00 EQUB $DB, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $24, $FF, $FF, $00, $00, $FF, $00 EQUB $7D, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $82, $FF, $FF, $00, $00, $FF, $00 EQUB $B3, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $4C, $FF, $FF, $00, $00, $FF, $00 EQUB $C3, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $3C, $FF, $FF, $00, $00, $FF, $00 EQUB $0C, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $F3, $FF, $FF, $00, $00, $FF, $00 EQUB $D8, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $27, $FF, $FF, $00, $00, $FF, $00 EQUB $F3, $00, $00, $00, $FF, $00, $00, $00 EQUB $F7, $0C, $FF, $FF, $00, $00, $FF, $00 EQUB $B6, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $49, $FF, $FF, $00, $00, $FF, $00 EQUB $DF, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $20, $FF, $FF, $00, $00, $FF, $00 EQUB $B0, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $4F, $FF, $FF, $00, $00, $FF, $00 EQUB $36, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $C9, $FF, $FF, $00, $00, $FF, $00 EQUB $C0, $00, $00, $00, $FF, $00, $00, $00 EQUB $DF, $3F, $FF, $FF, $00, $00, $FF, $00 EQUB $7B, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $84, $FF, $FF, $00, $00, $FF, $00 EQUB $F7, $00, $00, $00, $FF, $00, $00, $00 EQUB $FF, $08, $FF, $FF, $00, $00, $FF, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00
Name: barNames0 [Show more] Type: Variable Category: Icon bar Summary: Nametable entries for icon bar 0 (Docked)
Context: See this variable on its own page References: This variable is used as follows: * DrawIconBar uses barNames0
.barNames0 EQUB $09, $0B, $0C, $06, $0D, $0E, $0F, $10 EQUB $06, $11, $12, $13, $14, $06, $15, $16 EQUB $17, $18, $06, $19, $1A, $1B, $1C, $06 EQUB $07, $08, $04, $05, $06, $07, $08, $0A EQUB $28, $2A, $2B, $26, $2C, $2D, $2E, $2F EQUB $26, $30, $31, $24, $32, $26, $33, $34 EQUB $24, $35, $26, $36, $37, $38, $39, $26 EQUB $25, $27, $24, $25, $26, $25, $27, $29
Name: barNames1 [Show more] Type: Variable Category: Icon bar Summary: Nametable entries for icon bar 1 (Flight)
Context: See this variable on its own page References: No direct references to this variable in this source file
.barNames1 EQUB $09, $0B, $0C, $06, $0D, $0E, $0F, $10 EQUB $06, $11, $12, $13, $14, $15, $16, $17 EQUB $18, $19, $1A, $1B, $08, $1C, $1D, $06 EQUB $1E, $1F, $20, $21, $06, $22, $23, $0A EQUB $28, $2A, $2B, $26, $2C, $2D, $2E, $2F EQUB $26, $30, $31, $32, $33, $26, $34, $35 EQUB $36, $37, $26, $38, $39, $3A, $3B, $26 EQUB $3C, $3D, $3E, $3F, $26, $40, $27, $29
Name: barNames2 [Show more] Type: Variable Category: Icon bar Summary: Nametable entries for icon bar 2 (Charts)
Context: See this variable on its own page References: No direct references to this variable in this source file
.barNames2 EQUB $09, $0B, $0C, $06, $0D, $0E, $0F, $10 EQUB $06, $11, $12, $13, $14, $06, $15, $16 EQUB $17, $18, $19, $1A, $1B, $1C, $1D, $06 EQUB $1E, $1F, $20, $21, $06, $22, $23, $0A EQUB $28, $2A, $2B, $26, $2C, $2D, $2E, $2F EQUB $26, $30, $31, $32, $33, $26, $34, $35 EQUB $24, $36, $26, $37, $38, $39, $3A, $26 EQUB $3B, $3C, $3D, $3E, $26, $3F, $27, $29
Name: barNames3 [Show more] Type: Variable Category: Icon bar Summary: Nametable entries for icon bar 3 (Pause)
Context: See this variable on its own page References: This variable is used as follows: * Draw2OptionTiles uses barNames3
.barNames3 EQUB $09, $0B, $0C, $0D, $0E, $0F, $10, $11 EQUB $06, $12, $08, $13, $14, $06, $15, $16 EQUB $17, $18, $0D, $19, $1A, $1B, $1C, $06 EQUB $1D, $1E, $1F, $20, $06, $15, $16, $0A EQUB $28, $2A, $2B, $26, $2C, $2D, $2E, $2F EQUB $26, $30, $27, $24, $31, $26, $32, $33 EQUB $34, $35, $26, $2C, $36, $37, $38, $26 EQUB $39, $3A, $3B, $3C, $26, $32, $33, $29
Name: barNames4 [Show more] Type: Variable Category: Icon bar Summary: Nametable entries for icon bar 4 (Title screen copyright message)
Context: See this variable on its own page References: No direct references to this variable in this source file
.barNames4 EQUB $0A, $05, $08, $0C, $0D, $0E, $0F, $10 EQUB $11, $12, $13, $14, $15, $16, $08, $17 EQUB $18, $19, $1A, $1B, $1C, $1D, $1E, $1F EQUB $20, $21, $22, $23, $24, $08, $09, $0B EQUB $29, $25, $26, $26, $2B, $2C, $2D, $2E EQUB $2F, $30, $26, $31, $32, $33, $26, $34 EQUB $2F, $35, $36, $2F, $37, $38, $2E, $39 EQUB $3A, $2F, $3B, $36, $26, $26, $28, $2A
Name: dashNames [Show more] Type: Variable Category: Dashboard Summary: Nametable entries for the dashboard
Context: See this variable on its own page References: This variable is used as follows: * DrawDashNames uses dashNames
.dashNames EQUB $45, $46, $47, $48, $47, $49, $4A, $4B EQUB $4C, $4D, $4E, $4F, $4D, $4C, $4D, $4E EQUB $4F, $4D, $4C, $4D, $50, $4F, $4D, $4C EQUB $51, $52, $46, $47, $48, $47, $49, $53 EQUB $54, $55, $55, $55, $55, $56, $57, $58 EQUB $59, $00, $5A, $5B, $5C, $5D, $5E, $5F EQUB $60, $61, $62, $63, $64, $65, $00, $66 EQUB $67, $68, $69, $6A, $6B, $85, $85, $6E EQUB $54, $55, $55, $55, $55, $6F, $70, $00 EQUB $71, $72, $73, $74, $75, $76, $77, $78 EQUB $79, $7A, $7B, $7C, $7D, $7E, $7F, $80 EQUB $00, $81, $82, $83, $84, $85, $85, $6E EQUB $54, $55, $55, $55, $55, $86, $70, $87 EQUB $88, $89, $8A, $8B, $8C, $8D, $8C, $8E EQUB $8F, $8C, $90, $8C, $91, $92, $93, $94 EQUB $95, $96, $97, $55, $55, $55, $55, $98 EQUB $54, $55, $55, $55, $55, $99, $9A, $9B EQUB $9C, $9D, $9E, $9F, $A0, $A1, $A2, $A2 EQUB $A3, $A2, $A4, $A0, $A5, $A6, $A7, $A8 EQUB $A9, $AA, $AB, $55, $55, $55, $55, $98 EQUB $54, $55, $55, $55, $55, $AC, $AD, $58 EQUB $AE, $AF, $B0, $B1, $B2, $B3, $B4, $B5 EQUB $B6, $B7, $B8, $B9, $BA, $BB, $BC, $BD EQUB $67, $BE, $BF, $55, $55, $55, $55, $98 EQUB $54, $55, $55, $55, $55, $C0, $C1, $00 EQUB $00, $00, $00, $00, $C2, $C3, $C4, $C5 EQUB $C6, $C7, $C8, $C9, $00, $00, $00, $00 EQUB $00, $CA, $97, $55, $55, $55, $55, $98 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00 EQUB $00, $00, $00, $00, $00, $00, $00, $00
Name: dashImage [Show more] Type: Variable Category: Dashboard Summary: Packed image data for the dashboard Deep dive: Image and data compression Views and view types in NES Elite
Context: See this variable on its own page References: This variable is used as follows: * SendDashImageToPPU uses dashImage

You can view the tiles that make up the dashboard image here: https://www.bbcelite.com/images/source/nes/dashImage_ppu.png and you can see what the dashboard looks like on-screen here: https://www.bbcelite.com/images/nes/general/dashboard.png
.dashImage EQUB $32, $17, $3F, $05, $21, $07, $E8, $C0 EQUB $FC, $E8, $D1, $83, $21, $07, $98, $00 EQUB $80, $04, $AA, $FF, $00, $7F, $00, $13 EQUB $55, $07, $AA, $FF, $00, $FF, $00, $13 EQUB $55, $00, $10, $21, $38, $04, $AA, $FF EQUB $00, $C7, $00, $13, $55, $00, $32, $01 EQUB $03, $04, $AA, $FF, $00, $FC, $00, $13 EQUB $55, $02, $80, $00, $32, $06, $0C, $5C EQUB $B8, $F8, $00, $7F, $00, $F9, $F3, $A3 EQUB $46, $21, $07, $09, $FF, $7F, $05, $10 EQUB $22, $38, $10, $05, $22, $C7, $33, $28 EQUB $38, $38, $10, $0A, $12, $05, $34, $01 EQUB $03, $03, $01, $05, $22, $FC, $34, $02 EQUB $03, $03, $01, $02, $22, $80, $06, $22 EQUB $7F, $23, $80, $02, $35, $01, $03, $03 EQUB $01, $01, $04, $22, $FC, $22, $02, $32 EQUB $03, $01, $0A, $FF, $FE, $05, $32, $01 EQUB $03, $00, $40, $20, $33, $34, $1A, $1F EQUB $00, $FC, $00, $BF, $DF, $CB, $65, $E0 EQUB $E8, $FC, $04, $80, $E0, $34, $17, $03 EQUB $3F, $17, $8B, $C1, $60, $21, $19, $03 EQUB $31, $02, $23, $03, $35, $02, $07, $04 EQUB $06, $05, $23, $04, $21, $05, $08, $FF EQUB $05, $12, $03, $21, $0C, $00, $21, $0C EQUB $00, $21, $11, $FF, $31, $3F, $24, $22 EQUB $21, $2E, $AE, $23, $08, $22, $09, $22 EQUB $08, $C8, $F6, $F7, $23, $B6, $B5, $32 EQUB $34, $35, $03, $F0, $F2, $21, $12, $00 EQUB $10, $04, $21, $04, $E4, $21, $12, $E0 EQUB $32, $02, $01, $02, $50, $40, $02, $21 EQUB $0C, $10, $32, $05, $15, $8A, $90, $40 EQUB $09, $21, $01, $03, $21, $02, $0A, $7F EQUB $03, $21, $09, $40, $02, $7F, $06, $FF EQUB $57, $02, $21, $09, $40, $02, $FF, $57 EQUB $05, $FF, $E0, $5D, $10, $00, $7F, $02 EQUB $FF, $E0, $5D, $05, $FF, $21, $04, $5D EQUB $00, $21, $17, $40, $02, $FF, $21, $04 EQUB $5D, $05, $FF, $00, $55, $21, $01, $FF EQUB $03, $FF, $00, $55, $05, $FF, $80, $D5 EQUB $00, $FF, $03, $FF, $80, $D5, $05, $FF EQUB $20, $55, $00, $E8, $21, $02, $02, $FF EQUB $20, $55, $05, $FF, $21, $06, $5D, $10 EQUB $00, $FD, $02, $FF, $21, $06, $5D, $06 EQUB $FF, $55, $02, $20, $21, $05, $02, $FF EQUB $55, $06, $80, $7F, $21, $01, $02, $20 EQUB $21, $04, $00, $80, $7F, $0C, $80, $03 EQUB $40, $80, $02, $32, $0A, $02, $02, $30 EQUB $21, $08, $A0, $A8, $51, $32, $09, $02 EQUB $04, $21, $0F, $4F, $48, $00, $21, $08 EQUB $04, $20, $21, $27, $48, $21, $07, $23 EQUB $10, $22, $90, $32, $11, $12, $10, $6F EQUB $EF, $23, $6F, $AE, $21, $2C, $AE, $04 EQUB $F0, $32, $08, $04, $00, $14, $34, $0F EQUB $07, $03, $07, $03, $21, $01, $00, $22 EQUB $01, $21, $17, $FC, $F0, $E0, $C1, $80 EQUB $81, $32, $01, $17, $07, $D0, $7F, $36 EQUB $1F, $0F, $07, $03, $03, $01, $D1, $02 EQUB $35, $01, $02, $04, $08, $08, $00, $FC EQUB $F8, $F0, $E1, $83, $22, $07, $9F, $34 EQUB $03, $07, $0F, $1E, $7C, $22, $F8, $60 EQUB $12, $FE, $FD, $FB, $22, $F7, $FF, $08 EQUB $28, $E0, $03, $21, $0C, $00, $21, $0D EQUB $00, $21, $11, $FF, $31, $3F, $24, $22 EQUB $21, $2E, $AE, $23, $08, $C8, $21, $08 EQUB $88, $21, $08, $C8, $F6, $F7, $36, $36 EQUB $37, $36, $37, $36, $37, $04, $34, $01 EQUB $07, $0C, $38, $04, $41, $33, $07, $0C EQUB $38, $02, $21, $0F, $78, $C0, $AA, $04 EQUB $21, $0F, $78, $C0, $AA, $02, $21, $0F EQUB $F8, $AA, $32, $01, $06, $AA, $30, $40 EQUB $21, $0F, $F8, $AA, $32, $01, $06, $AA EQUB $30, $40, $C8, $30, $EA, $80, $00, $AA EQUB $00, $21, $01, $C8, $30, $EA, $80, $00 EQUB $AA, $00, $33, $01, $04, $08, $BA, $10 EQUB $20, $EA, $80, $00, $32, $04, $08, $BA EQUB $10, $20, $EA, $80, $00, $32, $06, $01 EQUB $AA, $02, $AA, $02, $32, $06, $01, $AA EQUB $02, $AA, $02, $21, $08, $90, $FA, $21 EQUB $38, $44, $EB, $22, $80, $21, $08, $90 EQUB $FA, $21, $38, $44, $EB, $22, $80, $02 EQUB $AA, $02, $AA, $C0, $30, $02, $AA, $02 EQUB $AA, $C0, $30, $22, $80, $AA, $22, $80 EQUB $AA, $81, $86, $22, $80, $AA, $22, $80 EQUB $AA, $81, $86, $10, $21, $08, $AB, $3D EQUB $0C, $32, $EA, $01, $01, $10, $08, $AB EQUB $0C, $32, $EA, $01, $01, $60, $80, $AA EQUB $02, $AA, $02, $60, $80, $AA, $02, $AA EQUB $02, $20, $10, $AA, $34, $08, $04, $AA EQUB $01, $00, $20, $10, $AA, $39, $08, $04 EQUB $AA, $01, $00, $11, $0C, $AA, $01, $00 EQUB $AA, $00, $80, $34, $11, $0C, $AA, $01 EQUB $00, $AA, $00, $80, $F8, $21, $0F, $AA EQUB $80, $60, $BA, $34, $0C, $02, $F8, $0F EQUB $AA, $80, $60, $BA, $32, $0C, $02, $00 EQUB $80, $F8, $32, $0F, $01, $AA, $03, $80 EQUB $F8, $32, $0F, $01, $AA, $06, $C0, $F0 EQUB $32, $18, $0E, $04, $C2, $F0, $35, $18 EQUB $0E, $12, $10, $11, $25, $10, $6C, $EE EQUB $6E, $EE, $6F, $EF, $6F, $EF, $21, $04 EQUB $00, $21, $08, $60, $04, $35, $03, $07 EQUB $07, $97, $0F, $13, $22, $01, $80, $21 EQUB $01, $40, $20, $33, $18, $07, $01, $81 EQUB $00, $C1, $A0, $D0, $E4, $F8, $02, $21 EQUB $02, $00, $32, $04, $08, $30, $C0, $38 EQUB $01, $03, $01, $07, $0B, $17, $4F, $3F EQUB $08, $18, $03, $21, $08, $00, $21, $09 EQUB $00, $21, $15, $FF, $31, $3F, $24, $22 EQUB $21, $2A, $AA, $08, $21, $08, $00, $24 EQUB $10, $22, $18, $30, $6A, $22, $60, $30 EQUB $33, $3D, $0E, $07, $30, $6A, $22, $60 EQUB $30, $36, $3D, $0E, $07, $01, $AA, $0C EQUB $30, $40, $D5, $02, $21, $01, $AA, $21 EQUB $0C, $30, $40, $D5, $02, $80, $AA, $03 EQUB $55, $02, $80, $AA, $03, $55, $02, $21 EQUB $02, $AE, $21, $08, $10, $20, $55, $22 EQUB $80, $21, $02, $AE, $21, $08, $10, $20 EQUB $55, $22, $80, $00, $AA, $03, $55, $03 EQUB $AA, $03, $55, $02, $21, $01, $AB, $3E EQUB $02, $04, $04, $5D, $08, $10, $01, $AB EQUB $02, $04, $04, $5D, $08, $10, $21, $0C EQUB $AB, $03, $55, $02, $21, $0C, $AB, $03 EQUB $55, $02, $98, $EA, $23, $80, $D5, $22 EQUB $80, $98, $EA, $23, $80, $D5, $23, $80 EQUB $AA, $40, $22, $20, $55, $10, $21, $08 EQUB $80, $AA, $40, $22, $20, $55, $10, $21 EQUB $08, $40, $AA, $10, $35, $08, $04, $57 EQUB $01, $01, $40, $AA, $10, $33, $08, $04 EQUB $57, $23, $01, $AA, $03, $55, $02, $21 EQUB $01, $AA, $03, $55, $02, $80, $EA, $30 EQUB $32, $0C, $02, $55, $02, $80, $EA, $30 EQUB $32, $0C, $02, $55, $02, $21, $06, $AB EQUB $22, $03, $21, $06, $DE, $58, $70, $21 EQUB $06, $AB, $22, $03, $21, $06, $DE, $58 EQUB $70, $08, $10, $00, $24, $08, $22, $18 EQUB $23, $10, $35, $12, $11, $12, $10, $15 EQUB $6F, $EF, $68, $E8, $68, $E8, $6A, $EA EQUB $07, $70, $FF, $FC, $24, $BC, $8C, $8D EQUB $03, $40, $23, $C0, $40, $E0, $20, $60 EQUB $A0, $23, $20, $A0, $03, $21, $0C, $00 EQUB $21, $0C, $00, $21, $1D, $FF, $31, $3F EQUB $25, $22, $A2, $23, $08, $88, $23, $08 EQUB $48, $F6, $F7, $76, $21, $37, $B6, $B7 EQUB $B6, $B7, $03, $21, $01, $04, $36, $1C EQUB $0E, $0F, $06, $03, $01, $02, $21, $01 EQUB $04, $58, $33, $2E, $07, $01, $02, $C0 EQUB $F0, $A4, $51, $21, $18, $C0, $7A, $21 EQUB $0F, $05, $C0, $7A, $21, $0F, $04, $80 EQUB $21, $01, $AA, $84, $F8, $21, $1F, $03 EQUB $21, $01, $AA, $84, $F8, $21, $1F, $04 EQUB $AA, $02, $C0, $FF, $03, $AA, $02, $C0 EQUB $FF, $03, $AA, $03, $AA, $FF, $02, $AA EQUB $03, $AA, $FF, $00, $20, $AA, $22, $40 EQUB $80, $AA, $80, $7F, $20, $AA, $22, $40 EQUB $80, $AA, $80, $7F, $00, $AA, $03, $AA EQUB $00, $FF, $00, $AA, $03, $AA, $00, $FF EQUB $80, $AA, $23, $80, $AA, $80, $FF, $80 EQUB $AA, $23, $80, $AA, $80, $FF, $21, $04 EQUB $AE, $22, $02, $21, $01, $AB, $00, $FF EQUB $21, $04, $AE, $22, $02, $21, $01, $AB EQUB $00, $FF, $00, $AA, $02, $21, $01, $FF EQUB $80, $02, $AA, $02, $21, $01, $FF, $80 EQUB $00, $80, $EA, $20, $21, $1F, $F8, $80 EQUB $02, $80, $EA, $20, $21, $1F, $F8, $80 EQUB $02, $21, $01, $AF, $F8, $80, $03, $22 EQUB $01, $AF, $F8, $80, $03, $21, $02, $C0 EQUB $04, $21, $1A, $74, $E0, $C0, $02, $35 EQUB $03, $0F, $25, $8A, $18, $03, $80, $04 EQUB $21, $38, $70, $F0, $60, $C0, $80, $02 EQUB $23, $10, $21, $12, $22, $10, $32, $11 EQUB $16, $6F, $EF, $69, $E8, $6A, $EA, $68 EQUB $E9, $03, $30, $03, $70, $FF, $FC, $22 EQUB $8C, $22, $BC, $8C, $8D, $03, $21, $0D EQUB $03, $21, $1C, $FF, $37, $3F, $22, $22 EQUB $2F, $2F, $23, $A3, $23, $08, $49, $33 EQUB $09, $08, $08, $88, $F6, $F7, $22, $36 EQUB $76, $75, $74, $75, $21, $03, $03, $C0 EQUB $40, $02, $32, $04, $01, $03, $90, $5A EQUB $00, $F0, $FE, $32, $1F, $03, $04, $34 EQUB $08, $01, $20, $04, $06, $E0, $FF, $7F EQUB $21, $0F, $04, $10, $00, $80, $10, $21 EQUB $01, $05, $FC, $12, $21, $01, $03, $C0 EQUB $21, $03, $02, $21, $06, $05, $F8, $12 EQUB $04, $80, $21, $07, $08, $21, $3F, $06 EQUB $21, $3F, $40, $BF, $06, $FF, $06, $FF EQUB $00, $FF, $06, $FF, $06, $FF, $00, $21 EQUB $17, $06, $FF, $06, $FF, $00, $44, $06 EQUB $FF, $06, $FF, $00, $7F, $06, $FC, $06 EQUB $FC, $21, $02, $FD, $05, $21, $1F, $12 EQUB $04, $21, $01, $E0, $06, $21, $3F, $12 EQUB $80, $03, $21, $03, $C0, $02, $60, $02 EQUB $21, $07, $FF, $FE, $F0, $04, $21, $08 EQUB $00, $32, $01, $08, $80, $00, $21, $0F EQUB $7F, $F8, $C0, $04, $10, $80, $21, $04 EQUB $20, $04, $C0, $03, $32, $03, $02, $02 EQUB $20, $80, $03, $21, $09, $5A, $00, $23 EQUB $10, $93, $90, $21, $16, $10, $21, $17 EQUB $6F, $EF, $23, $68, $A8, $21, $28, $A8 EQUB $03, $20, $00, $30, $00, $40, $FF, $FC EQUB $24, $8C, $BC, $BD, $03, $21, $01, $03 EQUB $21, $1C, $FF, $37, $3F, $2E, $2E, $2F EQUB $2F, $23, $A3, $23, $08, $48, $21, $08 EQUB $00, $21, $08, $80, $F6, $F7, $32, $36 EQUB $37, $76, $7E, $74, $7C, $21, $01, $07 EQUB $21, $0E, $0F, $DF, $34, $0F, $07, $03 EQUB $01, $05, $21, $0C, $05, $FF, $22, $F3 EQUB $12, $03, $60, $00, $60, $00, $EE, $03 EQUB $23, $17, $22, $11, $03, $21, $29, $00 EQUB $21, $01, $00, $93, $03, $44, $24, $6C EQUB $03, $80, $00, $98, $00, $80, $03, $7F EQUB $22, $67, $22, $7F, $0B, $FB, $F0, $E0 EQUB $C0, $80, $03, $C0, $07, $21, $38, $07 EQUB $23, $10, $21, $12, $10, $21, $02, $10 EQUB $21, $05, $6F, $EF, $68, $E8, $68, $78 EQUB $34, $2A, $3A, $00, $38, $22, $10, $21 EQUB $38, $04, $21, $38, $22, $10, $21, $38 EQUB $06, $FF, $07, $FF, $04, $28, $18, $28 EQUB $18, $23, $01, $FF, $24, $C0, $23, $01 EQUB $FF, $24, $C0, $08, $E0, $98, $86, $81 EQUB $86, $98, $E0, $09, $FF, $81, $42, $32 EQUB $24, $18, $03, $C0, $60, $30, $34, $18 EQUB $0C, $06, $02, $00, $C0, $60, $30, $34 EQUB $18, $0C, $06, $02, $03, $31, $18, $23 EQUB $3C, $21, $18, $0B, $34, $18, $3C, $3C EQUB $18, $0D, $22, $18, $0E, $21, $18, $0F EQUB $10, $0F, $22, $18, $06, $22, $18, $05 EQUB $34, $08, $1C, $18, $08, $04, $34, $18 EQUB $2C, $24, $18, $03, $10, $34, $34, $28 EQUB $28, $1C, $10, $02, $36, $18, $38, $2C EQUB $18, $3C, $18, $09, $28, $18, $0F, $78 EQUB $0E, $78, $21, $18, $0D, $78, $22, $18 EQUB $0C, $78, $23, $18, $0B, $78, $24, $18 EQUB $0A, $78, $25, $18, $09, $78, $26, $18 EQUB $08, $78, $27, $18, $03, $13, $02, $FF EQUB $05, $12, $04, $80, $03, $FF, $05, $12 EQUB $03, $80, $C0, $80, $02, $FF, $05, $12 EQUB $03, $C0, $E0, $C0, $02, $FF, $05, $12 EQUB $03, $E0, $F0, $E0, $02, $FF, $05, $12 EQUB $03, $F0, $F8, $F0, $02, $FF, $05, $12 EQUB $03, $F8, $FC, $F8, $02, $FF, $05, $12 EQUB $03, $FC, $FE, $FC, $02, $FF, $05, $12 EQUB $03, $FE, $FF, $FE, $02, $FF, $05, $12 EQUB $03, $13, $02, $FF, $02, $15, $04, $80 EQUB $03, $FF, $03, $80, $00, $12, $03, $80 EQUB $C0, $80, $02, $FF, $02, $80, $C0, $80 EQUB $12, $03, $C0, $E0, $C0, $02, $FF, $02 EQUB $C0, $E0, $C0, $12, $03, $E0, $F0, $E0 EQUB $02, $FF, $02, $E0, $F0, $E0, $12, $03 EQUB $F0, $F8, $F0, $02, $FF, $02, $F0, $F8 EQUB $F0, $12, $03, $F8, $FC, $F8, $02, $FF EQUB $02, $F8, $FC, $F8, $12, $03, $FC, $FE EQUB $FC, $02, $FF, $02, $FC, $FE, $FC, $12 EQUB $03, $FE, $FF, $FE, $02, $FF, $02, $FE EQUB $FF, $FE, $12, $10, $33, $0C, $3A, $2B EQUB $87, $E3, $A4, $35, $08, $04, $34, $27 EQUB $3A, $BB, $48, $90, $21, $18, $02, $33 EQUB $18, $24, $18, $0F, $06, $33, $18, $3C EQUB $18, $03, $FF, $26, $81, $12, $26, $81 EQUB $FF, $02, $34, $18, $3C, $3C, $18, $0F EQUB $05, $34, $18, $3C, $3C, $18, $02, $70 EQUB $24, $60, $23, $C0, $70, $23, $60, $22 EQUB $40, $22, $C0, $7F, $24, $60, $23, $C0 EQUB $7F, $23, $60, $22, $40, $22, $C0, $22 EQUB $60, $24, $C0, $12, $60, $22, $40, $23 EQUB $C0, $FF, $FE, $24, $C0, $0C, $18, $08 EQUB $3F
Name: cobraImage [Show more] Type: Variable Category: Equipment Summary: Packed image data for the Cobra Mk III shown on the Equip Ship screen Deep dive: Image and data compression
Context: See this variable on its own page References: This variable is used as follows: * SendViewToPPU uses cobraImage

You can view the tiles that make up the Cobra Mk III image here: https://www.bbcelite.com/images/source/nes/cobraImage_ppu.png and you can see what the Cobra Mk III looks like on-screen here: https://www.bbcelite.com/images/nes/general/equipment.png
.cobraImage EQUB $07, $21, $01, $0B, $32, $05, $34, $6B EQUB $D6, $9F, $03, $34, $02, $0F, $1F, $3F EQUB $7F, $02, $14, $DF, $B7, $03, $12, $7F EQUB $BF, $CF, $02, $FE, $F5, $F9, $FB, $FD EQUB $D3, $03, $22, $FE, $FD, $FB, $FF, $03 EQUB $C0, $B0, $CC, $F2, $69, $04, $C0, $F0 EQUB $EC, $F6, $06, $32, $02, $0B, $06, $32 EQUB $01, $07, $05, $21, $2B, $EA, $FC, $05 EQUB $21, $1F, $F5, $FF, $04, $21, $01, $FF EQUB $5F, $F9, $05, $12, $21, $07, $04, $9F EQUB $FF, $EE, $BB, $04, $7F, $13, $03, $21 EQUB $19, $12, $E0, $BF, $03, $21, $07, $14 EQUB $03, $FD, $FB, $E6, $D8, $21, $27, $03 EQUB $22, $FE, $12, $DF, $03, $BE, $DF, $DA EQUB $FD, $C5, $03, $7F, $BF, $EC, $21, $36 EQUB $FB, $03, $60, $FF, $10, $7E, $A7, $03 EQUB $80, $FF, $33, $0F, $01, $18, $04, $21 EQUB $1E, $5F, $10, $CE, $04, $E0, $FF, $EF EQUB $21, $31, $05, $40, $21, $03, $F6, $05 EQUB $FF, $FC, $21, $01, $05, $E0, $32, $0A EQUB $2F, $06, $21, $05, $D0, $06, $80, $E0 EQUB $0E, $32, $01, $06, $07, $34, $01, $03 EQUB $06, $19, $30, $65, $D2, $67, $87, $00 EQUB $38, $01, $06, $0F, $1B, $2F, $1F, $3F EQUB $2F, $5F, $FF, $FE, $79, $F7, $FF, $EF EQUB $16, $F7, $FF, $F3, $DF, $EE, $21, $14 EQUB $EB, $FD, $FB, $F7, $DC, $FE, $12, $F6 EQUB $FA, $22, $FC, $9E, $F5, $CE, $BC, $98 EQUB $68, $D0, $E0, $67, $EF, $FF, $DF, $FF EQUB $BF, $22, $7F, $B4, $58, $86, $21, $03 EQUB $00, $21, $01, $02, $FB, $FF, $FD, $FE EQUB $14, $80, $40, $10, $48, $B4, $4A, $BF EQUB $21, $2C, $00, $80, $E0, $B0, $48, $A4 EQUB $C0, $D1, $07, $C0, $08, $20, $FF, $00 EQUB $21, $05, $04, $21, $1F, $07, $21, $01 EQUB $EA, $21, $02, $7F, $21, $06, $03, $FE EQUB $21, $14, $06, $6B, $81, $FA, $FE, $A1 EQUB $21, $0E, $02, $21, $1C, $7F, $21, $05 EQUB $05, $A7, $8C, $21, $11, $00, $55, $03 EQUB $5F, $F3, $EE, $05, $7E, $DD, $21, $16 EQUB $FC, $68, $21, $0A, $85, $21, $01, $FF EQUB $21, $3E, $E9, $22, $03, $21, $01, $02 EQUB $BF, $7F, $FD, $32, $3F, $0B, $E8, $F5 EQUB $FE, $7F, $12, $C0, $F4, $03, $FB, $FD EQUB $00, $F8, $D4, $02, $A1, $FC, $FE, $FF EQUB $05, $78, $86, $BF, $21, $1F, $00, $80 EQUB $53, $00, $87, $78, $06, $21, $3D, $E0 EQUB $FF, $F0, $00, $21, $0A, $C0, $00, $C0 EQUB $21, $1F, $06, $83, $FF, $FE, $00, $21 EQUB $02, $C0, $02, $7C, $07, $12, $00, $21 EQUB $13, $C0, $0B, $F8, $FE, $00, $80, $0F EQUB $01, $34, $01, $03, $06, $0D, $06, $35 EQUB $01, $02, $0D, $1F, $3A, $74, $A9, $52 EQUB $81, $35, $27, $02, $00, $05, $0B, $57 EQUB $AF, $21, $3F, $5B, $8F, $34, $1F, $3F EQUB $7F, $3F, $DF, $EE, $FD, $5F, $16, $F7 EQUB $12, $EF, $D5, $AB, $54, $BB, $71, $22 EQUB $EF, $12, $F7, $FB, $FC, $FE, $F9, $F5 EQUB $E9, $B2, $4C, $B2, $DE, $F2, $23, $FE EQUB $FD, $F3, $CD, $32, $21, $01, $80, $00 EQUB $C0, $D0, $B4, $AC, $92, $E4, $12, $21 EQUB $3F, $6F, $7B, $7F, $6F, $21, $23, $06 EQUB $80, $A0, $16, $7F, $DF, $37, $1C, $2C EQUB $04, $05, $02, $00, $01, $00, $E0, $F0 EQUB $22, $F8, $FC, $22, $FE, $FF, $E0, $30 EQUB $98, $4C, $A7, $FB, $7D, $BD, $0D, $80 EQUB $C0, $60, $0C, $34, $01, $02, $0C, $1D EQUB $05, $35, $01, $03, $03, $1A, $1C, $65 EQUB $B9, $21, $12, $60, $C2, $A1, $33, $04 EQUB $01, $02, $40, $EC, $DF, $BF, $5E, $4B EQUB $95, $32, $2E, $17, $6F, $BF, $5F, $FA EQUB $BF, $7F, $12, $21, $3F, $7F, $14, $FB EQUB $54, $E9, $E6, $D8, $7F, $FB, $FD, $FE EQUB $FF, $BE, $D8, $E0, $80, $A5, $4F, $B5 EQUB $CA, $B1, $7E, $21, $1F, $DF, $F8, $F0 EQUB $C0, $05, $E2, $82, $21, $3B, $DA, $73 EQUB $21, $1F, $C3, $D8, $22, $01, $00, $21 EQUB $01, $04, $82, $C0, $8E, $CC, $60, $D7 EQUB $72, $21, $18, $61, $20, $60, $36, $21 EQUB $07, $28, $01, $07, $28, $96, $45, $21 EQUB $0F, $F9, $40, $02, $F7, $79, $21, $3E EQUB $F0, $32, $07, $3F, $12, $00, $D3, $EB EQUB $FE, $BA, $6F, $36, $2E, $0F, $FF, $2C EQUB $14, $01, $C1, $22, $D0, $FC, $32, $3D EQUB $1C, $AD, $95, $6D, $73, $21, $3D, $F2 EQUB $80, $C0, $40, $20, $10, $21, $08, $40 EQUB $21, $04, $10, $21, $08, $42, $21, $11 EQUB $40, $22, $50, $D0, $0C, $80, $00, $20 EQUB $21, $08, $08, $21, $3F, $7A, $BD, $9E EQUB $85, $AA, $D9, $FC, $00, $21, $05, $42 EQUB $61, $72, $51, $20, $00, $45, $8B, $34 EQUB $16, $2B, $54, $31, $64, $F2, $BF, $7D EQUB $FB, $F7, $EF, $CE, $98, $00, $F4, $A3 EQUB $CC, $10, $44, $90, $60, $FD, $FF, $FC EQUB $F0, $E0, $80, $03, $D5, $55, $02, $21 EQUB $05, $02, $48, $08, $5B, $4E, $34, $1D EQUB $0A, $51, $02, $0A, $DF, $FE, $DE, $85 EQUB $39, $2E, $03, $80, $01, $00, $01, $01 EQUB $00, $01, $03, $50, $E8, $FD, $7F, $D0 EQUB $7E, $38, $2F, $15, $2F, $17, $02, $00 EQUB $2F, $01, $02, $BE, $21, $03, $42, $F3 EQUB $21, $1D, $BF, $22, $ED, $41, $FC, $BD EQUB $21, $0C, $E0, $40, $02, $33, $23, $02 EQUB $2E, $00, $82, $55, $AD, $EA, $DD, $FD EQUB $D1, $FF, $7D, $AA, $50, $00, $FD, $EF EQUB $32, $3B, $0C, $BB, $C1, $AA, $FF, $21 EQUB $02, $80, $E0, $F0, $44, $21, $3E, $55 EQUB $00, $50, $70, $B0, $D0, $60, $E9, $21 EQUB $37, $CA, $08, $34, $04, $02, $16, $0A EQUB $42, $A0, $21, $02, $8E, $08, $35, $0E EQUB $04, $06, $04, $08, $03, $34, $04, $0E EQUB $0C, $08, $08, $34, $04, $0C, $1C, $0A EQUB $05, $22, $0E, $21, $04, $02, $60, $05 EQUB $80, $50, $7D, $0C, $21, $0D, $0E, $60 EQUB $B0, $07, $60, $3E, $0B, $07, $0F, $0A EQUB $1F, $16, $19, $0F, $04, $02, $01, $05 EQUB $00, $09, $21, $06, $00, $78, $F8, $68 EQUB $70, $22, $F0, $E0, $00, $90, $10, $90 EQUB $A0, $40, $80, $02, $21, $08, $00, $21 EQUB $08, $03, $21, $18, $00, $21, $18, $00 EQUB $35, $18, $08, $00, $18, $3C, $20, $7E EQUB $5A, $3E, $24, $3C, $34, $2C, $3C, $2C EQUB $00, $3C, $18, $00, $08, $18, $00, $18 EQUB $03, $A0, $07, $B0, $A0, $08, $33, $3C EQUB $34, $2C, $06, $21, $18, $10, $21, $04 EQUB $00, $21, $04, $03, $21, $18, $00, $37 EQUB $2C, $04, $2C, $04, $00, $18, $3C, $20 EQUB $7E, $5A, $66, $7E, $7A, $56, $7A, $56 EQUB $00, $37, $3C, $18, $00, $04, $2C, $04 EQUB $2C, $02, $A0, $07, $F0, $A0, $00, $A0 EQUB $06, $21, $3C, $22, $7A, $21, $24, $04 EQUB $37, $18, $24, $24, $18, $00, $08, $08 EQUB $03, $21, $18, $02, $22, $18, $21, $08 EQUB $00, $32, $18, $3C, $20, $7E, $5A, $3D EQUB $24, $3C, $34, $2C, $2C, $3C, $00, $3C EQUB $18, $00, $08, $18, $18, $04, $C0, $07 EQUB $E0, $C0, $09, $21, $18, $10, $06, $22 EQUB $18, $3A, $28, $08, $24, $00, $08, $10 EQUB $08, $10, $34, $34, $02, $10, $21, $18 EQUB $10, $00, $35, $3C, $2C, $34, $2C, $3C EQUB $7E, $4A, $6A, $00, $10, $21, $18, $10 EQUB $02, $22, $34, $02, $A0, $21, $05, $CA EQUB $20, $04, $C0, $CE, $21, $04, $C0, $06 EQUB $7E, $22, $7A, $66, $04, $36, $18, $24 EQUB $24, $18, $00, $0F, $20, $60, $04, $32 EQUB $06, $2F, $78, $F0, $0D, $C0, $32, $0A EQUB $03, $04, $22, $7E, $21, $3C, $05, $22 EQUB $30, $08, $99, $21, $33, $66, $CC, $99 EQUB $21, $33, $0A, $66, $80, $99, $32, $33 EQUB $26, $8C, $03, $4C, $32, $19, $33, $66 EQUB $4C, $21, $38, $76, $C2, $C3, $83, $46 EQUB $7C, $21, $18, $C7, $BB, $23, $7D, $BB EQUB $C7, $FF, $35, $08, $2C, $3C, $2C, $04 EQUB $03, $34, $04, $1C, $7C, $1C, $04, $80 EQUB $00, $CD, $06, $80, $F0, $08, $60, $70 EQUB $30, $32, $08, $04, $03, $7C, $6C, $4C EQUB $74, $78, $05, $21, $08, $00, $21, $08 EQUB $03, $2B, $08, $02, $24, $08, $22, $0C EQUB $02, $3F
Name: inventoryIcon [Show more] Type: Variable Category: Equipment Summary: Image data for the inventory icon shown on the icon bar in the Market Price screen
Context: See this variable on its own page References: This variable is used as follows: * SendViewToPPU uses inventoryIcon

You can view the tiles that make up the inventory icon here: https://www.bbcelite.com/images/source/nes/inventoryIcon_ppu.png
.inventoryIcon EQUB $00, $00, $00, $06, $0F, $16, $10, $16 EQUB $00, $00, $06, $1F, $3F, $3F, $3F, $39 EQUB $00, $00, $00, $00, $00, $80, $80, $80 EQUB $00, $00, $00, $80, $C0, $40, $40, $40 EQUB $16, $16, $16, $06, $00, $00, $00, $00 EQUB $39, $39, $39, $19, $06, $00, $00, $00 EQUB $80, $80, $80, $00, $00, $00, $00, $00 EQUB $40, $40, $40, $80, $00, $00, $00, $00
Name: smallLogoImage [Show more] Type: Variable Category: Save and load Summary: Packed image data for the small Elite logo shown on the Save and Load screen Deep dive: Image and data compression
Context: See this variable on its own page References: This variable is used as follows: * SendViewToPPU uses smallLogoImage

You can view the tiles that make up the small logo image here: https://www.bbcelite.com/images/source/nes/smallLogoImage_ppu.png and you can see what the small logo looks like on-screen here: https://www.bbcelite.com/images/nes/general/save_and_load.png
.smallLogoImage EQUB $00, $22, $80, $C0, $E0, $F0, $F8, $A0 EQUB $80, $40, $22, $20, $10, $32, $08, $04 EQUB $5E, $0F, $21, $01, $00, $3C, $06, $0C EQUB $00, $3C, $06, $CC, $3C, $00, $06, $0A EQUB $12, $22, $42, $00, $21, $04, $4C, $3E EQUB $1D, $1E, $05, $0F, $02, $13, $01, $33 EQUB $22, $01, $0A, $00, $1D, $1C, $21, $1E EQUB $02, $80, $C0, $A0, $78, $B0, $78, $00 EQUB $80, $40, $20, $50, $88, $48, $84, $36 EQUB $02, $01, $01, $0F, $3F, $2F, $7E, $F5 EQUB $00, $32, $04, $08, $10, $22, $20, $41 EQUB $8A, $30, $22, $F0, $A0, $40, $A0, $20 EQUB $00, $21, $08, $02, $40, $80, $40, $22 EQUB $E0, $10, $00, $21, $08, $00, $21, $04 EQUB $03, $22, $0F, $22, $07, $31, $03, $23 EQUB $01, $FA, $71, $37, $36, $3F, $1E, $3B EQUB $07, $8F, $02, $81, $22, $C0, $E0, $C4 EQUB $F8, $70, $02, $80, $C0, $00, $60, $A8 EQUB $F0, $02, $80, $40, $20, $22, $10, $21 EQUB $08, $02, $23, $48, $78, $22, $58, $02 EQUB $40, $02, $22, $20, $00, $3E, $01, $03 EQUB $0C, $1A, $35, $2A, $35, $4F, $01, $02 EQUB $06, $0C, $18, $31, $63, $62, $B8, $D8 EQUB $88, $B0, $00, $22, $C5, $86, $32, $07 EQUB $27, $77, $4F, $FF, $BF, $21, $3E, $7C EQUB $00, $20, $40, $C0, $22, $80, $02, $E0 EQUB $22, $C0, $22, $80, $03, $21, $01, $07 EQUB $24, $01, $04, $21, $07, $93, $33, $03 EQUB $0A, $0A, $40, $43, $00, $F8, $EC, $FC EQUB $22, $F5, $FF, $7C, $21, $3D, $C8, $F8 EQUB $E8, $F8, $E8, $F8, $F1, $20, $24, $08 EQUB $21, $18, $22, $10, $D0, $58, $10, $58 EQUB $BC, $22, $30, $4C, $90, $22, $20, $60 EQUB $40, $02, $21, $02, $68, $72, $58, $60 EQUB $72, $21, $3B, $10, $32, $0B, $33, $4F EQUB $47, $5F, $4F, $67, $35, $2F, $17, $0F EQUB $3A, $1E, $5E, $B4, $32, $26, $1C, $10 EQUB $78, $24, $FE, $22, $FC, $F8, $F0, $03 EQUB $21, $0B, $00, $32, $05, $02, $04, $21 EQUB $07, $00, $3E, $03, $01, $00, $02, $17 EQUB $23, $FA, $03, $8A, $0E, $03, $1D, $08 EQUB $1B, $FA, $21, $03, $F3, $F2, $32, $03 EQUB $33, $F8, $F3, $21, $37, $C4, $22, $37 EQUB $EF, $CC, $00, $E4, $21, $04, $E4, $C4 EQUB $21, $04, $E7, $B8, $7F, $D7, $B1, $21 EQUB $21, $B1, $FD, $F1, $21, $03, $00, $31 EQUB $2F, $24, $21, $A1, $EB, $E0, $CF, $32 EQUB $08, $0F, $E8, $EB, $21, $1F, $D6, $21 EQUB $1F, $EF, $35, $08, $0F, $0F, $08, $0F EQUB $10, $00, $80, $21, $3F, $00, $BC, $21 EQUB $01, $00, $22, $E0, $C0, $40, $80, $7F EQUB $7E, $22, $80, $36, $1C, $08, $07, $03 EQUB $00, $01, $00, $7C, $34, $38, $18, $0F EQUB $07, $03, $10, $21, $38, $10, $12, $34 EQUB $0B, $07, $FE, $18, $10, $30, $12, $21 EQUB $07, $FF, $7F, $32, $0C, $1C, $88, $22 EQUB $AF, $76, $57, $DB, $22, $0C, $21, $1C EQUB $15, $60, $F0, $60, $12, $80, $21, $02 EQUB $F8, $70, $60, $E0, $12, $00, $22, $FC EQUB $F8, $70, $E0, $C0, $80, $03, $7C, $F8 EQUB $F0, $E0, $C0, $03, $36, $3D, $1F, $07 EQUB $07, $02, $01, $02, $35, $03, $1F, $0F EQUB $01, $03, $03, $AD, $AF, $77, $57, $DA EQUB $AC, $F8, $70, $FE, $12, $FC, $FE, $F8 EQUB $70, $F8, $F0, $E0, $C0, $06, $C0, $80 EQUB $05, $FC, $02, $30, $50, $03, $F8, $00 EQUB $20, $60, $20, $05, $10, $22, $30, $20 EQUB $02, $32, $0E, $1E, $26, $30, $02, $10 EQUB $22, $30, $20, $02, $22, $3E, $26, $30 EQUB $02, $10, $22, $30, $20, $02, $28, $30 EQUB $22, $C0, $10, $22, $30, $20, $02, $22 EQUB $FE, $26, $30, $08, $32, $1E, $0E, $09 EQUB $30, $21, $18, $06, $22, $7E, $03, $3F
Name: logoBallImage [Show more] Type: Variable Category: Start and end Summary: Packed image data for the ball at the bottom of the big Elite logo shown on the Start screen Deep dive: Image and data compression
Context: See this variable on its own page References: This variable is used as follows: * SendViewToPPU uses logoBallImage

You can view the tiles that make up the big logo ball image here: https://www.bbcelite.com/images/source/nes/logoBallImage_ppu.png and you can see what the full big logo looks like on-screen here (the ball is at the bottom of the logo): https://www.bbcelite.com/images/nes/general/start.png
.logoBallImage EQUB $35, $51, $38, $3F, $11, $0B, $03, $21 EQUB $0C, $02, $21, $0E, $04, $20, $40, $00 EQUB $80, $0C, $0D, $13, $3F
Name: DrawDashNames [Show more] Type: Subroutine Category: Dashboard Summary: Draw the dashboard into both the nametable buffers
Context: See this subroutine on its own page References: This subroutine is called as follows: * DrawDashNames_b3 calls DrawDashNames
.DrawDashNames LDY #7*32 ; We are about to draw the dashboard, which consists of ; 7 rows of 32 tiles, so set a tile counter in Y to use ; as an index into the dashNames table, so we can copy ; the nametable entries from dashNames into the ; nametable buffer .ddsh1 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA dashNames-1,Y ; Set A to the Y-th nametable entry in dashNames ; ; Note that we fetch from dashNames-1 as the screen is ; horizontally scrolled by one tile (see below) STA nameBuffer0+22*32,Y ; Store the nametable entry in both nametable STA nameBuffer1+22*32,Y ; buffers, so that the dashboard starts at row 22 DEY ; Decrement the tile counter in Y BNE ddsh1 ; Loop back to write the next nametable entry until we ; have written all 7 rows of 32 tiles ; Because the horizontal scroll in PPU_SCROLL is set to ; 8, the leftmost tile on each row is scrolled around to ; the right side, which means that in terms of tiles, ; column 1 is the left edge of the screen, then columns ; 2 to 31 form the body of the screen, and column 0 is ; the right edge of the screen ; ; We therefore have to fix the tiles that appear at the ; end of each row, i.e. column 0 on row 22 (for the end ; of the top row of the dashboard) all the way down to ; column 0 on row 28 (for the end of the bottom row of ; the dashboard) LDA nameBuffer0+23*32 ; Wrap around the scrolled tile on row 22 STA nameBuffer0+22*32 LDA nameBuffer0+24*32 ; Wrap around the scrolled tile on row 23 STA nameBuffer0+23*32 LDA nameBuffer0+25*32 ; Wrap around the scrolled tile on row 24 STA nameBuffer0+24*32 LDA nameBuffer0+26*32 ; Wrap around the scrolled tile on row 25 STA nameBuffer0+25*32 ; Interestingly, the scrolled tile on row 26 is omitted, ; though I'm not sure why LDA nameBuffer0+28*32 ; Wrap around the scrolled tile on row 27 STA nameBuffer0+27*32 LDA nameBuffer0+29*32 ; Wrap around the scrolled tile on row 28 STA nameBuffer0+28*32 ; Finally, we have to clear up the overspill in column 0 ; on row 29 LDA #0 ; Set the first tile on row 29 to the blank tile STA nameBuffer0+29*32 RTS ; Return from the subroutine
Name: ResetScanner [Show more] Type: Subroutine Category: Dashboard Summary: Reset the sprites used for drawing ships on the scanner
Context: See this subroutine on its own page References: This subroutine is called as follows: * ResetScanner_b3 calls ResetScanner
.ResetScanner SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 ; We start by clearing tile rows 29 to 31 in namespace ; buffer 0, which are the three rows just below the ; dashboard LDY #3*32 ; Set Y as a tile counter for three rows of 32 tiles LDA #0 ; We are going to set the tiles to the background ; pattern, so set A = 0 to use as the tile number .rscn1 STA nameBuffer0+29*32-1,Y ; Clear the Y-th tile from the start of row 29 ; in namespace buffer 0 DEY ; Decrement the tile counter in Y BNE rscn1 ; Loop back until we have cleared all three rows LDA #203 ; Set the pattern number for sprites 11 and 12 (the STA pattSprite11 ; pitch and roll indicators) to 203, which is the I-bar STA pattSprite12 ; pattern LDA #%00000011 ; Set the attributes for sprites 11 and 12 (the pitch STA attrSprite11 ; and roll indicators) as follows: STA attrSprite12 ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 clear = show in front of background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically LDA #%00000000 ; Set the attributes for sprite 13 (the compass dot) as STA attrSprite13 ; follows: ; ; * Bits 0-1 = sprite palette 0 ; * Bit 5 clear = show in front of background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically ; We now reset the 24 sprites from sprite 14 to 37, ; which are the sprites used to show ships on the ; scanner LDX #24 ; Set a sprite counter in X so we reset 24 sprites LDY #56 ; Set Y = 56 so we start setting the attributes and tile ; for sprite 56 / 4 = 14 onwards .rscn2 LDA #218 ; Set the pattern number for sprite Y / 4 to 218, which STA pattSprite0,Y ; is the vertical bar used for drawing a ship's stick ; on the scanner LDA #%00000000 ; Set the attributes for sprite Y / 4 as follows: STA attrSprite0,Y ; ; ; * Bits 0-1 = sprite palette 0 ; * Bit 5 clear = show in front of background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically INY ; Add 4 to Y so it points to the next sprite's data in INY ; the sprite buffer INY INY DEX ; Decrement the sprite counter in X BNE rscn2 ; Loop back until we have reset all 24 sprites RTS ; Return from the subroutine
Name: SendViewToPPU [Show more] Type: Subroutine Category: PPU Summary: Configure the PPU for the view type in QQ11 Deep dive: Views and view types in NES Elite
Context: See this subroutine on its own page References: This subroutine is called as follows: * SendViewToPPU_b3 calls SendViewToPPU
.SendViewToPPU JSR WaitForNMI ; Wait until the next NMI interrupt has passed (i.e. the ; next VBlank) LDA ppuCtrlCopy ; Store the value of ppuCtrlCopy on the stack so we can PHA ; restore it at the end of the subroutine LDA #%00000000 ; Set A to use as the new value for PPU_CTRL below STA ppuCtrlCopy ; Store the new value of PPU_CTRL in ppuCtrlCopy so we ; can check its value without having to access the PPU STA PPU_CTRL ; Configure the PPU by setting PPU_CTRL as follows: ; ; * Bits 0-1 = base nametable address %00 ($2000) ; * Bit 2 clear = increment PPU_ADDR by 1 each time ; * Bit 3 clear = sprite pattern table is at $0000 ; * Bit 4 clear = background pattern table is at $0000 ; * Bit 5 clear = sprites are 8x8 pixels ; * Bit 6 clear = use PPU 0 (the only option on a NES) ; * Bit 7 clear = disable VBlank NMI generation STA setupPPUForIconBar ; Clear bit 7 of setupPPUForIconBar so we do nothing ; when the PPU starts drawing the icon bar LDA #%00000000 ; Configure the PPU by setting PPU_MASK as follows: STA PPU_MASK ; ; * Bit 0 clear = normal colour (not monochrome) ; * Bit 1 clear = hide leftmost 8 pixels of background ; * Bit 2 clear = hide sprites in leftmost 8 pixels ; * Bit 3 clear = hide background ; * Bit 4 clear = hide sprites ; * Bit 5 clear = do not intensify greens ; * Bit 6 clear = do not intensify blues ; * Bit 7 clear = do not intensify reds LDA QQ11 ; If the view type in QQ11 is not $B9 (Equip Ship), CMP #$B9 ; jump to svip1 to keep checking for view types BNE svip1 JMP svip7 ; Jump to svip7 to set up the Equip Ship screen .svip1 CMP #$9D ; If the view type in QQ11 is $9D (Long-range Chart with BEQ svip6 ; the normal font loaded), jump to svip6 CMP #$DF ; If the view type in QQ11 is $DF (Start screen with the BEQ svip6 ; normal font loaded), jump to svip6 CMP #$96 ; If the view type in QQ11 is not $96 (Data on System), BNE svip2 ; jump to svip2 to keep checking for view types ; If we get here then this is the Data on System screen JSR GetSystemImage_b5 ; This is the Data on System view, so fetch the ; background image and foreground sprite for the current ; system image and send them to the pattern buffers and ; PPU JMP svip10 ; Jump to svip10 to finish off setting up the view .svip2 CMP #$98 ; If the view type in QQ11 is not $98 (Status Mode), BNE svip3 ; jump to svip3 to keep checking for view types ; If we get here then this is the Status Mode screen JSR GetCmdrImage_b4 ; This is the Status Mode view, so fetch the headshot ; image for the commander and store it in the pattern ; buffers, and send the face and glasses images to the ; PPU JMP svip10 ; Jump to svip10 to finish off setting up the view .svip3 CMP #$BA ; If the view type in QQ11 is not $BA (Market Price), BNE svip4 ; jump to svip4 to keep checking for view types ; If we get here then this is the Market Price screen LDA #HI(16*69) ; Set PPU_ADDR to the address of pattern 69 in pattern STA PPU_ADDR ; table 0, so we load the missile image here LDA #LO(16*69) STA PPU_ADDR LDA #HI(inventoryIcon) ; Set SC(1 0) = inventoryIcon so we send the inventory STA SC+1 ; icon bar image to the PPU LDA #LO(inventoryIcon) STA SC LDA #245 ; Set imageSentToPPU = 245 to denote that we have sent STA imageSentToPPU ; the inventory icon image to the PPU LDX #4 ; Set X = 4 so we send four batches of 16 bytes to the ; PPU in the call to SendInventoryToPPU below JMP svip9 ; Jump to svip9 to send the missile image to the PPU and ; finish off setting up the view .svip4 CMP #$BB ; If the view type in QQ11 is not $BB (Save and load BNE svip5 ; with the normal and highlight fonts loaded), jump to ; svip5 to keep checking for view types ; If we get here then this is the Save and Load screen ; with the normal and highlight fonts loaded LDA #HI(16*69) ; Set PPU_ADDR to the address of pattern 69 in pattern STA PPU_ADDR ; table 0, so we load the small logo image here LDA #LO(16*69) STA PPU_ADDR LDA #HI(smallLogoImage) ; Set V(1 0) = smallLogoImage STA V+1 ; LDA #LO(smallLogoImage) ; So we can unpack the image data for the small STA V ; Elite logo into pattern 69 onwards in pattern ; table 0 LDA #3 ; Set A = 3 so we only unpack the image data below when ; imageSentToPPU does not equal 3 (i.e. if we haven't ; already sent the small logo image to the PPU) BNE svip8 ; Jump to svip8 to unpack the image data (this BNE is ; effectively a JMP as A is never zero) .svip5 ; If we get here then this not one of these views: ; ; * Equip Ship ; * Long-range Chart with the normal font loaded ; * Start screen with the normal font loaded ; * Data on System ; * Status Mode ; * Market Price ; * Save and load with normal and highlight fonts ; loaded ; ; so now we load the dashboard image, if we haven't ; already LDA #0 ; Set A = 0 to set as the new value of imageSentToPPU ; below CMP imageSentToPPU ; If imageSentToPPU = 0 then we have already sent the BEQ svip10 ; dashboard image to the PPU, so jump to svip10 to ; finish off setting up the view without sending the ; dashboard image again STA imageSentToPPU ; Set imageSentToPPU = 0 to denote that we have sent the ; dashboard image to the PPU JSR SendDashImageToPPU ; Unpack the dashboard image and send it to patterns 69 ; to 255 in pattern table 0 in the PPU JMP svip10 ; Jump to svip10 to finish off setting up the view .svip6 ; If we get here then QQ11 is $9D (Long-range Chart with ; the normal font loaded) or $DF (Start screen with ; the normal font loaded), so now we load the font ; images, starting at pattern 68 in the PPU LDA #36 ; Set asciiToPattern = 36, so we add 36 to an ASCII code STA asciiToPattern ; in the CHPR routine to get the pattern number in the ; PPU of the corresponding character image (as we are ; about to load the font at pattern 68, and the font ; starts with a space character, which is ASCII 32, and ; 32 + 36 = 68) LDA #1 ; Set A = 1 to set as the new value of imageSentToPPU ; below CMP imageSentToPPU ; If imageSentToPPU = 1 then we have already sent the BEQ svip10 ; font image to the PPU, so jump to svip10 to finish off ; setting up the view without sending the font image ; again STA imageSentToPPU ; Set imageSentToPPU = 1 to denote that we have sent the ; font image to the PPU LDA #HI(16*68) ; Set PPU_ADDR to the address of pattern 68 in pattern STA PPU_ADDR ; table 0 LDA #LO(16*68) STA PPU_ADDR LDX #95 ; Set X = 95 so the call to SendFontImageToPPU sends 95 ; font patterns to the PPU as a colour 1 font on a black ; background (though the 95th character is full of ; random junk, so it never gets used) LDA #HI(fontImage) ; Set SC(1 0) = fontImage so we send the font image in STA SC+1 ; the call to SendFontImageToPPU LDA #LO(fontImage) STA SC JSR SendFontImageToPPU ; Send the 95 font patterns to the PPU as a colour 1 ; font on a black background LDA QQ11 ; If the view type in QQ11 is not $DF (Start screen with CMP #$DF ; the normal font loaded), then jump to svip10 to BNE svip10 ; finish off setting up the view without loading the ; logo ball image LDA #HI(16*227) ; Set PPU_ADDR to the address of pattern 227 in pattern STA PPU_ADDR ; table 0 LDA #LO(16*227) STA PPU_ADDR LDA #HI(logoBallImage) ; Set V(1 0) = logoBallImage STA V+1 ; LDA #LO(logoBallImage) ; So we can unpack the image data for the ball at the STA V ; bottom of the big Elite logo into pattern 227 onwards ; in pattern table 0 JSR UnpackToPPU ; Unpack the image data to the PPU JMP svip10 ; Jump to svip10 to finish off setting up the view .svip7 ; If we get here then this is the Equip Ship screen LDA #HI(16*69) ; Set PPU_ADDR to the address of pattern 69 in pattern STA PPU_ADDR ; table 0 LDA #LO(16*69) STA PPU_ADDR LDA #HI(cobraImage) ; Set V(1 0) = cobraImage STA V+1 ; LDA #LO(cobraImage) ; So we can unpack the image data for the Cobra Mk III STA V ; image into pattern 69 onwards in pattern table 0 LDA #2 ; Set A = 2 so we only unpack the image data when ; imageSentToPPU does not equal 2, i.e. if we have not ; already sent the Cobra image to the PPU .svip8 ; If we get here then A determines which image we should ; be loading (the Cobra Mk III image when A = 2, or the ; small logo image when A = 3) CMP imageSentToPPU ; If imageSentToPPU = A then we have already sent the BEQ svip10 ; image specified in A to the PPU STA imageSentToPPU ; Set imageSentToPPU = A to denote that we have sent the ; relevant image to the PPU JSR UnpackToPPU ; Unpack the image data to the PPU JMP svip10 ; Jump to svip10 to finish off setting up the view .svip9 JSR SendInventoryToPPU ; Send X batches of 16 bytes from SC(1 0) to the PPU ; ; We only get here with the following values: ; ; SC(1 0) = inventoryIcon ; ; X = 4 ; ; So this sends 16 * 4 = 64 bytes from inventoryIcon to ; the PPU, which sends the inventory icon bar image .svip10 ; We have finished setting up any view-specific images ; and settings, so now we finish off with some settings ; that apply to all views JSR SetupSprite0 ; Set the coordinates of sprite 0 so we can detect when ; the PPU starts to draw the icon bar ; We now send patterns 0 to 4 to the PPU, which contain ; the box edges LDA #HI(PPU_PATT_1+16*0) ; Set PPU_ADDR to the address of pattern 0 in STA PPU_ADDR ; pattern table 1 LDA #LO(PPU_PATT_1+16*0) STA PPU_ADDR LDY #0 ; We are about to send a batch of bytes to the PPU, so ; set an index counter in Y LDX #80 ; There are 80 bytes of pattern data in the five tile ; patterns (5 * 16 bytes), so set a byte counter in X .svip11 LDA boxEdgeImages,Y ; Send the Y-th byte from boxEdgeImages to the PPU STA PPU_DATA INY ; Increment the index counter in Y DEX ; Decrement the byte counter in X BNE svip11 ; Loop back until we have sent all 80 bytes to the PPU ; We now zero pattern 255 in pattern table 1 so it is ; a full block of background colour LDA #HI(PPU_PATT_1+16*255) ; Set PPU_ADDR to the address of pattern 255 in STA PPU_ADDR ; pattern table 1 LDA #LO(PPU_PATT_1+16*255) STA PPU_ADDR LDA #0 ; We are going to zero the pattern, so set A = 0 to send ; to the PPU LDX #16 ; There are 16 bytes in a pattern, so set a byte counter ; in X .svip12 STA PPU_DATA ; Send a zero to the PPU DEX ; Decrement the byte counter in X BNE svip12 ; Loop back until we have sent all 16 zeroes to the PPU JSR MakeSoundsAtVBlank ; Wait for the next VBlank and make the current sounds ; (music and sound effects) LDX #0 ; Configure bitplane 0 to be sent to the PPU in the NMI, JSR SendBitplaneToPPU ; so the patterns and nametables will be sent to the PPU ; during the next few VBlanks LDX #1 ; Configure bitplane 1 to be sent to the PPU in the NMI JSR SendBitplaneToPPU ; so the patterns and nametables will be sent to the PPU ; during the next few VBlanks LDX #0 ; Hide bitplane 0, so: STX hiddenBitplane ; ; * Colour %01 (1) is the hidden colour (black) ; * Colour %10 (2) is the visible colour (cyan) STX nmiBitplane ; Set nmiBitplane = 0 so bitplane 0 is the first to be ; sent in the NMI handler JSR SetDrawingBitplane ; Set the drawing bitplane to bitplane 0 JSR MakeSoundsAtVBlank ; Wait for the next VBlank and make the current sounds ; (music and sound effects) LDA QQ11 ; Set the old view type in QQ11a to the new view type in STA QQ11a ; QQ11, to denote that we have now changed view to the ; view in QQ11 AND #%01000000 ; If bit 6 of the view type is clear, then there is an BEQ svip13 ; icon bar, so jump to svip13 to set showUserInterface ; to denote there is a user interface LDA QQ11 ; If the view type in QQ11 is $DF (Start screen with CMP #$DF ; the normal font loaded), jump to svip13 to set bit 7 BEQ svip13 ; of showUserInterface so that the nametable and palette ; table get set to 0 when sprite 0 is drawn, even though ; there is no icon bar (this ensures that the part of ; the Start screen below x-coordinate 166 is always ; drawn using nametable 0, which covers the interface ; part of the screen where the language gets chosen) ; If we get here then there is no user interface and ; and this is not the Start screen with the normal font ; loaded LDA #0 ; Clear bit 7 of A so we can set showUserInterface to BEQ svip14 ; denote that there is no user interface, and jump ; to svip14 to set the value (this BEQ is effectively ; a JMP as A is always zero) .svip13 LDA #%10000000 ; Set bit 7 of A so we can set showUserInterface to ; denote that there is a user interface .svip14 STA showUserInterface ; Set showUserInterface to the value of A that we just ; set for the view PLA ; Restore the copy of ppuCtrlCopy that we put on the STA ppuCtrlCopy ; stack so it's preserved across the call to the ; subroutine STA PPU_CTRL ; Set PPU_CTRL to the copy we made, so it's also ; preserved across the call JMP FadeToColour_b3 ; Reverse-fade the screen from black to full colour over ; the next four VBlanks, returning from the subroutine ; using a tail call
Name: SendFontImageToPPU [Show more] Type: Subroutine Category: PPU Summary: Send a font to the PPU as a colour 1 font on a colour 0 background (i.e. colour 1 on black)
Context: See this subroutine on its own page References: This subroutine is called as follows: * SendViewToPPU calls SendFontImageToPPU

Arguments: X The number of patterns to send to the PPU SC(1 0) The address of the data in the pattern buffer to send to the PPU
.SendFontImageToPPU LDY #0 ; We are about to send a batch of bytes to the PPU, so ; set an index counter in Y .sppu1 ; We repeat the following code eight times, so it sends ; all eight bytes of the pattern into bitplane 0 to the ; PPU ; ; Bitplane 0 is used for bit 0 of the colour number, and ; we send zeroes to bitplane 1 below, which is used for ; bit 1 of the colour number, so the result is a pattern ; with the font in colour 1 on background colour 0 LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY LDA (SC),Y ; Send the Y-th byte of SC(1 0) to the PPU and increment STA PPU_DATA ; the index in Y INY BNE sppu2 ; If Y just wrapped around to zero, increment the high INC SC+1 ; byte of SC(1 0) to point to the next page in memory .sppu2 LDA #0 ; Send the pattern's second bitplane to the PPU, so all STA PPU_DATA ; eight bytes of the pattern in bitplane 1 are set to STA PPU_DATA ; zero (so bit 1 of the colour number is zero) STA PPU_DATA STA PPU_DATA STA PPU_DATA STA PPU_DATA STA PPU_DATA STA PPU_DATA DEX ; Decrement the pattern counter in X BNE sppu1 ; Loop back to send the next pattern to the PPU until we ; have sent X patterns RTS ; Return from the subroutine
Name: SendDashImageToPPU [Show more] Type: Subroutine Category: PPU Summary: Unpack the dashboard image and send it to patterns 69 to 255 in pattern table 0 in the PPU Deep dive: Views and view types in NES Elite
Context: See this subroutine on its own page References: This subroutine is called as follows: * ResetScreen calls SendDashImageToPPU * SendViewToPPU calls SendDashImageToPPU
.SendDashImageToPPU LDA #HI(16*69) ; Set PPU_ADDR to the address of pattern 69 in pattern STA PPU_ADDR ; table 0 LDA #LO(16*69) STA PPU_ADDR LDA #HI(dashImage) ; Set V(1 0) = dashImage STA V+1 ; LDA #LO(dashImage) ; So we can unpack the image data for the dashboard into STA V ; into patterns 69 to 255 in pattern table 0 JMP UnpackToPPU ; Unpack the image data to the PPU, returning from the ; subroutine using a tail call
Name: SendBitplaneToPPU [Show more] Type: Subroutine Category: PPU Summary: Send a bitplane to the PPU immediately Deep dive: Views and view types in NES Elite
Context: See this subroutine on its own page References: This subroutine is called as follows: * SendBitplaneToPPU_b3 calls SendBitplaneToPPU * SendViewToPPU calls SendBitplaneToPPU

Arguments: X The number of the bitplane to configure to be sent to the PPU in the NMI handler
.SendBitplaneToPPU STX drawingBitplane ; Set the drawing bitplane and the NMI bitplane to the STX nmiBitplane ; argument in X, so all the following operations apply ; to the specified bitplane STX hiddenBitplane ; Hide bitplane X so it isn't visible on-screen while ; we do the following LDA #0 ; Tell the NMI handler to send nametable entries from STA firstNameTile ; tile 0 onwards LDA QQ11 ; If the view type in QQ11 is not $DF (Start screen with CMP #$DF ; the normal font loaded), then jump to sbit1 to skip BNE sbit1 ; the following and start sending pattern data from ; pattern 37 onwards LDA #4 ; This is the Start screen with font loaded in bitplane BNE sbit2 ; 0, so set A = 4 so we start sending pattern data ; from pattern 4 onwards .sbit1 LDA #37 ; So set A = 37 so we start sending pattern data from ; pattern 37 onwards .sbit2 STA firstPattern ; Tell the NMI handler to send pattern entries from ; pattern A in the buffer LDA firstFreePattern ; Tell the NMI handler to send pattern entries up to the STA lastPattern,X ; first free pattern, for the drawing bitplane in X LDA #%11000100 ; Set the bitplane flags for the drawing bitplane to the JSR SetDrawPlaneFlags ; following: ; ; * Bit 2 set = send tiles up to end of the buffer ; * Bit 3 clear = don't clear buffers after sending ; * Bit 4 clear = we've not started sending data yet ; * Bit 5 clear = we have not yet sent all the data ; * Bit 6 set = send both pattern and nametable data ; * Bit 7 set = send data to the PPU ; ; Bits 0 and 1 are ignored and are always clear ; ; This configures the NMI to send nametable and pattern ; data for the drawing bitplane to the PPU during VBlank JSR SendDataNowToPPU ; Send the drawing bitplane buffers to the PPU ; immediately, without trying to squeeze it into VBlanks LDA firstFreePattern ; Set clearingPattern for the drawing bitplane to the STA clearingPattern,X ; number of the first free pattern, so the NMI handler ; only clears patterns from this point onwards ; ; This ensures that the tiles that we just sent to the ; PPU don't get cleared out by the NMI handler RTS ; Return from the subroutine
Name: SendDataNowToPPU [Show more] Type: Subroutine Category: PPU Summary: Send the specified bitplane buffers to the PPU immediately, without trying to squeeze it into VBlanks
Context: See this subroutine on its own page References: This subroutine is called as follows: * SendBitplaneToPPU calls SendDataNowToPPU

Arguments: X The number of the bitplane to send
Returns: X X is preserved
.SendDataNowToPPU TXA ; Store the bitplane in X on the stack PHA LDA #HI(16383) ; Set cycleCount = 16383 so the call to SendBuffersToPPU STA cycleCount+1 ; runs for as long as possible without quitting early LDA #LO(16383) ; (we are not in the NMI handler, so we don't need to STA cycleCount ; count cycles, so this just ensures that the ; cycle-counting checks are not triggered where ; possible) JSR SendBuffersToPPU ; Send the nametable and palette buffers to the PPU for ; bitplane X, as configured in the bitplane flags PLA ; Set X to the bitplane number we stored on the stack PHA ; above, leaving the value on the stack so we can still TAX ; restore it at the end of the routine LDA bitplaneFlags,X ; If bit 5 is set in the flags for bitplane X, then we AND #%00100000 ; have now sent all the data to the PPU for this BNE sdat1 ; bitplane, so jump to sdat1 to return from the ; subroutine LDA #HI(4096) ; Otherwise the large cycle count above wasn't long STA cycleCount+1 ; enough to send all the data to the PPU, so set LDA #LO(4096) ; cycleCount to 4096 to have another go STA cycleCount JSR SendBuffersToPPU ; Send the nametable and palette buffers to the PPU for ; bitplane X, as configured in the bitplane flags PLA ; Retrieve the bitplane number from the stack TAX LDA bitplaneFlags,X ; If bit 5 is set in the flags for bitplane X, then we AND #%00100000 ; have now sent all the data to the PPU for this BNE sdat2 ; bitplane, so jump to sdat2 to return from the ; subroutine ; Otherwise we still haven't sent all the data to the ; PPU, so we play the background music and repeat the ; above JSR MakeSoundsAtVBlank ; Wait for the next VBlank and make the current sounds ; (music and sound effects) JMP SendDataNowToPPU ; Loop back to keep sending data to the PPU .sdat1 PLA ; Retrieve the bitplane number from the stack TAX .sdat2 JMP MakeSoundsAtVBlank ; Wait for the next VBlank and make the current sounds ; (music and sound effects), returning from the ; subroutine using a tail call
Name: SetupViewInNMI [Show more] Type: Subroutine Category: Drawing the screen Summary: Setup the view and configure the NMI to send both bitplanes to the PPU during VBlank Deep dive: Views and view types in NES Elite
Context: See this subroutine on its own page References: This subroutine is called as follows: * SetupViewInNMI_b3 calls SetupViewInNMI

This routine is only ever called with the following bitplane flags in A: * Bit 2 clear = send tiles up to configured numbers * Bit 3 clear = don't clear buffers after sending * Bit 4 clear = we've not started sending data yet * Bit 5 clear = we have not yet sent all the data * Bit 6 set = send both pattern and nametable data * Bit 7 set = send data to the PPU Bits 0 and 1 are ignored and are always clear. This routine therefore configures the NMI to send both bitplanes to the PPU.
Arguments: A The bitplane flags to set for the drawing bitplane
.SetupViewInNMI PHA ; Store the bitplane flags on the stack so we can ; retrieve them later JSR WaitForPPUToFinish ; Wait until both bitplanes of the screen have been ; sent to the PPU, so the screen is fully updated and ; there is no more data waiting to be sent to the PPU LDA QQ11 ; If the view type in QQ11 is not $96 (Data on System), CMP #$96 ; jump to svin1 to keep checking for view types BNE svin1 ; If we get here then this is the Data on System screen JSR GetSystemBack_b5 ; Fetch the background image for the current system and ; store it in the pattern buffers JMP svin2 ; Jump to svin2 to continue setting up the view .svin1 CMP #$98 ; If the view type in QQ11 is not $98 (Status Mode), BNE svin2 ; jump to svin2 to keep checking for view types ; If we get here then this is the Status Mode screen JSR GetHeadshot_b4 ; Fetch the headshot image for the commander and store ; it in the pattern buffers, starting at pattern number ; picturePattern .svin2 LDA QQ11 ; If bit 6 of the view type is clear, then there is an AND #%01000000 ; icon bar, so jump to svin3 to skip the following BEQ svin3 ; instruction LDA #0 ; There is no icon bar, so set showUserInterface to 0 to STA showUserInterface ; indicate that there is no user interface .svin3 JSR SetupSprite0 ; Set the coordinates of sprite 0 so we can detect when ; the PPU starts to draw the icon bar LDA #0 ; Tell the NMI handler to send nametable entries from STA firstNameTile ; tile 0 onwards LDA #37 ; Tell the NMI handler to send pattern entries from STA firstPattern ; pattern 37 in the buffer LDA firstFreePattern ; Tell the NMI handler to send pattern entries up to the STA lastPattern ; first free pattern, for both bitplanes STA lastPattern+1 LDA #%01010100 ; This instruction has no effect as we are about to pull ; the value of A from the stack LDX #0 ; This instruction has no effect as the call to ; SetDrawPlaneFlags overwrites X with the value of the ; drawing bitplane, though this could be remnants of ; code to set the drawing bitplane to 0, as the ; following code depends on this being the case PLA ; Retrieve the bitplane flags that were passed to this ; routine and which we stored on the stack above JSR SetDrawPlaneFlags ; Set the bitplane flags to A for the current drawing ; bitplane, which must be bitplane 0 at this point ; (though it is not entirely obvious why this is the ; case) INC drawingBitplane ; Increment drawingBitplane to 1 JSR SetDrawPlaneFlags ; Set the bitplane flags to A for bitplane 1 JSR WaitForPPUToFinish ; Wait until both bitplanes of the screen have been ; sent to the PPU, so the screen is fully updated and ; there is no more data waiting to be sent to the PPU LDA #80 ; Tell the PPU to send nametable entries up to tile STA lastNameTile ; 80 * 8 = 640 (i.e. to the end of tile row 19) in both STA lastNameTile+1 ; bitplanes LDA QQ11 ; Set the old view type in QQ11a to the new view type STA QQ11a ; in QQ11, to denote that we have now changed view to ; the view in QQ11 LDA firstFreePattern ; Set clearingPattern for both bitplanes to the number STA clearingPattern ; of the first free pattern, so the NMI handler only STA clearingPattern+1 ; clears patterns from this point onwards ; ; This ensures that the tiles that have already been ; sent to the PPU above don't get cleared out by the NMI ; handler LDA #0 ; Set A = 0, though this has no effect as we don't use ; it LDX #0 ; Hide bitplane 0, so: STX hiddenBitplane ; ; * Colour %01 (1) is the hidden colour (black) ; * Colour %10 (2) is the visible colour (cyan) STX nmiBitplane ; Set nmiBitplane = 0 so bitplane 0 is the first to be ; sent in the NMI handler JSR SetDrawingBitplane ; Set the drawing bitplane to bitplane 0 LDA QQ11 ; If bit 6 of the view type is set, then there is no AND #%01000000 ; icon bar, so jump to svin4 to skip the following BNE svin4 ; instructions JSR WaitForNMI ; Wait until the next NMI interrupt has passed (i.e. the ; next VBlank) LDA #%10000000 ; Set bit 7 of showUserInterface to denote that there is STA showUserInterface ; a user interface .svin4 LDA screenFadedToBlack ; If bit 7 of screenFadedToBlack is clear then the BPL svin5 ; screen is visible and has not been faded to black, so ; jump to svin5 to update the screen without fading it JMP FadeToColour_b3 ; Reverse-fade the screen from black to full colour over ; the next four VBlanks, returning from the subroutine ; using a tail call .svin5 LDA QQ11 ; Set X to the new view type in the low nibble of QQ11 AND #%00001111 TAX LDA paletteForView,X ; Set A to the palette number used by the view from the CMP screenReset ; paletteForView table, compare it to screenReset, set STA screenReset ; the processor flags accordingly, and store the palette ; number in screenReset ; ; This has no effect, as screenReset is not read ; anywhere and neither the value of A nor the processor ; flags are used in the following JSR GetViewPalettes ; Get the palette for the view type in QQ11a and store ; it in a table at XX3 DEC updatePaletteInNMI ; Decrement updatePaletteInNMI to a non-zero value so we ; do send palette data from XX3 to the PPU during NMI, ; which will ensure the screen updates with the colours ; as we fade to black JSR WaitForNMI ; Wait until the next NMI interrupt has passed (i.e. the ; next VBlank) so we know the palette data has been sent ; to the PPU INC updatePaletteInNMI ; Increment updatePaletteInNMI back to the value it had ; before we decremented it above RTS ; Return from the subroutine
Name: paletteForView [Show more] Type: Variable Category: Drawing the screen Summary: Palette numbers for each view
Context: See this variable on its own page References: This variable is used as follows: * GetViewPalettes uses paletteForView * SetupViewInNMI uses paletteForView

These palette numbers refer to the palettes in the viewPalettes table.
.paletteForView EQUB 0 ; Space view EQUB 2 ; Title screen EQUB 10 ; Mission 1 briefing: rotating ship EQUB 10 ; Mission 1 briefing: ship and text EQUB 0 ; Game Over screen EQUB 10 ; Text-based mission briefing EQUB 6 ; Data on System EQUB 8 ; Inventory EQUB 8 ; Status Mode EQUB 5 ; Equip Ship EQUB 1 ; Market Price EQUB 7 ; Save and load EQUB 3 ; Short-range Chart EQUB 4 ; Long-range Chart EQUB 0 ; Unused EQUB 9 ; Start screen
Name: boxEdgeImages [Show more] Type: Variable Category: Drawing the screen Summary: Image data for patterns 0 to 4
Context: See this variable on its own page References: This variable is used as follows: * ResetScreen uses boxEdgeImages * SendViewToPPU uses boxEdgeImages

This table contains image data for patterns 0 to 4, which are as follows: * 0 is the blank tile (all black) * 1 contains a vertical bar down the right edge of the pattern (for the left box edge) * 2 contains a vertical bar down the left edge of the pattern (for the right box edge) * 3 contains a horizontal bar along the lower-middle of the pattern (for the top box edge) * 4 contains the first pattern for the top-left corner of the icon bar
.boxEdgeImages EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $03, $03, $03, $03 EQUB $03, $03, $03, $03 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $C0, $C0, $C0, $C0 EQUB $C0, $C0, $C0, $C0 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $FF EQUB $FF, $FF, $00, $00 EQUB $00, $00, $00, $00 EQUB $00, $00, $00, $00 EQUB $0F, $1F, $1F, $DF EQUB $DF, $BF, $BF, $BF
Name: ResetScreen [Show more] Type: Subroutine Category: Start and end Summary: Reset the screen by clearing down the PPU, setting all colours to black, and resetting the screen-related variables
Context: See this subroutine on its own page References: This subroutine is called as follows: * ResetScreen_b3 calls ResetScreen
.ResetScreen JSR WaitFor3xVBlank ; Wait for three VBlanks to pass LDA #HI(20*32) ; Set iconBarRow(1 0) = 20*32 STA iconBarRow+1 ; LDA #LO(20*32) ; So the icon bar is on row 20 STA iconBarRow ; We now want to set all the colours in all the palettes ; to black, to hide anything that's on-screen LDA #$3F ; Set PPU_ADDR = $3F00, so it points to the background STA PPU_ADDR ; colour palette entry in the PPU LDA #$00 STA PPU_ADDR LDA #$0F ; Set A to $0F, which is the HSV value for black LDX #31 ; There are 32 bytes in the background and sprite ; palettes in the PPU, so set a loop counter in X to ; count through them all .rscr1 STA PPU_DATA ; Send A to the PPU to set palette entry X to black DEX ; Decrement the loop counter BPL rscr1 ; Loop back until we have set all the palette entries to ; black ; We now want to reset both PPU nametables to show blank ; tiles (i.e. tile 0), so nothing is shown on-screen ; ; The two nametables and associated attribute tables are ; structured like this in the PPU: ; ; * PPU_NAME_0 ($2000 to $23BF) ; * PPU_ATTR_0 ($23C0 to $23FF) ; * PPU_NAME_1 ($2400 to $27BF) ; * PPU_ATTR_1 ($27C0 to $27FF) ; ; Each nametable/attribute table consists of 1024 bytes ; (i.e. four pages of 256 bytes), and because the tables ; are consecutive in PPU memory, we can zero the whole ; lot by sending eight pages of zeroes to the PPU, ; tarting at the start of nametable 0 at PPU_NAME_0 LDA #HI(PPU_NAME_0) ; Set PPU_ADDR to PPU_NAME_0, so it points to nametable STA PPU_ADDR ; 0 in the PPU LDA #LO(PPU_NAME_0) STA PPU_ADDR LDA #0 ; Set A = 0 so we can send it to the PPU to fill both ; PPU nametables with blank tiles LDX #8 ; We want to zero 8 pages of 256 bytes, so set a page ; counter in X LDY #0 ; Set Y as a byte counter to count through each of the ; 256 bytes in a page of memory .rscr2 STA PPU_DATA ; Zero the next entry in the nametable DEY ; Decrement the byte counter BNE rscr2 ; Loop back until we have zeroed a whole page JSR WaitFor3xVBlank ; Wait for three VBlanks to pass LDA #0 ; Set A = 0 again, as it gets changed by WaitFor3xVBlank DEX ; Decrement the page counter BNE rscr2 ; Loop back until we have zeroed 8 pages of nametable in ; the PPU LDA #245 ; Set screenReset = 245, though this is not used STA screenReset ; anywhere, so this has no effect on anything STA imageSentToPPU ; Set imageSentToPPU = 245 to denote that we have sent ; the inventory icon image to the PPU ; We now send patterns 0 to 4 to the PPU, to set up the ; blank tile (pattern 0), the three box edges (patterns ; 1 to 3) and the top-left corner of the icon bar ; (pattern 4) ; ; We do this for both pattern tables LDA #HI(PPU_PATT_0) ; Set PPU_ADDR to PPU_PATT_0, so it points to pattern STA PPU_ADDR ; table 0 in the PPU LDA #LO(PPU_PATT_0) STA PPU_ADDR LDY #0 ; Set Y to use as an index counter as we work through ; the boxEdgeImages table and send its data to the PPU LDX #80 ; The boxEdgeImages table contains five patterns with 16 ; bytes per pattern, so that's a total of 80 bytes to ; send to the PPU, so set X as a byte counter .rscr3 LDA boxEdgeImages,Y ; Send the Y-th entry from the boxEdgeImages table to STA PPU_DATA ; the PPU INY ; Increment the index into the boxEdgeImages table to ; point at the next byte DEX ; Decrement the byte counter BNE rscr3 ; Loop back until we have sent all 80 bytes to the PPU LDA #HI(PPU_PATT_1) ; Set PPU_ADDR to PPU_PATT_1, so it points to pattern STA PPU_ADDR ; table 1 in the PPU LDA #LO(PPU_PATT_1) STA PPU_ADDR LDY #0 ; Set Y to use as an index counter as we work through ; the boxEdgeImages table and send its data to the PPU LDX #80 ; The boxEdgeImages table contains five patterns with 16 ; bytes per pattern, so that's a total of 80 bytes to ; send to the PPU, so set X as a byte counter .rscr4 LDA boxEdgeImages,Y ; Send the Y-th entry from the boxEdgeImages table to STA PPU_DATA ; the PPU INY ; Increment the index into the boxEdgeImages table to ; point at the next byte DEX ; Decrement the byte counter BNE rscr4 ; Loop back until we have sent all 80 bytes to the PPU ; We now reset the sprite buffer by setting all 64 ; sprites as follows: ; ; * Set the coordinates to (0, 240), which is just ; below the bottom of the screen, so the sprite is ; hidden from view ; ; * Set the pattern number to 254 (this value seems to ; be arbitrary, but is possibly 254 so that sprite 0 ; keeps using pattern 254 throughout the reset) ; ; * Set the attributes so the sprite uses palette 3, ; is shown in front of the background, and is not ; flipped in either direction LDY #0 ; We are about to loop through the sprite buffer, so set ; a byte index in Y .rscr5 LDA #240 ; Set the y-coordinate for this sprite to 240, to move STA ySprite0,Y ; it off the bottom of the screen INY ; Increment Y to point to the second byte for this ; sprite, i.e. pattSprite0,Y LDA #254 ; Set the pattern number for this sprite to 254 STA ySprite0,Y INY ; Increment Y to point to the third byte for this ; sprite, i.e. attrSprite0,Y LDA #%00000011 ; Set the attributes for this sprite as follows: STA ySprite0,Y ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 clear = show in front of background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically INY ; Increment Y to point to the fourth byte for this ; sprite, i.e. xSprite0,Y LDA #0 ; Set the x-coordinate for this sprite to 0 STA ySprite0,Y INY ; Increment Y to point to the first byte for the next ; sprite BNE rscr5 JSR SendDashImageToPPU ; Unpack the dashboard image and send it to patterns 69 ; to 255 in pattern table 0 in the PPU ; We now set up sprite 0, which is used to detect when ; the PPU starts drawing the icon bar, so this places ; the sprite at the right side of the screen, just ; above the icon bar, so when the PPU gets to this part ; of the screen, it will set the sprite 0 collision flag ; which we can then detect LDA #157+YPAL ; Set sprite 0 as follows: STA ySprite0 ; LDA #254 ; * Set the coordinates to (248, 157) STA pattSprite0 ; LDA #248 ; * Set the pattern number to 254 STA xSprite0 ; LDA #%00100011 ; * Set the attributes as follows: STA attrSprite0 ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 set = show behind background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically ; We now set sprites 1 to 4 so they contain the four ; corners of the icon bar pointer: ; ; * Sprite 1 = top-left corner ; * Sprite 2 = top-right corner ; * Sprite 3 = bottom-left corner ; * Sprite 4 = bottom-right corner LDA #251 ; Set sprites 1 and 2 to use pattern 251 STA pattSprite1 STA pattSprite2 LDA #253 ; Set sprites 3 and 4 to use pattern 253 STA pattSprite3 STA pattSprite4 LDA #%00000011 ; Set the attributes for sprite 1 as follows: STA attrSprite1 ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 clear = show in front of background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically LDA #%01000011 ; Set the attributes for sprite 2 as follows: STA attrSprite2 ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 clear = show in front of background ; * Bit 6 set = flip horizontally ; * Bit 7 clear = do not flip vertically LDA #%01000011 ; Set the attributes for sprite 3 as follows: STA attrSprite3 ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 clear = show in front of background ; * Bit 6 set = flip horizontally ; * Bit 7 clear = do not flip vertically LDA #%00000011 ; Set the attributes for sprite 4 as follows: STA attrSprite4 ; ; * Bits 0-1 = sprite palette 3 ; * Bit 5 clear = show in front of background ; * Bit 6 clear = do not flip horizontally ; * Bit 7 clear = do not flip vertically JSR WaitFor3xVBlank ; Wait for three VBlanks to pass LDA #0 ; Write 0 to OAM_ADDR so we can use OAM_DMA to send STA OAM_ADDR ; sprite data to the PPU LDA #$02 ; Write $02 to OAM_DMA to upload 256 bytes of sprite STA OAM_DMA ; data from the sprite buffer at $02xx into the PPU LDA #0 ; Reset all the bitplanes to 0 STA nmiBitplane STA drawingBitplane STA hiddenBitplane LDA #HI(PPU_PATT_1) ; Set ppuPatternTableHi to the high byte of PPU pattern STA ppuPatternTableHi ; table 1, which is the table we use for drawing dynamic ; tiles LDA #0 ; Set nmiBitplane8 to 8 * nmiBitplane, which is 0 STA nmiBitplane8 LDA #HI(PPU_NAME_0) ; Set ppuNametableAddr(1 0) to the address of pattern STA ppuNametableAddr+1 ; table 0 in the PPU LDA #LO(PPU_NAME_0) STA ppuNametableAddr LDA #%00101000 ; Set both bitplane flags as follows: STA bitplaneFlags ; STA bitplaneFlags+1 ; * Bit 2 clear = send tiles up to configured numbers ; * Bit 3 set = clear buffers after sending data ; * Bit 4 clear = we've not started sending data yet ; * Bit 5 set = we have already sent all the data ; * Bit 6 clear = only send pattern data to the PPU ; * Bit 7 clear = do not send data to the PPU ; ; Bits 0 and 1 are ignored and are always clear ; ; The NMI handler will now start sending data to the PPU ; according to the above configuration, splitting the ; process across multiple VBlanks if necessary LDA #4 ; Set the number of the first and last tiles to send STA clearingPattern ; from the PPU to 4, which is the first tile after the STA clearingPattern+1 ; blank tile (tile 0) and the box edges (tiles 1 to 3), STA clearingNameTile ; which are the only fixed tiles in both bitplanes STA clearingNameTile+1 ; STA sendingPattern ; This ensures that both buffers are almost entirely STA sendingPattern+1 ; cleared out by the NMI, as we set bit 3 in the STA sendingNameTile ; bitplane flags above STA sendingNameTile+1 LDA #$0F ; Set the hidden and visible colours to $0F, which is STA hiddenColour ; the HSV value for black, and do the same for the STA visibleColour ; colours to use for palette entries 2 and 3 in the STA paletteColour2 ; non-space views STA paletteColour3 LDA #0 ; Configure the NMI handler not to send palette data to STA updatePaletteInNMI ; the PPU STA QQ11a ; Set the old view type in QQ11a to $00 (Space view with ; no fonts loaded) LDA #$FF ; Set bit 7 of screenFadedToBlack to indicate that we STA screenFadedToBlack ; have faded the screen to black JSR WaitFor3xVBlank ; Wait for three VBlanks to pass LDA #%10010000 ; Set A to use as the new value for PPU_CTRL below STA ppuCtrlCopy ; Store the new value of PPU_CTRL in ppuCtrlCopy so we ; can check its value without having to access the PPU STA PPU_CTRL ; Configure the PPU by setting PPU_CTRL as follows: ; ; * Bits 0-1 = base nametable address %00 ($2000) ; * Bit 2 clear = increment PPU_ADDR by 1 each time ; * Bit 3 clear = sprite pattern table is at $0000 ; * Bit 4 set = background pattern table is at $1000 ; * Bit 5 clear = sprites are 8x8 pixels ; * Bit 6 clear = use PPU 0 (the only option on a NES) ; * Bit 7 set = enable VBlank NMI generation RTS ; Return from the subroutine
Name: SetIconBarRow [Show more] Type: Subroutine Category: Icon bar Summary: Set the row on which the icon bar appears, which depends on the view type
Context: See this subroutine on its own page References: This subroutine is called as follows: * UpdateIconBar calls SetIconBarRow * ShowIconBar calls via RTS9

Other entry points: RTS9 Contains an RTS
.SetIconBarRow LDA QQ11 ; If the view type in QQ11 is not $BA (Market Price), CMP #$BA ; then jump to bpos2 to calculate the icon bar row BNE bpos2 LDA iconBarType ; If this is icon bar type 3 (Pause), jump to bpos1 to CMP #3 ; hide the Inventory icon before calculating the icon BEQ bpos1 ; bar row ; If we get here then this is the Market Price screen ; and the game is not paused, so we are showing the ; normal icon bar for this screen ; ; The Market Price screen uses the normal Docked or ; Flight icon bar, but with the second icon overwritten ; with the Inventory icon JSR DrawInventoryIcon ; Draw the inventory icon on top of the second button ; in the icon bar JMP bpos2 ; Jump to bpos2 to calculate the icon bar row .bpos1 ; If we get here then this is the Market Price screen ; and we are showing the pause options on the icon bar, ; so we need to hide the Inventory icon from the second ; button on the icon bar, so it doesn't overwrite the ; pause options ; ; The Inventory button is in sprites 8 to 11, so we now ; hide these sprites by moving them off-screen LDX #240 ; Hide sprites 8 to 11 by setting their y-coordinates to STX ySprite8 ; to 240, which is off the bottom of the screen STX ySprite9 STX ySprite10 STX ySprite11 .bpos2 LDA #HI(20*32) ; Set iconBarRow(1 0) = 20*32 STA iconBarRow+1 LDA #LO(20*32) STA iconBarRow LDA QQ11 ; If bit 7 of the view type in QQ11 is clear then there BPL RTS9 ; is a dashboard, so jump to RTS9 to keep this value of ; iconBarRow and return from the subroutine LDA #HI(27*32) ; Set iconBarRow(1 0) = 27*32 STA iconBarRow+1 ; LDA #LO(27*32) ; So the icon bar is on row 20 if bit 7 of the view STA iconBarRow ; number is clear (so there is a dashboard), and it's on ; row 27 is bit 7 is set (so there is no dashboard) .RTS9 RTS ; Return from the subroutine
Name: ShowIconBar [Show more] Type: Subroutine Category: Icon bar Summary: Show a specified icon bar on-screen Deep dive: Views and view types in NES Elite
Context: See this subroutine on its own page References: This subroutine is called as follows: * ShowIconBar_b3 calls ShowIconBar

Arguments: A The type of icon bar to show: * 0 = Docked * 1 = Flight * 2 = Charts * 3 = Pause * 4 = Title screen copyright message
.ShowIconBar TAY ; Copy the icon bar type into Y LDA QQ11 ; If bit 6 of the view type is set, then there is no AND #%01000000 ; icon bar on the screen, so jump to RTS9 to return BNE RTS9 ; from the subroutine as there is nothing to show STY iconBarType ; Set the type of the current icon bar in iconBarType to ; to the new type in Y JSR BlankAllButtons ; Blank all the buttons on the icon bar LDA #HI(20*32) ; Set iconBarRow(1 0) = 20*32 STA iconBarRow+1 LDA #LO(20*32) STA iconBarRow LDA QQ11 ; If bit 7 of the view type in QQ11 is clear then there BPL obar1 ; is a dashboard, so jump to obar1 to keep this value of ; iconBarRow LDA #HI(27*32) ; Set iconBarRow(1 0) = 27*32 STA iconBarRow+1 ; LDA #LO(27*32) ; So the icon bar is on row 20 if bit 7 of the view STA iconBarRow ; number is clear (so there is a dashboard), and it's on ; row 27 is bit 7 is set (so there is no dashboard) .obar1 LDA iconBarType ; Set iconBarImageHi to the high byte of the correct ASL A ; icon bar image block for the current icon bar type, ASL A ; which we can calculate like this: ADC #HI(iconBarImage0) ; STA iconBarImageHi ; HI(iconBarImage0) + 4 * iconBarType ; ; as each icon bar image block contains $0400 bytes, ; and iconBarType is the icon bar type, 0 to 4 LDX #0 ; Set barPatternCounter = 0 so the NMI handler sends the STX barPatternCounter ; icon bar's nametable and pattern data to the PPU .obar2 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA barPatternCounter ; Loop back to keep the PPU configured in this way until BPL obar2 ; barPatternCounter is set to 128 ; ; This happens when the NMI handler has finished sending ; all the icon bar's nametable and pattern data to ; the PPU, so this loop keeps the PPU configured to use ; nametable 0 and pattern table 0 until the icon bar ; nametable and pattern data have all been sent ; Fall through into UpdateIconBar to update the icon bar
Name: UpdateIconBar [Show more] Type: Subroutine Category: Icon bar Summary: Update the icon bar Deep dive: Views and view types in NES Elite
Context: See this subroutine on its own page References: This subroutine is called as follows: * UpdateIconBar_b3 calls UpdateIconBar
.UpdateIconBar LDA iconBarType ; Set A to the current icon bar type JSR SetupIconBar ; Set up the icon bar LDA QQ11 ; If bit 6 of the view type is set, then there is no AND #%01000000 ; icon bar on the screen, so jump to ubar2 to return BNE ubar2 ; from the subroutine as there is no icon bar to update JSR SetIconBarRow ; Set the row on which the icon bar appears, which ; depends on the view type LDA #%10000000 ; Set bit 7 of skipBarPatternsPPU, so the NMI handler STA skipBarPatternsPPU ; only sends the nametable entries and not the tile ; patterns ASL A ; Set barPatternCounter = 0, so the NMI handler sends STA barPatternCounter ; icon bar data to the PPU .ubar1 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA barPatternCounter ; Loop back to keep the PPU configured in this way until BPL ubar1 ; barPatternCounter is set to 128 ; ; This happens when the NMI handler has finished sending ; all the icon bar's nametable entries to the PPU, so ; this loop keeps the PPU configured to use nametable 0 ; and pattern table 0 until the icon bar nametable ; entries have been sent ASL skipBarPatternsPPU ; Set skipBarPatternsPPU = 0, so the NMI handler goes ; back to sending both nametable entries and tile ; patterns for the icon bar (when barPatternCounter is ; non-zero) .ubar2 RTS ; Return from the subroutine
Name: SetupSprite0 [Show more] Type: Subroutine Category: PPU Summary: Set the coordinates of sprite 0 so we can detect when the PPU starts to draw the icon bar
Context: See this subroutine on its own page References: This subroutine is called as follows: * SendViewToPPU calls SetupSprite0 * SetupViewInNMI calls SetupSprite0
.SetupSprite0 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA #248 ; Set the x-coordinate of sprite 0 to 248 STA xSprite0 ; We now set X and Y depending on the type of view, as ; follows: ; ; * X is the pixel y-coordinate of sprite 0, which is ; positioned just above the icon bar ; ; * Y is the row containing the top part of the icon ; bar pointer LDY #18 ; Set Y = 18 LDX #157+YPAL ; Set X = 157 LDA QQ11 ; If bit 7 of the view type in QQ11 is clear then there BPL sets4 ; is a dashboard, so jump to sets4 with X = 157 and ; Y = 18 CMP #$C4 ; If the view type in QQ11 is not $C4 (Game Over screen) BNE sets1 ; then jump to sets1 to keep checking the view type LDX #240 ; This is the Game Over screen, so jump to sets 4 with BNE sets4 ; X = 240 and Y = 18 (this BNE is effectively a JMP as ; X is never zero) .sets1 LDY #25 ; Set Y = 25 LDX #213+YPAL ; Set X = 213 CMP #$B9 ; If the view type in QQ11 is not $B9 (Equip Ship) then BNE sets2 ; jump to sets2 to keep checking the view type LDX #150+YPAL ; This is the Equip Ship screen, so set X = 150 LDA #248 ; Set the x-coordinate of sprite 0 to 248 (though we STA xSprite0 ; already did this above, so perhaps this is left over ; code from development) .sets2 LDA QQ11 ; If the view type in QQ11 is not $xF (the Start screen AND #$0F ; in any of its font configurations), jump to sets3 to CMP #$0F ; keep checking the view type BNE sets3 LDX #166+YPAL ; This is the Start screen, so set X = 166 .sets3 CMP #$0D ; If the view type in QQ11 is not $xD (the Long-range or BNE sets4 ; Short-range Chart), jump to sets4 to use the current ; values of X and Y LDX #173+YPAL ; This is a chart screen, so set X = 173 LDA #248 ; Set the x-coordinate of sprite 0 to 248 (though we STA xSprite0 ; already did this above, so perhaps this is left over ; code from development) .sets4 ; We get here with X and Y set as follows: ; ; * X = 157, Y = 18 if there is a dashboard ; * X = 240, Y = 18 if this is the Game Over screen ; * X = 150, Y = 25 if this is the Equip Ship screen ; * X = 166, Y = 25 if this is the Start screen ; * X = 173, Y = 25 if this is a chart screen ; * X = 213, Y = 25 otherwise ; ; In all cases the x-coordinate of sprite 0 is 248 STX ySprite0 ; Set the y-coordinate of sprite 0 to X ; ; This means that sprite 0 is at these coordinates: ; ; * (248, 157) if there is a dashboard ; * (248, 240) if this is the Game Over screen ; * (248, 150) if this is the Equip Ship screen ; * (248, 166) if this is the Start screen ; * (248, 173) if this is a chart screen ; * (248, 213) otherwise TYA ; Set the y-coordinate of the icon bar pointer in SEC ; yIconBarPointer to Y * 8 + %100, which is either ROL A ; 148 or 204 (when Y is 18 or 25) ASL A ; ASL A ; This means the icon bar pointer is at y-coordinate STA yIconBarPointer ; 148 when there is a dashboard or this is the Game Over ; screen, and it's at y-coordinate 204 otherwise LDA iconBarType ; Set iconBarImageHi to the high byte of the correct ASL A ; icon bar image block for the current icon bar type, ASL A ; which we can calculate like this: ADC #HI(iconBarImage0) ; STA iconBarImageHi ; HI(iconBarImage0) + 4 * iconBarType ; ; as each icon bar image block contains $0400 bytes, ; and iconBarType is the icon bar type, 0 to 4 LDA QQ11 ; If bit 6 of the view type is set, then there is no AND #%01000000 ; icon bar, so jump to sets5 to skip the following BNE sets5 ; instruction LDX #0 ; If we get here then there is an icon bar, so set STX barPatternCounter ; barPatternCounter = 0 so the NMI handler sends the ; icon bar's nametable and pattern data to the PPU .sets5 RTS ; Return from the subroutine
Name: BlankAllButtons [Show more] Type: Subroutine Category: Icon bar Summary: Blank all the buttons on the icon bar
Context: See this subroutine on its own page References: This subroutine is called as follows: * ShowIconBar calls BlankAllButtons
.BlankAllButtons JSR DrawIconBar ; Draw the icon bar into the nametable buffers for both ; bitplanes ; ; This also sets the following variables, which we pass ; to the following routines: ; ; * SC(1 0) is the address of the nametable entries ; for the on-screen icon bar in nametable buffer 0 ; ; * SC2(1 0) is the address of the nametable entries ; for the on-screen icon bar in nametable buffer 1 LDY #2 ; Blank the first button on the icon bar JSR DrawBlankButton2x2 LDY #4 ; Blank the second button on the icon bar JSR DrawBlankButton3x2 LDY #7 ; Blank the third button on the icon bar JSR DrawBlankButton2x2 LDY #9 ; Blank the fourth button on the icon bar JSR DrawBlankButton3x2 LDY #12 ; Blank the fifth button on the icon bar JSR DrawBlankButton2x2 LDY #29 ; Blank the twelfth button on the icon bar JSR DrawBlankButton3x2
Name: BlankButtons6To11 [Show more] Type: Subroutine Category: Icon bar Summary: Blank from the sixth to the eleventh button on the icon bar
Context: See this subroutine on its own page References: This subroutine is called as follows: * SetupIconBarPause calls BlankButtons6To11
.BlankButtons6To11 LDY #14 ; Blank the sixth button on the icon bar JSR DrawBlankButton3x2 LDY #17 ; Blank the seventh button on the icon bar JSR DrawBlankButton2x2
Name: BlankButtons8To11 [Show more] Type: Subroutine Category: Icon bar Summary: Blank from the eighth to the eleventh button on the icon bar
Context: See this subroutine on its own page References: This subroutine is called as follows: * SetupIconBarCharts calls BlankButtons8To11 * SetupIconBarFlight calls BlankButtons8To11
.BlankButtons8To11 LDY #19 ; Blank the eighth button on the icon bar JSR DrawBlankButton3x2 LDY #22 ; Blank the ninth button on the icon bar JSR DrawBlankButton2x2 LDY #24 ; Blank the tenth button on the icon bar JSR DrawBlankButton3x2 LDY #27 ; Blank the eleventh button on the icon bar and return JMP DrawBlankButton2x2 ; from the subroutine using a tail call
Name: DrawIconBar [Show more] Type: Subroutine Category: Icon bar Summary: Draw the icon bar into the nametable buffers for both bitplanes
Context: See this subroutine on its own page References: This subroutine is called as follows: * BlankAllButtons calls DrawIconBar * SetupIconBar calls DrawIconBar

Returns: SC(1 0) The address of the nametable entries for the on-screen icon bar in nametable buffer 0 SC2(1 0) The address of the nametable entries for the on-screen icon bar in nametable buffer 1
.DrawIconBar ; We start by setting V(1 0) to the address of the ; barNames table that corresponds to the current icon ; bar type (i.e. barNames0 to barNames4) ; ; This contains the nametable entries we need to put in ; the nametable buffer to show this icon bar type on ; the screen LDA iconBarType ; Set (C Y) = iconBarType << 6 ASL A ; = iconBarType * 64 ASL A ASL A ASL A ASL A ASL A TAY BNE dbar1 ; If Y is non-zero (i.e. iconBarType = 1 to 3), jump to ; dbar1 to set A = HI(barNames0) LDA #HI(barNames0)-1 ; Otherwise Y is zero (i.e. iconBarType = 0 or 4) so set BNE dbar2 ; A = HI(barNames0) - 1 and jump to dbar2 to skip the ; following (this BNE is effectively a JMP as A is never ; zero) .dbar1 LDA #HI(barNames0) ; Set A = HI(barNames0) for when iconBarType = 1 to 3 .dbar2 ; When we get here, we have A set as follows: ; ; * HI(barNames0) - 1 when iconBarType = 0 or 4 ; ; * HI(barNames0) when iconBarType = 1 to 3 DEY ; Decrement Y, so Y is now: ; ; * $FF when iconBarType = 0 or 4 ; ; * iconBarType * 64 - 1 when iconBarType = 1 to 3 STY V ; Set V(1 0) = (A 0) + (C 0) + Y ADC #0 ; STA V+1 ; So this sets V(1 0) to the following: ; ; * When iconBarType = 0: ; ; (HI(barNames0)-1 0) + (0 0) + $FF ; (HI(barNames0)-1 0) + $FF ; = (HI(barNames0)-1 0) + (1 0) - 1 ; = (HI(barNames0) 0) - 1 ; = (HI(barNames0) 0) + iconBarType * 64 - 1 ; ; * When iconBarType = 1 to 3 ; ; (HI(barNames0) 0) + (0 0) + iconBarType * 64 - 1 ; = (HI(barNames0) 0) + iconBarType * 64 - 1 ; ; * When iconBarType = 4 ; ; (HI(barNames0-1 0) + (1 0) + $FF ; = (HI(barNames0-1 0) + (1 0) + (1 0) - 1 ; = (HI(barNames0) 0) + (1 0) - 1 ; = (HI(barNames0) 0) + 4 * 64 - 1 ; = (HI(barNames0) 0) + iconBarType * 64 - 1 ; ; In other words, V(1 0) is as follows, for all the icon ; bar types: ; ; V(1 0) = (HI(barNames0) 0) + iconBarType * 64 - 1 ; ; and because barNames0 is on a page boundary, we know ; that LO(barNames0) = 0, so: ; ; (HI(barNames0) 0) = (HI(barNames0) LO(barNames0)) ; = barNames0(1 0) ; ; So we have: ; ; V(1 0) = barNames0(1 0) + iconBarType * 64 - 1 ; ; barNames0 through barNames4 each contain 64 bytes, for ; the two rows of 32 tiles that make up the icon bar, ; and they are one after the other in memory, so V(1 0) ; therefore contains the address of the relevant table ; for the current icon bar's nametable entries (i.e. ; barNames0 to barNames4), minus 1 ; ; Let's refer to the relevant table from barNames0 to ; barNames4 as barNames, to make things simpler, so we ; have the following: ; ; V(1 0) = barNames - 1 ; Next, we set SC(1 0) and SC2(1 0) to the addresses in ; the two nametable buffers for the icon bar, so we can ; write the nametable entries there to draw the icon bar ; on-screen LDA QQ11 ; If bit 7 of the view type in QQ11 is set then there BMI dbar3 ; is no dashboard and the icon bar is at the bottom of ; the screen, so jump to dbar3 to set SC(1 0) and ; SC2(1 0) accordingly LDA #HI(nameBuffer0+20*32) ; Set SC(1 0) to the address of the first tile on STA SC+1 ; tile row 20 in nametable buffer 0 LDA #LO(nameBuffer0+20*32) STA SC LDA #HI(nameBuffer1+20*32) ; Set SC2(1 0) to the address of the first tile on STA SC2+1 ; tile row 20 in nametable buffer 1 LDA #LO(nameBuffer1+20*32) STA SC2 JMP dbar4 ; Jump to dbar4 to skip the following .dbar3 LDA #HI(nameBuffer0+27*32) ; Set SC(1 0) to the address of the first tile on STA SC+1 ; tile row 27 in nametable buffer 0 LDA #LO(nameBuffer0+27*32) STA SC LDA #HI(nameBuffer1+27*32) ; Set SC2(1 0) to the address of the first tile on STA SC2+1 ; tile row 27 in nametable buffer 1 LDA #LO(nameBuffer1+27*32) STA SC2 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 .dbar4 ; By this point, we have the following: ; ; * V(1 0) is the address of the icon bar's nametable ; table (from barNames0 to barNames4), minus 1, ; i.e. V(1 0) = barNames - 1 ; ; * SC(1 0) is the address of the nametable entries ; for the on-screen icon bar in nametable buffer 0 ; ; * SC2(1 0) is the address of the nametable entries ; for the on-screen icon bar in nametable buffer 1 ; ; So to draw the icon bar on-screen, we need to copy the ; nametable entries from V(1 0) to both SC(1 0) and ; SC2(1 0) LDY #63 ; Set Y as an index, which will count down from 63 to 1, ; so we copy bytes 0 to 62 in V(1 0) to bytes 1 to 63 ; in the nametable buffers ; ; We do this in two stages purely so we can clip in a ; call to the SETUP_PPU_FOR_ICON_BAR macro .dbar5 LDA (V),Y ; Copy the Y-th nametable entry from V(1 0) to SC(1 0) STA (SC),Y STA (SC2),Y ; Copy the Y-th nametable entry from V(1 0) to SC2(1 0) DEY ; Decrement the index counter CPY #33 ; Loop back until we have done Y = 63 to 34 BNE dbar5 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 .dbar6 LDA (V),Y ; Copy the Y-th nametable entry from V(1 0) to SC(1 0) STA (SC),Y STA (SC2),Y ; Copy the Y-th nametable entry from V(1 0) to SC2(1 0) DEY ; Decrement the index counter BNE dbar6 ; Loop back until we have done Y = 33 to 1 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 ; By this point we have copied bytes 0 to 62 in V(1 0) ; to bytes 1 to 63 in the nametable buffers, and because ; V(1 0) = barNames - 1, this means we have copied ; bytes 1 to 63 from the relevant barNames table to the ; nametable buffers ; ; This covers almost all of the two rows of 3 characters ; that make up the icon bar, but it is one short, as we ; aren't done yet ; ; Because the horizontal scroll in PPU_SCROLL is set to ; 8, the leftmost tile on each row is scrolled around to ; the right side, which means that in terms of tiles, ; column 1 is the left edge of the screen, then columns ; 2 to 31 form the body of the screen, and column 0 is ; the right edge of the screen ; ; We therefore have to fix the tiles that appear at the ; end of each row, i.e. column 0 on row 0 (for the end ; of the top row of the icon bar) and column 0 on row 1 ; (for the end of the bottom row of the icon bar) LDY #32 ; Copy byte 32 from V(1 0), i.e. byte 31 of barNames, LDA (V),Y ; to byte 0 of SC(1 0) and SC2(1 0), which moves the LDY #0 ; tile at the end of the first row of the icon bar into STA (SC),Y ; column 0 on row 0 (for the end of the top row of the STA (SC2),Y ; icon bar on-screen) LDY #64 ; Copy byte 64 from V(1 0), i.e. byte 63 of barNames, LDA (V),Y ; to byte 32 of SC(1 0) and SC2(1 0), which moves the LDY #32 ; tile at the end of the second row of the icon bar into STA (SC),Y ; column 0 on row 1 (for the end of the bottom row of STA (SC2),Y ; the icon bar on-screen) RTS ; Return from the subroutine