NES vs VC Differences

You can talk about almost anything that you want to on this board.

Moderator: Moderators

Sik
Posts: 1589
Joined: Thu Aug 12, 2010 3:43 am

Re: NES vs VC Differences

Post by Sik »

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?
User avatar
Myask
Posts: 965
Joined: Sat Jul 12, 2014 3:04 pm

Re: NES vs VC Differences

Post by Myask »

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.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: NES vs VC Differences

Post by ShaneM »

ShaneM wrote:

Code: 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.
--ShaneM
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.

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
lidnariq
Posts: 10677
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: NES vs VC Differences

Post by lidnariq »

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?
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.

Why does that matter? Dunno.
Sik
Posts: 1589
Joined: Thu Aug 12, 2010 3:43 am

Re: NES vs VC Differences

Post by Sik »

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
Her name is Samus...

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).
tepples
Posts: 22345
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: NES vs VC Differences

Post by tepples »

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?
Better yet: They could have made a 1-byte change to lda $FF02, which would still have eliminated the stray $2002 read.
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.
Metroid *has* a female protagonist. Her name is Samus.
Image
Official artwork of Samus Aran from Metroid: Other M, © Nintendo


This is a Metroid. It is vulnerable to cold.
Image
A Metroid as an assist trophy in Super Smash Bros. Brawl, © Nintendo


This is a Metroid after Valve gets its paws on it.
Image
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.)
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).
Punch-Out!! also adds SRAM saving in the PlayChoice 10 version, which was used for the version in Animal Crossing.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: NES vs VC Differences

Post by ShaneM »

lidnariq wrote:
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?
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.

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.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: NES vs VC Differences

Post by ShaneM »

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
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: NES vs VC Differences

Post by ShaneM »

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.

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

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