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;
