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 in this file 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://elite.bbcelite.com/terminology The deep dive articles referred to in this commentary can be found at https://elite.bbcelite.com/deep_dives
This source file contains the game code for ROM bank 3 of NES Elite.
This source file produces the following binary file: * bank3.binORG CODE%ELITE BANK 3 Produces the binary file bank1.bin..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 gameName: 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 banksContext: 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..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 ENDIFName: Interrupts_b3 [Show more] Type: Subroutine Category: Start and end Summary: The IRQ and NMI handler while the MMC1 mapper reset routine is still runningContext: See this subroutine on its own page References: This subroutine is called as follows: * Vectors_b3 calls Interrupts_b3IF _NTSC EQUS " 5.0" ELIF _PAL EQUS "<2.8>" ENDIFName: versionNumber_b3 [Show more] Type: Variable Category: Text Summary: The game's version number in bank 3Context: See this variable on its own page References: No direct references to this variable in this source fileIF _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, $FFName: Copyright and version message [Show more] Type: Variable Category: Text Summary: A copyright and version message buried in the codeContext: See this variable on its own page References: No direct references to this variable in this source file.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, $00Name: 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://elite.bbcelite.com/images/source/nes/iconBarImage0_ppu.png and you can see what the Docked icon bar looks like on-screen here: https://elite.bbcelite.com/images/nes/general/data_on_lave.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, $00Name: 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://elite.bbcelite.com/images/source/nes/iconBarImage0_ppu.png and you can see what the Flight icon bar looks like on-screen here: https://elite.bbcelite.com/images/nes/general/station.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, $00Name: 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://elite.bbcelite.com/images/source/nes/iconBarImage2_ppu.png and you can see what the Charts icon bar looks like on-screen here: https://elite.bbcelite.com/images/nes/general/short_range_chart.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, $00Name: 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://elite.bbcelite.com/images/source/nes/iconBarImage3_ppu.png and you can see what the Pause icon bar looks like on-screen here: https://elite.bbcelite.com/images/nes/general/pause_icon_bar.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, $00Name: 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://elite.bbcelite.com/images/source/nes/iconBarImage4_ppu.png and you can see what the copyright message looks like on-screen here: https://elite.bbcelite.com/images/nes/general/title.png.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, $29Name: 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.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, $29Name: 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.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, $29Name: 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.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, $29Name: 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.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, $2AName: 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.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, $00Name: dashNames [Show more] Type: Variable Category: Dashboard Summary: Nametable entries for the dashboardContext: See this variable on its own page References: This variable is used as follows: * DrawDashNames uses dashNames.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 $3FName: 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 EliteContext: 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://elite.bbcelite.com/images/source/nes/dashImage_ppu.png and you can see what the dashboard looks like on-screen here: https://elite.bbcelite.com/images/nes/general/dashboard.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, $3FName: 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 compressionContext: 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://elite.bbcelite.com/images/source/nes/cobraImage_ppu.png and you can see what the Cobra Mk III looks like on-screen here: https://elite.bbcelite.com/images/nes/general/equipment.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, $00Name: inventoryIcon [Show more] Type: Variable Category: Equipment Summary: Image data for the inventory icon shown on the icon bar in the Market Price screenContext: 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://elite.bbcelite.com/images/source/nes/inventoryIcon_ppu.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, $3FName: 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 compressionContext: 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://elite.bbcelite.com/images/source/nes/smallLogoImage_ppu.png and you can see what the small logo looks like on-screen here: https://elite.bbcelite.com/images/nes/general/save_and_load.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, $3FName: 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 compressionContext: 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://elite.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://elite.bbcelite.com/images/nes/general/start.png.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 subroutineName: DrawDashNames [Show more] Type: Subroutine Category: Dashboard Summary: Draw the dashboard into both the nametable buffersContext: See this subroutine on its own page References: This subroutine is called as follows: * DrawDashNames_b3 calls DrawDashNames.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 subroutineName: ResetScanner [Show more] Type: Subroutine Category: Dashboard Summary: Reset the sprites used for drawing ships on the scannerContext: See this subroutine on its own page References: This subroutine is called as follows: * ResetScanner_b3 calls ResetScanner.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 callName: 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 EliteContext: See this subroutine on its own page References: This subroutine is called as follows: * SendViewToPPU_b3 calls SendViewToPPU.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 subroutineName: 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.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 callName: 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 EliteContext: See this subroutine on its own page References: This subroutine is called as follows: * ResetScreen calls SendDashImageToPPU * SendViewToPPU calls SendDashImageToPPU.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 subroutineName: SendBitplaneToPPU [Show more] Type: Subroutine Category: PPU Summary: Send a bitplane to the PPU immediately Deep dive: Views and view types in NES EliteContext: 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.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 callName: SendDataNowToPPU [Show more] Type: Subroutine Category: PPU Summary: Send the specified bitplane buffers to the PPU immediately, without trying to squeeze it into VBlanksContext: 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.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 subroutineName: 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 EliteContext: 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.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 screenName: paletteForView [Show more] Type: Variable Category: Drawing the screen Summary: Palette numbers for each viewContext: 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..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, $BFName: boxEdgeImages [Show more] Type: Variable Category: Drawing the screen Summary: Image data for patterns 0 to 4Context: 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.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 subroutineName: 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 variablesContext: See this subroutine on its own page References: This subroutine is called as follows: * ResetScreen_b3 calls ResetScreen.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 subroutineName: SetIconBarRow [Show more] Type: Subroutine Category: Icon bar Summary: Set the row on which the icon bar appears, which depends on the view typeContext: 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.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 barName: ShowIconBar [Show more] Type: Subroutine Category: Icon bar Summary: Show a specified icon bar on-screen Deep dive: Views and view types in NES EliteContext: 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.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 subroutineName: UpdateIconBar [Show more] Type: Subroutine Category: Icon bar Summary: Update the icon bar Deep dive: Views and view types in NES EliteContext: See this subroutine on its own page References: This subroutine is called as follows: * UpdateIconBar_b3 calls UpdateIconBar.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 subroutineName: 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 barContext: See this subroutine on its own page References: This subroutine is called as follows: * SendViewToPPU calls SetupSprite0 * SetupViewInNMI calls SetupSprite0.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 DrawBlankButton3x2Name: BlankAllButtons [Show more] Type: Subroutine Category: Icon bar Summary: Blank all the buttons on the icon barContext: See this subroutine on its own page References: This subroutine is called as follows: * ShowIconBar calls BlankAllButtons.BlankButtons6To11 LDY #14 ; Blank the sixth button on the icon bar JSR DrawBlankButton3x2 LDY #17 ; Blank the seventh button on the icon bar JSR DrawBlankButton2x2Name: BlankButtons6To11 [Show more] Type: Subroutine Category: Icon bar Summary: Blank from the sixth to the eleventh button on the icon barContext: See this subroutine on its own page References: This subroutine is called as follows: * SetupIconBarPause calls BlankButtons6To11.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 callName: BlankButtons8To11 [Show more] Type: Subroutine Category: Icon bar Summary: Blank from the eighth to the eleventh button on the icon barContext: See this subroutine on its own page References: This subroutine is called as follows: * SetupIconBarCharts calls BlankButtons8To11 * SetupIconBarFlight calls BlankButtons8To11.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 subroutineName: DrawIconBar [Show more] Type: Subroutine Category: Icon bar Summary: Draw the icon bar into the nametable buffers for both bitplanesContext: 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
[X]
Subroutine BEGIN (category: Start and end)
Run through the NES initialisation process, reset the variables and start the game
[X]
Subroutine BlankAllButtons (category: Icon bar)
Blank all the buttons on the icon bar
[X]
Subroutine DrawBlankButton2x2 (category: Icon bar)
Draw a blank icon bar button as a 2x2 tile block
[X]
Subroutine DrawBlankButton3x2 (category: Icon bar)
Draw a blank icon bar button as a 3x2 tile block
[X]
Subroutine DrawIconBar (category: Icon bar)
Draw the icon bar into the nametable buffers for both bitplanes
[X]
Subroutine DrawInventoryIcon (category: Icon bar)
Draw the inventory icon on top of the second button in the icon bar
[X]
Subroutine FadeToColour_b3 (category: Drawing the screen)
Call the FadeToColour routine in ROM bank 3
[X]
Subroutine GetCmdrImage_b4 (category: Status)
Call the GetCmdrImage routine in ROM bank 4
[X]
Subroutine GetHeadshot_b4 (category: Status)
Call the GetHeadshot routine in ROM bank 4
[X]
Subroutine GetSystemBack_b5 (category: Universe)
Call the GetSystemBack routine in ROM bank 5
[X]
Subroutine GetSystemImage_b5 (category: Universe)
Call the GetSystemImage routine in ROM bank 5
[X]
Subroutine GetViewPalettes (category: Drawing the screen)
Get the palette for the view type in QQ11a and store it in a table at XX3
[X]
Subroutine MakeSoundsAtVBlank (category: Sound)
Wait for the next VBlank and make the current sounds (music and sound effects)
[X]
Configuration variable OAM_ADDR
The OAM address port (this is not used in Elite)
[X]
Configuration variable OAM_DMA
The OAM DMA register, which is used to initiate a DMA transfer of sprite data to the PPU
[X]
Configuration variable PPU_ADDR
The PPU address register, which is used to set the destination address within the PPU when sending data to the PPU
[X]
Configuration variable PPU_CTRL
The PPU control register, which allows us to choose which nametable and pattern table is being displayed, and to toggle the NMI interrupt at VBlank
[X]
Configuration variable PPU_DATA
The PPU data register, which is used to send data to the PPU, to the address specified in PPU_ADDR
[X]
Configuration variable PPU_MASK
The PPU mask register, which controls how sprites and the tile background are displayed
[X]
Configuration variable PPU_NAME_0
The address of nametable 0 in the PPU
[X]
Configuration variable PPU_PATT_0
The address of pattern table 0 in the PPU
[X]
Configuration variable PPU_PATT_1
The address of pattern table 1 in the PPU
[X]
Entry point RTS9 in subroutine SetIconBarRow (category: Icon bar)
Contains an RTS
[X]
Macro SETUP_PPU_FOR_ICON_BAR (category: PPU)
If the PPU has started drawing the icon bar, configure the PPU to use nametable 0 and pattern table 0
[X]
Subroutine SendBitplaneToPPU (category: PPU)
Send a bitplane to the PPU immediately
[X]
Subroutine SendBuffersToPPU (Part 1 of 3) (category: PPU)
Send the icon bar nametable and palette data to the PPU, if it has changed, before moving on to tile data in part 2
[X]
Subroutine SendDashImageToPPU (category: PPU)
Unpack the dashboard image and send it to patterns 69 to 255 in pattern table 0 in the PPU
[X]
Subroutine SendDataNowToPPU (category: PPU)
Send the specified bitplane buffers to the PPU immediately, without trying to squeeze it into VBlanks
[X]
Subroutine SendFontImageToPPU (category: PPU)
Send a font to the PPU as a colour 1 font on a colour 0 background (i.e. colour 1 on black)
[X]
Subroutine SendInventoryToPPU (category: PPU)
Send X batches of 16 bytes from SC(1 0) to the PPU, for sending the inventory icon bar image
[X]
Subroutine SetDrawPlaneFlags (category: Drawing the screen)
Set the drawing bitplane flags to the specified value, draw the box edges and set the next free tile number
[X]
Subroutine SetDrawingBitplane (category: Drawing the screen)
Set the drawing bitplane to a specified value
[X]
Subroutine SetIconBarRow (category: Icon bar)
Set the row on which the icon bar appears, which depends on the view type
[X]
Subroutine SetupIconBar (category: Icon bar)
Set up the icons on the icon bar to show all available options
[X]
Subroutine SetupSprite0 (category: PPU)
Set the coordinates of sprite 0 so we can detect when the PPU starts to draw the icon bar
[X]
Subroutine UnpackToPPU (category: Utility routines)
Unpack compressed image data and send it to the PPU
[X]
Subroutine WaitFor3xVBlank (category: Utility routines)
Wait for three VBlanks to pass
[X]
Subroutine WaitForNMI (category: Utility routines)
Wait until the next NMI interrupt has passed (i.e. the next VBlank)
[X]
Subroutine WaitForPPUToFinish (category: PPU)
Wait until the NMI handler has finished updating both bitplanes, so the screen is no longer refreshing
[X]
Configuration variable YPAL
A margin of 6 pixels that is applied to a number of y-coordinates for the PAL version only (as the PAL version has a taller screen than NTSC)
[X]
Variable asciiToPattern in workspace ZP
The number to add to an ASCII code to get the pattern number in the PPU of the corresponding character image
[X]
Variable attrSprite0 in workspace Sprite buffer
Attributes for sprite 0
[X]
Variable attrSprite1 in workspace Sprite buffer
Attributes for sprite 1
[X]
Variable attrSprite11 in workspace Sprite buffer
Attributes for sprite 11
[X]
Variable attrSprite12 in workspace Sprite buffer
Attributes for sprite 12
[X]
Variable attrSprite13 in workspace Sprite buffer
Attributes for sprite 13
[X]
Variable attrSprite2 in workspace Sprite buffer
Attributes for sprite 2
[X]
Variable attrSprite3 in workspace Sprite buffer
Attributes for sprite 3
[X]
Variable attrSprite4 in workspace Sprite buffer
Attributes for sprite 4
[X]
Variable barNames0 (category: Icon bar)
Nametable entries for icon bar 0 (Docked)
[X]
Variable barPatternCounter in workspace ZP
The number of icon bar nametable and pattern entries that need to be sent to the PPU in the NMI handler
[X]
Variable bitplaneFlags in workspace WP
Flags for bitplane 0 that control the sending of data for this bitplane to the PPU during VBlank in the NMI handler
[X]
Variable boxEdgeImages (category: Drawing the screen)
Image data for patterns 0 to 4
[X]
Label bpos1 in subroutine SetIconBarRow
[X]
Label bpos2 in subroutine SetIconBarRow
[X]
Variable clearingNameTile in workspace ZP
The number of the first tile to clear in nametable buffer 0 when the NMI handler clears tiles, divided by 8
[X]
Variable clearingPattern in workspace ZP
The number of the first pattern to clear in pattern buffer 0 when the NMI handler clears patterns
[X]
Variable cobraImage (category: Equipment)
Packed image data for the Cobra Mk III shown on the Equip Ship screen
[X]
Variable cycleCount in workspace ZP
Counts the number of CPU cycles left in the current VBlank in the NMI handler
[X]
Variable dashImage (category: Dashboard)
Packed image data for the dashboard
[X]
Variable dashNames (category: Dashboard)
Nametable entries for the dashboard
[X]
Label dbar1 in subroutine DrawIconBar
[X]
Label dbar2 in subroutine DrawIconBar
[X]
Label dbar3 in subroutine DrawIconBar
[X]
Label dbar4 in subroutine DrawIconBar
[X]
Label dbar5 in subroutine DrawIconBar
[X]
Label dbar6 in subroutine DrawIconBar
[X]
Label ddsh1 in subroutine DrawDashNames
[X]
Variable drawingBitplane in workspace ZP
Flipped manually by calling FlipDrawingPlane, controls whether we are showing nametable/palette buffer 0 or 1
[X]
Variable firstFreePattern in workspace ZP
Contains the number of the first free pattern in the pattern buffer that we can draw into next (or 0 if there are no free patterns)
[X]
Variable firstNameTile in workspace ZP
The number of the first tile for which we send nametable data to the PPU in the NMI handler (potentially for both bitplanes, if both are configured to be sent)
[X]
Variable firstPattern in workspace ZP
The number of the first pattern for which we send data to the PPU in the NMI handler (potentially for both bitplanes, if both are configured to be sent)
[X]
Variable fontImage (category: Text)
Image data for the text font
[X]
Variable iconBarImage0 (category: Icon bar)
Image data for icon bar 0 (Docked)
[X]
Variable iconBarImageHi in workspace ZP
Contains the high byte of the address of the image data for the current icon bar, i.e. HI(iconBarImage0) through to HI(iconBarImage4)
[X]
Variable iconBarRow in workspace ZP
The row on which the icon bar appears
[X]
Variable iconBarType in workspace WP
The type of the current icon bar
[X]
Variable imageSentToPPU in workspace WP
Records when images have been sent to the PPU or unpacked into the buffers, so we don't repeat the process unnecessarily
[X]
Variable inventoryIcon (category: Equipment)
Image data for the inventory icon shown on the icon bar in the Market Price screen
[X]
Variable lastNameTile in workspace ZP
The number of the last nametable buffer entry to send to the PPU nametable table in the NMI handler for bitplane 0, divided by 8
[X]
Variable lastPattern in workspace ZP
The number of the last pattern entry to send from pattern buffer 0 to bitplane 0 of the PPU pattern table in the NMI handler
[X]
Variable logoBallImage (category: Start and end)
Packed image data for the ball at the bottom of the big Elite logo shown on the Start screen
[X]
Variable nameBuffer0 in workspace Cartridge WRAM
The buffer for nametable 0 that gets sent to the PPU during VBlank
[X]
Variable nameBuffer1 in workspace Cartridge WRAM
The buffer for nametable 1 that gets sent to the PPU during VBlank
[X]
Variable nmiBitplane in workspace ZP
The number of the bitplane (0 or 1) that is currently being processed in the NMI handler during VBlank
[X]
Variable nmiBitplane8 in workspace ZP
Used when sending patterns to the PPU to calculate the address offset of bitplanes 0 and 1
[X]
Label obar1 in subroutine ShowIconBar
[X]
Label obar2 in subroutine ShowIconBar
[X]
Variable paletteColour2 in workspace ZP
Contains the colour to use for palette entry 2 in the current (non-space) view
[X]
Variable paletteColour3 in workspace ZP
Contains the colour to use for palette entry 3 in the current (non-space) view
[X]
Variable paletteForView (category: Drawing the screen)
Palette numbers for each view
[X]
Variable pattSprite0 in workspace Sprite buffer
Pattern number for sprite 0
[X]
Variable pattSprite1 in workspace Sprite buffer
Pattern number for sprite 1
[X]
Variable pattSprite11 in workspace Sprite buffer
Pattern number for sprite 11
[X]
Variable pattSprite12 in workspace Sprite buffer
Pattern number for sprite 12
[X]
Variable pattSprite2 in workspace Sprite buffer
Pattern number for sprite 2
[X]
Variable pattSprite3 in workspace Sprite buffer
Pattern number for sprite 3
[X]
Variable pattSprite4 in workspace Sprite buffer
Pattern number for sprite 4
[X]
Variable ppuCtrlCopy in workspace ZP
Contains a copy of PPU_CTRL, so we can check the PPU configuration without having to access the PPU
[X]
Variable ppuNametableAddr in workspace ZP
Address of the current PPU nametable
[X]
Variable ppuPatternTableHi in workspace ZP
High byte of the address of the PPU pattern table to which we send patterns
[X]
Label rscn1 in subroutine ResetScanner
[X]
Label rscn2 in subroutine ResetScanner
[X]
Label rscr1 in subroutine ResetScreen
[X]
Label rscr2 in subroutine ResetScreen
[X]
Label rscr3 in subroutine ResetScreen
[X]
Label rscr4 in subroutine ResetScreen
[X]
Label rscr5 in subroutine ResetScreen
[X]
Label sbit1 in subroutine SendBitplaneToPPU
[X]
Label sbit2 in subroutine SendBitplaneToPPU
[X]
Variable screenFadedToBlack in workspace WP
Records whether the screen has been faded to black
[X]
Variable screenReset in workspace WP
Gets set to 245 when the screen is reset, but this value is only read once (in SetupViewInNMI) and the value is ignored, so this doesn't have any effect
[X]
Label sdat1 in subroutine SendDataNowToPPU
[X]
Label sdat2 in subroutine SendDataNowToPPU
[X]
Variable sendingNameTile in workspace ZP
The number of the most recent tile that was sent to the PPU nametable by the NMI handler for bitplane 0 (or the number of the first tile to send if none have been sent), divided by 8
[X]
Variable sendingPattern in workspace ZP
The number of the most recent pattern that was sent to the PPU pattern table by the NMI handler for bitplane 0 (or the number of the first pattern to send if none have been sent)
[X]
Label sets1 in subroutine SetupSprite0
[X]
Label sets2 in subroutine SetupSprite0
[X]
Label sets3 in subroutine SetupSprite0
[X]
Label sets4 in subroutine SetupSprite0
[X]
Label sets5 in subroutine SetupSprite0
[X]
Variable setupPPUForIconBar in workspace ZP
Controls whether we force the nametable and pattern table to 0 when the PPU starts drawing the icon bar
[X]
Variable showUserInterface in workspace ZP
Bit 7 set means display the user interface (so we only clear it for the game over screen)
[X]
Variable skipBarPatternsPPU in workspace ZP
A flag to control whether to send the icon bar's patterns to the PPU, after sending the nametable entries (this only applies if barPatternCounter = 0)
[X]
Variable smallLogoImage (category: Save and load)
Packed image data for the small Elite logo shown on the Save and Load screen
[X]
Label sppu1 in subroutine SendFontImageToPPU
[X]
Label sppu2 in subroutine SendFontImageToPPU
[X]
Label svin1 in subroutine SetupViewInNMI
[X]
Label svin2 in subroutine SetupViewInNMI
[X]
Label svin3 in subroutine SetupViewInNMI
[X]
Label svin4 in subroutine SetupViewInNMI
[X]
Label svin5 in subroutine SetupViewInNMI
[X]
Label svip1 in subroutine SendViewToPPU
[X]
Label svip10 in subroutine SendViewToPPU
[X]
Label svip11 in subroutine SendViewToPPU
[X]
Label svip12 in subroutine SendViewToPPU
[X]
Label svip13 in subroutine SendViewToPPU
[X]
Label svip14 in subroutine SendViewToPPU
[X]
Label svip2 in subroutine SendViewToPPU
[X]
Label svip3 in subroutine SendViewToPPU
[X]
Label svip4 in subroutine SendViewToPPU
[X]
Label svip5 in subroutine SendViewToPPU
[X]
Label svip6 in subroutine SendViewToPPU
[X]
Label svip7 in subroutine SendViewToPPU
[X]
Label svip8 in subroutine SendViewToPPU
[X]
Label svip9 in subroutine SendViewToPPU
[X]
Label ubar1 in subroutine UpdateIconBar
[X]
Label ubar2 in subroutine UpdateIconBar
[X]
Variable updatePaletteInNMI in workspace ZP
A flag that controls whether to send the palette data from XX3 to the PPU during NMI
[X]
Variable visibleColour in workspace ZP
Contains the colour to use for pixels that are visible in palette 0, e.g. $2C for cyan
[X]
Variable xSprite0 in workspace Sprite buffer
Screen x-coordinate for sprite 0
[X]
Variable yIconBarPointer in workspace WP
The y-coordinate of the icon bar pointer
[X]
Variable ySprite0 in workspace Sprite buffer
Screen y-coordinate for sprite 0
[X]
Variable ySprite10 in workspace Sprite buffer
Screen y-coordinate for sprite 10
[X]
Variable ySprite11 in workspace Sprite buffer
Screen y-coordinate for sprite 11
[X]
Variable ySprite8 in workspace Sprite buffer
Screen y-coordinate for sprite 8
[X]
Variable ySprite9 in workspace Sprite buffer
Screen y-coordinate for sprite 9