Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Boulder Dash (NES)/ROM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
mNo edit summary
 
(One intermediate revision by one other user not shown)
(No difference)

Latest revision as of 21:06, 28 January 2024

Chip tiny.png The following article is a ROM map for Boulder Dash (NES).

Addresses

  • 0x2773 = Rockford Palette Selection
  • 0x2931-0x2938 = World 1 Password Data
  • 0x2939-0x2940 = World 2 Password Data
  • 0x2941-0x2948 = World 3 Password Data
  • 0x2948-0x2950 = World 4 Password Data
  • 0x2951-0x2958 = World 5 Password Data
  • 0x2959-0x2960 = World 6 Password Data
  • 0x2961-0x2968 = World 7 Password Data
  • 0x2969-0x2970 = World 8 Password Data
  • 0x2971-0x2978 = World 9 Password Data
  • 0x2979-0x2980 = World 10 Password Data
  • 0x2981-0x2988 = World 11 Password Data
  • 0x2989-0x2990 = World 12 Password Data
  • 0x2991-0x2998 = World 13 Password Data
  • 0x2999-0x29A0 = World 14 Password Data
  • 0x29A1-0x29A8 = World 15 Password Data
  • 0x29A9-0x29B0 = World 16 Password Data
  • 0x29B1-0x29B8 = World 17 Password Data
  • 0x29B9-0x29C0 = World 18 Password Data
  • 0x29C1-0x29C8 = World 19 Password Data
  • 0x29C9-0x29D0 = World 20 Password Data
  • 0x29D1-0x29D8 = World 21 Password Data
  • 0x29D9-0x29E0 = World 22 Password Data
  • 0x29E1-0x29E8 = World 23 Password Data
  • 0x29E9-0x29F0 = World 24 Password Data
  • 0x3876 = World 1-1 CHR Bank for Level Data
  • 0x3877-0x3878 = World 1-1 Level Data Pointers
  • 0x3879 = World 1-2 CHR Bank for Level Data
  • 0x387A-0x387B = World 1-2 Level Data Pointers
  • 0x387C = World 1-3 CHR Bank for Level Data
  • 0x387D-0x387E = World 1-3 Level Data Pointers
  • 0x387F = World 1-4 CHR Bank for Level Data
  • 0x3880-0x3881 = World 1-4 Level Data Pointers
  • 0x3882 = World 2-1 CHR Bank for Level Data
  • 0x3883-0x3884 = World 2-1 Level Data Pointers
  • 0x3885 = World 2-2 CHR Bank for Level Data
  • 0x3886-0x3887 = World 2-2 Level Data Pointers
  • 0x3888 = World 2-3 CHR Bank for Level Data
  • 0x3889-0x388A = World 2-3 Level Data Pointers
  • 0x388B = World 2-4 CHR Bank for Level Data
  • 0x388C-0x388D = World 2-4 Level Data Pointers
  • 0x388E = World 3-1 CHR Bank for Level Data
  • 0x388F-0x3890 = World 3-1 Level Data Pointers
  • 0x3891 = World 3-2 CHR Bank for Level Data
  • 0x3892-0x3893 = World 3-2 Level Data Pointers
  • 0x3894 = World 3-3 CHR Bank for Level Data
  • 0x3895-0x3896 = World 3-3 Level Data Pointers
  • 0x3897 = World 3-4 CHR Bank for Level Data
  • 0x3898-0x3899 = World 3-4 Level Data Pointers
  • 0x389A = World 4-1 CHR Bank for Level Data
  • 0x389B-0x389C = World 4-1 Level Data Pointers
  • 0x389D = World 4-2 CHR Bank for Level Data
  • 0x389E-0x389F = World 4-2 Level Data Pointers
  • 0x38A0 = World 4-3 CHR Bank for Level Data
  • 0x38A1-0x38A2 = World 4-3 Level Data Pointers
  • 0x38A3 = World 4-4 CHR Bank for Level Data
  • 0x38A4-0x38A5 = World 4-4 Level Data Pointers
  • 0x38A6 = World 5-1 CHR Bank for Level Data
  • 0x38A7-0x38A8 = World 5-1 Level Data Pointers
  • 0x38A9 = World 5-2 CHR Bank for Level Data
  • 0x38AA-0x38AB = World 5-2 Level Data Pointers
  • 0x38AC = World 5-3 CHR Bank for Level Data
  • 0x38AD-0x38AE = World 5-3 Level Data Pointers
  • 0x38AF = World 5-4 CHR Bank for Level Data
  • 0x38B0-0x38B1 = World 5-4 Level Data Pointers
  • 0x38B2 = World 6-1 CHR Bank for Level Data
  • 0x38B3-0x38B4 = World 6-1 Level Data Pointers
  • 0x38B5 = World 6-2 CHR Bank for Level Data
  • 0x38B6-0x38B7 = World 6-2 Level Data Pointers
  • 0x38B8 = World 6-3 CHR Bank for Level Data
  • 0x38B9-0x38BA = World 6-3 Level Data Pointers
  • 0x38BB = World 6-4 CHR Bank for Level Data
  • 0x38BC-0x38BD = World 6-4 Level Data Pointers

Disassembly

Password Comparison Routine

This fragment of code compares the input password with the passwords of all 24 levels of the game.

00:A8BA:A9 00     LDA #$00
00:A8BC:85 67     STA $0067   // Reset level counter
loop:
00:A8BE:A5 67     LDA $0067   // Load level counter
00:A8C0:0A        ASL
00:A8C1:0A        ASL
00:A8C2:0A        ASL
00:A8C3:AA        TAX         // Level password character counter X:= A * 8
00:A8C4:A0 00     LDY #$00    // Reset input password character counter
passwordCompare:
00:A8C6:B9 4D 00  LDA $004D,Y // Load Ath character from input password at $004D
00:A8C9:DD 27 A9  CMP $A927,X // Compare to level passwords at $A927.
                              // Data structure: [Lvl 1 password (8bytes)][Lvl 2 password (8bytes)]…
                              // Only the first 6 bytes are used, see below.
00:A8CC:D0 09     BNE $A8D7   // If not equal, goto nextLevel
00:A8CE:E8        INX         // Increment level password character counter
00:A8CF:C8        INY         // Increment input password character counter
00:A8D0:C0 06     CPY #$06    // Check if password length of $06 characters is reached
00:A8D2:90 F2     BCC $A8C6   // If not, goto passwordCompare
00:A8D4:4C E2 A8  JMP $A8E2   // Comparison finished, current level password matches input password. Goto passwordCorrect.
nextLevel:
00:A8D7:E6 67     INC $0067   // Increment level counter
00:A8D9:A5 67     LDA $0067
00:A8DB:C9 18     CMP #$18    // Check if last level was reached
00:A8DD:90 DF     BCC $A8BE   // If not, goto loop
⋮                 ⋮