Nebuleon Fumika
91d7bf5b91
Correct overzealous detection of buffer overruns. It was making the sound crackle constantly, like a record player. Most audible with earphones.
2013-02-02 01:37:16 -05:00
Nebuleon Fumika
d4dd98e8c1
Add an option that controls which element should be more fluid, per game: video or audio.
...
This makes most games playable, but the player can choose to get fluid audio instead of fluid video in sound-test modes or games with epic soundtracks.
2013-02-01 20:09:24 -05:00
Nebuleon Fumika
30fe9eaf6a
While killing time between frames, process audio instead of doing nothing. Also correctly fill the buffer with silence when returning from pause. This reduces or eliminates crackling.
...
The emulator kills time in two circumstances:
* In automatic frameskip mode, without fast forwarding, the emulator kills time if it rendered a frame early.
* In manual frameskip mode, without fast forwarding, the emulator kills time to wait for the next rendered frame.
2013-02-01 18:27:03 -05:00
Nebuleon Fumika
58948ffd1d
Make the audio timing more precise.
...
* Fake out the buffer timing by sending a buffer full of silence when returning from pause. Reduces crackling introduced by the next point.
* Send buffers only once every 23.22 milliseconds, not up to four buffers at once (92.88 milliseconds) and randomly thereafter. Reduces note-length jumpiness.
* Audio may have trouble catching up if external jitter reaches 11.61 milliseconds. That happens if Mode 7 images or filtered modes take a long time to render, or if chips take a long time to execute.
2013-02-01 06:11:59 -05:00
Nebuleon Fumika
58a3dc9b17
Hook fast-forward into Settings.TurboSkipFrames.
2013-02-01 06:10:57 -05:00
Nebuleon Fumika
60f6ffcc70
When starting CATSFC, assume the backlights are both on, so don't delay 100 milliseconds and set both backlights to on.
2013-02-01 00:36:51 -05:00
Nebuleon Fumika
dded216137
Turn off the lower screen's backlight when returning from suspend during emulation.
2013-01-26 20:31:11 -05:00
Nebuleon Fumika
2cf733eef4
Add three hotkeys: temporary fast-forward, sound toggle and return to menu. These hotkeys can be overridden per game so that the global version of the hotkey can be ignored.
...
* Language file fixups related to \n (newlines).
* Pictochat fixups: shorten START and SELECT to ST and SEL. Should still be recognisable.
2013-01-22 04:16:15 -05:00
Nebuleon Fumika
88135c52f8
Remove unneeded volatility, enabling more optimisations. Sound volatility is #define'd away, GUI volatility is simply removed.
2013-01-19 20:28:17 -05:00
Nebuleon Fumika
2bb2ee8c0a
Prepare code to ask for a hotkey. Prepare a temporary fast-forward switch.
2013-01-19 02:24:37 -05:00
Nebuleon Fumika
76e5f4b571
Return to CPU level 0 after emitting sound if we're delaying for early frames.
2013-01-18 03:36:35 -05:00
Nebuleon Fumika
0d5be16895
Revert "Reinstate timer-interrupt audio."
...
This reverts commit 944d9a7294
.
Conflicts:
source/nds/entry.cpp
2013-01-18 03:33:14 -05:00
Nebuleon Fumika
bf5cb54162
Fix multiple compiler warnings: forward declaration, implicit declaration, unused variable, variable used uninitialised, unused function (when not used anywhere else with a #define).
2013-01-18 02:41:32 -05:00
Nebuleon Fumika
5c4e96b326
Remove some unused functions. Raise the CPU frequency for sound mixing if auto frameskip is delaying because it's early.
2013-01-18 01:50:28 -05:00
Nebuleon Fumika
944d9a7294
Reinstate timer-interrupt audio.
...
This reverts commit 0d048d05ee
.
2013-01-17 18:52:22 -05:00
Nebuleon Fumika
0d048d05ee
Revert timer-interrupt audio, but not optimisations done since then. Get the controller status every scanline again.
2013-01-13 05:00:47 -05:00
Nebuleon Fumika
7cfc6b8bf8
Stop using the deprecated function S9xMixSamplesO and use S9xMixSamples instead.
...
Wrap the offset into the audio buffer less often.
2013-01-12 21:02:30 -05:00
Nebuleon Fumika
99b19abca3
Remove 2 extraneous delays. The 100-millisecond delays before ds2_setBacklight() MUST STAY, however, otherwise the emulator can crash with the bottom backlight off if a touch is recognised twice in a row. That happens with some broken styluses, so it's not unexpected.
2013-01-12 20:35:47 -05:00
Nebuleon Fumika
253902a30d
Fix a buffer overflow in audio handling code that corrupted memory used to carry the state of the GUI.
2013-01-12 20:34:15 -05:00
Nebuleon Fumika
7896e83aa9
Stop constantly testing for 16-bit and stereo in sound handlers. Define FOREVER_16_BIT_SOUND and FOREVER_STEREO and use them throughout the code.
...
This is essentially commit 6b36e79013
, but for sound instead of graphics.
2013-01-11 19:22:59 -05:00
Nebuleon Fumika
0028091d0f
Fix the interrupts glitching sound. Put the sound back at 22050 Hz.
2013-01-11 03:31:03 -05:00
Nebuleon Fumika
3a1708474f
Reinstate some delays needed by the code to avoid crashing, and actually explain in code comments why they're needed.
...
I know ds2_setBacklight(unsigned int) needs a delay before it, otherwise if done too close to another call, it crashes.
This partially reverts commit 8951fdff1a
.
2013-01-11 03:28:59 -05:00
Nebuleon Fumika
03a0d3457b
Attempt to fix the crashing with sound interrupts, part 2: Stop the timer before the menu, and restart it after it ends.
2013-01-09 03:21:44 -05:00
Nebuleon Fumika
8872841ad1
Try fixing a crash in the sound interrupt.
2013-01-08 23:53:31 -05:00
Nebuleon Fumika
4f9bd94497
Configurable interrupt interval for the sound timer. Right now, only 22050 Hz audio at 2000-microsecond intervals works.
2013-01-08 15:08:53 -05:00
Nebuleon Fumika
12c5afbe60
GLORIOUS interrupt-based sound playback. Now, the note-length-hopping problem isn't as apparent anymore, and automatic frame skipping doesn't go to 8 FPS all the time in Super Mario World. Thank the deities!
...
Reverses the auto frameskip synchronisation from commit dac11c74ac
, because that doesn't play well with interrupts.
2013-01-08 03:23:55 -05:00
Nebuleon Fumika
7d57e5aa45
Require auto_equivalent_skip to be greater than 0 before decrementing it if the code is drawing a frame early in automatic frame skip mode. Otherwise, overflow occurs, and we skip 4 billion images.
2013-01-07 20:46:10 -05:00
Nebuleon Fumika
377c6bcadb
Revert "Add a bit that tolerates 1/16 latency per frame in automatic frameskip mode."
...
This reverts commit d9b6322caa
.
2013-01-07 19:41:29 -05:00
Nebuleon Fumika
42c8a90d38
Add a bit that tolerates 1/16 latency per frame in automatic frameskip mode.
...
Remove old automatic frameskip code.
2013-01-07 16:21:32 -05:00
Nebuleon Fumika
dac11c74ac
Smooth out the automatic frame skipping such that it doesn't go from 1 FPS to 8 FPS right away and constantly. The equivalent frame skip will be 2, 3, 5 or 8 most of the time, depending on the game, and will vary a bit depending on rendering demands.
...
For example, the frame skipping in Super Mario World is 3 on the map and in graphically simple levels, and 5 in complex levels.
2013-01-07 04:38:35 -05:00
Nebuleon Fumika
8447b6304c
Fix an off-by-one in the manual frameskip code. It would raise the sound speed by 25% if frame skip 3 (Show 1 in 4) rendered a frame early.
...
Optimise the controller code. I don't expect to allow remapping any time soon, because the DS has buttons for every single SNES controller button and nothing more.
2013-01-07 03:28:22 -05:00
Nebuleon Fumika
c01c25febe
Add support for user-selected and automatic frame skipping. Add support for PAL timings (20 ms per frame).
...
User-selected frameskip causes slowdowns if the game runs slower than the resulting frame rate, but synchronises correctly if the game runs faster.
Automatic frame skipping is still the default. It now only skips up to 8 frames, but in some games still skips that entire 8 frames. What's needed is an algorithm that averages frame latencies over a few seconds and skips while the latency is LOWER than the average.
2013-01-07 02:16:34 -05:00
Nebuleon Fumika
1c48900fda
Sync ALL bits of the joypad again. This may make controls a bit slower to parse, but is required by Super Mario All-Stars at least.
2013-01-05 04:01:01 -05:00
Nebuleon Fumika
7c2a30c5b5
Sleep when the lid is closed AND emulation is running. I don't know to what extent this will save on battery usage, though I do set the DSTWO's CPU to the lowest frequency while it sleeps.
2013-01-02 03:20:47 -05:00
Nebuleon Fumika
ac4de708b5
Make Display Mode 4 an antialiased whole-screen mode.
...
* source/nds/displaymodes.cpp: Rewritten, assigned copyright to myself (GPLv2).
* CATSFC/system/language.msg: Changed the English and French text for display modes.
2013-01-02 01:18:18 -05:00
Nebuleon Fumika
c01a2a4216
Keep the audio processing unit (APU) enabled even when the user disabled the audio for a game. This allows some games that synchronise on the APU's actions to continue working.
2012-12-28 01:45:40 -05:00
Nebuleon Fumika
963c3459e5
Accidentally committed the previous revision with sound functions emptied.
2012-12-27 18:10:31 -05:00
Nebuleon Fumika
6b36e79013
Speed up rendering by an unknown amount.
...
gfx.cpp, others: Avoid always checking for Settings.SixteenBit if FOREVER_16_BIT is defined.
port.h: Define FOREVER_16_BIT below PIXEL_FORMAT.
2012-12-27 18:02:03 -05:00
Nebuleon Fumika
0f60f047f5
Add the update methods for the upper and lower screen into defines.
2012-12-26 15:40:35 -05:00
Nebuleon Fumika
139c793b58
Smoother sound. Raise the sound sampling frequency to 48000 Hz.
2012-12-26 11:29:51 -05:00
Nebuleon Fumika
9c1742f6cb
Universally use update method 2 for the lower screen and 0 for the upper screen. Method 1 causes problems after about 15 minutes; despite the double-buffering, screen updates start to tear in the middle consistently.
2012-12-26 11:29:47 -05:00
Nebuleon Fumika
a194b85003
Preliminary Snes9x-based cheat code support. Not tested, because the file selection interface freezes when it gets to the folder containing Mightymo's cheat files, whereas it did not do this before with the converted Mightymo cheats. (335 files -> 679, though.)
2012-12-22 22:16:55 -05:00
Nebuleon Fumika
a0d0c5e7a5
Eliminate the latency of button press recognition, which was bad enough to lose keys entirely sometimes, and could otherwise delay a button press or release by 200 ms.
...
This was the entire reason I created the fork, and I finally did it! It syncs the controls every scanline of a frame, which costs about 60,000 MIPS instructions per frame to deal with. Luckily, the processor runs at 396 MHz, which means the cost of checking the controls is 1% of the CPU's power.
2012-12-21 03:50:10 -05:00
Nebuleon Fumika
286bfd5805
Sync sound.
...
In addition to having less sound skipping going on, certain platformer games (I'm looking at you, Super Mario World) are helped by having more synchronised controls. In other words, synchronising the audio also synchronises the controls a bit more.
2012-12-18 00:40:18 -05:00
Nebuleon Fumika
8951fdff1a
Remove various explicit delays and reduce screen tearing when drawing emulated screens.
2012-12-18 00:02:49 -05:00
Kitty Draper
d40ae99422
first commit
2011-03-05 21:39:25 -05:00