Points of Required Attention™
Smaghetti, a new Super Mario Advance 4 editor, is currently in development! Check out the thread HERE!

Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,316,827
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 03-29-24 08:34 AM
Guest: Register | Login

0 users currently in ROM Hacking | 4 guests

Main - ROM Hacking - Mega Man Upgrade Patch New thread | New reply

Pages: 1 2 3 4 5 6 7

Vanya
Posted on 01-10-14 08:55 PM (rev. 5 of 01-11-14 01:21 PM) Link | Quote | ID: 155422


Red Koopa
Level: 27

Posts: 32/139
EXP: 104729
Next: 11430

Since: 01-22-13

Last post: 3265 days
Last view: 3264 days
Thanks a lot!
I'll admit that it took a little thinking outside the box to get it done.

Here's the last patch I did when I was hacking MM5 if you'd like to check it out for yourself:
Mega Man Powered Down R2 Demo Patch

EDIT: Apparently my emulator is a liar. There are sprite limit breaks on the top and bottom rows. Apparently I have to reload the emulator for the sprite limit option to reset.

____________________
Krakenskin Leather Works, my Etsy store.
LordVanya, my art page.
FundamentalEssence, my game development page.

infidelity
Posted on 01-16-14 03:39 PM Link | Quote | ID: 155464


Fuzz Ball
Level: 66

Posts: 473/968
EXP: 2362674
Next: 99177

Since: 05-24-07

Last post: 930 days
Last view: 786 days
Those pesky emulators, lol. :-p

Chaobomr
Posted on 01-16-14 07:18 PM Link | Quote | ID: 155465


Buster Beetle
Banned: Spammer takeover?
Level: 45

Posts: 203/467
EXP: 636554
Next: 23610

Since: 05-07-13
From: The dirty south

Last post: 3452 days
Last view: 3450 days
Yeah, you might wanna make sure your emulator emulates an NES perfectly. That includes programming issues.

____________________
Sorry for the stupidity. That jerk will be dealt with in the most insane way possible.

infidelity
Posted on 01-16-14 10:10 PM Link | Quote | ID: 155466


Fuzz Ball
Level: 66

Posts: 474/968
EXP: 2362674
Next: 99177

Since: 05-24-07

Last post: 930 days
Last view: 786 days
Totally off topic, but with kuja killers help, he was able to find out that fceux was lacking the proper mmc5 emulation for $5130. My Zelda hack uses 1024kb of CHR-ROM, 4 pages worth of 00-FF, but at the time, fceux only showed the first page of 00-FF, and not the other 3 pages.

Vanya
Posted on 01-17-14 07:38 PM (rev. 4 of 01-17-14 07:46 PM) Link | Quote | ID: 155473


Red Koopa
Level: 27

Posts: 37/139
EXP: 104729
Next: 11430

Since: 01-22-13

Last post: 3265 days
Last view: 3264 days
Posted by Chaobomr
Yeah, you might wanna make sure your emulator emulates an NES perfectly. That includes programming issues.


It does. It just didn't say that turning sprite limits back on requires closing the emulator for it to take effect.


At any rate I could fix it simply by redesigning the cursor to either not use the side sprites or simply not use sprites at all.

____________________
Krakenskin Leather Works, my Etsy store.
LordVanya, my art page.
FundamentalEssence, my game development page.

Chaobomr
Posted on 01-17-14 11:09 PM Link | Quote | ID: 155475


Buster Beetle
Banned: Spammer takeover?
Level: 45

Posts: 204/467
EXP: 636554
Next: 23610

Since: 05-07-13
From: The dirty south

Last post: 3452 days
Last view: 3450 days
Posted by Vanya
It does. It just didn't say that turning sprite limits back on requires closing the emulator for it to take effect.
I don't remember that happening to me. Then again, I'm using FCEUXD, if that makes any difference.

____________________
Sorry for the stupidity. That jerk will be dealt with in the most insane way possible.

Vanya
Posted on 01-18-14 03:53 AM Link | Quote | ID: 155478


