ntp: test code in-place, NTP is actually playing the samerica song

This commit is contained in:
dwsJason 2018-11-24 16:48:15 -05:00
parent c800d4095d
commit 9ef6f855f9
7 changed files with 322 additions and 27 deletions

View File

@ -22,8 +22,6 @@ DummyNTP start ASM_CODE
*
NTPprepare start ASM_CODE
aNTPprepare EQU ntpplayer
lda 4,s
tax
lda 6,s
@ -38,7 +36,8 @@ aNTPprepare EQU ntpplayer
lda #0
sta 1,s
jsl aNTPprepare
ntpb0 entry
jsl >$000000 ; NTPprepare
bcc okgo
@ -59,8 +58,6 @@ okgo pla
*
NTPplay start ASM_CODE
aNTPplay EQU ntpplayer+3
lda 4,s
tax
lda 2,s
@ -69,7 +66,8 @@ aNTPplay EQU ntpplayer+3
sta 3,s
pla
txa
jmp >aNTPplay
ntpb1 entry
jml >$000003 ; NTPplay
*-------------------------------------------------------------------------------
end
@ -82,9 +80,8 @@ aNTPplay EQU ntpplayer+3
*
NTPstop start ASM_CODE
aNTPstop EQU ntpplayer+6
jmp >aNTPstop
ntpb2 entry
jml >$000006 ; NTPstop
*-------------------------------------------------------------------------------
end
@ -129,6 +126,35 @@ NTPforcesongpos start ASM_CODE
rtl
*-------------------------------------------------------------------------------
end
*
* void SetAudioBank(u8 bankNo);
*
SetAudioBank start ASM_CODE
iBank equ 4
sep #$30
lda iBank,s
sta >ntpb0+3
sta >ntpb1+3
sta >ntpb2+3
rep #$30
lda 2,s
sta iBank,s
lda 1,s
sta iBank-1,s
pla
rtl
*-------------------------------------------------------------------------------
end

View File

@ -29,8 +29,8 @@
#undef ENABLE_JOYSTICK
/* sound support */
//#define ENABLE_SOUND
#undef ENABLE_SOUND
#define ENABLE_SOUND
//#undef ENABLE_SOUND
/* cheats support */
#define ENABLE_CHEATS

View File

@ -74,6 +74,26 @@ extern void game_toggleCheat(U8);
#endif
#ifdef ENABLE_SOUND
#ifdef IIGS
extern sound_t WAV_GAMEOVER;
extern sound_t WAV_SBONUS2;
extern sound_t WAV_BULLET;
extern sound_t WAV_BOMBSHHT;
extern sound_t WAV_EXPLODE;
extern sound_t WAV_STICK;
extern sound_t WAV_WALK;
extern sound_t WAV_CRAWL;
extern sound_t WAV_JUMP;
extern sound_t WAV_PAD;
extern sound_t WAV_BOX;
extern sound_t WAV_BONUS;
extern sound_t WAV_SBONUS1;
extern sound_t WAV_DIE;
extern sound_t WAV_ENTITY[];
#else
extern sound_t *WAV_GAMEOVER;
extern sound_t *WAV_SBONUS2;
extern sound_t *WAV_BULLET;
@ -89,7 +109,9 @@ extern sound_t *WAV_BONUS;
extern sound_t *WAV_SBONUS1;
extern sound_t *WAV_DIE;
extern sound_t *WAV_ENTITY[];
#endif
#endif /* IIGS */
#endif /* ENABLE_SOUND */
#endif

View File

