Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,471,042
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 04-23-24 09:39 AM
Guest: Register | Login

0 users currently in ROM Hacking | 1 guest | 2 bots

Main - ROM Hacking - NES vs VC Differences New thread | Thread closed


ShaneM
Posted on 11-14-14 05:58 AM (rev. 2 of 11-14-14 05:59 AM) Link | Quote | ID: 158983


Snifit
Compromised account.
Please contact an admin to restore access.
Level: 36

Posts: 215/285
EXP: 293356
Next: 14754

Since: 02-17-14

Last post: 3134 days
Last view: 2650 days
So...I got bored. Then I decided to dissect and disassemble my VC ROMS and find differences between them and their NES counterparts! They were amazing (and time-consuming). Note that all my games are USA-based, so I cannot list differences between regional versions.

So far, I've done a few games. I'll add the rest when I get around to doing them.

1) SMB1 - Identical to the commercial NTSC release.

2) Zelda II - Seems the Game Over data was changed to avoid eyestrain?


;found at ROM 0x1C9FA
ColorRotation: ;the original version

.db $12, $16, $2a, $16 ;alternates between two shades of green and a lighter red

ColorRotation ;the VC release

.db $16, $06, $16, $06 ;seems to alternate at a lighter and darker red rotation
;note that there aren't any other differences in these versions at all except for these four bytes


3) SMB3 - VC also mutes the flashes in palettes for the princess room; based on the PRG1 revision.


;found at ROM 0xE19B
Rotation_Colors: ;original
.byte $26, $2A, $22, $36 ;Alternates between shades of blue, green and a caucasian pink

Rotation_Colors: ;VC
.byte $36, $36, $36, $36 ;pinky all the way! ;)

;next found at ROM 0x361BD
Letter_PaletteKludge: ;original
LDA $0711 ;1107; some sort of timer
LSR A
AND #$01
TAY ; Y = 0 or 1, changing every other tick

Letter_PaletteKludge: ;VC release
LDA $0711 ;1107; some sort of timer
JMP BF00 ;00BF
A1B0: TAY ;Y = 0 or 1, changing every other tick

BF00: ;found at ROM 0x37F10
LSR A
LSR A
LSR A
BEQ 0B
AND #$03
CMP #$02
BNE 05
LDA #$01 ;set some sort of flag
JMP A1B0 ;B0A1
05:0B:LDA #$00
JMP A1B0 ;B0A1

;What I don't understand is in the VC release, why not just do a JSR to BF00 rather than a JMP? That way, at
;either JMP A1B0 ;B0A1 they could have simply done an RTS... it would have saved them 4 bytes doing so; I
;guess space wasn't an issue.
;since an RTS takes you back to the mnemonic right after the JSR.


4) Zelda I - Pretty much identical to the PRG1 version. Only differences are text pointers and the titlescreen adding -2003. Other changes done are spelling corrections to the intro to fix the Engrish, names being fixed such as the G-man and the battery backup text being removed from the Game Over screen. I can provide offsets for anyone wanting them.

I will add more games when I disassemble the differences.

____________________
At the end, when the day is over, the only one left to face is yourself. Have you been true to yourself and made the most of your day?

kuja killer
Posted on 11-16-14 02:54 AM Link | Quote | ID: 158993


Level: 55

Posts: 412/628
EXP: 1243571
Next: 70618

Since: 03-20-07
From: Lake Havasu City, Arizona

Last post: 279 days
Last view: 4 days
i'd be highly interested to know the changes between NES megaman 3, and Wii's "virtual console" megaman 3.

i've been working with mm3 for many years, so i know everything there is to know about the rom...but im very curious what sort of changes may possibly exist in this virtual console version.

ShaneM
Posted on 11-16-14 06:32 PM (rev. 4 of 11-16-14 06:45 PM) Link | Quote | ID: 158998


Snifit
Compromised account.
Please contact an admin to restore access.
Level: 36

Posts: 216/285
EXP: 293356
Next: 14754

Since: 02-17-14

Last post: 3134 days
Last view: 2650 days
I don't own an VC Megamans, but I'll see what I can do.

I've disassembled SMB2 USA for the VC (the original Wii 2008 edition; I'm under the assumption that the Wii U version is the same as this one, but I'm not paying another $5 USD to find out). The Wii one is based offof the NTSC PRG1 version. This VC one had some very bizarre changes. They are as follows:


;In the iNES header, the 7th byte, found at 0x0006 was $40 in the original. It was changed to $42 on this ;version.
;For those interested, more info found here [url]http://wiki.nesdev.com/w/index.php/INES#Flags_7[/url]

;Next
;ROM 0x7E17 in the original has:
.db $26, $2a, $22, $26 ;the palette rotation used for "BOMB!" explosions.

;ROM 0x7E17 in the VC has:
.db $0e, $1e, $2e, $3e ;the palette rotation used for "BOMB!" explosions. WHAT?!? These are all black...but
;invalid blacks. Why not just used $0F??? Are far as I know all valid games use $0F as black.