Red Koopa
Level: 27

Posts: 38/139
EXP: 104729
Next: 11430

Since: 01-22-13

Last post: 3265 days
Last view: 3264 days
That's also what I'm using and the sprite limit didn't turn back on until I closed it and re-opened it.

____________________
Krakenskin Leather Works, my Etsy store.
LordVanya, my art page.
FundamentalEssence, my game development page.

Isstanar
Posted on 01-29-14 06:40 PM (rev. 3 of 01-29-14 06:42 PM) Link | Quote | ID: 155559

Newcomer
Level: 5

Posts: 1/4
EXP: 487
Next: 42

Since: 01-29-14

Last post: 3704 days
Last view: 3275 days
I'm seeing weird graphics issues with this hack and my Everdrive N8.

I understand it might not be a bug and maybe a compatibility issue with the Everdrive, but I thought I would mention it anyways.

The first problem I noticed occurred after I selected a robot master, the background wouldn't change from the select screen you first see with all the robot masters. Then after you select one, the animation of the robot master jumping into the middle of the screen with their text occurs, but just kind of pastes over the background.

The other problem, and the one that makes it impossible to play, happens when you are on one of the stages moving right and new sections of the stage are being drawn onto the screen. The new sections of the stage seemed jumbled around and will keep jumbling around as you move right. All the graphics looks normal when you start a stage though.

I applied this patch to the "Megaman (U) [!].nes" rom with Lunar IPS.

I can take pics later when I get home if you would like.

infidelity
Posted on 01-29-14 07:03 PM (rev. 4 of 01-29-14 11:04 PM) Link | Quote | ID: 155560


Fuzz Ball
Level: 66

Posts: 485/968
EXP: 2362674
Next: 99177

Since: 05-24-07

Last post: 930 days
Last view: 786 days
Sounds like a mirroring issue.

Need to properly set vertical/horizontal mirroring values within MMC3's $A001 register.

Find all the mirror writes to whatever MMC1 register it uses, i forget the register, then create a jmp routine from that spot, and do 2 cmps for 2 specific mirroring values, then have them branch to the MMC3 equivilant mirroring value into $A001.

EDIT
In MMC1, $8000-$9FFF uses the last 2 bits for mirroring. So #2 is vertical, and #3 is horizontal.

In MMC3, $A001 uses the last bit. So #0 is vertical, and #1 is horizontal.

So however Megaman originaly stored to $8000-$9FFF, do searches for...

A902 20#### / A902 4C####
A903 20#### / A903 4C####


Now you can go about this 2 ways.

1. The actual location to where the jsr/jmp's take you, perform a cmp routine to determine if either #2 or #3 are being sent here, and whichever is true, have it branch to either A900 8D01A0 or A901 8D01A0 for the mmc3 proper mirroring.

2. If the actual location is being used by other things within the rom, you will have to find free space to create your custom mmc3 mirror routine, and you will have to change each jsr/jmp within the entire rom, that does mmc1 mirroring, and them jsr/jmp to your new mmc3 mirroring routine.

Good luck. :-)

Isstanar
Posted on 01-29-14 11:03 PM Link | Quote | ID: 155562

Newcomer
Level: 5

Posts: 2/4
EXP: 487
Next: 42

Since: 01-29-14

Last post: 3704 days
Last view: 3275 days
Posted by infidelity
Sounds like a mirroring issue.

Need to properly set vertical/horizontal mirroring values within MMC3's $A001 register.

Find all the mirror writes to whatever MMC1 register it uses, i forget the register, then create a jmp routine from that spot, and do 2 cmps for 2 specific mirroring values, then have them branch to the MMC3 equivilant mirroring value into $A001.

EDIT
In MMC1, $8000-$9FFF uses the last 2 bits for mirroring. So #2 is vertical, and #3 is horizontal.

In MMC3, $A001 uses the last bit. So #0 is vertical, and #1 is horizontal.

So however Megaman originaly stored to $8000-$9FFF, do searches for...

