PCem

changeset 49:65adf253efaa

Added meaningful status window information for Mach64 and Sound Blaster. Disabled some SB debug.
author TomW
date Thu Dec 12 18:16:22 2013 +0000
parents b61adb8876e6
children 35566d85aeeb
files src/sound_sb.c src/sound_sb_dsp.c src/sound_sb_dsp.h src/vid_ati_mach64.c src/win.c
diffstat 5 files changed, 137 insertions(+), 17 deletions(-) [+]
line diff
     1.1 --- a/src/sound_sb.c	Wed Dec 11 20:18:26 2013 +0000
     1.2 +++ b/src/sound_sb.c	Thu Dec 12 18:16:22 2013 +0000
     1.3 @@ -151,8 +151,8 @@
     1.4                  mixer->filter   = !(mixer->regs[0xe] & 0x20);
     1.5                  mixer->bass_l   = mixer->bass_r   = 8;
     1.6                  mixer->treble_l = mixer->treble_r = 8;
     1.7 -                pclog("%02X %02X %02X\n", mixer->regs[0x04], mixer->regs[0x22], mixer->regs[0x26]);
     1.8 -                pclog("Mixer - %04X %04X %04X %04X %04X %04X\n", mixer->master_l, mixer->master_r, mixer->voice_l, mixer->voice_r, mixer->fm_l, mixer->fm_r);
     1.9 +//                pclog("%02X %02X %02X\n", mixer->regs[0x04], mixer->regs[0x22], mixer->regs[0x26]);
    1.10 +//                pclog("Mixer - %04X %04X %04X %04X %04X %04X\n", mixer->master_l, mixer->master_r, mixer->voice_l, mixer->voice_r, mixer->fm_l, mixer->fm_r);
    1.11                  if (mixer->index == 0xe)
    1.12                          sb_dsp_set_stereo(&sb->dsp, val & 2);
    1.13          }
    1.14 @@ -211,8 +211,8 @@
    1.15                  mixer->treble_l = mixer->regs[0x44] >> 4;
    1.16                  mixer->treble_r = mixer->regs[0x45] >> 4;
    1.17                  mixer->filter = 0;
    1.18 -                pclog("%02X %02X %02X %02X %02X %02X\n", mixer->regs[0x30], mixer->regs[0x31], mixer->regs[0x32], mixer->regs[0x33], mixer->regs[0x34], mixer->regs[0x35]);
    1.19 -                pclog("Mixer - %04X %04X %04X %04X %04X %04X\n", mixer->master_l, mixer->master_r, mixer->voice_l, mixer->voice_r, mixer->fm_l, mixer->fm_r);
    1.20 +//                pclog("%02X %02X %02X %02X %02X %02X\n", mixer->regs[0x30], mixer->regs[0x31], mixer->regs[0x32], mixer->regs[0x33], mixer->regs[0x34], mixer->regs[0x35]);
    1.21 +//                pclog("Mixer - %04X %04X %04X %04X %04X %04X\n", mixer->master_l, mixer->master_r, mixer->voice_l, mixer->voice_r, mixer->fm_l, mixer->fm_r);
    1.22          }
    1.23  }
    1.24  
    1.25 @@ -429,6 +429,13 @@
    1.26          sb_dsp_speed_changed(&sb->dsp);
    1.27  }
    1.28  
    1.29 +int sb_add_status_info(char *s, int max_len, void *p)
    1.30 +{
    1.31 +        sb_t *sb = (sb_t *)p;
    1.32 +        
    1.33 +        sb_dsp_add_status_info(s, max_len, &sb->dsp);
    1.34 +}
    1.35 +
    1.36  device_t sb_1_device =
    1.37  {
    1.38          "Sound Blaster v1.0",
    1.39 @@ -438,7 +445,7 @@
    1.40          NULL,
    1.41          sb_speed_changed,
    1.42          NULL,
    1.43 -        NULL
    1.44 +        sb_add_status_info
    1.45  };
    1.46  device_t sb_15_device =
    1.47  {
    1.48 @@ -449,7 +456,7 @@
    1.49          NULL,
    1.50          sb_speed_changed,
    1.51          NULL,
    1.52 -        NULL
    1.53 +        sb_add_status_info
    1.54  };
    1.55  device_t sb_2_device =
    1.56  {
    1.57 @@ -460,7 +467,7 @@
    1.58          NULL,
    1.59          sb_speed_changed,
    1.60          NULL,
    1.61 -        NULL
    1.62 +        sb_add_status_info
    1.63  };
    1.64  device_t sb_pro_v1_device =
    1.65  {
    1.66 @@ -471,7 +478,7 @@
    1.67          NULL,
    1.68          sb_speed_changed,
    1.69          NULL,
    1.70 -        NULL
    1.71 +        sb_add_status_info
    1.72  };
    1.73  device_t sb_pro_v2_device =
    1.74  {
    1.75 @@ -482,7 +489,7 @@
    1.76          NULL,
    1.77          sb_speed_changed,
    1.78          NULL,
    1.79 -        NULL
    1.80 +        sb_add_status_info
    1.81  };
    1.82  device_t sb_16_device =
    1.83  {
    1.84 @@ -493,7 +500,7 @@
    1.85          NULL,
    1.86          sb_speed_changed,
    1.87          NULL,
    1.88 -        NULL
    1.89 +        sb_add_status_info
    1.90  };
    1.91  device_t sb_awe32_device =
    1.92  {
    1.93 @@ -504,5 +511,5 @@
    1.94          sb_awe32_available,
    1.95          sb_speed_changed,
    1.96          NULL,
    1.97 -        NULL
    1.98 +        sb_add_status_info
    1.99  };
     2.1 --- a/src/sound_sb_dsp.c	Wed Dec 11 20:18:26 2013 +0000
     2.2 +++ b/src/sound_sb_dsp.c	Thu Dec 12 18:16:22 2013 +0000
     2.3 @@ -269,7 +269,7 @@
     2.4  void sb_exec_command(sb_dsp_t *dsp)
     2.5  {
     2.6          int temp,c;
     2.7 -        pclog("sb_exec_command : SB command %02X\n", dsp->sb_command);
     2.8 +//        pclog("sb_exec_command : SB command %02X\n", dsp->sb_command);
     2.9          switch (dsp->sb_command)
    2.10          {
    2.11                  case 0x01: /*???*/
    2.12 @@ -516,7 +516,7 @@
    2.13  void sb_write(uint16_t a, uint8_t v, void *priv)
    2.14  {
    2.15          sb_dsp_t *dsp = (sb_dsp_t *)priv;
    2.16 -        printf("sb_write : Write soundblaster %04X %02X %04X:%04X %02X\n",a,v,CS,pc,dsp->sb_command);
    2.17 +//        printf("sb_write : Write soundblaster %04X %02X %04X:%04X %02X\n",a,v,CS,pc,dsp->sb_command);
    2.18          switch (a&0xF)
    2.19          {
    2.20                  case 6: /*Reset*/
    2.21 @@ -550,7 +550,7 @@
    2.22  {
    2.23          sb_dsp_t *dsp = (sb_dsp_t *)priv;
    2.24  //        if (a==0x224) output=1;
    2.25 -        pclog("sb_read : Read soundblaster %04X %04X:%04X\n",a,CS,pc);
    2.26 +//        pclog("sb_read : Read soundblaster %04X %04X:%04X\n",a,CS,pc);
    2.27          switch (a & 0xf)
    2.28          {
    2.29                  case 0xA: /*Read data*/
    2.30 @@ -594,7 +594,7 @@
    2.31  
    2.32  void sb_dsp_setaddr(sb_dsp_t *dsp, uint16_t addr)
    2.33  {
    2.34 -        pclog("sb_dsp_setaddr : %04X\n", addr);
    2.35 +//        pclog("sb_dsp_setaddr : %04X\n", addr);
    2.36          io_removehandler(dsp->sb_addr + 6,   0x0002, sb_read, NULL, NULL, sb_write, NULL, NULL, dsp);
    2.37          io_removehandler(dsp->sb_addr + 0xa, 0x0006, sb_read, NULL, NULL, sb_write, NULL, NULL, dsp);        
    2.38          dsp->sb_addr = addr;
    2.39 @@ -824,7 +824,7 @@
    2.40                  {
    2.41                          sb_irq(dsp, 1);
    2.42                          dsp->sbenable = dsp->sb_8_enable;
    2.43 -                        pclog("SB pause over\n");
    2.44 +//                        pclog("SB pause over\n");
    2.45                  }
    2.46          }
    2.47  }
    2.48 @@ -912,3 +912,73 @@
    2.49          *l = dsp->sbdatl;
    2.50          *r = dsp->sbdatr;
    2.51  }
    2.52 +
    2.53 +int sb_dsp_add_status_info(char *s, int max_len, sb_dsp_t *dsp)
    2.54 +{
    2.55 +        char temps[128];
    2.56 +        int cur_len = max_len;
    2.57 +        int len;
    2.58 +        int freq;
    2.59 +
    2.60 +        if (dsp->sb_timeo < 256)
    2.61 +                freq = 1000000 / (256 - dsp->sb_timeo);
    2.62 +        else
    2.63 +                freq = dsp->sb_timeo - 256;
    2.64 +
    2.65 +        if (dsp->sb_8_enable && dsp->sb_8_output)
    2.66 +        {
    2.67 +                switch (dsp->sb_8_format)
    2.68 +                {
    2.69 +                        case 0x00: /*Mono unsigned*/
    2.70 +                        case 0x10: /*Mono signed*/
    2.71 +                        if (dsp->sb_type >= SBPRO && dsp->sb_type < SB16 && dsp->stereo)
    2.72 +                        {
    2.73 +                                strcpy(temps, "SB playback format : 8-bit stereo\n");
    2.74 +                                freq /= 2;
    2.75 +                        }
    2.76 +                        else
    2.77 +                                strcpy(temps, "SB playback format : 8-bit mono\n");
    2.78 +                        break;
    2.79 +                        case 0x20: /*Stereo unsigned*/
    2.80 +                        case 0x30: /*Stereo signed*/
    2.81 +                        strcpy(temps, "SB playback format : 8-bit stereo\n");
    2.82 +                        break;
    2.83 +                        case ADPCM_4:
    2.84 +                        strcpy(temps, "SB playback format : 4-bit ADPCM\n");
    2.85 +                        break;
    2.86 +                        case ADPCM_26:
    2.87 +                        strcpy(temps, "SB playback format : 2.6-bit ADPCM\n");
    2.88 +                        break;
    2.89 +                        case ADPCM_2:
    2.90 +                        strcpy(temps, "SB playback format : 2-bit ADPCM\n");
    2.91 +                        break;
    2.92 +                }
    2.93 +        }
    2.94 +        else if (dsp->sb_16_enable && dsp->sb_16_output)
    2.95 +        {
    2.96 +                switch (dsp->sb_16_format)
    2.97 +                {
    2.98 +                        case 0x00: /*Mono unsigned*/
    2.99 +                        case 0x10: /*Mono signed*/
   2.100 +                        strcpy(temps, "SB playback format : 16-bit mono\n");
   2.101 +                        break;
   2.102 +                        case 0x20: /*Stereo unsigned*/
   2.103 +                        case 0x30: /*Stereo signed*/
   2.104 +                        strcpy(temps, "SB playback format : 16-bit stereo\n");
   2.105 +                        break;
   2.106 +                }
   2.107 +        }
   2.108 +        else
   2.109 +                strcpy(temps, "SB playback stopped\n");
   2.110 +        strncat(s, temps, cur_len);
   2.111 +        cur_len -= strlen(temps);
   2.112 +
   2.113 +        if ((dsp->sb_8_enable && dsp->sb_8_output) || (dsp->sb_16_enable && dsp->sb_16_output))
   2.114 +        {
   2.115 +                sprintf(temps, "SB playback frequency : %iHz\n", freq);
   2.116 +                strncat(s, temps, cur_len);
   2.117 +                cur_len -= strlen(temps);
   2.118 +        }
   2.119 +        
   2.120 +        return max_len - cur_len;
   2.121 +}
     3.1 --- a/src/sound_sb_dsp.h	Wed Dec 11 20:18:26 2013 +0000
     3.2 +++ b/src/sound_sb_dsp.h	Thu Dec 12 18:16:22 2013 +0000
     3.3 @@ -67,3 +67,5 @@
     3.4  void sb_dsp_poll(sb_dsp_t *dsp, int16_t *l, int16_t *r);
     3.5  
     3.6  void sb_dsp_set_stereo(sb_dsp_t *dsp, int stereo);
     3.7 +
     3.8 +int sb_dsp_add_status_info(char *s, int max_len, sb_dsp_t *dsp);
     4.1 --- a/src/vid_ati_mach64.c	Wed Dec 11 20:18:26 2013 +0000
     4.2 +++ b/src/vid_ati_mach64.c	Thu Dec 12 18:16:22 2013 +0000
     4.3 @@ -2088,8 +2088,48 @@
     4.4  int mach64_add_status_info(char *s, int max_len, void *p)
     4.5  {
     4.6          mach64_t *mach64 = (mach64_t *)p;
     4.7 +        int cur_len = max_len;
     4.8 +
     4.9 +        if (((mach64->crtc_gen_cntl >> 24) & 3) == 3)
    4.10 +        {
    4.11 +                svga_t *svga = &mach64->svga;
    4.12 +                char temps[128];
    4.13 +                int bpp = 4;
    4.14 +                
    4.15 +                strncat(s, "Mach64 in native mode\n", cur_len);
    4.16 +                cur_len -= strlen("Mach64 in native mode\n");
    4.17 +
    4.18 +                switch ((mach64->crtc_gen_cntl >> 8) & 7)
    4.19 +                {
    4.20 +                        case 1: bpp = 4; break;
    4.21 +                        case 2: bpp = 8; break;
    4.22 +                        case 3: bpp = 15; break;
    4.23 +                        case 4: bpp = 16; break;
    4.24 +                        case 5: bpp = 24; break;
    4.25 +                        case 6: bpp = 32; break;
    4.26 +                }
    4.27 +
    4.28 +                sprintf(temps, "Mach64 colour depth : %i bpp\n", bpp);
    4.29 +                strncat(s, temps, cur_len);
    4.30 +                cur_len -= strlen(temps);
    4.31          
    4.32 -        return svga_add_status_info(s, max_len, &mach64->svga);
    4.33 +                sprintf(temps, "Mach64 resolution : %i x %i\n", svga->hdisp, svga->dispend);
    4.34 +                strncat(s, temps, cur_len);
    4.35 +                cur_len -= strlen(temps);
    4.36 +        
    4.37 +                sprintf(temps, "Mach64 refresh rate : %i Hz\n\n", svga->frames);
    4.38 +                svga->frames = 0;
    4.39 +                strncat(s, temps, cur_len);
    4.40 +                cur_len -= strlen(temps);
    4.41 +                
    4.42 +                return max_len - cur_len;
    4.43 +        }
    4.44 +        else
    4.45 +        {
    4.46 +                strncat(s, "Mach64 in SVGA mode\n", cur_len);
    4.47 +                cur_len -= strlen("Mach64 in SVGA mode\n");
    4.48 +                return svga_add_status_info(s, cur_len, &mach64->svga);
    4.49 +        }
    4.50  }
    4.51  
    4.52  device_t mach64gx_device =
     5.1 --- a/src/win.c	Wed Dec 11 20:18:26 2013 +0000
     5.2 +++ b/src/win.c	Thu Dec 12 18:16:22 2013 +0000
     5.3 @@ -1405,6 +1405,7 @@
     5.4                  SendDlgItemMessage(hdlg,IDC_STEXT7,WM_SETTEXT,(WPARAM)NULL,(LPARAM)s);
     5.5                  sprintf(s,"Timer 0 frequency : %fHz",pit_timer0_freq());
     5.6                  SendDlgItemMessage(hdlg,IDC_STEXT8,WM_SETTEXT,(WPARAM)NULL,(LPARAM)s);
     5.7 +                device_s[0] = 0;
     5.8                  device_add_status_info(device_s, 4096);
     5.9                  SendDlgItemMessage(hdlg,IDC_STEXT_DEVICE,WM_SETTEXT,(WPARAM)NULL,(LPARAM)device_s);
    5.10                  return TRUE;