From d63b6e624e6a2be16cd345451341036ee6c2dcd7 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 13 Jul 2019 17:47:57 +0200 Subject: [PATCH] SB16: Send (sample count, less 1) to the DSP, not the number of bytes. This worked fine when we were using 8-bit samples but broke on 16-bit. --- Kernel/Devices/SB16.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Kernel/Devices/SB16.cpp b/Kernel/Devices/SB16.cpp index b2696427887..e5490de667f 100644 --- a/Kernel/Devices/SB16.cpp +++ b/Kernel/Devices/SB16.cpp @@ -174,14 +174,19 @@ ssize_t SB16::write(FileDescription&, const u8* data, ssize_t length) dma_start(length); u8 command = 0x06; - // Send 16-bit samples. command |= 0xb0; + u16 sample_count = length / sizeof(i16); + if (mode & (u8)SampleFormat::Stereo) + sample_count /= 2; + + sample_count -= 1; + dsp_write(command); dsp_write(mode); - dsp_write((u8)length); - dsp_write((u8)(length >> 8)); + dsp_write((u8)sample_count); + dsp_write((u8)(sample_count >> 8)); enable_irq(); wait_for_irq();