--- BasiliskII/src/AmigaOS/audio_amiga.cpp 1999/10/03 14:16:25 1.1 +++ BasiliskII/src/AmigaOS/audio_amiga.cpp 2002/01/15 14:58:34 1.10 @@ -1,7 +1,7 @@ /* * audio_amiga.cpp - Audio support, AmigaOS implementation using AHI * - * Basilisk II (C) 1997-1999 Christian Bauer + * Basilisk II (C) 1997-2002 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,15 +37,6 @@ #include "debug.h" -// Supported sample rates, sizes and channels -int audio_num_sample_rates = 1; -uint32 audio_sample_rates[] = {22050 << 16}; -int audio_num_sample_sizes = 1; -uint16 audio_sample_sizes[] = {16}; -int audio_num_channel_counts = 1; -uint16 audio_channel_counts[] = {2}; - - // Global variables static ULONG ahi_id = AHI_DEFAULT_ID; // AHI audio ID static struct AHIAudioCtrl *ahi_ctrl = NULL; @@ -57,21 +48,30 @@ static int audio_block_fetched = 0; / // Prototypes -static __saveds __asm ULONG audio_callback(register __a0 struct Hook *hook, register __a2 struct AHIAudioCtrl *ahi_ctrl, register __a1 struct AHISoundMessage *msg); +static __saveds __attribute__((regparm(3))) ULONG audio_callback(struct Hook *hook /*a0*/, struct AHISoundMessage *msg /*a1*/, struct AHIAudioCtrl *ahi_ctrl /*a2*/); /* * Initialization */ +// Set AudioStatus to reflect current audio stream format +static void set_audio_status_format(void) +{ + AudioStatus.sample_rate = audio_sample_rates[0]; + AudioStatus.sample_size = audio_sample_sizes[0]; + AudioStatus.channels = audio_channel_counts[0]; +} + void AudioInit(void) { sample[0].ahisi_Address = sample[1].ahisi_Address = NULL; // Init audio status and feature flags - AudioStatus.sample_rate = audio_sample_rates[0]; - AudioStatus.sample_size = audio_sample_sizes[0]; - AudioStatus.channels = audio_channel_counts[0]; + audio_sample_rates.push_back(22050 << 16); + audio_sample_sizes.push_back(16); + audio_channel_counts.push_back(2); + set_audio_status_format(); AudioStatus.mixer = 0; AudioStatus.num_sources = 0; audio_component_flags = cmpWantsRegisterMessage | kStereoOut | k16BitOut; @@ -174,7 +174,7 @@ void audio_exit_stream() * AHI sound callback, request next buffer */ -static __saveds __asm ULONG audio_callback(register __a0 struct Hook *hook, register __a2 struct AHIAudioCtrl *ahi_ctrl, register __a1 struct AHISoundMessage *msg) +static __saveds __attribute__((regparm(3))) ULONG audio_callback(struct Hook *hook /*a0*/, struct AHISoundMessage *msg /*a1*/, struct AHIAudioCtrl *ahi_ctrl /*a2*/) { play_buf ^= 1; @@ -192,7 +192,7 @@ static __saveds __asm ULONG audio_callba // Put data into AHI buffer (convert 8-bit data unsigned->signed) if (AudioStatus.sample_size == 16) - memcpy(sample[play_buf].ahisi_Address, Mac2HostAddr(ReadMacInt32(apple_stream_info + scd_buffer)), work_size); + Mac2Host_memcpy(sample[play_buf].ahisi_Address, ReadMacInt32(apple_stream_info + scd_buffer), work_size); else { uint32 *p = (uint32 *)Mac2HostAddr(ReadMacInt32(apple_stream_info + scd_buffer)); uint32 *q = (uint32 *)sample[play_buf].ahisi_Address; @@ -250,16 +250,19 @@ void AudioInterrupt(void) * It is guaranteed that AudioStatus.num_sources == 0 */ -void audio_set_sample_rate(int index) +bool audio_set_sample_rate(int index) { + return true; } -void audio_set_sample_size(int index) +bool audio_set_sample_size(int index) { + return true; } -void audio_set_channels(int index) +bool audio_set_channels(int index) { + return true; } @@ -279,12 +282,12 @@ uint32 audio_get_main_volume(void) return 0x01000100; } -bool audio_get_dac_mute(void) +bool audio_get_speaker_mute(void) { return false; } -uint32 audio_get_dac_volume(void) +uint32 audio_get_speaker_volume(void) { return 0x01000100; } @@ -297,10 +300,10 @@ void audio_set_main_volume(uint32 vol) { } -void audio_set_dac_mute(bool mute) +void audio_set_speaker_mute(bool mute) { } -void audio_set_dac_volume(uint32 vol) +void audio_set_speaker_volume(uint32 vol) { }