;-------------------------'sound.h' // 5 ADPCM Sample commands (BYTE CommandNo) - (Fake Sounds: Only 5 SFX used (in many Phoenix Emulator) for the moment->Original Sounds: May be 13 SFX & 2 BGM used for the Future.) #define hitSFX (0x04) #define shield (0x05) #define Blow (0x06) #define laser (0x07) #define explosion (0x08) ;-------------------------Original Sounds ; http://www.powerstrike.net/Phoenix/wav.html A collection of sounds from the game Phoenix! ; ; 13 SFX: ; 1. The Emperor's Spaceship Sound. ; 2. The Emperor's Spaceship Sound ; 3. Eagle Sound 1. ; 4. Eagle Sound 2. ; 5. Eagle Flying Sound. ; 6. Eagle Flying Sound. ; 7. Eagle Dying Sound. ; 8. Small Bird Sound 1. ; 9. Small Bird Dying Sound 1. ; 10. Small Bird Dying Sound 2. ; 11. Red Spaceship Destruction Sound. ; 12. Red Spaceship Shield Sound. ; 13. Red Spaceship Shot Sound. ; 2 BGM: ;14. Intro Theme 1. ;15. Intro Theme 2. ;5 Fake SFX: ;IMPORTANT: to find Audio Files go there, for example... -> Https://github.com/mangini/phoenix-dart Phoenix Arcade Emulator for Dart => Download ZIP : audio in '.ogg' format ;-------------------BEY's Routine to Translate an Orginal Sound Command Into an Neo-Geo's sound CommandNo (ADPCM-Type A Format) ;if ( newByte==2 ) Play(hitSFX) ; Hexa (0x02)/Original Phoenix sound code ->Translate into-> (0x04)/Neo-Geo ADPCM sound! ;if ( newByte==12 ) Play(shield) ; Hexa (0x0C) -> (0x05) ;if ( newByte==80 ) Play(blow) ; Hexa (0x50) -> (0x06) ;if ( (newByte>101)&&(newByte<107) ) Play(laser) ; sound between (0x66) and (0x6A) -> (0x07) ;if ( newByte==143 ) Play(explosion) ; hexa (0x8F) -> (0x08) ;================================================================================================================================== ;-------------------------'Routines.s' [(Play() function] FOR YOU BEY! Becareful, I'm not a programmer (for sure!) ...May Be, many Bugs to fix !!!! :) ; I've found inspiration here: BarfHappy (a French Homebrewer) made all the Job, in 2004! thanks to him ; Thread: Neo CastleVania gameplay-test ; http://www.neo-geo.com/forums/showthread.php?102930-Neo-CastleVania-gameplay-test&s=0684a46e497041f527fe9930466b619f a BarfHappy's sound Routine example * Simple Neo Geo ASM Sound Routine ... (very simple, cause miss 'Stop audio' fonction ...) ; .include "Includes/Defines.inc" ; .globl init_sound ; .globl Play ;* void init_sound(); init_sound: lea 0x320000,a0 ; or lea REG_SOUND,a0 move.b #7,(a0) ; sent byte SoundID 0x07, Sound Code Ouput: 320000H(write,byte)-> ex: 320000H(07H,04H) will play(hitSFX) rts .align 4 ;* void Play(BYTE CommandNo); Play: .set _ARGS, 4 lea 0x320000,a0 ; or lea REG_SOUND,a0 move.l _ARGS(a7),d0 move.b d0,(a0) ; sent Byte CommandNo (0x04, 0x05, 0x06 ...) rts .align 4 ;RQ - >Barf: ;start_sound taking as parameter the sound program track. :IMPORTANT: ;allow one or two vblank between sound init and sound start, so that the z80 can synch properly Problem ->Fred/FRONT!: I don't know, if it's necessary to InitSound (by send SoundID) at eatch time, before to sent a Sound CommandNo...for me, the Sound Code Ouput (SoundID=0x07 /Write), is Set by default...Must be confirme ! ;possibility I've seen in FrogFeast code : ; send_sound_command(SoundID + SOUND_ADPCM_FROG); ; or ; send_sound_command(SOUND_ADPCM_OFF); ;================================================================================================================================== ;----------------------'sound.c' -> Question: is It necessary to creat this file ? #include "Defines.h" #include "Routines.h" #include "Sound.h" -> pour dire par ex que hitSFX=0x04 ! void init_sound() { ; send_sound_command(3); fonction not used here } void Play(BYTE CommandNo) { ; send_sound_command(SoundID + SOUND_ADPCM_FROG); fonction not used here ; send_sound_command(SOUND_ADPCM_OFF); fonction not used here ;================================================================================================================================== ;----------------------'Routines.h' (for CD version) ds un '.H' !!!!! ca c est sur !!! ;extern void PlayAudio(DWORD Track); fonction not used here! -> See NeoGeoCDSrc (Routines.s)/C.Doty sources Code : http://frogfeast.rastersoft.net/Source.html ; // Play audio ;extern void StopAudio(); fonction not used here! -> See NeoGeoCDSrc (Routines.s)/C.Doty sources Code ; // Stop audio extern void init_sound(); // Init sound extern void Play(BYTE CommandNo); // Play sound #endif ;================================================================================================================================== ;----------------------'Defines.h' #ifndef __DEFINES_H #define __DEFINES_H #define BYTE unsigned char #define WORD unsigned short #define DWORD unsigned int #define BOOL unsigned int #define PBYTE BYTE * #endif ;-----------------------Includes\Defines.inc * VRAM read/write address REG_SOUND = 0x320000 // In/Out Z80