NES vs VC Differences
Moderator: Moderators
Re: NES vs VC Differences
It's the second flag of the seventh byte (it's called 6 because it starts counting from 0, not from 1). To be fair though those bytes probably should get better names, any suggestions?
Re: NES vs VC Differences
No, no, it's still the seventh(1-based) byte. It's just that flags-6 is the seventh(1-based) byte because it's the sixth(0-based) byte, that at address 0x6.
To muddy it further it's the FIRST byte of flags.
Intersections of 0-based and 1-based counting trip everyone up now and again.
addition: I think Flags 6 is fine.
To muddy it further it's the FIRST byte of flags.
Intersections of 0-based and 1-based counting trip everyone up now and again.
addition: I think Flags 6 is fine.
- ShaneM
- Posts: 353
- Joined: Wed Apr 04, 2012 4:15 pm
- Location: United States of America (USA)
- Contact:
Re: NES vs VC Differences
Something about this second change to Pac-Man has been bothering me on the Virtual Console. If the point was to remove the "lda $2002", why not just add the three NOPs first instead of removing the bytes and filling the NOPs in at the end? It is obvious that this was done via hex editing, but it seems to be a quick, sloppy move.ShaneM wrote:--ShaneMCode: Select all
... Original_Something: ;found at ROM x1F37. I'm not sure what this does, I tried corruption but it seems ;that this is something else that may be used later on in the game lda $2002 ;everything is in big-Endian, here lda $DF6C,Y sta $2006 lda $DF6D,Y sta $2006 lda $6C,X sta $2007 iny iny inx cpx $04 bne $E5 VC_Something: ;found at ROM x1F37. I'm not sure what this does, I tried corruption but it seems that this ;is something else that may be used later on in the game lda $DF6C,Y ;everything is in big-Endian, here sta $2006 lda $DF6D,Y sta $2006 lda $6C,X sta $2007 iny iny inx cpx $04 bne $E8 nop nop nop ;really elegant coding, here :P I can tell that this was done via hex editing.
Also, I've started disassembling the VC version of Metroid! I know almost zero about this game and series except that Metroid is a female protagonist. But it seems to add SRAM saving to it, something I was surprised that it didn't previously have (unless I'm confusing it with the FDS version). I'll post the ASM coding to the SRAM additions to the VC version, soon. --ShaneM
Re: NES vs VC Differences
Speeds up the loop. The lda $2002 only needs to be executed once, and by removing it (and moving the three NOPs) , they increase the speed of the loop by 4 cycles.ShaneM wrote:If the point was to remove the "lda $2002", why not just add the three NOPs first instead of removing the bytes and filling the NOPs in at the end?
Why does that matter? Dunno.
Re: NES vs VC Differences
Her name is Samus...ShaneM wrote:Also, I've started disassembling the VC version of Metroid! I know almost zero about this game and series except that Metroid is a female protagonist. But it seems to add SRAM saving to it, something I was surprised that it didn't previously have (unless I'm confusing it with the FDS version). I'll post the ASM coding to the SRAM additions to the VC version, soon. --ShaneM
Anyway, yeah the FDS version had saving but the cartridge version didn't (it used passwords instead), although it seems at some point you were going to be able to save on the cartridge version too (probably was cut off to reduce costs).
Re: NES vs VC Differences
Better yet: They could have made a 1-byte change to lda $FF02, which would still have eliminated the stray $2002 read.ShaneM wrote:Something about this second change to Pac-Man has been bothering me on the Virtual Console. If the point was to remove the "lda $2002", why not just add the three NOPs first instead of removing the bytes and filling the NOPs in at the end?
Metroid *has* a female protagonist. Her name is Samus.Also, I've started disassembling the VC version of Metroid! I know almost zero about this game and series except that Metroid is a female protagonist.
Official artwork of Samus Aran from Metroid: Other M, © Nintendo
This is a Metroid. It is vulnerable to cold.

A Metroid as an assist trophy in Super Smash Bros. Brawl, © Nintendo
This is a Metroid after Valve gets its paws on it.
Headcrab from Half-Life 2: Episode Two, © Valve
This is Cowboy BeBop at his computer. Except it isn't.
(Digression about Alien franchise facehuggers continues in this topic.)
Punch-Out!! also adds SRAM saving in the PlayChoice 10 version, which was used for the version in Animal Crossing.But it seems to add SRAM saving to it, something I was surprised that it didn't previously have (unless I'm confusing it with the FDS version).
- ShaneM
- Posts: 353
- Joined: Wed Apr 04, 2012 4:15 pm
- Location: United States of America (USA)
- Contact:
Re: NES vs VC Differences
lidnariq wrote:Speeds up the loop. The lda $2002 only needs to be executed once, and by removing it (and moving the three NOPs) , they increase the speed of the loop by 4 cycles.ShaneM wrote:If the point was to remove the "lda $2002", why not just add the three NOPs first instead of removing the bytes and filling the NOPs in at the end?
Why does that matter? Dunno.
Makes sense. I still stand by this being some sort of glitch fix. I ran the code and $2002 was indeed previously executed. --ShaneM
Last edited by ShaneM on Wed Nov 19, 2014 9:26 pm, edited 1 time in total.
- ShaneM
- Posts: 353
- Joined: Wed Apr 04, 2012 4:15 pm
- Location: United States of America (USA)
- Contact:
Re: NES vs VC Differences
Guys, please no more bs on the thread. We have PMs and IRCs just for idle chatter. But I get off work today at 10PM and I'd like to post my Metroid findings. Hopefully I won't be too tired. At latest it'd be tomorrow. --ShaneM
- ShaneM
- Posts: 353
- Joined: Wed Apr 04, 2012 4:15 pm
- Location: United States of America (USA)
- Contact:
Re: NES vs VC Differences
I'm not quite ready for Metroid to be released, yet. I want to try to label it as best as possible. I really don't know that much about the game but I see the user pops is presenting a disassembly of it. I'll take a look at it and post soon. I did disassemble 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.
These three changes are the only ones present in SMB2J. --ShaneM
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.
Code: Select all
;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