Commit graph

182 commits

Author SHA1 Message Date
Nebuleon Fumika
27d2911fb0 Remove the interrupt time setting. 2013-01-13 05:18:26 -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
5b33e3c903 Raise the CPU only after the delay required by ds2_setBacklight(). 2013-01-13 04:17:40 -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
ca7e790374 soundux.cpp: Inline MixStereo (into S9xMixSamples). 2013-01-12 20:37:04 -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
59612aa017 ds2sound.h: Set the interrupt interval to 15.36 milliseconds and explain why. 2013-01-12 20:30:30 -05:00
Nebuleon Fumika
7eb79c076d Peel loops, aka only unroll loops if their number of iterations is a compile-time constant. 2013-01-12 03:48:20 -05:00
Nebuleon Fumika
75690d5e91 Loop unrolling sucks. It was adding loads of instructions per audio sample. 2013-01-12 03:15:28 -05:00
Nebuleon Fumika
4717df6485 Revert "Remove shifted envelope heights from the code, because one is always set from the other and the shifted height is not used in saved states."
This reverts commit e3bb4a5f62.
2013-01-12 03:08:07 -05:00
Nebuleon Fumika
40d30e35ca Remove redundant writes to support reverse stereo. Define FOREVER_FORWARD_STEREO. 2013-01-12 01:09:59 -05:00
Nebuleon Fumika
e3bb4a5f62 Remove shifted envelope heights from the code, because one is always set from the other and the shifted height is not used in saved states. 2013-01-12 00:34:49 -05:00
Nebuleon Fumika
8338e199df More efficient noise generation taken from blargg's code in Snes9x 1.53. 2013-01-12 00:00:29 -05:00
Nebuleon Fumika
575e93abdc Reduce memory access in noise generation. 2013-01-11 23:21:41 -05:00
Nebuleon Fumika
e0259e54c2 Prepare for audio optimisations. Fix the indentation in MixStereo(). 2013-01-11 21:11:12 -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
736484548e Attempt to optimise the ADD background drawing mode so it's playable on automatic frameskip in games like Super Metroid. It doesn't work well.
See the video for this bug at <http://www.youtube.com/watch?v=sUWjVxAD9Q8>.
2013-01-10 18:01:32 -05:00
Nebuleon Fumika
e1ec72de10 Release 1.17. 2013-01-09 04:04:49 -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
3585aa1c2a Increase the audio frequency to 48 kHz. Timer interrupt intervals and buffer sizes are also tested at 32 kHz and 44.1 kHz. 2013-01-09 02:32:24 -05:00
Nebuleon Fumika
8872841ad1 Try fixing a crash in the sound interrupt. 2013-01-08 23:53:31 -05:00
Nebuleon Fumika
1896286ad5 Permanently remove NO_OPEN_BUS hacks. It was a premature optimisation. 2013-01-08 16:26:43 -05:00
Nebuleon Fumika
65f1ead0e7 Revert "Reinstate FAST_ALIGNED_LSB_WORD_ACCESS for 24-bit jumps." That's in port.h now.
This reverts commit 3dd99ccae4.
2013-01-08 16:24:57 -05:00
Nebuleon Fumika
3dd99ccae4 Reinstate FAST_ALIGNED_LSB_WORD_ACCESS for 24-bit jumps. 2013-01-08 16:01:22 -05:00
Nebuleon Fumika
cdd85a7ce6 Reinstate SNES Open Bus. It was making Secret of Mana's introduction screen sound like a NES with a rusty audio controller. 2013-01-08 15:55:55 -05:00
Nebuleon Fumika
36ad810c10 Release 1.16. 2013-01-08 15:24:21 -05:00
Nebuleon Fumika
b89385cc0a Merge branch 'master' of https://github.com/ShadauxCat/CATSFC 2013-01-08 15:11:30 -05:00
Nebuleon Fumika
e070871850 Remove Open Bus again. Stop synchronising controls so often, now that the audio variable latency problem is fixed. 2013-01-08 15:10:13 -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
1beb671de1 Configurable interrupt interval for the sound timer. Right now, only 22050 Hz audio at 2000-microsecond intervals works. 2013-01-08 15:04: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
e4d3aeac2a Release 1.15. 2013-01-07 21:15:43 -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
9bdda53d2e Add a section about frame skipping in the readme. 2013-01-07 02:38:03 -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
6c5bd75716 Language file overhaul, part 2. Remove unused messages in all languages.
It's actually reloading icons that takes so much time.
2013-01-06 03:45:11 -05:00
Nebuleon Fumika
81cf5b3cd1 Language message overhaul, part 1.
Clean up the names of messages. Mark those that are unused as such in code comments. Raise the CPU level while loading a message file, because it really does take half a second to load a 16 KB file on the lowest frequency (what the eff?).
2013-01-06 01:07:42 -05:00
Nebuleon Fumika
6afa4a432b Release 1.14. 2013-01-05 20:22:25 -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
6df0031bdb Mess with Mode 5 some more. Secret of Mana's menu sprite is fixed; however, as of commit 3cd20e203f (still not fixed in this commit!), Donkey Kong Country's Rareware icon is split by black columns. 2013-01-05 02:19:00 -05:00
Nebuleon Fumika
7c1327bd24 Move all CPU cycle calculations into cpuops.cpp. 2013-01-04 23:12:10 -05:00
Nebuleon Fumika
bfef6f17bd Move some CPU cycle calculation from address resolution to the opcodes. This is to eventually move it from the resolved-address ops as well, reducing the number of memory stores. 2013-01-04 15:54:12 -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