More actions
(Created page with "{{Infobox homebrew | title = PocketSPC | image = File:Pocketspcds.jpg | type = Audio Player | version = 1.0 | licence = Mixed | author = gl...") |
m (Text replacement - "|download=https://dlhb.gamebrew.org/dshomebrew/" to "|download=https://dlhb.gamebrew.org/dshomebrew2/") |
||
(31 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Infobox | {{Infobox DS Homebrews | ||
| title | |title=PocketSPC | ||
| image | |image=pocketspc02.png | ||
|description=Emulates the audio hardware of the SNES, playing SPC sequence files. | |||
| | |author=gladius (Gary Linscott) | ||
|lastupdated=2005/09/11 | |||
| author | |type=Media Players | ||
| | |version=0.9 | ||
| download | |license=Mixed | ||
|download=https://dlhb.gamebrew.org/dshomebrew2/pocketspc.7z?k33p0fil35 | |||
|website=https://glinscott.github.io/#toc8 | |||
|source=https://dlhb.gamebrew.org/dshomebrew2/pocketspc.7z | |||
}} | }} | ||
PocketSPC player for the Nintendo DS. It is a SNES sound chip emulator on DS. | PocketSPC player for the Nintendo DS. It is a SNES sound chip emulator on DS. | ||
Line 16: | Line 17: | ||
==User guide== | ==User guide== | ||
The .nds version has a space restriction, you will only be able to use roughly 2 megabytes of songs due to ram limitations. | |||
The process you need to use to build an nds, is first add your spcs to pocketspc.arm9 using the builder (you can also use the c++ builder by MottZilla). Then you run creatends.bat and it will output a shiny new nds for you to use (wifi, gba mp, etc...). | |||
There are a few | There are a few example songs included if you don't want to go hunting for SPC's to play. If you do, a great source is http://www.snesmusic.org/. | ||
===Rom Builder=== | ===Rom Builder=== | ||
The rom builder requires the .NET framework version 1.1 or greater to be installed. | The rom builder requires the .NET framework version 1.1 or greater to be installed. | ||
Run it in the same directory as the PocketSPC.ds.gba file and it will automatically find the current songs you have added. | Run it in the same directory as the PocketSPC.ds.gba file and it will automatically find the current songs you have added. Then click Add Files to add in more spc's. | ||
You can multi-select here as well. Select one or more files and click delete files to remove them from the .ds.gba file. | |||
Add files from the command line using | Add files from the command line using: | ||
pocketspcbuilder -add blah.spc blah2.spc | |||
You may use wildcards as well, such as: | |||
pocketspcbuilder -add *.spc | |||
==Controls== | ==Controls== | ||
'''Menu:''' | '''Menu:''' | ||
Up/Down - Move the current selection | |||
A - Start the current selection playing | |||
'''While the SPC is playing:''' | '''While the SPC is playing:''' | ||
Select - Turn randomize next song on/off | |||
B - Stop the SPC and go back to the menu system | |||
Left - Previous song | |||
Right - Next song | |||
Up - Increase Preamp (volume) | |||
Down - Decrease Preamp (volume) | |||
==Screenshots== | |||
https://dlhb.gamebrew.org/dshomebrew/pocketspc2.png | |||
https://dlhb.gamebrew.org/dshomebrew/pocketspc3.png | |||
==Changelog== | ==Changelog== | ||
'''Version 0.9''' | '''Version 0.9''' | ||
*Rewrote timer code, it is now both faster and more accurate | *Rewrote timer code, it is now both faster and more accurate. | ||
*Fixed KON register issue with Der Langrisser | *Fixed KON register issue with Der Langrisser. | ||
*Updated the builder with add directory support | *Updated the builder with add directory support. | ||
'''Version 0.8.1''' | '''Version 0.8.1''' | ||
*Removed sample caching on arm9 version, caused errors in a few songs like mega man x | *Removed sample caching on arm9 version, caused errors in a few songs like mega man x. | ||
*Fixed bug with screen display going wild on songs like star ocean (caused by negative volumes) | *Fixed bug with screen display going wild on songs like star ocean (caused by negative volumes). | ||
*Fixed bug that multiplied master echo volume by master volume. (fixes legend, and echo volume on a lot) | *Fixed bug that multiplied master echo volume by master volume. (fixes legend, and echo volume on a lot). | ||
'''Version 0.8''' | '''Version 0.8''' | ||
*Optimized timer updating, new key on/off code, cpu usage down by a fair bit | *Optimized timer updating, new key on/off code, cpu usage down by a fair bit. | ||
*Allowed writes to envx/outx | *Allowed writes to envx/outx. | ||
*Fixed stupid bug with direct envelope setting (fixes super turrican) | *Fixed stupid bug with direct envelope setting (fixes super turrican). | ||
*Improved accuracy of envelope and channel volume multiplication, better sound quality | *Improved accuracy of envelope and channel volume multiplication, better sound quality. | ||
*Fixed bug (again) with going backwards before the first song | *Fixed bug (again) with going backwards before the first song. | ||
*More bug fixes and speed increases to the SnesDS version | *More bug fixes and speed increases to the SnesDS version. | ||
'''Version 0.7''' | '''Version 0.7''' | ||
*Added Gaussian interpolation - samples sound much nicer | *Added Gaussian interpolation - samples sound much nicer. | ||
*Increased accuracy of DSP/APU integration | *Increased accuracy of DSP/APU integration. | ||
*Better emulation of key-on and key-off registers | *Better emulation of key-on and key-off registers. | ||
*Changed around dsp register writes, should be more accurate | *Changed around dsp register writes, should be more accurate. | ||
*Envx and Outx are cleared on key-on now | *Envx and Outx are cleared on key-on now. | ||
*Changed DSP ram to have 256 bytes, so reads are no longer mirrored | *Changed DSP ram to have 256 bytes, so reads are no longer mirrored. | ||
*Fixed stupid bug with DSP register reads - any songs that read from envx were broken (fixes dq1, doom, rnh, bt&dd, a lot more) | *Fixed stupid bug with DSP register reads - any songs that read from envx were broken (fixes dq1, doom, rnh, bt&dd, a lot more). | ||
*Fixed bugs and added echo emulation to SnesDS version | *Fixed bugs and added echo emulation to SnesDS version. | ||
'''Version 0.6''' | '''Version 0.6''' | ||
*Reverted change that should have fixed bugs, but instead seems to break more songs(fixes bt&dd, rudra no hihou, others) | *Reverted change that should have fixed bugs, but instead seems to break more songs(fixes bt&dd, rudra no hihou, others). | ||
*Fixed bug in builder with long filenames | *Fixed bug in builder with long filenames. | ||
*Randomize works better, like winamp now, uses rtc to seed random as well | *Randomize works better, like winamp now, uses rtc to seed random as well. | ||
*Fixes for arm7 version (snesds) | *Fixes for arm7 version (snesds). | ||
*Added sync code to arm7 version (snesds) | *Added sync code to arm7 version (snesds). | ||
'''Version 0.5''' | '''Version 0.5''' | ||
*Added timer speed up hack to CPU core | *Added timer speed up hack to CPU core. | ||
*Changed timer updating code, quite a nice speed gain from that | *Changed timer updating code, quite a nice speed gain from that. | ||
*Fixed dumb bug with note key on not setting envelope up properly | *Fixed dumb bug with note key on not setting envelope up properly. | ||
*Fixed bug when changing envelope while sample was playing (FF2) | *Fixed bug when changing envelope while sample was playing (FF2). | ||
*HUGE bug fixed on looping samples.. wasn't resetting the block pointer on first looped block. This fixes a lot of the crackling/buzzing samples finally. FF3 Edgar&Sabin for example (many others) | *HUGE bug fixed on looping samples.. wasn't resetting the block pointer on first looped block. This fixes a lot of the crackling/buzzing samples finally. FF3 Edgar&Sabin for example (many others). | ||
*Rewrote BRR decoding yet again, should hopefully be the last time | *Rewrote BRR decoding yet again, should hopefully be the last time. | ||
*Fixed bug on loading SPC state, fixes actraiser, soul blader, metroid, others | *Fixed bug on loading SPC state, fixes actraiser, soul blader, metroid, others. | ||
*Fixed sample volume bug, fixes star ocean | *Fixed sample volume bug, fixes star ocean. | ||
'''Version 0.4''' | '''Version 0.4''' | ||
*Backported to arm9 for increased speed (arm7 version still being updated for snesds) | *Backported to arm9 for increased speed (arm7 version still being updated for snesds). | ||
*Moved mixing rate back up to 32000Hz | *Moved mixing rate back up to 32000Hz. | ||
*Removed echo hack, added proper echo emulation and FIR filtering, feel the reverb | *Removed echo hack, added proper echo emulation and FIR filtering, feel the reverb. | ||
*Recoded most of the mixer for increased speed | *Recoded most of the mixer for increased speed. | ||
*Fixed modifying kon,koff,endx when sample was turned off, fixes some samples ending too soon | *Fixed modifying kon,koff,endx when sample was turned off, fixes some samples ending too soon. | ||
*Fixed SPC666 song length being off sometimes | *Fixed SPC666 song length being off sometimes. | ||
*Fixed BRR decoding bug - wasn't clamping format 2&3, fixes samples that sounded really strange | *Fixed BRR decoding bug - wasn't clamping format 2&3, fixes samples that sounded really strange. | ||
'''Version 0.3''' | '''Version 0.3''' | ||
*Enabled preamp which I forgot to do in last release | *Enabled preamp which I forgot to do in last release. | ||
*Added PCALL/SLEEP opcodes, should help compatibility | *Added PCALL/SLEEP opcodes, should help compatibility. | ||
*KON/KOFF were being trashed on write, fixed | *KON/KOFF were being trashed on write, fixed. | ||
*Fixed setting of ADSR when note was in release state | *Fixed setting of ADSR when note was in release state. | ||
*When note is finished, envelope state is set to none now | *When note is finished, envelope state is set to none now. | ||
*Fixed TCALL opcode, Rudra no Hihou now works (probably others as well. | *Fixed TCALL opcode, Rudra no Hihou now works (probably others as well). | ||
*End of sample block decoding bug(s) fixed - finally fixes errant samples playing in zelda & many others | *End of sample block decoding bug(s) fixed - finally fixes errant samples playing in zelda & many others. | ||
*Added echo hack so that songs that were silent before now play back (earthbound) This hack can also cause some issues with songs that use the echo with some wierd filters, such as some of the final fantasy 3 songs. | *Added echo hack so that songs that were silent before now play back (earthbound) This hack can also cause some issues with songs that use the echo with some wierd filters, such as some of the final fantasy 3 songs. | ||
*Improved accuracy of BRR decoding, samples are more accurate now | *Improved accuracy of BRR decoding, samples are more accurate now. | ||
*Dropped mixing rate to 24000Hz, gets rid of crackling during intense songs (legend of the mystical ninja) | *Dropped mixing rate to 24000Hz, gets rid of crackling during intense songs (legend of the mystical ninja). | ||
'''Version 0.2''' | '''Version 0.2''' | ||
*Added SPC666 extra info display | *Added SPC666 extra info display. | ||
*Ported to Arm7 and rewrote BRR decoding & mixing in asm | *Ported to Arm7 and rewrote BRR decoding & mixing in asm. | ||
*Implemented EOR1/AND1/OR1/TCALL, fixes games that use them | *Implemented EOR1/AND1/OR1/TCALL, fixes games that use them. | ||
*Added support for inport/outport handling - you can now see this in snesDS | *Added support for inport/outport handling - you can now see this in snesDS. | ||
*Added ENVX & OUTX handling, fixes samples looping forever on some games | *Added ENVX & OUTX handling, fixes samples looping forever on some games. | ||
*Fixed crash bug writing to high 0x40 bytes of memory - fixes fzero | *Fixed crash bug writing to high 0x40 bytes of memory - fixes fzero. | ||
*Fixed DSP mirroring of address > 0x7f | *Fixed DSP mirroring of address > 0x7f. | ||
*Attack ENVX now starting at 0 (was starting at 1) | *Attack ENVX now starting at 0 (was starting at 1). | ||
*Push/Pop PSW was messed up (Not using/setting DP or H flag) | *Push/Pop PSW was messed up (Not using/setting DP or H flag). | ||
*DSP KOFF register was broken, not setting envelope speed when setting Release state, fixes quite a few games that had infinite looping sounds. | *DSP KOFF register was broken, not setting envelope speed when setting Release state, fixes quite a few games that had infinite looping sounds. | ||
*Fixed MUL YA, was not clearing Z flag when A was 0x80 | *Fixed MUL YA, was not clearing Z flag when A was 0x80. | ||
*Fixed DIV, was not setting V flag when Y >= X, fixes Mariokart and StarOcean | *Fixed DIV, was not setting V flag when Y >= X, fixes Mariokart and StarOcean. | ||
*Removed 'optimization' that didn't do any register checking sometimes, caused bugs | *Removed 'optimization' that didn't do any register checking sometimes, caused bugs. | ||
*Bug fixed in op (X),(Y) form instructions, didn't take DP into account | *Bug fixed in op (X),(Y) form instructions, didn't take DP into account. | ||
*Bug fixed in op DP+reg form instructions, could access outside DP | *Bug fixed in op DP+reg form instructions, could access outside DP. | ||
*Bug fixed in SBC (X),(Y), reversed the order of the subtraction | *Bug fixed in SBC (X),(Y), reversed the order of the subtraction. | ||
*Bug fixed in op #,(X) instruction, (X) address was not using DP flag | *Bug fixed in op #,(X) instruction, (X) address was not using DP flag. | ||
'''Version 0.1''' | '''Version 0.1''' | ||
*Ported from GBA, rewrote CPU core, rewrote DSP core | *Ported from GBA, rewrote CPU core, rewrote DSP core. | ||
*Support for stereo added | *Support for stereo added. | ||
*Mixing rate set to SNES's 32000Hz | *Mixing rate set to SNES's 32000Hz. | ||
*Still missing echo/filter emulation for the DSP | *Still missing echo/filter emulation for the DSP. | ||
*CPU bugs/unimplemented opcodes remain | *CPU bugs/unimplemented opcodes remain. | ||
==Credits== | ==Credits== | ||
Snes9X Authors, Loopy, TRAC, Antiresonance, Zsnes Authors, WinterMute, Flubba | Snes9X Authors, Loopy, TRAC, Antiresonance, Zsnes Authors, WinterMute, Flubba. | ||
[ | ==External links== | ||
* Author's website - https://glinscott.github.io/ | |||
* Official website - [https://web.archive.org/web/20070322230535/http://pocketspc.pocketheaven.com http://pocketspc.pocketheaven.com] (archived) |
Latest revision as of 11:10, 16 August 2024
PocketSPC | |
---|---|
General | |
Author | gladius (Gary Linscott) |
Type | Media Players |
Version | 0.9 |
License | Mixed |
Last Updated | 2005/09/11 |
Links | |
Download | |
Website | |
Source | |
PocketSPC player for the Nintendo DS. It is a SNES sound chip emulator on DS.
Currently, the only supported method of using this program is by using a flashcart with the PocketSPC.ds.gba file.
User guide
The .nds version has a space restriction, you will only be able to use roughly 2 megabytes of songs due to ram limitations.
The process you need to use to build an nds, is first add your spcs to pocketspc.arm9 using the builder (you can also use the c++ builder by MottZilla). Then you run creatends.bat and it will output a shiny new nds for you to use (wifi, gba mp, etc...).
There are a few example songs included if you don't want to go hunting for SPC's to play. If you do, a great source is http://www.snesmusic.org/.
Rom Builder
The rom builder requires the .NET framework version 1.1 or greater to be installed.
Run it in the same directory as the PocketSPC.ds.gba file and it will automatically find the current songs you have added. Then click Add Files to add in more spc's.
You can multi-select here as well. Select one or more files and click delete files to remove them from the .ds.gba file.
Add files from the command line using:
pocketspcbuilder -add blah.spc blah2.spc
You may use wildcards as well, such as:
pocketspcbuilder -add *.spc
Controls
Menu:
Up/Down - Move the current selection
A - Start the current selection playing
While the SPC is playing:
Select - Turn randomize next song on/off
B - Stop the SPC and go back to the menu system
Left - Previous song
Right - Next song
Up - Increase Preamp (volume)
Down - Decrease Preamp (volume)
Screenshots
Changelog
Version 0.9
- Rewrote timer code, it is now both faster and more accurate.
- Fixed KON register issue with Der Langrisser.
- Updated the builder with add directory support.
Version 0.8.1
- Removed sample caching on arm9 version, caused errors in a few songs like mega man x.
- Fixed bug with screen display going wild on songs like star ocean (caused by negative volumes).
- Fixed bug that multiplied master echo volume by master volume. (fixes legend, and echo volume on a lot).
Version 0.8
- Optimized timer updating, new key on/off code, cpu usage down by a fair bit.
- Allowed writes to envx/outx.
- Fixed stupid bug with direct envelope setting (fixes super turrican).
- Improved accuracy of envelope and channel volume multiplication, better sound quality.
- Fixed bug (again) with going backwards before the first song.
- More bug fixes and speed increases to the SnesDS version.
Version 0.7
- Added Gaussian interpolation - samples sound much nicer.
- Increased accuracy of DSP/APU integration.
- Better emulation of key-on and key-off registers.
- Changed around dsp register writes, should be more accurate.
- Envx and Outx are cleared on key-on now.
- Changed DSP ram to have 256 bytes, so reads are no longer mirrored.
- Fixed stupid bug with DSP register reads - any songs that read from envx were broken (fixes dq1, doom, rnh, bt&dd, a lot more).
- Fixed bugs and added echo emulation to SnesDS version.
Version 0.6
- Reverted change that should have fixed bugs, but instead seems to break more songs(fixes bt&dd, rudra no hihou, others).
- Fixed bug in builder with long filenames.
- Randomize works better, like winamp now, uses rtc to seed random as well.
- Fixes for arm7 version (snesds).
- Added sync code to arm7 version (snesds).
Version 0.5
- Added timer speed up hack to CPU core.
- Changed timer updating code, quite a nice speed gain from that.
- Fixed dumb bug with note key on not setting envelope up properly.
- Fixed bug when changing envelope while sample was playing (FF2).
- HUGE bug fixed on looping samples.. wasn't resetting the block pointer on first looped block. This fixes a lot of the crackling/buzzing samples finally. FF3 Edgar&Sabin for example (many others).
- Rewrote BRR decoding yet again, should hopefully be the last time.
- Fixed bug on loading SPC state, fixes actraiser, soul blader, metroid, others.
- Fixed sample volume bug, fixes star ocean.
Version 0.4
- Backported to arm9 for increased speed (arm7 version still being updated for snesds).
- Moved mixing rate back up to 32000Hz.
- Removed echo hack, added proper echo emulation and FIR filtering, feel the reverb.
- Recoded most of the mixer for increased speed.
- Fixed modifying kon,koff,endx when sample was turned off, fixes some samples ending too soon.
- Fixed SPC666 song length being off sometimes.
- Fixed BRR decoding bug - wasn't clamping format 2&3, fixes samples that sounded really strange.
Version 0.3
- Enabled preamp which I forgot to do in last release.
- Added PCALL/SLEEP opcodes, should help compatibility.
- KON/KOFF were being trashed on write, fixed.
- Fixed setting of ADSR when note was in release state.
- When note is finished, envelope state is set to none now.
- Fixed TCALL opcode, Rudra no Hihou now works (probably others as well).
- End of sample block decoding bug(s) fixed - finally fixes errant samples playing in zelda & many others.
- Added echo hack so that songs that were silent before now play back (earthbound) This hack can also cause some issues with songs that use the echo with some wierd filters, such as some of the final fantasy 3 songs.
- Improved accuracy of BRR decoding, samples are more accurate now.
- Dropped mixing rate to 24000Hz, gets rid of crackling during intense songs (legend of the mystical ninja).
Version 0.2
- Added SPC666 extra info display.
- Ported to Arm7 and rewrote BRR decoding & mixing in asm.
- Implemented EOR1/AND1/OR1/TCALL, fixes games that use them.
- Added support for inport/outport handling - you can now see this in snesDS.
- Added ENVX & OUTX handling, fixes samples looping forever on some games.
- Fixed crash bug writing to high 0x40 bytes of memory - fixes fzero.
- Fixed DSP mirroring of address > 0x7f.
- Attack ENVX now starting at 0 (was starting at 1).
- Push/Pop PSW was messed up (Not using/setting DP or H flag).
- DSP KOFF register was broken, not setting envelope speed when setting Release state, fixes quite a few games that had infinite looping sounds.
- Fixed MUL YA, was not clearing Z flag when A was 0x80.
- Fixed DIV, was not setting V flag when Y >= X, fixes Mariokart and StarOcean.
- Removed 'optimization' that didn't do any register checking sometimes, caused bugs.
- Bug fixed in op (X),(Y) form instructions, didn't take DP into account.
- Bug fixed in op DP+reg form instructions, could access outside DP.
- Bug fixed in SBC (X),(Y), reversed the order of the subtraction.
- Bug fixed in op #,(X) instruction, (X) address was not using DP flag.
Version 0.1
- Ported from GBA, rewrote CPU core, rewrote DSP core.
- Support for stereo added.
- Mixing rate set to SNES's 32000Hz.
- Still missing echo/filter emulation for the DSP.
- CPU bugs/unimplemented opcodes remain.
Credits
Snes9X Authors, Loopy, TRAC, Antiresonance, Zsnes Authors, WinterMute, Flubba.
External links
- Author's website - https://glinscott.github.io/
- Official website - http://pocketspc.pocketheaven.com (archived)