More NSF Requests
Moderator: Moderators
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
Ripped the PCM samples for this. (added a missing bank)
Doesn't seem to work in NSFPlay 2.4 Beta 16.
Doesn't seem to work in NSFPlay 2.4 Beta 16.
- Attachments
-
Super Jeopardy! (SFX).nsf
- (72.89 KiB) Downloaded 461 times
Re: More NSF Requests
Hey MrNorbert, I tried fixing the Skate or Die 2 NSF unsuccessfully. At the moment the distortion guitar sample is a little flat (lower in frequency than it should be.) I tried cycle counting your modified PCM routine, both adding and removing NOPs (with assuring the branch operations offset correctly.) When I added NOPs (strangely) the samples played faster and reversely when I removed them the samples played more slowly; but in extreme variance. I was not able to equate the exact, correct amount of cycles to assure that the tuned, distorted guitar samples played at their correct tuning.
Were you able to take a look at this?
Edit: In theory, seemingly, if an operation with only a few more cycles (maybe 2-3) was added to the playback routine of the turned, guitar sample routine, it might be played at the correct frequency.
Were you able to take a look at this?
Edit: In theory, seemingly, if an operation with only a few more cycles (maybe 2-3) was added to the playback routine of the turned, guitar sample routine, it might be played at the correct frequency.
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
I tried fussling with the playroutine, but I couldn't fix it yet. Anyways... I marked it as "buggy".B00daW wrote:Hey MrNorbert, I tried fixing the Skate or Die 2 NSF unsuccessfully. At the moment the distortion guitar sample is a little flat (lower in frequency than it should be.) I tried cycle counting your modified PCM routine, both adding and removing NOPs (with assuring the branch operations offset correctly.) When I added NOPs (strangely) the samples played faster and reversely when I removed them the samples played more slowly; but in extreme variance. I was not able to equate the exact, correct amount of cycles to assure that the tuned, distorted guitar samples played at their correct tuning.
Were you able to take a look at this?
Edit: In theory, seemingly, if an operation with only a few more cycles (maybe 2-3) was added to the playback routine of the turned, guitar sample routine, it might be played at the correct frequency.
As for the next batch:
Erunaaku No Zaihou - Elnark No Zaihou - added SFX.
Mendel Palace / Quinty: added sfxs, and missing fanfares.
WWF Steel Cage: added SFXs to it, didn't bothered with samples yet.
- Attachments
-
Erunaaku No Zaihou - Elnark No Zaihou (SFX).nsf
- (8.17 KiB) Downloaded 473 times
-
Mendel Palace (SFX).nsf
- (31.36 KiB) Downloaded 437 times
-
Quinty (SFX).nsf
- (31.35 KiB) Downloaded 442 times
-
WWF Wrestlemania - Steel Cage Challenge (NTSC) (SFX).nsf
- (32.13 KiB) Downloaded 436 times
-
WWF Wrestlemania - Steel Cage Challenge (PAL) (SFX).nsf
- (32.13 KiB) Downloaded 452 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
SFX rerips.
- Attachments
-
Lipstick #.3 - OL Hen (SFX).nsf
- (24.13 KiB) Downloaded 449 times
-
Lipstick #.2 - Joshi Gakusei Hen (SFX).nsf
- (24.13 KiB) Downloaded 438 times
-
Lipstick #.1 - Lolita Hen (SFX).nsf
- (24.13 KiB) Downloaded 457 times
-
Feng Shen Bang - Zhu Lu Zhi Zhan - Fong Shen Bang - Zhu Lu Zhi Zhan (SFX).nsf
- (20.13 KiB) Downloaded 455 times
-
Bishoujo Mahjong Club (SFX).nsf
- (28.13 KiB) Downloaded 425 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
SFX rerips.
- Attachments
-
Lipstick #.5 - Stewardess Hen (SFX).nsf
- (24.13 KiB) Downloaded 470 times
-
Lipstick #.4 - Hakui No Tenshi Hen (SFX).nsf
- (24.13 KiB) Downloaded 449 times
- rainwarrior
- Posts: 8763
- Joined: Sun Jan 22, 2012 12:03 pm
- Location: Canada
- Contact:
Re: More NSF Requests
From: Super Jeopardy! (SFX).nsf
- Changed version to 2 (header $05)
- Added non-returning INIT flag ($20 in header $7C)
- Added small INIT stub at $C130 for NSF2:
There was a bug in beta 16 that ended up cutting off the first second of sound of a non-returning INIT, now fixed in beta 18: download
Adapted this to work with NSF2:MrNorbert1994 wrote:Ripped the PCM samples for this. (added a missing bank)
Doesn't seem to work in NSFPlay 2.4 Beta 16.
- Changed version to 2 (header $05)
- Added non-returning INIT flag ($20 in header $7C)
- Added small INIT stub at $C130 for NSF2:
Code: Select all
CPY #$80
BNE :+
RTS ; skips the first INIT if this is an NSF2 player
:
JMP $C022 ; previous INIT
- Attachments
-
Super Jeopardy! (SFX) NSF2.nsf
- (72.89 KiB) Downloaded 465 times
- rainwarrior
- Posts: 8763
- Joined: Sun Jan 22, 2012 12:03 pm
- Location: Canada
- Contact:
Re: More NSF Requests
So I took a closer look at the Skate or Die 2 rip.
It looks like the technique used in that rip was to look at the current pitch/samplerate control ($C7) and look up in a table ($DF00) how many samples to run per PLAY event. Then at the end of every PLAY it would run that many samples then return. (A variable was created at $0100 for a sample counter?)
I don't think the problem was pitch exactly, maybe it was more about not running enough samples to fill the frame (i.e. having a much bigger PCM interruption each frame than in the original, reducing the quality of the output)...
Anyway, I have attempted to undo the modifications of that technique and turn it into a true NSF2 "non-returning INIT" thing. I basically restored the original sample loop from the game, replacing that counting loop with the original infinite loop that waits on a signal ($C6) to play a new PCM sound. Now at the end of second INIT it enters this loop, and PLAY does not do any PCM sample work. Instead PLAY is now interrupting the infinite sample loop in INIT.
However, this technique will only work in NSFPlay 2.4, since nothing else has implemented NSF2 yet (essentially still an idea in beta testing... but that's why I wanted to modify this rip to test it).
This does seem to match emulation of the NES ROM's title screen pretty closely now. This may not be an ideal rip, since I've basically worked backwards from that heavily modified technique to try and restore something closer to the original for NSF2, but not sure if I left a mess behind since I am not very familiar with the rest of how the rip was done (I might be missing something important). It would probably be cleaner if done with NSF2 in mind from the start.
I think as an alternative to NSF2 you might get a similar result from the original rip by reviewing the tables at $DF00. Maybe the sample counts are just a little low? Not sure. The DEC $0100 does throw off the loop by 3 cycles (vs. LDA $06 in the original), but that's probably not a significant difference with how low the samplerates are.
Edit: Added a second version with what I think is a better INIT stub, but it assumes that only track 0 needs the infinite sample loop. The SFX samples seem to just play straight from INIT, and all the other music tracks I think just use DPCM, never PCM? If that assumption is correct then this (v2) is better. The new stub looks like this:
This seems to be more compatible with non-NSF2 players (everything plays, but the samples are missing from track 0 without NSF2 features), and also reduces CPU usage by not using the infinite INIT sample loop on any of the tracks that don't need it. (This is the v2 NSF below.)
Recorded the original from my NES + PowerPak just to compare to this rip. Have attached an MP3 demonstration. It seems pretty close, though the samples do seem very slightly higher pitched in the rip (not sure what this could be due to... I think the sample loop itself should match exactly now... not sure if this is might just be due to not spending extra time in PLAY to account for graphics update etc...)
It looks like the technique used in that rip was to look at the current pitch/samplerate control ($C7) and look up in a table ($DF00) how many samples to run per PLAY event. Then at the end of every PLAY it would run that many samples then return. (A variable was created at $0100 for a sample counter?)
I don't think the problem was pitch exactly, maybe it was more about not running enough samples to fill the frame (i.e. having a much bigger PCM interruption each frame than in the original, reducing the quality of the output)...
Anyway, I have attempted to undo the modifications of that technique and turn it into a true NSF2 "non-returning INIT" thing. I basically restored the original sample loop from the game, replacing that counting loop with the original infinite loop that waits on a signal ($C6) to play a new PCM sound. Now at the end of second INIT it enters this loop, and PLAY does not do any PCM sample work. Instead PLAY is now interrupting the infinite sample loop in INIT.
However, this technique will only work in NSFPlay 2.4, since nothing else has implemented NSF2 yet (essentially still an idea in beta testing... but that's why I wanted to modify this rip to test it).
This does seem to match emulation of the NES ROM's title screen pretty closely now. This may not be an ideal rip, since I've basically worked backwards from that heavily modified technique to try and restore something closer to the original for NSF2, but not sure if I left a mess behind since I am not very familiar with the rest of how the rip was done (I might be missing something important). It would probably be cleaner if done with NSF2 in mind from the start.
I think as an alternative to NSF2 you might get a similar result from the original rip by reviewing the tables at $DF00. Maybe the sample counts are just a little low? Not sure. The DEC $0100 does throw off the loop by 3 cycles (vs. LDA $06 in the original), but that's probably not a significant difference with how low the samplerates are.
Edit: Added a second version with what I think is a better INIT stub, but it assumes that only track 0 needs the infinite sample loop. The SFX samples seem to just play straight from INIT, and all the other music tracks I think just use DPCM, never PCM? If that assumption is correct then this (v2) is better. The new stub looks like this:
Code: Select all
; double-INIT stub at $D170
cpy #$80 ; first init
bne @second
cmp #0 ; track 0?
beq :+
rts ; delay INIT*
:
jmp $D017 ; original rip's INIT
@second:
cpy #$81 ; second init
bne @original
cmp #0 ; track 0?
bne @original ; delayed INIT*
jmp $DDF2 ; second INIT is infinite sample loop for track 0
;
@original:
jmp $D017 ; original INIT & fallback for non-NSF2 players (no sample loop)
; * The reason for the delayed INIT is that NSFPlay does not output sound during the first INIT.
; So for the SFX sample tracks that just play a sample straight out of INIT,
; this delays the sample output until sound output is being generated.
Recorded the original from my NES + PowerPak just to compare to this rip. Have attached an MP3 demonstration. It seems pretty close, though the samples do seem very slightly higher pitched in the rip (not sure what this could be due to... I think the sample loop itself should match exactly now... not sure if this is might just be due to not spending extra time in PLAY to account for graphics update etc...)
- Attachments
-
- Skate or Die 2 NSF2 v2 - NES L - NSFPlay R.mp3
- (3.91 MiB) Downloaded 436 times
-
Skate Or Die 2 - The Search For Double Trouble (SFX) NSF2 v2.nsf
- (127.56 KiB) Downloaded 437 times
-
Skate Or Die 2 - The Search For Double Trouble (SFX) NSF2.nsf
- (127.56 KiB) Downloaded 432 times
- rainwarrior
- Posts: 8763
- Joined: Sun Jan 22, 2012 12:03 pm
- Location: Canada
- Contact:
Re: More NSF Requests
As an experiment I added an ~800 cycle wait to the end of the PLAY routine to see how much effect it would have on the pitch of the samples. It more or less did exactly what I theorized. Here's another version of the rip with that delay added. This one seems to be closer, but now very slightly lower in pitch than the version recorded from my NES.
So basically that means that for pitched samples interrupted by NMI like this, the amount of time you spend in NMI is relevant to the pitch. All of that interrupted time counts, even though it's not evenly spread across the samples, and in aggregate it more or less affects the pitch that way (and makes up the difference in extra harmonics from distortion, I suppose).
Which I guess means that a 100% accurate NSF rip isn't entirely practical here, unless we want to include a surrogate for every cycle of the PPU update and anything else non-music related Skate or Die 2 does in its introduction. I don't think that's really a fair task for an NSF rip. Maybe approximating it with some fixed delay like this is close enough... Unfortunately this means that if a hardware NSF2 player needs to pad the PLAY interruption with some extra time (e.g. user input) it will slightly lower the pitch of the samples even more. :S I suppose this is just a natural consequence of how un-robust this interrupted sample playback technique is.
Anyway, the length of the wait loop in this rip is controlled by a LDX immediate parameter at offset $05E61 in this NSF file. Currently at $A0 = 160 loops * 5 cycles = 800 cycles. If someone feels like trying to get the best approximation they can try tweaking that value and comparing pitches. (The cycles added will detune the samples roughly by their percentage of a frame.) At this point it's close enough for me, though, so I don't think I'll try any further adjustment.
So basically that means that for pitched samples interrupted by NMI like this, the amount of time you spend in NMI is relevant to the pitch. All of that interrupted time counts, even though it's not evenly spread across the samples, and in aggregate it more or less affects the pitch that way (and makes up the difference in extra harmonics from distortion, I suppose).
Which I guess means that a 100% accurate NSF rip isn't entirely practical here, unless we want to include a surrogate for every cycle of the PPU update and anything else non-music related Skate or Die 2 does in its introduction. I don't think that's really a fair task for an NSF rip. Maybe approximating it with some fixed delay like this is close enough... Unfortunately this means that if a hardware NSF2 player needs to pad the PLAY interruption with some extra time (e.g. user input) it will slightly lower the pitch of the samples even more. :S I suppose this is just a natural consequence of how un-robust this interrupted sample playback technique is.
Anyway, the length of the wait loop in this rip is controlled by a LDX immediate parameter at offset $05E61 in this NSF file. Currently at $A0 = 160 loops * 5 cycles = 800 cycles. If someone feels like trying to get the best approximation they can try tweaking that value and comparing pitches. (The cycles added will detune the samples roughly by their percentage of a frame.) At this point it's close enough for me, though, so I don't think I'll try any further adjustment.
- Attachments
-
Skate Or Die 2 - The Search For Double Trouble (SFX) NSF2 v3.nsf
- (127.56 KiB) Downloaded 469 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
Actually... if we want to go even deeper, my first rerip attempt doesn't work on players like GNSF or SlicksNSF. 

- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
Reripped properly. 
Eliminated the ingame bankswitch code, and relocated bank 2's SFXs and eliminated sfxs that were initalized a lot.

Eliminated the ingame bankswitch code, and relocated bank 2's SFXs and eliminated sfxs that were initalized a lot.
- Attachments
-
Sansara Naga (SFX).nsf
- (24.48 KiB) Downloaded 415 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
The first two Final Fantasy games are a catastrophic pain in the ass.
In this attempt I tried with II for the second time.
A lot of fanfare jingles and stuff is in the hardwared bank and the other sound effects are in separate banks.
This rip tries to locate the hardwared bank jingles + 1 bank that I was able to find it's init and play addresses.
In this attempt I tried with II for the second time.
A lot of fanfare jingles and stuff is in the hardwared bank and the other sound effects are in separate banks.
This rip tries to locate the hardwared bank jingles + 1 bank that I was able to find it's init and play addresses.
- Attachments
-
Final Fantasy II (SFX).nsf
- (36.13 KiB) Downloaded 421 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
Updated my Conan NSF rip.
Apparently this shit driver seems to store sound effects on separate init and separate play addresses PER sfx.
Seriously... why...
I probably miss a bunch of others.
Apparently this shit driver seems to store sound effects on separate init and separate play addresses PER sfx.
Seriously... why...
I probably miss a bunch of others.
- Attachments
-
Conan - The Mysteries Of Time (SFX) (Incomplete).nsf
- (32.13 KiB) Downloaded 421 times
-
- Posts: 1560
- Joined: Thu May 19, 2005 11:30 am
Re: More NSF Requests
The menu tune and some of the non-pirated mini-games on the Education Computer 26-in-1 from GameStar. All of the mini-games are also found on other Educational Computer cartridges from that company, which is why I believe it's better to keep them as separate NSF files.
- Attachments
-
- GameStar - 26-in-1 (partial).7z
- (20.63 KiB) Downloaded 442 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
Added noise SFXs.
- Attachments
-
Challenge Of The Dragon (Sachen) (SFX).nsf
- (8.78 KiB) Downloaded 401 times
- MrNorbert1994
- Posts: 1015
- Joined: Tue May 06, 2014 1:50 pm
- Location: Szeged, Hungary
- Contact:
Re: More NSF Requests
Fresh new rips from my cartridge dumps.
- Attachments
-
GLK Book 48 In 1.nsf
- (2.09 KiB) Downloaded 438 times
-
Firehawk (PAL) (SFX) (NES - PAL Optimazed).nsf
- (7.66 KiB) Downloaded 382 times