@ -129,6 +129,38 @@ extern U8 syskbd_fire;
* sound section
*/
#ifdef ENABLE_SOUND
#ifdef IIGS
typedef int sound_t;
/*
* Output from the Mr.Audio Bank packer
*/
enum {
SND_BOMBSHHT,
SND_BONUS,
SND_BOX,
SND_BULLET,
SND_CRAWL,
SND_DIE,
SND_ENT0,
SND_ENT1,
SND_ENT2,
SND_ENT3,
SND_ENT4,
SND_ENT6,
SND_ENT8,
SND_EXPLODE,
SND_JUMP,
SND_PAD,
SND_SBONUS1,
SND_SBONUS2,
SND_STICK,
SND_WALK,
};
#else
typedef struct {
#ifdef DEBUG
char *name;
@ -137,19 +169,27 @@ typedef struct {
U32 len;
U8 dispose;
} sound_t;
#endif
extern void syssnd_init(void);
extern void syssnd_shutdown(void);
extern void syssnd_vol(S8);
extern void syssnd_toggleMute(void);
#ifdef IIGS
extern S8 syssnd_play(sound_t, S8);
extern void syssnd_stopsound(sound_t);
extern int syssnd_isplaying(sound_t);
extern void syssnd_free(sound_t);
#else
extern S8 syssnd_play(sound_t *, S8);
extern void syssnd_stopsound(sound_t *);
extern int syssnd_isplaying(sound_t *);
extern void syssnd_free(sound_t *);
extern sound_t *syssnd_load(char *name);
#endif
extern void syssnd_pause(U8, U8);
extern void syssnd_stopchan(S8);
extern void syssnd_stopsound(sound_t *);
extern void syssnd_stopall();
extern int syssnd_isplaying(sound_t *);
extern sound_t *syssnd_load(char *name);
extern void syssnd_free(sound_t *);
#endif
/*

View File

@ -22,6 +22,21 @@
#include "system.h"
#ifdef IIGS
sound_t WAV_WAA;
sound_t WAV_BOMB;
sound_t WAV_BULLET;
sound_t WAV_WALK;
sound_t WAV_JUMP;
sound_t WAV_TING;
sound_t WAV_BOMBSHHT;
sound_t WAV_BONUS;
sound_t WAV_SHHT;
sound_t WAV_BOX;
sound_t WAV_DDDING;
#else
sound_t *WAV_WAA;
sound_t *WAV_BOMB;
sound_t *WAV_BULLET;
@ -33,6 +48,7 @@ sound_t *WAV_BONUS;
sound_t *WAV_SHHT;
sound_t *WAV_BOX;
sound_t *WAV_DDDING;
#endif /* IIGS */
#endif /* ENABLE_SOUND */

View File

@ -102,23 +102,42 @@ hscore_t game_hscores[8] = {
{ 1000, "ANDYSPLEEN" }
};
#endif
#ifdef ENABLE_SOUND
#ifdef IIGS
sound_t WAV_GAMEOVER;
sound_t WAV_SBONUS2;
//sound_t WAV_BULLET;
//sound_t WAV_BOMBSHHT;
sound_t WAV_EXPLODE;
sound_t WAV_STICK;
//sound_t WAV_WALK;
sound_t WAV_CRAWL;
//sound_t WAV_JUMP;
sound_t WAV_PAD;
//sound_t WAV_BOX;
//sound_t WAV_BONUS;
sound_t WAV_SBONUS1;
sound_t WAV_DIE;
sound_t WAV_ENTITY[10];
#else
sound_t *WAV_GAMEOVER;
sound_t *WAV_SBONUS2;
sound_t *WAV_BULLET;
sound_t *WAV_BOMBSHHT;
//sound_t *WAV_BULLET;
//sound_t *WAV_BOMBSHHT;
sound_t *WAV_EXPLODE;
sound_t *WAV_STICK;
sound_t *WAV_WALK;
//sound_t *WAV_WALK;
sound_t *WAV_CRAWL;
sound_t *WAV_JUMP;
//sound_t *WAV_JUMP;
sound_t *WAV_PAD;
sound_t *WAV_BOX;
sound_t *WAV_BONUS;
//sound_t *WAV_BOX;
//sound_t *WAV_BONUS;
sound_t *WAV_SBONUS1;
sound_t *WAV_DIE;
sound_t *WAV_ENTITY[10];
#endif
#endif /*IIGS*/
#endif /*ENABLE_SOUND*/
/*
@ -187,6 +206,7 @@ game_toggleCheat(U8 nbr)
void
game_setmusic(char *name, U8 loop)
{
#ifndef IIGS
U8 channel;
if (music_snd)
@ -197,13 +217,16 @@ game_setmusic(char *name, U8 loop)
music_snd->dispose = TRUE; /* music is always "fire and forget" */
channel = syssnd_play(music_snd, loop);
}
#endif
}
void
game_stopmusic(void)
{
#ifndef IIGS
syssnd_stopsound(music_snd);
music_snd = NULL;
#endif
}
#endif
@ -387,15 +410,11 @@ frame(void)
game_state = PLAY0;
return;
case PAUSE_PRESSED1:
screen_pause(TRUE);
game_state = PAUSE_PRESSED1B;
break;
case PAUSE_PRESSED1B:
if (control_status & CONTROL_PAUSE)
return;
@ -766,6 +785,7 @@ loaddata()
*
* tune[0-5].wav not cached
*/
#ifndef IIGS
WAV_GAMEOVER = syssnd_load("sounds/gameover.wav");
WAV_SBONUS2 = syssnd_load("sounds/sbonus2.wav");
WAV_BULLET = syssnd_load("sounds/bullet.wav");
@ -789,6 +809,8 @@ loaddata()
WAV_ENTITY[6] = syssnd_load("sounds/ent6.wav");
WAV_ENTITY[7] = syssnd_load("sounds/ent7.wav");
WAV_ENTITY[8] = syssnd_load("sounds/ent8.wav");
#endif
#endif
}

