SCSI controller model is now switchable between Adaptec AHA-154x and the BusLogic BT-542B.
This commit is contained in:
@@ -515,6 +515,7 @@ typedef struct __attribute__((packed)) Buslogic_t
|
||||
int Mbx24bit;
|
||||
} Buslogic_t;
|
||||
|
||||
int scsi_model = 1;
|
||||
int scsi_base = 0x330;
|
||||
int scsi_dma = 6;
|
||||
int scsi_irq = 11;
|
||||
@@ -1034,7 +1035,7 @@ void BuslogicWrite(uint16_t Port, uint8_t Val, void *p)
|
||||
|
||||
case 0x04:
|
||||
Buslogic->DataBuf[0] = 0x41;
|
||||
Buslogic->DataBuf[1] = 0x41;
|
||||
Buslogic->DataBuf[1] = scsi_model ? 0x41 : 0x30;
|
||||
Buslogic->DataBuf[2] = '5';
|
||||
Buslogic->DataBuf[3] = '0';
|
||||
Buslogic->DataReplyLeft = 4;
|
||||
|
2
src/pc.c
2
src/pc.c
@@ -641,6 +641,7 @@ void loadconfig(char *fn)
|
||||
voodoo_enabled = config_get_int(NULL, "voodoo", 0);
|
||||
buslogic_enabled = config_get_int(NULL, "buslogic", 0);
|
||||
|
||||
scsi_model = config_get_int(NULL, "scsi_model", 1);
|
||||
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", 6);
|
||||
@@ -846,6 +847,7 @@ void saveconfig()
|
||||
config_set_int(NULL, "voodoo", voodoo_enabled);
|
||||
config_set_int(NULL, "buslogic", buslogic_enabled);
|
||||
|
||||
config_set_int(NULL, "scsi_model", scsi_model);
|
||||
config_set_int(NULL, "scsi_base", scsi_base);
|
||||
config_set_int(NULL, "scsi_irq", scsi_irq);
|
||||
config_set_int(NULL, "scsi_dma", scsi_dma);
|
||||
|
@@ -71,6 +71,11 @@ BEGIN
|
||||
POPUP "&SCSI controller"
|
||||
BEGIN
|
||||
MENUITEM "&Enabled",IDM_SCSI_ENABLED
|
||||
POPUP "&Model"
|
||||
BEGIN
|
||||
MENUITEM "&Adaptec AHA-154x",IDM_SCSI_MODEL0
|
||||
MENUITEM "&BusLogic BT-542B",IDM_SCSI_MODEL1
|
||||
END
|
||||
POPUP "&Base address"
|
||||
BEGIN
|
||||
MENUITEM "0x&130",IDM_SCSI_BASE130
|
||||
|
@@ -55,21 +55,23 @@
|
||||
#define IDM_IDE_QUA_IRQ14 40512
|
||||
#define IDM_IDE_QUA_IRQ15 40513
|
||||
#define IDM_SCSI_ENABLED 40600
|
||||
#define IDM_SCSI_BASE130 40601
|
||||
#define IDM_SCSI_BASE134 40602
|
||||
#define IDM_SCSI_BASE230 40603
|
||||
#define IDM_SCSI_BASE234 40604
|
||||
#define IDM_SCSI_BASE330 40605
|
||||
#define IDM_SCSI_BASE334 40606
|
||||
#define IDM_SCSI_IRQ9 40607
|
||||
#define IDM_SCSI_IRQ10 40608
|
||||
#define IDM_SCSI_IRQ11 40609
|
||||
#define IDM_SCSI_IRQ12 40610
|
||||
#define IDM_SCSI_IRQ14 40611
|
||||
#define IDM_SCSI_IRQ15 40612
|
||||
#define IDM_SCSI_DMA5 40613
|
||||
#define IDM_SCSI_DMA6 40614
|
||||
#define IDM_SCSI_DMA7 40615
|
||||
#define IDM_SCSI_MODEL0 40601
|
||||
#define IDM_SCSI_MODEL1 40602
|
||||
#define IDM_SCSI_BASE130 40603
|
||||
#define IDM_SCSI_BASE134 40604
|
||||
#define IDM_SCSI_BASE230 40605
|
||||
#define IDM_SCSI_BASE234 40606
|
||||
#define IDM_SCSI_BASE330 40607
|
||||
#define IDM_SCSI_BASE334 40608
|
||||
#define IDM_SCSI_IRQ9 40609
|
||||
#define IDM_SCSI_IRQ10 40610
|
||||
#define IDM_SCSI_IRQ11 40611
|
||||
#define IDM_SCSI_IRQ12 40612
|
||||
#define IDM_SCSI_IRQ14 40613
|
||||
#define IDM_SCSI_IRQ15 40614
|
||||
#define IDM_SCSI_DMA5 40615
|
||||
#define IDM_SCSI_DMA6 40616
|
||||
#define IDM_SCSI_DMA7 40617
|
||||
|
||||
#define IDC_COMBO1 1000
|
||||
#define IDC_COMBOVID 1001
|
||||
|
46
src/win.c
46
src/win.c
@@ -708,6 +708,22 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
|
||||
if (buslogic_enabled)
|
||||
CheckMenuItem(menu, IDM_SCSI_ENABLED, MF_CHECKED);
|
||||
|
||||
CheckMenuItem(menu, IDM_SCSI_MODEL0, MF_UNCHECKED);
|
||||
CheckMenuItem(menu, IDM_SCSI_MODEL1, MF_UNCHECKED);
|
||||
|
||||
if (scsi_model == 0)
|
||||
{
|
||||
CheckMenuItem(menu, IDM_SCSI_MODEL0, MF_CHECKED);
|
||||
}
|
||||
else if (scsi_model == 1)
|
||||
{
|
||||
CheckMenuItem(menu, IDM_SCSI_MODEL1, MF_CHECKED);
|
||||
}
|
||||
else
|
||||
{
|
||||
fatal("Unrecognized SCSI model\n");
|
||||
}
|
||||
|
||||
CheckMenuItem(menu, IDM_SCSI_BASE130, MF_UNCHECKED);
|
||||
CheckMenuItem(menu, IDM_SCSI_BASE134, MF_UNCHECKED);
|
||||
CheckMenuItem(menu, IDM_SCSI_BASE230, MF_UNCHECKED);
|
||||
@@ -1192,6 +1208,28 @@ 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)
|
||||
@@ -1643,6 +1681,14 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||
pause = 0;
|
||||
break;
|
||||
|
||||
case IDM_SCSI_MODEL0:
|
||||
scsi_set_base(hmenu, 0, IDM_SCSI_MODEL0);
|
||||
break;
|
||||
|
||||
case IDM_SCSI_MODEL1:
|
||||
scsi_set_base(hmenu, 1, IDM_SCSI_MODEL1);
|
||||
break;
|
||||
|
||||
case IDM_SCSI_BASE130:
|
||||
scsi_set_base(hmenu, 0x130, IDM_SCSI_BASE130);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user