Posting in infidelity's words -
UPDATED TO NEW VERSION - 7-18-2016 !!!!WARNING!!!! - FOR THOSE UPDATING, YOU MUST DELETE ANY PREVIOUSLY CREATED IN-GAME SAVES FROM WHICH EVER EMULATOR. THIS NEW UPDATE NEEDS TO START FRESH, SINCE THE SRAM HAS BEEN ALTERED. YOU WILL GET A GREY SCREEN UPON BOOTUP IF YOU DON'T.
I honestly never thought i'd go back to this game, once it was released. But there was a significant issue that had me upset a lot, and it was the slowdown issue with the sound engine. That sole reason, was why I went back with the limited time I had, and tried to decipher how to either fix completely, or make it considerably better. Then I started implementing things that I personally wished I did before, but didn't have the time, nor the rom space. So i'll list the following as to what I did.
1: Slowdown of Sound Engine Cut Down ALOT
Back when this was released in 2014, I was talking with members at NESDEV, on how to solve the slowdown issue with my sound engine. The majority of responses, was that I should've had my sound engine as one of the last routines to be loaded within the end of the NMI. So I rearranged my asm, and placed that sound engine at the end. But every time I would get significant crashes, and I couldn't figure out a solution, so I left it as it was.
Fast forward almost two years, I was going to literally step into every bit of code within the sound engine, to figure why it was crashing at the end of the NMI. While I was stepping, an interrupt would occur and then finish and then go back into the sound engine. I kept getting frustrated saying, why wont you stop interrupting! I'm trying to rea...... wait a minute...... So it was then, that I located an unused register, and I performed the following. When the sound engine is about to be initiated, I set the free register to not equal (01) Now here's the part of success, After the beginning of my NMI when the A,X,Y are pushed to the stack, I do a check of the register that was set at the beginning of the sound engine, if it's not equal, I jump to the pull stack at the very end of the NMI. I couldn't believe it when I restarted the game, it didn't crash, and there was no slowdown at Link's house with the octorocks, and links sprite shield!
That's not to say that it is totally fixed, there is still slowdown here and there, but it is NOTHING like my last version. I also placed Link's sprite shield asm at the end of the NMI, because that uses a lot of cpu since I do lots of checks and repositionings of it. I went to various places that I know horrific slowdown takes place, and it was either normal, or a slight slowdown! This is something that stopped me from enjoying my own work, and has been the subject of displeasure ive read throughout the internet. So I'm very happy with just this one fix, which is why I feel this worthy of a re-release. But then after that, I wanted to add things for me personally.
2: 3 Save Game File System
I destroyed the original $6000-$7FFF sram when designing my game, because I tried using more space for things, the sound engine ram registers are located within there. The original Zelda HEAVILY uses the sram for PRG, because 3 quarters of the HW bank are occupied with DPCM data. When I converted my rom to MMC5, I wasn't that fully experienced with register $5113, which allows you to swap out 4 pages (2000 bytes each) of sram. It wasn't until my Super Mario All-Stars NES project, that I fully understood how to take advantage of that.
So just a few days ago, I went back to see if I could pull it off within Legend of Link. I'll spare getting into details, but I was able to make it so just before the registration screen kicks on, I simply copy a byte at a time from the 1st sram page, then i'll swap the page, and paste that byte into the new sram page, and I do that for the rest of the pages. And I added a safety check, so that my routine doesn't overwrite saved data once it's created. Then it was just a cosmetic issue for me to come up with, in order to use the File system on the registration screen. So glad I got that working! It always upset me when players would defeat the game, and were faced with having to delete all that they did to start over fresh. I'm sorry it took almost two years, but this has finally been resolved.
3: Inventory Items In The 3 Boxes & Current B Button Item Now Saved & Restored
This one was just for kicks. I could've cared less about having this. But I discovered I had just a slither of free sram that I could utilize for this idea. It was an incredibly easy thing to perform, so I'm glad I added it in.
4: When you defeat the game, the file that you used will now have a flashing star.