Added emulation of BusLogic BT-958 PCI SCSI controller;

SCSI controller configuration moved to the Settings dialog, suggestion by RichardG.
This commit is contained in:
OBattler
2017-02-12 04:16:16 +01:00
parent f5ebf5b7a8
commit 9a5dbc80ab
7 changed files with 596 additions and 305 deletions

209
src/win.c
View File

@@ -722,36 +722,6 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
CheckMenuItem(menu, IDM_IDE_QUA_IRQ9 - 9 + ide_irq[3], MF_CHECKED);
if (buslogic_enabled)
CheckMenuItem(menu, IDM_SCSI_ENABLED, MF_CHECKED);
if (!find_in_array(valid_models, scsi_model, 2, IDM_SCSI_MODEL0))
{
fatal("SCSI controller: Invalid model\n");
}
CheckMenuItem(menu, IDM_SCSI_MODEL0 + scsi_model, MF_CHECKED);
if (!find_in_array(valid_bases, scsi_base, 6, IDM_SCSI_BASE130 - 0x130))
{
fatal("SCSI controller: Invalid base address\n");
}
CheckMenuItem(menu, IDM_SCSI_BASE130 - 0x130 + scsi_base, MF_CHECKED);
if (!find_in_array(valid_irqs, scsi_irq, 6, IDM_SCSI_IRQ9 - 9))
{
fatal("SCSI controller: Invalid IRQ\n");
}
CheckMenuItem(menu, IDM_SCSI_IRQ9 - 9 + scsi_irq, MF_CHECKED);
if (!find_in_array(valid_dma_channels, scsi_dma, 3, IDM_SCSI_DMA5 - 5))
{
fatal("SCSI controller: Invalid DMA channel\n");
}
CheckMenuItem(menu, IDM_SCSI_DMA5 - 5 + scsi_dma, MF_CHECKED);
#ifdef ENABLE_LOG_TOGGLES
#ifdef ENABLE_BUSLOGIC_LOG
CheckMenuItem(menu, IDM_LOG_BUSLOGIC, buslogic_do_log ? MF_CHECKED : MF_UNCHECKED);
@@ -1157,103 +1127,6 @@ int ide_qua_set_irq(HMENU hmenu, int irq, int id)
return 1;
}
int scsi_set_model(HMENU hmenu, int model, int id)
{
if (scsi_model == model)
{
return 0;
}
if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK)
{
return 0;
}
pause = 1;
Sleep(100);
scsi_model = model;
CheckMenuItem(hmenu, IDM_SCSI_MODEL0, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_MODEL1, MF_UNCHECKED);
CheckMenuItem(hmenu, id, MF_CHECKED);
saveconfig();
resetpchard();
pause = 0;
return 1;
}
int scsi_set_base(HMENU hmenu, int base, int id)
{
if (scsi_base == base)
{
return 0;
}
if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK)
{
return 0;
}
pause = 1;
Sleep(100);
scsi_base = base;
CheckMenuItem(hmenu, IDM_SCSI_BASE130, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_BASE134, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_BASE230, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_BASE234, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_BASE330, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_BASE334, MF_UNCHECKED);
CheckMenuItem(hmenu, id, MF_CHECKED);
saveconfig();
resetpchard();
pause = 0;
return 1;
}
int scsi_set_irq(HMENU hmenu, int irq, int id)
{
if (scsi_irq == irq)
{
return 0;
}
if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK)
{
return 0;
}
pause = 1;
Sleep(100);
scsi_irq = irq;
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_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_IRQ14, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_IRQ15, MF_UNCHECKED);
CheckMenuItem(hmenu, id, MF_CHECKED);
saveconfig();
resetpchard();
pause = 0;
return 1;
}
int scsi_set_dma(HMENU hmenu, int dma, int id)
{
if (scsi_dma == dma)
{
return 0;
}
if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK)
{
return 0;
}
pause = 1;
Sleep(100);
scsi_dma = dma;
CheckMenuItem(hmenu, IDM_SCSI_DMA5, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_DMA6, MF_UNCHECKED);
CheckMenuItem(hmenu, IDM_SCSI_DMA7, MF_UNCHECKED);
CheckMenuItem(hmenu, id, MF_CHECKED);
saveconfig();
resetpchard();
pause = 0;
return 1;
}
void video_toggle_option(HMENU hmenu, int *val, int id)
{
*val ^= 1;
@@ -1814,88 +1687,6 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
ide_qua_set_irq(hmenu, 15, IDM_IDE_QUA_IRQ15);
break;
case IDM_SCSI_ENABLED:
if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK)
{
break;
}
pause = 1;
Sleep(100);
buslogic_enabled ^= 1;
CheckMenuItem(hmenu, IDM_SCSI_ENABLED, buslogic_enabled ? MF_CHECKED : MF_UNCHECKED);
saveconfig();
resetpchard();
pause = 0;
break;
case IDM_SCSI_MODEL0:
scsi_set_model(hmenu, 0, IDM_SCSI_MODEL0);
break;
case IDM_SCSI_MODEL1:
scsi_set_model(hmenu, 1, IDM_SCSI_MODEL1);
break;
case IDM_SCSI_BASE130:
scsi_set_base(hmenu, 0x130, IDM_SCSI_BASE130);
break;
case IDM_SCSI_BASE134:
scsi_set_base(hmenu, 0x134, IDM_SCSI_BASE134);
break;
case IDM_SCSI_BASE230:
scsi_set_base(hmenu, 0x230, IDM_SCSI_BASE230);
break;
case IDM_SCSI_BASE234:
scsi_set_base(hmenu, 0x234, IDM_SCSI_BASE234);
break;
case IDM_SCSI_BASE330:
scsi_set_base(hmenu, 0x330, IDM_SCSI_BASE330);
break;
case IDM_SCSI_BASE334:
scsi_set_base(hmenu, 0x334, IDM_SCSI_BASE334);
break;
case IDM_SCSI_IRQ9:
scsi_set_irq(hmenu, 9, IDM_SCSI_IRQ9);
break;
case IDM_SCSI_IRQ10:
scsi_set_irq(hmenu, 10, IDM_SCSI_IRQ10);
break;
case IDM_SCSI_IRQ11:
scsi_set_irq(hmenu, 11, IDM_SCSI_IRQ11);
break;
case IDM_SCSI_IRQ12:
scsi_set_irq(hmenu, 12, IDM_SCSI_IRQ12);
break;
case IDM_SCSI_IRQ14:
scsi_set_irq(hmenu, 14, IDM_SCSI_IRQ14);
break;
case IDM_SCSI_IRQ15:
scsi_set_irq(hmenu, 15, IDM_SCSI_IRQ15);
break;
case IDM_SCSI_DMA5:
scsi_set_dma(hmenu, 5, IDM_SCSI_DMA5);
break;
case IDM_SCSI_DMA6:
scsi_set_dma(hmenu, 6, IDM_SCSI_DMA6);
break;
case IDM_SCSI_DMA7:
scsi_set_dma(hmenu, 7, IDM_SCSI_DMA7);
break;
case IDM_CDROM_1_EMPTY:
case IDM_CDROM_2_EMPTY:
case IDM_CDROM_3_EMPTY: