From 7cb901e5e6874ae23818c57e92da4c8176b2583a Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 13 Nov 2016 18:21:15 +0100 Subject: [PATCH] Sound Blaster 16 and AWE32 MPU-401 base address and 16-bit DMA channel are now configurable; AHA-154x SCSI controller base address, IRQ, and 16-bit DMA channel are now configurable. --- src/aha154x.c | 18 ++-- src/ibm.h | 2 + src/pc.c | 8 ++ src/pc.rc | 23 ++++- src/resources.h | 9 ++ src/sound_sb.c | 108 ++++++++++++++++++- src/sound_sb_dsp.c | 10 +- src/sound_sb_dsp.h | 2 + src/win.c | 253 +++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 419 insertions(+), 14 deletions(-) diff --git a/src/aha154x.c b/src/aha154x.c index d3c9b13f1..5b7653b11 100644 --- a/src/aha154x.c +++ b/src/aha154x.c @@ -289,6 +289,10 @@ typedef struct Adaptec_t Adaptec_t AdaptecLUN; +int scsi_base = 0x330; +int scsi_dma = 5; +int scsi_irq = 11; + static void AdaptecSCSIRequestSetup(Adaptec_t *Adaptec, uint32_t CCBPointer); static void AdaptecStartMailbox(Adaptec_t *Adaptec); @@ -309,11 +313,11 @@ void AdaptecLog(const char *format, ...) } } -static void AdaptecSetDMAChannel(int DmaPort1, int DmaData1, int DmaPort2, int DmaData2) +/* static void AdaptecSetDMAChannel(int DmaPort1, int DmaData1, int DmaPort2, int DmaData2) { dma_channel_write(DmaPort1, DmaData1); dma_channel_write(DmaPort2, DmaData2); -} +} */ static void AdaptecClearInterrupt(Adaptec_t *Adaptec) { @@ -828,9 +832,9 @@ void AdaptecWrite(uint16_t Port, uint8_t Val, void *p) case 0x0B: Adaptec->DataBuf[0] = (1 << Adaptec->DmaChannel); - if (Adaptec->DmaChannel >= 0) + /* if (Adaptec->DmaChannel >= 0) AdaptecSetDMAChannel(Adaptec->DmaPort1, Adaptec->DmaData1, - Adaptec->DmaPort2, Adaptec->DmaData2); + Adaptec->DmaPort2, Adaptec->DmaData2); */ Adaptec->DataBuf[1] = (1 << (Adaptec->Irq - 9)); Adaptec->DataBuf[2] = 7; @@ -1093,8 +1097,8 @@ void AdaptecCallback(void *p) void AdaptecInit(uint8_t Id) { - AdaptecLUN.Irq = 11; - AdaptecLUN.DmaChannel = 6; + AdaptecLUN.Irq = scsi_irq; + AdaptecLUN.DmaChannel = scsi_dma; AdaptecLUN.DmaPort1 = 0xD6; AdaptecLUN.DmaData1 = 0xD4; @@ -1104,7 +1108,7 @@ void AdaptecInit(uint8_t Id) pfnIoRequestCopyFromBuffer = AdaptecIoRequestCopyFromBuffer; pfnIoRequestCopyToBuffer = AdaptecIoRequestCopyToBuffer; - io_sethandler(0x0334, 0x0004, AdaptecRead, NULL, NULL, AdaptecWrite, NULL, NULL, NULL); + io_sethandler(scsi_base, 0x0004, AdaptecRead, NULL, NULL, AdaptecWrite, NULL, NULL, NULL); timer_add(AdaptecCallback, &ScsiCallback[Id], &ScsiCallback[Id], NULL); AdaptecReset(&AdaptecLUN); diff --git a/src/ibm.h b/src/ibm.h index b86a3cfb6..a8ecf0f17 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -639,3 +639,5 @@ char *nvr_concat(char *to_concat); int mem_a20_state; void fatal(const char *format, ...); + +extern int scsi_base, scsi_irq, scsi_dma; diff --git a/src/pc.c b/src/pc.c index d3c586584..77703263a 100644 --- a/src/pc.c +++ b/src/pc.c @@ -629,6 +629,10 @@ void loadconfig(char *fn) voodoo_enabled = config_get_int(NULL, "voodoo", 0); aha154x_enabled = config_get_int(NULL, "aha154x", 0); + scsi_base = config_get_int(NULL, "scsi_base", 0x330); + scsi_irq = config_get_int(NULL, "scsi_irq", 11); + scsi_dma = config_get_int(NULL, "scsi_dma", 5); + //network ethif = config_get_int(NULL, "netinterface", 1); if (ethif >= inum) @@ -791,6 +795,10 @@ void saveconfig() config_set_int(NULL, "voodoo", voodoo_enabled); config_set_int(NULL, "aha154x", aha154x_enabled); + config_set_int(NULL, "scsi_base", scsi_base); + config_set_int(NULL, "scsi_irq", scsi_irq); + config_set_int(NULL, "scsi_dma", scsi_dma); + config_set_int(NULL, "netinterface", ethif); config_set_int(NULL, "netcard", network_card_current); diff --git a/src/pc.rc b/src/pc.rc index 308044666..c018ecda1 100644 --- a/src/pc.rc +++ b/src/pc.rc @@ -35,7 +35,28 @@ BEGIN MENUITEM "&Empty",IDM_CDROM_EMPTY MENUITEM "&ISO...",IDM_CDROM_ISO END - MENUITEM "&SCSI controller enabled",IDM_SCSI_ENABLED + POPUP "&SCSI controller" + BEGIN + MENUITEM "&Enabled",IDM_SCSI_ENABLED + POPUP "&Base address" + BEGIN + MENUITEM "33&0",IDM_SCSI_BASE330 + MENUITEM "33&4",IDM_SCSI_BASE334 + END + POPUP "&IRQ" + BEGIN + MENUITEM "&9",IDM_SCSI_IRQ9 + MENUITEM "1&0",IDM_SCSI_IRQ10 + MENUITEM "1&1",IDM_SCSI_IRQ11 + MENUITEM "1&2",IDM_SCSI_IRQ12 + END + POPUP "&DMA channel" + BEGIN + MENUITEM "&5",IDM_SCSI_DMA5 + MENUITEM "&6",IDM_SCSI_DMA6 + MENUITEM "&7",IDM_SCSI_DMA7 + END + END END POPUP "&Settings" BEGIN diff --git a/src/resources.h b/src/resources.h index 9fcc9850c..eef807f75 100644 --- a/src/resources.h +++ b/src/resources.h @@ -32,6 +32,15 @@ #define IDM_CDROM_ENABLED 40300 #define IDM_CDROM_SCSI 40400 #define IDM_SCSI_ENABLED 40500 +#define IDM_SCSI_BASE330 40501 +#define IDM_SCSI_BASE334 40502 +#define IDM_SCSI_IRQ9 40503 +#define IDM_SCSI_IRQ10 40504 +#define IDM_SCSI_IRQ11 40505 +#define IDM_SCSI_IRQ12 40506 +#define IDM_SCSI_DMA5 40507 +#define IDM_SCSI_DMA6 40508 +#define IDM_SCSI_DMA7 40509 #define IDC_COMBO1 1000 #define IDC_COMBOVID 1001 diff --git a/src/sound_sb.c b/src/sound_sb.c index 75493d315..d99e7eee7 100644 --- a/src/sound_sb.c +++ b/src/sound_sb.c @@ -452,13 +452,14 @@ void *sb_16_init() sb_dsp_setaddr(&sb->dsp, addr); sb_dsp_setirq(&sb->dsp, device_get_config_int("irq")); sb_dsp_setdma8(&sb->dsp, device_get_config_int("dma")); + sb_dsp_setdma16(&sb->dsp, device_get_config_int("dma16")); sb_mixer_init(&sb->mixer); io_sethandler(0x0220, 0x0004, opl3_read, NULL, NULL, opl3_write, NULL, NULL, &sb->opl); io_sethandler(0x0228, 0x0002, opl3_read, NULL, NULL, opl3_write, NULL, NULL, &sb->opl); io_sethandler(0x0388, 0x0002, opl3_read, NULL, NULL, opl3_write, NULL, NULL, &sb->opl); io_sethandler(0x0224, 0x0002, sb_16_mixer_read, NULL, NULL, sb_16_mixer_write, NULL, NULL, sb); sound_add_handler(sb_get_buffer_opl3, sb); - mpu401_uart_init(&sb->mpu, 0x330); + mpu401_uart_init(&sb->mpu, device_get_config_int("addr401")); sb->mixer.regs[0x30] = 31 << 3; sb->mixer.regs[0x31] = 31 << 3; @@ -494,13 +495,14 @@ void *sb_awe32_init() sb_dsp_setaddr(&sb->dsp, addr); sb_dsp_setirq(&sb->dsp, device_get_config_int("irq")); sb_dsp_setdma8(&sb->dsp, device_get_config_int("dma")); + sb_dsp_setdma16(&sb->dsp, device_get_config_int("dma16")); sb_mixer_init(&sb->mixer); io_sethandler(0x0220, 0x0004, opl3_read, NULL, NULL, opl3_write, NULL, NULL, &sb->opl); io_sethandler(0x0228, 0x0002, opl3_read, NULL, NULL, opl3_write, NULL, NULL, &sb->opl); io_sethandler(0x0388, 0x0002, opl3_read, NULL, NULL, opl3_write, NULL, NULL, &sb->opl); io_sethandler(0x0224, 0x0002, sb_16_mixer_read, NULL, NULL, sb_16_mixer_write, NULL, NULL, sb); sound_add_handler(sb_get_buffer_emu8k, sb); - mpu401_uart_init(&sb->mpu, 0x330); + mpu401_uart_init(&sb->mpu, device_get_config_int("addr401")); emu8k_init(&sb->emu8k, onboard_ram); sb->mixer.regs[0x30] = 31 << 3; @@ -725,6 +727,27 @@ static device_config_t sb_16_config[] = }, .default_int = 0x220 }, + { + .name = "addr401", + .description = "MPU-401 Address", + .type = CONFIG_BINARY, + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "0x300", + .value = 0x300 + }, + { + .description = "0x330", + .value = 0x330 + }, + { + .description = "" + } + }, + .default_int = 0x330 + }, { .name = "irq", .description = "IRQ", @@ -755,10 +778,14 @@ static device_config_t sb_16_config[] = }, { .name = "dma", - .description = "DMA", + .description = "Low DMA channel", .type = CONFIG_SELECTION, .selection = { + { + .description = "DMA 0", + .value = 0 + }, { .description = "DMA 1", .value = 1 @@ -773,6 +800,30 @@ static device_config_t sb_16_config[] = }, .default_int = 1 }, + { + .name = "dma16", + .description = "High DMA channel", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "DMA 5", + .value = 5 + }, + { + .description = "DMA 6", + .value = 6 + }, + { + .description = "DMA 7", + .value = 7 + }, + { + .description = "" + } + }, + .default_int = 1 + }, { .name = "midi", .description = "MIDI out device", @@ -807,6 +858,27 @@ static device_config_t sb_awe32_config[] = }, .default_int = 0x220 }, + { + .name = "addr401", + .description = "MPU-401 Address", + .type = CONFIG_BINARY, + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "0x300", + .value = 0x300 + }, + { + .description = "0x330", + .value = 0x330 + }, + { + .description = "" + } + }, + .default_int = 0x330 + }, { .name = "irq", .description = "IRQ", @@ -837,10 +909,14 @@ static device_config_t sb_awe32_config[] = }, { .name = "dma", - .description = "DMA", + .description = "Low DMA channel", .type = CONFIG_SELECTION, .selection = { + { + .description = "DMA 0", + .value = 0 + }, { .description = "DMA 1", .value = 1 @@ -855,6 +931,30 @@ static device_config_t sb_awe32_config[] = }, .default_int = 1 }, + { + .name = "dma16", + .description = "High DMA channel", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "DMA 5", + .value = 5 + }, + { + .description = "DMA 6", + .value = 6 + }, + { + .description = "DMA 7", + .value = 7 + }, + { + .description = "" + } + }, + .default_int = 1 + }, { .name = "midi", .description = "MIDI out device", diff --git a/src/sound_sb_dsp.c b/src/sound_sb_dsp.c index 232604e14..40dd6e0e7 100644 --- a/src/sound_sb_dsp.c +++ b/src/sound_sb_dsp.c @@ -253,11 +253,11 @@ void sb_8_write_dma(sb_dsp_t *dsp, uint8_t val) } uint16_t sb_16_read_dma(sb_dsp_t *dsp) { - return dma_channel_read(5); + return dma_channel_read(dsp->sb_16_dmanum); } void sb_16_write_dma(sb_dsp_t *dsp, uint16_t val) { - dma_channel_write(5, val); + dma_channel_write(dsp->sb_16_dmanum, val); } void sb_dsp_setirq(sb_dsp_t *dsp, int irq) @@ -270,6 +270,11 @@ void sb_dsp_setdma8(sb_dsp_t *dsp, int dma) dsp->sb_8_dmanum = dma; } +void sb_dsp_setdma16(sb_dsp_t *dsp, int dma) +{ + dsp->sb_16_dmanum = dma; +} + void sb_exec_command(sb_dsp_t *dsp) { int temp,c; @@ -611,6 +616,7 @@ void sb_dsp_init(sb_dsp_t *dsp, int type) dsp->sb_irqnum = 5; dsp->sb_8_dmanum = 1; + dsp->sb_16_dmanum = 5; sb_doreset(dsp); diff --git a/src/sound_sb_dsp.h b/src/sound_sb_dsp.h index 444513642..9d4dee133 100644 --- a/src/sound_sb_dsp.h +++ b/src/sound_sb_dsp.h @@ -5,6 +5,7 @@ typedef struct sb_dsp_t int sb_8_length, sb_8_format, sb_8_autoinit, sb_8_pause, sb_8_enable, sb_8_autolen, sb_8_output; int sb_8_dmanum; int sb_16_length, sb_16_format, sb_16_autoinit, sb_16_pause, sb_16_enable, sb_16_autolen, sb_16_output; + int sb_16_dmanum; int sb_pausetime; uint8_t sb_read_data[256]; @@ -65,6 +66,7 @@ void sb_dsp_init(sb_dsp_t *dsp, int type); void sb_dsp_setirq(sb_dsp_t *dsp, int irq); void sb_dsp_setdma8(sb_dsp_t *dsp, int dma); +void sb_dsp_setdma16(sb_dsp_t *dsp, int dma); void sb_dsp_setaddr(sb_dsp_t *dsp, uint16_t addr); void sb_dsp_speed_changed(sb_dsp_t *dsp); diff --git a/src/win.c b/src/win.c index 852521e2f..26f78779a 100644 --- a/src/win.c +++ b/src/win.c @@ -628,6 +628,77 @@ int WINAPI WinMain (HINSTANCE hThisInstance, if (aha154x_enabled) CheckMenuItem(menu, IDM_SCSI_ENABLED, MF_CHECKED); + if (scsi_base == 0x330) + { + CheckMenuItem(menu, IDM_SCSI_BASE330, MF_CHECKED); + CheckMenuItem(menu, IDM_SCSI_BASE334, MF_UNCHECKED); + } + else if (scsi_base == 0x334) + { + CheckMenuItem(menu, IDM_SCSI_BASE330, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_BASE334, MF_CHECKED); + } + else + { + fatal("Unrecognized SCSI base address\n"); + } + + if (scsi_irq == 9) + { + CheckMenuItem(menu, IDM_SCSI_IRQ9, MF_CHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ10, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ11, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ12, MF_UNCHECKED); + } + else if (scsi_irq == 10) + { + CheckMenuItem(menu, IDM_SCSI_IRQ9, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ10, MF_CHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ11, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ12, MF_UNCHECKED); + } + else if (scsi_irq == 11) + { + CheckMenuItem(menu, IDM_SCSI_IRQ9, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ10, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ11, MF_CHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ12, MF_UNCHECKED); + } + else if (scsi_irq == 12) + { + CheckMenuItem(menu, IDM_SCSI_IRQ9, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ10, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ11, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_IRQ12, MF_CHECKED); + } + else + { + fatal("Unrecognized SCSI IRQ\n"); + } + + if (scsi_dma == 5) + { + CheckMenuItem(menu, IDM_SCSI_DMA5, MF_CHECKED); + CheckMenuItem(menu, IDM_SCSI_DMA6, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_DMA7, MF_UNCHECKED); + } + else if (scsi_dma == 6) + { + CheckMenuItem(menu, IDM_SCSI_DMA5, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_DMA6, MF_CHECKED); + CheckMenuItem(menu, IDM_SCSI_DMA7, MF_UNCHECKED); + } + else if (scsi_dma == 7) + { + CheckMenuItem(menu, IDM_SCSI_DMA5, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_DMA6, MF_UNCHECKED); + CheckMenuItem(menu, IDM_SCSI_DMA7, MF_CHECKED); + } + else + { + fatal("Unrecognized SCSI DMA address\n"); + } + if (cdrom_drive == 200) CheckMenuItem(menu, IDM_CDROM_ISO, MF_CHECKED); else @@ -1212,6 +1283,188 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM pause = 0; break; + case IDM_SCSI_BASE330: + if (scsi_base == 0x330) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_base = 0x330; + CheckMenuItem(hmenu, IDM_SCSI_BASE330, MF_CHECKED); + CheckMenuItem(hmenu, IDM_SCSI_BASE334, MF_UNCHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_BASE334: + if (scsi_base == 0x334) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_base = 0x334; + CheckMenuItem(hmenu, IDM_SCSI_BASE330, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_BASE334, MF_CHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_IRQ9: + if (scsi_irq == 9) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_irq = 9; + CheckMenuItem(hmenu, IDM_SCSI_IRQ9, MF_CHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ10, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ11, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ12, MF_UNCHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_IRQ10: + if (scsi_irq == 10) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_irq = 10; + CheckMenuItem(hmenu, IDM_SCSI_IRQ9, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ10, MF_CHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ11, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ12, MF_UNCHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_IRQ11: + if (scsi_irq == 11) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_irq = 11; + CheckMenuItem(hmenu, IDM_SCSI_IRQ9, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ10, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ11, MF_CHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ12, MF_UNCHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_IRQ12: + if (scsi_irq == 12) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_irq = 12; + CheckMenuItem(hmenu, IDM_SCSI_IRQ9, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ10, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ11, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_IRQ12, MF_CHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_DMA5: + if (scsi_dma == 5) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_dma = 5; + CheckMenuItem(hmenu, IDM_SCSI_DMA5, MF_CHECKED); + CheckMenuItem(hmenu, IDM_SCSI_DMA6, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_DMA7, MF_UNCHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_DMA6: + if (scsi_dma == 6) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_dma = 6; + CheckMenuItem(hmenu, IDM_SCSI_DMA5, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_DMA6, MF_CHECKED); + CheckMenuItem(hmenu, IDM_SCSI_DMA7, MF_UNCHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + + case IDM_SCSI_DMA7: + if (scsi_dma == 7) + { + break; + } + if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK) + { + break; + } + pause = 1; + Sleep(100); + scsi_dma = 7; + CheckMenuItem(hmenu, IDM_SCSI_DMA5, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_DMA6, MF_UNCHECKED); + CheckMenuItem(hmenu, IDM_SCSI_DMA7, MF_CHECKED); + saveconfig(); + resetpchard(); + pause = 0; + break; + case IDM_CDROM_EMPTY: /* if (!cdrom_enabled) {