The Sound Blaster 16 and AWE32 low and high DMA addresses are now reflected in the mixer registers and software-configurable;

The AHA-154x can now also use base addresses 0x130, 0x134, 0x230, 0x234, and IRQ's 14 and 15;
Reworked the SCSI system resource menu handlers in win.c a bit.
This commit is contained in:
OBattler
2016-11-13 20:38:03 +01:00
parent 3e4c540f92
commit 87cc7dcc3c
4 changed files with 223 additions and 158 deletions

View File

@@ -290,7 +290,7 @@ typedef struct Adaptec_t
Adaptec_t AdaptecLUN;
int scsi_base = 0x330;
int scsi_dma = 5;
int scsi_dma = 6;
int scsi_irq = 11;
static void AdaptecSCSIRequestSetup(Adaptec_t *Adaptec, uint32_t CCBPointer);

View File

@@ -32,15 +32,21 @@
#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 IDM_SCSI_BASE130 40501
#define IDM_SCSI_BASE134 40502
#define IDM_SCSI_BASE230 40503
#define IDM_SCSI_BASE234 40504
#define IDM_SCSI_BASE330 40505
#define IDM_SCSI_BASE334 40506
#define IDM_SCSI_IRQ9 40507
#define IDM_SCSI_IRQ10 40508
#define IDM_SCSI_IRQ11 40509
#define IDM_SCSI_IRQ12 40510
#define IDM_SCSI_IRQ14 40511
#define IDM_SCSI_IRQ15 40512
#define IDM_SCSI_DMA5 40513
#define IDM_SCSI_DMA6 40514
#define IDM_SCSI_DMA7 40515
#define IDC_COMBO1 1000
#define IDC_COMBOVID 1001

View File

@@ -277,6 +277,13 @@ void sb_16_mixer_write(uint16_t addr, uint8_t val, void *p)
if (val & 2) sb->dsp.sb_irqnum = 5;
if (val & 4) sb->dsp.sb_irqnum = 7;
if (val & 8) sb->dsp.sb_irqnum = 10;
case 0x81:
if (val & 1) sb->dsp.sb_8_dmanum = 0;
if (val & 2) sb->dsp.sb_8_dmanum = 1;
if (val & 8) sb->dsp.sb_8_dmanum = 3;
if (val & 0x20) sb->dsp.sb_16_dmanum = 5;
if (val & 0x40) sb->dsp.sb_16_dmanum = 6;
if (val & 0x80) sb->dsp.sb_16_dmanum = 7;
break;
}
mixer->master_l = sb_att[mixer->regs[0x30] >> 3];
@@ -303,6 +310,7 @@ uint8_t sb_16_mixer_read(uint16_t addr, void *p)
{
sb_t *sb = (sb_t *)p;
sb_mixer_t *mixer = &sb->mixer;
uint8_t temp = 0;
if (!(addr & 1))
return mixer->index;
@@ -319,7 +327,38 @@ uint8_t sb_16_mixer_read(uint16_t addr, void *p)
}
break;
case 0x81:
return 0x22; /*DMA 1 and 5*/
switch (sb->dsp.sb_8_dmanum)
{
case 0:
temp = 1;
break;
case 1:
temp = 2;
break;
case 3:
temp = 8;
break;
default:
temp = 0;
break;
}
switch (sb->dsp.sb_16_dmanum)
{
case 5:
temp |= 0x20;
break;
case 6:
temp |= 0x40;
break;
case 7:
temp |= 0x80;
break;
default:
temp |= 0x00;
break;
}
// return 0x22; /*DMA 1 and 5*/
return temp;
case 0x82:
return ((sb->dsp.sb_irq8) ? 1 : 0) | ((sb->dsp.sb_irq16) ? 2 : 0);
}

312
src/win.c
View File

