CD-ROM IDE channel now configuarable. Based on patch from Battler.
This commit is contained in:
parent
4531f5c7a7
commit
5b3d307181
6 changed files with 152 additions and 65 deletions
25
src/ide.c
25
src/ide.c
|
|
@ -164,6 +164,8 @@ int idecallback[2] = {0, 0};
|
|||
|
||||
int cur_ide[2];
|
||||
|
||||
int cdrom_channel = 2;
|
||||
|
||||
uint8_t getstat(IDE *ide) { return ide->atastat; }
|
||||
|
||||
static inline void ide_irq_raise(IDE *ide)
|
||||
|
|
@ -564,18 +566,17 @@ void resetide(void)
|
|||
else
|
||||
ide_drives[1].type = IDE_CDROM;
|
||||
#else
|
||||
loadhd(&ide_drives[0], 0, ide_fn[0]);
|
||||
loadhd(&ide_drives[1], 1, ide_fn[1]);
|
||||
loadhd(&ide_drives[2], 2, ide_fn[2]);
|
||||
if (cdrom_enabled)
|
||||
{
|
||||
if (ide_drives[2].type == IDE_NONE)
|
||||
ide_drives[2].type = IDE_CDROM;
|
||||
else
|
||||
ide_drives[3].type = IDE_CDROM;
|
||||
}
|
||||
else
|
||||
loadhd(&ide_drives[3], 3, ide_fn[3]);
|
||||
for (d = 0; d < 4; d++)
|
||||
{
|
||||
if ((cdrom_channel == d) && cdrom_enabled)
|
||||
{
|
||||
ide_drives[d].type = IDE_CDROM;
|
||||
}
|
||||
else
|
||||
{
|
||||
loadhd(&ide_drives[d], d, ide_fn[d]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
cur_ide[0] = 0;
|
||||
|
|
|
|||
|
|
@ -45,4 +45,6 @@ extern int idecallback[2];
|
|||
|
||||
extern char ide_fn[4][512];
|
||||
|
||||
extern int cdrom_channel;
|
||||
|
||||
#endif //__IDE__
|
||||
|
|
|
|||
4
src/pc.c
4
src/pc.c
|
|
@ -590,7 +590,8 @@ void loadconfig(char *fn)
|
|||
|
||||
cdrom_drive = config_get_int(NULL, "cdrom_drive", 0);
|
||||
cdrom_enabled = config_get_int(NULL, "cdrom_enabled", 0);
|
||||
|
||||
cdrom_channel = config_get_int(NULL, "cdrom_channel", 2);
|
||||
|
||||
p = (char *)config_get_string(NULL, "cdrom_path", "");
|
||||
if (p) strcpy(iso_path, p);
|
||||
else strcpy(iso_path, "");
|
||||
|
|
@ -658,6 +659,7 @@ void saveconfig()
|
|||
config_set_int(NULL, "mem_size", mem_size);
|
||||
config_set_int(NULL, "cdrom_drive", cdrom_drive);
|
||||
config_set_int(NULL, "cdrom_enabled", cdrom_enabled);
|
||||
config_set_int(NULL, "cdrom_channel", cdrom_channel);
|
||||
config_set_string(NULL, "cdrom_path", iso_path);
|
||||
config_set_int(NULL, "vid_resize", vid_resize);
|
||||
config_set_int(NULL, "vid_api", vid_api);
|
||||
|
|
|
|||
108
src/pc.rc
108
src/pc.rc
|
|
@ -96,69 +96,77 @@ BEGIN
|
|||
COMBOBOX IDC_COMBODRB,62,216,157,120,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
|
||||
END
|
||||
|
||||
HdConfDlg DIALOGEX 0, 0, 210, 312
|
||||
HdConfDlg DIALOGEX 0, 0, 210, 312+4*16
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Configure Hard Discs"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,31+12,292,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,101+12,292,50,14
|
||||
DEFPUSHBUTTON "OK",IDOK,31+12,292+64,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,101+12,292+64,50,14
|
||||
|
||||
LTEXT "C:",IDC_STATIC,7,6,27,10
|
||||
EDITTEXT IDC_EDIT_C_FN, 7, 22, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_CFILE,7 + 136, 22, 16, 14
|
||||
PUSHBUTTON "New",IDC_CNEW,7 + 136 + 16, 22, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTC, 7 + 136 + 16 + 24, 22, 24, 14
|
||||
RADIOBUTTON "Hard drive", IDC_CHDD, 7, 22, 53, 12 , WS_TABSTOP
|
||||
RADIOBUTTON "CD-ROM", IDC_CCDROM, 7+64, 22, 53, 12 , WS_TABSTOP
|
||||
EDITTEXT IDC_EDIT_C_FN, 7, 22+16, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_CFILE,7 + 136, 22+16, 16, 14
|
||||
PUSHBUTTON "New",IDC_CNEW,7 + 136 + 16, 22+16, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTC, 7 + 136 + 16 + 24, 22+16, 24, 14
|
||||
|
||||
EDITTEXT IDC_EDIT_C_SPT,36,38,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_C_HPC,94,38,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_C_CYL,152,38,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,38,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,38,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,38,32,12
|
||||
LTEXT "", IDC_TEXT_C_SIZE, 7, 54, 136, 12
|
||||
EDITTEXT IDC_EDIT_C_SPT,36,38+16,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_C_HPC,94,38+16,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_C_CYL,152,38+16,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,38+16,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,38+16,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,38+16,32,12
|
||||
LTEXT "", IDC_TEXT_C_SIZE, 7, 54+16, 136, 12
|
||||
|
||||
LTEXT "D:",IDC_STATIC,7,76,27,10
|
||||
EDITTEXT IDC_EDIT_D_FN, 7, 92, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_DFILE,7 + 136, 92, 16, 14
|
||||
PUSHBUTTON "New",IDC_DNEW,7 + 136 + 16, 92, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTD, 7 + 136 + 16 + 24, 92, 24, 14
|
||||
LTEXT "D:",IDC_STATIC,7,76+16,27,10
|
||||
RADIOBUTTON "Hard drive", IDC_DHDD, 7, 92+16, 53, 12 , WS_TABSTOP
|
||||
RADIOBUTTON "CD-ROM", IDC_DCDROM, 7+64, 92+16, 53, 12 , WS_TABSTOP
|
||||
EDITTEXT IDC_EDIT_D_FN, 7, 92+32, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_DFILE,7 + 136, 92+32, 16, 14
|
||||
PUSHBUTTON "New",IDC_DNEW,7 + 136 + 16, 92+32, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTD, 7 + 136 + 16 + 24, 92+32, 24, 14
|
||||
|
||||
EDITTEXT IDC_EDIT_D_SPT,36,108,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_D_HPC,94,108,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_D_CYL,152,108,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,108,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,108,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,108,32,12
|
||||
LTEXT "", IDC_TEXT_D_SIZE, 7, 124, 136, 12
|
||||
EDITTEXT IDC_EDIT_D_SPT,36,108+32,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_D_HPC,94,108+32,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_D_CYL,152,108+32,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,108+32,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,108+32,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,108+32,32,12
|
||||
LTEXT "", IDC_TEXT_D_SIZE, 7, 124+32, 136, 12
|
||||
|
||||
LTEXT "E:",IDC_STATIC,7,146,27,10
|
||||
EDITTEXT IDC_EDIT_E_FN, 7, 162, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_EFILE,7 + 136, 162, 16, 14
|
||||
PUSHBUTTON "New",IDC_ENEW,7 + 136 + 16, 162, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTE, 7 + 136 + 16 + 24, 162, 24, 14
|
||||
LTEXT "E:",IDC_STATIC,7,146+32,27,10
|
||||
RADIOBUTTON "Hard drive", IDC_EHDD, 7, 162+32, 53, 12 , WS_TABSTOP
|
||||
RADIOBUTTON "CD-ROM", IDC_ECDROM, 7+64, 162+32, 53, 12 , WS_TABSTOP
|
||||
EDITTEXT IDC_EDIT_E_FN, 7, 162+48, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_EFILE,7 + 136, 162+48, 16, 14
|
||||
PUSHBUTTON "New",IDC_ENEW,7 + 136 + 16, 162+48, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTE, 7 + 136 + 16 + 24, 162+48, 24, 14
|
||||
|
||||
EDITTEXT IDC_EDIT_E_SPT,36,178,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_E_HPC,94,178,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_E_CYL,152,178,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,178,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,178,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,178,32,12
|
||||
LTEXT "", IDC_TEXT_E_SIZE, 7, 194, 136, 12
|
||||
EDITTEXT IDC_EDIT_E_SPT,36,178+48,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_E_HPC,94,178+48,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_E_CYL,152,178+48,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,178+48,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,178+48,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,178+48,32,12
|
||||
LTEXT "", IDC_TEXT_E_SIZE, 7, 194+48, 136, 12
|
||||
|
||||
LTEXT "F:",IDC_STATIC,7,216,27,10
|
||||
EDITTEXT IDC_EDIT_F_FN, 7, 232, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_FFILE,7 + 136, 232, 16, 14
|
||||
PUSHBUTTON "New",IDC_FNEW,7 + 136 + 16, 232, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTF, 7 + 136 + 16 + 24, 232, 24, 14
|
||||
LTEXT "F:",IDC_STATIC,7,216+48,27,10
|
||||
RADIOBUTTON "Hard drive", IDC_FHDD, 7, 232+48, 53, 12 , WS_TABSTOP
|
||||
RADIOBUTTON "CD-ROM", IDC_FCDROM, 7+64, 232+48, 53, 12 , WS_TABSTOP
|
||||
EDITTEXT IDC_EDIT_F_FN, 7, 232+64, 136, 12, WS_DISABLED
|
||||
PUSHBUTTON "...",IDC_FFILE,7 + 136, 232+64, 16, 14
|
||||
PUSHBUTTON "New",IDC_FNEW,7 + 136 + 16, 232+64, 24, 14
|
||||
PUSHBUTTON "Eject", IDC_EJECTF, 7 + 136 + 16 + 24, 232+64, 24, 14
|
||||
|
||||
EDITTEXT IDC_EDIT_F_SPT,36,248,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_F_HPC,94,248,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_F_CYL,152,248,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,248,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,248,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,248,32,12
|
||||
LTEXT "", IDC_TEXT_F_SIZE, 7, 264, 136, 12
|
||||
EDITTEXT IDC_EDIT_F_SPT,36,248+64,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_F_HPC,94,248+64,16,12, WS_DISABLED
|
||||
EDITTEXT IDC_EDIT_F_CYL,152,248+64,28,12, WS_DISABLED
|
||||
LTEXT "Sectors:",IDC_STATIC,7,248+64,27,10
|
||||
LTEXT "Heads:",IDC_STATIC,63,248+64,29,8
|
||||
LTEXT "Cylinders:",IDC_STATIC,120,248+64,32,12
|
||||
LTEXT "", IDC_TEXT_F_SIZE, 7, 264+64, 136, 12
|
||||
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,14 @@
|
|||
#define IDC_EJECTF 1065
|
||||
#define IDC_MEMSPIN 1070
|
||||
#define IDC_MEMTEXT 1071
|
||||
#define IDC_CHDD 1080
|
||||
#define IDC_CCDROM 1081
|
||||
#define IDC_DHDD 1082
|
||||
#define IDC_DCDROM 1083
|
||||
#define IDC_EHDD 1084
|
||||
#define IDC_ECDROM 1085
|
||||
#define IDC_FHDD 1086
|
||||
#define IDC_FCDROM 1087
|
||||
#define IDC_STEXT1 1100
|
||||
#define IDC_STEXT2 1101
|
||||
#define IDC_STEXT3 1102
|
||||
|
|
|
|||
|
|
@ -12,6 +12,29 @@ static int hd_changed = 0;
|
|||
|
||||
static char hd_new_name[512];
|
||||
static int hd_new_spt, hd_new_hpc, hd_new_cyl;
|
||||
static int new_cdrom_channel;
|
||||
|
||||
static void update_hdd_cdrom(HWND hdlg)
|
||||
{
|
||||
HWND h;
|
||||
|
||||
h = GetDlgItem(hdlg, IDC_CHDD);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 0) ? 0 : 1, 0);
|
||||
h = GetDlgItem(hdlg, IDC_CCDROM);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 0) ? 1 : 0, 0);
|
||||
h = GetDlgItem(hdlg, IDC_DHDD);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 1) ? 0 : 1, 0);
|
||||
h = GetDlgItem(hdlg, IDC_DCDROM);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 1) ? 1 : 0, 0);
|
||||
h = GetDlgItem(hdlg, IDC_EHDD);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 2) ? 0 : 1, 0);
|
||||
h = GetDlgItem(hdlg, IDC_ECDROM);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 2) ? 1 : 0, 0);
|
||||
h = GetDlgItem(hdlg, IDC_FHDD);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 3) ? 0 : 1, 0);
|
||||
h = GetDlgItem(hdlg, IDC_FCDROM);
|
||||
SendMessage(h, BM_SETCHECK, (new_cdrom_channel == 3) ? 1 : 0, 0);
|
||||
}
|
||||
|
||||
static BOOL CALLBACK hdnew_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
|
@ -149,7 +172,6 @@ BOOL CALLBACK hdsize_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lPar
|
|||
h = GetDlgItem(hdlg, IDC_TEXT1);
|
||||
sprintf(s, "Size : %imb", ((((uint64_t)hd_new_spt*(uint64_t)hd_new_hpc*(uint64_t)hd_new_cyl)*512)/1024)/1024);
|
||||
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||
|
||||
return TRUE;
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
|
|
@ -289,13 +311,17 @@ static BOOL CALLBACK hdconf_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR
|
|||
h = GetDlgItem(hdlg, IDC_TEXT_F_SIZE);
|
||||
sprintf(s, "Size : %imb", (((((uint64_t)hd[3].tracks*(uint64_t)hd[3].hpc)*(uint64_t)hd[3].spt)*512)/1024)/1024);
|
||||
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||
|
||||
new_cdrom_channel = cdrom_channel;
|
||||
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
if (hd_changed)
|
||||
if (hd_changed || cdrom_channel != new_cdrom_channel)
|
||||
{
|
||||
if (MessageBox(NULL, "This will reset PCem!\nOkay to continue?", "PCem", MB_OKCANCEL) == IDOK)
|
||||
{
|
||||
|
|
@ -352,6 +378,8 @@ static BOOL CALLBACK hdconf_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR
|
|||
hdc[2] = hd[2];
|
||||
hdc[3] = hd[3];
|
||||
|
||||
cdrom_channel = new_cdrom_channel;
|
||||
|
||||
saveconfig();
|
||||
|
||||
resetpchard();
|
||||
|
|
@ -718,6 +746,44 @@ static BOOL CALLBACK hdconf_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR
|
|||
sprintf(s, "Size : %imb", ((((hd[3].tracks*hd[3].hpc)*hd[3].spt)*512)/1024)/1024);
|
||||
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||
return TRUE;
|
||||
|
||||
case IDC_CHDD:
|
||||
if (new_cdrom_channel == 0)
|
||||
new_cdrom_channel = -1;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
case IDC_DHDD:
|
||||
if (new_cdrom_channel == 1)
|
||||
new_cdrom_channel = -1;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
case IDC_EHDD:
|
||||
if (new_cdrom_channel == 2)
|
||||
new_cdrom_channel = -1;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
case IDC_FHDD:
|
||||
if (new_cdrom_channel == 3)
|
||||
new_cdrom_channel = -1;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
|
||||
case IDC_CCDROM:
|
||||
new_cdrom_channel = 0;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
case IDC_DCDROM:
|
||||
new_cdrom_channel = 1;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
case IDC_ECDROM:
|
||||
new_cdrom_channel = 2;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
case IDC_FCDROM:
|
||||
new_cdrom_channel = 3;
|
||||
update_hdd_cdrom(hdlg);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue