From 822dad0fa081f2e49e07cfc81838776547eb13f1 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 10 Nov 2012 21:27:38 +0200 Subject: [PATCH] 2500b25 --- ar.cpp | 10 +- cfgfile.cpp | 4 +- custom.cpp | 11 ++- drawing.cpp | 8 ++ hardfile.cpp | 30 ++++-- include/ar.h | 2 +- include/custom.h | 2 +- include/filesys.h | 2 + include/uae.h | 7 +- main.cpp | 16 ++-- newcpu.cpp | 19 ++-- od-win32/bsdsock.cpp | 28 +++--- od-win32/direct3d.cpp | 58 ++++++++---- od-win32/hardfile_win32.cpp | 6 +- od-win32/lib/prowizard.lib | Bin 1139948 -> 1205192 bytes od-win32/lib/prowizard_x64.lib | Bin 1377178 -> 1377138 bytes od-win32/resources/resource.h | 1 + od-win32/resources/winuae.rc | 52 ++++++----- od-win32/rp.cpp | 20 ++-- od-win32/rp.h | 1 + od-win32/win32.h | 6 +- od-win32/win32gfx.cpp | 4 +- od-win32/win32gui.cpp | 161 ++++++++++++++++++++------------ od-win32/win32gui_extra.cpp | 94 ++++++++++++------- od-win32/winuaechangelog.txt | 10 ++ prowizard/rippers/AC1D_packer.c | 40 ++++---- 26 files changed, 373 insertions(+), 219 deletions(-) mode change 100644 => 100755 od-win32/resources/resource.h mode change 100644 => 100755 od-win32/resources/winuae.rc diff --git a/ar.cpp b/ar.cpp index a25e3313..d15c5f2f 100644 --- a/ar.cpp +++ b/ar.cpp @@ -911,7 +911,7 @@ static void hide_cart (int hide) { #ifdef ACTION_REPLAY_HIDE_CARTRIDGE if(hide) { - ;//action_replay_unmap_banks (); + action_replay_unmap_banks (); } else { action_replay_map_banks (); } @@ -927,7 +927,7 @@ static void hide_cart (int hide) static void action_replay_go (void) { - write_log (_T("AR GO %d\n"), armode); + //write_log (_T("AR GO %d\n"), armode); cartridge_enter(); hide_cart (0); memcpy (armemory_ram + 0xf000, ar_custom, 2 * 256); @@ -1080,7 +1080,7 @@ void check_prefs_changed_carts (int in_memory_reset) } } -void action_replay_reset (bool hardreset) +void action_replay_reset (bool hardreset, bool keyboardreset) { if (hrtmemory) { if (isrestore ()) { @@ -1111,7 +1111,7 @@ void action_replay_reset (bool hardreset) write_log_debug (_T("Setting flag to ACTION_REPLAY_WAITRESET (%d)\n"), hardreset); write_log_debug (_T("armode == %d\n"), armode); action_replay_flag = ACTION_REPLAY_WAITRESET; - if (hardreset) + if (hardreset || keyboardreset || armodel == 2) action_replay_hardreset = true; hide_cart (0); } @@ -1156,7 +1156,7 @@ int action_replay_freeze (void) static void action_replay_chipwrite (void) { - write_log (_T("AR CW\n")); + //write_log (_T("AR CW\n")); if (armodel == 2 || armodel == 3) { action_replay_flag = ACTION_REPLAY_DORESET; set_special (SPCFLAG_ACTION_REPLAY); diff --git a/cfgfile.cpp b/cfgfile.cpp index 7331922c..0d3e2a23 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -2186,7 +2186,7 @@ struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index, int cyls, int secspertrack, int surfaces, int reserved, int blocksize, int bootpri, const TCHAR *filesysdir, int hdc, int flag, - int pcyls, int psecs, int pheads) + int pcyls, int pheads, int psecs) { struct uaedev_config_info *uci; int i; @@ -2223,6 +2223,8 @@ struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index, uci->bootpri = bootpri; uci->donotmount = 0; uci->autoboot = 0; + if (!pcyls || !pheads || !psecs) + pcyls = pheads = psecs = 0; uci->pcyls = pcyls; uci->pheads = pheads; uci->psecs = psecs; diff --git a/custom.cpp b/custom.cpp index e047aefb..e59d8e38 100644 --- a/custom.cpp +++ b/custom.cpp @@ -4977,6 +4977,13 @@ static void compute_spcflag_copper (int hpos) hpos = maxhpos_short & ~1; cop_state.hpos = hpos; } + + // if COPJMPx was written while DMA was disabled, advance to next state, + // COP_strobe_extra is single cycle only and does not need free bus. + // (copper state emulation does not run if DMA is disabled) + if (!wasenabled && cop_state.state == COP_strobe_extra) + cop_state.state = COP_strobe_delay1; + copper_enabled_thisline = 1; set_special (SPCFLAG_COPPER); } @@ -6580,7 +6587,7 @@ void custom_prepare (void) hsync_handler_post (true); } -void custom_reset (int hardreset) +void custom_reset (bool hardreset, bool keyboardreset) { int i; int zero = 0; @@ -6764,7 +6771,7 @@ void custom_reset (int hardreset) #ifdef ACTION_REPLAY /* Doing this here ensures we can use the 'reset' command from within AR */ - action_replay_reset (hardreset != 0); + action_replay_reset (hardreset, keyboardreset); #endif #if defined(ENFORCER) enforcer_disable (); diff --git a/drawing.cpp b/drawing.cpp index 19aae919..d383f459 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -415,9 +415,17 @@ int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) ret = -1; if (interlace_seen) { + static int interlace_count; // interlace = only use long frames + if (lof_store && (interlace_count & 1) == 0) + interlace_count++; + if (!lof_store && (interlace_count & 1) != 0) + interlace_count++; + if (interlace_count < 3) + return ret; if (!lof_store) return ret; + interlace_count = 0; /* program may have set last visible line as last possible line (CD32 boot screen) */ if (last_planes_vpos < maxvpos) last_planes_vpos++; diff --git a/hardfile.cpp b/hardfile.cpp index 32800cfe..3415d052 100644 --- a/hardfile.cpp +++ b/hardfile.cpp @@ -134,7 +134,7 @@ static void getchs2 (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, *head = heads; } -static void getchs (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, int *tracksec) +static void getchsx (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, int *tracksec) { getchs2 (hfd, cyl, cylsec, head, tracksec); hf_log (_T("CHS: %08X-%08X %d %d %d %d %d\n"), @@ -228,20 +228,32 @@ void getchsgeometry_hdf (struct hardfiledata *hfd, uae_u64 size, int *pcyl, int getchsgeometry2 (size, pcyl, phead, psectorspertrack, 2); } -static void getchshd (struct hardfiledata *hfd, int *pcyl, int *phead, int *psectorspertrack) +void getchspgeometry (uae_u64 total, int *pcyl, int *phead, int *psectorspertrack, bool idegeometry) { - uae_u64 total = hfd->virtsize / 512; + uae_u64 blocks = total / 512; - if (total > 16515072) { + if (blocks > 16515072) { /* >8G, CHS=16383/16/63 */ *pcyl = 16383; *phead = 16; *psectorspertrack = 63; return; } - getchsgeometry (hfd->virtsize, pcyl, phead, psectorspertrack); + if (idegeometry) { + *phead = 16; + *psectorspertrack = 63; + *pcyl = blocks / ((*psectorspertrack) * (*phead)); + return; + } + getchsgeometry (total, pcyl, phead, psectorspertrack); } +static void getchshd (struct hardfiledata *hfd, int *pcyl, int *phead, int *psectorspertrack) +{ + getchspgeometry (hfd->virtsize, pcyl, phead, psectorspertrack, false); +} + + static void pl (uae_u8 *p, int off, uae_u32 v) { p += off * 4; @@ -1170,7 +1182,7 @@ int scsi_emulate (struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u tracksec = hdhfd->secspertrack; cylsec = 0; } else { - getchs (hfd, &cyl, &cylsec, &head, &tracksec); + getchsx (hfd, &cyl, &cylsec, &head, &tracksec); } //write_log (_T("MODE SENSE PC=%d CODE=%d DBD=%d\n"), pc, pcode, dbd); p = r; @@ -1236,7 +1248,7 @@ int scsi_emulate (struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u tracksec = hdhfd->secspertrack; cylsec = 0; } else { - getchs (hfd, &cyl, &cylsec, &head, &tracksec); + getchsx (hfd, &cyl, &cylsec, &head, &tracksec); } if (pmi == 0 && lba != 0) goto errreq; @@ -1770,7 +1782,7 @@ no_disk: case CMD_GETNUMTRACKS: { int cyl, cylsec, head, tracksec; - getchs (hfd, &cyl, &cylsec, &head, &tracksec); + getchsx (hfd, &cyl, &cylsec, &head, &tracksec); actual = cyl * head; break; } @@ -1779,7 +1791,7 @@ no_disk: { int cyl, cylsec, head, tracksec; uae_u64 size; - getchs (hfd, &cyl, &cylsec, &head, &tracksec); + getchsx (hfd, &cyl, &cylsec, &head, &tracksec); put_long (dataptr + 0, hfd->blocksize); size = hfd->virtsize / hfd->blocksize; if (size > 0x00ffffffff) diff --git a/include/ar.h b/include/ar.h index b6c2ef2e..0a272e52 100644 --- a/include/ar.h +++ b/include/ar.h @@ -36,7 +36,7 @@ extern int is_ar_pc_in_ram(void); extern void action_replay_enter (void); extern void action_replay_ciaread (void); extern void action_replay_hide (void); -extern void action_replay_reset (bool hardreset); +extern void action_replay_reset (bool hardreset, bool keyboardreset); extern int action_replay_load (void); extern int action_replay_unload (int in_memory_reset); diff --git a/include/custom.h b/include/custom.h index 9c1b5203..83a7d2aa 100644 --- a/include/custom.h +++ b/include/custom.h @@ -22,7 +22,7 @@ uae_u32 get_copper_address (int copno); extern int custom_init (void); extern void custom_prepare (void); -extern void custom_reset (int hardreset); +extern void custom_reset (bool hardreset, bool keyboardreset); extern int intlev (void); extern void dumpcustom (void); diff --git a/include/filesys.h b/include/filesys.h index 27c4c9fe..d73ceddc 100644 --- a/include/filesys.h +++ b/include/filesys.h @@ -143,3 +143,5 @@ extern int hdf_write_target (struct hardfiledata *hfd, void *buffer, uae_u64 off extern int hdf_resize_target (struct hardfiledata *hfd, uae_u64 newsize); extern void getchsgeometry (uae_u64 size, int *pcyl, int *phead, int *psectorspertrack); extern void getchsgeometry_hdf (struct hardfiledata *hfd, uae_u64 size, int *pcyl, int *phead, int *psectorspertrack); +extern void getchspgeometry (uae_u64 total, int *pcyl, int *phead, int *psectorspertrack, bool idegeometry); + diff --git a/include/uae.h b/include/uae.h index f890e8a0..2180d22e 100644 --- a/include/uae.h +++ b/include/uae.h @@ -18,9 +18,14 @@ extern void sleep_millis_main (int ms); extern void sleep_millis_busy (int ms); extern int sleep_resolution; +#define UAE_QUIT 1 +#define UAE_RESET 2 +#define UAE_RESET_KEYBOARD 3 +#define UAE_RESET_HARD 4 + extern void uae_reset (int, int); extern void uae_quit (void); -extern void uae_restart (int, TCHAR*); +extern void uae_restart (int, const TCHAR*); extern void reset_all_systems (void); extern void target_reset (void); extern void target_addtorecent (const TCHAR*, int); diff --git a/main.cpp b/main.cpp index 518862a5..66b564ed 100644 --- a/main.cpp +++ b/main.cpp @@ -522,9 +522,11 @@ void uae_reset (int hardreset, int keyboardreset) currprefs.quitstatefile[0] = changed_prefs.quitstatefile[0] = 0; if (quit_program == 0) { - quit_program = -2; + quit_program = -UAE_RESET; + if (keyboardreset) + quit_program = -UAE_RESET_KEYBOARD; if (hardreset) - quit_program = -3; + quit_program = -UAE_RESET_HARD; } } @@ -532,13 +534,13 @@ void uae_reset (int hardreset, int keyboardreset) void uae_quit (void) { deactivate_debugger (); - if (quit_program != -1) - quit_program = -1; + if (quit_program != -UAE_QUIT) + quit_program = -UAE_QUIT; target_quit (); } /* 0 = normal, 1 = nogui, -1 = disable nogui */ -void uae_restart (int opengui, TCHAR *cfgfile) +void uae_restart (int opengui, const TCHAR *cfgfile) { uae_quit (); restart_program = opengui > 0 ? 1 : (opengui == 0 ? 2 : 3); @@ -795,7 +797,7 @@ extern int DummyException (LPEXCEPTION_POINTERS blah, int n_except) void do_start_program (void) { - if (quit_program == -1) + if (quit_program == -UAE_QUIT) return; if (!canbang && candirect < 0) candirect = 0; @@ -804,7 +806,7 @@ void do_start_program (void) /* Do a reset on startup. Whether this is elegant is debatable. */ inputdevice_updateconfig (&currprefs); if (quit_program >= 0) - quit_program = 2; + quit_program = UAE_RESET; #if (defined (_WIN32) || defined (_WIN64)) && !defined (NO_WIN32_EXCEPTION_HANDLER) extern int EvalException (LPEXCEPTION_POINTERS blah, int n_except); __try diff --git a/newcpu.cpp b/newcpu.cpp index f1a606df..301c69b6 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -4405,14 +4405,15 @@ void m68k_go (int may_quit) if (currprefs.inprecfile[0] && input_play) { inprec_open (currprefs.inprecfile, NULL); changed_prefs.inprecfile[0] = currprefs.inprecfile[0] = 0; - quit_program = 2; + quit_program = UAE_RESET; } if (input_play || input_record) inprec_startup (); if (quit_program > 0) { - int hardreset = (quit_program == 3 ? 1 : 0) | hardboot; - if (quit_program == 1) + int hardreset = (quit_program == UAE_RESET_HARD ? 1 : 0) | hardboot; + bool kbreset = quit_program == UAE_RESET_KEYBOARD; + if (quit_program == UAE_QUIT) break; int restored = 0; @@ -4430,7 +4431,7 @@ void m68k_go (int may_quit) savestate_rewind (); #endif set_cycles (start_cycles); - custom_reset (hardreset); + custom_reset (hardreset != 0, kbreset); m68k_reset (hardreset); if (hardreset) { memory_clear (); @@ -5481,7 +5482,7 @@ void cpureset (void) send_internalevent (INTERNALEVENT_CPURESET); if ((currprefs.cpu_compatible || currprefs.cpu_cycle_exact) && currprefs.cpu_model <= 68020) { - custom_reset (0); + custom_reset (false, false); return; } pc = m68k_getpc (); @@ -5489,11 +5490,11 @@ void cpureset (void) addrbank *b = &get_mem_bank (pc); if (b->check (pc, 2 + 2)) { /* We have memory, hope for the best.. */ - custom_reset (0); + custom_reset (false, false); return; } write_log (_T("M68K RESET PC=%x, rebooting..\n"), pc); - custom_reset (0); + custom_reset (false, false); m68k_setpc (ksboot); return; } @@ -5503,14 +5504,14 @@ void cpureset (void) int reg = ins & 7; uae_u32 addr = m68k_areg (regs, reg); write_log (_T("reset/jmp (ax) combination emulated -> %x\n"), addr); - custom_reset (0); + custom_reset (false, false); if (addr < 0x80000) addr += 0xf80000; m68k_setpc (addr - 2); return; } write_log (_T("M68K RESET PC=%x, rebooting..\n"), pc); - custom_reset (0); + custom_reset (false, false); m68k_setpc (ksboot); } diff --git a/od-win32/bsdsock.cpp b/od-win32/bsdsock.cpp index 17264948..b38dbbaa 100644 --- a/od-win32/bsdsock.cpp +++ b/od-win32/bsdsock.cpp @@ -618,7 +618,7 @@ int host_socket(TrapContext *context, SB, int af, int type, int protocol) sb->ftable[sd-1] = SF_BLOCKING; ioctlsocket(s,FIONBIO,&nonblocking); - BSDTRACE((_T(" -> Socket=%d\n"),sd)); + BSDTRACE((_T(" -> Socket=%d %x\n"),sd,s)); if (type == SOCK_RAW) { if (protocol==IPPROTO_UDP) { @@ -1694,7 +1694,7 @@ int host_CloseSocket(TrapContext *context, SB, int sd) // For the sake of efficiency, we do not malloc() the fd_sets here. // 64 sockets should be enough for everyone. -static void makesocktable(SB, uae_u32 fd_set_amiga, struct fd_set *fd_set_win, int nfds, SOCKET addthis) +static void makesocktable(SB, uae_u32 fd_set_amiga, struct fd_set *fd_set_win, int nfds, SOCKET addthis, const TCHAR *name) { int i, j; uae_u32 currlong, mask; @@ -1731,6 +1731,7 @@ static void makesocktable(SB, uae_u32 fd_set_amiga, struct fd_set *fd_set_win, i s = getsock(sb,j+i+1); if (s != INVALID_SOCKET) { + BSDTRACE((_T("%s:%d=%x\n"), name, fd_set_win->fd_count, s)); fd_set_win->fd_array[fd_set_win->fd_count++] = s; if (fd_set_win->fd_count >= FD_SETSIZE) { @@ -1808,11 +1809,11 @@ static unsigned int thread_WaitSelect2(void *indexp) wscnt = args->wscnt; // construct descriptor tables - makesocktable(sb, readfds, &readsocks, nfds, sb->sockAbort); + makesocktable(sb, readfds, &readsocks, nfds, sb->sockAbort, _T("R")); if (writefds) - makesocktable(sb, writefds, &writesocks, nfds, INVALID_SOCKET); + makesocktable(sb, writefds, &writesocks, nfds, INVALID_SOCKET, _T("W")); if (exceptfds) - makesocktable(sb, exceptfds, &exceptsocks, nfds, INVALID_SOCKET); + makesocktable(sb, exceptfds, &exceptsocks, nfds, INVALID_SOCKET, _T("E")); if (timeout) { tv.tv_sec = get_long (timeout); @@ -1822,8 +1823,11 @@ static unsigned int thread_WaitSelect2(void *indexp) BSDTRACE((_T("tWS2(%d) -> "), wscnt)); - resultval = select(nfds+1, &readsocks, writefds ? &writesocks : NULL, - exceptfds ? &exceptsocks : NULL, timeout ? &tv : 0); + resultval = select(nfds+1, + readsocks.fd_count > 0 ? &readsocks : NULL, + writefds && writesocks.fd_count > 0 ? &writesocks : NULL, + exceptfds && exceptsocks.fd_count > 0 ? &exceptsocks : NULL, + timeout ? &tv : NULL); if (bsd->hEvents[index] == NULL) break; @@ -1836,7 +1840,7 @@ static unsigned int thread_WaitSelect2(void *indexp) if (sb->resultval == SOCKET_ERROR) { // select was stopped by sb->sockAbort if (readsocks.fd_count > 1) { - makesocktable(sb, readfds, &readsocks, nfds, INVALID_SOCKET); + makesocktable(sb, readfds, &readsocks, nfds, INVALID_SOCKET, _T("R2")); tv.tv_sec = 0; tv.tv_usec = 10000; // Check for 10ms if data is available @@ -1932,11 +1936,11 @@ void host_WaitSelect(TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, ua wssigs = sigmp ? get_long (sigmp) : 0; - BSDTRACE((_T("WaitSelect(%d,0x%x,0x%x,0x%x,0x%x,0x%x):%d "), + BSDTRACE((_T("WaitSelect(%d,0x%x,0x%x,0x%x,0x%x,0x%x):%d\n"), nfds, readfds, writefds, exceptfds, timeout, wssigs, wscnt)); - fddebug(_T("read"), nfds, readfds); - fddebug(_T("write"), nfds, writefds); - fddebug(_T("except"), nfds, exceptfds); + fddebug(_T("read :"), nfds, readfds); + fddebug(_T("write :"), nfds, writefds); + fddebug(_T("except:"), nfds, exceptfds); if (!readfds && !writefds && !exceptfds && !timeout && !wssigs) { sb->resultval = 0; diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index 0d1007f4..e74b4c31 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -45,6 +45,8 @@ static int psEnabled, psActive, psPreProcess, shaderon; static bool showoverlay = true; +#define MAX_PASSES 2 + static D3DFORMAT tformat; static int d3d_enabled, d3d_ex; static IDirect3D9 *d3d; @@ -61,7 +63,7 @@ static int masktexture_w, masktexture_h; static float mask2texture_w, mask2texture_h, mask2texture_ww, mask2texture_wh; static float mask2texture_wwx, mask2texture_hhx, mask2texture_minusx, mask2texture_minusy; static float mask2texture_multx, mask2texture_multy, mask2texture_offsetw; -static LPDIRECT3DTEXTURE9 lpWorkTexture1, lpWorkTexture2, lpTempTexture; +static LPDIRECT3DTEXTURE9 lpWorkTexture1[2], lpWorkTexture2[2], lpTempTexture; LPDIRECT3DTEXTURE9 cursorsurfaced3d; static LPDIRECT3DVOLUMETEXTURE9 lpHq2xLookupTexture; static IDirect3DVertexBuffer9 *vertexBuffer; @@ -75,6 +77,7 @@ RECT mask2rect; static bool wasstilldrawing_broken; static bool renderdisabled; static HANDLE filenotificationhandle; +static int extrapasses; static bool fakemode; static uae_u8 *fakebitmap; @@ -1093,6 +1096,20 @@ static LPDIRECT3DTEXTURE9 createtext (int w, int h, D3DFORMAT format) static int worktex_width, worktex_height; +static int allocextratextures (int index, int w, int h) +{ + HRESULT hr; + if (FAILED (hr = d3ddev->CreateTexture (w, h, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpWorkTexture1[index], NULL))) { + write_log (_T("%s: Failed to create temp texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); + return 0; + } + if (FAILED (hr = d3ddev->CreateTexture (w, h, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpWorkTexture2[index], NULL))) { + write_log (_T("%s: Failed to create working texture2: %s\n"), D3DHEAD, D3D_ErrorString (hr)); + return 0; + } + return 1; +} + static int createamigatexture (int w, int h) { HRESULT hr; @@ -1103,14 +1120,8 @@ static int createamigatexture (int w, int h) write_log (_T("%s: %d*%d texture allocated, bits per pixel %d\n"), D3DHEAD, w, h, t_depth); if (psActive) { D3DLOCKED_BOX lockedBox; - if (FAILED (hr = d3ddev->CreateTexture (w, h, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpWorkTexture1, NULL))) { - write_log (_T("%s: Failed to create temp texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); + if (!allocextratextures (0, w, h)) return 0; - } - if (FAILED (hr = d3ddev->CreateTexture (w, h, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpWorkTexture2, NULL))) { - write_log (_T("%s: Failed to create working texture2: %s\n"), D3DHEAD, D3D_ErrorString (hr)); - return 0; - } if (FAILED (hr = lpHq2xLookupTexture->LockBox (0, &lockedBox, NULL, 0))) { write_log (_T("%s: Failed to lock box of volume texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); return 0; @@ -1143,6 +1154,10 @@ static int createtexture (int ow, int oh, int win_w, int win_h) texelsize.x = 1.0f / w; texelsize.y = 1.0f / h; texelsize.z = 1; texelsize.w = 1; if (psActive) { + if (extrapasses) { + if (!allocextratextures (1, w, h)) + return 0; + } if (FAILED (hr = d3ddev->CreateVolumeTexture (256, 16, 256, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpHq2xLookupTexture, NULL))) { write_log (_T("%s: Failed to create volume texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); return 0; @@ -1803,13 +1818,15 @@ static void freetextures (void) lpTempTexture->Release (); lpTempTexture = NULL; } - if (lpWorkTexture1) { - lpWorkTexture1->Release (); - lpWorkTexture1 = NULL; - } - if (lpWorkTexture2) { - lpWorkTexture2->Release (); - lpWorkTexture2 = NULL; + for (int i = 0; i < MAX_PASSES; i++) { + if (lpWorkTexture1[i]) { + lpWorkTexture1[i]->Release (); + lpWorkTexture1[i] = NULL; + } + if (lpWorkTexture2[i]) { + lpWorkTexture2[i]->Release (); + lpWorkTexture2[i] = NULL; + } } if (lpHq2xLookupTexture) { lpHq2xLookupTexture->Release (); @@ -2558,7 +2575,7 @@ static void D3D_render2 (void) LPDIRECT3DTEXTURE9 lpWorkTexture; settransform (); - if (!psEffect_SetTextures (texture, lpWorkTexture1, lpWorkTexture2, lpHq2xLookupTexture)) + if (!psEffect_SetTextures (texture, lpWorkTexture1[0], lpWorkTexture2[0], lpHq2xLookupTexture)) return; if (psPreProcess) { if (!psEffect_SetMatrices (&m_matPreProj, &m_matPreView, &m_matPreWorld)) @@ -2566,7 +2583,7 @@ static void D3D_render2 (void) if (FAILED (hr = d3ddev->GetRenderTarget (0, &lpRenderTarget))) write_log (_T("%s: GetRenderTarget: %s\n"), D3DHEAD, D3D_ErrorString (hr)); - lpWorkTexture = lpWorkTexture1; + lpWorkTexture = lpWorkTexture1[0]; lpNewRenderTarget = NULL; pass2: if (FAILED (hr = lpWorkTexture->GetSurfaceLevel (0, &lpNewRenderTarget))) @@ -2575,7 +2592,7 @@ static void D3D_render2 (void) write_log (_T("%s: SetRenderTarget: %s\n"), D3DHEAD, D3D_ErrorString (hr)); uPasses = 0; - if (psEffect_Begin (pEffect, (lpWorkTexture == lpWorkTexture1) ? psEffect_PreProcess1 : psEffect_PreProcess2, &uPasses)) { + if (psEffect_Begin (pEffect, (lpWorkTexture == lpWorkTexture1[0]) ? psEffect_PreProcess1 : psEffect_PreProcess2, &uPasses)) { for (uPass = 0; uPass < uPasses; uPass++) { if (psEffect_BeginPass (pEffect, uPass)) { if (FAILED (hr = d3ddev->DrawPrimitive (D3DPT_TRIANGLESTRIP, 4, 2))) { @@ -2590,8 +2607,8 @@ static void D3D_render2 (void) write_log (_T("%s: Effect RenderTarget reset failed: %s\n"), D3DHEAD, D3D_ErrorString (hr)); lpNewRenderTarget->Release (); lpNewRenderTarget = NULL; - if (psEffect_hasPreProcess2 () && lpWorkTexture == lpWorkTexture1) { - lpWorkTexture = lpWorkTexture2; + if (psEffect_hasPreProcess2 () && lpWorkTexture == lpWorkTexture1[0]) { + lpWorkTexture = lpWorkTexture2[0]; goto pass2; } lpRenderTarget->Release (); @@ -2631,6 +2648,7 @@ static void D3D_render2 (void) } } + #if TWOPASS if (shaderon > 0 && postEffect) { diff --git a/od-win32/hardfile_win32.cpp b/od-win32/hardfile_win32.cpp index 93ecb77a..e76f9375 100644 --- a/od-win32/hardfile_win32.cpp +++ b/od-win32/hardfile_win32.cpp @@ -56,6 +56,7 @@ struct uae_driveinfo { int nomedia; int dangerous; int readonly; + int cylinders, sectors, heads; }; #define HDF_HANDLE_WIN32 1 @@ -988,7 +989,7 @@ static void generatestorageproperty (struct uae_driveinfo *udi, int ignoreduplic { _tcscpy (udi->vendor_id, _T("UAE")); _tcscpy (udi->product_id, _T("DISK")); - _tcscpy (udi->product_rev, _T("1.1")); + _tcscpy (udi->product_rev, _T("1.2")); _stprintf (udi->device_name, _T("%s"), udi->device_path); udi->removablemedia = 1; } @@ -1226,6 +1227,9 @@ static BOOL GetDevicePropertyFromName(const TCHAR *DevicePath, DWORD Index, DWOR dg.BytesPerSector, dg.Cylinders.QuadPart, dg.TracksPerCylinder, dg.SectorsPerTrack, dg.MediaType); udi->size = (uae_u64)dg.BytesPerSector * (uae_u64)dg.Cylinders.QuadPart * (uae_u64)dg.TracksPerCylinder * (uae_u64)dg.SectorsPerTrack; + udi->cylinders = dg.Cylinders.QuadPart > 65535 ? 0 : dg.Cylinders.LowPart; + udi->sectors = dg.SectorsPerTrack; + udi->heads = dg.TracksPerCylinder; } if (gli_ok) udi->size = gli.Length.QuadPart; diff --git a/od-win32/lib/prowizard.lib b/od-win32/lib/prowizard.lib index 48c358c8b176a77ac70f4d26dba0aa051f935984..9bb893f181f4c114a1a6309ef65f8911af5cab3f 100644 GIT binary patch delta 191898 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�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 diff --git a/od-win32/lib/prowizard_x64.lib b/od-win32/lib/prowizard_x64.lib index b9716ade9da873b7e81acd9f8a169daeb33bfb3c..6b286d3a47f94d1017fbcb218684d68fec647df5 100644 GIT binary patch delta 11737 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 GhWsycD}(s} delta 11983 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 Cg3TlV diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h old mode 100644 new mode 100755 index 0a989cf8..8689c90b --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -1056,6 +1056,7 @@ #define IDC_DBG_DASM2 1781 #define IDC_HF_DYNAMIC 1781 #define IDC_DBG_MEM2 1782 +#define IDC_HDFINFO2 1782 #define IDC_DBG_MEMINPUT2 1783 #define IDC_DBG_ADDRINPUTTXT 1784 #define IDC_RTG_SCALE 1785 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc old mode 100644 new mode 100755 index 8b4e476d..702bcc9a --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -528,13 +528,13 @@ BEGIN CONTROL "USB mode",IDC_KBLED_USB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,298,64,11 END -IDD_HARDFILE DIALOGEX 0, 0, 396, 245 +IDD_HARDFILE DIALOGEX 0, 0, 396, 263 STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES CAPTION "Hardfile Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "Settings",IDC_STATIC,2,5,392,146 + GROUPBOX "Settings",IDC_STATIC,2,2,392,164 RTEXT "Path:",IDC_HARDFILE_DIR_TEXT,25,18,22,10 EDITTEXT IDC_PATH_NAME,52,15,325,15,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_SELECTOR,380,14,11,15 @@ -560,17 +560,18 @@ BEGIN RTEXT "Block size:",IDC_BLOCKSIZE_TEXT,261,113,50,10 EDITTEXT IDC_BLOCKSIZE,317,111,40,15,ES_NUMBER EDITTEXT IDC_HDFINFO,5,131,385,12,ES_CENTER | ES_READONLY - GROUPBOX "New hard disk image file",IDC_STATIC,2,155,392,62 - PUSHBUTTON "Create",IDC_HF_CREATE,58,171,80,14 - COMBOBOX IDC_HF_TYPE,58,195,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_HF_SIZE,154,171,61,15,ES_NUMBER - LTEXT "MB",IDC_STATIC,220,174,53,10,SS_CENTERIMAGE - EDITTEXT IDC_HF_DOSTYPE,154,194,61,15 - LTEXT "DOS type",IDC_STATIC,222,196,51,10,SS_CENTERIMAGE - CONTROL "Sparse file",IDC_HF_SPARSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,280,180,87,10 - CONTROL "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,280,192,87,10 - PUSHBUTTON "OK",IDOK,147,226,50,14 - PUSHBUTTON "Cancel",IDCANCEL,203,226,50,14 + GROUPBOX "New hard disk image file",IDC_STATIC,2,171,392,62 + PUSHBUTTON "Create",IDC_HF_CREATE,58,187,80,14 + COMBOBOX IDC_HF_TYPE,58,211,80,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_HF_SIZE,154,187,61,15,ES_NUMBER + LTEXT "MB",IDC_STATIC,220,190,53,10,SS_CENTERIMAGE + EDITTEXT IDC_HF_DOSTYPE,154,210,61,15 + LTEXT "DOS type",IDC_STATIC,222,212,51,10,SS_CENTERIMAGE + CONTROL "Sparse file",IDC_HF_SPARSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,280,196,87,10 + CONTROL "Dynamic HDF",IDC_HF_DYNAMIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,280,208,87,10 + PUSHBUTTON "OK",IDOK,147,242,50,14 + PUSHBUTTON "Cancel",IDCANCEL,203,242,50,14 + EDITTEXT IDC_HDFINFO2,5,147,385,12,ES_CENTER | ES_READONLY END IDD_FILESYS DIALOGEX 15, 25, 396, 111 @@ -625,9 +626,9 @@ BEGIN CONTROL "NTSC [] North American and Japanese display standard, 60Hz refresh rate. Other countries use PAL (50Hz. display refresh rate)",IDC_NTSC, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,47,86,10 CONTROL "Cycle-exact [] The most compatible A500/A1200 emulation mode. Very fast PC recommended.",IDC_CYCLEEXACT, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,25,69,170,10 - RTEXT "Chipset Extra",IDC_STATIC,30,89,71,15,SS_CENTERIMAGE - COMBOBOX IDC_CS_EXT,105,90,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,14,69,170,10 + RTEXT "Chipset Extra:",IDC_STATIC,72,89,71,15,SS_CENTERIMAGE + COMBOBOX IDC_CS_EXT,148,90,49,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "Options",IDC_STATIC,221,0,173,111 CONTROL "Immediate Blitter [] Faster but less compatible blitter emulation.",IDC_BLITIMM, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,234,16,150,10 @@ -804,20 +805,22 @@ BEGIN PUSHBUTTON "Delete",IDC_FILTERPRESETDELETE,325,259,55,14 END -IDD_HARDDRIVE DIALOGEX 0, 0, 396, 74 +IDD_HARDDRIVE DIALOGEX 0, 0, 396, 109 STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Harddrive Settings" FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN LTEXT "Hard drive:",IDC_STATIC,7,11,80,10 COMBOBOX IDC_HARDDRIVE,49,9,339,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,29,115,14 - EDITTEXT IDC_PATH_NAME,183,29,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE - RTEXT "HD Controller:",IDC_STATIC,12,52,65,10,SS_CENTERIMAGE - COMBOBOX IDC_HDF_CONTROLLER,91,51,61,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,52,60,10 - DEFPUSHBUTTON "Add hard drive",IDOK,236,49,73,14 - PUSHBUTTON "Cancel",IDCANCEL,316,49,73,14 + DEFPUSHBUTTON "Create hard disk image file",IDC_HARDDRIVE_IMAGE,49,67,115,14 + EDITTEXT IDC_PATH_NAME,183,67,97,15,ES_AUTOHSCROLL | NOT WS_VISIBLE + RTEXT "HD Controller:",IDC_STATIC,12,90,65,10,SS_CENTERIMAGE + COMBOBOX IDC_HDF_CONTROLLER,91,89,61,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + CONTROL "Read/write",IDC_HDF_RW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,172,90,60,10 + DEFPUSHBUTTON "Add hard drive",IDOK,236,87,73,14 + PUSHBUTTON "Cancel",IDCANCEL,316,87,73,14 + EDITTEXT IDC_HDFINFO,5,29,385,12,ES_CENTER | ES_READONLY + EDITTEXT IDC_HDFINFO2,5,46,385,12,ES_CENTER | ES_READONLY END IDD_MISC2 DIALOGEX 0, 0, 396, 263 @@ -1344,6 +1347,7 @@ BEGIN IDD_HARDDRIVE, DIALOG BEGIN + BOTTOMMARGIN, 108 END IDD_MISC2, DIALOG diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index bc3ab8bd..77f86f1b 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -57,7 +57,7 @@ static int recursive_device, recursive; static int currentpausemode; static int gameportmask[MAX_JPORTS]; static DWORD storeflags; -static bool screenmode_request; +static int screenmode_request; static HWND guestwindow; static int cando (void) @@ -1030,7 +1030,7 @@ static LRESULT CALLBACK RPHostMsgFunction2 (UINT uMessage, WPARAM wParam, LPARAM return 1; case RP_IPC_TO_GUEST_QUERYSCREENMODE: { - screenmode_request = true; + screenmode_request = 1; return 1; } case RP_IPC_TO_GUEST_GUESTAPIVERSION: @@ -1571,6 +1571,12 @@ void rp_set_hwnd (HWND hWnd) RPSendMessagex (RP_IPC_TO_HOST_SCREENMODE, 0, 0, &sm, sizeof sm, &guestinfo, NULL); } +void rp_screenmode_changed (void) +{ + if (!screenmode_request) + screenmode_request = 2; +} + void rp_set_enabledisable (int enabled) { if (!cando ()) @@ -1609,10 +1615,12 @@ void rp_vsync (void) if (!initialized) return; if (screenmode_request) { - struct RPScreenMode sm = { 0 }; - get_screenmode (&sm, &currprefs); - RPSendMessagex (RP_IPC_TO_HOST_SCREENMODE, 0, 0, &sm, sizeof sm, &guestinfo, NULL); - screenmode_request = false; + screenmode_request--; + if (screenmode_request == 0) { + struct RPScreenMode sm = { 0 }; + get_screenmode (&sm, &currprefs); + RPSendMessagex (RP_IPC_TO_HOST_SCREENMODE, 0, 0, &sm, sizeof sm, &guestinfo, NULL); + } } if (magicmouse_alive () != mousemagic) rp_mouse_magic (magicmouse_alive ()); diff --git a/od-win32/rp.h b/od-win32/rp.h index 02e283f5..fe356a75 100644 --- a/od-win32/rp.h +++ b/od-win32/rp.h @@ -16,6 +16,7 @@ extern int rp_isactive (void); extern void rp_vsync (void); extern HWND rp_getparent (void); extern void rp_rtg_switch (void); +extern void rp_screenmode_changed (void); extern TCHAR *rp_param; extern int rp_rpescapekey; diff --git a/od-win32/win32.h b/od-win32/win32.h index af1a44bf..0186ba98 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -19,9 +19,9 @@ #define LANG_DLL 1 //#define WINUAEBETA _T("") -#define WINUAEBETA _T("24") -#define WINUAEDATE MAKEBD(2012, 11, 5) -#define WINUAEEXTRA _T("") +#define WINUAEBETA _T("25") +#define WINUAEDATE MAKEBD(2012, 11, 10) +#define WINUAEEXTRA _T(" RC1") //#define WINUAEEXTRA _T("AmiKit Preview") #define WINUAEREV _T("") diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index cfb0e828..da75c5d5 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -3526,9 +3526,7 @@ static int create_windows_2 (void) write_log (_T("window already open (%dx%d %dx%d)\n"), amigawin_rect.left, amigawin_rect.top, amigawin_rect.right - amigawin_rect.left, amigawin_rect.bottom - amigawin_rect.top); updatemouseclip (); -#ifdef RETROPLATFORM - rp_set_hwnd (hAmigaWnd); -#endif + rp_screenmode_changed (); return 1; } diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index f19c7a7e..94225570 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -91,7 +91,7 @@ #include "rp.h" #endif -#define GUI_SCALE_DEFAULT 90 +#define GUI_SCALE_DEFAULT 100 #define MIN_GUI_INTERNAL_WIDTH 512 #define MIN_GUI_INTERNAL_HEIGHT 400 @@ -8182,9 +8182,9 @@ static INT_PTR MiscDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) v--; v = 110 - v * 10; } - double m = scaleresource_getdpimult (); - gui_width = (int)(GUI_INTERNAL_WIDTH * v * m / 100); - gui_height = (int)(GUI_INTERNAL_HEIGHT * v * m / 100); + //double m = scaleresource_getdpimult (); + gui_width = (int)(GUI_INTERNAL_WIDTH * v / 100); + gui_height = (int)(GUI_INTERNAL_HEIGHT * v / 100); scaleresource_setmult (guiDlg, gui_width, gui_height); gui_size_changed = 1; } @@ -9373,7 +9373,7 @@ static void updatehdfinfo (HWND hDlg, bool force, bool defaults) static uae_u8 id[512]; int blocks, cyls, i; TCHAR tmp[200], tmp2[200]; - TCHAR idtmp[9]; + TCHAR idtmp[17]; bsize = 0; if (force) { @@ -9394,9 +9394,19 @@ static void updatehdfinfo (HWND hDlg, bool force, bool defaults) if (i == 16) hdf_read (&hfd, id, 0, 512); } - if (defaults && current_hfdlg.blocksize * current_hfdlg.sectors * current_hfdlg.surfaces) { - getchsgeometry_hdf (open ? &hfd : NULL, bsize, ¤t_hfdlg.cylinders, ¤t_hfdlg.surfaces, ¤t_hfdlg.sectors); - current_hfdlg.original = 0; + if (defaults) { + if (hfd.flags & HFD_FLAGS_REALDRIVE) { + if (current_hfdlg.controller >= HD_CONTROLLER_IDE0 && current_hfdlg.controller <= HD_CONTROLLER_IDE3) { + getchspgeometry (bsize, ¤t_hfdlg.cylinders, ¤t_hfdlg.surfaces, ¤t_hfdlg.sectors, true); + if (current_hfdlg.forcedcylinders == 0) + current_hfdlg.forcedcylinders = current_hfdlg.cylinders; + } else { + getchspgeometry (bsize, ¤t_hfdlg.cylinders, ¤t_hfdlg.surfaces, ¤t_hfdlg.sectors, false); + } + } else if (current_hfdlg.blocksize * current_hfdlg.sectors * current_hfdlg.surfaces) { + getchsgeometry_hdf (open ? &hfd : NULL, bsize, ¤t_hfdlg.cylinders, ¤t_hfdlg.surfaces, ¤t_hfdlg.sectors); + current_hfdlg.original = 0; + } } hdf_close (&hfd); } @@ -9406,6 +9416,8 @@ static void updatehdfinfo (HWND hDlg, bool force, bool defaults) cyls = bsize / (current_hfdlg.blocksize * current_hfdlg.sectors * current_hfdlg.surfaces); } blocks = cyls * (current_hfdlg.sectors * current_hfdlg.surfaces); + if (!blocks && current_hfdlg.blocksize) + blocks = bsize / current_hfdlg.blocksize; for (i = 0; i < sizeof (idtmp) / sizeof (TCHAR) - 1; i++) { TCHAR c = id[i]; if (c < 32 || c > 126) @@ -9416,22 +9428,29 @@ static void updatehdfinfo (HWND hDlg, bool force, bool defaults) tmp[0] = 0; if (bsize) { - _stprintf (tmp2, _T(" %s [%02X%02X%02X%02X%02X%02X%02X%02X]"), idtmp, id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]); - if (!cyls || !blocks) { + _stprintf (tmp2, _T(" %s [%02X%02X%02X%02X %02X%02X%02X%02X %02X%02X%02X%02X %02X%02X%02X%02X]"), idtmp, + id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7], + id[8], id[9], id[10], id[11], id[12], id[13], id[14], id[15]); + if (!blocks) { _stprintf (tmp, _T("%dMB"), bsize / (1024 * 1024)); + } else if (blocks && !cyls) { + _stprintf (tmp, _T("%u blocks, %.1fMB"), + blocks, + (double)bsize / (1024.0 * 1024.0)); } else { - _stprintf (tmp, _T("%u cyls, %u blocks, %.1fMB/%.1fMB"), - cyls, blocks, + _stprintf (tmp, _T("%u/%u/%u, %u/%u blocks, %.1fMB/%.1fMB"), + cyls, current_hfdlg.surfaces, current_hfdlg.sectors, + blocks, (int)(bsize / 512), (double)blocks * 1.0 * current_hfdlg.blocksize / (1024.0 * 1024.0), (double)bsize / (1024.0 * 1024.0)); if (cyls > 65535) { - _stprintf (tmp2, _T(" %4.4s [%02X%02X%02X%02X]"), idtmp, id[0], id[1], id[2], id[3]); - _tcscat (tmp, _T(" [Too many cyls]")); + _tcscat (tmp2, _T(" [Too many cyls]")); } } - _tcscat (tmp, tmp2); - if (hDlg != NULL) + if (hDlg != NULL) { SetDlgItemText (hDlg, IDC_HDFINFO, tmp); + SetDlgItemText (hDlg, IDC_HDFINFO2, tmp2); + } } } @@ -9674,25 +9693,6 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara if (recursive) break; recursive++; - posn = SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_GETCURSEL, 0, 0); - if (oposn != posn && posn != CB_ERR) { - oposn = posn; - if (posn >= 0) { - BOOL ena ; - int dang = 1; - hdf_getnameharddrive (posn, 1, NULL, &dang); - ena = dang >= 0; - ew (hDlg, IDC_HARDDRIVE_IMAGE, ena); - ew (hDlg, IDOK, ena); - ew (hDlg, IDC_HDF_RW, !dang); - if (dang) - current_hfdlg.rw = FALSE; - ew (hDlg, IDC_HDF_CONTROLLER, ena); - hardfile_testrdb (hDlg, ¤t_hfdlg); - SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_SETCURSEL, current_hfdlg.controller, 0); - CheckDlgButton(hDlg, IDC_HDF_RW, current_hfdlg.rw); - } - } if (HIWORD (wParam) == BN_CLICKED) { switch (LOWORD (wParam)) { case IDOK: @@ -9702,17 +9702,58 @@ static INT_PTR CALLBACK HarddriveSettingsProc (HWND hDlg, UINT msg, WPARAM wPara EndDialog (hDlg, 0); break; case IDC_HARDDRIVE_IMAGE: + posn = SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_GETCURSEL, 0, 0); if (posn != CB_ERR) harddrive_to_hdf (hDlg, &workprefs, posn); break; + case IDC_HDF_RW: + posn = SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_GETCURSEL, 0, 0); + if (posn != CB_ERR) { + int dang = 1; + hdf_getnameharddrive (posn, 1, NULL, &dang); + current_hfdlg.rw = ischecked (hDlg, IDC_HDF_RW) && !dang; + } + break; + } + } + if (LOWORD (wParam) == IDC_HARDDRIVE) { + posn = SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_GETCURSEL, 0, 0); + if (oposn != posn && posn != CB_ERR) { + oposn = posn; + if (posn >= 0) { + BOOL ena; + int dang = 1; + hdf_getnameharddrive (posn, 1, NULL, &dang); + _tcscpy (current_hfdlg.filename, hdf_getnameharddrive (posn, 0, NULL, &dang)); + ena = dang >= 0; + ew (hDlg, IDC_HARDDRIVE_IMAGE, ena); + ew (hDlg, IDOK, ena); + ew (hDlg, IDC_HDF_RW, !dang); + if (dang) + current_hfdlg.rw = FALSE; + current_hfdlg.blocksize = 512; + current_hfdlg.forcedcylinders = 0; + current_hfdlg.cylinders = current_hfdlg.sectors = current_hfdlg.surfaces = 0; + ew (hDlg, IDC_HDF_CONTROLLER, ena); + SetDlgItemText (hDlg, IDC_HDFINFO, _T("")); + SetDlgItemText (hDlg, IDC_HDFINFO2, _T("")); + updatehdfinfo (hDlg, true, true); + SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_SETCURSEL, current_hfdlg.controller, 0); + CheckDlgButton(hDlg, IDC_HDF_RW, current_hfdlg.rw); + _tcscpy (current_hfdlg.filename, hdf_getnameharddrive ((int)posn, 0, ¤t_hfdlg.blocksize, NULL)); + } + } + } else if (LOWORD (wParam) == IDC_HDF_CONTROLLER) { + posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_GETCURSEL, 0, 0); + if (posn != CB_ERR) { + current_hfdlg.controller = posn; + current_hfdlg.forcedcylinders = 0; + current_hfdlg.cylinders = current_hfdlg.sectors = current_hfdlg.surfaces = 0; + SetDlgItemText (hDlg, IDC_HDFINFO, _T("")); + SetDlgItemText (hDlg, IDC_HDFINFO2, _T("")); + updatehdfinfo (hDlg, true, true); } } - if (posn != CB_ERR) - _tcscpy (current_hfdlg.filename, hdf_getnameharddrive ((int)posn, 0, ¤t_hfdlg.blocksize, NULL)); - current_hfdlg.rw = ischecked (hDlg, IDC_HDF_RW); - posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER, CB_GETCURSEL, 0, 0); - if (posn != CB_ERR) - current_hfdlg.controller = posn; recursive--; break; } @@ -9768,7 +9809,7 @@ static void new_harddrive (HWND hDlg, int entry) uci = add_filesys_config (&workprefs, entry, 0, 0, current_hfdlg.filename, ! current_hfdlg.rw, 0, 0, 0, 0, current_hfdlg.blocksize, 0, 0, current_hfdlg.controller, 0, - 0, 0, 0); + current_hfdlg.forcedcylinders, current_hfdlg.surfaces, current_hfdlg.sectors); if (uci) hardfile_do_disk_change (uci, 1); } @@ -14563,9 +14604,9 @@ static void getguisize (HWND hDlg, int *width, int *height) { RECT r; - GetClientRect (hDlg, &r); - *width = r.right; - *height = r.bottom; + GetWindowRect (hDlg, &r); + *width = r.right - r.left; + *height = r.bottom - r.top; } static HWND updatePanel (int id) @@ -15208,7 +15249,7 @@ static INT_PTR CALLBACK DialogProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l if (dialogreturn < 0) { dialogreturn = 0; if (allow_quit) { - quit_program = 1; + quit_program = UAE_QUIT; regs.spcflags |= SPCFLAG_BRK; } } @@ -15288,7 +15329,7 @@ static INT_PTR CALLBACK DialogProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l dialogreturn = 0; DestroyWindow (hDlg); if (allow_quit) { - quit_program = 1; + quit_program = UAE_QUIT; regs.spcflags |= SPCFLAG_BRK; } guiDlg = NULL; @@ -15499,8 +15540,8 @@ static void blah(void) static void setdefaultguisize (void) { - gui_width = GUI_INTERNAL_WIDTH * 90 / 100; - gui_height = GUI_INTERNAL_HEIGHT * 90 / 100; + gui_width = GUI_INTERNAL_WIDTH * 100 / 100; + gui_height = GUI_INTERNAL_HEIGHT * 100 / 100; } static int GetSettings (int all_options, HWND hwnd) @@ -15587,10 +15628,6 @@ static int GetSettings (int all_options, HWND hwnd) } if (!regexists) { scaleresource_setdefaults (); - setdefaultguisize (); - double m = scaleresource_getdpimult (); - gui_width = (int)(gui_width * m); - gui_height = (int)(gui_height * m); fmultx = 0; write_log (_T("GUI default size\n")); regsetint (NULL, _T("GUIResize"), 0); @@ -15612,16 +15649,16 @@ static int GetSettings (int all_options, HWND hwnd) if (first) write_log (_T("Entering GUI idle loop\n")); - if (fmultx > 0) { + if (fmultx > 0) scaleresource_setmult (hwnd, -fmultx, -fmulty); - } else { + else scaleresource_setmult (hwnd, gui_width, gui_height); - write_log (_T("Requested GUI size = %dx%d (%dx%d)\n"), gui_width, gui_height, workprefs.gfx_size.width, workprefs.gfx_size.height); - if (dodialogmousemove () && isfullscreen() > 0) { - if (gui_width >= workprefs.gfx_size.width || gui_height >= workprefs.gfx_size.height) { - write_log (_T("GUI larger than screen, resize disabled\n")); - gui_resize_allowed = false; - } + fmultx = 0; + write_log (_T("Requested GUI size = %dx%d (%dx%d)\n"), gui_width, gui_height, workprefs.gfx_size.width, workprefs.gfx_size.height); + if (dodialogmousemove () && isfullscreen() > 0) { + if (gui_width >= workprefs.gfx_size.width || gui_height >= workprefs.gfx_size.height) { + write_log (_T("GUI larger than screen, resize disabled\n")); + gui_resize_allowed = false; } } @@ -15649,7 +15686,6 @@ static int GetSettings (int all_options, HWND hwnd) break; } - setguititle (dhwnd); ShowWindow (dhwnd, SW_SHOW); MapDialogRect (dhwnd, &dialog_rect); @@ -15666,6 +15702,7 @@ static int GetSettings (int all_options, HWND hwnd) WaitMessage(); } dialogmousemove (dhwnd); + while ((v = PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))) { if (dialogreturn >= 0) break; diff --git a/od-win32/win32gui_extra.cpp b/od-win32/win32gui_extra.cpp index eca82a00..07608e5c 100644 --- a/od-win32/win32gui_extra.cpp +++ b/od-win32/win32gui_extra.cpp @@ -404,18 +404,63 @@ void scaleresource_setdefaults (void) openfont (true); } -static int lpx, lpy; +#define BASEMULT 1000 +static int baseunitx, baseunity; +static RECT baserect, baseclientrect; +static int baseborderwidth, baseborderheight; +static int basewidth, baseheight; +static int baseclientwidth, baseclientheight; + +static INT_PTR CALLBACK TestProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + if (msg == WM_INITDIALOG) { + RECT r; + // there really is no better way? + r.left = 0; + r.top = 0; + r.bottom = BASEMULT; + r.right = BASEMULT; + MapDialogRect (hDlg, &r); + baseunitx = r.right * 4 / BASEMULT; + baseunity = r.bottom * 8 / BASEMULT; + GetWindowRect (hDlg, &baserect); + GetClientRect (hDlg, &baseclientrect); + } + return 0; +} -double scaleresource_getdpimult (void) +// horrible or what? +static void getbaseunits (void) { - HDC hdc = GetDC (NULL); - int m = GetDeviceCaps (hdc, LOGPIXELSY); - ReleaseDC (NULL, hdc); - if (m > 96) { - m -= 96; - return 1.0 + m / 250.0; + struct newresource *nr, *nr2; + HWND hwnd; + + nr = getresource (IDD_PANEL); + if (!nr) { + write_log (_T("getbaseunits fail\n")); + abort(); + } + multx = multy = 100; + nr2 = scaleresource (nr, NULL, -1); + hwnd = CreateDialogIndirect (nr2->inst, nr2->resource, NULL, TestProc); + if (hwnd) { + DestroyWindow(hwnd); + } else { + baserect.left = baserect.top = 0; + baserect.right = 800; + baserect.bottom = 600; + baseclientrect.left = baseclientrect.top = 0; + baseclientrect.right = 800; + baseclientrect.bottom = 600; } - return 1.0; + freescaleresource (nr2); + freescaleresource (nr); + basewidth = baserect.right - baserect.left; + baseheight = baserect.bottom - baserect.top; + baseclientwidth = baseclientrect.right - baseclientrect.left; + baseclientheight = baseclientrect.bottom - baseclientrect.top; + baseborderwidth = basewidth - baseclientwidth; + baseborderheight = baseheight - baseclientheight; } void scaleresource_init (const TCHAR *prefix) @@ -425,11 +470,6 @@ void scaleresource_init (const TCHAR *prefix) fontprefix = prefix; - HDC hdc = GetDC (NULL); - lpx = GetDeviceCaps (hdc, LOGPIXELSX); - lpy = GetDeviceCaps (hdc, LOGPIXELSY); - ReleaseDC (NULL, hdc); - setdeffont (); regqueryfont (NULL, fontprefix, fontreg[0], fontname_gui, &fontsize_gui, &fontstyle_gui, &fontweight_gui); @@ -438,9 +478,12 @@ void scaleresource_init (const TCHAR *prefix) //write_log (_T("GUI font %s:%d:%d:%d\n"), fontname_gui, fontsize_gui, fontstyle_gui, fontweight_gui); //write_log (_T("List font %s:%d:%d:%d\n"), fontname_list, fontsize_list, fontstyle_list, fontweight_list); + getbaseunits (); + openfont (true); } +#if 0 static void sizefont (HWND hDlg, const TCHAR *name, int size, int style, int weight, int *width, int *height) { /* ARGH!!! */ @@ -465,35 +508,18 @@ static void sizefont (HWND hDlg, const TCHAR *name, int size, int style, int wei } ReleaseDC (hDlg, hdc); } +#endif void scaleresource_setmult (HWND hDlg, int w, int h) { - int width, height, width2, height2; - if (w < 0) { multx = -w; multy = -h; return; } - int cy = GetSystemMetrics (SM_CYSIZEFRAME); - int cx = GetSystemMetrics (SM_CXSIZEFRAME); - int caption = GetSystemMetrics (SM_CYCAPTION); - - sizefont (hDlg, fontname_gui, fontsize_gui, fontstyle_gui, fontweight_gui, &width, &height); - sizefont (hDlg, wfont_old, 8, REGULAR_FONTTYPE, FW_REGULAR, &width2, &height2); - - int yy = cy * 2 + caption; - int xx = cx * 2; - - w += xx; - h += yy; - - multx = (w * width2) * 100.0 / (GUI_INTERNAL_WIDTH * width); - multy = (h * height2) * 100.0 / (GUI_INTERNAL_HEIGHT * height); - - multx = MulDiv (multx, 96, lpx); - multy = MulDiv (multy, 96, lpy); + multx = w * 100.0 / basewidth; + multy = h * 100.0 / baseheight; if (multx < 50) multx = 50; diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 2d565259..bf1435b1 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,6 +1,16 @@ - restore only single input target to default. +Beta 25 RC1: + +- Switching to interlaced mode and autoscale enabled: don't calculate new size until 2 frames have been drawn to prevent multiple display size changes. +- More accurate GUI resizing algorithm. +- Show also first few bytes of disk in harddrive selection GUI. +- Add real harddrive as IDE: calculate physical CHS values using H=16,S=63,C=total blocks/(H*S) formula to better match with real hardware. + (ROM built-in IDE drivers use IDE identify device CHS values to calculate last accessible block of drive, LBA support was added in ROM updates) +- Action Replay 2 copper list detection code hang tweak. +- Prowizard AC1D update (Asle) + Beta 24: - CDFS: ACTION_DISK_INFO no disk status really works now. diff --git a/prowizard/rippers/AC1D_packer.c b/prowizard/rippers/AC1D_packer.c index 6924504e..b582f851 100644 --- a/prowizard/rippers/AC1D_packer.c +++ b/prowizard/rippers/AC1D_packer.c @@ -1,5 +1,5 @@ -/* testAC1D() */ -/* Rip_AC1D() */ +/* testAC1D() */ +/* Rip_AC1D() */ /* Depack_AC1D() */ #include "globals.h" @@ -9,13 +9,17 @@ short testAC1D ( void ) { /* test #1 */ - /* if ( PW_i<2 )*/ + /* if ( PW_i<2 )*/ if ( test_1_start(2) == BAD ) return BAD; - /* test #2 */ + /* test #2 + * 20121104 - testing also if the pattern list isn't empty + */ PW_Start_Address = PW_i-2; - if ( (in_data[PW_Start_Address] > 0x7f) || ((PW_Start_Address+896)>PW_in_size) ) + if ( (in_data[PW_Start_Address] > 0x7f) || + (in_data[PW_Start_Address] == 0x00) || + ((PW_Start_Address+896)>PW_in_size) ) { return BAD; } @@ -58,22 +62,22 @@ void Rip_AC1D ( void ) Save_Rip ( "AC1D Packed module", AC1D_packer ); if ( Save_Status == GOOD ) - PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */ + PW_i += (OutputSize - 4); /* 3 should do but call it "just to be sure" :) */ } /* - * ac1d.c 1996-1997 (c) Asle / ReDoX - * - * Converts AC1D packed MODs back to PTK MODs - * thanks to Gryzor and his ProWizard tool ! ... without it, this prog - * would not exist !!! - * - * Last update: 30/11/99 - * - removed open() (and other fread()s and the like) - * - general Speed & Size Optmizings - * 20051002 : testing fopen() ... +* ac1d.c 1996-1997 (c) Asle / ReDoX +* +* Converts AC1D packed MODs back to PTK MODs +* thanks to Gryzor and his ProWizard tool ! ... without it, this prog +* would not exist !!! +* +* Last update: 30/11/99 +* - removed open() (and other fread()s and the like) +* - general Speed & Size Optmizings +* 20051002 : testing fopen() ... */ void Depack_AC1D ( void ) { @@ -240,11 +244,11 @@ void Depack_AC1D ( void ) fwrite ( &in_data[Where] , WholeSampleSize , 1 , out ); /* crap ... */ - Crap ( " AC1D Packer " , BAD , BAD , out ); + Crap ( " AC1D Packer " , BAD , BAD , out ); fflush ( out ); fclose ( out ); printf ( "done\n" ); return; /* useless ... but */ -} +} \ No newline at end of file -- 2.47.3