/////////////////////////////////////////////////////////////////////////// // // SDL_PCService() - Handles playing the next sample in a PC sound // /////////////////////////////////////////////////////////////////////////// static void SDL_PCService(void) { id0_byte_t s; id0_word_t t; if (pcSound) { s = *pcSound++; if (s != pcLastSample) { BE_ST_LockAudioRecursively(); // asm pushf // asm cli pcLastSample = s; if (s) // We have a frequency! { t = pcSoundLookup[s]; BE_ST_PCSpeakerOn(t); #if 0 asm mov bx,[t] asm mov al,0xb6 // Write to channel 2 (speaker) timer asm out 43h,al asm mov al,bl asm out 42h,al // Low byte asm mov al,bh asm out 42h,al // High byte asm in al,0x61 // Turn the speaker & gate on asm or al,3 asm out 0x61,al #endif } else // Time for some silence { BE_ST_PCSpeakerOff(); #if 0 asm in al,0x61 // Turn the speaker & gate off asm and al,0xfc // ~3 asm out 0x61,al #endif } BE_ST_UnlockAudioRecursively(); // asm popf }
void BE_ST_BSound(uint16_t frequency) { BE_ST_LockAudioRecursively(); BE_ST_PCSpeakerOn(PC_PIT_RATE/(uint32_t)frequency); BE_ST_UnlockAudioRecursively(); }