Differences of SPCPlayer and SPC7000

Discussion of hardware and software development for Super NES and Super Famicom.

Moderator: Moderators

Forum rules
  • For making cartridges of your Super NES games, see Reproduction.
Post Reply
nikk
Posts: 6
Joined: Fri Feb 09, 2018 9:03 am

Differences of SPCPlayer and SPC7000

Post by nikk » Thu May 14, 2020 6:10 am

I want to replicate a subset of the SNES system on an FPGA, specifically, the audio subsystem.

I found out this repository.

https://github.com/srg320/FpgaSnes/tree/master/FPGA

As you can see, there is a directory called SPC Player, and another called SPC7000.
Do you know the difference?

are both needed in order to emulate the audio subsystem?

Pokun
Posts: 1448
Joined: Tue May 28, 2013 5:49 am
Location: Hokkaido, Japan

Re: Differences of SPCPlayer and SPC7000

Post by Pokun » Thu May 14, 2020 7:38 am

SPC player sounds like it's a player of SPC files and probably not needed.

coto
Posts: 40
Joined: Wed Mar 06, 2019 6:00 pm
Location: Chile

Re: Differences of SPCPlayer and SPC7000

Post by coto » Thu May 14, 2020 10:17 am

nikk wrote:
Thu May 14, 2020 6:10 am
I want to replicate a subset of the SNES system on an FPGA, specifically, the audio subsystem.

I found out this repository.

https://github.com/srg320/FpgaSnes/tree/master/FPGA

As you can see, there is a directory called SPC Player, and another called SPC7000.
Do you know the difference?

are both needed in order to emulate the audio subsystem?
The SPC700 requires a DSP implementation and the APU ports shared to the SNES CPU (snes audio implementation).

The DAC implementation is waveforms passed onto jack audio ports.
If this was an emulator, the DAC would be omitted and raw PCM samples go to a circular buffer which then would go straight out to an API sound mixer of some sorts.

More or less a SPC Player would implement minimal parts of the SNES CPU (namely the SPC reset, copy and play commands + the APU SPC Payload transfered through the APU IO ports between the SNES CPU and the SPC700), given a SPC file is handled to it.
I have no idea if that's how it's implemented in there, but that's how it's usually done.

nikk
Posts: 6
Joined: Fri Feb 09, 2018 9:03 am

Re: Differences of SPCPlayer and SPC7000

Post by nikk » Sat May 16, 2020 10:59 am

Thank you guys!

So it is safe to assume, that the SPCplayer, contains the implementation of the SPC7000?

coto
Posts: 40
Joined: Wed Mar 06, 2019 6:00 pm
Location: Chile

Re: Differences of SPCPlayer and SPC7000

Post by coto » Sat May 16, 2020 12:16 pm

nikk wrote:
Sat May 16, 2020 10:59 am
Thank you guys!

So it is safe to assume, that the SPCplayer, contains the implementation of the SPC7000?
Usually a SPC Player is just an API for the lower level components, so it relies on these, otherwise you may have to maintain 2 different SPC Cores (one for the SNES FPGA and the other the SPC Player on FPGA). In fact if you look at the files pertaining the SPC Player, the implementation in there does exactly what I mentioned earlier . ;-)

Note this project is VHDL rather than verilog. It's an Altera VHDL project


https://github.com/srg320/FpgaSnes/blob ... r/main.vhd

Maps an SPC Player API to otherwise hardcoded DSP and SPC700 components. (Which would require a SNES CPU to run bootcode and initialize them).
The source code referse to S-SMP as the whole chip packaging of both SPC700 and DSP implementation, mapped at ASRAM_ADDR (from their viewpoint)


-


This one is the project bits definition pertaining the IDE. Maps how everything in the SPC Player goes together. It behaves pretty much like the GCC compiler and linkers to build a desired chip, ready to burn, solution.

https://github.com/srg320/FpgaSnes/blob ... player.qsf

-

This one reads the target processor clocks and divides each line by 6 for the SMP clock (because the main CPU processor clock must always be a few multiples of 2 ahead the co-processor component to prevent stability issues), also marks other lines (clk0, clk1, clk2) as 1:1 target clock and forces these to be timing critical, responsive and accurate, while other lines DBG_DAT_OUT, CTRL, etc are marked as not as high prority thus, not timing critical.

https://github.com/srg320/FpgaSnes/blob ... player.sdc


So, the answer is:
This reuses and builds an external SPC Player component. But that one alone is not enough to run, it relies on other SNES hardware components to run: CPU, PPU, SMP, BUSses, etc. The whole project is built as a SNES clone, then the SPC Player component can run SPC payloads (the SNES music programs)

Post Reply