Reorganised Windows-specific code a bit.
This commit is contained in:
parent
b0320ae16c
commit
3c8a675d01
13 changed files with 963 additions and 990 deletions
|
|
@ -18,8 +18,9 @@ OBJ = 386.o 808x.o acer386sx.o ali1429.o amstrad.o cdrom-ioctl.o \
|
||||||
vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o vid_pcjr.o vid_s3.o \
|
vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o vid_pcjr.o vid_s3.o \
|
||||||
vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o vid_svga_render.o \
|
vid_s3_virge.o vid_sdac_ramdac.o vid_stg_ramdac.o vid_svga.o vid_svga_render.o \
|
||||||
vid_tandy.o vid_tgui9440.o vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o \
|
vid_tandy.o vid_tgui9440.o vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o \
|
||||||
vid_voodoo.o video.o wd76c10.o win.o win-d3d.o win-d3d-fs.o win-ddraw.o win-ddraw-fs.o win-joystick.o win-keyboard.o win-midi.o \
|
vid_voodoo.o video.o wd76c10.o win.o win-config.o win-d3d.o win-d3d-fs.o win-ddraw.o \
|
||||||
win-mouse.o win-timer.o win-video.o x86seg.o x87.o xtide.o pc.res
|
win-ddraw-fs.o win-hdconf.o win-joystick.o win-keyboard.o win-midi.o win-mouse.o \
|
||||||
|
win-status.o win-video.o x86seg.o x87.o xtide.o pc.res
|
||||||
FMOBJ = dbopl.o
|
FMOBJ = dbopl.o
|
||||||
SIDOBJ = convolve.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
SIDOBJ = convolve.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ char *device_add_status_info(char *s, int max_len)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
s[0] = 0;
|
s += strlen(s);
|
||||||
|
|
||||||
for (c = 0; c < 256; c++)
|
for (c = 0; c < 256; c++)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -317,6 +317,9 @@ enum
|
||||||
ROM_MAX
|
ROM_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern int romspresent[ROM_MAX];
|
||||||
|
extern int gfx_present[19];
|
||||||
|
|
||||||
//#define ROM_IBMPCJR 5 /*Not working! ROMs are corrupt*/
|
//#define ROM_IBMPCJR 5 /*Not working! ROMs are corrupt*/
|
||||||
#define is386 (romset>=ROM_IBMAT386)
|
#define is386 (romset>=ROM_IBMAT386)
|
||||||
#define is386sx 0
|
#define is386sx 0
|
||||||
|
|
|
||||||
16
src/pc.c
16
src/pc.c
|
|
@ -49,7 +49,7 @@ void fullspeed();
|
||||||
|
|
||||||
int framecount,fps;
|
int framecount,fps;
|
||||||
int intcount;
|
int intcount;
|
||||||
int wakeups,wokeups;
|
|
||||||
int output;
|
int output;
|
||||||
int atfullspeed;
|
int atfullspeed;
|
||||||
void loadconfig();
|
void loadconfig();
|
||||||
|
|
@ -93,7 +93,6 @@ void fatal(const char *format, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t cgastat;
|
uint8_t cgastat;
|
||||||
int drawit=0;
|
|
||||||
|
|
||||||
int pollmouse_delay = 2;
|
int pollmouse_delay = 2;
|
||||||
void pollmouse()
|
void pollmouse()
|
||||||
|
|
@ -239,8 +238,6 @@ void initpc()
|
||||||
pc_reset();
|
pc_reset();
|
||||||
|
|
||||||
pit_reset();
|
pit_reset();
|
||||||
install_int_ex(onesec,BPS_TO_TIMER(1));
|
|
||||||
// install_int_ex(vsyncint,BPS_TO_TIMER(60));
|
|
||||||
/* if (romset==ROM_AMI386 || romset==ROM_AMI486) */fullspeed();
|
/* if (romset==ROM_AMI386 || romset==ROM_AMI486) */fullspeed();
|
||||||
mem_updatecache();
|
mem_updatecache();
|
||||||
ali1429_reset();
|
ali1429_reset();
|
||||||
|
|
@ -352,7 +349,6 @@ void runpc()
|
||||||
cycles_lost = 0;
|
cycles_lost = 0;
|
||||||
mmuflush=0;
|
mmuflush=0;
|
||||||
intcount=0;
|
intcount=0;
|
||||||
wakeups=wokeups=0;
|
|
||||||
intcount=pitcount=0;
|
intcount=pitcount=0;
|
||||||
emu_fps = frames;
|
emu_fps = frames;
|
||||||
frames = 0;
|
frames = 0;
|
||||||
|
|
@ -365,16 +361,6 @@ void runpc()
|
||||||
}
|
}
|
||||||
done++;
|
done++;
|
||||||
frame++;
|
frame++;
|
||||||
/* if ((at70hz && VGA)!=oldat70hz)
|
|
||||||
{
|
|
||||||
oldat70hz=(at70hz && VGA);
|
|
||||||
if (oldat70hz) setrefresh(70); //install_int_ex(vsyncint,BPS_TO_TIMER(70));
|
|
||||||
else setrefresh(60); //install_int_ex(vsyncint,BPS_TO_TIMER(60));
|
|
||||||
drawit=0;
|
|
||||||
done=0;
|
|
||||||
}*/
|
|
||||||
// printf("End of run!\n");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fullspeed()
|
void fullspeed()
|
||||||
|
|
|
||||||
30
src/pc.rc
30
src/pc.rc
|
|
@ -87,32 +87,32 @@ BEGIN
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,101+12,152,50,14
|
PUSHBUTTON "Cancel",IDCANCEL,101+12,152,50,14
|
||||||
|
|
||||||
LTEXT "C:",IDC_STATIC,7,6,27,10
|
LTEXT "C:",IDC_STATIC,7,6,27,10
|
||||||
EDITTEXT IDC_EDITC, 7, 22, 136, 12, WS_DISABLED
|
EDITTEXT IDC_EDIT_C_FN, 7, 22, 136, 12, WS_DISABLED
|
||||||
PUSHBUTTON "...",IDC_CFILE,7 + 136, 22, 16, 14
|
PUSHBUTTON "...",IDC_CFILE,7 + 136, 22, 16, 14
|
||||||
PUSHBUTTON "New",IDC_CNEW,7 + 136 + 16, 22, 24, 14
|
PUSHBUTTON "New",IDC_CNEW,7 + 136 + 16, 22, 24, 14
|
||||||
PUSHBUTTON "Eject", IDC_EJECTC, 7 + 136 + 16 + 24, 22, 24, 14
|
PUSHBUTTON "Eject", IDC_EJECTC, 7 + 136 + 16 + 24, 22, 24, 14
|
||||||
|
|
||||||
EDITTEXT IDC_EDIT1,36,38,16,12, WS_DISABLED
|
EDITTEXT IDC_EDIT_C_SPT,36,38,16,12, WS_DISABLED
|
||||||
EDITTEXT IDC_EDIT2,94,38,16,12, WS_DISABLED
|
EDITTEXT IDC_EDIT_C_HPC,94,38,16,12, WS_DISABLED
|
||||||
EDITTEXT IDC_EDIT3,152,38,28,12, WS_DISABLED
|
EDITTEXT IDC_EDIT_C_CYL,152,38,28,12, WS_DISABLED
|
||||||
LTEXT "Sectors:",IDC_STATIC,7,38,27,10
|
LTEXT "Sectors:",IDC_STATIC,7,38,27,10
|
||||||
LTEXT "Heads:",IDC_STATIC,63,38,29,8
|
LTEXT "Heads:",IDC_STATIC,63,38,29,8
|
||||||
LTEXT "Cylinders:",IDC_STATIC,120,38,32,12
|
LTEXT "Cylinders:",IDC_STATIC,120,38,32,12
|
||||||
LTEXT "", IDC_TEXT1, 7, 54, 136, 12
|
LTEXT "", IDC_TEXT_C_SIZE, 7, 54, 136, 12
|
||||||
|
|
||||||
LTEXT "D:",IDC_STATIC,7,76,27,10
|
LTEXT "D:",IDC_STATIC,7,76,27,10
|
||||||
EDITTEXT IDC_EDITD, 7, 92, 136, 12, WS_DISABLED
|
EDITTEXT IDC_EDIT_D_FN, 7, 92, 136, 12, WS_DISABLED
|
||||||
PUSHBUTTON "...",IDC_DFILE,7 + 136, 92, 16, 14
|
PUSHBUTTON "...",IDC_DFILE,7 + 136, 92, 16, 14
|
||||||
PUSHBUTTON "New",IDC_DNEW,7 + 136 + 16, 92, 24, 14
|
PUSHBUTTON "New",IDC_DNEW,7 + 136 + 16, 92, 24, 14
|
||||||
PUSHBUTTON "Eject", IDC_EJECTD, 7 + 136 + 16 + 24, 92, 24, 14
|
PUSHBUTTON "Eject", IDC_EJECTD, 7 + 136 + 16 + 24, 92, 24, 14
|
||||||
|
|
||||||
EDITTEXT IDC_EDIT4,36,108,16,12, WS_DISABLED
|
EDITTEXT IDC_EDIT_D_SPT,36,108,16,12, WS_DISABLED
|
||||||
EDITTEXT IDC_EDIT5,94,108,16,12, WS_DISABLED
|
EDITTEXT IDC_EDIT_D_HPC,94,108,16,12, WS_DISABLED
|
||||||
EDITTEXT IDC_EDIT6,152,108,28,12, WS_DISABLED
|
EDITTEXT IDC_EDIT_D_CYL,152,108,28,12, WS_DISABLED
|
||||||
LTEXT "Sectors:",IDC_STATIC,7,108,27,10
|
LTEXT "Sectors:",IDC_STATIC,7,108,27,10
|
||||||
LTEXT "Heads:",IDC_STATIC,63,108,29,8
|
LTEXT "Heads:",IDC_STATIC,63,108,29,8
|
||||||
LTEXT "Cylinders:",IDC_STATIC,120,108,32,12
|
LTEXT "Cylinders:",IDC_STATIC,120,108,32,12
|
||||||
LTEXT "", IDC_TEXT2, 7, 124, 136, 12
|
LTEXT "", IDC_TEXT_D_SIZE, 7, 124, 136, 12
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
@ -160,13 +160,5 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSM
|
||||||
CAPTION "Status"
|
CAPTION "Status"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "1",IDC_STEXT1,16,16,180,10
|
LTEXT "1",IDC_STEXT_DEVICE,16,16,180,1000
|
||||||
LTEXT "2",IDC_STEXT2,16,28,180,10
|
|
||||||
LTEXT "3",IDC_STEXT3,16,40,180,10
|
|
||||||
LTEXT "4",IDC_STEXT4,16,52,180,10
|
|
||||||
LTEXT "5",IDC_STEXT5,16,64,180,10
|
|
||||||
LTEXT "6",IDC_STEXT6,16,76,180,10
|
|
||||||
LTEXT "7",IDC_STEXT7,16,88,180,10
|
|
||||||
LTEXT "8",IDC_STEXT8,16,100,180,10
|
|
||||||
LTEXT "9",IDC_STEXT_DEVICE,16,112,180,1000
|
|
||||||
END
|
END
|
||||||
|
|
|
||||||
|
|
@ -66,5 +66,16 @@
|
||||||
#define IDC_STEXT8 1107
|
#define IDC_STEXT8 1107
|
||||||
#define IDC_STEXT_DEVICE 1108
|
#define IDC_STEXT_DEVICE 1108
|
||||||
|
|
||||||
|
#define IDC_EDIT_C_SPT 1200
|
||||||
|
#define IDC_EDIT_C_HPC 1201
|
||||||
|
#define IDC_EDIT_C_CYL 1202
|
||||||
|
#define IDC_EDIT_D_SPT 1203
|
||||||
|
#define IDC_EDIT_D_HPC 1204
|
||||||
|
#define IDC_EDIT_D_CYL 1205
|
||||||
|
#define IDC_TEXT_C_SIZE 1210
|
||||||
|
#define IDC_TEXT_D_SIZE 1211
|
||||||
|
#define IDC_EDIT_C_FN 1220
|
||||||
|
#define IDC_EDIT_D_FN 1221
|
||||||
|
|
||||||
#define WM_RESETD3D WM_USER
|
#define WM_RESETD3D WM_USER
|
||||||
#define WM_LEAVEFULLSCREEN WM_USER + 1
|
#define WM_LEAVEFULLSCREEN WM_USER + 1
|
||||||
|
|
|
||||||
|
|
@ -1345,9 +1345,9 @@ int svga_add_status_info(char *s, int max_len, void *p)
|
||||||
int cur_len = max_len;
|
int cur_len = max_len;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (svga->chain4) len = snprintf(s, max_len, "SVGA chained (possibly mode 13h)\n");
|
if (svga->chain4) strcpy(temps, "SVGA chained (possibly mode 13h)\n");
|
||||||
else len = snprintf(s, max_len, "SVGA unchained (possibly mode-X)\n");
|
else strcpy(temps, "SVGA unchained (possibly mode-X)\n");
|
||||||
if (len < 0) return;
|
strncat(s, temps, cur_len);
|
||||||
cur_len -= len;
|
cur_len -= len;
|
||||||
|
|
||||||
if (!svga->video_bpp) strcpy(temps, "SVGA in text mode\n");
|
if (!svga->video_bpp) strcpy(temps, "SVGA in text mode\n");
|
||||||
|
|
|
||||||
334
src/win-config.c
Normal file
334
src/win-config.c
Normal file
|
|
@ -0,0 +1,334 @@
|
||||||
|
#define BITMAP WINDOWS_BITMAP
|
||||||
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
|
#undef BITMAP
|
||||||
|
|
||||||
|
#include <commctrl.h>
|
||||||
|
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "cpu.h"
|
||||||
|
#include "model.h"
|
||||||
|
#include "resources.h"
|
||||||
|
#include "sound.h"
|
||||||
|
#include "video.h"
|
||||||
|
#include "win.h"
|
||||||
|
|
||||||
|
extern int is486;
|
||||||
|
static int romstolist[ROM_MAX], listtomodel[ROM_MAX], romstomodel[ROM_MAX], modeltolist[ROM_MAX];
|
||||||
|
static int settings_sound_to_list[20], settings_list_to_sound[20];
|
||||||
|
|
||||||
|
static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
char temp_str[256];
|
||||||
|
HWND h;
|
||||||
|
int c, d;
|
||||||
|
int rom, gfx, mem, fpu;
|
||||||
|
int temp_cpu, temp_cpu_m, temp_model;
|
||||||
|
int temp_GAMEBLASTER, temp_GUS, temp_SSI2001, temp_sound_card_current;
|
||||||
|
// pclog("Dialog msg %i %08X\n",message,message);
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
pause = 1;
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBO1);
|
||||||
|
for (c = 0; c < ROM_MAX; c++)
|
||||||
|
romstolist[c] = 0;
|
||||||
|
c = d = 0;
|
||||||
|
while (models[c].id != -1)
|
||||||
|
{
|
||||||
|
pclog("INITDIALOG : %i %i %i\n",c,models[c].id,romspresent[models[c].id]);
|
||||||
|
if (romspresent[models[c].id])
|
||||||
|
{
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)models[c].name);
|
||||||
|
modeltolist[c] = d;
|
||||||
|
listtomodel[d] = c;
|
||||||
|
romstolist[models[c].id] = d;
|
||||||
|
romstomodel[models[c].id] = c;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
SendMessage(h, CB_SETCURSEL, modeltolist[model], 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOVID);
|
||||||
|
c = d = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char *s = video_card_getname(c);
|
||||||
|
|
||||||
|
if (!s[0])
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (video_card_available(c) && gfx_present[video_new_to_old(c)])
|
||||||
|
{
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
||||||
|
if (video_new_to_old(c) == gfxcard)
|
||||||
|
SendMessage(h, CB_SETCURSEL, d, 0);
|
||||||
|
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
if (models[model].fixed_gfxcard)
|
||||||
|
EnableWindow(h, FALSE);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOCPUM);
|
||||||
|
c = 0;
|
||||||
|
while (models[romstomodel[romset]].cpu[c].cpus != NULL && c < 3)
|
||||||
|
{
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)models[romstomodel[romset]].cpu[c].name);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
EnableWindow(h, TRUE);
|
||||||
|
SendMessage(h, CB_SETCURSEL, cpu_manufacturer, 0);
|
||||||
|
if (c == 1) EnableWindow(h, FALSE);
|
||||||
|
else EnableWindow(h, TRUE);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBO3);
|
||||||
|
c = 0;
|
||||||
|
while (models[romstomodel[romset]].cpu[cpu_manufacturer].cpus[c].cpu_type != -1)
|
||||||
|
{
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)models[romstomodel[romset]].cpu[cpu_manufacturer].cpus[c].name);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
EnableWindow(h, TRUE);
|
||||||
|
SendMessage(h, CB_SETCURSEL, cpu, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOSND);
|
||||||
|
c = d = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char *s = sound_card_getname(c);
|
||||||
|
|
||||||
|
if (!s[0])
|
||||||
|
break;
|
||||||
|
|
||||||
|
settings_sound_to_list[c] = d;
|
||||||
|
|
||||||
|
if (sound_card_available(c))
|
||||||
|
{
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
||||||
|
settings_list_to_sound[d] = c;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
SendMessage(h, CB_SETCURSEL, settings_sound_to_list[sound_card_current], 0);
|
||||||
|
|
||||||
|
h=GetDlgItem(hdlg, IDC_CHECK3);
|
||||||
|
SendMessage(h, BM_SETCHECK, GAMEBLASTER, 0);
|
||||||
|
|
||||||
|
h=GetDlgItem(hdlg, IDC_CHECKGUS);
|
||||||
|
SendMessage(h, BM_SETCHECK, GUS, 0);
|
||||||
|
|
||||||
|
h=GetDlgItem(hdlg, IDC_CHECKSSI);
|
||||||
|
SendMessage(h, BM_SETCHECK, SSI2001, 0);
|
||||||
|
|
||||||
|
h=GetDlgItem(hdlg, IDC_CHECK2);
|
||||||
|
SendMessage(h, BM_SETCHECK, slowega, 0);
|
||||||
|
|
||||||
|
h=GetDlgItem(hdlg, IDC_CHECK4);
|
||||||
|
SendMessage(h, BM_SETCHECK, cga_comp, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOCHC);
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"A little");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"A bit");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Some");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"A lot");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Infinite");
|
||||||
|
SendMessage(h, CB_SETCURSEL, cache, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOSPD);
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"8-bit");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Slow 16-bit");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Fast 16-bit");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Slow VLB/PCI");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Mid VLB/PCI");
|
||||||
|
SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Fast VLB/PCI");
|
||||||
|
SendMessage(h, CB_SETCURSEL, video_speed, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_MEMSPIN);
|
||||||
|
SendMessage(h, UDM_SETBUDDY, (WPARAM)GetDlgItem(hdlg, IDC_MEMTEXT), 0);
|
||||||
|
SendMessage(h, UDM_SETRANGE, 0, (1 << 16) | 256);
|
||||||
|
SendMessage(h, UDM_SETPOS, 0, mem_size);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case IDOK:
|
||||||
|
h = GetDlgItem(hdlg, IDC_MEMTEXT);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)temp_str);
|
||||||
|
sscanf(temp_str, "%i", &mem);
|
||||||
|
if (mem < 1 || mem > 256)
|
||||||
|
{
|
||||||
|
MessageBox(NULL, "Invalid memory size\nMemory must be between 1 and 256 MB", "PCem", MB_OK);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBO1);
|
||||||
|
temp_model = listtomodel[SendMessage(h, CB_GETCURSEL, 0, 0)];
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOVID);
|
||||||
|
SendMessage(h, CB_GETLBTEXT, SendMessage(h, CB_GETCURSEL, 0, 0), (LPARAM)temp_str);
|
||||||
|
gfx = video_new_to_old(video_card_getid(temp_str));
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOCPUM);
|
||||||
|
temp_cpu_m = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBO3);
|
||||||
|
temp_cpu = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
fpu = (models[temp_model].cpu[temp_cpu_m].cpus[temp_cpu].cpu_type >= CPU_i486DX) ? 1 : 0;
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_CHECK3);
|
||||||
|
temp_GAMEBLASTER = SendMessage(h, BM_GETCHECK, 0, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_CHECKGUS);
|
||||||
|
temp_GUS = SendMessage(h, BM_GETCHECK, 0, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_CHECKSSI);
|
||||||
|
temp_SSI2001 = SendMessage(h, BM_GETCHECK, 0, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOSND);
|
||||||
|
temp_sound_card_current = settings_list_to_sound[SendMessage(h, CB_GETCURSEL, 0, 0)];
|
||||||
|
|
||||||
|
if (temp_model != model || gfx != gfxcard || mem != mem_size || fpu != hasfpu || temp_GAMEBLASTER != GAMEBLASTER || temp_GUS != GUS || temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current)
|
||||||
|
{
|
||||||
|
if (MessageBox(NULL,"This will reset PCem!\nOkay to continue?","PCem",MB_OKCANCEL)==IDOK)
|
||||||
|
{
|
||||||
|
model = temp_model;
|
||||||
|
romset = model_getromset();
|
||||||
|
gfxcard = gfx;
|
||||||
|
mem_size = mem;
|
||||||
|
cpu_manufacturer = temp_cpu_m;
|
||||||
|
cpu = temp_cpu;
|
||||||
|
GAMEBLASTER = temp_GAMEBLASTER;
|
||||||
|
GUS = temp_GUS;
|
||||||
|
SSI2001 = temp_SSI2001;
|
||||||
|
sound_card_current = temp_sound_card_current;
|
||||||
|
|
||||||
|
mem_resize();
|
||||||
|
loadbios();
|
||||||
|
resetpchard();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EndDialog(hdlg, 0);
|
||||||
|
pause = 0;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOSPD);
|
||||||
|
video_speed = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_CHECK4);
|
||||||
|
cga_comp=SendMessage(h, BM_GETCHECK, 0, 0);
|
||||||
|
|
||||||
|
cpu_manufacturer = temp_cpu_m;
|
||||||
|
cpu = temp_cpu;
|
||||||
|
cpu_set();
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOCHC);
|
||||||
|
cache=SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
mem_updatecache();
|
||||||
|
|
||||||
|
saveconfig();
|
||||||
|
|
||||||
|
speedchanged();
|
||||||
|
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hdlg, 0);
|
||||||
|
pause=0;
|
||||||
|
return TRUE;
|
||||||
|
case IDC_COMBO1:
|
||||||
|
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg,IDC_COMBO1);
|
||||||
|
temp_model = listtomodel[SendMessage(h,CB_GETCURSEL,0,0)];
|
||||||
|
|
||||||
|
/*Enable/disable gfxcard list*/
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOVID);
|
||||||
|
if (!models[temp_model].fixed_gfxcard)
|
||||||
|
{
|
||||||
|
char *s = video_card_getname(video_old_to_new(gfxcard));
|
||||||
|
|
||||||
|
EnableWindow(h, TRUE);
|
||||||
|
|
||||||
|
c = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
SendMessage(h, CB_GETLBTEXT, c, (LPARAM)temp_str);
|
||||||
|
if (!strcmp(temp_str, s))
|
||||||
|
break;
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
SendMessage(h, CB_SETCURSEL, c, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
EnableWindow(h, FALSE);
|
||||||
|
|
||||||
|
/*Rebuild manufacturer list*/
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOCPUM);
|
||||||
|
temp_cpu_m = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
SendMessage(h, CB_RESETCONTENT, 0, 0);
|
||||||
|
c = 0;
|
||||||
|
while (models[temp_model].cpu[c].cpus != NULL && c < 3)
|
||||||
|
{
|
||||||
|
SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)models[temp_model].cpu[c].name);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
if (temp_cpu_m >= c) temp_cpu_m = c - 1;
|
||||||
|
SendMessage(h, CB_SETCURSEL, temp_cpu_m, 0);
|
||||||
|
if (c == 1) EnableWindow(h, FALSE);
|
||||||
|
else EnableWindow(h, TRUE);
|
||||||
|
|
||||||
|
/*Rebuild CPU list*/
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBO3);
|
||||||
|
temp_cpu = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
SendMessage(h, CB_RESETCONTENT, 0, 0);
|
||||||
|
c = 0;
|
||||||
|
while (models[temp_model].cpu[temp_cpu_m].cpus[c].cpu_type != -1)
|
||||||
|
{
|
||||||
|
SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)models[temp_model].cpu[temp_cpu_m].cpus[c].name);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
if (temp_cpu >= c) temp_cpu = c - 1;
|
||||||
|
SendMessage(h, CB_SETCURSEL, temp_cpu, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IDC_COMBOCPUM:
|
||||||
|
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBO1);
|
||||||
|
temp_model = listtomodel[SendMessage(h, CB_GETCURSEL, 0, 0)];
|
||||||
|
h = GetDlgItem(hdlg, IDC_COMBOCPUM);
|
||||||
|
temp_cpu_m = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
/*Rebuild CPU list*/
|
||||||
|
h=GetDlgItem(hdlg, IDC_COMBO3);
|
||||||
|
temp_cpu = SendMessage(h, CB_GETCURSEL, 0, 0);
|
||||||
|
SendMessage(h, CB_RESETCONTENT, 0, 0);
|
||||||
|
c = 0;
|
||||||
|
while (models[temp_model].cpu[temp_cpu_m].cpus[c].cpu_type != -1)
|
||||||
|
{
|
||||||
|
SendMessage(h,CB_ADDSTRING,0,(LPARAM)(LPCSTR)models[temp_model].cpu[temp_cpu_m].cpus[c].name);
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
if (temp_cpu >= c) temp_cpu = c - 1;
|
||||||
|
SendMessage(h, CB_SETCURSEL, temp_cpu, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void config_open(HWND hwnd)
|
||||||
|
{
|
||||||
|
DialogBox(hinstance, TEXT("ConfigureDlg"), hwnd, config_dlgproc);
|
||||||
|
}
|
||||||
493
src/win-hdconf.c
Normal file
493
src/win-hdconf.c
Normal file
|
|
@ -0,0 +1,493 @@
|
||||||
|
#define BITMAP WINDOWS_BITMAP
|
||||||
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
|
#undef BITMAP
|
||||||
|
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "ide.h"
|
||||||
|
#include "resources.h"
|
||||||
|
#include "win.h"
|
||||||
|
|
||||||
|
static int hd_changed = 0;
|
||||||
|
|
||||||
|
static char hd_new_name[512];
|
||||||
|
static int hd_new_spt, hd_new_hpc, hd_new_cyl;
|
||||||
|
|
||||||
|
static BOOL CALLBACK hdnew_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
char s[260];
|
||||||
|
HWND h;
|
||||||
|
int c;
|
||||||
|
PcemHDC hd[2];
|
||||||
|
FILE *f;
|
||||||
|
uint8_t buf[512];
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT1);
|
||||||
|
sprintf(s, "%i", 63);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT2);
|
||||||
|
sprintf(s, "%i", 16);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT3);
|
||||||
|
sprintf(s, "%i", 511);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDITC);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)"");
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT1);
|
||||||
|
sprintf(s, "Size : %imb", (((511*16*63)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case IDOK:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDITC);
|
||||||
|
SendMessage(h, WM_GETTEXT, 511, (LPARAM)hd_new_name);
|
||||||
|
if (!hd_new_name[0])
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd,"Please enter a valid filename","PCem error",MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT1);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd_new_spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT2);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd_new_hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT3);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd_new_cyl);
|
||||||
|
|
||||||
|
if (hd_new_spt > 63)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd, "Drive has too many sectors (maximum is 63)", "PCem error", MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (hd_new_hpc > 128)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd, "Drive has too many heads (maximum is 128)", "PCem error", MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (hd_new_cyl > 16383)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd, "Drive has too many cylinders (maximum is 16383)", "PCem error", MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
f = fopen64(hd_new_name, "wb");
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd, "Can't open file for write", "PCem error", MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
memset(buf, 0, 512);
|
||||||
|
for (c = 0; c < (hd_new_cyl * hd_new_hpc * hd_new_spt); c++)
|
||||||
|
fwrite(buf, 512, 1, f);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
MessageBox(ghwnd, "Remember to partition and format the new drive", "PCem", MB_OK);
|
||||||
|
|
||||||
|
EndDialog(hdlg, 1);
|
||||||
|
return TRUE;
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hdlg, 0);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_CFILE:
|
||||||
|
if (!getsfile(hdlg, "Hard disc image (*.IMG)\0*.IMG\0All files (*.*)\0*.*\0", ""))
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDITC);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)openfilestring);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_EDIT1: case IDC_EDIT2: case IDC_EDIT3:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT1);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT2);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT3);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].tracks);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT1);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CALLBACK hdsize_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
char s[260];
|
||||||
|
HWND h;
|
||||||
|
PcemHDC hd[2];
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT1);
|
||||||
|
sprintf(s, "%i", hd_new_spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT2);
|
||||||
|
sprintf(s, "%i", hd_new_hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT3);
|
||||||
|
sprintf(s, "%i", hd_new_cyl);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
case IDOK:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT1);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd_new_spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT2);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd_new_hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT3);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd_new_cyl);
|
||||||
|
|
||||||
|
if (hd_new_spt > 63)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd,"Drive has too many sectors (maximum is 63)","PCem error",MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (hd_new_hpc > 128)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd,"Drive has too many heads (maximum is 128)","PCem error",MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (hd_new_cyl > 16383)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd,"Drive has too many cylinders (maximum is 16383)","PCem error",MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
EndDialog(hdlg,1);
|
||||||
|
return TRUE;
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hdlg,0);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_EDIT1: case IDC_EDIT2: case IDC_EDIT3:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT1);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT2);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT3);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].tracks);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT1);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL CALLBACK hdconf_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
char s[260];
|
||||||
|
HWND h;
|
||||||
|
PcemHDC hd[2];
|
||||||
|
FILE *f;
|
||||||
|
off64_t sz;
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
pause = 1;
|
||||||
|
hd[0] = hdc[0];
|
||||||
|
hd[1] = hdc[1];
|
||||||
|
hd_changed = 0;
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_SPT);
|
||||||
|
sprintf(s, "%i", hdc[0].spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_HPC);
|
||||||
|
sprintf(s, "%i", hdc[0].hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_CYL);
|
||||||
|
sprintf(s, "%i", hdc[0].tracks);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_FN);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)ide_fn[0]);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_SPT);
|
||||||
|
sprintf(s, "%i", hdc[1].spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_HPC);
|
||||||
|
sprintf(s, "%i", hdc[1].hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_CYL);
|
||||||
|
sprintf(s, "%i", hdc[1].tracks);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h= GetDlgItem(hdlg, IDC_EDIT_D_FN);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)ide_fn[1]);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT_C_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd[0].tracks*(uint64_t)hd[0].hpc)*(uint64_t)hd[0].spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT_D_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd[1].tracks*(uint64_t)hd[1].hpc)*(uint64_t)hd[1].spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case IDOK:
|
||||||
|
if (hd_changed)
|
||||||
|
{
|
||||||
|
if (MessageBox(NULL, "This will reset PCem!\nOkay to continue?", "PCem", MB_OKCANCEL) == IDOK)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_SPT);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_HPC);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_CYL);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].tracks);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_FN);
|
||||||
|
SendMessage(h, WM_GETTEXT, 511, (LPARAM)ide_fn[0]);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_SPT);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[1].spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_HPC);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[1].hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_CYL);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[1].tracks);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_FN);
|
||||||
|
SendMessage(h, WM_GETTEXT, 511, (LPARAM)ide_fn[1]);
|
||||||
|
|
||||||
|
hdc[0] = hd[0];
|
||||||
|
hdc[1] = hd[1];
|
||||||
|
|
||||||
|
saveconfig();
|
||||||
|
|
||||||
|
resetpchard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case IDCANCEL:
|
||||||
|
EndDialog(hdlg, 0);
|
||||||
|
pause = 0;
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_EJECTC:
|
||||||
|
hd[0].spt = 0;
|
||||||
|
hd[0].hpc = 0;
|
||||||
|
hd[0].tracks = 0;
|
||||||
|
ide_fn[0][0] = 0;
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_C_SPT, "0");
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_C_HPC, "0");
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_C_CYL, "0");
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_C_FN, "");
|
||||||
|
hd_changed = 1;
|
||||||
|
return TRUE;
|
||||||
|
case IDC_EJECTD:
|
||||||
|
hd[1].spt = 0;
|
||||||
|
hd[1].hpc = 0;
|
||||||
|
hd[1].tracks = 0;
|
||||||
|
ide_fn[1][0] = 0;
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_D_SPT, "0");
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_D_HPC, "0");
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_D_CYL, "0");
|
||||||
|
SetDlgItemText(hdlg, IDC_EDIT_D_FN, "");
|
||||||
|
hd_changed = 1;
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_CNEW:
|
||||||
|
if (DialogBox(hinstance, TEXT("HdNewDlg"), hdlg, hdnew_dlgproc) == 1)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_SPT);
|
||||||
|
sprintf(s, "%i", hd_new_spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_CYL);
|
||||||
|
sprintf(s, "%i", hd_new_hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_CYL);
|
||||||
|
sprintf(s, "%i", hd_new_cyl);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_FN);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)hd_new_name);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT_C_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
hd_changed = 1;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_CFILE:
|
||||||
|
if (!getfile(hdlg, "Hard disc image (*.IMG)\0*.IMG\0All files (*.*)\0*.*\0", ""))
|
||||||
|
{
|
||||||
|
f = fopen64(openfilestring, "rb");
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd,"Can't open file for read","PCem error",MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
fseeko64(f, -1, SEEK_END);
|
||||||
|
sz = ftello64(f) + 1;
|
||||||
|
fclose(f);
|
||||||
|
hd_new_spt = 63;
|
||||||
|
hd_new_hpc = 16;
|
||||||
|
hd_new_cyl = ((sz / 512) / 16) / 63;
|
||||||
|
|
||||||
|
if (DialogBox(hinstance, TEXT("HdSizeDlg"), hdlg, hdsize_dlgproc) == 1)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_SPT);
|
||||||
|
sprintf(s, "%i", hd_new_spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_HPC);
|
||||||
|
sprintf(s, "%i", hd_new_hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_CYL);
|
||||||
|
sprintf(s, "%i", hd_new_cyl);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_FN);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)openfilestring);
|
||||||
|
|
||||||
|
h= GetDlgItem(hdlg, IDC_TEXT_C_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
hd_changed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_DNEW:
|
||||||
|
if (DialogBox(hinstance, TEXT("HdNewDlg"), hdlg, hdnew_dlgproc) == 1)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_SPT);
|
||||||
|
sprintf(s, "%i", hd_new_spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_HPC);
|
||||||
|
sprintf(s, "%i", hd_new_hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_CYL);
|
||||||
|
sprintf(s, "%i", hd_new_cyl);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_FN);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)hd_new_name);
|
||||||
|
|
||||||
|
h= GetDlgItem(hdlg, IDC_TEXT_D_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
hd_changed = 1;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_DFILE:
|
||||||
|
if (!getfile(hdlg, "Hard disc image (*.IMG)\0*.IMG\0All files (*.*)\0*.*\0", ""))
|
||||||
|
{
|
||||||
|
f = fopen64(openfilestring, "rb");
|
||||||
|
if (!f)
|
||||||
|
{
|
||||||
|
MessageBox(ghwnd,"Can't open file for read","PCem error",MB_OK);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
fseeko64(f, -1, SEEK_END);
|
||||||
|
sz = ftello64(f) + 1;
|
||||||
|
fclose(f);
|
||||||
|
hd_new_spt = 63;
|
||||||
|
hd_new_hpc = 16;
|
||||||
|
hd_new_cyl = ((sz / 512) / 16) / 63;
|
||||||
|
|
||||||
|
if (DialogBox(hinstance, TEXT("HdSizeDlg"), hdlg, hdsize_dlgproc) == 1)
|
||||||
|
{
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_SPT);
|
||||||
|
sprintf(s, "%i", hd_new_spt);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_HPC);
|
||||||
|
sprintf(s, "%i", hd_new_hpc);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_CYL);
|
||||||
|
sprintf(s, "%i", hd_new_cyl);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_FN);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)openfilestring);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT_D_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", (((((uint64_t)hd_new_cyl*(uint64_t)hd_new_hpc)*(uint64_t)hd_new_spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
|
||||||
|
hd_changed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_EDIT_C_SPT: case IDC_EDIT_C_HPC: case IDC_EDIT_C_CYL:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_SPT);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_HPC);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_C_CYL);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[0].tracks);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT_C_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", ((((hd[0].tracks*hd[0].hpc)*hd[0].spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case IDC_EDIT_D_SPT: case IDC_EDIT_D_HPC: case IDC_EDIT_D_CYL:
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_SPT);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[1].spt);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_HPC);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[1].hpc);
|
||||||
|
h = GetDlgItem(hdlg, IDC_EDIT_D_CYL);
|
||||||
|
SendMessage(h, WM_GETTEXT, 255, (LPARAM)s);
|
||||||
|
sscanf(s, "%i", &hd[1].tracks);
|
||||||
|
|
||||||
|
h = GetDlgItem(hdlg, IDC_TEXT_D_SIZE);
|
||||||
|
sprintf(s, "Size : %imb", ((((hd[1].tracks*hd[1].hpc)*hd[1].spt)*512)/1024)/1024);
|
||||||
|
SendMessage(h, WM_SETTEXT, 0, (LPARAM)s);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hdconf_open(HWND hwnd)
|
||||||
|
{
|
||||||
|
DialogBox(hinstance, TEXT("HdConfDlg"), hwnd, hdconf_dlgproc);
|
||||||
|
}
|
||||||
66
src/win-status.c
Normal file
66
src/win-status.c
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
#define BITMAP WINDOWS_BITMAP
|
||||||
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
|
#undef BITMAP
|
||||||
|
|
||||||
|
#include "ibm.h"
|
||||||
|
#include "video.h"
|
||||||
|
#include "resources.h"
|
||||||
|
#include "win.h"
|
||||||
|
|
||||||
|
HWND status_hwnd;
|
||||||
|
int status_is_open = 0;
|
||||||
|
|
||||||
|
extern int sreadlnum, swritelnum, segareads, segawrites, scycles_lost;
|
||||||
|
|
||||||
|
static BOOL CALLBACK status_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
char s[256];
|
||||||
|
char device_s[4096];
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
status_is_open = 1;
|
||||||
|
case WM_USER:
|
||||||
|
sprintf(device_s,
|
||||||
|
"CPU speed : %f MIPS\n"
|
||||||
|
"FPU speed : %f MFLOPS\n\n"
|
||||||
|
"Cache misses (read) : %i/sec\n"
|
||||||
|
"Cache misses (write) : %i/sec\n\n"
|
||||||
|
"Video throughput (read) : %i bytes/sec\n\n"
|
||||||
|
"Video throughput (write) : %i bytes/sec\n\n"
|
||||||
|
"Effective clockspeed : %iHz\n\n"
|
||||||
|
"Timer 0 frequency : %fHz\n\n",
|
||||||
|
mips,
|
||||||
|
flops,
|
||||||
|
sreadlnum,
|
||||||
|
swritelnum,
|
||||||
|
segareads,
|
||||||
|
segawrites,
|
||||||
|
clockrate - (sreadlnum*memwaitstate) - (swritelnum*memwaitstate) - scycles_lost,
|
||||||
|
pit_timer0_freq()
|
||||||
|
);
|
||||||
|
|
||||||
|
device_add_status_info(device_s, 4096);
|
||||||
|
SendDlgItemMessage(hdlg, IDC_STEXT_DEVICE, WM_SETTEXT, (WPARAM)NULL, (LPARAM)device_s);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case IDOK:
|
||||||
|
case IDCANCEL:
|
||||||
|
status_is_open = 0;
|
||||||
|
EndDialog(hdlg, 0);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void status_open(HWND hwnd)
|
||||||
|
{
|
||||||
|
status_hwnd = CreateDialog(hinstance, TEXT("StatusDlg"), hwnd, status_dlgproc);
|
||||||
|
ShowWindow(status_hwnd, SW_SHOW);
|
||||||
|
}
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
int BPS_TO_TIMER(int a)
|
|
||||||
{
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
void install_int_ex(void (*rout)(), int a)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
16
src/win.h
16
src/win.h
|
|
@ -14,3 +14,19 @@ void leave_fullscreen();
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void status_open(HWND hwnd);
|
||||||
|
extern HWND status_hwnd;
|
||||||
|
extern int status_is_open;
|
||||||
|
|
||||||
|
void hdconf_open(HWND hwnd);
|
||||||
|
|
||||||
|
void config_open(HWND hwnd);
|
||||||
|
|
||||||
|
extern char openfilestring[260];
|
||||||
|
|
||||||
|
int getfile(HWND hwnd, char *f, char *fn);
|
||||||
|
int getsfile(HWND hwnd, char *f, char *fn);
|
||||||
|
|
||||||
|
extern int pause;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue