aboutsummaryrefslogtreecommitdiff
path: root/source/nds/entry.cpp
AgeCommit message (Collapse)Author
2013-02-14Add hotkeys to quickly load from and save to saved state #1, as well as to ↵Nebuleon Fumika
toggle full-screen (going from mode 3, middle of screen, to mode 4, full-screen smoothed). This commit uses text that has not been validated in some languages.
2013-02-09Add retro sound as a setting in all languages except Chinese.Nebuleon Fumika
2013-02-08Merge branch 'master' into 8bitsoundNebuleon Fumika
Conflicts: source/nds/entry.cpp
2013-02-08Require one audio buffer to be free again. Otherwise, if the 4 buffers get ↵Nebuleon Fumika
full, it's already game over, and getAudiobuff becomes NULL for about 400 milliseconds, stopping all emulation.
2013-02-07Synchronise fractions of a hertz correctly in the audio output timing code ↵Nebuleon Fumika
to avoid buffer overruns. Buffer overruns pause the game for about half a second.
2013-02-07Remove remnants of a failed auto-CPU implementation. Changing CPU speeds ↵Nebuleon Fumika
on-the-fly is just not stable on the DSTwo.
2013-02-06Remove 320 KiB of memory allocations in APU emulation that were completely ↵Nebuleon Fumika
unused but constantly re-zeroed. Frees up 320 KiB for other uses, and saves ~4 milliseconds at emulator startup, when resetting the APU and when loading a new game.
2013-02-06Raise the sound frequency from 22050 Hz to 32000 Hz, which is like the SNES. ↵Nebuleon Fumika
Use sound interpolation to make it sound even more like the SNES.
2013-02-06Reinstate frame skipping options 0 and 1, but keep the new meaning (>= 2 ↵Nebuleon Fumika
equivalent skip level) for automatic frame skipping. Remove the automatic CPU frequency option, which was making audio emit 0.25 second of silence every so often.
2013-02-06Allow all audio buffers to get full again before declaring underflow.Nebuleon Fumika
2013-02-06Fix settings not getting loaded with a ROM provided by plugin arguments.BassAceGold
2013-02-06Document the auto CPU behavior a bit.Nebuleon Fumika
2013-02-06Implement automatic CPU frequency switching, which improves battery life if ↵Nebuleon Fumika
playing games that don't use all of the MIPS CPU. If all of it is indeed needed, then the game will constantly play at 396 MHz.
2013-02-05Force both manual and automatic frameskipping to be at or above 2. Resets ↵Nebuleon Fumika
the default value for all games which previously had this value configured.
2013-02-05Change the upper screen updates to be double-buffered. Require that one ↵Nebuleon Fumika
audio buffer be free (1 out of 4).
2013-02-04Fully integrate BassAceGold's libraries, finally. The README still states ↵Nebuleon Fumika
that 1.2 is required to overwrite 0.13's stuff; really, 0.13 is needed only for `gcc`. So the sequence goes 0.13's `gcc` -> 1.2 -> BassAceGold's libraries -> make `libds2a.a`. DMA function names changed to match BassAceGold's.
2013-02-03Synchronise the controller status more spread out inside a rendered frame:Nebuleon Fumika
* before rendering a background; * before rendering sprites; * while rendering more than 128 samples of audio at once ("Prefer fluid video"); * after every 16 scanlines of CPU execution instead of every 1; * while waiting for an audio buffer to become available; * while killing time between frames with fast-forward disabled. Controller presses and releases are now combined in a DS button bitfield using a shorter 32-bit algorithm. See entry.cpp:NDSSFCAccumulateJoypad and #define ACCUMULATE_JOYPAD in the source. This is still not suitable for playing platformers frame-perfectly, but it's much better than half a second of latency to press or release a button, and one still needs to press buttons a bit more than just light taps. I'd say 50 milliseconds is the latency now. Platformers requiring more precision can be played with frameskip 0. DMA does not require double-buffered displaying, so synchronise the controller more often by disabling double-buffered displaying again.
2013-02-03Faking out the sound synchronisation with a buffer of silence wasn't necessary.Nebuleon Fumika
2013-02-03Write back the data cache before using DMA to draw emulated frames.Nebuleon Fumika
2013-02-03Force waiting for a screen to be transferred (update mode 1) because ↵Nebuleon Fumika
otherwise the next screen can go into DMA. Use channel 1 instead of channel 5, which must be busy for some reason.
2013-02-03Fix a name clash between Snes9x's dma.h and the DS2 dma.h by renaming the ↵Nebuleon Fumika
DS2 dma.h to ds2_dma.h. Add preliminary support for drawing emulated screens with DS2 DMA.
2013-02-03Make it easier to change the "high" and "low" CPU frequencies, as well as to ↵Nebuleon Fumika
switch to the user's chosen frequency for the game. Conflicts: source/nds/ds2_main.c source/nds/entry.cpp source/nds/gui.c
2013-02-02Fix an oddity in the sound when returning from a global mute. Fixes music ↵Nebuleon Fumika
loading in Super Mario World.
2013-02-02Correct overzealous detection of buffer overruns. It was making the sound ↵Nebuleon Fumika
crackle constantly, like a record player. Most audible with earphones.
2013-02-01Add an option that controls which element should be more fluid, per game: ↵Nebuleon Fumika
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-01While killing time between frames, process audio instead of doing nothing. ↵Nebuleon Fumika
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-01Make the audio timing more precise.Nebuleon Fumika
* 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-01Hook fast-forward into Settings.TurboSkipFrames.Nebuleon Fumika
2013-02-01When starting CATSFC, assume the backlights are both on, so don't delay 100 ↵Nebuleon Fumika
milliseconds and set both backlights to on.
2013-01-26Turn off the lower screen's backlight when returning from suspend during ↵Nebuleon Fumika
emulation.
2013-01-23Merge branch 'master' into 8bitsoundNebuleon Fumika
2013-01-22Add three hotkeys: temporary fast-forward, sound toggle and return to menu. ↵Nebuleon Fumika
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-20Initial 8-bit sound commit. For the lulz!Nebuleon Fumika
2013-01-19Remove unneeded volatility, enabling more optimisations. Sound volatility is ↵Nebuleon Fumika
#define'd away, GUI volatility is simply removed.
2013-01-19Prepare code to ask for a hotkey. Prepare a temporary fast-forward switch.Nebuleon Fumika
2013-01-18Return to CPU level 0 after emitting sound if we're delaying for early frames.Nebuleon Fumika
2013-01-18Revert "Reinstate timer-interrupt audio."Nebuleon Fumika
This reverts commit 944d9a729455de435c3d200752308ceedf250196. Conflicts: source/nds/entry.cpp
2013-01-18Fix multiple compiler warnings: forward declaration, implicit declaration, ↵Nebuleon Fumika
unused variable, variable used uninitialised, unused function (when not used anywhere else with a #define).
2013-01-18Remove some unused functions. Raise the CPU frequency for sound mixing if ↵Nebuleon Fumika
auto frameskip is delaying because it's early.
2013-01-17Reinstate timer-interrupt audio.Nebuleon Fumika
This reverts commit 0d048d05ee50625f15d5235d362df6ee71903fc5.
2013-01-13Revert timer-interrupt audio, but not optimisations done since then. Get the ↵Nebuleon Fumika
controller status every scanline again.
2013-01-12Stop using the deprecated function S9xMixSamplesO and use S9xMixSamples instead.Nebuleon Fumika
Wrap the offset into the audio buffer less often.
2013-01-12Remove 2 extraneous delays. The 100-millisecond delays before ↵Nebuleon Fumika
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-12Fix a buffer overflow in audio handling code that corrupted memory used to ↵Nebuleon Fumika
carry the state of the GUI.
2013-01-11Stop constantly testing for 16-bit and stereo in sound handlers. Define ↵Nebuleon Fumika
FOREVER_16_BIT_SOUND and FOREVER_STEREO and use them throughout the code. This is essentially commit 6b36e79013d4c9273a96a9783a2bccdb516f174a, but for sound instead of graphics.
2013-01-11Fix the interrupts glitching sound. Put the sound back at 22050 Hz.Nebuleon Fumika
2013-01-11Reinstate some delays needed by the code to avoid crashing, and actually ↵Nebuleon Fumika
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 8951fdff1aada126257e07699ea6f132cb8d2e65.
2013-01-09Attempt to fix the crashing with sound interrupts, part 2: Stop the timer ↵Nebuleon Fumika
before the menu, and restart it after it ends.
2013-01-08Try fixing a crash in the sound interrupt.Nebuleon Fumika
2013-01-08Configurable interrupt interval for the sound timer. Right now, only 22050 ↵Nebuleon Fumika
Hz audio at 2000-microsecond intervals works.