A902 20#### / A902 4C####
A903 20#### / A903 4C####


Now you can go about this 2 ways.

1. The actual location to where the jsr/jmp's take you, perform a cmp routine to determine if either #2 or #3 are being sent here, and whichever is true, have it branch to either A900 8D01A0 or A901 8D01A0 for the mmc3 proper mirroring.

2. If the actual location is being used by other things within the rom, you will have to find free space to create your custom mmc3 mirror routine, and you will have to change each jsr/jmp within the entire rom, that does the mmc1 mirroring.

Good luck. :-)


I thank you for taking the time to try and help me solve the problem, but all of that is lost on me since I have never done any hacking lol. Unless you were just saying that so Retrorain sees it, since he made the hack. I was posting my issue because Retrorain said to post any bugs with the hack from the romhacking.net webpage for this hack. Again though, thank you for trying.

tomaitheous
Posted on 01-30-14 12:59 AM Link | Quote | ID: 155563


Level: 9

Posts: 10/11
EXP: 2227
Next: 935

Since: 01-13-14
From: a desert-y place

Last post: 3697 days
Last view: 3726 days
Yeah, sounds like the mapper isn't initialize on startup (mirror control reg). Relying on a specific state because that's how the emulator setups it up by default, will run you into problems on the real hardware.

____________________
http://pcedev.wordpress.com

RetroRain
Posted on 01-30-14 09:59 AM Link | Quote | ID: 155564


Fuzz Ball
Level: 66

Posts: 697/994
EXP: 2432531
Next: 29320

Since: 09-30-07

Last post: 1907 days
Last view: 929 days
Posted by infidelity
Sounds like a mirroring issue.

Need to properly set vertical/horizontal mirroring values within MMC3's $A001 register.

Find all the mirror writes to whatever MMC1 register it uses, i forget the register, then create a jmp routine from that spot, and do 2 cmps for 2 specific mirroring values, then have them branch to the MMC3 equivilant mirroring value into $A001.

EDIT
In MMC1, $8000-$9FFF uses the last 2 bits for mirroring. So #2 is vertical, and #3 is horizontal.

In MMC3, $A001 uses the last bit. So #0 is vertical, and #1 is horizontal.

So however Megaman originaly stored to $8000-$9FFF, do searches for...

A902 20#### / A902 4C####
A903 20#### / A903 4C####


Now you can go about this 2 ways.

1. The actual location to where the jsr/jmp's take you, perform a cmp routine to determine if either #2 or #3 are being sent here, and whichever is true, have it branch to either A900 8D01A0 or A901 8D01A0 for the mmc3 proper mirroring.

2. If the actual location is being used by other things within the rom, you will have to find free space to create your custom mmc3 mirror routine, and you will have to change each jsr/jmp within the entire rom, that does mmc1 mirroring, and them jsr/jmp to your new mmc3 mirroring routine.

Good luck. :-)
infidelity, with all do respect, this is not correct. If Megaman 1 was MMC1, then yes it might. Megaman 1 is UNROM. And the MMC3 Mirroring register isn't $A001. It's $A000. $A001 is the SRAM register, which in the case of my hack, was already enabled.
Posted by tomaitheous
Yeah, sounds like the mapper isn't initialize on startup (mirror control reg). Relying on a specific state because that's how the emulator setups it up by default, will run you into problems on the real hardware.
This is precisely it.

The mapper registers were not written to at startup. This was one of the things I intended to do, so that this ROM would run on real hardware. But, when I was having my bad eye strain, I wanted to get the bare minimum done to get this hack out, or it may have never gotten released. I was at a point where I either finish this hack, or shelve it. And I did not want to shelve all the work I did, especially since I was so close to the end. So I wrote in the readme the list of all the things I wanted to do, but couldn't do for health reasons, and that if I were to do them, they would be in a future release.