;At ROM 0xC02E the original has:
.db $12 ;waterfall's water blue used in the sprite cycling

;At ROM 0xC02E the VC version has:
.db $0d ;but wait...this is black on the NES but on the VC it shows up as a lighter blue than $12
;my only assumption is that VC uses the invalid palette $0d as blue...Notice the further remaining changes.
;They change every occurance of $12 to $0d with palettes. Does that mean $12 is invalid on the VC? I may have
;to wait to disassemble more games to find out for sure.

;At ROM 0xC156 the original has:
.db $12 ;I'll assume that this is the water used on icy stages like World 4

;At ROM 0xC156 the VC version has:
.db $0d ;changed again

;At ROM 0xC27E the original has:
.db $12 ;I'm not sure what this is for, but I know that it is a palette change, similar to the ones above.

;At ROM 0xC27E the VC has:
.db $0d ;otra vez :roll:

;At ROM 0xC29D in the original has:
.db $31, $12 ;palettes used for various objects, such as the platform that Birdo stands on.

;At ROM 0xC29D in the original has:
.db $30, $0d ;it uses the strange blue again, but this time changes the light blue to a white.



More to come.
--ShaneM

____________________
At the end, when the day is over, the only one left to face is yourself. Have you been true to yourself and made the most of your day?

drunkenjesus
Posted on 11-20-14 01:58 AM (rev. 2 of 11-20-14 02:00 AM) Link | Quote | ID: 159027

Newcomer
Level: 6

Posts: 2/5
EXP: 656
Next: 251

Since: 11-11-14

Last post: 3439 days
Last view: 3436 days
Haven't noticed any significant differences with the games I have on VC but because of the license running out NES Play Action Football has the title screen edited to remove nflpa's copyright and all the original players names are changed, everything else is the same.

ShaneM
Posted on 11-20-14 08:56 PM (rev. 3 of 11-20-14 08:58 PM) Link | Quote | ID: 159032


Snifit
Compromised account.
Please contact an admin to restore access.
Level: 36

Posts: 221/285
EXP: 293356
Next: 14754

Since: 02-17-14

Last post: 3134 days
Last view: 2650 days
@drunkenjesus
Thanks for the info. I will look into that game soon.

I disassembled SMB2J a.k.a SMB The Lost Levels for VC, these are my findings:

Note some things:
1) Rumor has it that the VC version is based off of a unreleased cart version. That is FALSE. This is actually the FDS version being emulated on the VC.
2) I took away the CRC dummy bytes and GAP data when disassembling this to compare it to and match offsets to the standard dumped FDS version, which was faithful to the original. The VC does change some code, though.
3) Labels for these routines borrowed from doppleganger's SMB2J disassembly project.


;at ROM 0x224F original has
LDA #$58
STA $4020 ;set FDS IRQ timer to occur at the end of the status bar

;at ROM 0x224F VC has
LDA #$FF
STA $4020 ;set FDS IRQ timer to occur at the end of the status bar. It is clear that this is a
;"supposed" glitch fix. It is suppose to fix the bottom of the letter Worlds from getting cut off during
;Worlds A-D. It fixes that but causes the score to get cut off! Whoever the dumbass was who worked on this
;put little to no effort as they made the issue WORSE. Luckily, I fixed this in my SMB1+SMB2J FDS hack with
;SRAM, the correct value is supposed to be LDA #$BB to truly fix this error.

;at ROM 0x82CC the original does this
LDA $4032 ;check disk inserted flag
LSR A ;execute this routine until disk is ejected
BCC ThisDiskIOTask ;note this routine is run on an error
NextDiskIOTask:
INC $07FC ;move on to next subtask involving the disk drive
ThisDiskIOTask:
RTS

;at ROM 0x82CC the VC does this
LDA $4032 ;check disk inserted flag
CLC
BCC ThisDiskIOTask ;this branch is unconditional and pointless. What should have been was an RTS to save
;cycling rather than a CLC that unconditionally branches to an RTS. The goal here was to skip the INC.
NextDiskIOTask:
INC $07FC ;move on to next subtask involving the disk drive
ThisDiskIOTask:
RTS

;at ROM 0x82D6, original does this:
WaitForReinsert:
LDA FDS_DRIVE_STATUS ;check disk inserted flag
LSR A ;execute this routine until disk is reinserted
BCC NextDiskIOTask ;note this routine is run after the one
BCS ThisDiskIOTask ;that checks for an ejected disk

;at ROM 0x82D6, VC does this:
WaitForReinsert:
LDA $4032 ;check disk inserted flag
CLC ;again, unconditional BCC branch. Pointless.
BCC NextDiskIOTask
BCS ThisDiskIOTask ;THIS NEVER BRANCHES



These three changes are the only ones present in SMB2J. --ShaneM

____________________
At the end, when the day is over, the only one left to face is yourself. Have you been true to yourself and made the most of your day?

Main - ROM Hacking - NES vs VC Differences New thread | Thread closed

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.020 seconds. (341KB of memory used)
MySQL - queries: 52, rows: 77/77, time: 0.016 seconds.