View File

@ -33,6 +33,174 @@
segment "system";
#ifdef IIGS
char* pNtpDriver = NULL;
char* pNtpSong = NULL;
extern char ntpplayer_lz4;
extern char samerica_lz4;
void SetAudioBank(char bankNo);
void NTPstop(void);
void NTPplay(int bPlayOnce);
int NTPprepare(void* pNTPData);
void
syssnd_init(void)
{
U32* handle = NULL;
printf("syssnd_init\n");
// Allocate a buffer for the NTPAudio Driver
// and to place the various NTP songs that will play
printf("Alloc NTPDriver\n");
handle = (U32*)NewHandle(0x10000, userid(), 0xC014, 0);
if (toolerror())
{
printf("Unable to allocate Audio Driver Mem\n");
printf("Game can't run\n");
sys_sleep(5000); // Wait 5 seconds
exit(1);
}
printf("SUCCESS\n");
pNtpDriver = (char*)*handle;
pNtpSong = pNtpDriver + 0x8000;
//printf("%p\n", pNtpDriver );
//printf("%p\n", pNtpSong );
printf("Decompress NTP Driver\n");
LZ4_Unpack(pNtpDriver, &ntpplayer_lz4);
printf("Decompress samerica\n");
LZ4_Unpack(pNtpSong, &samerica_lz4);
printf("SetAudioBank\n");
SetAudioBank( (*handle)>>16 );
printf("NTPprepare\n");
if (NTPprepare(pNtpSong))
{
printf("NTPprepare failed\n");
}
else
{
printf("NTPplay\n");
NTPplay(0);
}
}
/*
* Shutdown
*/
void
syssnd_shutdown(void)
{
printf("syssnd_shutdown\n");
//if (!isAudioActive) return;
//isAudioActive = FALSE;
}
/*
* Toggle mute
*
* When muted, sounds are still managed but not sent to the dsp, hence
* it is possible to un-mute at any time.
*/
void
syssnd_toggleMute(void)
{
printf("syssnd_toggleMute\n");
}
void
syssnd_vol(S8 d)
{
printf("syssnd_vol: %d\n", d);
}
/*
* Play a sound
*
* loop: number of times the sound should be played, -1 to loop forever
* returns: channel number, or -1 if none was available
*
* NOTE if sound is already playing, simply reset it (i.e. can not have
* twice the same sound playing -- tends to become noisy when too many
* bad guys die at the same time).
*/
S8
syssnd_play(sound_t sound, S8 loop)
{
printf("syssnd_play\n");
return 0;
}
/*
* Pause
*
* pause: TRUE or FALSE
* clear: TRUE to cleanup all sounds and make sure we start from scratch
*/
void
syssnd_pause(U8 pause, U8 clear)
{
printf("syssnd_pause\n");
}
/*
* Stop a channel
*/
void
syssnd_stopchan(S8 chan)
{
printf("syssnd_stopchan\n");
}
/*
* Stop a sound
*/
void
syssnd_stopsound(sound_t sound)
{
printf("syssnd_stopsound\n");
}
/*
* See if a sound is playing
*/
int
syssnd_isplaying(sound_t sound)
{
printf("syssnd_isplaying\n");
return 0;
}
/*
* Stops all channels.
*/
void
syssnd_stopall(void)
{
printf("syssnd_stopall\n");
}
/*
*
*/
void
syssnd_free(sound_t s)
{
printf("syssnd_free\n");
}
#else
#define ADJVOL(S) (((S)*sndVol)/SDL_MIX_MAXVOLUME)
static U8 isAudioActive = FALSE;
@ -435,6 +603,7 @@ sdlRWops_close(SDL_RWops *context)
return 0;
}
#endif /* IIGS */
#endif /* ENABLE_SOUND */
/* eof */