However, it wouldn't be difficult at all to write to the mapper addresses. I did a full trace/code-data log on the whole ROM, and there was a ton of free space in the ROM that Capcom never used. After my custom code, there will be some #$20s, and some other values that weren't used in the ROM. That is where I intended to put my mapper initialization code. Then all you'd have to do is a JSR to that code from the code that is run at startup, and the game should work on real hardware. I did also plan ahead for this. I NOPed out the page flags from $C000 - $C007, so that all I'd have to do is put the JSR there. However, having put some initialization code there before, I found that for some reason the code didn't run if put there. I guess for some reason that $C000-$C007 was never meant to be executed line by line, merely written to, as part of the game's original bankswitch routine, which used those page flags.

We'll see how I feel. Because what was mentioned, isn't really a gameplay bug (since it does play fine on emulators), and it can easily be fixed by any hacker that knows ASM. It's just that this project has exhausted me, and did cause me some health problems, and I don't really want to be bothered with it anymore.

But, as I said, it shouldn't be hard to do at all. In fact, I'm not 100% sure on this, but I don't think every mapper address has to be written to. For instance, the mapper addresses $C000 - $E000 are IRQ addresses. I believe with $E000, any value written to it enables IRQs. I don't really know how IRQS work in ROMs, so I'm not sure if Megaman uses them or not. But if it doesn't, then I don't see why you'd need to write to $E000 at startup. From what was mentioned above, it seems as if the only real mapper address that has to be written to, is $A000, which takes care of the mirroring issues. So it could be as simple as this:

JSR Free Space

Free Space:
LDA #$01 (01 is Vertical Mirroring, which Megaman 1 uses)
STA $A000
RTS

Done!

In fact, I already have a piece of code in the ROM that does some initialization. The code that takes care of the Initial CHR Setup and Enables the SRAM address. What may really be all that is required is a simple one-line added piece of code!

This is the piece of code in my hack:


$FF4F:AD 06 01 LDA $0106 = #$01
$FF52:D0 13 BNE $FF67
$FF54:A0 05 LDY #$05
$FF56:B9 6B FF LDA $FF6B,Y @ $FFB7 = #$08
$FF59:99 00 01 STA $0100,Y @ $014C = #$00
$FF5C:88 DEY
$FF5D:10 F7 BPL $FF56
$FF5F:A9 01 LDA #$01
$FF61:8D 06 01 STA $0106 = #$01
$FF64:8D 01 A0 STA $A001 = #$30
$FF67:20 8D D5 JSR $D58D
$FF6A:60 RTS


Simply adding a STA $A000 could solve the whole problem:


$FF4F:AD 06 01 LDA $0106 = #$01
$FF52:D0 13 BNE $FF67
$FF54:A0 05 LDY #$05
$FF56:B9 6B FF LDA $FF6B,Y @ $FFB7 = #$08
$FF59:99 00 01 STA $0100,Y @ $014C = #$00
$FF5C:88 DEY
$FF5D:10 F7 BPL $FF56
$FF5F:A9 01 LDA #$01
$FF61:8D 06 01 STA $0106 = #$01
8D 00 A0 STA $A000 = #$00 <-- Add it here
$FF64:8D 01 A0 STA $A001 = #$30
$FF67:20 8D D5 JSR $D58D
$FF6A:60 RTS


