diff --git a/src/sound_sb.c b/src/sound_sb.c index d684ff1..421baf7 100644 --- a/src/sound_sb.c +++ b/src/sound_sb.c @@ -151,8 +151,8 @@ void sb_pro_mixer_write(uint16_t addr, uint8_t val, void *p) mixer->filter = !(mixer->regs[0xe] & 0x20); mixer->bass_l = mixer->bass_r = 8; mixer->treble_l = mixer->treble_r = 8; - pclog("%02X %02X %02X\n", mixer->regs[0x04], mixer->regs[0x22], mixer->regs[0x26]); - 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); +// pclog("%02X %02X %02X\n", mixer->regs[0x04], mixer->regs[0x22], mixer->regs[0x26]); +// 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); if (mixer->index == 0xe) sb_dsp_set_stereo(&sb->dsp, val & 2); } @@ -211,8 +211,8 @@ void sb_16_mixer_write(uint16_t addr, uint8_t val, void *p) mixer->treble_l = mixer->regs[0x44] >> 4; mixer->treble_r = mixer->regs[0x45] >> 4; mixer->filter = 0; - 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]); - 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); +// 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]); +// 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); } } @@ -429,6 +429,13 @@ void sb_speed_changed(void *p) sb_dsp_speed_changed(&sb->dsp); } +int sb_add_status_info(char *s, int max_len, void *p) +{ + sb_t *sb = (sb_t *)p; + + sb_dsp_add_status_info(s, max_len, &sb->dsp); +} + device_t sb_1_device = { "Sound Blaster v1.0", @@ -438,7 +445,7 @@ device_t sb_1_device = NULL, sb_speed_changed, NULL, - NULL + sb_add_status_info }; device_t sb_15_device = { @@ -449,7 +456,7 @@ device_t sb_15_device = NULL, sb_speed_changed, NULL, - NULL + sb_add_status_info }; device_t sb_2_device = { @@ -460,7 +467,7 @@ device_t sb_2_device = NULL, sb_speed_changed, NULL, - NULL + sb_add_status_info }; device_t sb_pro_v1_device = { @@ -471,7 +478,7 @@ device_t sb_pro_v1_device = NULL, sb_speed_changed, NULL, - NULL + sb_add_status_info }; device_t sb_pro_v2_device = { @@ -482,7 +489,7 @@ device_t sb_pro_v2_device = NULL, sb_speed_changed, NULL, - NULL + sb_add_status_info }; device_t sb_16_device = { @@ -493,7 +500,7 @@ device_t sb_16_device = NULL, sb_speed_changed, NULL, - NULL + sb_add_status_info }; device_t sb_awe32_device = { @@ -504,5 +511,5 @@ device_t sb_awe32_device = sb_awe32_available, sb_speed_changed, NULL, - NULL + sb_add_status_info }; diff --git a/src/sound_sb_dsp.c b/src/sound_sb_dsp.c index affc609..170563e 100644 --- a/src/sound_sb_dsp.c +++ b/src/sound_sb_dsp.c @@ -269,7 +269,7 @@ void sb_dsp_setdma8(sb_dsp_t *dsp, int dma) void sb_exec_command(sb_dsp_t *dsp) { int temp,c; - pclog("sb_exec_command : SB command %02X\n", dsp->sb_command); +// pclog("sb_exec_command : SB command %02X\n", dsp->sb_command); switch (dsp->sb_command) { case 0x01: /*???*/ @@ -516,7 +516,7 @@ void sb_exec_command(sb_dsp_t *dsp) void sb_write(uint16_t a, uint8_t v, void *priv) { sb_dsp_t *dsp = (sb_dsp_t *)priv; - printf("sb_write : Write soundblaster %04X %02X %04X:%04X %02X\n",a,v,CS,pc,dsp->sb_command); +// printf("sb_write : Write soundblaster %04X %02X %04X:%04X %02X\n",a,v,CS,pc,dsp->sb_command); switch (a&0xF) { case 6: /*Reset*/ @@ -550,7 +550,7 @@ uint8_t sb_read(uint16_t a, void *priv) { sb_dsp_t *dsp = (sb_dsp_t *)priv; // if (a==0x224) output=1; - pclog("sb_read : Read soundblaster %04X %04X:%04X\n",a,CS,pc); +// pclog("sb_read : Read soundblaster %04X %04X:%04X\n",a,CS,pc); switch (a & 0xf) { case 0xA: /*Read data*/ @@ -594,7 +594,7 @@ void sb_dsp_init(sb_dsp_t *dsp, int type) void sb_dsp_setaddr(sb_dsp_t *dsp, uint16_t addr) { - pclog("sb_dsp_setaddr : %04X\n", addr); +// pclog("sb_dsp_setaddr : %04X\n", addr); io_removehandler(dsp->sb_addr + 6, 0x0002, sb_read, NULL, NULL, sb_write, NULL, NULL, dsp); io_removehandler(dsp->sb_addr + 0xa, 0x0006, sb_read, NULL, NULL, sb_write, NULL, NULL, dsp); dsp->sb_addr = addr; @@ -824,7 +824,7 @@ void pollsb(void *p) { sb_irq(dsp, 1); dsp->sbenable = dsp->sb_8_enable; - pclog("SB pause over\n"); +// pclog("SB pause over\n"); } } } @@ -912,3 +912,73 @@ void sb_dsp_poll(sb_dsp_t *dsp, int16_t *l, int16_t *r) *l = dsp->sbdatl; *r = dsp->sbdatr; } + +int sb_dsp_add_status_info(char *s, int max_len, sb_dsp_t *dsp) +{ + char temps[128]; + int cur_len = max_len; + int len; + int freq; + + if (dsp->sb_timeo < 256) + freq = 1000000 / (256 - dsp->sb_timeo); + else + freq = dsp->sb_timeo - 256; + + if (dsp->sb_8_enable && dsp->sb_8_output) + { + switch (dsp->sb_8_format) + { + case 0x00: /*Mono unsigned*/ + case 0x10: /*Mono signed*/ + if (dsp->sb_type >= SBPRO && dsp->sb_type < SB16 && dsp->stereo) + { + strcpy(temps, "SB playback format : 8-bit stereo\n"); + freq /= 2; + } + else + strcpy(temps, "SB playback format : 8-bit mono\n"); + break; + case 0x20: /*Stereo unsigned*/ + case 0x30: /*Stereo signed*/ + strcpy(temps, "SB playback format : 8-bit stereo\n"); + break; + case ADPCM_4: + strcpy(temps, "SB playback format : 4-bit ADPCM\n"); + break; + case ADPCM_26: + strcpy(temps, "SB playback format : 2.6-bit ADPCM\n"); + break; + case ADPCM_2: + strcpy(temps, "SB playback format : 2-bit ADPCM\n"); + break; + } + } + else if (dsp->sb_16_enable && dsp->sb_16_output) + { + switch (dsp->sb_16_format) + { + case 0x00: /*Mono unsigned*/ + case 0x10: /*Mono signed*/ + strcpy(temps, "SB playback format : 16-bit mono\n"); + break; + case 0x20: /*Stereo unsigned*/ + case 0x30: /*Stereo signed*/ + strcpy(temps, "SB playback format : 16-bit stereo\n"); + break; + } + } + else + strcpy(temps, "SB playback stopped\n"); + strncat(s, temps, cur_len); + cur_len -= strlen(temps); + + if ((dsp->sb_8_enable && dsp->sb_8_output) || (dsp->sb_16_enable && dsp->sb_16_output)) + { + sprintf(temps, "SB playback frequency : %iHz\n", freq); + strncat(s, temps, cur_len); + cur_len -= strlen(temps); + } + + return max_len - cur_len; +} diff --git a/src/sound_sb_dsp.h b/src/sound_sb_dsp.h index a098d7f..5126f55 100644 --- a/src/sound_sb_dsp.h +++ b/src/sound_sb_dsp.h @@ -67,3 +67,5 @@ void sb_dsp_speed_changed(sb_dsp_t *dsp); void sb_dsp_poll(sb_dsp_t *dsp, int16_t *l, int16_t *r); void sb_dsp_set_stereo(sb_dsp_t *dsp, int stereo); + +int sb_dsp_add_status_info(char *s, int max_len, sb_dsp_t *dsp); diff --git a/src/vid_ati_mach64.c b/src/vid_ati_mach64.c index 53839a9..e06a1cd 100644 --- a/src/vid_ati_mach64.c +++ b/src/vid_ati_mach64.c @@ -2088,8 +2088,48 @@ void mach64_force_redraw(void *p) int mach64_add_status_info(char *s, int max_len, void *p) { mach64_t *mach64 = (mach64_t *)p; + int cur_len = max_len; + + if (((mach64->crtc_gen_cntl >> 24) & 3) == 3) + { + svga_t *svga = &mach64->svga; + char temps[128]; + int bpp = 4; + + strncat(s, "Mach64 in native mode\n", cur_len); + cur_len -= strlen("Mach64 in native mode\n"); + + switch ((mach64->crtc_gen_cntl >> 8) & 7) + { + case 1: bpp = 4; break; + case 2: bpp = 8; break; + case 3: bpp = 15; break; + case 4: bpp = 16; break; + case 5: bpp = 24; break; + case 6: bpp = 32; break; + } + + sprintf(temps, "Mach64 colour depth : %i bpp\n", bpp); + strncat(s, temps, cur_len); + cur_len -= strlen(temps); - return svga_add_status_info(s, max_len, &mach64->svga); + sprintf(temps, "Mach64 resolution : %i x %i\n", svga->hdisp, svga->dispend); + strncat(s, temps, cur_len); + cur_len -= strlen(temps); + + sprintf(temps, "Mach64 refresh rate : %i Hz\n\n", svga->frames); + svga->frames = 0; + strncat(s, temps, cur_len); + cur_len -= strlen(temps); + + return max_len - cur_len; + } + else + { + strncat(s, "Mach64 in SVGA mode\n", cur_len); + cur_len -= strlen("Mach64 in SVGA mode\n"); + return svga_add_status_info(s, cur_len, &mach64->svga); + } } device_t mach64gx_device = diff --git a/src/win.c b/src/win.c index 0513216..1a68ca3 100644 --- a/src/win.c +++ b/src/win.c @@ -1405,6 +1405,7 @@ BOOL CALLBACK statusdlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lPara SendDlgItemMessage(hdlg,IDC_STEXT7,WM_SETTEXT,(WPARAM)NULL,(LPARAM)s); sprintf(s,"Timer 0 frequency : %fHz",pit_timer0_freq()); SendDlgItemMessage(hdlg,IDC_STEXT8,WM_SETTEXT,(WPARAM)NULL,(LPARAM)s); + device_s[0] = 0; device_add_status_info(device_s, 4096); SendDlgItemMessage(hdlg,IDC_STEXT_DEVICE,WM_SETTEXT,(WPARAM)NULL,(LPARAM)device_s); return TRUE;