The SCSI data buffer is now zeroed before being allocated, MODE SELECT data is therefore no longer lost in transit;
SCSI DMA writes (for MODE SELECT) now correctly use InitLength instead of request_length when bus type is SCSI; Fixed MODE SELECT page saving; CD Audio volume is now correctly initialized on card initialization for all Sound Blaster variants, fixes CD Audio being muted when booting without the Sound Blaster initialization program; Brought the Sound Blaster variants back to a sane sound volume but still louder than the old quietness; Moved SCSI adapter initialization to before sound card initialization, fixes DOS SCSI CD-ROM driver hangs under some conditions.
This commit is contained in:
@@ -1724,8 +1724,6 @@ static void BuslogicCDROMCommand(Buslogic_t *Buslogic)
|
||||
temp_cdb[1] &= 0x1f; /* Make sure the LUN field of the temporary CDB is always 0, otherwise Daemon Tools drives will misehave when a command is passed through to them. */
|
||||
}
|
||||
|
||||
memset(SCSIDevices[Id][Lun].CmdBuffer, 0, 390144);
|
||||
|
||||
//Finally, execute the SCSI command immediately and get the transfer length.
|
||||
|
||||
SCSIPhase = SCSI_PHASE_COMMAND;
|
||||
@@ -1808,6 +1806,9 @@ static int BuslogicSCSIRequestSetup(Buslogic_t *Buslogic, uint32_t CCBPointer, M
|
||||
|
||||
SCSIDevices[Id][Lun].InitLength = 0;
|
||||
|
||||
/* Do this here, so MODE SELECT data will does not get lost in transit. */
|
||||
memset(SCSIDevices[Id][Lun].CmdBuffer, 0, 390144);
|
||||
|
||||
BuslogicDataBufferAllocate(BuslogicRequests, BuslogicRequests->Is24bit);
|
||||
|
||||
if (!buslogic_scsi_drive_is_cdrom(Id, Lun))
|
||||
|
||||
31
src/cdrom.c
31
src/cdrom.c
@@ -532,10 +532,6 @@ int cdrom_mode_select_terminate(uint8_t id, int force)
|
||||
if (((cdrom[id].written_length >= cdrom[id].total_length) || force) && (cdrom[id].mode_select_phase != MODE_SELECT_PHASE_IDLE))
|
||||
{
|
||||
cdrom_log("CD-ROM %i: MODE SELECT terminate: %i\n", id, force);
|
||||
if (!force && cdrom[id].do_page_save && (cdrom_mode_sense_pages_default[id][cdrom[id].current_page_pos][0] & 0x80))
|
||||
{
|
||||
cdrom_mode_sense_save(id);
|
||||
}
|
||||
cdrom[id].current_page_pos = cdrom[id].current_page_len = cdrom[id].block_descriptor_len = 0;
|
||||
cdrom[id].total_length = cdrom[id].written_length = 0;
|
||||
cdrom[id].mode_select_phase = MODE_SELECT_PHASE_IDLE;
|
||||
@@ -707,6 +703,14 @@ int cdrom_mode_select_write(uint8_t id, uint8_t val)
|
||||
case MODE_SELECT_PHASE_PAGE:
|
||||
cdrom_log("CD-ROM %i: MODE SELECT page (%02X)\n", id, val);
|
||||
ret = cdrom_mode_select_page(id, val);
|
||||
if (cdrom[id].mode_select_phase == MODE_SELECT_PHASE_PAGE_HEADER)
|
||||
{
|
||||
if (cdrom[id].do_page_save && (cdrom_mode_sense_pages_default[id][cdrom[id].current_page_code][0] & 0x80))
|
||||
{
|
||||
cdrom_log("CD-ROM %i: Page %i finished, saving it...\n", id, cdrom[id].current_page_code);
|
||||
cdrom_mode_sense_save(id);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
cdrom_log("CD-ROM %i: MODE SELECT unknown phase (%02X)\n", id, val);
|
||||
@@ -1791,13 +1795,13 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
|
||||
cdrom_log("CD-ROM %i: Command 0x%02X, Sense Key %02X, Asc %02X, Ascq %02X, %i, Unit attention: %i\n", id, cdb[0], cdrom_sense_key, cdrom_asc, cdrom_ascq, ins, cdrom[id].unit_attention);
|
||||
cdrom_log("CD-ROM %i: Request length: %04X\n", id, cdrom[id].request_length);
|
||||
|
||||
#if 0
|
||||
// #if 0
|
||||
int CdbLength;
|
||||
for (CdbLength = 1; CdbLength < cdrom[id].cdb_len; CdbLength++)
|
||||
{
|
||||
cdrom_log("CD-ROM %i: CDB[%d] = 0x%02X\n", id, CdbLength, cdb[CdbLength]);
|
||||
}
|
||||
#endif
|
||||
// #endif
|
||||
}
|
||||
|
||||
msf = cdb[1] & 2;
|
||||
@@ -2899,6 +2903,8 @@ int cdrom_read_from_dma(uint8_t id)
|
||||
int i = 0;
|
||||
int ret = 0;
|
||||
|
||||
int in_data_length = 0;
|
||||
|
||||
if (cdrom_drives[id].bus_type)
|
||||
{
|
||||
ret = cdrom_read_from_scsi_dma(cdrom_drives[id].scsi_device_id, cdrom_drives[id].scsi_device_lun);
|
||||
@@ -2913,7 +2919,18 @@ int cdrom_read_from_dma(uint8_t id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < cdrom[id].request_length; i++)
|
||||
if (cdrom_drives[id].bus_type)
|
||||
{
|
||||
in_data_length = SCSIDevices[cdrom_drives[id].scsi_device_id][cdrom_drives[id].scsi_device_lun].InitLength;
|
||||
cdrom_log("CD-ROM %i: SCSI Input data length: %i\n", id, in_data_length);
|
||||
}
|
||||
else
|
||||
{
|
||||
in_data_length = cdrom[id].request_length;
|
||||
cdrom_log("CD-ROM %i: ATAPI Input data length: %i\n", id, in_data_length);
|
||||
}
|
||||
|
||||
for (i = 0; i < in_data_length; i++)
|
||||
{
|
||||
ret = cdrom_mode_select_write(id, cdbufferb[i]);
|
||||
ret = cdrom_mode_select_return(id, ret);
|
||||
|
||||
@@ -122,7 +122,7 @@ void gameport_write(uint16_t addr, uint8_t val, void *p)
|
||||
|
||||
timer_clock();
|
||||
gameport->state |= 0x0f;
|
||||
// pclog("gameport_write : joysticks_present=%i\n", joysticks_present);
|
||||
pclog("gameport_write : joysticks_present=%i\n", joysticks_present);
|
||||
|
||||
gameport->axis[0].count = gameport_time(gameport->joystick->read_axis(gameport->joystick_dat, 0));
|
||||
gameport->axis[1].count = gameport_time(gameport->joystick->read_axis(gameport->joystick_dat, 1));
|
||||
@@ -145,7 +145,7 @@ uint8_t gameport_read(uint16_t addr, void *p)
|
||||
// else
|
||||
// ret = 0xff;
|
||||
|
||||
// pclog("gameport_read: ret=%02x %08x:%08x isa_cycles=%i %i\n", ret, cs, cpu_state.pc, isa_cycles, gameport->axis[0].count);
|
||||
// pclog("gameport_read: ret=%02x %08x:%08x isa_cycles=%i %i\n", ret, cs, cpu_state.pc, isa_cycles, gameport->axis[0].count);
|
||||
|
||||
cycles -= ISA_CYCLES(8);
|
||||
|
||||
|
||||
22
src/pc.c
22
src/pc.c
@@ -442,17 +442,6 @@ void resetpchard()
|
||||
vlan_reset(); //NETWORK
|
||||
}
|
||||
network_card_init(network_card_current);
|
||||
|
||||
sound_card_init(sound_card_current);
|
||||
if (GUS)
|
||||
device_add(&gus_device);
|
||||
if (GAMEBLASTER)
|
||||
device_add(&cms_device);
|
||||
if (SSI2001)
|
||||
device_add(&ssi2001_device);
|
||||
if (voodoo_enabled)
|
||||
device_add(&voodoo_device);
|
||||
pc_reset();
|
||||
|
||||
for (i = 0; i < CDROM_NUM; i++)
|
||||
{
|
||||
@@ -467,6 +456,17 @@ void resetpchard()
|
||||
{
|
||||
device_add(&BuslogicDevice);
|
||||
}
|
||||
|
||||
sound_card_init(sound_card_current);
|
||||
if (GUS)
|
||||
device_add(&gus_device);
|
||||
if (GAMEBLASTER)
|
||||
device_add(&cms_device);
|
||||
if (SSI2001)
|
||||
device_add(&ssi2001_device);
|
||||
if (voodoo_enabled)
|
||||
device_add(&voodoo_device);
|
||||
pc_reset();
|
||||
|
||||
loadnvr();
|
||||
|
||||
|
||||
10
src/sound.c
10
src/sound.c
@@ -164,9 +164,11 @@ static void sound_cd_thread(void *param)
|
||||
|
||||
/* Then, adjust input from drive according to ATAPI/SCSI volume. */
|
||||
cd_buffer_temp[0] *= (float) audio_vol_l;
|
||||
cd_buffer_temp[0] /= 255.0;
|
||||
// cd_buffer_temp[0] /= 255.0;
|
||||
cd_buffer_temp[0] /= 511.0;
|
||||
cd_buffer_temp[1] *= (float) audio_vol_r;
|
||||
cd_buffer_temp[1] /= 255.0;
|
||||
// cd_buffer_temp[1] /= 255.0;
|
||||
cd_buffer_temp[1] /= 511.0;
|
||||
|
||||
/*Apply ATAPI channel select*/
|
||||
cd_buffer_temp2[0] = cd_buffer_temp2[1] = 0.0;
|
||||
@@ -229,11 +231,13 @@ void sound_init()
|
||||
|
||||
if (available_cdrom_drives)
|
||||
{
|
||||
// pclog("One or more CD-ROM drives are available, starting CD Audio thread...\n");
|
||||
sound_cd_event = thread_create_event();
|
||||
sound_cd_thread_h = thread_create(sound_cd_thread, NULL);
|
||||
}
|
||||
|
||||
cd_thread_enable = available_cdrom_drives ? 1 : 0;
|
||||
// pclog("cd_thread_enable = %i\n", cd_thread_enable);
|
||||
}
|
||||
|
||||
void sound_add_handler(void (*get_buffer)(int32_t *buffer, int len, void *p), void *p)
|
||||
@@ -333,11 +337,13 @@ void sound_cd_thread_reset()
|
||||
|
||||
if (available_cdrom_drives && !cd_thread_enable)
|
||||
{
|
||||
// pclog("One or more CD-ROM drives are now available, but none was before, starting the CD Audio thread...\n");
|
||||
sound_cd_event = thread_create_event();
|
||||
sound_cd_thread_h = thread_create(sound_cd_thread, NULL);
|
||||
}
|
||||
else if (!available_cdrom_drives && cd_thread_enable)
|
||||
{
|
||||
// pclog("No CD-ROM drives are now available, but one or more was before, killing the CD Audio thread...\n");
|
||||
thread_destroy_event(sound_cd_event);
|
||||
thread_kill(sound_cd_thread_h);
|
||||
sound_cd_thread_h = NULL;
|
||||
|
||||
@@ -54,22 +54,22 @@ static void sb_get_buffer_opl2(int32_t *buffer, int len, void *p)
|
||||
{
|
||||
int32_t out_l, out_r;
|
||||
|
||||
out_l = ((sb->opl.buffer[c] * mixer->fm_l) >> 13);
|
||||
out_r = ((sb->opl.buffer[c + 1] * mixer->fm_r) >> 13);
|
||||
out_l = ((sb->opl.buffer[c] * mixer->fm_l) >> 16);
|
||||
out_r = ((sb->opl.buffer[c + 1] * mixer->fm_r) >> 16);
|
||||
|
||||
if (sb->mixer.filter)
|
||||
{
|
||||
out_l += (int)(((sb_iir(0, (float)sb->dsp.buffer[c]) / 1.3) * mixer->voice_l) / 3) >> 13;
|
||||
out_r += (int)(((sb_iir(1, (float)sb->dsp.buffer[c + 1]) / 1.3) * mixer->voice_r) / 3) >> 13;
|
||||
out_l += (int)(((sb_iir(0, (float)sb->dsp.buffer[c]) / 1.3) * mixer->voice_l) / 3) >> 16;
|
||||
out_r += (int)(((sb_iir(1, (float)sb->dsp.buffer[c + 1]) / 1.3) * mixer->voice_r) / 3) >> 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
out_l += ((int32_t)(sb->dsp.buffer[c] * mixer->voice_l) / 3) >> 13;
|
||||
out_r += ((int32_t)(sb->dsp.buffer[c + 1] * mixer->voice_r) / 3) >> 13;
|
||||
out_l += ((int32_t)(sb->dsp.buffer[c] * mixer->voice_l) / 3) >> 16;
|
||||
out_r += ((int32_t)(sb->dsp.buffer[c + 1] * mixer->voice_r) / 3) >> 16;
|
||||
}
|
||||
|
||||
out_l = (out_l * mixer->master_l) >> 13;
|
||||
out_r = (out_r * mixer->master_r) >> 13;
|
||||
out_l = (out_l * mixer->master_l) >> 15;
|
||||
out_r = (out_r * mixer->master_r) >> 15;
|
||||
|
||||
if (mixer->bass_l != 8 || mixer->bass_r != 8 || mixer->treble_l != 8 || mixer->treble_r != 8)
|
||||
{
|
||||
@@ -106,22 +106,22 @@ static void sb_get_buffer_opl3(int32_t *buffer, int len, void *p)
|
||||
// int c_emu8k = (((c/2) * 44100) / 48000)*2;
|
||||
int32_t out_l, out_r;
|
||||
|
||||
out_l = ((sb->opl.buffer[c] * mixer->fm_l) >> 13);
|
||||
out_r = ((sb->opl.buffer[c + 1] * mixer->fm_r) >> 13);
|
||||
out_l = ((sb->opl.buffer[c] * mixer->fm_l) >> 16);
|
||||
out_r = ((sb->opl.buffer[c + 1] * mixer->fm_r) >> 16);
|
||||
|
||||
if (sb->mixer.filter)
|
||||
{
|
||||
out_l += (int)(((sb_iir(0, (float)sb->dsp.buffer[c]) / 1.3) * mixer->voice_l) / 3) >> 13;
|
||||
out_r += (int)(((sb_iir(1, (float)sb->dsp.buffer[c + 1]) / 1.3) * mixer->voice_r) / 3) >> 13;
|
||||
out_l += (int)(((sb_iir(0, (float)sb->dsp.buffer[c]) / 1.3) * mixer->voice_l) / 3) >> 16;
|
||||
out_r += (int)(((sb_iir(1, (float)sb->dsp.buffer[c + 1]) / 1.3) * mixer->voice_r) / 3) >> 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
out_l += ((int32_t)(sb->dsp.buffer[c] * mixer->voice_l) / 3) >> 13;
|
||||
out_r += ((int32_t)(sb->dsp.buffer[c + 1] * mixer->voice_r) / 3) >> 13;
|
||||
out_l += ((int32_t)(sb->dsp.buffer[c] * mixer->voice_l) / 3) >> 16;
|
||||
out_r += ((int32_t)(sb->dsp.buffer[c + 1] * mixer->voice_r) / 3) >> 16;
|
||||
}
|
||||
|
||||
out_l = (out_l * mixer->master_l) >> 13;
|
||||
out_r = (out_r * mixer->master_r) >> 13;
|
||||
out_l = (out_l * mixer->master_l) >> 15;
|
||||
out_r = (out_r * mixer->master_r) >> 15;
|
||||
|
||||
if (mixer->bass_l != 8 || mixer->bass_r != 8 || mixer->treble_l != 8 || mixer->treble_r != 8)
|
||||
{
|
||||
@@ -160,25 +160,25 @@ static void sb_get_buffer_emu8k(int32_t *buffer, int len, void *p)
|
||||
int c_emu8k = (((c/2) * 44100) / 48000)*2;
|
||||
int32_t out_l, out_r;
|
||||
|
||||
out_l = (((int32_t)sb->opl.buffer[c] * (int32_t)mixer->fm_l) >> 13);
|
||||
out_r = (((int32_t)sb->opl.buffer[c + 1] * (int32_t)mixer->fm_r) >> 13);
|
||||
out_l = (((int32_t)sb->opl.buffer[c] * (int32_t)mixer->fm_l) >> 16);
|
||||
out_r = (((int32_t)sb->opl.buffer[c + 1] * (int32_t)mixer->fm_r) >> 16);
|
||||
|
||||
out_l += ((sb->emu8k.buffer[c_emu8k] * mixer->fm_l) >> 13);
|
||||
out_r += ((sb->emu8k.buffer[c_emu8k + 1] * mixer->fm_l) >> 13);
|
||||
out_l += ((sb->emu8k.buffer[c_emu8k] * mixer->fm_l) >> 16);
|
||||
out_r += ((sb->emu8k.buffer[c_emu8k + 1] * mixer->fm_l) >> 16);
|
||||
|
||||
if (sb->mixer.filter)
|
||||
{
|
||||
out_l += (int)(((sb_iir(0, (float)sb->dsp.buffer[c]) / 1.3) * mixer->voice_l) / 3) >> 13;
|
||||
out_r += (int)(((sb_iir(1, (float)sb->dsp.buffer[c + 1]) / 1.3) * mixer->voice_r) / 3) >> 13;
|
||||
out_l += (int)(((sb_iir(0, (float)sb->dsp.buffer[c]) / 1.3) * mixer->voice_l) / 3) >> 16;
|
||||
out_r += (int)(((sb_iir(1, (float)sb->dsp.buffer[c + 1]) / 1.3) * mixer->voice_r) / 3) >> 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
out_l += ((int32_t)(sb->dsp.buffer[c] * mixer->voice_l) / 3) >> 13;
|
||||
out_r += ((int32_t)(sb->dsp.buffer[c + 1] * mixer->voice_r) / 3) >> 13;
|
||||
out_l += ((int32_t)(sb->dsp.buffer[c] * mixer->voice_l) / 3) >> 16;
|
||||
out_r += ((int32_t)(sb->dsp.buffer[c + 1] * mixer->voice_r) / 3) >> 16;
|
||||
}
|
||||
|
||||
out_l = (out_l * mixer->master_l) >> 13;
|
||||
out_r = (out_r * mixer->master_r) >> 13;
|
||||
out_l = (out_l * mixer->master_l) >> 15;
|
||||
out_r = (out_r * mixer->master_r) >> 15;
|
||||
|
||||
if (mixer->bass_l != 8 || mixer->bass_r != 8 || mixer->treble_l != 8 || mixer->treble_r != 8)
|
||||
{
|
||||
@@ -224,8 +224,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;
|
||||
sound_set_cd_volume(((uint32_t)mixer->master_l * (uint32_t)mixer->cd_l) / 8191,
|
||||
((uint32_t)mixer->master_r * (uint32_t)mixer->cd_r) / 8191);
|
||||
sound_set_cd_volume(((uint32_t)mixer->master_l * (uint32_t)mixer->cd_l) / 65535,
|
||||
((uint32_t)mixer->master_r * (uint32_t)mixer->cd_r) / 65535);
|
||||
// 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)
|
||||
@@ -299,8 +299,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;
|
||||
sound_set_cd_volume(((uint32_t)mixer->master_l * (uint32_t)mixer->cd_l) / 8191,
|
||||
((uint32_t)mixer->master_r * (uint32_t)mixer->cd_r) / 8191);
|
||||
sound_set_cd_volume(((uint32_t)mixer->master_l * (uint32_t)mixer->cd_l) / 65535,
|
||||
((uint32_t)mixer->master_r * (uint32_t)mixer->cd_r) / 65535);
|
||||
// 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);
|
||||
}
|
||||
@@ -370,9 +370,12 @@ void sb_mixer_init(sb_mixer_t *mixer)
|
||||
mixer->master_l = mixer->master_r = 65535;
|
||||
mixer->voice_l = mixer->voice_r = 65535;
|
||||
mixer->fm_l = mixer->fm_r = 65535;
|
||||
mixer->cd_l = mixer->cd_r = 65535;
|
||||
mixer->bass_l = mixer->bass_r = 8;
|
||||
mixer->treble_l = mixer->treble_r = 8;
|
||||
mixer->filter = 1;
|
||||
sound_set_cd_volume(((uint32_t)mixer->master_l * (uint32_t)mixer->cd_l) / 65535,
|
||||
((uint32_t)mixer->master_r * (uint32_t)mixer->cd_r) / 65535);
|
||||
}
|
||||
|
||||
void *sb_1_init()
|
||||
@@ -449,6 +452,7 @@ void *sb_pro_v1_init()
|
||||
sb->mixer.regs[0x22] = 0xff;
|
||||
sb->mixer.regs[0x04] = 0xff;
|
||||
sb->mixer.regs[0x26] = 0xff;
|
||||
sb->mixer.regs[0x28] = 0xff;
|
||||
sb->mixer.regs[0xe] = 0;
|
||||
|
||||
return sb;
|
||||
@@ -475,6 +479,7 @@ void *sb_pro_v2_init()
|
||||
sb->mixer.regs[0x22] = 0xff;
|
||||
sb->mixer.regs[0x04] = 0xff;
|
||||
sb->mixer.regs[0x26] = 0xff;
|
||||
sb->mixer.regs[0x28] = 0xff;
|
||||
sb->mixer.regs[0xe] = 0;
|
||||
|
||||
return sb;
|
||||
@@ -506,6 +511,8 @@ void *sb_16_init()
|
||||
sb->mixer.regs[0x33] = 31 << 3;
|
||||
sb->mixer.regs[0x34] = 31 << 3;
|
||||
sb->mixer.regs[0x35] = 31 << 3;
|
||||
sb->mixer.regs[0x36] = 31 << 3;
|
||||
sb->mixer.regs[0x37] = 31 << 3;
|
||||
sb->mixer.regs[0x44] = 8 << 4;
|
||||
sb->mixer.regs[0x45] = 8 << 4;
|
||||
sb->mixer.regs[0x46] = 8 << 4;
|
||||
@@ -513,6 +520,7 @@ void *sb_16_init()
|
||||
sb->mixer.regs[0x22] = (sb->mixer.regs[0x30] & 0xf0) | (sb->mixer.regs[0x31] >> 4);
|
||||
sb->mixer.regs[0x04] = (sb->mixer.regs[0x32] & 0xf0) | (sb->mixer.regs[0x33] >> 4);
|
||||
sb->mixer.regs[0x26] = (sb->mixer.regs[0x34] & 0xf0) | (sb->mixer.regs[0x35] >> 4);
|
||||
sb->mixer.regs[0x28] = (sb->mixer.regs[0x36] & 0xf0) | (sb->mixer.regs[0x37] >> 4);
|
||||
|
||||
return sb;
|
||||
}
|
||||
@@ -550,6 +558,8 @@ void *sb_awe32_init()
|
||||
sb->mixer.regs[0x33] = 31 << 3;
|
||||
sb->mixer.regs[0x34] = 31 << 3;
|
||||
sb->mixer.regs[0x35] = 31 << 3;
|
||||
sb->mixer.regs[0x36] = 31 << 3;
|
||||
sb->mixer.regs[0x37] = 31 << 3;
|
||||
sb->mixer.regs[0x44] = 8 << 4;
|
||||
sb->mixer.regs[0x45] = 8 << 4;
|
||||
sb->mixer.regs[0x46] = 8 << 4;
|
||||
@@ -557,6 +567,7 @@ void *sb_awe32_init()
|
||||
sb->mixer.regs[0x22] = (sb->mixer.regs[0x30] & 0xf0) | (sb->mixer.regs[0x31] >> 4);
|
||||
sb->mixer.regs[0x04] = (sb->mixer.regs[0x32] & 0xf0) | (sb->mixer.regs[0x33] >> 4);
|
||||
sb->mixer.regs[0x26] = (sb->mixer.regs[0x34] & 0xf0) | (sb->mixer.regs[0x35] >> 4);
|
||||
sb->mixer.regs[0x28] = (sb->mixer.regs[0x36] & 0xf0) | (sb->mixer.regs[0x37] >> 4);
|
||||
|
||||
return sb;
|
||||
}
|
||||
@@ -760,6 +771,14 @@ static device_config_t sb_16_config[] =
|
||||
.description = "0x240",
|
||||
.value = 0x240
|
||||
},
|
||||
{
|
||||
.description = "0x260",
|
||||
.value = 0x260
|
||||
},
|
||||
{
|
||||
.description = "0x280",
|
||||
.value = 0x280
|
||||
},
|
||||
{
|
||||
.description = ""
|
||||
}
|
||||
@@ -891,6 +910,14 @@ static device_config_t sb_awe32_config[] =
|
||||
.description = "0x240",
|
||||
.value = 0x240
|
||||
},
|
||||
{
|
||||
.description = "0x260",
|
||||
.value = 0x260
|
||||
},
|
||||
{
|
||||
.description = "0x280",
|
||||
.value = 0x280
|
||||
},
|
||||
{
|
||||
.description = ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user