FM sound

rorirub

Established Member
Is there any way to detect if a Saturn game uses FM instead of PCM synth? I'm trying to find -any- game that used the supposed FM capabilities of the Saturn, but I couldn't find anything so far.

Konami Antiques MSX pack is one game I can't figure out, the audio ram clearly shows some audio samples stored, but most of it is white noise - could be a buffer for streaming sound, could be something else. (The pack emulated msx games on the saturn)

edit: the white noise seems to be an emulation problem, yabause plays that exact same noise in the title screen, instead of a cd audio track (satourne does it as well). But, where is the msx emulator output sent to then? to the output, in real-time?
 
Heres the sound ram dump from Konami MSX pack, running Antarctic Adventure.

http://www.mediafire.com/?2x9o2elyxmt

Yabause displays PCM registers in the scsp debugger, but, I'm not sure if the emulator even shows FM should it come across any.

Also to run the game in Yabause, you need to use the OpenGL display... software renderer crashes.
 
Look at the SSCTL bits of the sound slot registers. If the value is 0 the slot is playing PCM, if it's 1 it's generating an FM waveform.
 
Where exactly are those stored, I can't make sense of the register table in the scsp manual.

Found the 4k registers at 05B00000, and I see that individual slot data is stored at 100000 to 1003f8, each slot occupying 18 bytes, but I don't see which one is ssctl.

Also is there a way to check this in Yabause (or other emulators) without resorting to memory dumps?
 
From the Yabause source:

Code:
// Individual Slot Register (ISR)

//

//       $+00      $+01

// $00 ---1 2334 4556 7777 1:KYONEX 2:KYONB 3:SBCTL 4:SSCTL 5:LPCTL 6:PCM8B 7:SA start address

// $02 1111 1111 1111 1111 1:SA start address

// $04 1111 1111 1111 1111 1:LSA loop start address

// $06 1111 1111 1111 1111 1:LEA loop end address

// $08 1111 1222 2234 4444 1:D2R decay 2 rate 2:D1R decay 1 rate 3:EGHOLD eg hold mode 4:AR attack rate

// $0a -122 2233 3334 4444 1:LPSLNK loop start link 2:KRS key rate scaling 3:DL decay level 4:RR release rate

// $0c ---- --12 3333 3333 1:STWINH stack write inhibit 2:SDIR sound direct 3:TL total level

// $0e 1111 2222 2233 3333 1:MDL modulation level 2:MDXSL modulation input x 3:MDYSL modulation input y

// $10 -111 1-22 2222 2222 1:OCT octave 2:FNS frequency number switch

// $12 1222 2233 4445 5666 1:LFORE 2:LFOF 3:PLFOWS 4:PLFOS 5:ALFOWS 6:ALFOS

// $14 ---- ---- -111 1222 1:ISEL input select 2:OMXL input mix level

// $16 1112 2222 3334 4444 1:DISDL 2:DIPAN 3:EFSDL 4:EFPAN
 
So if I understand right, hex 0830 (0000 1000 0011 0000 bin) means its PCM. Thanks.

Is there a way to directly check these registers in the yabause debugger?
 
antime said:
Look at the SSCTL bits of the sound slot registers. If the value is 0 the slot is playing PCM, if it's 1 it's generating an FM waveform.

According to the manual, the SSCTL settings are:

0 = PCM data read from DRAM

1 = White noise

2 = All zeros (silent)

3 = Undocumented

In this case wouldn't a setting of 1 just be noise? I thought to do FM sound, you loaded a basic waveform in RAM (like a sine wave) and used that as the source sample for FM processing, where a regular FM sound chip would use an internal sine wave table ROM. In this case SSCTL=0.

Slightly off topic; does anyone know how MDXSL and MDYSL are used? That part of the SCSP manual is very confusing.
 
You know you may be right, I never even considered that possibility (mostly because I think it's a dumb idea - you have to carry around the table generation code and spend sample memory on something that could much easier be internally generated). In that case you have to examine the FM mixing registers to see whether FM is used or not.
 
I haven't spent much time testing the SSCTL modes 1-3, but as Charles has stated, mode 0 essentially applies an LFO waveform to PCM(either to pitch or amplitude). A heck of a lot of games actually use this for vibrato and tremolo effects. It wasn't until recently that I figured that this is what was causing pitch problems in yabause. Also, only triangle, square, and sawtooth waveforms work on mode 0(no noise waveform). I seem to recall SSCTL mode 1 was only usable with the noise LFO waveform.

My understanding on MDXSL/MDYSL is that it selects the slot and which generation of sample to use when modulating. I'm not sure what settings correspond to what though. You'd almost have to mess around a bit.
 
Back
Top