Just add it before or after the $A001 (I prefer before the $A001, because I'm OCD like that ).

But if you add that one line of code in there, you just have to make sure to update all of the JSRs that point to those custom code locations and the table reading codes. Which in the case of the JSRs, you'd have to jot down the code locations before adding that one line of code, and then go in and change them.

Or you could simply add this, at $FFDE:

LDA #$01
STA $A000
RTS

and then simply JSR to it from some code that runs at startup. That would work too.

Like I said, we'll see how I feel. In the meantime, anyone is more than welcome to make a patch that adds this small piece of code, so that it can run on real hardware.

____________________
My YouTube Channel

infidelity
Posted on 01-30-14 01:46 PM Link | Quote | ID: 155566


Fuzz Ball
Level: 66

Posts: 486/968
EXP: 2362674
Next: 99177

Since: 05-24-07

Last post: 930 days
Last view: 786 days
My apologies, idk why my mentality was thinking mm was an mmc1 game. Sorry on the $A000/$A001 mixup too.

RetroRain
Posted on 02-03-14 11:08 PM Link | Quote | ID: 155599


Fuzz Ball
Level: 66

Posts: 700/994
EXP: 2432531
Next: 29320

Since: 09-30-07

Last post: 1907 days
Last view: 929 days
Mega Man: Upgrade Patch v1.2 Released.

This latest version of the Upgrade Patch adds a write to MMC3 Mapper Address $A000 at start-up, to allow the ROM to run on real hardware. Also included in the zip file is a Change Log.

You can get it at the other thread.

Can anyone test the patch for me, to see if it runs on the Everdrive N8 and the real NES?

Thanks.

____________________
My YouTube Channel

Isstanar
Posted on 02-03-14 11:55 PM Link | Quote | ID: 155603

Newcomer
Level: 5

Posts: 3/4
EXP: 487
Next: 42

Since: 01-29-14

Last post: 3704 days
Last view: 3275 days
Posted by RetroRain
Mega Man: Upgrade Patch v1.2 Released.

This latest version of the Upgrade Patch adds a write to MMC3 Mapper Address $A000 at start-up, to allow the ROM to run on real hardware. Also included in the zip file is a Change Log.

You can get it at the other thread.

Can anyone test the patch for me, to see if it runs on the Everdrive N8 and the real NES?

Thanks.


Oh nice, thanks for making that patch. I'll give it a shot when I get home on my Everdrive N8 and let you know how it works.

Isstanar
Posted on 02-06-14 12:19 AM Link | Quote | ID: 155626

Newcomer
Level: 5

Posts: 4/4
EXP: 487
Next: 42

Since: 01-29-14

Last post: 3704 days
Last view: 3275 days
Alright, I guess the board has a posting limit for new people so I had to wait, but I did test the 1.2 Upgrade patch you made on my Everdrive N8

I played through 4 stages and everything seemed to be fine, except for anything that moved through the air like projectiles or flying enemies.

As the projectile/enemy was flying they would randomly disappear then reappear shortly a little distance away continuing their pattern of flight.

For example, the pickaxe-throwing-guys in Gutsman stage would launch their pickaxe in an arc, after it would follow it's arc a little, it would dissapear then reappear lower, but then continue it's arc.


RetroRain
Posted on 02-06-14 03:54 AM (rev. 6 of 02-06-14 07:19 AM) Link | Quote | ID: 155633


Fuzz Ball
Level: 66

Posts: 704/994
EXP: 2432531
Next: 29320

Since: 09-30-07

Last post: 1907 days
Last view: 929 days
I tested the ROM in the emulator, and it plays fine. I played Guts Man stage to see if there was any problems when I got up to the pickaxe enemy, and I didn't see any problem. If you'd like, you can post a video of the problem/s. But, I'm not really sure what else I can do to correct this thing you are talking about. I'm not really familiar with the Everdrive N8 anyway. What exactly is it? Does this ROM show any problems when played on a regular NES? Does the original Mega Man ROM show the same problems you mentioned wnen played on the Everdrive N8?

Does anyone happen to know if the MMC3 Mapper IRQ Adresses $C000 - $E000 have to be written to at start-up? I don't know if Megaman 1 uses IRQs or not. I don't think it does, since I looked at the disassembly, and there is no mention of it. If it doesn't, do they have to be written to anyway? I'm wondering if there is a possibility that not having these written to at start-up is causing the problem that Isstanar is talking about.

Thanks.

Copied from Firebug's Comprehensive NES Mapper Document:


+-------+ +----------------------------------------------+
¦ $C000 +---¦ IIIIIIII ¦
+-------+ ¦ +------+ ¦
¦ ¦ ¦
¦ ¦ ¦
¦ +------- IRQ Counter Register ¦
¦ The IRQ countdown value is ¦
¦ stored here. ¦
+----------------------------------------------+

+-------+ +----------------------------------------------+
¦ $C001 +---¦ IIIIIIII ¦
+-------+ ¦ +------+ ¦
¦ ¦ ¦
¦ ¦ ¦
¦ +------- IRQ Latch Register ¦
¦ A temporary value is stored ¦
¦ here. ¦
+----------------------------------------------+

+-------+ +----------------------------------------------+
¦ $E000 +---¦ xxxxxxxx ¦
+-------+ ¦ +------+ ¦
¦ ¦ ¦
¦ ¦ ¦
¦ +------- IRQ Control Register 0 ¦
¦ Any value written here will ¦
¦ disable IRQ's and copy the ¦
¦ latch register to the actual ¦
¦ IRQ counter register. ¦
+----------------------------------------------+

+-------+ +----------------------------------------------+
¦ $E001 +---¦ xxxxxxxx ¦
+-------+ ¦ +------+ ¦
¦ ¦ ¦
¦ ¦ ¦
¦ +------- IRQ Control Register 1 ¦
¦ Any value written here will ¦
¦ enable IRQ's. ¦
+----------------------------------------------+


____________________
My YouTube Channel

RetroRain
Posted on 05-24-14 06:58 AM (rev. 2 of 05-29-17 12:13 AM) Link | Quote | ID: 156599


Fuzz Ball
Level: 66

Posts: 730/994
EXP: 2432531
Next: 29320

Since: 09-30-07

Last post: 1907 days
Last view: 929 days
Mega Man: Upgrade Patch v1.3 Released.

The game now saves your progress!



This version adds two things:

1. Added writes to all mapper addresses, to ensure that this ROM will run on real hardware.

2. The game saves your lives and completed stages and weapons after you complete a stage, or obtain the special beam weapon, or after returning to the stage select screen from the credits. The game will only save up to the first Dr. Wily stage.

____________________
My YouTube Channel

Chaobomr
Posted on 05-26-14 06:38 PM Link | Quote | ID: 156634


Buster Beetle
Banned: Spammer takeover?
Level: 45

Posts: 325/467
EXP: 636554
Next: 23610

Since: 05-07-13
From: The dirty south

Last post: 3452 days
Last view: 3450 days
I found a glitch, although you may not think it is. See, everytime I get a game over, the game goes back to how many lives I had since the last save. That wouldn't be a problem if I had like 3 extra lives, but I'm at only one. I'm not talking 00 here, yet.

____________________
Sorry for the stupidity. That jerk will be dealt with in the most insane way possible.

RetroRain
Posted on 05-26-14 11:28 PM (rev. 2 of 05-29-17 12:14 AM) Link | Quote | ID: 156636


Fuzz Ball
Level: 66

Posts: 734/994
EXP: 2432531
Next: 29320

Since: 09-30-07

Last post: 1907 days
Last view: 929 days
Thanks for reporting the glitch, Chaobomr. I fixed it. Version 1.4 has been released.

There may be one more version of this hack. But it will be the final version.

THINGS LEFT TO DO FOR THE FINAL VERSION, 1.5:

1. Adding the horizontal bars to cover over the first and last blue bars of the boss preview screen. I already have the horizontal bar graphics added to the CHR.

2. Adding scrolling stars to the boss preview screen (stars are one pixel sprites, with the X coordinates constantly being decremented).

With 1 and 2 above, this would make the boss preview screen look like Mega Man 2's.

3. Program the "PAUSED" text by simply writing to the SPR-RAM during pause mode. The "PAUSED" text I already put in the CHR.

4. Add an option to the title screen, which allows the player to erase their saved progress.

And that should do it. That should complete this package!

____________________
My YouTube Channel
Pages: 1 2 3 4 5 6 7


Main - ROM Hacking - Mega Man Upgrade Patch New thread | New reply

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

Page rendered in 0.029 seconds. (350KB of memory used)
MySQL - queries: 127, rows: 166/167, time: 0.019 seconds.