@@ -628,14 +628,35 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
if (aha154x_enabled)
CheckMenuItem(menu, IDM_SCSI_ENABLED, MF_CHECKED);
if (scsi_base == 0x330)
CheckMenuItem(menu, IDM_SCSI_BASE130, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_BASE134, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_BASE230, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_BASE234, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_BASE330, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_BASE334, MF_UNCHECKED);
if (scsi_base == 0x130)
{
CheckMenuItem(menu, IDM_SCSI_BASE130, MF_CHECKED);
}
else if (scsi_base == 0x134)
{
CheckMenuItem(menu, IDM_SCSI_BASE134, MF_CHECKED);
}
else if (scsi_base == 0x230)
{
CheckMenuItem(menu, IDM_SCSI_BASE230, MF_CHECKED);
}
else if (scsi_base == 0x234)
{
CheckMenuItem(menu, IDM_SCSI_BASE234, MF_CHECKED);
}
else 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
@@ -643,55 +664,56 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
fatal("Unrecognized SCSI base address\n");
}
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_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_IRQ14, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_IRQ15, MF_UNCHECKED);
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 if (scsi_irq == 14)
{
CheckMenuItem(menu, IDM_SCSI_IRQ14, MF_CHECKED);
}
else if (scsi_irq == 15)
{
CheckMenuItem(menu, IDM_SCSI_IRQ15, MF_CHECKED);
}
else
{
fatal("Unrecognized SCSI IRQ\n");
}
CheckMenuItem(menu, IDM_SCSI_DMA5, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_DMA6, MF_UNCHECKED);
CheckMenuItem(menu, IDM_SCSI_DMA7, MF_UNCHECKED);
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
@@ -1030,6 +1052,81 @@ void cdrom_close(void)
char *floppy_image_extensions = "All floppy images (*.12;*.144;*.360;*.720;*.86F;*.BIN;*.DSK;*.FDI;*.FLP;*.HDM;*.IMA;*.IMD;*.IMG;*.TD0;*.VFD;*.XDF)\0*.12;*.144;*.360;*.720;*.86F;*.BIN;*.DSK;*.FDI;*.FLP;*.HDM;*.IMA;*.IMD;*.IMG;*.TD0;*.VFD;*.XDF\0Advanced sector-based images (*.IMD;*.TD0)\0*.IMD;*.TD0\0Basic sector-based images (*.12;*.144;*.360;*.720;*.BIN;*.DSK;*.FDI;*.FLP;*.HDM;*.IMA;*.IMG;*.VFD;*.XDF)\0*.12;*.144;*.360;*.720;*.BIN;*.DSK;*.FDI;*.FLP;*.HDM;*.IMA;*.IMG;*.VFD;*.XDF\0Flux images (*.FDI)\0*.FDI\0Surface-based images (*.86F)\0*.86F\0All files (*.*)\0*.*\0";
int scsi_set_base(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(int base, 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(int base, 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;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HMENU hmenu;
@@ -1283,186 +1380,109 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
pause = 0;
break;
case IDM_SCSI_BASE130:
if (scsi_set_base(0x130, IDM_SCSI_BASE130) == 0)
{
break;
}
break;
case IDM_SCSI_BASE134:
if (scsi_set_base(0x134, IDM_SCSI_BASE134) == 0)
{
break;
}
break;
case IDM_SCSI_BASE230:
if (scsi_set_base(0x230, IDM_SCSI_BASE230) == 0)
{
break;
}
break;
case IDM_SCSI_BASE234:
if (scsi_set_base(0x234, IDM_SCSI_BASE234) == 0)
{
break;
}
break;
case IDM_SCSI_BASE330:
if (scsi_base == 0x330)
if (scsi_set_base(0x330, IDM_SCSI_BASE330) == 0)
{
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)
if (scsi_set_base(0x334, IDM_SCSI_BASE334) == 0)
{
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)
if (scsi_set_irq(9, IDM_SCSI_IRQ9) == 0)
{
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)
if (scsi_set_irq(10, IDM_SCSI_IRQ10) == 0)
{
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)
if (scsi_set_irq(11, IDM_SCSI_IRQ11) == 0)
{
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)
if (scsi_set_irq(12, IDM_SCSI_IRQ12) == 0)
{
break;
}
if (MessageBox(NULL,"This will reset 86Box!\nOkay to continue?","86Box",MB_OKCANCEL) != IDOK)
break;
case IDM_SCSI_IRQ14:
if (scsi_set_irq(14, IDM_SCSI_IRQ14) == 0)
{
break;
}
break;
case IDM_SCSI_IRQ15:
if (scsi_set_irq(15, IDM_SCSI_IRQ15) == 0)
{
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)
if (scsi_set_dma(5, IDM_SCSI_DMA5) == 0)
{
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)
if (scsi_set_dma(6, IDM_SCSI_DMA6) == 0)
{
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)
if (scsi_set_dma(7, IDM_SCSI_DMA7) == 0)
{
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: