Commit graph

356 commits

Author SHA1 Message Date
Nebuleon Fumika
703d522c4c Remove remnants of a failed auto-CPU implementation. Changing CPU speeds on-the-fly is just not stable on the DSTwo. 2013-02-07 20:08:44 -05:00
Nebuleon Fumika
5680258a6a Stop inlining the regular tile drawing code. That was a micro-optimisation, and this revert brings the code a bit closer to mainline Snes9x. 2013-02-07 18:47:15 -05:00
Nebuleon Fumika
635c878905 Allow the user to be pressing a button when the emulator starts. This allows the Loading screen to disappear, and allows invoking New Game straight away. 2013-02-07 17:58:37 -05:00
Nebuleon Fumika
07b9c9e8c1 README.md: Add more recent information about frame skipping and fluidity. 2013-02-07 17:33:04 -05:00
SignZ
ea8ff33951 EN: Added a German translation. DE: Deutsche Übersetzung hinzugefügt. 2013-02-07 04:56:34 -05:00
Nebuleon Fumika
55895f01f7 De-interleave the ROM using DMA. This helps the more esoteric jumbo memory maps load faster. 2013-02-07 02:38:45 -05:00
Nebuleon Fumika
5e3426d0d2 Remove 320 KiB of memory allocations in APU emulation that were completely 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-06 19:07:39 -05:00
Nebuleon Fumika
90de0280db gui.c: Require all keys to be released after the B, A or X button or the Touch Screen is pressed.
This avoids bringing up, or exiting from, multiple menus if you happen to press something for longer than 1/5 second.

The modification does not apply to the directional pad in all menus, or the L and R buttons in file selectors.
2013-02-06 16:24:09 -05:00
Nebuleon Fumika
0b165c3133 Use key pictograms from Pictochat to display keys for yes/no dialog(ue)s. 2013-02-06 16:16:43 -05:00
Nebuleon Fumika
ebf48b1bf7 Yeah... Despite the audio optimisations, sound still crackles with display double-buffering. Disable that, again. 2013-02-06 15:51:23 -05:00
Nebuleon Fumika
04037a3096 When changing languages, quit doing the "Changing language, please wait..." as it only takes a few milliseconds. 2013-02-06 06:27:11 -05:00
Nebuleon Fumika
3dc6668107 Raise the sound frequency from 22050 Hz to 32000 Hz, which is like the SNES. Use sound interpolation to make it sound even more like the SNES. 2013-02-06 05:59:22 -05:00
Nebuleon Fumika
3c3a97219d Fix 2 compiler warnings in gui.c. 2013-02-06 04:57:12 -05:00
Nebuleon Fumika
b277570dae Quit saving the files so often for nothing; that uses up erase cycles on storage cards! Instead, save them once when the menu that contains the settings that the user changed is exited, IF the settings' values changed, OR once when updating the list of most-recently played games.
Automatically save the SRAM in most cases, including game changes.

This commit also makes it unnecessary to save the game config of the previous game when loading another, makes it load certain settings correctly, and MAY make it avoid creating a file for a game's settings if the user never changes them from the defaults.
2013-02-06 04:38:18 -05:00
Nebuleon Fumika
772e24ae50 Reinstate frame skipping options 0 and 1, but keep the new meaning (>= 2 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-06 03:46:48 -05:00
Nebuleon Fumika
b08a201ea2 Allow all audio buffers to get full again before declaring underflow. 2013-02-06 02:53:53 -05:00
Nebuleon Fumika
9829c83608 Fix the loading screen for a ROM appearing for a split second after the splash screen.
Fix uninitialised memory access in Check_LoadArg.
2013-02-06 02:31:55 -05:00
Nebuleon Fumika
a358ef69a8 Make all gamepak loads call LoadGameAndItsData, that way its "Loading" screen, current gamepak variables, game config stuff and so on are all consistent. 2013-02-06 02:18:35 -05:00
BassAceGold
ea330e8f79 Fix settings not getting loaded with a ROM provided by plugin arguments. 2013-02-06 02:05:03 -05:00
BassAceGold
4ac61d443d Load the game from plug-in launch arguments. Make the CATSFC system directory become the one transferred via arguments in that case. 2013-02-06 00:56:33 -05:00
Nebuleon Fumika
8c5f5ba182 Document the auto CPU behavior a bit. 2013-02-06 00:43:21 -05:00
Nebuleon Fumika
9e87a7a2b2 Implement automatic CPU frequency switching, which improves battery life if 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-06 00:34:01 -05:00
Nebuleon Fumika
f2adea7bb2 Force both manual and automatic frameskipping to be at or above 2. Resets the default value for all games which previously had this value configured. 2013-02-05 19:39:09 -05:00
Nebuleon Fumika
e7ac6f675f Disable the free space line in the options for the time being. Currently it invokes a recursive directory scan to calculate how much space is used first. 2013-02-05 16:35:45 -05:00
Nebuleon Fumika
3cd1e03278 Change the upper screen updates to be double-buffered. Require that one audio buffer be free (1 out of 4). 2013-02-05 16:05:16 -05:00
Nebuleon Fumika
dfa2d3cc68 Add include files from BassAceGold's library, release 2 fix 2.2. 2013-02-05 01:33:39 -05:00
Nebuleon Fumika
d1a7bf5eb5 Fully integrate BassAceGold's libraries, finally. The README still states 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-04 23:45:44 -05:00
Nebuleon Fumika
b1c298ab50 Merge pull request #30 from derpking/patch-1
Update source/dsp1.cpp
2013-02-04 15:06:39 -05:00
Nebuleon Fumika
1c9094d99f Release 1.28 after disabling the controller status sync hack. 2013-02-04 05:57:53 -05:00
derpking
cb610fd0c2 Update source/dsp1.cpp
static const uint16	DSP1ROM[1024]
snes9x 1.53 updated the dummy loops
2013-02-03 21:44:15 -08:00
Nebuleon Fumika
4096050f40 Release 1.27. 2013-02-03 20:12:29 -05:00
Nebuleon Fumika
b3a7f8f1fc Synchronise the controller status more spread out inside a rendered frame:
* 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-03 19:26:34 -05:00
Nebuleon Fumika
1ddc8b53fe Faking out the sound synchronisation with a buffer of silence wasn't necessary. 2013-02-03 16:17:06 -05:00
Nebuleon Fumika
538718997f Write back the data cache before using DMA to draw emulated frames. 2013-02-03 15:52:45 -05:00
Nebuleon Fumika
397bf5192a Add some forgotten DMA files. 2013-02-03 15:29:05 -05:00
Nebuleon Fumika
9b75c09a7f Force waiting for a screen to be transferred (update mode 1) because otherwise the next screen can go into DMA.
Use channel 1 instead of channel 5, which must be busy for some reason.
2013-02-03 06:25:12 -05:00
Nebuleon Fumika
461f240655 Fix a name clash between Snes9x's dma.h and the DS2 dma.h by renaming the DS2 dma.h to ds2_dma.h.
Add preliminary support for drawing emulated screens with DS2 DMA.
2013-02-03 05:59:48 -05:00
Nebuleon Fumika
fd92545013 Whoops. I forgot to replace an instance of ds2_setCPULevel from the experimental branch cherry-pick. 2013-02-03 04:20:51 -05:00
Nebuleon Fumika
8693ae1bd8 Add SDK modifications by BassAceGold as of 2011-04-14, as well as modified DMA functions as of 2013-01-29. 2013-02-03 04:19:11 -05:00
Nebuleon Fumika
02f8184fe0 Make it easier to change the "high" and "low" CPU frequencies, as well as to 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-03 03:20:47 -05:00
Nebuleon Fumika
7aeebe97e7 Fix an oddity in the sound when returning from a global mute. Fixes music loading in Super Mario World. 2013-02-02 02:21:52 -05:00
Nebuleon Fumika
984682682c Release 1.26. 2013-02-02 01:39:50 -05:00
Nebuleon Fumika
30e7498f22 Add the experimental branch's files to .gitignore. 2013-02-02 01:38:32 -05:00
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
25aeb83f7b Release 1.25. 2013-02-01 20:47:46 -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
e61731a524 Revert the reversed stereo mixing loop. This makes it more consistent with mainline Snes9x, in case of merges from 1.53. It also didn't help much, given that the problem was trying to push 92 milliseconds of audio inside 20 milliseconds of time.
This reverts commit 2b71568408.
2013-02-01 19:02:38 -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