PCem

changeset 80:bc749e3a164e

SB16 input and output share the same sampling rate. Fixes Fast Tracker 2.
author TomW
date Thu Mar 06 18:01:11 2014 +0000
parents 6440ce9ca446
children c63d59bbff1e
files src/sound_sb_dsp.c
diffstat 1 files changed, 7 insertions(+), 10 deletions(-) [+]
line diff
     1.1 --- a/src/sound_sb_dsp.c	Wed Mar 05 19:51:23 2014 +0000
     1.2 +++ b/src/sound_sb_dsp.c	Thu Mar 06 18:01:11 2014 +0000
     1.3 @@ -318,21 +318,18 @@
     1.4                  dsp->sblatcho = dsp->sblatchi = TIMER_USEC * (256 - dsp->sb_data[0]);
     1.5                  temp = 256 - dsp->sb_data[0];
     1.6                  temp = 1000000 / temp;
     1.7 -//                printf("Sample rate - %ihz (%i)\n",temp, sblatcho);
     1.8 +//                pclog("Sample rate - %ihz (%i)\n",temp, dsp->sblatcho);
     1.9                  dsp->sb_freq = temp;
    1.10                  break;
    1.11                  case 0x41: /*Set output sampling rate*/
    1.12 +                case 0x42: /*Set input sampling rate*/
    1.13                  if (dsp->sb_type < SB16) break;
    1.14                  dsp->sblatcho = (int)(TIMER_USEC * (1000000.0f / (float)(dsp->sb_data[1] + (dsp->sb_data[0] << 8))));
    1.15 -//                printf("Sample rate - %ihz (%i)\n",sb_data[1]+(sb_data[0]<<8), sblatcho);
    1.16 +//                pclog("Sample rate - %ihz (%i)\n",dsp->sb_data[1]+(dsp->sb_data[0]<<8), dsp->sblatcho);
    1.17                  dsp->sb_freq = dsp->sb_data[1] + (dsp->sb_data[0] << 8);
    1.18                  dsp->sb_timeo = 256 + dsp->sb_freq;
    1.19 -                break;
    1.20 -                case 0x42: /*Set input sampling rate*/
    1.21 -                if (dsp->sb_type < SB16) break;
    1.22 -                dsp->sblatchi = (int)(TIMER_USEC * (1000000.0f / (float)(dsp->sb_data[1] + (dsp->sb_data[0] << 8))));
    1.23 -//                printf("iample rate - %ihz\n",sb_data[1]+(sb_data[0]<<8));
    1.24 -                dsp->sb_timei = 256 + dsp->sb_data[1] + (dsp->sb_data[0] << 8);
    1.25 +                dsp->sblatchi = dsp->sblatcho;
    1.26 +                dsp->sb_timei = dsp->sb_timeo;
    1.27                  break;
    1.28                  case 0x48: /*Set DSP block transfer size*/
    1.29                  dsp->sb_8_autolen = dsp->sb_data[0] + (dsp->sb_data[1] << 8);
    1.30 @@ -516,7 +513,7 @@
    1.31  void sb_write(uint16_t a, uint8_t v, void *priv)
    1.32  {
    1.33          sb_dsp_t *dsp = (sb_dsp_t *)priv;
    1.34 -//        printf("sb_write : Write soundblaster %04X %02X %04X:%04X %02X\n",a,v,CS,pc,dsp->sb_command);
    1.35 +//        pclog("sb_write : Write soundblaster %04X %02X %04X:%04X %02X\n",a,v,CS,pc,dsp->sb_command);
    1.36          switch (a&0xF)
    1.37          {
    1.38                  case 6: /*Reset*/
    1.39 @@ -811,7 +808,7 @@
    1.40  
    1.41                  if (dsp->sb_16_length < 0)
    1.42                  {
    1.43 -//                        pclog("16DMA over %i\n",sb_16_autoinit);
    1.44 +//                        pclog("16DMA over %i\n",dsp->sb_16_autoinit);
    1.45                          if (dsp->sb_16_autoinit) dsp->sb_16_length = dsp->sb_16_autolen;
    1.46                          else                     dsp->sb_16_enable = dsp->sbenable = 0;
    1.47                          sb_irq(dsp, 0);