|
Post by Insectduel on Oct 15, 2007 13:23:08 GMT -5
Here you can Post SMB1 Data
Share your SMB1 discoveries. Do NOT post questions/unfitting material here.
Also, note that it says Data Repository, NOT Glitch or Bug Repository.
Captain Boh
Here is what I have done. I'm not sure if this causes any problems, but I haven't run into any yet.
The following originally read from 074e, 00 at that location produces the underwater effects Changed where 1a61-1a62 read from: this disabled changing blocks into Seaweed changed where 3100-3101 read from: this allowed you to jump off the top of the screen changed where 353f-3540 read from: this allowed running changed where 367f-3680 read from: this turned off bubble generation changed where 37c9-37ca read from: this turned off the gravity effect of pits changed where 58cc-58cd read from: this allowed jumping on enemies changed where 5a49-5a50 read from: this allowed shells to kill enemies changed where 5ceb-5cec read from: this allowed blocks to be hit
Then, I changed where 1164, 1165 pointed to disable the various modifications to jumping that change it to swimming. This originally pointed to 0704 and only seems to function to as I mentioned, modify jumping. I have not yet issolated how the changes themselves acctually function because bypasses them anyway. This was acctually the first thing I did, before I sort of worked out what I was doing, in retrospect, I'd now disable the whole thing here rather than repointing it.
|
|
|
Post by Insectduel on Oct 22, 2007 14:42:25 GMT -5
Anyway
Frantik's Data
the power up mushroom and goombas aren't mirrored...
gooba: 67a4h: 70 71 72 73 power up mushroom: 66ceh: 76 77 78 79 (1up mushroom is a line below, same tile #s)
fireflower: 66d2: d6 d6 d9 d9 starman: 66d6: 8d 8d e4 e4 princess: 67eah: 7a 7b da db d8 d8
hell, here's all of the enemy graphics, starting at 674b (taken from the smb disassembly)
EnemyGraphicsTable: .db $fc, $fc, $aa, $ab, $ac, $ad ;buzzy beetle frame 1 .db $fc, $fc, $ae, $af, $b0, $b1 ; frame 2 .db $fc, $a5, $a6, $a7, $a8, $a9 ;koopa troopa frame 1 .db $fc, $a0, $a1, $a2, $a3, $a4 ; frame 2 .db $69, $a5, $6a, $a7, $a8, $a9 ;koopa paratroopa frame 1 .db $6b, $a0, $6c, $a2, $a3, $a4 ; frame 2 .db $fc, $fc, $96, $97, $98, $99 ;spiny frame 1 .db $fc, $fc, $9a, $9b, $9c, $9d ; frame 2 .db $fc, $fc, $8f, $8e, $8e, $8f ;spiny's egg frame 1 .db $fc, $fc, $95, $94, $94, $95 ; frame 2 .db $fc, $fc, $dc, $dc, $df, $df ;bloober frame 1 .db $dc, $dc, $dd, $dd, $de, $de ; frame 2 .db $fc, $fc, $b2, $b3, $b4, $b5 ;cheep-cheep frame 1 .db $fc, $fc, $b6, $b3, $b7, $b5 ; frame 2 .db $fc, $fc, $70, $71, $72, $73 ;goomba .db $fc, $fc, $6e, $6e, $6f, $6f ;koopa shell frame 1 (upside-down) .db $fc, $fc, $6d, $6d, $6f, $6f ; frame 2 .db $fc, $fc, $6f, $6f, $6e, $6e ;koopa shell frame 1 (rightsideup) .db $fc, $fc, $6f, $6f, $6d, $6d ; frame 2 .db $fc, $fc, $f4, $f4, $f5, $f5 ;buzzy beetle shell frame 1 (rightsideup) .db $fc, $fc, $f4, $f4, $f5, $f5 ; frame 2 .db $fc, $fc, $f5, $f5, $f4, $f4 ;buzzy beetle shell frame 1 (upside-down) .db $fc, $fc, $f5, $f5, $f4, $f4 ; frame 2 .db $fc, $fc, $fc, $fc, $ef, $ef ;defeated goomba .db $b9, $b8, $bb, $ba, $bc, $bc ;lakitu frame 1 .db $fc, $fc, $bd, $bd, $bc, $bc ; frame 2 .db $7a, $7b, $da, $db, $d8, $d8 ;princess .db $cd, $cd, $ce, $ce, $cf, $cf ;mushroom retainer .db $7d, $7c, $d1, $8c, $d3, $d2 ;hammer bro frame 1 .db $7d, $7c, $89, $88, $8b, $8a ; frame 2 .db $d5, $d4, $e3, $e2, $d3, $d2 ; frame 3 .db $d5, $d4, $e3, $e2, $8b, $8a ; frame 4 .db $e5, $e5, $e6, $e6, $eb, $eb ;piranha plant frame 1 .db $ec, $ec, $ed, $ed, $ee, $ee ; frame 2 .db $fc, $fc, $d0, $d0, $d7, $d7 ;podoboo .db $bf, $be, $c1, $c0, $c2, $fc ;bowser front frame 1 .db $c4, $c3, $c6, $c5, $c8, $c7 ;bowser rear frame 1 .db $bf, $be, $ca, $c9, $c2, $fc ; front frame 2 .db $c4, $c3, $c6, $c5, $cc, $cb ; rear frame 2 .db $fc, $fc, $e8, $e7, $ea, $e9 ;bullet bill .db $f2, $f2, $f3, $f3, $f2, $f2 ;jumpspring frame 1 .db $f1, $f1, $f1, $f1, $fc, $fc ; frame 2 .db $f0, $f0, $fc, $fc, $fc, $fc ; frame 3
|
|
Carol Melinda
Premier Member
These corporates are cheats and liars. Don't hang with them. Only hang with your family ~ Sakugarne
[ss:American Girl]
Posts: 1,013
|
Post by Carol Melinda on Nov 29, 2007 16:07:07 GMT -5
There's one from JaSp
SMB1 Music Format 02/19/06 by JaSp ------------------------- SongParts are the different sections of a song; songs aren't stored with data only so that it can play a same part without having to write it twice or more. For example, the main theme is composed of 33 parts following each other, with 10 different parts (from 0x792D to 0x794D). Headers contains the song part's tempo and the different channel pointers : the main is direct in little endian format (high-low) and is for square1. The others are for square2, triangle and noise, they're relative to the first byte of the main channel. Then you've got the data itself. I didn't search how and where the number of part for the songs are determined. This music format is similar (but not exactly the same, some instruments data may differ for example, so it'll sound like garbage if past in another game) to some other games, such as SMB2 or SMB3. To easily recognize this data, use FCEUXD's Code/Data Logger : start it before a song plays, then get the whole song to reach its end and search for some blue data in the hex editor, you should easily find it.
0x791D -> 0x7967 #SongPart HeaderPointers
0x791D + #SongPart HeaderPointer(1 byte) = #SongPart Header(6 bytes)
#SongPart Header : AA BB CC DD EE FF (6 bytes) AA: Tempo BB,CC: Main SongPart Pointer in RAM (square1 channel)(direct;little endian)(decrease by $8000 to get ROM address) DD: Square2 channel pointer (relative; main songpart address + DD) EE: Triangle channel pointer (relative; main songpart address + EE) FF: Noise channel pointer (relative; main songpart address + FF)
SongPart data $00 End the whole part (if in square1 data) $01 - $7F Note byte (pitch varies according to value) $80 - $FF Properties byte #1aaabbbb aaa : instrument bbbb : note length
|
|
Carol Melinda
Premier Member
These corporates are cheats and liars. Don't hang with them. Only hang with your family ~ Sakugarne
[ss:American Girl]
Posts: 1,013
|
Post by Carol Melinda on Nov 29, 2007 16:11:30 GMT -5
And even More Variables __________________________________ |Variable Name |RAM Ofs|ROM Ofs|x| ----------------------------------- |World Table |9cb4 |1cc4 |y| Contains 8 entries giving the map number offset of the first map in each world* |Map Name Table |9cbc |1ccc |y| Contains entries for maps (ADD)* |Num Lives |075a |N/A |y| Holds the player's current number of lives (Gameover when this value wraps @ h80)* |Player State |0756 |N/A |y| Holds current player's state (0 = small, 1 = big, 2 = fire) |Luigi Flag |0753 |N/A |n| Has something to do with Luigi, when set to 01, player is all Lugified |World Number |075f |N/A |n| I think this is the address of the current world number ----------------------------------- Code _________________ |RAM Ofs|ROM Ofs| ----------------- |91d9 |11e9 | Decrement Num Lives after death* |d820 |5830 | Powerup Handler ----------------- Map Tables _________________________________________ |Table Name |Start |End |Length | ----------------------------------------- |Mob Low Byte |9ce4 |9d05 |34 |* |Mob High Byte |9d06 |9d27 |34 |* ROM Ofs 269e = START 1-1 HEADER === Commented Dissasembly === $D820:AD 56 07 LDA $0756 = #$00 Load Player State $D823:F0 1B BEQ $D840 If 0 (small), Branch to SHROOM $D825:C9 01 CMP #$01 $D827:D0 23 BNE $D84C If not 1 (big), Branch to RETURN $D829:A6 08 LDX $08 = #$05 $D82B:A9 02 LDA #$02 $D82D:8D 56 07 STA $0756 = #$00 Set Player State to 2 (fire) $D830:20 F1 85 JSR $85F1 !!!FIND THIS SUB!!! $D833:A6 08 LDX $08 = #$05 $D835:A9 0C LDA #$0C $D837:4C 47 D8 JMP $D847 !!!FIND THIS SUB!!! $D83A:A9 0B LDA #$0B $D83C:9D 10 01 STA $0110,X @ $0115 = #$06 $D83F:60 RTS ;SHROOM $D840:A9 01 LDA #$01 $D842:8D 56 07 STA $0756 = #$00 Set Player State to 1 (big) $D845:A9 09 LDA #$09 $D847:A0 00 LDY #$00 $D849:20 48 D9 JSR $D948 !!!FIND THIS SUB!!! ;RETURN $D84C:60 RTS As you can see, I am finding some stuff out on my own. I'm also getting much more proficient at it. Any info / tips would be appreciated. Hope someone finds that info useful. 01/21/2006 - Edited code tags to use proper HTML bracets *slapps head* ... but now I can't turn off smilies... ; RESET Interupt ; This is straight from SMB1, h8000 - h8006 SEI CLD LDA #$10 STA $2000 ; Begin our code LDA #$47 ; 01000111 STA $8000 ; Forces h8000 - h9FFF to next-to-last bank, hE000 - hFFFF to the last bank LDA #$01 ; First hA000 bank number STA $8001 ; Load the bank LDA #$46 ; 01000110 STA $8000 ; Tell MMC3 to load bank hC000 LDA #$00 ; hC000 bank number STA $8001 ; Load the bank ; OK, now we are all set up, so... JMP $8007 ; Jump to origional RESET interupt And Some from Disch. You might even be able to put some of that other init stuff in the swapped bank too, if you're really pressed for space. Assuming you expand to 64k PRG, using 8k banks (page 7 is the last 8k in the ROM) ... I'd probably do something like the following: PRG page 7 - $E000 SEI ; disable IRQs LDA #$47 STA $8000 ; page 6 @ $8000, select mode 7 (PRG swap $A000) LDA #$03 STA $8001 ; page 3 @ $A000 JSR $A007 ; JSR to page 3 (7 bytes in) STA $8001 ; page 1 @ $A000 (see end of code on page 3) JMP $8007 ; continue with normal reset ------------------------ PRG page 3 - $A000 ; desired page numbers for modes 0-6 .db 0, 2, 4, 5, 6, 7, 0 ; this is $A007, where we JSR'd to above LDA #$00 STA $2000 ; disable NMIs STA $2001 ; turn off PPU rendering CLD ; turn off decimal mode (just a formality, not really necessary) ; using that look-up table at $A000, we can use a loop to plug in all desired page ; numbers -- note this will temporarily switch to $C000 fixed, $8000 swappable mode, ; but that can be switched back later and it won't hurt anything, as the area we're ; currently in ($A000) is unaffected by the mode LDX #$06 temp_label: LDA $A000,X STX $8000 STA $8001 DEX BPL temp_label ; we want vertical mirroring LDA #$00 STA $A000 ; we want RAM @ $6000-7FFF LDA #$80 STA $A001 ; we don't want IRQs -- disable MMC3 IRQs STA $E000 ; that's all for mapper prepwork -- switch back to $8000=fixed mode and select mode 7 ; so that the next area to be swapped is $A000 LDA #$47 STA $8000 LDA #$01 ; we will want page 1 @ $A000 RTS I wasn't sure exactly which pages you want where, since having $C000 swappable makes it pretty weird, so I just flipped around $8000 and $C000 from the "norm". When this code completes you'll be set up with the following: - PRG page 6 @ $8000 - PRG page 1 @ $A000 - PRG page 0 @ $C000 - PRG page 7 @ $E000 - Vertical mirroring - cartridge RAM enabled and ready for use - first 8k CHR swapped in ppu$0000 in normal ascending order - MMC3 IRQs completely shut off (until re-enabled via a write to $E001) This code uses 20 bytes of the hardwired bank, and several bytes of a free bank (page 3) -- I didn't count how many. It could probably be optimized some more, but I figure since it's in a completely new bank you won't be pressed for space.
|
|