If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Boulder Dash (NES)/ROM map: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
m (Hawk moved page Boulder Dash/ROM map to Boulder Dash (NES)/ROM map) |
||
(6 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{rommap|game=Boulder Dash}} | |||
==Addresses== | |||
* <tt>0x2773</tt> = Rockford Palette Selection | * <tt>0x2773</tt> = Rockford Palette Selection | ||
* <tt>0x2931- | * <tt>0x2931-0x2938 = </tt>World 1 Password Data | ||
* <tt>0x2939- | * <tt>0x2939-0x2940 = </tt>World 2 Password Data | ||
* <tt>0x2941- | * <tt>0x2941-0x2948 = </tt>World 3 Password Data | ||
* <tt>0x2948- | * <tt>0x2948-0x2950 = </tt>World 4 Password Data | ||
* <tt>0x2951- | * <tt>0x2951-0x2958 = </tt>World 5 Password Data | ||
* <tt>0x2959- | * <tt>0x2959-0x2960 = </tt>World 6 Password Data | ||
* <tt>0x2961- | * <tt>0x2961-0x2968 = </tt>World 7 Password Data | ||
* <tt>0x2969- | * <tt>0x2969-0x2970 = </tt>World 8 Password Data | ||
* <tt>0x2971- | * <tt>0x2971-0x2978 = </tt>World 9 Password Data | ||
* <tt>0x2979- | * <tt>0x2979-0x2980 = </tt>World 10 Password Data | ||
* <tt>0x2981- | * <tt>0x2981-0x2988 = </tt>World 11 Password Data | ||
* <tt>0x2989- | * <tt>0x2989-0x2990 = </tt>World 12 Password Data | ||
* <tt>0x2991- | * <tt>0x2991-0x2998 = </tt>World 13 Password Data | ||
* <tt>0x2999- | * <tt>0x2999-0x29A0 = </tt>World 14 Password Data | ||
* <tt>0x29A1- | * <tt>0x29A1-0x29A8 = </tt>World 15 Password Data | ||
* <tt>0x29A9- | * <tt>0x29A9-0x29B0 = </tt>World 16 Password Data | ||
* <tt>0x29B1- | * <tt>0x29B1-0x29B8 = </tt>World 17 Password Data | ||
* <tt>0x29B9- | * <tt>0x29B9-0x29C0 = </tt>World 18 Password Data | ||
* <tt>0x29C1- | * <tt>0x29C1-0x29C8 = </tt>World 19 Password Data | ||
* <tt>0x29C9- | * <tt>0x29C9-0x29D0 = </tt>World 20 Password Data | ||
* <tt>0x29D1- | * <tt>0x29D1-0x29D8 = </tt>World 21 Password Data | ||
* <tt>0x29D9- | * <tt>0x29D9-0x29E0 = </tt>World 22 Password Data | ||
* <tt>0x29E1- | * <tt>0x29E1-0x29E8 = </tt>World 23 Password Data | ||
* <tt>0x29E9- | * <tt>0x29E9-0x29F0 = </tt>World 24 Password Data | ||
* <tt>0x3876 = </tt>World 1-1 CHR Bank for Level Data | * <tt>0x3876 = </tt>World 1-1 CHR Bank for Level Data | ||
* <tt>0x3877- | * <tt>0x3877-0x3878 = </tt>World 1-1 Level Data Pointers | ||
* <tt>0x3879 = </tt>World 1-2 CHR Bank for Level Data | * <tt>0x3879 = </tt>World 1-2 CHR Bank for Level Data | ||
* <tt>0x387A-0x387B = </tt>World 1-2 Level Data Pointers | * <tt>0x387A-0x387B = </tt>World 1-2 Level Data Pointers | ||
Line 43: | Line 41: | ||
* <tt>0x3889-0x388A = </tt>World 2-3 Level Data Pointers | * <tt>0x3889-0x388A = </tt>World 2-3 Level Data Pointers | ||
* <tt>0x388B = </tt>World 2-4 CHR Bank for Level Data | * <tt>0x388B = </tt>World 2-4 CHR Bank for Level Data | ||
* <tt>0x388C-0x388D = </tt>World | * <tt>0x388C-0x388D = </tt>World 2-4 Level Data Pointers | ||
* <tt>0x388E = </tt>World 3-1 CHR Bank for Level Data | * <tt>0x388E = </tt>World 3-1 CHR Bank for Level Data | ||
* <tt>0x388F-0x3890 = </tt>World | * <tt>0x388F-0x3890 = </tt>World 3-1 Level Data Pointers | ||
* <tt>0x3891 = </tt>World 3-2 CHR Bank for Level Data | * <tt>0x3891 = </tt>World 3-2 CHR Bank for Level Data | ||
* <tt>0x3892-0x3893 = </tt>World | * <tt>0x3892-0x3893 = </tt>World 3-2 Level Data Pointers | ||
* <tt>0x3894 = </tt>World 3-3 CHR Bank for Level Data | * <tt>0x3894 = </tt>World 3-3 CHR Bank for Level Data | ||
* <tt>0x3895-0x3896 = </tt>World | * <tt>0x3895-0x3896 = </tt>World 3-3 Level Data Pointers | ||
* <tt>0x3897 = </tt>World 3-4 CHR Bank for Level Data | * <tt>0x3897 = </tt>World 3-4 CHR Bank for Level Data | ||
* <tt>0x3898-0x3899 = </tt>World | * <tt>0x3898-0x3899 = </tt>World 3-4 Level Data Pointers | ||
* <tt>0x389A = </tt>World 4-1 CHR Bank for Level Data | * <tt>0x389A = </tt>World 4-1 CHR Bank for Level Data | ||
* <tt>0x389B-0x389C = </tt>World | * <tt>0x389B-0x389C = </tt>World 4-1 Level Data Pointers | ||
* <tt>0x389D = </tt>World 4-2 CHR Bank for Level Data | * <tt>0x389D = </tt>World 4-2 CHR Bank for Level Data | ||
* <tt>0x389E-0x389F = </tt>World | * <tt>0x389E-0x389F = </tt>World 4-2 Level Data Pointers | ||
* <tt>0x38A0 = </tt>World 4-3 CHR Bank for Level Data | * <tt>0x38A0 = </tt>World 4-3 CHR Bank for Level Data | ||
* <tt>0x38A1-0x38A2 = </tt>World | * <tt>0x38A1-0x38A2 = </tt>World 4-3 Level Data Pointers | ||
* <tt>0x38A3 = </tt>World 4-4 CHR Bank for Level Data | * <tt>0x38A3 = </tt>World 4-4 CHR Bank for Level Data | ||
* <tt>0x38A4-0x38A5 = </tt>World | * <tt>0x38A4-0x38A5 = </tt>World 4-4 Level Data Pointers | ||
* <tt>0x38A6 = </tt>World 5-1 CHR Bank for Level Data | * <tt>0x38A6 = </tt>World 5-1 CHR Bank for Level Data | ||
* <tt>0x38A7-0x38A8 = </tt>World | * <tt>0x38A7-0x38A8 = </tt>World 5-1 Level Data Pointers | ||
* <tt>0x38A9 = </tt>World 5-2 CHR Bank for Level Data | * <tt>0x38A9 = </tt>World 5-2 CHR Bank for Level Data | ||
* <tt>0x38AA-0x38AB = </tt>World | * <tt>0x38AA-0x38AB = </tt>World 5-2 Level Data Pointers | ||
* <tt>0x38AC = </tt>World 5-3 CHR Bank for Level Data | * <tt>0x38AC = </tt>World 5-3 CHR Bank for Level Data | ||
* <tt>0x38AD-0x38AE = </tt>World | * <tt>0x38AD-0x38AE = </tt>World 5-3 Level Data Pointers | ||
* <tt>0x38AF = </tt>World 5-4 CHR Bank for Level Data | * <tt>0x38AF = </tt>World 5-4 CHR Bank for Level Data | ||
* <tt>0x38B0-0x38B1 = </tt>World | * <tt>0x38B0-0x38B1 = </tt>World 5-4 Level Data Pointers | ||
* <tt>0x38B2 = </tt>World 6-1 CHR Bank for Level Data | * <tt>0x38B2 = </tt>World 6-1 CHR Bank for Level Data | ||
* <tt>0x38B3-0x38B4 = </tt>World | * <tt>0x38B3-0x38B4 = </tt>World 6-1 Level Data Pointers | ||
* <tt>0x38B5 = </tt>World 6-2 CHR Bank for Level Data | * <tt>0x38B5 = </tt>World 6-2 CHR Bank for Level Data | ||
* <tt>0x38B6-0x38B7 = </tt>World | * <tt>0x38B6-0x38B7 = </tt>World 6-2 Level Data Pointers | ||
* <tt>0x38B8 = </tt>World 6-3 CHR Bank for Level Data | * <tt>0x38B8 = </tt>World 6-3 CHR Bank for Level Data | ||
* <tt>0x38B9-0x38BA = </tt>World | * <tt>0x38B9-0x38BA = </tt>World 6-3 Level Data Pointers | ||
* <tt>0x38BB = </tt>World 6-4 CHR Bank for Level Data | * <tt>0x38BB = </tt>World 6-4 CHR Bank for Level Data | ||
* <tt>0x38BC-0x38BD = </tt>World | * <tt>0x38BC-0x38BD = </tt>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. | |||
<pre> | |||
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 | |||
⋮ ⋮ | |||
</pre> | |||
{{Internal Data|game=Boulder Dash}} |
Latest revision as of 21:06, 28 January 2024
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 ⋮ ⋮
Internal Data for Boulder Dash
| |
---|---|